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

Симуляция функциональная Vs временная

А вот с этого места подробнее, пожалуйста. Мне пришлось применить переход к другому клоковому домену с близкой частотой (100 -> 85 МГц). Как сделать, чтобы Моделсим не выдавал неопределенность, после которой все дальнейшее поведение становится тоже неопределенным?

Другими словами, какие они, Ваши специальные меры?

По умолчанию симуляторы, в случае нарушения setup/hold для регистра устанавливают его в X значение. После этого весь автомат рушится. Иногда это становится (твкой способ обработки ошибок) занозой в з...  В случае, если симулируете в VHDL, ModelSim может глобально отключить подстановку Х, взамен оставляет старое значение регистра. В случае с Verilog возможно только указать через файл ограничений какие регистры не учитывать при нарушения зазоров (предполагается, что они первые в цепи антиметастабильности).

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


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

А вот с этого места подробнее, пожалуйста. Мне пришлось применить переход к другому клоковому домену с близкой частотой (100 -> 85 МГц). Как сделать, чтобы Моделсим не выдавал неопределенность, после которой все дальнейшее поведение становится тоже неопределенным?

Другими словами, какие они, Ваши специальные меры?

По умолчанию симуляторы, в случае нарушения setup/hold для регистра устанавливают его в X значение. После этого весь автомат рушится. Иногда это становится (твкой способ обработки ошибок) занозой в з...  В случае, если симулируете в VHDL, ModelSim может глобально отключить подстановку Х, взамен оставляет старое значение регистра. В случае с Verilog возможно только указать через файл ограничений какие регистры не учитывать при нарушения зазоров (предполагается, что они первые в цепи антиметастабильности).

 

DefaultForceKind = freeze

 

Это оно? Или где?

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


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

DefaultForceKind = freeze

Это оно? Или где?

Когда моделька рождается в VHDL, галка глобального отключения "Global disable X-generation for simulation".

Ну а констрейн называется ASYNC_REG, например INST "I_MK_module/WEa[*]" ASYNC_REG = TRUE;

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


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

DefaultForceKind = freeze

Это оно? Или где?

Когда моделька рождается в VHDL, галка глобального отключения "Global disable X-generation for simulation".

Ну а констрейн называется ASYNC_REG, например INST "I_MK_module/WEa[*]" ASYNC_REG = TRUE;

 

Спасибо. Нашел. В детстве шарады у меня хорошо разгадывать получалось...

Это ж ведь и не в Моделсиме вовсе. :a14:

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


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

DefaultForceKind = freeze

Это оно? Или где?

Когда моделька рождается в VHDL, галка глобального отключения "Global disable X-generation for simulation".

Ну а констрейн называется ASYNC_REG, например INST "I_MK_module/WEa[*]" ASYNC_REG = TRUE;

 

Спасибо. Нашел. В детстве шарады у меня хорошо разгадывать получалось...

Это ж ведь и не в Моделсиме вовсе. :a14:

 

Возможно, что это то самое...

 

--8<---

To prevent "x" from propagating in your simulation, use the "+no_notifier" option to vsim command when using ModelSim Simulator (MTI)

--8<---

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


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

Возможно, что это то самое...

 

--8<---

To prevent "x" from propagating in your simulation, use the "+no_notifier" option to vsim command when using ModelSim Simulator (MTI)

--8<---

Оно самое. Но сами понимаете, что этим лучше пользоваться только в исключительных случаях.

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


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

По умолчанию симуляторы, в случае нарушения setup/hold для регистра устанавливают его в X значение. После этого весь автомат рушится. Иногда это становится (твкой способ обработки ошибок) занозой в з... :) В случае, если симулируете в VHDL, ModelSim может глобально отключить подстановку Х, взамен оставляет старое значение регистра. В случае с Verilog возможно только указать через файл ограничений какие регистры не учитывать при нарушения зазоров (предполагается, что они первые в цепи антиметастабильности).

