Функции и процедуры, пакеты в VHDL

В VHDL, как и в других языках, многократно используемые на различных участках программы операции часто реализуются при помощи функций и процедур. Объявление функции задает имя функции, тип возвращаемого значения (если оно есть), количество и типы аргументов (если они есть).

Для создания функции необходимо описать ее объявление и тело:

— объявление функции
function my_proc (val: integer) return integer;
— реализация функции
function my_proc (val: integer) return integer is
begin
return val*2;
end my_proc;

Описание тела функции выполняется по правилам, общим для VHDL: в области объявлений описывается заголовок функции, объявляются, если необходимо, внутренние объекты данных, затем после слова begin описывается реализация функции. Описание процедуры подобно описанию функции за исключением возвращаемого значения и его типа.

В языке VHDL допускается определять несколько процедур и функций с одинаковыми названиями (так называемая перегрузка функций). При вызове функции или процедуры из числа функций или процедур с одинаковым названием выбирается такая, которая подходит по типам и числу входных и выходных параметров.

В языке VHDL предусмотрен механизм создания библиотек для часто используемых типов, констант, типов, сигналов, процедур и функций. Библиотека (в терминологии VHDL — пакет) состоит из двух частей — объявления (package declaration) и тела (package body). В объявлении (package) описываются интерфейсы — типы, процедуры и функции. В теле пакета (package body) помещается реализация процедур и функций:

package my_lib is — объявление пакета
type Orient is (North, South, West, East);
procedure change_rnd_direction (d: inout Orient);
end my_lib;
package body my_lib is — тело пакета

end full p;

Библиотека формирует отдельное пространство имен (namespace) для помещаемых в нее описаний, ссылаться на них из программы можно либо явным указанием имени пакета в имени описания, либо указав используемую часть пакета (для указания использования всех описаний в пакете используют расширитель .all):

— в файле проекта
use full_p.all — подключаются все описания
— библиотеки my_lib


Комментарии запрещены.





Статистика

Рейтинг@Mail.ru