Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мпс.DOC
Скачиваний:
25
Добавлен:
16.04.2019
Размер:
1.48 Mб
Скачать

8.10.7. Описание поведения

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

Оператор процесса (Process Statement)

Синтаксис оператора.

< Process_ Statement>::=[<имя_процесса>] PROCESS

[<список_чувствительности>]

<декларативная_часть>

BEGIN

<список_пользовательских_операторов>

END PROCESS[<имя_процесса>]

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

Последовательный оператор ожидания (Wait Statement)

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

<Wait_Statement>::=WAIT [ON (<список_чувствительности>)]

[ UNTIL<булевское_ выражение>] [FOR<выражение_времени>]

Оператор должен содержать не менее одного (допустимо наличие нескольких альтер- нативных вариантов) условия продолжения прерванного процесса. Это может быть как истечение заданного интервала времени, наступление заданного момента времени или наступления заданного события (условия).

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

Последовательный оператор назначения сигнала (Signal Assignment Statement)

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

< Signal_Assignment_Statement >::=<идентификатор_сигнала><=[TRANSPORT]

{<выражение>[AFTER<время>] | NULL[AFTER<время>]}

Отнесение этих операторов к последовательным позволяет включать их в совокупность последовательных операторов (прежде всего помещать внутри операторов процесса), но благодаря основному свойству сигналов—изменение значения сигнала происходит только после того, как завершены преобразования во всех процессах, инициированных общим событием, обеспечивается бесконфликтное планирование будущих значений сигнала. Ис- пользование ключевого слова позволяет заменить предполагаемую по умолчанию инерционную задержку на транспортную задержку. При транспортной задержке все изменения <выражения> будут передаваться (назначаться) определяемому оператором сигналу независимо стих временной протяженности. В отличие от транспортной задержки инерционная задержка позволяет отразить в языке поведение реальных электронных схем, отфильтровыеающих входные сигналы с длительностью менее определенного отрезка вре- мени (величина отрезка указана после ключевого слова АFТЕR).

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

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

Оператор условного назначения сигнала (Conditional Signal Assignment Statement)

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

<Conditional_Signal_Assignment_Statement>::=

<идентификатор_сигнала><=[QUARDED][TRANSPORT]

{<диаграмма>WHEN<условие>ELSE}<диаграмма>

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

Диаграмма задает порядок (или условия) изменения сигнала от текущего момента сис- темного времени.

Определение диаграммы.

<диаграмма>::= <элемент_диаграмма>{<элемент_диаграммы>}

<элемент_диаграммы>::=<выражение_значения_сигнала>

[AFTER<выражение_значение_времени>].

Оператор селективного назначения сигнала (Selected Signal Assignment Statement)

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

<Selected_Signal_Assignment_Statement >::=

[<метка>:]WITH<выражение>SELECT

{<идентификатор_сигнала><= [QUARDED][TRANSPORT]

{<диаграмма> WHEN<выбор>;<диаграмма>WHEN<выбор>;

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

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

<Call_Procedure_Statement>::=

[<метки>:]<имя_процедуры>[(<список_фактических_параментов>)].

Сокращение длины программы за счет сокращения записи для однотипных действий в языке VHDL, как и в других языках, возможно ввиду наличия в языке не только последовательных операторов обращения к процедуре, но и внешне совпадающих с ними парал лельных операторов обращения к процедуре. Выполнение оператора параллельного вызова процедуры эквивалентно выполнению оператора процесса. Существенным Моментом представляется только ограничение на типы формальных пара метров процедуры, которые могут быть либо типа сигнала, либо типа константы. Соответствие формальных и фак- тических параметров достигается позиционным соответствием или сопоставлением имен.

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

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

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

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

<уровень_серьёзности>::=

NOTE | WARNING | ERROR | FAILURE

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

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

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

Условный оператор (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". Этот оператор может входить в совокупность последовательных операторов.