sqrt(2) 0 27 октября, 2016 Опубликовано 27 октября, 2016 (изменено) · Жалоба Здравствуйте. Хочу использовать некие данные из файла для своего тестбенча. Данные загружаю в константу: ------------------------------------------ --ЗАГРУЗКА ТЕСТОВЫХ ВОЗДЕЙСТВИЙ ИЗ ФАЙЛА-- ------------------------------------------ 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; И вот тут видно, что присвоение дальше нулевого адреса не идет. Не могу понять, в чем дело. Подскажите пожалуйста! Изменено 27 октября, 2016 пользователем sqrt(2) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 28 октября, 2016 Опубликовано 28 октября, 2016 · Жалоба 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)); из процесса. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sqrt(2) 0 28 октября, 2016 Опубликовано 28 октября, 2016 · Жалоба Спасибо, что-то я на совсем простых вещах сглупил. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться