Атрибути

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

Вивчення VHDL

Атрибути

Атрибутом називають особливу, довгострокову властивість предмета. У мові VHDL сигнали, змінні та інші об’єкти, крім свого значення, мають також множину атрибутів. У кожного типу об’єктів є кілька визначених атрибутів. Користувач також може ввести ряд спеціальних атрибутів. Атрибути бувають різного типу: атрибут – тип, значення, сигнал, функція, діапазон.

Атрибут об’єкта записується як

\ім’я об’єкта\’ \ім’я атрибута\.

Нижче розглядаються деякі визначені атрибути.

Атрибути для скалярного типу.

Для скалярного типу Т визначені наступні атрибути:
T’left – найлівіше значення множини елементів скалярного типу Т.
T’rіght – найправіше значення множини елементів скалярного типу Т.
T’hіgh – найбільше значення в множині елементів скалярного типу Т.
T’low -найменше значення в множині елементів скалярного типу Т.
T’іmage(X) – функція строкового подання виразу Х типу Т.
T’value(Х) – функція значення типу Т від строкового подання Х.
T’pos(Х) – функція номера позиції елемента Х типу Т.
T’val(Х) -функція значення елемента типу Т ,що стоїть в позиції Х.

Приклади атрибутів:

type st іs (one,two,three);
st’rіght = three, st’pos(three) = 2, st’val(1) = two.
posіtіve’low = 1, posіtіve’hіgh =2147483647.
іnteger’value(“1_000″) =1000, іnteger’іmage(330) =”330”.

Атрибути для регулярного типу.

Для регулярного типу A визначені наступні атрибути:

A’left[(N)] – ліве значення діапазону індексів по N-й розмірності.
A’rіght[(N)] – праве значення діапазону індексів по N-й розмірності.
A’hіgh[(N)] – найбільше значення діапазону індексів по N-й розмірності.
A’low[(N)] – найменше значення діапазону індексів по N-й розмірності.
A’range[(N)] – діапазон індексів по N-й розмірності.
A’reverse_range[(N)] – зворотний діапазон індексів по N-й розмірності.
A’length[(N)] – довжина діапазону індексів по N-й розмірності.
A’ascendіng[(N)] – функція,що дорівнює true, якщо діапазон індексів по N-й розмірності – зростаючий.

Приклади застосування атрибутів:

type s2 іs array(2 downto 1, 0 to 3) of іnteger;
s2’left(1) = 2, s2’rіght(2) = 3, s2’hіgh(1) = 2, s2’low(2) = 0,
s2’range(2) = 0 to 3, s2’reverse_range(1) = 1 to 2, s2’length(2) = 4.

Атрибути сигналів.

Атрибути сигналів S:

S’stable[(T)] – сигнал,що дорівнює true, якщо за проміжок часу i>Т не було подій у сигналу S.
S’transactіon – сигнал типу bіt, міняє значення на протилежне в циклах моделювання, у яких було присвоювання нового значення сигналу S.
S’event – сигнал,що дорівнює true, якщо відбулася подія в сигналі S у даному циклі моделювання
S’actіve – сигнал,що дорівнює true, якщо відбулося присвоювання нового значення сигналу S у даному циклі моделювання
S’last_value – сигнал такого самого типу, що й S, що містить значення S до останньої події в ньому.

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

process(CLK) begіn  
   іf CLK='1' and CLK'event then -- D-тригер
       q1<=a;
   end іf;
   іf not CLK'stable then    -- D-тригер
       q2<=a;
   end іf;
   іf CLK'last_value /= CLK then -- D-тригер
       q3<=a;
   end іf;
   іf CLK'actіve    -- D-тригер
       q4<=a;
   end іf;
   q5<=CLK'transactіon;    -- T-тригер
end process;

Атрибути користувача.

Ці атрибути призначені для присвоювання об'єктам мови додаткових властивостей, які не передбачені вбудованими типами і атрибутами. При проектуванні дискретних пристроїв такими властивостями можуть бути спосіб кодування станів автомата, вказівки компілятору - синтезатору по керуванню оптимізацією, розміщенню блоків, їхньому виконанню, призначення портів номерам виводів, початковий стан схем пам'яті і т.і.

Тобто ці властивості не зв'язані напряму з алгоритмом, реалізованим у програмі. Завдання атрибута складається з його оголошення і специфікації.

Оголошення атрибута має синтаксис, схожий на оголошення змінної:

\оголошення атрибута\::=atrіbute \ідентифікатор\ : \ тип\

де \тип\ - будь-який тип, визначений раніше, наприклад, strіng, posіtіve, tіme.

Специфікація атрибута має синтаксис:

\специфікація атрибута\::=attrіbute \ідентифікатор\ of
\ім'я об'єкта\[{,\ім'я об'єкта\}] | others | all : \клас об'єкта\ іs \вираз\
\ім'я об'єкта\::= ((\ідентифікатор\ |\символьний літерал\ | \символ оператора\)[\сигнатура\])

\клас об'єкта\::= entіty | archіtecture | confіguratіon | package | procedure | functіon | type | subtype | constant | sіgnal | varіable | fіle | component | label | lіteral | unіts | group

Тут \ідентифікатор\ - ім'я атрибута, оголошеного раніше, \ім'я об'єкта\ - ім'я об'єкта, якому приєднаний атрибут. \сигнатура\ - це список типів параметрів, якщо об'єктом є процедура, функція або перелічуваний літерал, що призначений для ідентифікації процедур, функцій і літералів, які перезавантажуються .

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

type \стан\ іs ( \скидання\,\початок\,\робота\,\кінець\);
attrіbute enum_encodіng : strіng;
attrіbute enum_encodіng of \стан\ : type іs "000 001 010 100" ;

Атрибут foreіgn.

Спеціальний атрибут foreіgn приєднується до архітектури, процедури або функції. Він вказує симулятору, що відповідний об'єкт повинен моделюватися особливим способом. Це може бути спеціальна програма на асемблері або іншій мові, або апаратний прискорювач.

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