Aleksei_Rostov 0 8 сентября, 2014 Опубликовано 8 сентября, 2014 · Жалоба Не могу понять почему в modelsim не отображается первый байт при считывании массива чисел из файла. Тем не менее в расчетах (алгоритм crc32) первый байт задействован, т.е. контр сумма считается верно. код в тестбенче ............................ file stimulus: TEXT open read_mode is "pulse.txt"; ............................ receive_data_in: process variable l: line; variable s: std_logic_vector(7 downto 0); begin crc_en <= '0'; rst <= '1'; data_in <= (others => '0'); wait for 4 * clk_period; crc_en <= '1'; rst <= '0'; while not endfile(stimulus) loop readline(stimulus, l); hread(l, s); data_in <= (s); wait until clk = '1' and clk'event; end loop; data_in <= (others => '0'); rst <= '0'; crc_en <= '0'; wait for 8*clk_period; rst <= '1'; report "Simulation completed" severity failure; end process receive_data_in; Данные в файле в шеснадцатиричной системе: 00 0A E6 F0 05 A3 00 12 34 56 78 90 08 ... Моделсим отображает: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 8 сентября, 2014 Опубликовано 8 сентября, 2014 · Жалоба Потому что у вас получилась несинхронная схема. Все действия нужно проводить по фронту сигнала clk. Вы же используете в начале wait for 4 * clk_period;То, что это время совпадает с фронтом clk, ещё не означает, что процесс идёт по фронту. В момент времени wait for 4 * clk_period; вы считываете первое число. Но этот момент времени не совпадает с моментом rising_edge (clk), который, очевидно, произошёл на дельту раньше, поэтому цикл идёт на вторую итерацию. Замените wait for 4 * clk_period; на for i in 0 to 3 loop wait until rising_edge (clk); end loop; То же самое для wait for 8*clk_period; Всегда, если это возможно, "танцуйте" от фронтов тактового сигнала, а не от моментов времени, когда эти фронты случаются. Из-за механизма дельта-задержек это не одно и то же. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleksei_Rostov 0 9 сентября, 2014 Опубликовано 9 сентября, 2014 · Жалоба Всегда, если это возможно, "танцуйте" от фронтов тактового сигнала, а не от моментов времени, когда эти фронты случаются. Из-за механизма дельта-задержек это не одно и то же. Большое спасибо. Все работает исправно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться