Схема идет не так, когда синтезируется с жестким ограничением - PullRequest
0 голосов
/ 23 января 2019

У меня есть код RTL. Сначала я синтезировал схему за 10 нс и запустил симуляцию после синтеза. Схема работала хорошо. После этого я изменил ограничение по времени на 7 нс и заново синтезировал код, используя:

compile_ultra -retime

DC сообщил, что схема соответствует требованиям по времени (slack = 0), и нет нарушения правил проектирования. Тем не менее, список соединений не может пройти симуляцию после синтеза Кто-нибудь знает почему?

1 Ответ

0 голосов
/ 23 января 2019

Я обнаружил, что симуляция уровня затвора Xilinx имеет (имела?) Недостаток при работе на очень высоких частотах. Это было 10+ лет назад, поэтому все могло измениться!

В моем случае я моделировал логику, работающую на частоте 300 МГц. Результаты, которые ставят в тупик, поэтому я вытащил наиболее важные сигналы на дисплее формы сигнала.

Проблема оказалась с часами. Задержка в тактовом дереве моделируется путем объединения всех задержек в буфере IBUF. Поведение синхронизирующего дерева - это сетевая или транспортная задержка: входящий импульс выйдет через некоторое время. Поэтому модель задержки IBUF должна использовать неблокирующую задержку:

always @( I) 
   O <= #delay_time I;

Но это не так. Вместо этого он использует стандартный оператор блокировки O = I;, который получает аннотацию SDF. Таким образом, если верхний / нижний период входной частоты в буфер длиннее, чем задержка IBUF, фронты тактовых импульсов теряются и ваша симуляция уровня затвора терпит неудачу.

Я не знаю, исправил ли это Xilinx, но я бы сказал, проверь свои часы.

...