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

Modelsim и значение сигнала "x"

Тестировал модель с учетом задержек в Modelsim. На вход устройства (ресинхронизатор) подается сигнал с тактовой частотой, отличной от частоты устройства. Блок ресинхронизации представляет из себя 3 последовательно включенных триггера. В один момент когда для первого триггера ресинхронизатора не выполняется время setup/hold на выходе появляется неопределенный уровень "x". С каждым тактом он продвигается по всем 3 регистрам и проходит внутрь исполнительного устройства, ввергая по пути все сигналы в глубокий 'x'. Как можно переопределить состояние 'x' скажем в 0 или 1 для корректного моделирования подобной ситуации? (для Verilog).

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


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

быстрое решение - использовать двух уровневые типы типа bit вместо reg, если не устраивает, то можно ещё подумать (в сторону каких-нибудь инерциальных задержек)

ЗЫ: а потом, если не выполняется setup/hold - то это проблема иного порядка - метастабильность в системе, такого быть не должно (вроде б)

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


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

Можно задать опцию +no_notifier для vsim.

Временные ошибки будут вываливаться, но в Х триггера уходить не будут

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


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

ЗЫ: а потом, если не выполняется setup/hold - то это проблема иного порядка - метастабильность в системе, такого быть не должно (вроде б)

 

вот как раз в синхронизаторе такое быть должно %)

 

автору либо пачить либо обходить настройками симуляции

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


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

Можно задать опцию +no_notifier для vsim.

Временные ошибки будут вываливаться, но в Х триггера уходить не будут

Не знал, спасибо. Как-нибудь попробую. Если такое будет работать, то это круто!!! И не надо никого патчить :)

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


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

Тестировал модель с учетом задержек в Modelsim. На вход устройства (ресинхронизатор) подается сигнал с тактовой частотой, отличной от частоты устройства. Блок ресинхронизации представляет из себя 3 последовательно включенных триггера. В один момент когда для первого триггера ресинхронизатора не выполняется время setup/hold на выходе появляется неопределенный уровень "x". С каждым тактом он продвигается по всем 3 регистрам и проходит внутрь исполнительного устройства, ввергая по пути все сигналы в глубокий 'x'. Как можно переопределить состояние 'x' скажем в 0 или 1 для корректного моделирования подобной ситуации? (для Verilog).

 

Если работаете в ISE 10.1, то есть такое CONSTRAINTS:

 

ASYNC_REG Description

 

The ASYNC_REG timing constraint improves the behavior of asynchronously clocked

data for simulation. Specifically, it disables 'X' propagation during timing simulation. In

the event of a timing violation, the previous value is retained on the output instead of

going unknown.

 

Правда XILINX рекомендует использовать его в КРАЙНЕМ случае, а говорит, что вход

надо обязательно синхронизировать. Интересно КАК это сделать не получив на первом триггере "X" ???

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


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

Хоть у меня и новый вопрос, но я решил всё-таки продолжить эту тему, т.к. тема идентична.

 

Есть Xilinx ISE от 8.1 до 11.1 и ModelSim'ы SE 6.2f и SE 6.4c. Везде видел нижеизложенную проблему, хоть и чуть-чуть по разному.

 

Проблема такая: при попытке промоделировать в ModelSim Post P&R VHDL модель (конечно вместе с SDF), внутренний сигнал GSR (Global Set/Reset) поочерёдно проходит 3 состояния: '1', 'X' и '0', естественно после состояния 'X' все триггера раскорячивает в 'X'. В ISE'ях вплоть до 9.2 с ModelSim SE 6.2f удавалось победить такое поведение путём уменьшения импульса GSR со стандартных 100ns до 5 - 20ns - конечно, это было неприятно, но коли удавалось обходить, то и тему не создавал. А вот с ISE 11.1 и ModelSim SE 6.4c не удалось обойти этот неприятный глюк.

 

Может кто подскажет, как победить некорректное поведение Model Sim ?

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


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

Проблема такая: при попытке промоделировать в ModelSim Post P&R VHDL модель (конечно вместе с SDF), внутренний сигнал GSR (Global Set/Reset) поочерёдно проходит 3 состояния: '1', 'X' и '0', естественно после состояния 'X' все триггера раскорячивает в 'X'. В ISE'ях вплоть до 9.2 с ModelSim SE 6.2f удавалось победить такое поведение путём уменьшения импульса GSR со стандартных 100ns до 5 - 20ns - конечно, это было неприятно, но коли удавалось обходить, то и тему не создавал. А вот с ISE 11.1 и ModelSim SE 6.4c не удалось обойти этот неприятный глюк.

Сам спросил - сам и отвечу:

Всё дело в том, что я моделировал многоПЛИСовый проект, а сигнал GSR находится в VCOMPONENTS... и является общим для всех ПЛИС, поэтому, если в различных проектах по разному задано время GSR, то именно на эту разницу и появляется 'X' (несколько источников сигнала (ROC) работают на одну линию (GSR)). Глюк получился совместным: когда делали библиотеки для ISE явно не предполагали такого моделирования, а ModelSim не смог в DataFlow показать источники GSR.

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


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

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

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

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

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

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

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

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

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

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