Описание пакета STANDARD


 

Описание пакета 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 reportNEW YEAR 3003severity note;
Assert false reportNEW YEAR 3003severity warning;
Assert false reportNEW YEAR 3003severity error;
Assert false reportNEW YEAR 3003severity 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 представляет собой верхнюю границу, запись timehigh означает верхнюю границу типа 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. Запись INTEGERhigh означает верхнюю границу типа 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
Контактная информация:

Автор идеи и контента: Бибило П.Н.
Разработчики: Голанов В.А., Зарембо Д.В.
На основе Wordpress CMS

Статистика за сегодня:

Сайт размещен на сервере ОИПИ НАН Беларуси