Типы

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

Типы

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

Тип — это множество значений с общим признаком. VHDL — строго типизированный язык. Каждый объект объявляется со своим типом и может присваивать значение только данного типа. Соблюдение правил присваивания объектов и соответствия их типов требует дополнительных усилий программиста. Но благодаря этой особенности, программы VHDL имеют высокую надежность и обеспечивают экономию времени при отладке.

Перечисляемый тип определяется как список (перечисление) всех возможных значений данного типа. Объявления этого типа выглядит как:

type \имя типа\ is (\перечисляемый литерал\
     {,\ перечисляемый литерал\});

Здесь текст в фигурных скобках может повторяться 0,1,2,… раз.

Элементы списка литералов нумеруются при компиляции слева — направо, начиная с нуля. Например, объявление

type \направление\ is (\налево\,\прямо\,\направо\);

означает, что состояния идентификатора

\направление\ будут кодироваться так, что \налево\ соответствует 0, \направо\ — 2.

Целый тип. Объявление этого типа выглядит как:

type \имя типа\ is range \диапазон целых\;

где \диапазон целых\::=\выражение\ to\выражение\
     |\выражение\downto\выражение\.

Выражение целого типа в диапазоне должно быть вычислимо в период компиляции. Максимальный диапазон целых задается как:
-2147483647 to 2147483647.

Тип с плавающей запятой определяется аналогично целому типу, но с диапазоном с плавающей запятой. Максимальный диапазон зависит от компилятора.

Регулярный тип представляет собой множество элементов одинакового типа. Различают неограниченные и ограниченные регулярные типы.

Неограниченный тип объявляется как:

type \имя регулярного типа\ is
      array (\имя типа диапазона\range<>) of \имя типа элемента\;

где Ограниченный регулярный тип объявляется как:

type \имя регулярного типа\ is
      array (\диапазон целых\ of \имя типа элемента\);

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

Представителя одномерного регулярного типа обычно называют вектором. VHDL допускает многомерные регулярные типы или многомерные массивы. В их определениях диапазоны индексов перечисляются через запятую, например:

type matrix is array (integer range <>, integer range <>) of integer.

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

type \имя комбинированного типа\ is record
     \имя элемента\:\тип элемента\;
     {\имя элемента\:\тип элемента\;}
end record[\имя комбинированного типа\];

Физический тип представляется целым числом, единица которого имеет вес единицы измерения некоторой физической величины. Наиболее распространенным физическим типом в VHDL является время tіme, которое измеряется в фемтосекундах (fs), пикосекундах (ps), наносекундах (ns) и т.д. Объекты физического типа, как правило, не синтезируются, но они могут участвовать как операнды в вычислениях констант других типов.

Другие типы объектов.

Особенными типами являются тип ссылки (access) и тип файла (file). Тип ссылки позволяет манипулировать с массивами переменных, объем которых заранее неизвестен и которые создаются, дополняются и ликвидируются динамически во время вычислений. Тип файла обеспечивает доступ к файлам, записанным в дисковой памяти. Его применяют для ввода-вывода исходных данных и результатов вычислений.

Подтип.

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

\подтип\::=subtype \имя подтипа\ is \базовый тип\ [\ограничение\];

Здесь \ограничение\ — диапазон или подмножество, в зависимости от базового типа. Подтип используют для отождествления группы объектов. С помощью подтипа можно обозначить группу объектов с особенными свойствами, чтобы потом было легче разбираться в программе. Ограничение подтипа позволяет выявить ошибки на этапе моделирования. Объекты разных подтипов, у которых один родоначальный, базовый тип, могут участвовать в вычислених без конфликтов типов.

Предопределенные типы данных.
Основные типы данных VHDL определены в пакете STANDARD, который подключается к проекту по умолчанию. Вот так в нем определены некоторые стандартные типы объектов:

type boolean is (false, true);
type bit is ('0', '1');
type integer is range -2147483647 to  2147483647;
subtype natural is integer range 0 to 2147483647;
type bit_vector is array (natural range <>) of bit;

Следует заметить, что тип integer покрывает все значения, представляемые 32-битовыми словами, кроме одного: -231 .

Также определены: подтип positive, включающий положительные значения типа integer, тип character, как набор букв, цифр и знаков, включая буквы альтернативного алфавита,тип string, как одномерный регулярный тип из элементов типа character.

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