Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Оператор ожидания wait. Пример применения.




Оператор ожидания wait вызывает приостановку процедуры или оператора процесса

wait_statement::=

[label:] wait [sensitivity_clause][condition_clause] [timeout_ clause];

sensitivity_clause::=on sensitivity_list (указывается список чувствительности)

sensitivity_list::=signal_name{,signal_name}

condition_clause::=until condition (условие ожидания)

condition::=boolean_expression

timeout_clause::=for time_expression (задержка ожидания)

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

Условие ожидания определяет условие, встретив которое процесс продолжит свое выполнение.

Задержка ожидания (timeout) определяет максимальное время, в течение которого процесс будет оставаться приостановленным на данном операторе ожидания.

При выполнении оператора ожидания вычисляется значение в выражении времени для определения времени приостановки. Приостановленный процесс будет возобновлен немедленно после окончания интервала приостановки (timeout interval) простоя.

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

ПРИМЕРЫ:

1) По оператору wait on CLK, RST; продолжение выполнения процесса начнется по событию изменения сигналов CLK или RST.

2) По оператору wait until CLK='1‘; продолжение начнется в момент переключения состояния CLK из '0' в '1', т.е. по фронту этого сигнала.

3) Оператор wait for CLK_PERIOD; остановит процесс на время, заданное переменной CLK_PERIOD типа time.

***** Возможно комбинирование списка чувствительности, условия ожидания и задержки ожидания в одном операторе.

*****Оператор wait без списка чувствительности, условия ожидания и задержки ожидания

Остановит процесс до конца моделирования.

 

Оператор утверждения assert. Пример применения.

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

assertion_statement::= [label:] assertion;

assertion:: = assert condition [ report expression] [ severity expression]

Выполнение оператора утверждения состоит в вычислении булева выражения, определяющего условие.

Если выражение имеет результат FALSE (ложь), то говорят, что произошло нарушение утверждения.

Когда происходит нарушение утверждения, то оцениваются выражения операторов сообщения report и строгости severity соответствующего утверждения, если они присутствуют.

Затем указанная строка сообщения и уровень строгости (или соответствующие значения по умолчанию, если они отсутствуют) используются для формирования сообщения об ошибке.

Оператор сообщения report определяет строковое сообщение, которое будет включено в сообщения об ошибках, формируемые оператором. При отсутствии оператора сообщения report для данного утверждения, значением по умолчанию для строкового сообщения является строка Assertion violation (Нарушение утверждения).

ПРИМЕР 1:

Если требуется остановить моделирование, можно записать оператор:

assert 1/=1 report "конец моделирования " severity failure;

ПРИМЕР 2:

Если не нужно ловить ошибку, а только вывести сообщение о ходе моделирования, то применяют оператор сообщения с синтаксисом:

report \строка сообщения\ [severity \выражение\];

Предыдущий пример можно переписать как:

report "конец моделирования " severity failure;

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

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

Применение оператора утверждения assert

Рассмотрим пример объявления объекта RS-триггера:

Entity RS_FF is

generic(delay:time);

port(R, S: in bit;

Q: out bit:='0';

nQ: out bit:='1');

Begin

assert (R and S) /='1' report “In RS_FF R=S=1" severity error;

end entity RS_FF;

При единичных сигналах на обоих входах, т.е. когда RS – триггер функционирует неправильно, оператор assert выдает сообщение об ошибке.

 

Атрибуты сигналов. Примеры применения.

Атрибуты

Ø Атрибутом называют особенное, долговременное свойство предмета.

Ø В языке VHDL сигналы, переменные и другие объекты, кроме своего значения, также имеют множество атрибутов.

Ø У каждого типа объектов есть несколько предопределенных атрибутов.

Ø Пользователь также может ввести ряд специальных атрибутов.

Ø Атрибуты бывают различного типа: атрибут – тип, значение, сигнал, функция, диапазон.

Семантика:

\имя объекта\' \имя атрибута\

Атрибуты сигналов

\имя объекта\' \имя атрибута\

S'stable[(T)] – сигнал, равный true, если за промежуток времени Т не было событий у сигнала S.

S'transaction – сигнал типа bit, меняет значение на противоположное в циклах моделирования, в которых было присваивание нового значение сигналу S.

S'event – сигнал, равный true, если произошло событие в сигнале S в данном цикле моделирования.

S'active – сигнал, равный true, если произошло присваивание нового значение сигналу S в данном цикле моделирования.

S'last_value – сигнал такого же типа, что и S, содержащий значение S до последнего события в нем.

Атрибуты сигналов

entity signal_ex is

end signal_ex;

architecture beh of signal_ex is

signal ex, у 1, уЗ: bit;

signal у2: boolean;

begin

ex <= '0' after 20 ns,

‘1’ after 50ns,

'0' after 60 ns,

‘1’ after 80ns;

yl <= ex'transaction;

у 2 <= ex'event;

y3 <= ex'last_value;

end beh;

Ex'transaction

X'event

Ex'last_value

 

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...