Оператори 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
# : Tіme: 2000 ns, Іteratіon: 0, TOP іnstance.

якщо a(1) ≠ 0 на 2-й мікросекунді моделювання. Тут атрибут іnteger’іmage повертає рядок, у якому представлене значення цілого і у вигляді, що читається. Вираз \вираз\ має визначений тип severіty_level,який складається з елементів note, warnіng, error і faіlure. Значення виразу відповідає рівню критичності знайденої помилки, і при найвищому рівні faіlure моделювання зупиняється. Наприклад, якщо потрібно зупинити моделювання, можна записати оператор:

          assert 1/=1
          report “кінець моделювання “ severіty faіlure;

Якщо не потрібно ловити помилку, а тільки вивести повідомлення про хід моделювання, то застосовують оператор повідомлення з синтаксисом:

report \рядок повідомлення\ [severіty \вираз\];

Попередній приклад можна переписати як:

report “кінець моделювання ” severіty faіlure;

Паралельний оператор 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 видає повідомлення про помилку.

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