Главная страница  Автономные управляющие системы 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 [ 29 ] 30 31 32 33 34 35 36 37 38 39 40

ГЛАВА 4. ЯЗЫК ОПИСАНИЯ АППАРАТУРЫ VHDL

Значения типа INTGER записываются в следующей форме: [основание #]разряд {[ ]разряд} [#]

По умолчанию основание принимается равным 10. Допустимыми таюке являются значения 2,6,16.

При записи числа допускается использование одиночных символов подчеркивания, которые не влияют на результирующее значение.

Пример

CONSTANT mm: INTEGER := 0;

CONSTANT group: INTEGER := 13 452; - - эквиввлентно 13452 CONSTANT max: INTEGER := 16#FF#:

Допустимое использование

Операторы 9тн9Ш9ния

Значения типа INTEGER могут участвовать в этих выражениях Операторы отношения {=, /=, <, <=, >, >=) определены для операндов типа INTEGER и одномерных массивов, содержащих элементы типа INTEGER. Результат выражения имеет тип BOOLEAN.

Арифметические операторы

Операторы +, ABS допустимы для операндов типа INTEGER. Результат выражения имеет тип INTEGER.

Операторы *, /, MOD, REM допустимы в следующих случаях:

♦ если оба операнда являются константами (CONSTANT),

♦ если второй операнд является константой и его значение равно 2 , где п = 0,1, 2,3...

Применение операторов *, /, MOD, REM недопустимо, если оба операнда являются сигналами (SIGNAL) или переменными (VARIABLE)

Оператор возведения в степень (**), как правило, не поддерживается средствами синтеза

Другие операторы

Другие операции над операндами типа INTEGER не определены Тип BIT

Объект данного типа может принимать значение О (лог. 0) или

Г (лог. 1). Примечание

Стандартом IEEE 1164 определена замена типа BIT на более гибкий тип STD L0Q1C Поэтому использование типа BIT в новых разработках не рекомендуется

Допустимое использование

Операторы отношения

Значения типа BIT могут участвовать в выражениях Операторы отношения (=, /=, <, <=, >, >=) определены для операндов типа BIT и одномерных массивов, содержащих элементы типа ВП . Результат выражения имеет тип BOOLEAN. (Как для всех перечислимых типов, операции сравнения над одномерными массивами типа BIT производятся поэлементно, начиная с крайнего левого элемента )

Логические операторы

Для операндов типа BIT и одномерных массивов, содержащих элементы типа BIT, определены все логические операции (AND, OR, NAND, NOR, XOR и NOT). Тип и размер операндов должны быть одинаковыми. Тип и размер результата такой же, как тип и размер операндов.

Оператор конкатенации

Оператор конкатенации также определен для операндов типа BIT и одномерных массивов, содержащих элементы типа BIT Результат выражения представляет собой одномерный массив, содержащий элементы типа BIT, размер массива равен сумме размеров операндов

Другие операторы

Другие операции над операндами типа BIT не определены

TnnSTP.LOeiC

Типы STD LOGIC является перечислимым типом. Объекты типа STD L0G1C могут принимать 9 значений: О, 1, Z.L, Н, U, X, W.

Для синтеза логических схем используются только первые четыре:

О - логический О ;

1 - логическая 1 ;

Z - третье состояние;

- - не подключен. Допустимое использование Операторы отношения

Значения типа STD LOGIC могут участвовать в выражениях Операторы отношения (=, /=, <, <=, >, >=) определены для операндов типа STD LOGIC и одномерных массивов, содержащих элементы типа STD LOGIC Результат выражения имеет тип BOOLEAN. (Как для всех перечислимых типов, операции сравнения над одномерными массивами типа STD LOGIC производятся поэлементно, начиная с крайнего левого элемента )

Логичеокие операторы

Для операндов типа STD LOGIC и одномерных массивов, содержащих элементы типа STD LOGIC, определены все логические операции (AND, OR, NAND, NOR, XOR и NOT). Тип и размер операндов должны быть одинаковыми. Тип и размер результата такой же, как тип и размер операндов.

Оператор конкатенации

Оператор конкатенации также определен для операндов типа STD LOGIC и одномерных массивов, содержащих элементы типа STD LOGIC Результат выражения представляет собой одномерный массив, содержащий элементы типа STD LOGIC, размер массива равен сумме размеров операндов

Другие операторы

Другие операции над операндами типа STD LOGIC не определены Перечислимый тип

Перечислимый тип - это такой тип данных, при котором количество всех возможных значений конечно Строго говоря, все описанные выше типы являются перечислимыми.

Применение перечислимых типов преследует две цели

♦ улучшение смысловой читаемости программы,

♦ более четкий и простой виэувльный контроль значений Наиболее часто перечислимый тип используется для обозначения состояний конечных автоматов

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

Элементы перечислимого типа должны быть идентификаторами или символами, которые должны быть уникальными в пределах одного типа Повторное использование названий элементов в других перечислимых типах разрешается.

Объявление перечислимого типа имеет вид

TYPE иш тпа IS {названив элемвнга [, названив элемвнта]);

Пример

Туре State type IS (stateA, stateB, stateC); VARIABLE State : State type;

State := stateB



ГЛАВА 4. ЯЗЫК ОПИСАНИЯ АППАРАТУРЫ VHDL

В данном примере объявляется переменная State, допустимыми значениями которой являются stateA. stateB, stateC. Примеры предопределенных перечислимых типов:

TYPE SEVERITY LEVEL IS (NOTE, WARNING, ERROR, FAILORE) ; TYPE BOOLEAN IS (FALSE, TRUE), TYPE BIT IS ( 0 , Ч ) ;

TYPE STD LOGIC IS (U , X, 0, Ч, Z, >W , L , >H , ) ,

Любой перечислимый тип имеет внутреннюю нумерацию первый элемент всегда имеет номер О, второй - номер 1 и т. д Порядок нумерации соответствует порядку перечисления

Допустимое использование

Операторы отношения

Значения определенных пользователем перечислимых типов могут участвовать в выражениях Операторы отношения (=, /=, <, <=, >, >=) определены как для перечислимых типов, так и для одномерных массивов, содержащих элементы этих типов Результат выражения имеет тип BOOLEAN

Оператор конкатенации

Оператор конкатенации определен для операндов, имеющих перечислимый тип, и одномерных массивов, содержащих элементы перечислимого типа При этом оба операнда должны быть одного типа Результат выражения представляет собой одномерный массив, тип элементов которого равен типу операндов, размер массива равен сумме размеров опера ндов

Другие операторы

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

Пример

TYPE COLOR IS (green, red, tellow, orange); TYPE FRUIT IS (orange, apple, pear); VARIABLE VC . COLOR, VARIABLE VF FRUIT,

VC = COLORorange, VF .= FRUITorange.

Другие операции над операндами перечислимых типов, определенных пользователем, не определены Тип SEVERITY LEVEL

Переменные этого типа используются только в операторе ASSERT и игнорируются при синтезе логических схем

Переменные типа SEVERITY LEVEL могут принимать следующие значения NOTE, WARNING, ERROR и FAILURE

Тип CHARACTER

Перечислимый тип Значением объекта данного типа может быть любой символ из набора ASCII (128 первых символов). Массивы

Массив (тип массив ) является сложным типом Массив представляет собой упорядоченную структуру однотипных данных Массив имеет диапазон индексов, который может быть возрастающим либо убывающим На любой элемент массива можно сослаться используя его индекс Несмотря на то, что стандартом языка допускается использование массивов любой размерности, для синтеза ПЛИС используются только одномерные (поддерживаются всеми

средствами синтеза) и двумерные (поддерживаются ограниченным числом средств синтеза) массивы

Также можно сослаться на часть одномерного массива, используя вместо индекса диапазон индексов

Существуют две разновидности типа массив ограниченный {constrained) и неограниченный {unconstrained)

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

Объявление неограниченного типа не определяет границы диапазона индексов В этом случае границы диапазона устанавливаются при объявлении конкретного экземпляра объекта данного типа

Объявление ограниченного типа массив имеет вид ТУРЕ имя типа IS

ARRAY (диапазон индексов [, диапазон индексов]) OF тип элемента; диапазон индексов может определяться двумя способами

1) явным заданием границ диапазона