Получается, что работу собственно схемы борьбы с метастабильностью проверить в симуляторе нельзя. Либо мы запрещаем метастабильность для входных регистров этих схем путем игнорирования нарушения setup/hold, либо неопределенное состояние так и пройдет дальше, нарушая работу модели, чего в железе как раз и не произойдет.

 

И еще возникает вопрос: а разве в модели регистра невозможно учесть время метастабильности и передавать его через SDF? Я понимаю, что это время не посчитать точно, но можно было бы задать какую-то оценку, и симулятор работал бы более наглядно: вот состояние неопределено, а вот устаканилось...

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


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

Получается, что работу собственно схемы борьбы с метастабильностью проверить в симуляторе нельзя. Либо мы запрещаем метастабильность для входных регистров этих схем путем игнорирования нарушения setup/hold, либо неопределенное состояние так и пройдет дальше, нарушая работу модели, чего в железе как раз и не произойдет.
Дык вот в том то и дело, что в железе это будет работать (например 999 раз из 1000), а симулятор это сразу заметит и укажет. И потом, мы ведь выключаем детектор метастабильности только для первого регистра, так что все "чинно, благородно".

 

И еще возникает вопрос: а разве в модели регистра невозможно учесть время метастабильности и передавать его через SDF? Я понимаю, что это время не посчитать точно, но можно было бы задать какую-то оценку, и симулятор работал бы более наглядно: вот состояние неопределено, а вот устаканилось...

Может я чего не понял, но в симуляторах все так и работает.

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


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

3.14:

Наверно, это я чего-то недопонял. :)

Поясните, пожалуйста, это:

 

Дык вот в том то и дело, что в железе это будет работать (например 999 раз из 1000), а симулятор это сразу заметит и укажет.

Что нам сразу заметит и укажет симулятор, что нарушено время setup/hold? И выставит "x" или просто напишет "Error..."? Так ведь мы и планируем нарушить времянку и посмотреть что будет, если хотим бороться с метастабильностью. Так что в железе должно работать 1000 раз из 1000, а иначе грош цена схеме антиметастабильности. Здорово было бы, если бы ножки ПЛИС делались красного цвета (как в ModelSim'е "x" по умолчанию), а тестер/осциллограф писали бы "x", как бы тогда отладка упростилась. :)

 

Может я чего не понял, но в симуляторах все так и работает.

Насколько я понимаю, если триггер встал в неопределенное состояние, то он в нем так и останется по крайней мере до следующего фронта клока. У меня ModelSim так работает с альтеровскими "атомами", может у Xilinx'а иначе, но что-то не верится. А ведь в железе триггер в состоянии метастабильности пробудет какое-то конечное время, порядка 1 нс, насколько я представляю, а потом станет стабильным.

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


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

2 popeye

Когда я говорил "Дык вот в том то и дело, что в железе это будет работать (например 999 раз из 1000), а симулятор это сразу заметит и укажет." я подразумевал работу схемы без антиметастабилизатора. Говорим то об одном и том же :), просто меня смутило, почему нельзя считать, что можно симулировать работу антиметастабилизатора при отключенном детекторе метастабильности на первом регистре. Это и работать будет и симулировать можно без угрызения совести если тактовый сидит на глобальной линии.

 

Далее по тексту, сори, это я упустил Вашу фразу "учесть время метастабильности и передавать", мне то же не понятно, что производителю мешает это сделать, наверное большаея нестабильность времени метастабильности от кучи факторов (время нарушения, температура, питание и т.п.).

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


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

Возвращаясь к теме. Недавно прочитал довольно интересную доку по поводу несовпадения функциональной модели и логики после синтеза. Вещи там на мой взгляд написаны довольно очевидные, но все равно полезные.

 

RTL Coding Styles That Yield Simulation and Synthesis Mismatches

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


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

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

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

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

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

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

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

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

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

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