Мой компонент читает из оперативной памяти, выполняет некоторые вычисления и записывает обратно в память.Я написал несколько тестовых наборов с различными значениями оперативной памяти, которые были успешно протестированы.Проблема в том, что я всегда должен запускать тестовые стенды отдельно каждый раз.
Мне было интересно, возможно ли иметь один тестовый стенд с разными RAMS и запускать только один тестовый стенд.Поэтому, как только один тест с ОЗУ заканчивается, используется другой ОЗУ.Это также проверит, вернется ли мой FSM в нерабочее состояние после записи в память, а затем прочитает другую оперативную память.
Это шаблон testbench:
entity project is
end project;
architecture project of project is
....
....
....
....
type ram_type is array (65535 downto 0) of std_logic_vector(7 downto 0);
signal RAM: ram_type := (0 => std_logic_vector(to_unsigned( 12, 8)),
1 => std_logic_vector(to_unsigned( 23, 8)),
2 => std_logic_vector(to_unsigned( 32, 8)),
3 => std_logic_vector(to_unsigned( 44, 8)),
4 => std_logic_vector(to_unsigned( 55, 8)),
5 => std_logic_vector(to_unsigned( 66, 8)),
6 => std_logic_vector(to_unsigned( 77, 8)),
7 => std_logic_vector(to_unsigned( 99, 8)),
others => (others =>'0'));
component project is
port (
....
...
);
end component project;
begin
UUT: project
port map (
....
);
p_CLK_GEN : process is
begin
....
end process p_CLK_GEN;
MEM : process(clk)
begin
....
....
end process;
test : process is
begin
wait for 50 ns;
wait for c_CLOCK_PERIOD;
tb_rst <= '1';
wait for c_CLOCK_PERIOD;
tb_rst <= '0';
wait for c_CLOCK_PERIOD;
tb_start <= '1';
wait for c_CLOCK_PERIOD;
wait until tb_done = '1';
wait for c_CLOCK_PERIOD;
tb_start <= '0';
wait until tb_done = '0';
assert RAM(20) = std_logic_vector(to_unsigned( 13, 8)) report "failed" severity notice;
assert false report "passed" severity notice;
end process test;