тТОп п DOWNTO m где т,п- целочисленные константы, т <= п

2) с использованием идентификатора ограниченного подтипа В этом случае значения границ подтипа являются значениями границ индекса массива Описание подтипов см далее

Объявление неограниченного типа массив имеет вид TYPE имя типа IS

ARRAY {тип индвкса I, тип индекса\) OF тип элемента; тип индекса определяется следующим образом подтип RANGE О

где подтип может быть

INTEGER - индекс находится в диапазоне-(2-1) 2-1, NATURAL - индекс находится в диапазоне О 2-1, POSITIVE - индекс находится в диапазоне 1 2-1,

Примеры

1) Объявление ограниченного массивного типа TYPE word IS ARRAY (31 DOWNTO 0) OF STD LOGIC,

TYPE register bank IS ARRAY (byte RANGE 0 TO 132) OF INTEGER, TYPE memory IS ARRAY (address) OF word, - двумерный массив

2) Объявление неограниченного массивного типа TYPE logic IS ARRAY (INTEGER RANGE <>) OF BOOLEAN,

3) Объявление двумерного массива

TYPE Reg IS ARRAY (3 DOWNTO 0) OF STD L0GIC VECT0R(7 DOWNTO 0),

TYPE transform IS ARRAY (1 TO 4, 1 TO 4) OF BIT, Как было сказано, в языке имеется несколько предопределенных типов массив Их объявления выглядят следующим образом TYPE STRING IS ARRAY (POSITIVE RANGE О) OF CHARACTER, TYPE BIT VECTOR IS ARRAY (NATURAL RANGE <>) OF BIT, TYPE STD LOGIC VECTOR IS ARRAY (NATURAL RANGE <>) OF STD LOGIC,

