Операторы 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 если a(1) ≠ 0 на 2-й микросекунде моделирования. Здесь атрибут integer’image возвращает строку, в которой представлено значение целого i в читаемом виде. Выражение \выражение\ имеет предопределенный тип severity_level, состоящий из элементов note, warning, error и failure. Значение выражения соответствует уровню критичности найденной ошибки и при самом высоком уровне failure моделирование останавливается. Например, если требуется остановить моделирование, можно записать оператор: assert 1/=1 Если не нужно ловить ошибку, а только вывести сообщение о ходе моделирования, то применяют оператор сообщения с синтаксисом: Предыдущий пример можно переписать как: Параллельный оператор 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 выдает сообщение об ошибке.
Анатолий Сергиенко |
Назад | Cодержание | Следующая |