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 : Fetch2ToIcacheType;
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
33 wishbone_out => wb_bram_in,
34 wishbone_in => wb_bram_out
38 bram0: entity work.mw_soc_memory
41 RAM_INIT_FILE => "icache_test.bin"
46 wishbone_in => wb_bram_in,
47 wishbone_out => wb_bram_out
53 wait for clk_period/2;
55 wait for clk_period/2;
61 wait for 2*clk_period;
69 i_out.addr <= (others => '0');
71 wait for 4*clk_period;
74 i_out.addr <= x"0000000000000004";
76 wait for 30*clk_period;
78 assert i_in.ack = '1';
79 assert i_in.insn = x"00000001";
87 i_out.addr <= x"0000000000000008";
88 wait for clk_period/2;
89 assert i_in.ack = '1';
90 assert i_in.insn = x"00000002";
91 wait for clk_period/2;
95 i_out.addr <= x"0000000000000040";
97 wait for 30*clk_period;
99 assert i_in.ack = '1';
100 assert i_in.insn = x"00000010";
102 -- test something that aliases
104 i_out.addr <= x"0000000000000100";
105 wait for clk_period/2;
106 assert i_in.ack = '0';
107 wait for clk_period/2;
109 wait for 30*clk_period;
111 assert i_in.ack = '1';
112 assert i_in.insn = x"00000040";
116 assert false report "end of test" severity failure;