Изучение VHDL

       

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


Спецификация процедуры описывает действия при вызове процедуры и имеет следующий синтаксис:

\спецификация процедуры\::=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 -оператор возврата из подпрограммы – немедленно прерывает выполнение процедуры или вызова функции и возвращает управление в программу, вызвавшую процедуру.



Содержание раздела