Спецификация процедуры в VHDL.

В языке VHDL имеются операции следующих категорий:

1. Логические операции

2. Операции отношений

3. Операции сложения/вычитания

4. Операции умножения/деления

5. Прочие

Приоритет операций возрастает от категории 1 к категории 5. Операции одной категории имеют одинаковый приоритет и выполняются в последовательности: слева направо. Скобки используются для изменения последовательности исполнения.

Операции логические

Существует шесть логических операций: and, or, nand, nor, xor, not.

Операции применимы к типам BIT, BOOLEAN, к одноразмерным массивам BIT и BOOLEAN. При выполнении битовые значения ‘0’ и ‘1’ интерпретируются как булевские FALSE и TRUE. Результат имеет тот же тип, что и операнды. Операция not – унарная операция, она имеет приоритет категории 5.

Операции отношений

В языке VHDL имеются следующие операции отношений:

=, /=, <, <=, >, >=

Результатом выполнения любой операции отношений является булевское выражение BOOLEAN. Операции равенства ( = ) и неравенства ( /= ) допустимы со всеми типами, за исключением типа “файл”. Остальные четыре операции допустимы над скалярными типами (целочисленными, перечислимыми) или над массивами дискретного типа. Когда операндами являются массивы, то сравнение выполняется слева направо по одному элементу

Операции суммирования, вычитания, конкатенации

Операции имеют обозначения:

+, -, &.

Операнды, участвующие в операциях сложения ( + ) и вычитания ( - ) должны быть одного числового типа, результат оказывается того же типа. Операндами в конкатенации ( & ) могут быть или отдельные элементы или одномерные массивы. Результат выдается в виде массива, например при выполнении конкатенации:

‘0’ & ‘1’

образуется массив символов “01”, или еще пример:

‘C’ & ‘A’ & ‘T’

дает “CAT”.

Операции умножения, деления

К этой группе оператций относятся: *, /, mod, rem.

Операнды умножения ( * ) и деления ( / ) должны быть одновременно либо целочисленного типа (integer) либо типа с плавающей запятой (floating point). Результат всегда того типа, что и операнды. Операция умножения может иметь один операнд физического типа, а другой – либо целочисленного, либо натурального типа. Результат выдается в виде физического типа.

В операции деления допустимо делить объект физического типа на целочисленный или натуральный. Результат - всегда физического типа. Деление физического типа на физический дает целочисленный результат.

Операции остатка ( rem ) и “деления по модулю” ( mod ) в качестве операндов могут иметь целочисленные типы и результат - целочисленного типа. Результат rem имеет знак первого операнда и определяется следующим образом:

A rem B = A - ( A / B ) * B

Результат mod имеет знак второго операнда и определяется следующим образом:

A mod B = A – B * N,

где N – некоторое целое.

Прочие операции

К их числу следует отнести: Abs, ** и другие. Операция выделения абсолютного значения ( abs ) совместима с любым числовым типом операнда. Операция возведения в степень ( ** ) операндом слева имеет целое или тип с плавающей точкой, а в качестве правого операнда (степень) - только целое.

Спецификация функции в VHDL.

В языке VHDL функции можно описывать, указывая:

1. Имя функции.

2. Входные параметры, если таковые имеются.

3. Тип возвращаемого значения.

4. Описания, если они требуются для самой функции.

5. Алгоритм вычисления возвращаемого значения

Объявление функции

functionbyte_to_int(alpha:byte)returninteger is

variableresult:integer :=0;

Begin

For n in 0 to 7 loop

result :=result*2 +bit'pos(alpha(n));

end loop;

returnresult;

endbyte_to_int;

Вызовфункции

Process

variabledata:byte;

Begin

byte_to_int(data);

end process;

64. Пакет std_logic_arith. Функции преобразования типов.

Этотпакетсодержитстандартныйнаборарифметических, логическихфункцийифункцийсравнениядляработыстипами SIGNED, UNSIGNED, SMALL_INT, INTEGER, STD_ULOGIC, STD_LOGIC и STD_LOGIC_VECTOR, STD_LOGIC

Типы SIGNED, UNSIGNED имеют такое же определение как Bit _vector, но для них разработан набор функций, который позволяет интерпретировать их значения как числовые. Тип UNSIGNED интерпретируется как двоичное представление числа без знака. Старшие разряды в представлении находятся слева. Тип SIGNED интерпретируется как двоичное представление числа со знаком. Старшие разряды в представлении также находятся слева. Самый левый разряд представляет знак (0 – соответствует «+», 1 – соответствует «-»).

Функции преобразования типов

INTEGER to INTEGER - это шаблон выражения, используемый для обращения к функции CONV_INTEGER, которая предназначена для приведения данных различных типов к целому типу INTEGER.

INTEGER to SIGNED представляет собой шаблон варианта использования функции CONV_SIGNED, который предназначен для приведения данных целого типа INTEGER к знаковому типу SIGNED.

INTEGER to STD_LOGIC_VECTOR включает в себя шаблон варианта применения функции CONV_STD_LOGIC_VECTOR для преобразования значения переменной или сигнала целого типа INTEGER в массив типа STD_LOGIC_VECTOR.

INTEGER to UNSIGNED содержит образец варианта использования функции CONV_ UNSIGNED, который выполняет приведение данных целого типа INTEGER к беззнаковому типу UNSIGNED.

SIGNED to INTEGER включает в себя шаблон варианта использования функции TO_INTEGER для преобразования данных знакового типа SIGNED в данные целого типа INTEGER.

SIGNED to SIGNED — это образец варианта применения функции CONV_SIGNED для конверсии данных знакового типа в тот же тип, но с другой разрядностью.

SIGNED to STD_LOGIC_VECTOR представляет собой шаблон варианта применения функции CONV_STD_LOGIC_VECTOR для преобразования значения константы, переменной или сигнала знакового типа SIGNED в массив типа STD_LOGIC_VECTOR.

Наши рекомендации