2 context vunit_lib.vunit_context;
5 use ieee.std_logic_1164.all;
6 use ieee.numeric_std.all;
10 use work.wishbone_types.all;
13 generic (runner_cfg : string := runner_cfg_default);
16 architecture behave of plru_tb is
17 signal clk : std_ulogic;
18 signal rst : std_ulogic;
20 constant clk_period : time := 10 ns;
21 constant plru_bits : integer := 3;
23 subtype plru_val_t is std_ulogic_vector(plru_bits - 1 downto 0);
24 subtype plru_tree_t is std_ulogic_vector(2 ** plru_bits - 2 downto 0);
25 signal do_update : std_ulogic := '0';
26 signal acc : plru_val_t;
27 signal lru : plru_val_t;
28 signal state : plru_tree_t;
29 signal state_upd : plru_tree_t;
32 plrufn0: entity work.plrufn
39 tree_out => state_upd,
46 wait for clk_period/2;
48 wait for clk_period/2;
54 wait for 2*clk_period;
59 plru_process: process(clk)
61 if rising_edge(clk) then
63 state <= (others => '0');
64 elsif do_update = '1' then
71 procedure test_access(acc_val: integer; expected: integer) is
73 acc <= std_ulogic_vector(to_unsigned(acc_val, acc'length));
76 info("accessed " & integer'image(acc_val) & " LRU=" & to_hstring(lru));
77 check_equal(lru, expected, result("LRU ACC=" & integer'image(acc_val)));
80 test_runner_setup(runner, runner_cfg);
82 wait for 8*clk_period;
84 info("reset state:" & to_hstring(lru));
85 check_equal(lru, 0, result("LRU "));
116 test_runner_cleanup(runner);