Оператори 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 видає повідомлення про помилку. 
Анатолій Сергієнко | 
| Назад | Зміст | Наступна | 
