Атрибуты пользователя.
Эти атрибуты предназначены для присваивания объектам языка дополнительных свойств, не предусмотренных встроенными типами и атрибутами. При проектировании дискретных устройств такими свойствами могут быть способ кодирования состояний автомата, указания компилятору – синтезатору по управлению оптимизацией, размещению блоков, их исполнению, назначение портов номерам выводов, начальное состояние схем памяти и т.п. Т.е. эти свойства не связаны напрямую с алгоритмом, реализуемым в программе. Задание атрибута состоит из его объявления и спецификации.
Объявление атрибута имеет синтаксис, похожий на объявление переменной:
\объявление атрибута\::=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" ;