OpenCores
URL https://opencores.org/ocsvn/tinyvliw8/tinyvliw8/trunk

Subversion Repositories tinyvliw8

[/] [tinyvliw8/] [trunk/] [testbench/] [lib/] [tb_rom32bit.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 steckol
library STD;
2
use std.textio.all;
3
 
4
library IEEE;
5
use IEEE.std_logic_1164.all;
6
use ieee.std_logic_textio.all;
7
use ieee.std_logic_unsigned.all;
8
use ieee.std_logic_arith.all;
9
 
10
entity lib_tb_rom32bit is
11
        generic ( fileName : string );
12
        port (
13
                signal addr    : in std_logic_vector(10 downto 0);
14
                signal dataOut : out std_logic_vector(31 downto 0);
15
                signal en_n    : in std_logic
16
        );
17
end lib_tb_rom32bit;
18
 
19
 
20
architecture beh of lib_tb_rom32bit is
21
 
22
        subtype word is std_logic_vector(31 downto 0);
23
        type memory is array (0 to ((2**11) - 1)) of word;
24
 
25
        signal rom32bit : memory := ((others => (others => '0')));
26
 
27
        function string_to_slv (s: string) return std_logic_vector is
28
                variable slv: std_logic_vector(((s'length * 4) - 1) downto 0);
29
                variable v: std_logic_vector(3 downto 0);
30
                variable k: integer;
31
        begin
32
                k := s'length;
33
                for i in s'range loop
34
                    case s(i) is
35
                                when '0' => v := "0000";
36
                                when '1' => v := "0001";
37
                                when '2' => v := "0010";
38
                                when '3' => v := "0011";
39
                                when '4' => v := "0100";
40
                                when '5' => v := "0101";
41
                                when '6' => v := "0110";
42
                                when '7' => v := "0111";
43
                                when '8' => v := "1000";
44
                                when '9' => v := "1001";
45
                                when 'a' => v := "1010";
46
                                when 'b' => v := "1011";
47
                                when 'c' => v := "1100";
48
                                when 'd' => v := "1101";
49
                                when 'e' => v := "1110";
50
                                when 'f' => v := "1111";
51
                                when others => v:= "XXXX";
52
                        end case;
53
 
54
                        slv(((4 * k) - 1) downto (4 * (k - 1))) := v;
55
                        k := k - 1;
56
                end loop;
57
 
58
                return slv;
59
        end string_to_slv;
60
 
61
begin
62
        initRom : process
63
                variable romAddrIn : integer range 0 to ((2**11) - 1);
64
                variable startUp : boolean := true;
65
 
66
                file filePtr : text;
67
 
68
                variable lineNum : line;
69
                variable lineText : string(1 to 16);
70
                variable hdrText  : string(1 to 3);
71
 
72
                variable loadField : std_logic_vector(7 downto 0);
73
                variable loadAddr  : std_logic_vector(15 downto 0);
74
        begin
75
                if (startUp = true) then
76
                        file_open(filePtr, fileName, READ_MODE);
77
                        while (not endfile(filePtr)) loop
78
                                readline(filePtr, lineNum);
79
                                read(lineNum, hdrText);
80
 
81
                                loadField := string_to_slv(hdrText(2 to 3));
82
                                if (loadField = x"04") then
83
                                        read(lineNum, lineText);
84
 
85
                                        loadAddr := string_to_slv(lineText(1 to 4));
86
                                        romAddrIn := conv_integer(loadAddr(10 downto 0));
87
 
88
                                        rom32bit(romAddrIn) <= string_to_slv(lineText(7 to 14));
89
                                end if;
90
 
91
                                wait for 5 ns;
92
                        end loop;
93
 
94
                        file_close(filePtr);
95
 
96
                        startUp := false;
97
                else
98
                        wait;
99
                end if;
100
        end process;
101
 
102
        readRom : process(en_n)
103
                variable romAddrIn : integer range 0 to ((2**11) - 1);
104
        begin
105
                if (en_n = '0') then
106
                        romAddrIn := conv_integer(addr);
107
                        dataOut <= rom32bit(romAddrIn) after 7 ns;
108
                else
109
                        dataOut <= (others => 'X');
110
                end if;
111
        end process;
112
 
113
end beh;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.