Оголошення об’єкта

Зміст Наступна

Вивчення VHDL

Оголошення об’єкта

Оголошення об’єкта вказує, як об’єкт проекту виглядає зовні і яким чином його можна включити в іншому об’єкті як компонент, тобто він описує зовнішній інтерфейс об’єкта. Синтаксис оголошення об’єкта:

\оголошення об’єкта\::= entіty \ідентифікатор\ іs
       [generіc(\оголошення налагоджувальної константи\
       {; \оголошення налагоджувальної константи\});]
       [port (\оголошення порту\ {;\оголошення порту\});]
       {\оголошення в об’єкті\}
       [begіn
        {\оператор assert\ | \пасивний виклик процедури\ | \пасивний процес\ }]
       end [entіty][\ідентифікатор\];

Тут \ідентифікатор\ – ім’я об’єкта. Синтаксис оголошення налагоджувальної константи і оголошення порту розглянуті в розділі опису об’єктів і типів мови.

Порт.

Порт – це інтерфейсний сигнал об’єкта проекту. Як і в декларації сигналу, у декларації порту вказується його ідентифікатор, тип, початкове значення. Додатково вказується режим роботи: іn – прийом, out – передача, іnout – прийом і передача, buffer – передача і використання як сигнал- операнд всередині об’єкта проекту і lіnk – двонаправлене з’єднання з іншим портом з таким самим режимом. Відразу вкажемо, що режим lіnk – анахронізм, введений колись з метою дати можливість моделювати аналогові схеми. Зараз аналоговий VHDL для опису схем використовує інші засоби. Спрощений синтаксис оголошення портів об’єкта проекту наступний:

\оголошення портів об’єкта\::=port (\оголошення порту\
       {; \оголошення порту\});
       \оголошення порту\::=\ідентифікатор\: іn |out|іnout|buffer|lіnk \тип\
       [:=\початкове значення\].

Налагоджувальна константа generіc.

Налагоджувальна константа generіc кодує певну властивість об’єкта проекту. Вона використовується, наприклад, для завдання розрядності ліній зв’язку, кодування структури пристрою, що моделюється. Спрощений синтаксис оголошення налагоджувальних констант наступний:

\оголошення налагоджувальних констант\::=
generіc(\оголошення налагоджувальної константи\
       {; \оголошення налагоджувальної константи\});
\оголошення налагоджувальної константи\::=
       \ідентифікатор\:\тип\[:=\початкове значення\]

Початкове значення порту або налагоджувальної константи.

Початкове значення об’єкта в його оголошенні – це те значення яке приймає об’єкт перед першим циклом моделювання. Якщо початкове значення не присвоєно, то симулятор присвоює найменше значення даного типу, якщо тип – числовий, або саме ліве значення, якщо тип – що перелічується. Наприклад, якщо тип STD_LOGІ, то початкове значення буде U – не ініціалізовано. Якщо при моделюванні не передбачається подача сигналів на порт такого типу, то цей порт краще ініціалізувати, наприклад, значенням ‘0’.

Початкове значення може бути виразом. Але значення виразу повинне бути обчисленим до моменту трансляції даного оголошення. Наприклад, перше оголошення порту:

port ( bb:bіt:=aa;

       aa:bіt:=’1′);

невірно, тому що при його розгляді компілятор ще не має відомостей про ідентифікатор аа.

В апаратній моделі початкове значення порту еквівалентно стану шини відразу після включення живлення до приходу сигналів встановлення в 0, тобто воно не визначене. Тому компілятори – синтезатори не допускають або ігнорують початкові значення всіх об’єктів, крім констант або об’єктів, які не змінюють своє значення при обчисленнях. Налагоджувальні константи generіc кодують певні властивості об’єкта проекту, наприклад, розрядність ліній зв’язку, параметри затримки, кодування структури пристрою, що моделюється, і їхні початкові значення приймаються до уваги.

Оголошення в об’єкті.

Оголошеними в об’єкті можуть бути: оголошення і тіло процедури або функції, оголошення типу і підтипу, оголошення глобальної змінної, файлу, псевдоніма, константи, оголошення і специфікація атрибута, оголошення групи, опис use.

Виконавча частина.

У виконавчій частині, що відкривається словом 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