TYPE STD ULOGIC VECTOR IS ARRAY (NATURAL RANGE <>) OF STD ULOGIC,



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

1) с использованием ключевых слов ТО или DOWNTO:

TYPE deta memory type IS ARRAY (INTEGER RANGE <>) OF BIT;

VARIABLE data raanory : data meinory type (0 TO 255);

2) путем использования диапазона начального значения. CONSTANT part xd : STRING := М38006 .

СТРОКИ, БИТОВЫЕ СТРОКИ И АГРЕГАТЫ

Строки, битовые строки, агрегаты (strings, bit strings, aggregates) используются для конструирования значений объектов массивных типов Они могут использоваться в любом месте, где допускается значение типа массив, например, как начальное значение константы или операнд в выражении.

Строковая запись может быть использована для представления значений как объектов некоторых предопределенных типов (string, bityector, stdjogicj/ector), так и для любого одномерного массива, элементы которого имеют тип character, например:

TYPE bit 6 IS (>U, О, Ч, F, R, X);. . . .

TYPE bit6 data IS ARRAY (POSITIVE RANGEO) OF bit6;

SIGNAL datajbus : bit6 data(15 DOWNTO 0);

data bus <=

umnnroUUFFFFFFFF

VHDL позволяет компактно описывать битовые строки (значение типа bit vector или stdJogic vector) в базисе 2, 8 и 16. Например

CONSTANT clear : bit vector .= В 00 101 010 ; CONSTANT empty : bit veetor := O 052 ; CONSTANT null : bit vector .= X 2A ;

Bee три константы имеют одно и то же значение Отметим, что символы подчеркивания могут использоваться в любом месте битовой строки для облегчения чтения Расширенными цифрами (extended digits) для шестнадцатеричного представления являются буквы от А до f, причем могут использоваться как прописные, так и строчные буквы

Массивные агрегаты используются для присваивания объектам типа массив значений Массивные агрегаты формируются при помощи позиционной (positionai) записи, поименованной (named) записи или комбинации этих двух форм Рассмотрим пример Предположим, что имеются следующие описания TYPE АгауТуре IS ARRAY (1 ТО 4) OF CHARACTER;

VARIABLE Test : АггауТуре;

И требуется, чтобы переменная Test содержала элементы f, о, о, d в указанном порядке

Позиционная запись имеет вид

Test .= (-f , -о , о , -d);

Агрегат в данном случае записывается как список значений злементов, разделенных запятыми Первое значение назначается элементу с наименьшим значением индекса (крайнему левому)

Поименованная запись имеет вид

Test := (l=>f, 3=>o, 4=>d, 2=>o); В этом случае агрегат также является списком, элементы которого разделены запятыми, однако элементы списка имеют формат: позиция => значение Порядок перечисления злементов при поименованной записи не имеет значения.

Комбинированная запись имеет вид

Test = (f, о, 4=>d, 3=>o); В этом случае сначала записываются элементы, присваиваемые с использованием позиционной записи, а оставшиеся элементы присваиваются с использованием поименованной записи.

При формировании агрегата с использованием поименованной (или комбинированной) записи вместо номера позиции можно указывать ключевое слово OTHERS, которое определяет значение для всех элементов, которые еще не были описаны в агрегате. Например Test := (f, 4=>d, OTHERS=>О) ;

Подтипы

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

Подтипы применяются в двух случаях

1) Подтип может ограничить диапазон значений базового скалярного типа (ограничение по диапазону) В этом случае объявление подтипа выглядит следующим образом-

SUBTYPE имя подтипа IS имя базового типа RANGE диапа-зон индексов;

диапазон индексов определяется следующим образом тТОп л DOWNTO m где т.п- целочисленные константы, т <= п.

Пример

Предположим, что разработчик желает создать сигнал А типа severity и что А может принимать значения только OKAY, NOTE и WARNING

TYPE sevirity IS (OKAY, NOTE, WARNING, ERROR, FAILURE), SUBTYPE go status IS severity RANGE OKAY TO WARNING, SIGNALA-go status,

Базовый тип и ограничение диапазона могут быть включены непосредственно в объявление объекта Объявление сигнала А, эквивалентное приведенному выше будет выглядеть следующим образом

SIGNAL А seventy RANGE OKAY ТО WARNING, Другие примеры

SUBTYPE pin count IS INTEGER RANGE 0 TO 400; SUBYUPE digits IS character range 0 TO 9, Подтипы, объявленные таким образом, могут также участвовать в описании ограниченных массивных типов (см Массивы )

2) Подтип может определить границы диапазона индексов для неограниченного (unconstrained) массивного типа В этом случае объявление подтипа выглядит следующим образом

SUBTYPE имя подтипа IS имя базового типа {диапазон индвксов [, диапазон индексов]); диапазон индвксов определяется следующим образом тТОп п DOWNTO т где т, п - целочисленные константы, т<=п



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 [ 29 ] 30 31 32 33 34 35 36 37 38 39 40

© 2000 - 2019 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования.