Перейти к содержанию
    

vhdl testbench подача тестовых воздействий из памяти

Здравствуйте. Хочу использовать некие данные из файла для своего тестбенча. Данные загружаю в константу:

 

------------------------------------------
--ЗАГРУЗКА ТЕСТОВЫХ ВОЗДЕЙСТВИЙ ИЗ ФАЙЛА--
------------------------------------------

type signal_storage is array (integer range <>)of std_logic_vector (data_width-1 downto 0);
signal mem : signal_storage (0 to data_storage-1);
   
        procedure Load_ROM (signal data_word :inout signal_storage) is
        -- Open File in Read Mode
        file romfile   :text open read_mode is "signal_record.txt";
        variable lbuf  :line;
        variable i     :integer := 0;
        variable fdata :std_logic_vector (data_width-1 downto 0);
        begin
         while not endfile(romfile) loop
            -- read digital data from input file
             readline(romfile, lbuf);
             read(lbuf, fdata);
             data_word(i) <= fdata;
             i := i+1;
         end loop;
        end procedure;

 

При запуске тестбенча видно, что данные подгружаются корректно и все ок.

 

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

 

address_count :process(i_clk, i_read_en)
   begin
        if rising_edge(i_clk) then
         if i_read_en = '1' then
          r_reg <= r_next;
         end if;
        end if;
end process;

r_next <= (others=>'0') when r_reg = (samples-1) else r_reg + 1;

 

r_reg и r_next объявлены как unsigned. При запуске тестбенча видно, что счетчик считает как надо и тут тоже все ок. Очевидно, что сигнал r_reg можно использовать для отсчета адресов.

 

Теперь можно написать процесс, в котором будет происходить присваивание данных из памяти входному порту модуля:

 

stim_proc: process
   begin         
        wait for 100 ns;
        i_arst <='1';
        wait for 300 ns;
        i_arst <='0';
        wait for 1000 ns;
        i_read_en <='1';
        i_data <= mem(to_integer(r_reg));
        wait for 6000 ns;
        i_read_en <='0';
        wait;
        assert false report "simulation ended" severity failure;
end process;

 

И вот тут видно, что присвоение дальше нулевого адреса не идет. Не могу понять, в чем дело. Подскажите пожалуйста!

Изменено пользователем sqrt(2)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

stim_proc: process
    begin         
         wait for 100 ns;
         i_arst <='1';
         wait for 300 ns;
         i_arst <='0';
         wait for 1000 ns;
         i_read_en <='1';
         i_data <= mem(to_integer(r_reg));
         wait for 6000 ns;
         i_read_en <='0';
         wait;
         assert false report "simulation ended" severity failure;
end process;

 

И вот тут видно, что присвоение дальше нулевого адреса не идет. Не могу понять, в чем дело. Подскажите пожалуйста!

Вынесите i_data <= mem(to_integer(r_reg)); из процесса.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...