Типы языка vhdl
В языке VHDL реализована строгая типизация, т.е. смешение переменных разных типов недопустимо. Основными стандартными типами в VHDL являются: Ниже приведены стандартные типы VHDL как они задаются в библиотеках VHDL:
type bit is ('0', '1'),
для типа bit определено два логических уровня ‘0’ и ‘1’,
type bit_vector is array (natural range <>) of bit,
тип bit_vector представляет собой массив бит.
Тип boolean Тип может принимать два значения false и true, по умолчанию – false, т.к. оно задано первым в спимке перечисления:
type boolean is (false,true).
Тип Integer является базовым для представления целых чисел, он принимает целые значения в диапазоне от до :
type integer is range -2 147 483 647 to 2 147 483 647.
Для типа определены операторы +, -, *, /, mod(модуль), rem(остаток), =, /=(не равно), <, >, <=, >=, abs(абсолютное значение), **(возведние в степень); На основе типа integer определны стандартные подтипы:
subtype natural is integer range 0 to biggest_integer,
subtype positive is integer range1 to biggest_integer.
Все эти типы и операторы для них задаются во встроенной библиотеке Library STD.
Для представления всех возможных значений, принимаемых электрическим сигналом был разработан пакет STD_LOGIC_1164, в котором определны типы std_ulogic и std_logic. Тип std_ulogic определяется следующим образом:
type std_ulogic is
( 'U', -- Uninitialized
'X', -- Forcing Unknown
'0', -- Forcing 0
'1', -- Forcing 1
'Z', -- High Impedance
'W', -- Weak Unknown
'L', -- Weak 0
'H', -- Weak 1
'-' -- Don't care
);
Это перечисляемый тип, который может принимать девять значений, соответственно, не инициализированное, сильная неопределнность, сильный ноль, сильная единица, высокоимпедансное состояние, слабая неопределенность, слабый ноль, слабая единица, безразлично. U в названии означает Unresolved Type, т.е. тип не поддерживает использование нескольких источников для сигнала.
Тип std_logic определяется на основе типа std_ulogic:
sybtype std_logic is resolved std_ulogic.
Где resolved – функция, определяющая значение сигнала данного типа в ситуации наличия нескольких источников. Также в пакете STD_LOGIC_1164 определен вектор типа std_logic:
type std_logic_vector is array (natural range <> of std_logic
и набор функций для пробразования типов данных, некоторые из которых приведены ниже:
function To_StdLogicVector ( b :bit_vector ) return std_logic_vector,
function To_bivector (s : std_logic_vector; xmap : bit:=’0’ ) return bit_vector.
Тип std_logic в настоящее время считаетсястандартным типом для описания цифровых устройств. Synopsys создала пакеты std_logic_usigned, std_logic_signed, std_logic_arith, в которых определены арифметические и логические операции для типа std_logic_vector. Также в этих пакетах определена функция преобразования std_logic_vector в integer
function conv_integer(arg: std_logic_vector) return integer
и обратная из integer в std_logic_vector:
function conv_std_logic_vector(arg: integer; size: integer) return std_logic_vector.