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

помощь с тестбенчем

Добрый день

мне стыдно обращаться с таким простым вопросом... но я что то не могу понять.

Пишу тестбенч (во вложении).

Там есть процесс

  process (all)
 begin
 if (rst = '1') then
	reg_eof <= '0';
	reg_eof1 <= '0';
 elsif (clk'event and clk = '1') then
 
  if reg_cnt_data = std_logic_vector(to_unsigned((num_row_file), reg_cnt_data'length))  then
	reg_eof <= '1';
 else
	reg_eof <= '0';
 end if;
 
 if reg_cnt_data = std_logic_vector(to_unsigned((num_row_file-1), reg_cnt_data'length))  then
	reg_eof1 <= '1';
 else
	reg_eof1 <= '0';
 end if;
 
 end if;
 end process;

Почему reg_eof1 занимает 2 такта, а reg_eof - 1 такт. ???

image.thumb.png.ad5fb9b8c3e8a7fedf2f88dcb61bb425.png

Не могу понять.

Прошу помощи

indata.txt top_vhd_tst_file.vhd

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


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

2 часа назад, Maverick_ сказал:

Почему reg_eof1 занимает 2 такта

Первый такт возник, т.к. reg_cnt_data = 17, а num_row_file = 18. Затем на следующем фронте клока происходит одновременно два события: reg_cnt_data увеличивается на 1 и становится равным 18 и вместе с ним num_row_file = 19, т.е. снова возникло условие для reg_eof1 = 1.

Изменено пользователем Самурай

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


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

2 hours ago, Maverick_ said:

Не могу понять.

А чего тут понимать  -  у вас num_row_file меняется (+1) в то время когда reg_eof1 уже в единице стоит  :unknw::biggrin:

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


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

Just now, Maverick_ said:

тоже не два такта?

потому что изменение  num_row_file  происходит  раньше,  за такт  до того как  должен установится reg_eof.  Поэтому  reg_eof устанавливается  уже  по новому значению num_row_file  :declare:

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


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

9 часов назад, Maverick_ сказал:

process (all)

 

А сейчас стало модно вот так вот список чувствительнсти (не)писать?

9 часов назад, Maverick_ сказал:

if reg_cnt_data = std_logic_vector(to_unsigned((num_row_file), reg_cnt_data'length)) then 

 

Зачем вы так делаете? Что может быть проще, чем

if unsigned (reg_cnt_data) = num_row_file then

 

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


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

Влезу со своим вопросом тоже:

В чем смысл именно так:

(clk'event and clk = '1')

А не:

if rising_edge(clk)

?

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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