Оператор ожидания 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 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|