Oб’єкти мови VHDL

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

Вивчення VHDL

Oб’екти мови VHDL

Сигнали, змінні, константи та інші об’єкти мови VHDL служать для змісту і переносу деяких значень. Ці значення можуть бути присвоєні об’єктам в одному місці і потім використані в іншому місці програми, як операнди у виразах, функціях і т.п. На цій сторінці наведені об’єкти мови і синтаксис їхнього оголошення (декларації).

Сигнал.

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

signal : \ідентифікатор\{,\ідентифікатор\}:=[\початкове значення\];

де – \початкове значення\ – вираз, що представляє константу, значення якої приймає сигнал перед першим запуском процесу.

Константа.

Константою є об’єкт, що не змінює своє значення при обчисленнях. Після оголошення константи присвоювання їй значення заборонено (крім випадку відкладеної константи). Приклад оголошення константи:

сonstant thousand: integer:=1000;

Змінна.

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

\оголошення змінної\::=
[shared] variable \ідентифікатор\ {,\ідентифікатор\}: \тип\ [:=\початкове значення\];

Приклад оголошення змінної:

variable tmp: integer range -128 to 127:=0;

Порт.

У структурі програми VHDL виділяються об’єкти проекту, що називаються entity. Не плутати об’єкти мови з об’єктом проекту. Це пов’язане з тим, що, по-перше, object і entity перекладаються однаково, по-друге, в Language Reference Manual сигнали, змінні та ін. у деяких декларативних місцях обзиваються як entities. У цьому слові є щось філософське, як в афоризмі: “Електрон невичерпний, як і атом”.

Порт являє собою інтерфейсний сигнал об’єкта проекту. Як і в декларації сигналу, у декларації порту вказується його ідентифікатор, тип, початкове значення. Додатково вказується режим роботи: in – прийом, out – передача, inout – прийом і передача, buffer – передача і використання як сигнал-операнд всередині об’єкта проекту та link – двонаправлене з’єднання з іншим портом з таким же режимом. Спрощений синтаксис оголошення портів об’єкта проекту наступний:

\оголошення портів\::= port (\оголошення порту\ {; \оголошення порту\});

\оголошення порту\ :: =
\ідентифікатор\ : in|out|inout|buffer|link \тип\ [:=\початкове значення\]

Настроювальна константа generic.

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

\оголошення настроювальних констант\::= generic( \оголошення настроювальної константи\
        {; \оголошення настроювальної константи\});

\оголошення настроювальної константи\::= \ідентифікатор\: \тип\[:=\початкове значення\]

Змінна циклу.

Змінна циклу – це спеціальний об’єкт у тому розумінні, що він не вимагає оголошення. Детальніше про неї сказано при описі оператора циклу loop.

Початкове значення об’єкта.

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

Наприклад, багато хто спочатку дивуються, чому проект, написаний із сигналами стандартного типу STD_LOGIC, відмовляється поводитися як задумано – на всіх виходах моделі – значення U (не ініціалізовано). Пояснення просте: U – це найлівіше значення перелічного типу STD_LOGIC, а якимсь сигналам у моделі не дали очікуваного початкового значення або на них не поширився сигнал встановлення в 0. І значення U поширилося до виходів моделі згідно з логікою STD_LOGIC.

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

signal bb:bit:=aa;

signal aa:bit :=’1′;

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

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

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