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

"One unit delay #1" в Veriloge

Вот фрагмент кода...

 

always @(posedge sys_clk_i)

begin

if (sys_rst_i)

bus_we <= #1 1'b0;

addr<= #1 3'b000;

else

......

bus_we <= #1 1'b1;

addr<=#1 3'b010;

......

end

 

Раньше "#1" использовали для корректной симуляции, даже в ModelSime. Все коды opencores написанны в этом стиле. ModelSim 6.1 нормально симулирует и без "#1". Возникает вопрос, стоит ли продолжать использожат "#1" ?

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


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

Такое делают для визуального удобства (при рассматривании сигналов) и больше ни для чего. По идее, такое присваивание дает избежать race condition, там, где неумелый разработчик их использовал, но имхо это порочный путь.

Я еще иногда использую #1 из-за лени - когда быстро и невнимательно строчишь тестбенч, то можно легко получить совместно с тестируемым модулем этот самый race condition, чтобы избежать я в триггерах в модуле ставлю #1, а в тесбенче нет.

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


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

Не только для визуального удобства. К примеру, в ModelSim 6.0 для элементов FDDRSE (double-data rate flip-flop) некорректно отрабатывается вход CE. Для решения этой закавыки тож пришлось поставить one unit delay. Иначе получалось интересно - при назначении триггеру, отвечающему за CE блока из 8-ми FDDRSE по переднему фронту клока, единицы, все FDDRSE стартовали по этому же клоку. Вероятно, проблема зарыта в библиотеке Xilinx для ModelSim. Так что one unit delay все еще полезен в некоторых ситуациях

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


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

Приветствую!

 

Проблема эта скорее всего в глюках симулятора. Связанно это с неправильной отработкой дельта-циклов в симуляторе. Я переодически натыкался на такое в ActivHDL. Причем такое "неправильное" поведение сильно зависит от всего контекста симуляции. Бывает измениш пару цепей или тригер где то добавиш и удивляешся неоднозначной реакции .

 

Правда в последнее время (ActivHDL 7.1) таких чудес стало гораздно меньше.

В ModelSim такого вроде не замечал. Но в ModelSim я обычно гоняю большие проекты предварительно отлаженные по кускам в ActivHDL.

 

 

Удачи! Rob.

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


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

Приветствую!

 

Проблема эта скорее всего в глюках симулятора. Связанно это с неправильной отработкой дельта-циклов в симуляторе. Я переодически натыкался на такое в ActivHDL. Причем такое "неправильное" поведение сильно зависит от всего контекста симуляции. Бывает измениш пару цепей или тригер где то добавиш и удивляешся неоднозначной реакции .

 

Правда в последнее время (ActivHDL 7.1) таких чудес стало гораздно меньше.

В ModelSim такого вроде не замечал. Но в ModelSim я обычно гоняю большие проекты предварительно отлаженные по кускам в ActivHDL.

 

 

Удачи! Rob.

Спасибо. Сам попробывал и убедился.

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


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

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

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

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

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

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

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

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

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

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