Jump to content

    
Sign in to follow this  
Aleksei_Rostov

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

Recommended Posts

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

 

 

Share this post


Link to post
Share on other sites

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

 

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

Share this post


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

 

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

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this