Операторы assert и report

Cодержание Следующая

Изучение VHDL

Операторы assert и report.

Эти операторы были введены в язык VHDL для выявления ошибок моделирования и сообщения о них на консоль. В методике «Hallo, World» этот оператор активно применяется. У оператора ловушки assert следующий синтаксис:

\оператор assert \::= assert \булевское выражение\

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

Здесь \булевское выражение\ — проверка какого-либо условия правильности моделирования, которое равно false, если найдена ошибка и true, если моделирование верно;

\строка сообщения\ — выражение типа string, представляющее строку сообщения о причине ошибки. Например, оператор

assert a(i)=’0′

report «бит » & integer’image(i) &» не равен 0″;

вызовет выдачу на экран дисплея сообщения:

# : ERROR : бит 1 не равен 0
# : Time: 2000 ns, Iteration: 0, TOP instance.

если a(1) ≠ 0 на 2-й микросекунде моделирования. Здесь атрибут integer’image возвращает строку, в которой представлено значение целого i в читаемом виде. Выражение \выражение\ имеет предопределенный тип severity_level, состоящий из элементов note, warning, error и failure. Значение выражения соответствует уровню критичности найденной ошибки и при самом высоком уровне failure моделирование останавливается. Например, если требуется остановить моделирование, можно записать оператор:

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

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

Предыдущий пример можно переписать как:
report «конец моделирования» severity failure;

Параллельный оператор assert.

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

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

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

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

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

entіty RS_FF іs
   generіc(delay:tіme);
   port(R, S: іn bіt;
        Q: out bіt:='0';
        nQ: out bіt:='1');

begіn
 assert> (R and S) /='1' report" Іn RS_FF R=S=1" severіty error;
end entіty RS_FF;

В нем настроечная константа delay задает параметр задержки, например, от входа до выхода, который будет подставлен при компиляции на этапе связывания компонентов. Порты R,S имеют режим ввода in, а порты Q, nQ — режим вывода out. При единичных сигналах на обоих входах, т.е. когда RS — триггер функционирует неправильно, оператор assert выдает сообщение об ошибке.

Анатолий Сергиенко
E-mail: aser@comsys.kpi.ua