Предотвращение гонки за дизайном реестра SystemVerilog

Занимаясь цифровым дизайном в systemverilog, я столкнулся с проблемой, связанной с гоночными условиями.

Испытательный стенд (который я не могу изменить), который управляет моим дизайном, управляет входами таким образом, что некоторые регистры в проекте не работают должным образом из-за состояния гонки.

Вот пример eda-игровая площадка, который иллюстрирует, что происходит (входные данные меняются «раньше», чем это сделают часы, в момент времени 15 нс):

http://www.edaplayground.com/x/rWJ

Есть ли способ сделать дизайн (в данном случае простой регистр) устойчивым к этой конкретной проблеме? Мне нужно такое выражение, как «out_data‹ = preponed (in_data); » или что-то подобное, что сделает порядок изменения входного сигнала несущественным.

Я читал о шаге №1 в SystemVerilog LRM, но я не уверен, как его использовать и может ли он вообще помочь мне с этой конкретной проблемой.


person Dusan Krantic    schedule 29.08.2017    source источник
comment
Тактовый генератор в первую очередь написан плохо. Это должно было быть clock = ~clock с назначением блокировка. Кроме того, если ваши входы и часы изменяются одновременно, какого поведения вы ожидаете?   -  person Serge    schedule 29.08.2017
comment
Я согласен, но генератор тактовых импульсов специально написан неправильно, чтобы проиллюстрировать, как в проекте может возникнуть состояние гонки. Если они изменятся одновременно, то я ожидаю, что на выходе регистра будет получено значение, которое входной сигнал имел до каких-либо изменений.   -  person Dusan Krantic    schedule 29.08.2017
comment
Нет хорошего способа избежать гонки, искусственно созданной испытательным стендом, без исправления последнего. Вам нужно будет сделать ваш dut несинтезируемым, чтобы попробовать иначе. т.е. добавление задержки # 1ns к вашим in_data   -  person Serge    schedule 29.08.2017
comment
Вот чего я боялся ... Спасибо за ответ.   -  person Dusan Krantic    schedule 29.08.2017
comment
@Serge Я не уверен, что задержки сделают дизайн несинтезируемым. Инструменты могут просто игнорировать их.   -  person Tudor Timi    schedule 29.08.2017
comment
Да, что делает их поведение после синтеза отличным от моделирования. В этом смысле его нельзя синтезировать, и вы получите предупреждения или ошибки в результате синтеза.   -  person Serge    schedule 29.08.2017


Ответы (1)


Ваш тестовый стенд, по сути, создает стимул, который нарушает настройку вашего регистра. У вас есть два варианта:

  1. Убедите автора тестовой среды в их ошибочности и заставьте их исправить это.
  2. Вставьте слой иерархии вокруг дизайна, который задерживает часы, чтобы исключить гонку.
person dave_59    schedule 29.08.2017