Я обнаружил, что симуляция уровня затвора Xilinx имеет (имела?) Недостаток при работе на очень высоких частотах. Это было 10+ лет назад, поэтому все могло измениться!
В моем случае я моделировал логику, работающую на частоте 300 МГц. Результаты, которые ставят в тупик, поэтому я вытащил наиболее важные сигналы на дисплее формы сигнала.
Проблема оказалась с часами. Задержка в тактовом дереве моделируется путем объединения всех задержек в буфере IBUF. Поведение синхронизирующего дерева - это сетевая или транспортная задержка: входящий импульс выйдет через некоторое время. Поэтому модель задержки IBUF должна использовать неблокирующую задержку:
always @( I)
O <= #delay_time I;
Но это не так. Вместо этого он использует стандартный оператор блокировки O = I;
, который получает аннотацию SDF.
Таким образом, если верхний / нижний период входной частоты в буфер длиннее, чем задержка IBUF, фронты тактовых импульсов теряются и ваша симуляция уровня затвора терпит неудачу.
Я не знаю, исправил ли это Xilinx, но я бы сказал, проверь свои часы.