Спецификация процедуры.
Спецификация процедуры описывает действия при вызове процедуры и имеет следующий синтаксис:
\спецификация процедуры\::=procedure \имя процедуры\[(\список параметров\)] is
{\объявление в подпрограме\}
begin
{\последовательный оператор\}
end [procedure][\имя процедуры\];
\список параметров\::=(\элемент списка\ {; \элемент списка\})
\элемент списка\::=[constant | variable | signal ]
\идентификатор\{,\идентификатор\}: [in | out | inout] \тип параметра\
[ := \статическое выражение\]
Здесь \имя процедуры\ - идентификатор процедуры. В списке параметров указывается информация о формальных параметрах процедуры. Вместо формальных параметров подставляются фактические параметры во время вызова процедуры. В каждом из элементов списка параметров может объявляться какой это параметр (константа, переменная или сигнал) направление передачи параметра (in, out или inout) его тип или подтип и его значение по умолчанию, равное статическому выражению.
Список параметров может отсутствовать, т.е. он тогда задан неявно. При этом имена фактических параметров совпадают с именами формальных параметров, объявленых в процедуре. Обычно трудно понять программу с процедурами без списков параметров. Поэтому в соответствии с условиями повторного использования проектов, не рекомендуется программирование процедур без списка параметров.
Объявленными в процессе могут быть: объявление и тело другой процедуры или функции, объявление типа и подтипа, объявление константы, переменной, файла, псевдонима, объявление и спецификация атрибута, объявление группы, описание use.
Рассмотрим пример программирования и использования процедуры в процессе для сортировки трех целых чисел.
process(a1,a2,a3)
variable b1,b2,b3:integer;
procedure sort2(variable x1,x2:inout integer) is
variable t:integer;
begin
if x1>x2 then
return;
else
t:=x1; x1:=x2; x2:=t;
end if;
end procedure;
begin
b1:=a1; b2:=a2; b3:=a3;
sort2(b2,b3);
sort2(b1,b2);
sort2(b2,b3);
c1<=b1; c2<=b2; c3<=b3;
end process;
Здесь процедура sort2 выполняет сортировку двух переменных х1, х2, которые являются входными – выходными формальными параметрами процедуры. Вызов процедуры выполняется с позиционным связыванием.
Оператор return досрочно прерывает исполнение процедуры. Последовательный оператор return -оператор возврата из подпрограммы – немедленно прерывает выполнение процедуры или вызова функции и возвращает управление в программу, вызвавшую процедуру.