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

считывание даннйх из файла (VHDL)

Не могу понять почему в 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

...

 

Моделсим отображает:

post-77312-1410161890_thumb.png

 

 

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


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

Потому что у вас получилась несинхронная схема. Все действия нужно проводить по фронту сигнала 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;

 

Всегда, если это возможно, "танцуйте" от фронтов тактового сигнала, а не от моментов времени, когда эти фронты случаются. Из-за механизма дельта-задержек это не одно и то же.

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


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

Всегда, если это возможно, "танцуйте" от фронтов тактового сигнала, а не от моментов времени, когда эти фронты случаются. Из-за механизма дельта-задержек это не одно и то же.

 

Большое спасибо. Все работает исправно.

 

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


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

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

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

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

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

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

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

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

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

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