Jump to content
    

"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" ?

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

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

 

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

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

 

 

Удачи! Rob.

Share this post


Link to post
Share on other sites

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

 

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

 

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

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

 

 

Удачи! Rob.

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

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.

×
×
  • Create New...