Описание пакета STANDARD
Использование нового пакета STANDARD (для VHDL-2008) осуществляется указанием опции use VHDL-2008 в разделе Compiler Options (для систем VHDL-моделирования).
Однако нужно помнить, что не все синтезаторы поддерживают стандарт VHDL-2008.
Типы данных
Тип boolean может принимать значения TRUE (истина), FALSE (ложь).
Тип bit принимает значения ‘0’, ‘1’.
Тип character является перечислимым и состоит из набора символов. Некоторые символы могут не отображаться на экране компьютера.
Тип severity_level (приоритет, степень серьезности) используется в операторах сообщений. Степень серьезности устанавливает разработчик VHDL-кода, одно и то же сообщение “NEW YEAR 3003″ может быть выдано
Assert false report “NEW YEAR 3003” severity note;
Assert false report “NEW YEAR 3003” severity warning;
Assert false report “NEW YEAR 3003” severity error;
Assert false report “NEW YEAR 3003” severity failure; |
с различным предупреждающим словом (note, warning, error, failure).
Тип integer
type integer is range -2147483648 to 2147483647; |
включает в себя все положительные и отрицательные числа от 2147483648 до 2147483647. Если перейти к двоичной системе счисления, то тип integer ограничен 32-разрядным вектором, старший (левый) разряд которого означает знак числа (‘0‘ – число положительное, ‘1‘ – число отрицательное).
Тип real (действительное, вещественное число) выбирается из интервала [-10308 , +10308]. Используемая в декларации
type real is range -1.0E308 to 1.0E308; |
запись действительного числа использует символ E экспоненты. Действительное число 1.0 – это запись единицы как действительного числа. Целое число 1 (тип integer) и натуральное число 1 (тип natural)в языке VHDL записываются так же, как и в арифметике.
Для описания времени (тип time)
type TIME is range -2147483647 to 2147483647
units
fs; -- femtosecond
ps = 1000 fs; -- picosecond
ns = 1000 ps; -- nanosecond
us = 1000 ns; -- microsecond
ms = 1000 us; -- millisecond
sec = 1000 ms; -- second
min = 60 sec; -- minute
hr = 60 min; -- hour
end units; |
используются различные единицы времени. В качестве базовой (самой короткой) единицы измерения времени выбрана фемтосекунда (10–15 с). Диапазон ограничен значением целого числа.
Подтип delay_length типа time задает положительный диапазон типа time. В определении
subtype delay_length is time range 0 fs to time’high; |
подтипа используется понятие атрибута ‘high. Атрибут ‘high представляет собой верхнюю границу, запись time‘high означает верхнюю границу типа time. Примеры других атрибутов: ‘left (левая граница), ‘range (диапазон), ‘length (длина диапазона).
Далее в пакете STANDARD в строке
impure function NOW return DELAY_LENGTH; |
декларируется функция now. Данная функция не имеет аргументов и возвращает значение типа delay_length, означающее значение текущего времени моделирования. Ключевое слово impure говорит о том, что функция может иметь побочные эффекты [24]. Если таких эффектов нет, то функция определяется с ключевым словом (pure). При вызове функции now в различные моменты времени моделирования данная функция будет возвращать различные значения. Это может быть использовано при моделировании с учетом ненулевых задержек элементов, например триггеров [24].
Тип natural включает в себя все положительные целые числа от 0 до 2147483647 и определен как подтип
subtype NATURAL is INTEGER range 0 to INTEGER'HIGH; |
типа integer. Запись INTEGER‘high означает верхнюю границу типа integer. Тип natural ограничен 31-разрядным двоичным вектором.
Подтип positive типа integer включает в себя положительные целые числа, большие либо равные единице. Очевидно, что тип positive отличается от типа natural только одним элементом – нулем, т. е. тип positive нуль не содержит.
subtype POSITIVE is INTEGER range 1 to INTEGER'HIGH; |
Тип string определяется
type STRING is array (POSITIVE range <>) of CHARACTER; |
как массив (array) символов. Размерность массива (индексируемого типа) не должна превышать верхнюю границу для положительных целых чисел. При декларации типа string указывается, что диапазон индексов – это любой диапазон типа positive.
Аналогичным образом определяется тип bit_vector
type BIT_VECTOR is array (NATURAL range <>) of BIT; |
как массив элементов типа bit. В отличие от типа string, индексировать элементы массива можно с нуля, поэтому в декларации указывается (natural range <>) для диапазона индексов.
При декларации пользователь должен задавать конкретный диапазон при использовании такого типа, например
signal A : BIT_VECTOR(0 to 3); -- возрастающий диапазон
signal B : BIT_VECTOR(7 downto 0); -- убывающий диапазон |
Типы file_open_kind, file_open_status предназначены для работы с файлами.
Тип file_open_kind имеет значения: read_mode (открыт для чтения); write_mode (открыт для записи); append_mode (открыт для продолжения записи).
Атрибут foreign типа string декларируется последним и предназначен для работы с подпрограммами на другом (не VHDL) языке программирования.
type BOOLEAN_VECTOR is array (NATURAL range <>) of BOOLEAN;
type INTEGER_VECTOR is array (NATURAL range <>) of INTEGER;
type REAL_VECTOR is array (NATURAL range <>) of REAL;
type TIME_VECTOR is array (NATURAL range <>) of TIME; |
Предопределённые операции
Предопределённые функции над типом BOOLEAN
Левый |
Операция |
Правый |
Результат |
BOOLEAN |
and, or, nand, nor, xor, xnor |
BOOLEAN |
BOOLEAN |
|
not |
BOOLEAN |
BOOLEAN |
BOOLEAN |
=, /=, <, <=, >, >= |
BOOLEAN |
BOOLEAN |
BOOLEAN |
MINIMUM, MAXIMUM |
BOOLEAN |
BOOLEAN |
|
RISING_EDGE, FALLING_EDGE |
BOOLEAN |
BOOLEAN |
Предопределённые функции над типом BIT
Левый |
Операция |
Правый |
Результат |
BIT |
and, or, nand, nor, xor, xnor |
BIT |
BIT |
|
not |
BIT |
BIT |
BIT |
=, /=, <, <=, >, >= |
BIT |
BOOLEAN |
BIT |
?=, ?/=, ?<, ?<=, ?>, ?>= |
BIT |
BIT |
BIT |
MINIMUM, MAXIMUM |
BIT |
BIT |
|
?? |
BIT |
BOOLEAN |
|
RISING_EDGE, FALLING_EDGE |
BIT |
BOOLEAN |
Предопределённые функции над типом CHARACTER
Левый |
Операция |
Правый |
Результат |
CHARACTER |
=, /=, <, <=, >, >= |
CHARACTER |
BOOLEAN |
CHARACTER |
MINIMUM, MAXIMUM |
CHARACTER |
CHARACTER |
Предопределённые функции над типом SEVERITY_LEVEL
Левый |
Операция |
Правый |
Результат |
SEVERITY_LEVEL |
=, /=, <, <=, >, >= |
SEVERITY_LEVEL |
BOOLEAN |
SEVERITY_LEVEL |
MINIMUM, MAXIMUM |
SEVERITY_LEVEL |
SEVERITY_LEVEL
|
Предопределённые функции над типом INTEGER
Левый |
Операция |
Правый |
Результат |
universal_integer |
** |
INTEGER |
universal_integer |
universal_real |
INTEGER |
universal_real |
INTEGER |
=, /=, <, <=, >, >= |
INTEGER |
BOOLEAN |
— |
+, –, abs |
INTEGER |
INTEGER |
INTEGER |
+, –, *, /, mod, rem, ** |
INTEGER |
INTEGER |
INTEGER |
MINIMUM, MAXIMUM |
INTEGER |
INTEGER
|
Предопределённые функции над типом REAL
Левый |
Операция |
Правый |
Результат |
REAL |
=, /=, <, <=, >, >= |
REAL |
BOOLEAN |
— |
+, –, abs |
REAL |
REAL |
REAL |
+, –, *, / |
REAL |
REAL |
REAL |
** |
INTEGER |
REAL |
REAL |
MINIMUM, MAXIMUM |
REAL |
REAL
|
Предопределённые функции над типом TIME
Левый |
Операция |
Правый |
Результат |
TIME |
=, /=, <, <=, >, >= |
TIME |
BOOLEAN |
— |
+, –, abs |
TIME |
TIME |
TIME |
+, –, mod, rem |
TIME |
TIME |
TIME |
* |
INTEGER |
TIME |
INTEGER |
TIME |
TIME |
TIME |
REAL |
TIME |
REAL |
TIME |
TIME |
TIME |
/ |
INTEGER |
TIME |
TIME |
REAL |
TIME |
TIME |
TIME |
universal_integer |
TIME |
MINIMUM, MAXIMUM |
TIME |
TIME
|
Предопределённые функции над типом STRING
Левый |
Операция |
Правый |
Результат |
STRING |
=, /=, <, <=, >, >= |
STRING |
BOOLEAN |
STRING |
& |
STRING |
STRING |
STRING |
CHARACTER |
STRING |
CHARACTER |
STRING |
STRING |
CHARACTER |
CHARACTER |
STRING |
STRING |
MINIMUM, MAXIMUM |
STRING |
STRING |
— |
STRING |
CHARACTER |
Предопределённые функции над типом FILE_OPEN_KIND
Левый |
Операция |
Правый |
Результат |
FILE_OPEN_KIND |
=, /=, <, <=, >, >= |
FILE_OPEN_KIND |
BOOLEAN |
FILE_OPEN_KIND |
MINIMUM, MAXIMUM |
FILE_OPEN_KIND |
FILE_OPEN_KIND |
Предопределённые функции над типом FILE_OPEN_STATUS
Левый |
Операция |
Правый |
Результат |
FILE_OPEN_STATUS |
=, /=, <, <=, >, >= |
FILE_OPEN_STATUS |
BOOLEAN |
FILE_OPEN_STATUS |
MINIMUM, MAXIMUM |
FILE_OPEN_STATUS |
FILE_OPEN_STATUS |
Предопределённые функции над типом BOOLEAN_VECTOR
Левый |
Операция |
Правый |
Результат |
BOOLEAN_VECTOR |
and, or, nand, nor, xor, xnor |
BOOLEAN_VECTOR |
BOOLEAN_VECTOR |
BOOLEAN_VECTOR |
BOOLEAN |
BOOLEAN_VECTOR |
BOOLEAN |
BOOLEAN_VECTOR |
BOOLEAN_VECTOR |
— |
not |
BOOLEAN_VECTOR |
BOOLEAN_VECTOR |
— |
and, or, nand, nor, xor, xnor |
BOOLEAN_VECTOR |
BOOLEAN |
BOOLEAN_VECTOR |
sll, srl, sla, sra, rol, ror |
INTEGER |
BOOLEAN_VECTOR |
BOOLEAN_VECTOR |
=, /=, <, <=, >, >=, ?=, ?/= |
BOOLEAN_VECTOR |
BOOLEAN |
BOOLEAN_VECTOR |
& |
BOOLEAN_VECTOR |
BOOLEAN_VECTOR |
BOOLEAN_VECTOR |
BOOLEAN |
BOOLEAN_VECTOR |
BOOLEAN |
BOOLEAN_VECTOR |
BOOLEAN_VECTOR |
BOOLEAN |
BOOLEAN |
BOOLEAN_VECTOR |
BOOLEAN_VECTOR |
MINIMUM, MAXIMUM |
BOOLEAN_VECTOR |
BOOLEAN_VECTOR |
— |
BOOLEAN_VECTOR |
BOOLEAN |
Предопределённые функции над типом BOOLEAN_VECTOR
Левый |
Операция |
Правый |
Результат |
BIT_VECTOR |
and, or, nand, nor, xor, xnor |
BIT_VECTOR |
BIT_VECTOR |
BIT_VECTOR |
BIT |
BIT_VECTOR |
BIT |
BIT_VECTOR |
BIT_VECTOR |
— |
not |
BIT_VECTOR |
BIT_VECTOR |
— |
and, or, nand, nor, xor, xnor |
BIT_VECTOR |
BIT |
BIT_VECTOR |
sll, srl, sla, sra, rol, ror |
INTEGER |
BIT_VECTOR |
BIT_VECTOR |
=, /=, <, <=, >, >= |
BIT_VECTOR |
BOOLEAN |
BIT_VECTOR |
?=, ?/= |
BIT_VECTOR |
BIT |
BIT_VECTOR |
& |
BIT_VECTOR |
BIT_VECTOR |
BIT_VECTOR |
BIT |
BIT_VECTOR |
BIT |
BIT_VECTOR |
BIT_VECTOR |
BIT |
BIT |
BIT_VECTOR |
BIT_VECTOR |
MINIMUM, MAXIMUM |
BIT_VECTOR |
BIT_VECTOR |
— |
BIT_VECTOR |
BIT |
BIT_VECTOR |
TO_STRING (alias: TO_BSTRING, TO_BINARY_STRING) |
|
STRING |
BIT_VECTOR |
TO_OSTRING (alias: TO_OCTAL_STRING) |
|
STRING |
BIT_VECTOR |
TO_HSTRING (alias: TO_HEX_STRING) |
|
STRING |
Предопределённые функции над типом INTEGER_VECTOR
Левый |
Операция |
Правый |
Результат |
INTEGER_VECTOR |
=, /=, <, <=, >, >= |
INTEGER_VECTOR |
BOOLEAN |
INTEGER_VECTOR |
& |
INTEGER_VECTOR |
INTEGER_VECTOR |
INTEGER_VECTOR |
INTEGER |
INTEGER_VECTOR |
INTEGER |
INTEGER_VECTOR |
INTEGER_VECTOR |
INTEGER |
INTEGER |
INTEGER_VECTOR |
INTEGER_VECTOR |
MINIMUM, MAXIMUM |
INTEGER_VECTOR |
INTEGER_VECTOR |
|
INTEGER_VECTOR |
INTEGER |
Предопределённые функции над типом REAL_VECTOR
Левый |
Операция |
Правый |
Результат |
REAL_VECTOR |
=, /= |
REAL_VECTOR |
BOOLEAN |
REAL_VECTOR |
& |
REAL_VECTOR |
REAL_VECTOR |
REAL_VECTOR |
REAL |
REAL_VECTOR |
REAL |
REAL_VECTOR |
REAL_VECTOR |
REAL |
REAL |
REAL_VECTOR |
— |
MINIMUM, MAXIMUM |
REAL_VECTOR |
REAL |
Предопределённые функции над типом TIME_VECTOR
Левый |
Операция |
Правый |
Результат |
TIME_VECTOR |
=, /= |
TIME_VECTOR |
BOOLEAN |
TIME_VECTOR |
& |
TIME_VECTOR |
TIME_VECTOR |
TIME_VECTOR |
TIME |
TIME_VECTOR |
TIME |
TIME_VECTOR |
TIME_VECTOR |
TIME |
TIME |
TIME_VECTOR |
— |
MINIMUM, MAXIMUM |
TIME_VECTOR |
TIME |
Предопределённые функции над типом TIME_VECTOR
Левый |
Операция |
Правый |
Результат |
|
TO_STRING |
BIT |
STRING |
BOOLEAN |
CHARACTER |
SEVERITY_LEVEL |
universal_integer |
universal_real |
INTEGER |
REAL |
TIME |
FILE_OPEN_KIND |
FILE_OPEN_STATUS |
VALUE: REAL |
DIGITS: NATURAL |
VALUE: REAL |
FORMAT: STRING |
VALUE: TIME |
UNIT: TIME |
|