«…лишь недалекие люди боятся конкуренции, а люди подлинного творчества ценят общение с каждым талантом…» А. Бек, Талант.

VHDL/Пакет Standard

Материал из Wiki
Версия от 00:39, 14 сентября 2013; ANA (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Это снимок страницы. Он включает старые, но не удалённые версии шаблонов и изображений.
Перейти к: навигация, поиск

Содержание

VHDL 1992

VHDL-2008

Пакет STANDARD в редакции стандарта VHDL-2008

Предопределённые функции над типом 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


Новое в VHDL-2008

В пакете STD.STANDARD определены четыре новых типа данных:

  • REAL_VECTOR — массив элементов типа real;
  • TIME_VECTOR — массив элементов типа time;
  • INTEGER_VECTOR — массив элементов типа integer;
  • BOOLEAN_VECTOR — массив элементов типа boolean.
Определение новых типов имеет следующий вид:
    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;


Стр. 191-192 (vhdl-2008 book)

  • The types boolean_vector, integer_vector, real_vector, and time_vector are now predefined.
  • Для типа BOOLEAN_VECTOR предопределены такие же операторы (операции) как и для типа BIT_VECTOR (and, or, nand, nor, xor, xnor, not, [and, or, nand, nor, xor, xnor], sll, srl, sla, sra, rol, ror, =, /=, <, <=, >, >=, ?=, ?/=, &, MINIMUM, MAXIMUM).
  • Предопределённые операции для типа integer_vector включают операторы отношения (relational) (“=”, “/=”, “<”, “>”, “<=”, and “>=”) и оператор конкатенации (“&”).
  • Предопределённые операции для типа real_vector и time_vector включают операторы равенства и неравенства (“=” and “/=”) и оператор конкатенации (“&”).
  • Логические операции над массивами/скалярными типами и логическое сокрощение (logical reduction operation) (see Sections 4.1 and 4.3) определены для типов bit_vector и boolean_vector, так как ония являются массивами с элементами типа bit и boolean соответственно.
  • Операции соотношений (matching relational operators) “?=”, “?/=”, “?>”, “?>=”, “?<”, и “?<=” определены для типов bit и boolean. Кроме того, операторы “?=” и “?/=” определены для типов bit_vector и boolean_vector. (See Section 4.5.)
  • Оператор состояния “??” (condition operator) определён для типа BIT (see Section 4.4).
  • Операторы mod и rem определены для типа TIME, так как это физический тип (see Section 4.7).
  • Операции maximum и minimum определены для всех предопределённых типов (see Section 4.6).
  • Функции rising_edge и falling_edge определены для типов bit и boolean. До стандарта VHDL-2008, версия этой функции для типа bit была определена в пакете numeric_bit. Однако, то это было сделано для обеспечения совместимости с типом std_logic, определённым в пакете std_logic_1164. В стандарт VHDL-2008 включено определение этих функций в пакете standard. В версии стандарта VHDL-2008 в пакете numeric_bit переопределено определение этих функций, как ссылок (aliases) на предопределённые функции в пакете standard.
  • Функция to_string определена для всех скалярных типов и для bit_vector (see Section 7.1). Кроме того функции to_bstring, to_ostring, и to_hstring и связанные ссылки (associated aliase) определены для типа bit_vector.


Предопределённые функции над типом 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

Пакет STD.ENV

Добавлен новый пакет STD.ENV, в котором вводятся несколько функций:

  • STOP — процедура остановки моделирования
  • FINISH — процедура остановки моделирования с выходом из симулятора (modelsim/qustasim)
  • resolution_limit — функция возвращает значения точности моделирования (тип DELAY_LENGTH)
Декларация в пакете ENV:
  procedure stop (STATUS : INTEGER := 0);
  procedure finish (STATUS : INTEGER := 0);
  function resolution_limit return DELAY_LENGTH;

В зависимости от значения параметра STATUS, передаваемого процедурам STOP и FINISH предусмотрен разный вывод в лог (консоль):

  • 0 — ничего не выводит;
  • 1 — выводит время моделирование и путь к entity в котором выполнена процедура;
  • 2 — выводит время, расположение и статистику о задейсвованной памяти и ресурсу CPU при моделировании;
  • другие значения STATUS интерпретируются как 0.

Пример


  • Вызов функции stop; или stop(0); или stop(3); (или с любым другим числом >2):
# Break in Process p1 at /home/kola/docs/osvvm.org/docs/sim/vhd/std_sim.vhd line 25
  • stop(1);
# ** Note: stop
#    Time: 110 ns  Iteration: 0  Instance: /std_sim
# Break in Process p1 at /home/kola/docs/osvvm.org/docs/sim/vhd/std_sim.vhd line 25
  • stop(2);
# ** Note: Data structure takes 16558720 bytes of memory
#          Process time 0.00 seconds
#          stop
#    Time: 110 ns  Iteration: 0  Instance: /std_sim
# Break in Process p1 at /home/kola/docs/osvvm.org/docs/sim/vhd/std_sim.vhd line 25


  • finish;
# 1
# Break in Process p1 at /home/kola/docs/osvvm.org/docs/sim/vhd/std_sim.vhd line 27
  • finish(1);
# ** Note: finish
#    Time: 110 ns  Iteration: 0  Instance: /std_sim
# 1
# Break in Process p1 at /home/kola/docs/osvvm.org/docs/sim/vhd/std_sim.vhd line 29
  • finish(2);
# ** Note: Data structure takes 16558720 bytes of memory
#          Process time 0.00 seconds
#          finish
#    Time: 110 ns  Iteration: 0  Instance: /std_sim
# 1
# Break in Process p1 at /home/kola/docs/osvvm.org/docs/sim/vhd/std_sim.vhd line 30


Информация

В отличии от пакета STD.STANDARD декларацию пакета STD.ENV необходимо включать в VHDL-файл, чтобы его функции стали доступны:

library std;
use std.env.all;


New types defined in this package:
    REAL_VECTOR - A vector of type real
    TIME_VECTOR - A vector of type time
    INTEGER_VECTOR - A vector of type integer
    BOOLEAN_VECTOR - a vector of type boolean 
 
    New constants defined in this package:
    SIM_RESOLUTION : TIME - returns the simulator's resolution (1 ns default) 
 
    New funcitons defined in this package:
    "maximum" and "minimum" are defined for all default datatypes
    _reduce functions (and_reduce, nand_reduce, or_reduce ...) are defined These functions reduce a bit_vector to a single bit.
    Example:
    or_reduce ("0101") = '1'
    In VHDL-2008 syntax these will be "or".
    "vector" and "bit" operations are defined. These will perform a boolean operation of a vector.
    Example:
    "1" xor "1010" = "0101";
    /??/ function is defined for "bit" ("??" operator is release) if (/??/('1')) then -- will return a "true".
    rising_edge and falling_edge functions are defined (see Notes).
    to_string function - Converts any of the base types into a string.
    Example:
    assert (bv = "101") report "result was " & to_string(bv) severity note;
    to_hstring and to_ostring function (bit_vector to hex or octal string)


  • tee - Echos the string to BOTH the file and the screen
  • SREAD and SWRITE - String read and write routines

(so you no longer need to do write (L, string'("ABCEDFG"));

  • HREAD and HWRITE (Hex read and write) for bit_vector
  • OREAD and OWRITE (octal read and write) for bit_vector
  • BREAD and BWRITE (binary read and write, same as "READ" and "WRITE" for bit_vector
  • justify - Justify a string left or right with a width.

Example:

justify ("ABCD", left, 6); will result in "ABCD  "

Листинги пакетов



NEW