Описание пакета 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 | 
 
 
         |