СКАЛЯРНЫЕ И СОСТАВНЫЕ ТИПЫ ЯЗЫКА VHDL



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

Числовые типы

В VHDL поддерживается два основных типа для представления чисел: целочисленный и тип с плавающей запятой.

Тип Integer    

Дляпредставления целых чисел используется тип integer. Этот тип позволяет представить числа в диапазоне от —2 147 483 647 до 2 147 483 647.

Тип Real

Для представления действительных чисел используется тип Real. Он имеет диапазон от -1.0Е+38 до 1.0Е+38.

Физические типы данных

Для представления физических величин (таких как длина, масса, время), в языке VHDL используются так называемые физические типы.Данные, принадлежащие к физическому типу, определяются своим значением и единицей измерения. Для одного и того же физического параметра может использоваться множество единиц измерения.

Организация физических типов в VHDL позволяет установить соответствие между различными единицами измерения. К физическим типам может быть применено большинство арифметических операторов, но с некоторыми ограничениями.

Описание времени

VHDL поддерживает встроенный физический тип time для описания времени.

Перечислимые типы данных

Перечислимые типы могут задаваться двумя способами: диапазоном и списком значений.

Подтипы

Нередко модель содержит объекты, которые могут принимать значения только в строго ограниченной области из множества возможных значений какого-либо типа. Тип таких объектов можно определить на базе основного типа. Он будет называться подтипом этого типа. Использование подтипов облегчает понимание модели.

Составные типы данных

Массивы

Массив представляет собой набор элементов одного и того же типа. Позиция каждого элемента задается скалярным значением — индексом.
32.СКАЛЯРНЫЕ ТИПЫ ЯЗЫКА 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) =


Дата добавления: 2020-04-08; просмотров: 204; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!