Скалярные типы языка VHDL. Атрибуты скалярных типов.

Скалярные типы это элементы, из которых конструируются все типы в VHDL. Базовое множество скалярных типов является предопределенным, к примеру введенные ранее типы integer и bit. В VHDL имеется четыре вида скалярных типов: целый тип и тип с плавающей точкой, перечислительный тип и физический тип. Разработчик имеет возможность задавать подтипы скалярных типов. На некоторые характеристики скалярных типов и подтипов могут быть ссылки в выражениях в удобной и компактной форме, называемой записью атрибута (attribute notation). Значение выражения имеет один и только один тип.

ЦЕЛЫЙ ТИП

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

type Oranges is range 0 to 75;

type Word_index is range 31 downto 0;

Границы диапазона могут быть произвольными выражениями. Рассмотрим объявления нескольких объектов, которые используют эти типы.

variable Seville, Valencia, av_oranges:Oranges := 10;

signal control_selector:Word_Index;

Константе должно быть присвоено значение в момент объявления.

Все обычные арифметические операторы и операторы отношения являются предопределенными для целого типа. Тем не менее, оба аргумента оператора должны быть одного типа.

Предопределенный оператор > не работает с операндами различных типов даже если они имеют одинаковый диапазон. Тем ни менее, все целые типы и типы с плавающей точкой являются тесно связанными типами и VHDL обеспечивает для этих типов преобразование между любыми парами. Допускается любое из следующих сравнений:

If Word_Index(Seville)> control_selector.

ТИП С ПЛАВАЮЩЕЙ ТОЧКОЙ

Объекты типа с плавающей точкой используются для представления абстрактных числовых значений. Тип real является предопределенным. Добавочные типы с плавающей точкой могут быть объявлены явно заданием диапазона значений, допустимых для объектов данного типа.

Пример объявлений типа с плавающей точкой.

type Probability is range 0.0 to 1.0;

Объявления, которые используют эти типы.

constant alpha_level: Probability:=0.75;

variable beta_level: Probability;

Литералы с плавающей точкой представляют значения любого типа с плавающей точкой и всегда содержат десятичную точку или отрицательную экспоненту: например, 3.14159, -23.0, 1E-. Запись с экспонентой может быть использована для любого вида числовых литералов: 9Е-целое, а 0.324Е - - с плавающей точкой.

ПЕРЕЧИСЛИТЕЛЬНЫЕ ТИПЫ

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

Пример:

type severity is(OKAY, NOTE, WARNING, ERROR, FAILURE);

type color

is(red, orange, yellow, green, blue, indigo, violet);

Нет необходимости писать объявления для следующих перечислительных типов, поскольку они являются предопределенными:

type character is (NUL,...,'A','B','C',...DEL);

type boolean is (False, True);

type bit is ('0','1');

Физические типы

Физические типы позволяют разработчику непосредственно выразить величины в физических единицах измерения. В VHDL используется один физический тип - предопределенный физический тип TIME (время). В случае типа TIME базовой единицей является fs (фемтосекунла), а производными единицами являются рs, ns и так далее.

Пример объявления типа TIME.

type TIME is range -{2**31-1} to 2**31-1

units

fs;

ps = 1000 fs;

ns = 1000 ps;

us = 1000 ns;

ms = 1000 us;

s = 1000 ms;

min = 60 s;

hr = 60 min;

end units;

Если желательно, чтобы скалярный обьект принимал значения некоторого типа из ограниченного диапазона, то это может быть отражено в тексте проекта при помощи обьявления и использования подтипа. Предположим, к примеру, что разработчик желает создать сигнал А типа severity и что А может принимать только значения OKAY, NOTE и WARNING.

type severity is (OKAY, NOTE, WARNING, ERROR, FAILURE);

subtype go_status is severity range OKAY to WARNING;

signal A: go_status;

Программа моделирования будет проверять, попадает ли значение в диапазон от OKAY до WARNING, в момент выполнения назначения. Если это не выполняется, то моделирование будет остановлено и будет выдано сообщение, описывающее это нарушение.

Эквивалентное объявление подтипа и сигнала, приведенным выше:

signal A: severity range OKAY to WARNING;

ПРЕДОПРЕДЕЛЕННЫЕ АТРИБУТЫ СКАЛЯРНЫХ ТИПОВ

На некоторые характеристики скалярных типов и подтипов могут быть ссылки в выражениях в удобной и компактной форме, называемой записью атрибута (attribute notation).

Если Т является именем скалярного типа,

то T'high является наибольшим возможным значением типа,

а T'low - наименьшим возможным значением.

Например, color'high = violet, а color'low = red.

T'right - самое правое значение типа, а

T'left - самое левое значение типа.

T'left отличается от T'low, а T'high от T'right

только если направление для типа - downto.

ПРЕДОПРЕДЕЛЕННЫЕ ФУНКЦИОНАЛЬНО-ЗНАЧНЫЕ АТРИБУТЫ

Целый, перечислительный и физический типы имеют позиционный номер, связанный с каждым значением типа. Позиционный номер первого значения в перечислительном типе - нуль; каждый следующий знак имеет позиционный номер на единицу больше, чем предшествующий. Функционально-значные атрибуты 'pos и 'val используются для преобразования значения типа в соответствующий позиционный номер и наоборот. Ниже приведены выражения, результат которых булевого типа и равен true.

... severity'pos(ERROR)=3...

...color'val(3)=green...

...color'val(severity'pos(ERROR))=green...

Функции 'pred и 'succ возвращают элементы, чьи позиционные номера на единицу больше или на единицу меньше, чем у аргумента.

...color'succ(orange) = yellow...

...color'pred(indigo) = blue...

Наши рекомендации