Применение языка VHDL при проектировании специализированных СБИС. Ивченко В.Г. - 11 стр.

UptoLike

Составители: 

12
1.3.1.4. Подтипы скалярных типов
Если желательно, чтобы скалярный объект принимал значения некоторого типа из ограниченного диапазона,
то это может быть отражено в тексте проекта при помощи объявления и использования подтипа. Предположим,
к примеру, что разработчик желает создать сигнал А типа 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;
Объявление подтипа определяет базовый тип (base type) и ограничение диапазона (range constraint). Любое
значение, назначенное А, должно быть типа severity, который является базовым типом для А. Программа
моделирования будет проверять, попадает ли значение в диапазон от OKAY до WARNING, в момент
выполнения назначения. Если это не выполняется, то моделирование будет остановлено и будет выдано
сообщение, описывающее это нарушение.
Базовый тип и ограничение диапазона могут быть включены прямо в объявление объекта, если имеется
немного объектов, которые должны быть объявлены с некоторым подтипом. Рассмотрим объявление,
эквивалентное объявлениям подтипа и сигнала, приведенным выше:
signal A: severity range OKAY to WARNING;
Выбор из двух методов для определения подтипов объектов зависит от удобства.
Так как операторы определяются для типов, а не для подтипов, то объекты с общим базовым типом могут
свободно использоваться в одном выражении.
type Counter is range 0 to 100;
subtype low_range is Counter range 0 to 50;
subtype mid_range is Counter range 25 to 75;
subtype hi_range is Counter range 50 to 100;
variable low_count: low_range;
variable mid_count: mid_range;
variable hi_count: hi_range;
.
.
.
mid_count:=(hi_count + low_count)/2;
Значения hi_count и low_count оба имеют тип Counter. Сначала вычисляется значение выражения. Затем до
выполнения назначения это значение проверяется с использованием ограничений диапазона для mid_count.
1.3.1.5. Физические типы
Физические типы позволяют разработчику непосредственно выразить величины в физических единицах
измерения. В VHDL используется один физический тип - предопределенный физический тип TIME (время).
Объявление физического типа задает множество единиц, определенных в терминах некоторой базовой единицы.
В случае типа TIME базовой единицей является fs (фемтосекунда), а производными единицами являются ps, ns,
us и так далее. Рассмотрим определение типа 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;
Диапазон типа TIME определяет диапазон базовых единиц, который может быть точно представлен
объектами типа. Физические литералы, использующие любые из определенных имен для физических единиц,
будут автоматически преобразовываться к фемтосекундам.
Рассмотрим два примера физических типов. Они не являются предопределенными типами, но эти и другие
физические типы могут быть получены из библиотечного пакета, поставляемого продавцами матобеспечения
САПР.
type resistance is range 0 to 2**31-1
units
nOhm;