Выше уже было показано, что модуль на VHDL, описывающий синтезируемое устройство, состоит из разделов entity и architecture. Рассмотрим их более подробно.

В разделе entity («сущность») описывается интерфейс модуля и сопутствующие ему характеристики. Собственноинтерфейсописываетсявподразделе Port.

 

entitynew_module is

Port( a : in  STD_LOGIC;

b : in  STD_LOGIC;

c : out  STD_LOGIC);

endnew_module;

 

В разделе Port в показанном примере перечислены входные сигналы a и b, а также выходной сигнал c. Формат объявления интерфейсного сигнала следующий:

 

<имя> :<спецификатор направления><тип>;

 

Здесь <имя> - один из разрешенных идентификаторов в VHDL, ограничения на которые подобны ограничениям на имена переменных в языках программирования. Идентификатор может содержать буквы латинского алфавита, цифры и символ подчеркивания, не должен начинаться с цифры, не должен заканчиваться символом подчеркивания или содержать внутри два символа подчеркивания подряд.

<спецификатор направления> может быть следующим:

–in – входной сигнал, только для чтения;

–out – выходной сигнал, только для записи;

–inout – двунаправленный сигнал;

–buffer – выходной (буферный сигнал), значение которого может быть считано модулем.

Типы сигналов будут рассмотрены в следующих разделах.

В разделе architecture описывается внутренняя реализация модуля.

 

architecture Behavioral ofnew_moduleis

 

begin

c <= a and b;

endBehavioral;

 

В показанном примере описывается реализация модуля 2И. Идентификатор Behavioral представляет собой имя архитектуры и не является зарезервированным словом. Присвоение архитектуре идентификатора необходимо потому, что каждому объявлению entity может соответствовать несколько архитектур, различающиеся способом реализации. Например, в показанном выше примере был использован подход, основанный на inference – синтезатор выбрал способ реализации логического выражения, основываясь на его поведенческом описании. Если это по каким-то причинам не устраивает разработчика, он может использовать instantiate-подход, выбрав вентиль 2И из библиотеки стандартных компонентов. Чтобы не править уже готовый вариант архитектуры (тем более что впоследствии может возникнуть желание вернуться к нему), в модуле оформляется еще один раздел architecture, для которого выбирается другой идентификатор.

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

BEH, Behavioral – для описаний, выполненных в поведенческом стиле.

RTL – для описаний на уровне регистровых передач.

STRUCT, Structural – для структурных описаний.

TEST – для тестов.

В дальнейшем для проекта можно глобально установить использование той или иной архитектуры:

 

for all : HALF_ADD use entitywork.new_module(RTL);

 

Эта строка устанавливает использование архитектуры RTL для всех компонентов new_module, используемых в проекте.

Несколько вариантов архитектур и регулярное употребление конфигураций обычно сопутствуют сложным, комплексным проектам, разрабатываемым с учетом необходимости проверки альтернативных конструкторских решений и возможного переноса на другую аппаратную базу. Как правило, такой подход не требуется для большинства проектов, ориентированных на ПЛИС.

 = Перейти к содержанию =