СИНТАКСИС ОПЕРАТОРОВ ОБЩЕАЛГОРИТМИЧЕСКОЙ

СОСТАВЛЯЮЩЕЙ ЯЗЫКА

Условный оператор (if Statement)

Описание оператора.

< if_Statement>::=IF<условие>THEN <последовательные_операторы>

{ELSIF<условие>THEN <последовательные_операторы >}

[ELSIF<последовательные_операторы>]

END IF;

Оператор If языка подобен условным операторам в других языках программирования. Специфическим является требование использования при реализации любого условия совокупности последовательных операторов.

Оператор выбора (Case Statement)

Описание оператора.

<Case_Statement>::=CASE<выражение>IS

WHEN<выбор>=><последовательные_операторы>

{ WHEN <выбор>=><последовательные операторы>}

END CASE;

<выбор>::=<простое_выражение>|<дискретный_диапозон>

| <одноразмерный_массив_символов>|<другое…..>

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

Оператор цикла (Loop Statement)

Описание оператора.

< Loop_Statement>::=[<метка_цикла>:][WHILE<условие>|

FOR<идентификатор>IN <дискретный_диапазон>]

LOOP<последовательные_операторы>

END LOOP[<метка_цикла>];

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

Внутри оператора цикла для упрощения записи могут использоваться два дополнительных оператора—NEXT и ЕХIТ.

<Next_Statement>::=NEXT[<метка_цикла>][WHEN<условие>];

Оператор употребляется для завершения очередной итерации цикла.

<Exit_Statement>::=EXIT[<метка_цикла>][WHEN<условие>];

Оператор употребляется для завершения всех итераций и выхода из цикла.

Оператор вызова процедуры (Call Procedure Statement) и оператор выхода из процедуры (Return Statement)

Традиционные операторы обращения к процедуре и выхода из процедуры. Оператор вызова процедуры (Call Procedure Statement).

<Call_Procedure_Statement>::=<имя_процедуры>[(<список_параметров>)]

Оператор выхода из процедуры (Return Statement).

<Return_Statement>::=RETURN[<выражение>];

Оператор последовательного сообщения (Assert Statement)

Определение оператора.

<Assert Statement>::=[<метка>:]ASSERT<условие> [REPORT<сообщение>]

[SEVERITY <уровень_серьезности>]

<уровень_серьёзности>::=NOTE|WARNING|ERROR|FAILURE

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

Если уровень серьезности и текст сообщения опущены, то по умолчанию выполнение условия оператора приводит к выводу сообщения "Assertion violation". Этот оператор может входить в совокупность последовательных операторов.

 

ОПИСАНИЕ ПРОЕКТОВ НА ЯЗЫКЕ VHDL ПРИМЕРЫ, ИЛЛЮСТРИРУЮЩИЕ ОСНОВНЫЕ КОНСТРУКЦИИ VHDL

СТРУКТУРНОЕ ОПИСАНИЕ

Проиллюстрируем структурные варианты описаний на простейших примерах. Пусть требуется описать на языке VHDL комбинационную схему, реализующую функцию У=not(not(in1^in2)^in3) под наименованием exemple1, опирающуюся на поведенческое описание функционирования двухвходового элемента типа 2И-НЕ. Схема приведена на рис. 8.11.

Листинг примера может иметь вид:

ENTITY example1 IS

