Koluchiy 0 8 июня, 2023 Опубликовано 8 июня, 2023 · Жалоба Приветствую. Пилю тестбенч. На одном симуляторе работает нормально, на другом нет. Подскажите, что я делаю не так и как правильно? repeat (8) begin wait (fas && val); @(posedge clk) error_insertion <= 1; end wait (fas && val); @(posedge clk) error_insertion <= 0; В чем идея. Есть поток фреймов, которые начинаются, когда fas && val == 1 . Нужно включить error_insertion на заданное количество фреймов (в тексте выше - 8). На практике, в одном из симуляторов работает как надо, в другом считает фреймы в 2 раза быстрее, т.е. выходит из цикла уже после 4 фреймов. Предполагаю, что проблема в том, что wait работает по уровню, а нужно чтобы данная пауза работала по фронту @(posedge clk). Как написать wait (или не wait) так, чтобы работало как мне надо? Всем спасибо за помощь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 9 июня, 2023 Опубликовано 9 июня, 2023 · Жалоба Если sv то @(posedge clk iff (fas & val)) Если обычный верилог. То проще так do begin @(posedge clk) end while (! (fas & val)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Koluchiy 0 9 июня, 2023 Опубликовано 9 июня, 2023 · Жалоба Спасибо! Сделал вот так: forever begin @(posedge clk) begin if (fas && val) break; end end Тоже работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 192 9 июня, 2023 Опубликовано 9 июня, 2023 · Жалоба 15 часов назад, des00 сказал: Если обычный верилог. То проще так Разве Verilog-2001 поддерживает do ... while (...)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 10 июня, 2023 Опубликовано 10 июня, 2023 · Жалоба 11 hours ago, makc said: Разве Verilog-2001 поддерживает do ... while (...)? Если честно я не помню, а когда писал не проверил. Но смысл тот же) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться