Введение в стандарт IEEE. Справочное руководство по языку VHDL (Пересмотр стандарта IEEE. 1076-1987), страница 24

Инструментальные средства синтеза полностью поддерживают инициализацию значений, если бы не инициализация объектов, которые могут изменять значения после инициализации. То есть, следующая форма значений инициализации не поддерживается, потому что она подразумевает поведение включения питания синтезируемого устройства:

·  Начальные значения сигнала в объявлении сигнала.

·  Начальное значение переменной в объявлении переменных в процессе.

·  Начальное значение ВЫВОДА или порта ВВОДА-ВЫВОДА в списке интерфейса.

Инструментальные средства синтеза поддерживают все остальные формы инициализации.

Диапазон цикла должен быть постоянным в течение времени компиляции.

Циклы без ограничения времени компиляции (особенно бесконечные циклы) не могут представлять резисторно-транзисторную логику. Потому, что границы цикла зависят от "постоянных" значений подобно границам векторных или обычных десятичных литералов. Атрибутов 'ЛЕВОЕ', 'ПРАВОЕ', ' ДИАПАЗОН, и так далее, является обычно достаточно для указания границ цикла.

Ограничения на атрибуты обнаружения перепада ('event).

Большинство ограничений в VHDL приняты для того, чтобы гарантировать правильность трансляции в логическую схему конструкции, которая определяет границы или изменения сигналов. Атрибут 'EVENT' - лучший пример этого. Атрибут 'EVENT' истинен только, если сигнал изменился. Т.е. это истинно только для одного момента времени моделирования. Во всех других случаях это ложно. Атрибут STABLE - противоположность EVENT.

Имеются два ограничения для синтез при использовании атрибутов EVENT и STABLE:

·  EVENT или STABLE атрибут могут использоваться только, чтобы определить фронт синхроимпульса падения или возрастания. Например:

clk'event and clk='1'

-- Возрастающий фронт clk

clk'event and clk='0'

-- Падающий фронт clkNOT

clk'stable and clk='0'

-- Падающий фронт clk

clk'event and clk

-- Возрастающий (булевый) clk

·  Выражения фронта синхроимпульса могут использоваться только как состояния. Например:

if (clk'event and clk='1') then ...wait until NOT

clk'stable and clk='0' ; wait until clk='1' ;               -- По умолчанию

clock edge due to                                           -- VHDL семантика для

'wait'block (clk'event and clk='1'...                       -- Оценка блока GUARD

Эти ограничения основываются на том, что схемы двоичной логики имеют ограниченное число элементов, которые являются активными только в течение перепада сигнала. В основном, только запускаемые фронтом триггеры (установки/сброса). В пределах этих ограничений, инструментальные средства синтеза позволяют свободно использовать состояния фронта синхроимпульса, также в защищенных блоках процессов или подпрограммах.

Ограничения на инструкции задержки.

Все современное инструментальные средства синтеза VHDL имеют сильные ограничения относительно, инструкций ожидания и использования атрибутов обнаружения перепада ('event' и 'stable' ). Имеются (неофициальные) ограничения для инструкции wait:

Только одна инструкция wait (until) разрешается в процессе.

·  Инструкция wait (until), должна быть первой или последней инструкцией в процессе.

·  Выражение в условии "until" должно определить возрастание или падение отдельного фронта синхроимпульса.

Все назначения внутри процесса приводят к созданию регистров. Каждый регистр (триггер) синхронизируется с отдельным сигналом часов.

Имеется множество случаев, когда синтезируемое умножение походит на поведение конечного автомата. Поведение конечного автомата, однако, может всегда перезаписано при помощи оператора выбора (case) и процесса регистра.

Ограничения на множественные драйверы в одном сигнале.