РОRТ (in1, in2, in3: IN BIT;

y:OUT BIT;

END example1;

ARCHITECTURE struct OF example1 IS

COMPONENT nand2

РОRТ (x1, x2: IN BIT;q: OUT BIT);

ЕND СОМРОNЕМТ;

SIGNAL z: ВIТ;

ВЕGIN

Unit1: nand2 РОRТ МАР (iп1, in2,z);

Unit2: nand2 РОRТ МАР (q=>y, х1=>in3, х2=>z );

END struct;

В примере описан интерфейс устройства, имеющего три входа и один выход, и структура устройства, когда оно состоит из соединения компонентов под названием nand2. Предполагается, что в проекте имеется описание интерфейса и поведения элемента типа

2И-НЕ, по смыслу совпадающее с фрагментом:

 


 

ЕNТIТY nand2 IS

РОRТ (in1, in2: IN ВIТ;

out:OUT BIT;

END nand2;

ARCHITECTURE behave OF nand2 IS

BEGIN

Out<=not(in1 and in2);

END behave;

В состав устройства входят два компонента типа nand2 с именами unit1 и unit2 подсоединяемые при помощи сигналов in1, in2, in3 и Y к внешним контактам устройства и соединяемые между собой при помощи сигнала (цепи) под именем Z. Устройство unit1 подключается при помощи позиционного соответствия между формальными и фактическими именами входных и выходных сигналов. Подключение устройства unit2 выполнено с применением ключевого соответствия между формальными и фактическими именами. Ключевое соответствие позволяет отобразить отсутствие соединения у выходного контакта при помощи ключевого слова ОРЕN.

Рассмотрим пример описания структуры 16-разрядного регистра, используя понятие Component и опираясь на конструкцию Generate.Предполагается, что в проекте поведение триггера D описано ранее и может совпадать с примером, приведенным далее в листинге.

ЕNТIТY reg16 IS

РОRТ (input: IN bit_VECTOR(0 TO 15);

clock: IN ВIТ;

output: OUT BIT VEKTOR(0 TO 15);

END reg16;

ARCHITECTURE struct OF reg16 IS

СОМРОNЕNТ dff

РОRТ (d, clk: IN BIT; q: OUT BIT);

END СОМРОNЕNТ;

BEGIN

g1: FOR i IN 1 TO 16 GENERATE

dff PORT MAP(input(i), clock, output(i));

END GENERATE g1;

Из примера очевидна компактность записи структуры устройства при применении синтаксической конструкции Generate.

 

ПОВЕДЕНЧЕСКОЕ ОПИСАНИЕ

Проиллюстрируем поведенческие варианты описаний на том же простейшем примере. Начиная с раздела Entity Declaration, описание может иметь следующий вид:

ENTITY input3_nand IS-entity declaration

РОRТ (in1, in2, in3: IN BIT; - port statement

y:OUT BIT);

END input3_orand1;

ARCHITECTURE one OF input3_nand IS

-architecture "one" of entity input3_nand1

BEGIN

nand3:PROCESS

BEGIN

IF (in3='1') THEN y<=NOT (in1 AND in2);

ELSE y<='1';

END IF;

WAIT ON in1, in2, in3;

END PROCESS;

END;

Описание поведения 8-разрядного счетчика с тактируемым входом сброса (в архитектурном теле) можно задать следующим образом:

Synch_count: PROCESS

BEGIN

WAIT UNTIL clock='1';

IF(reset='1') ТНЕN count<="00000000";

ELSE count <= count+'1';

END IF;

END PROCESS;

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

• последовательный, когда преобразование потока входных данных в поток выходных данных осуществляется с использованием только последовательных операторов;

• параллельный (процессный), когда описание поведения задано в виде параллельно выполняемых процессов;

• потоковый, когда описание задано в виде последовательности параллельных операторов языка.

К специфическому стилю описания можно отнести автоматный способ описания, когда функционирование устройства задано в форме описания набора состояний устройства, правил переходов и действий, выполняемых в определенных состояниях и на определенных переходах. Распространенным вариантом автоматной формы является описание в форме конечного автомата Мура или Мили.

Введение понятия стиля и наличие различных стилей отнюдь не означает, что какой-либо стиль позволяет описать функционирование определенной системы, а другой стиль нет. Каждый стиль характеризует систему с Определенной точки зрения, и события, происходящие в ней (с точки зрения проектировщика), лучше всего отражаются при помощи выбранного стиля. Вместе с тем необходимо отметить, что для САПР, синтезирующих структуру БИС ПЛ из VHDL-описания, варианты, синтезируемые различными стилями, описания, могут давать различные варианты реализации. Более того, синтезирующие компиляторы могут даже не поддерживать компиляции при определенных способах описания поведения системы.

Процессная форма описания благодаря списку инициализирующих сигналов и едино временности выполнения последовательных операторов в теле каждого процесса может наиболее точно описывать функционирование последовательно-параллельного взаимодействия обрабатывающих устройств. Возможность последовательного оператора назначения сигнала (находящегося в теле процесса) использовать синтаксическую конструкцию АРТЕВ позволяет описывать (или задавать) взаимодействие процессов со сложным распределением во времени.

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