Синтез "всегда" блоков
Справочное руководство Verilog Golden на стр. 12 предостерегает от несомненного always
блокирует и дает шаблоны, которым нужно следовать, чтобы уменьшить вероятность непреднамеренного создания несинтезируемого always
блоки. Однако в руководстве не объясняется, почему и в каких ситуациях always
блок не синтезируется.
Каковы наиболее распространенные причины always
блок, чтобы не быть синтезируемым?
2 ответа
В основном каждый блок всегда описывает группу триггеров, группу защелок или блок комбинационных схем.
Эти три имеют разные форматы кодирования и не должны смешиваться, иначе это не может быть синтезировано. (иногда защелки и комбинации схемы и должны быть смешаны, но следует избегать)
Любые всегда блоки, которые не могут быть сопоставлены с этими тремя типами цепей, не могут быть синтезированы.
Например, смешанный чувствительный список сигналов и фронтов не является синтезируемым, потому что триггер не может быть одновременно с триггером и с триггером уровня.
Более двух часов не синтезируются.
Встроенные блоки всегда не могут быть синтезированы.
Добавление временных задержек не будет синтезируемым, но часто используется при проверке. Также некоторые инструменты будут жаловаться, если вы попытаетесь синтезировать операторы отображения.
always @* begin
$display("%t", $realtime);
#1 x = y; //Delayed by 1 time unit
$display("%t", $realtime);
end