Непрерывное тестирование в Finite State Machine в VHDL? - PullRequest
0 голосов
/ 10 мая 2019

Мой компонент читает из оперативной памяти, выполняет некоторые вычисления и записывает обратно в память.Я написал несколько тестовых наборов с различными значениями оперативной памяти, которые были успешно протестированы.Проблема в том, что я всегда должен запускать тестовые стенды отдельно каждый раз.

Мне было интересно, возможно ли иметь один тестовый стенд с разными 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;

...