Изучение VHDL

Типы


Сигналы, переменные, константы и другие объекты языка 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 \имя типа элемента\; где \имя типа диапазона\ - имя типа integer или какого-либо подтипа от integer.

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

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.

Содержание раздела