2 use ieee.std_logic_1164.all;
6 use work.wishbone_types.all;
11 architecture behave of icache_tb is
12 signal clk : std_ulogic;
13 signal rst : std_ulogic;
15 signal i_out : Fetch1ToIcacheType;
16 signal i_in : IcacheToFetch2Type;
18 signal wb_bram_in : wishbone_master_out;
19 signal wb_bram_out : wishbone_slave_out;
21 constant clk_period : time := 10 ns;
23 icache0: entity work.icache
34 wishbone_out => wb_bram_in,
35 wishbone_in => wb_bram_out
39 bram0: entity work.mw_soc_memory
42 RAM_INIT_FILE => "icache_test.bin"
47 wishbone_in => wb_bram_in,
48 wishbone_out => wb_bram_out
54 wait for clk_period/2;
56 wait for clk_period/2;
62 wait for 2*clk_period;
70 i_out.nia <= (others => '0');
71 i_out.stop_mark <= '0';
73 wait for 4*clk_period;
76 i_out.nia <= x"0000000000000004";
78 wait for 30*clk_period;
80 assert i_in.valid = '1';
81 assert i_in.insn = x"00000001"
82 report "insn @" & to_hstring(i_out.nia) &
83 "=" & to_hstring(i_in.insn) &
93 i_out.nia <= x"0000000000000008";
95 assert i_in.valid = '1';
96 assert i_in.insn = x"00000002"
97 report "insn @" & to_hstring(i_out.nia) &
98 "=" & to_hstring(i_in.insn) &
105 i_out.nia <= x"0000000000000040";
107 wait for 30*clk_period;
109 assert i_in.valid = '1';
110 assert i_in.insn = x"00000010"
111 report "insn @" & to_hstring(i_out.nia) &
112 "=" & to_hstring(i_in.insn) &
116 -- test something that aliases
118 i_out.nia <= x"0000000000000100";
120 assert i_in.valid = '0';
123 wait for 30*clk_period;
125 assert i_in.valid = '1';
126 assert i_in.insn = x"00000040"
127 report "insn @" & to_hstring(i_out.nia) &
128 "=" & to_hstring(i_in.insn) &
134 assert false report "end of test" severity failure;