2 USE ieee.std_logic_1164.ALL;
3 USE ieee.numeric_std.all;
8 ENTITY lx_rocon_top_tb IS
11 ARCHITECTURE behavior OF lx_rocon_top_tb IS
13 -- Component Declaration for the Unit Under Test (UUT)
15 COMPONENT lx_rocon_top
17 --clk_cpu : IN std_logic;
18 clk_50m : IN std_logic;
19 cs0_xc : IN std_logic;
21 bls : IN std_logic_vector(3 downto 0);
22 address : IN std_logic_vector(15 downto 0);
23 data : INOUT std_logic_vector(31 downto 0);
24 irc0_a : IN std_logic;
25 irc0_b : IN std_logic;
26 irc0_index : IN std_logic;
27 irc0_mark : IN std_logic;
28 irc1_a : IN std_logic;
29 irc1_b : IN std_logic;
30 irc1_index : IN std_logic;
31 irc1_mark : IN std_logic;
32 irc2_a : IN std_logic;
33 irc2_b : IN std_logic;
34 irc2_index : IN std_logic;
35 irc2_mark : IN std_logic;
36 irc3_a : IN std_logic;
37 irc3_b : IN std_logic;
38 irc3_index : IN std_logic;
39 irc3_mark : IN std_logic;
40 irc4_a : IN std_logic;
41 irc4_b : IN std_logic;
42 irc4_index : IN std_logic;
43 irc4_mark : IN std_logic;
44 irc5_a : IN std_logic;
45 irc5_b : IN std_logic;
46 irc5_index : IN std_logic;
47 irc5_mark : IN std_logic;
48 irc6_a : IN std_logic;
49 irc6_b : IN std_logic;
50 irc6_index : IN std_logic;
51 irc6_mark : IN std_logic;
52 irc7_a : IN std_logic;
53 irc7_b : IN std_logic;
54 irc7_index : IN std_logic;
55 irc7_mark : IN std_logic;
57 s1_clk_in : IN std_logic;
58 s1_miso : IN std_logic;
59 s1_sync_in : IN std_logic;
60 s1_clk_out : OUT std_logic;
61 s1_mosi : OUT std_logic;
62 s1_sync_out : OUT std_logic
68 --signal clk_cpu : std_logic := '0';
69 signal clk_50m : std_logic := '0';
70 signal cs0_xc : std_logic := '1';
71 signal rd : std_logic := '1';
72 signal bls : std_logic_vector(3 downto 0) := (others => '1');
73 signal address : std_logic_vector(15 downto 0) := (others => '0');
74 signal irc0_a : std_logic := '0';
75 signal irc0_b : std_logic := '0';
76 signal irc0_index : std_logic := '0';
77 signal irc0_mark : std_logic := '0';
78 signal irc1_a : std_logic := '0';
79 signal irc1_b : std_logic := '0';
80 signal irc1_index : std_logic := '0';
81 signal irc1_mark : std_logic := '0';
82 signal irc2_a : std_logic := '0';
83 signal irc2_b : std_logic := '0';
84 signal irc2_index : std_logic := '0';
85 signal irc2_mark : std_logic := '0';
86 signal irc3_a : std_logic := '0';
87 signal irc3_b : std_logic := '0';
88 signal irc3_index : std_logic := '0';
89 signal irc3_mark : std_logic := '0';
90 signal irc4_a : std_logic := '0';
91 signal irc4_b : std_logic := '0';
92 signal irc4_index : std_logic := '0';
93 signal irc4_mark : std_logic := '0';
94 signal irc5_a : std_logic := '0';
95 signal irc5_b : std_logic := '0';
96 signal irc5_index : std_logic := '0';
97 signal irc5_mark : std_logic := '0';
98 signal irc6_a : std_logic := '0';
99 signal irc6_b : std_logic := '0';
100 signal irc6_index : std_logic := '0';
101 signal irc6_mark : std_logic := '0';
102 signal irc7_a : std_logic := '0';
103 signal irc7_b : std_logic := '0';
104 signal irc7_index : std_logic := '0';
105 signal irc7_mark : std_logic := '0';
106 signal init : std_logic := '1';
107 signal s1_clk_in : std_logic := '1';
108 signal s1_miso : std_logic := '1';
109 signal s1_sync_in : std_logic := '1';
112 signal s1_clk_out : std_logic := '1';
113 signal s1_mosi : std_logic := '1';
114 signal s1_sync_out : std_logic := '1';
117 signal data : std_logic_vector(31 downto 0);
119 -- Clock period definitions
120 --constant clk_period_cpu : time := 13.8 ns;
121 constant clk_period_50m : time := 20 ns;
125 -- Instantiate the Unit Under Test (UUT)
126 uut: lx_rocon_top PORT MAP (
127 --clk_cpu => clk_cpu,
136 irc0_index => irc0_index,
137 irc0_mark => irc0_mark,
140 irc1_index => irc1_index,
141 irc1_mark => irc1_mark,
144 irc2_index => irc2_index,
145 irc2_mark => irc2_mark,
148 irc3_index => irc3_index,
149 irc3_mark => irc3_mark,
152 irc4_index => irc4_index,
153 irc4_mark => irc4_mark,
156 irc5_index => irc5_index,
157 irc5_mark => irc5_mark,
160 irc6_index => irc6_index,
161 irc6_mark => irc6_mark,
164 irc7_index => irc7_index,
165 irc7_mark => irc7_mark,
167 s1_clk_in => s1_clk_in,
169 s1_sync_in => s1_sync_in,
170 s1_clk_out => s1_clk_out,
172 s1_sync_out => s1_sync_out
175 -- Clock process definitions
176 -- clk_cpu_process :process
179 -- wait for clk_period_cpu/2;
181 -- wait for clk_period_cpu/2;
184 clk_50m_process :process
187 wait for clk_period_50m/2;
189 wait for clk_period_50m/2;
196 -- External ModelSim script
201 setup_imem_process : process
202 file imem_file : text open READ_MODE is "imem.bits";
203 variable my_line : LINE;
204 variable bits_line : LINE;
205 variable mem_location : bit_vector(31 downto 0);
206 variable imem_fill_addr : natural range 0 to 2**8-1 := 0;
209 -- Assert ROCON system reset for 3 clock cycles
210 wait until clk_50m'event and clk_50m = '1';
212 wait until clk_50m'event and clk_50m = '1';
213 wait until clk_50m'event and clk_50m = '1';
214 wait until clk_50m'event and clk_50m = '1';
217 -- Fill Tumbl instruction memory
218 fill_loop: while not endfile(imem_file) loop
219 wait until clk_50m'event and clk_50m = '1';
223 wait until clk_50m'event and clk_50m = '1';
224 address <= std_logic_vector(to_unsigned(imem_fill_addr, 16));
225 readline(imem_file, bits_line);
226 read(bits_line, mem_location);
227 data <= to_stdLogicVector(mem_location);
230 imem_fill_addr := imem_fill_addr + 1;
231 wait until clk_50m'event and clk_50m = '1';
232 wait until clk_50m'event and clk_50m = '1';
238 -- Negate Tumbl reset state in Tumbl control register
239 wait until clk_50m'event and clk_50m = '1';
240 wait until clk_50m'event and clk_50m = '1';
245 wait until clk_50m'event and clk_50m = '1';
246 wait until clk_50m'event and clk_50m = '1';
251 -- Simulate external master accesses to Tumbl shared xmem bus
253 wait until clk_50m'event and clk_50m = '1';
254 wait until clk_50m'event and clk_50m = '1';
258 wait until clk_50m'event and clk_50m = '1';
259 wait until clk_50m'event and clk_50m = '1';
260 wait until clk_50m'event and clk_50m = '1';