Я всегда читал, что задержки, объявленные в коде RTL, никогда не могут быть синтезированы. Они предназначены только для целей моделирования, и современные инструменты синтеза будут просто игнорировать объявления задержек в коде.
Например: x = #10 y;
будет рассматриваться как x = y;
инструмент синтеза.
По каким причинам объявления о задержках на любом языке описания аппаратных средств (например, VHDL, Verilog или Sytem-Verilog) не могут быть синтезированы?
verilog
vlsi
system-verilog
asic
Ананд
источник
источник
Ответы:
Синтезировать означает каким-то образом преобразовать то, что вы описали (в Verilog здесь) в реальное оборудование .
Теперь в своем Verilog вы говорите, что у вас задержка 50 нс. Хорошо, но теперь, с точки зрения аппаратного обеспечения, как бы вы преобразовали это в реальное аппаратное обеспечение?
Если вы используете FPGA, как бы вы на самом деле построили свою задержку в 50 нс, используя доступные ресурсы FPGA (LUT, Registers, Ram element, ...)? Добавляя дополнительные задержки маршрутизации? представьте, что вы указываете задержку 1с! Невозможно без ВСЕХ возможностей маршрутизации вашего чипа (может быть, недостаточно). Ваш дизайн не может быть приспособлен. То же самое для ASIC. Вы бы использовали 80% поверхности кремния, чтобы добавить задержку к ОДНОЙ линии.
Способ, который должен работать, заключается в том, что вы используете синхронный дизайн и сами выполняете задержку, используя счетчики или другие методы. Но задержки должны быть кратны часам этого элемента.
Обычно такие вещи, как тезисы «после 10 нс», являются задержками распространения. При идеальном моделировании на симуляторе Verilog выходные данные происходят точно при изменении входных данных. Это нереально и не описывает, как работает настоящее аппаратное обеспечение. Чтобы учесть это, вы можете указать, через сколько времени ваш вывод будет изменен: с помощью объявления задержки.
источник
Портирование моего ответа от SO . Что фокусируется на том, почему нецелесообразно синтезировать абсолютные задержки
При синтезе деревьев тактовых импульсов инструмент синтеза уравновешивает их, добавляя задержки, чтобы все узлы получали часы одновременно, поэтому может показаться, что инструмент синтеза действительно имеет возможность добавлять задержки.
Однако, когда производятся ASIC, есть разница в скорости, на высоком уровне это можно рассматривать как медленную, типичную и быструю. На практике существуют сотни вариантов этих углов, в которых определенные типы устройств в кремнии работают быстро, а другие медленно.
Эти углы кремния также имеют температурный рейтинг, в худшем случае это может быть + 140C для быстрого кремния и -40C для медленного кремния. Изменение задержки через буфер в этом случае может составлять от 1 нс до 30 нс.
Чтобы вернуть это в Verilog, если бы он
#10
был синтезируемым, вы бы на самом деле получили 155 + -145, то есть от 10 нс до 300 нс, если вы также спроектировали что-то,#20
чтобы быть частью того же интерфейса или структуры управления, он будет иметь диапазон от 20 нс до 600 нс. , Поэтому все это не совсем верно в отношении вашего дизайна. Вы не получите точного#10
и того,#20
что было указано.Деревья часов спроектированы таким образом, чтобы ограничить максимальные и минимальные задержки, и чтобы все узлы в дереве часов масштабировались относительно друг друга. Им никогда не дают такого строгого правила, что оно должно быть # 10 нс, поскольку это физически невозможно гарантировать в комбинаторной схеме.
источник
Единственная абсолютная единица времени будет от внешних часов. Откуда взялась бы произвольная задержка - какой дискретный цифровой логический эквивалент произвел бы ее из часов?
Если вы хотите синтезируемую задержку, вам нужно будет использовать внешний вход синхронизации и соответствующий конечный автомат / счетчик, который будет рассчитывать определенное количество тактов.
источник