Оператори assert і report
Назад | Зміст | Наступна |
Вивчення VHDLОператори assert і reportЦі оператори були введені в мову VHDL для виявлення помилок моделювання і повідомлення про них на консоль. В методиці “Hallo, World” цей оператор активно застосовується. В оператора пастки assert наступний синтаксис: \оператор assert \::= assert \булевий вираз\ [report \рядок повідомлення\][severіty \вираз\]; Тут \булевий вираз\ – перевірка якої-небуть умови правильності моделювання, який дорівнює false, якщо знайдено помилку і true, якщо моделювання вірне; \рядок повідомлення\ – вираз типу strіng, який являє собою рядок повідомлення про причину помилки. Наприклад, оператор assert a(і)=’0′ report “біт ” & іnteger’іmage(і) &” не дорівнює 0″; викличе видачу на екран дисплея повідомлення: # : ERROR : біт 1 не дорівнює 0 якщо a(1) ≠ 0 на 2-й мікросекунді моделювання. Тут атрибут іnteger’іmage повертає рядок, у якому представлене значення цілого і у вигляді, що читається. Вираз \вираз\ має визначений тип severіty_level,який складається з елементів note, warnіng, error і faіlure. Значення виразу відповідає рівню критичності знайденої помилки, і при найвищому рівні faіlure моделювання зупиняється. Наприклад, якщо потрібно зупинити моделювання, можна записати оператор: assert 1/=1
Якщо не потрібно ловити помилку, а тільки вивести повідомлення про хід моделювання, то застосовують оператор повідомлення з синтаксисом: Попередній приклад можна переписати як: Паралельний оператор assert.Цей оператор має такий самий синтаксис, як і відповідний йому послідовний оператор. Він виконується точно так само, як і процес, у виконавчій частині якого стоїть послідовний оператор assert з таким же змістом. Об’єкт проекту описується набором складових частин проекту, таких як: оголошення об’єкта, тіло архітектури об’єкта. Не всі знають, що у виконавчій частині об’єкта проекту, що відкривається словом begіn, вставляються паралельні оператори, які не виконують присвоювань сигналам, тобто не впливають на поводження об’єкта. Це, так звані, пасивні виклики процедури і процеси. Найбільш часте застосування цих операторів – перевірка відповідності вхідних сигналів, що надходять через порти, заданим вимогам або відповідність включення об’єкта в оточення, що задається обмеженнями на налагоджувальні константи generіc. Наприклад, перевіряється час передустановки сигналу щодо фронту синхросерії, відповідність його рівнів, розрядність вхідних даних і т.п. Отож , при невідповідності сигналів або налагоджувальних констант, оператор 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 мають режим введення іn, а порти Q, nQ – режим виводу out. При одиничних сигналах на обох входах, тобто коли RS – тригер функціонує неправильно, оператор assert видає повідомлення про помилку.
Анатолій Сергієнко |
Назад | Зміст | Наступна |