Атрибуты

Cодержание Следующая

Изучение VHDL

Атрибуты.

Атрибутом называют особенное, долговременное свойство предмета. В языке VHDL сигналы, переменные и другие объекты, кроме своего значения, также имеют множество атрибутов. У каждого типа объектов есть несколько предопределенных атрибутов. Пользователь также может ввести ряд специальных атрибутов. Атрибуты бывают различного типа: атрибут — тип, значение, сигнал, функция, диапазон.

Атрибут объекта записывается как

\имя объекта\’ \имя атрибута\.

Ниже рассматриваются некоторые предопределенные атрибуты.

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

Для скалярного типа Т предопределены следующие атрибуты:

T’left — самое левое значение множества элементов скалярного типа Т.
T’right — самое правое значение множества элементов скалярного типа Т.
T’high — наибольшее значение в множестве элементов скалярного типа Т.
T’low — наименьшее значение в множества элементов скалярного типа Т.
T’image(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’right[(N)] — правое значение диапазона индексов по N-й размерности.
A’high[(N)] — наибольшее значение диапазона индексов по N-й размерности.
A’low[(N)] — наименьшее значение диапазона индексов по N-й размерности.
A’range[(N)] — диапазон индексов по N-й размерности.
A’reverse_range[(N)] — обратный диапазон индексов по N-й размерности.
A’length[(N)] — протяженность диапазона индексов по N-й размерности.
A’ascending[(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, если за промежуток времени Т не было событий у сигнала S.
S’transaction — сигнал типа bit, меняет значение на противоположное в циклах моделирования, в которых было присваивание нового значение сигналу S.
S’event — сигнал, равный true, если произошло событие в сигнале S в данном цикле моделирования.
S’active — сигнал, равный 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;

Атрибуты пользователя.

Эти атрибуты предназначены для присваивания объектам языка дополнительных свойств, не предусмотренных встроенными типами и атрибутами. При проектировании дискретных устройств такими свойствами могут быть способ кодирования состояний автомата, указания компилятору - синтезатору по управлению оптимизацией, размещению блоков, их исполнению, назначение портов номерам выводов, начальное состояние схем памяти и т.п.

Т.е. эти свойства не связаны напрямую с алгоритмом, реализуемым в программе. Задание атрибута состоит из его объявления и спецификации.

Объявление атрибута имеет синтаксис, похожий на объявление переменной:

\объявление атрибута\::=atribute \идентификатор\ : \ тип\

где \тип\ - любой ранее определенный тип, например, string, positive, time.

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

\спецификация атрибута\::=attribute \идентификатор\ of
\имя объекта\[{,\имя объекта\}] | others | all : \класс объекта\ is \выражение\
\имя объекта\::= ((\идентификатор\ |\символьный литерал\ | \символ оператора\) [\сигнатура\])

\класс объекта\::= entity | architecture | configuration | package | procedure | function | type | subtype | constant | signal | variable | file | component | label | literal | units | group

Здесь \идентификатор\ - имя атрибута, объявленнного ранее, \имя объекта\ - имя объекта, которому присоединен атрибут. \сигнатура\ - это список типов параметров, если объектом является процедура, функция или перечисляемый литерал, предназначенный для идентификации перезагружаемых процедур, функций и литералов.

Спецификация атрибута обычно вставляется сразу же после объявления этого атрибута.
Атрибуты пользователя обычно не влияют на поведение модели и такие атрибуты игнорируются симулятором. Но они имеют большое значение для компилятора - синтезатора и для средств реализации схемы в кристалле. Поэтому, как правило, фирмы - поставщики компиляторов и производители микросхем предлагают для использования свои наборы атрибутов пользователя. В следующем примере атрибут указывает способ кодирования состояний автомата:

type \состояние\ is ( \сброс\,\начало\,\работа\,\конец\);
attribute enum_encoding : string;
attribute enum_encoding of \состояние\ : type is "000 001 010 100" ;

Атрибут foreign.

Специальный атрибут foreign присоединяется к архитектуре, процедуре или функции. Он указывает симулятору, что соответствующий объект должен моделироваться особенным способом. Это может быть специальная программа на ассемблере или другом языке, или аппаратный ускоритель.

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