Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VHDL.pdf
Скачиваний:
168
Добавлен:
10.02.2015
Размер:
730.19 Кб
Скачать

4.3. Типы данных

Язык VHDL основан на концепции строгой типизации данных, т.е. любой единице информации в программе обязательно присваивается имя, и для неё должен быть определён тип. Определение информационной единицы размещается в разделе деклараций программного модуля, в котором оно используется, или иерархически предшествующего модуля. Тип данных определяет набор значений объектов, отнесённых к этому типу, а также набор допустимых преобразований этих данных. Данные разных типов несовместимы в одном выражении.

Язык VHDL предоставляет некоторый базовый набор типов данных, которые не требуют объявления в программе пользователя. Кроме того, пользователь может определить свои типы данных и подключить существующие из библиотек. Различают скалярные типы данных и агрегатные типы. Объект, отнесённый к скалярному типу, рассматривается как законченная единица информации. Агрегат представляет упорядоченную совокупность скалярных единиц, объединённых единым именем. Классификация типов данных в VHDL представлена на рис. 4.1.

 

 

 

 

 

 

 

 

 

 

Типы данных

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Скалярные

 

 

 

 

Указатели

 

 

 

Агрегатные

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Численные

 

Перечислимые

 

Физические

 

Массивы

 

Записи

 

Файлы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

character

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

integer

 

 

bit

 

 

 

 

 

 

 

string

 

Предопределённые

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

time

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

типы данных

 

real

 

 

boolean

 

 

 

 

 

bit_vector

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

severity_level

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Типы данных, определяемые пользователем

Рис. 4.1. Классификация типов данных в VHDL Данные, используемые в программах, относятся к одной из категорий:

9константы;

9переменные;

9сигналы.

Различие между переменными и сигналами будет рассмотрено в разделе 4.4. Декларация объектов имеет следующий вид:

<декларация объекта> ::= <категория> <имя>{,<имя>}:<тип> [:=<выражение>];

<категория> ::= constant | variable | signal

14

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

4.3.1. Предопределённые типы данных

<предопределённые типы>::=

integer | real | bit | boolean | character | string | time | but_vector | severity_level | file_open_status | file_open_kind

Типы integer и real определяют численные данные — целые и действительные соответственно. Количество байт, отводимых для хранения чисел может зависеть от реализации, но стандартом считается 4 байта, что соответствует типам данных int и float для стандарта ANSI C. Для них определены следующие бинарные арифметические операции:

Таблица 4.1. Бинарные арифметические операции

Операция

Пример

 

 

Выражение

Результат

 

 

 

 

Сложение

5+6

11

 

 

 

Вычитание

8-3

5

 

 

 

Умножение

3*6

18

 

 

 

Деление (для целых)

9/4

2

 

 

 

Деление (для вещественных)

9/4

2.25

 

 

 

Деление по модулю (для целых)

9 mod 4

1

-14 mod 5

1

 

 

 

 

Остаток от деления (для целых)

9 rem 4

1

-14 rem 5

-4

 

 

 

 

Абсолютное значение (модуль)

abs (-5)

5

 

 

 

Возведение в степень

2**4

16

 

 

 

Также определены унарные арифметические операции сохранения и смены знака. В арифметических выражениях предполагаются традиционные способы определения приоритетов операций, включая применение скобок. Поддерживаются также операторы отношения (сравнения): =, /=, <, <=, >, >=. Результатом сравнения является значение типа boolean.

Данные типа bit могут принимать значения из множества {'0', ' 1'}. Для данных типа BIT определены логические операции:

9not — инверсия;

9or — операция ИЛИ;

9nor — операция ИЛИ-НЕ;

9and — операция И;

9nand — операция И-НЕ;

15

9xor — неравнозначность;

9xnor — равнозначность.

Данные типа boolean также могут принимать два значения: {true, false}, и для них определены те же операции, что и над данными типа bit. Разница между типами bit и boolean состоит в том, что первые применяются для представления уровней логических сигналов в аппаратуре, а вторые для представления обобщенных условий, например результатов сравнения. Данные разных типов несовместимы.

Тип character объединяет символы, определенные в используемой операционной системе — буквы, цифры, специальные символы. VHDL'87 допускает применение только первых 128 символов кодов ASCII (латинские буквы, цифры, специальные символы). В тексте программы символьная константа записывается как стандартный символ, заключенный в одинарные кавычки. Отметим, что символы '0' и '1' имеют двойное — и как символ, и как логическое значение. В каждом конкретном случае тип данных определяется по контексту.

Тип time служит для задания задержек элементов и времени приостанова процессов при моделировании. Запись временной константы имеет вид:

<целое> <единица измерения времени>

Определены следующие единицы измерения времени:

9fs — фептосекунда;

9ps — пикосекунда;

9ns — наносекунда;

9us — микросекунда;

9ms — миллисекунда;

9s — секунда.

Над данными типа "время" определены операции отношения, сложения и вычитания, а также умножения и деления на целое.

Данные этого типа применяются для задания задержек элементов и длительности интервалов останова. Важную роль при моделировании имеет определенная на этом типе функция now, возвращающая значение текущего времени на момент ее вызова. Например, выражение

now> 1 us

примет значение true через 1 микросекунду модельного времени от начала моделирования и может обеспечить формирование последовательности входных воздействий или контрольных точек при моделировании.

Тип severity_level задает следующее множество значений: {note, warning, error, failure} и используется для управления работой компилятора или программы моделирования. С помощью переменных и констант этого типа в операторах assert определяются действия, которые следует выполнить при обнаружении некоторых условий. Фактическая трактовка действий в стандарте не оговорена и оставлена на усмотрение разработчиков системы моделирования.

16

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

Типы string и bit_vector относятся к агрегатным и фактически определены как неограниченный массив символов и массив битов соответственно. Более подробно правила работы с массивами и их элементами будут рассмотрены далее. В тексте программы строковая константа заключается в двойные кавычки.

4.3.2. Скалярные типы, вводимые пользователем

Пользователь имеет возможность определить собственные типы данных, используя декларацию типа данных:

<декларация типа данных>::= TYPE <имя типа> IS <определение типа>;

<определение типа>::= <определение перечислимого типа> |<определение целого типа>

|<определение действительного типа> |<определение физического типа> |<определение типа массивов> |<определение типа записей>

Начнём рассмотрение пользовательских типов данных со скалярных типов. Определение перечислимого типа имеет вид:

<Определение перечислимого типа>::= (перечислимое значение {,перечислимое значение});

<перечислимое значение>::= <идентификатор> | <символьная константа>

Например:

TYPE state IS (SO,SI,S2,S3);

может представлять, например, набор допустимых состояний системы, для каждого состояния определяются выполняемые действия и правила перехода в другое состояние.

Важнейшим приложением перечислимого типа данных являются расширенные алфавиты моделирования, в частности тип std_logic и соответствующий ему тип std_logic_vector, описанный в пакете std_logic_1164. Данный девятизначный алфавит моделирования рассмотрен в приложении 1 настоящего методического указания.

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

<Определение ограниченного типа>::= [<базовый тип>] <диапазон>;

<диапазон>::=

range <ограничение><направление><ограничение> |range<>

<направление>::= downto | to

17

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]