Почему задержки не могут быть синтезированы в Verilog?


8

Я всегда читал, что задержки, объявленные в коде RTL, никогда не могут быть синтезированы. Они предназначены только для целей моделирования, и современные инструменты синтеза будут просто игнорировать объявления задержек в коде.

Например: x = #10 y;будет рассматриваться как x = y;инструмент синтеза.

По каким причинам объявления о задержках на любом языке описания аппаратных средств (например, VHDL, Verilog или Sytem-Verilog) не могут быть синтезированы?


1
Это перекрестный вопрос, поскольку он находится между перекрытием SO и ElectronicsSE.
pre_randomize

Ответы:


14

Синтезировать означает каким-то образом преобразовать то, что вы описали (в Verilog здесь) в реальное оборудование .

Теперь в своем Verilog вы говорите, что у вас задержка 50 нс. Хорошо, но теперь, с точки зрения аппаратного обеспечения, как бы вы преобразовали это в реальное аппаратное обеспечение?

Если вы используете FPGA, как бы вы на самом деле построили свою задержку в 50 нс, используя доступные ресурсы FPGA (LUT, Registers, Ram element, ...)? Добавляя дополнительные задержки маршрутизации? представьте, что вы указываете задержку 1с! Невозможно без ВСЕХ возможностей маршрутизации вашего чипа (может быть, недостаточно). Ваш дизайн не может быть приспособлен. То же самое для ASIC. Вы бы использовали 80% поверхности кремния, чтобы добавить задержку к ОДНОЙ линии.

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

Обычно такие вещи, как тезисы «после 10 нс», являются задержками распространения. При идеальном моделировании на симуляторе Verilog выходные данные происходят точно при изменении входных данных. Это нереально и не описывает, как работает настоящее аппаратное обеспечение. Чтобы учесть это, вы можете указать, через сколько времени ваш вывод будет изменен: с помощью объявления задержки.


2
Я отмечу, что «потому что это заняло бы весь чип» на самом деле не причина, по которой что-то не может быть синтезировано, это причина, по которой что-то не может быть приспособлено или помещено в определенные границы.
W5VO

@ W5VO Ты прав. Он был призван показать что-то абсурдное, что оправдало бы поиск другого пути. Исправлено.
Blup1980

5

Портирование моего ответа от SO . Что фокусируется на том, почему нецелесообразно синтезировать абсолютные задержки

При синтезе деревьев тактовых импульсов инструмент синтеза уравновешивает их, добавляя задержки, чтобы все узлы получали часы одновременно, поэтому может показаться, что инструмент синтеза действительно имеет возможность добавлять задержки.

Однако, когда производятся ASIC, есть разница в скорости, на высоком уровне это можно рассматривать как медленную, типичную и быструю. На практике существуют сотни вариантов этих углов, в которых определенные типы устройств в кремнии работают быстро, а другие медленно.

Эти углы кремния также имеют температурный рейтинг, в худшем случае это может быть + 140C для быстрого кремния и -40C для медленного кремния. Изменение задержки через буфер в этом случае может составлять от 1 нс до 30 нс.

Чтобы вернуть это в Verilog, если бы он #10был синтезируемым, вы бы на самом деле получили 155 + -145, то есть от 10 нс до 300 нс, если вы также спроектировали что-то, #20чтобы быть частью того же интерфейса или структуры управления, он будет иметь диапазон от 20 нс до 600 нс. , Поэтому все это не совсем верно в отношении вашего дизайна. Вы не получите точного #10и того, #20что было указано.

Деревья часов спроектированы таким образом, чтобы ограничить максимальные и минимальные задержки, и чтобы все узлы в дереве часов масштабировались относительно друг друга. Им никогда не дают такого строгого правила, что оно должно быть # 10 нс, поскольку это физически невозможно гарантировать в комбинаторной схеме.


3

Единственная абсолютная единица времени будет от внешних часов. Откуда взялась бы произвольная задержка - какой дискретный цифровой логический эквивалент произвел бы ее из часов?

Если вы хотите синтезируемую задержку, вам нужно будет использовать внешний вход синхронизации и соответствующий конечный автомат / счетчик, который будет рассчитывать определенное количество тактов.


Эта мысль только что пришла мне в голову. Почему мы должны полагаться на часы для генерации задержки? Почему задержка не может быть синтезирована в простой RC-цепи с Vdd?
Ананд

1
Синтез в основном заполняет значения в таблицах поиска и элементах маршрутизации. Я предполагаю, что намного сложнее создать программируемую в полевых условиях RC-цепь, особенно такую, которая не слишком сильно зависит от температуры. Гораздо проще синхронизировать все на одном фронте тактовой частоты, чем надеяться на точное время распространения.
maxy
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.