Prozeduraufruf

Nebenläufige Anweisungen – Prozeduraufruf

ENTITY four_bit_register IS

PORT (clk : IN bit ;
in_d : IN bit_vector(3 DOWNTO 0) ;
out_q, out_q_bar : OUT bit_vector(3 DOWNTO 0) ) ;

END four_bit_register ;

------------------------------------------------------------

ARCHITECTURE with_procedures OF four_bit_register IS

PROCEDURE d_ff (CONSTANT delay : IN time := 2 ns ;
SIGNAL d,clk : IN bit ;
SIGNAL q,q_bar : OUT bit )
BEGIN
IF clk = '1' AND clk'EVENT THEN
q <= d AFTER delay ;
q_bar <= NOT d AFTER delay ;
END IF ;
END d_ff ;

BEGIN

-- nebenlaeufige Prozeduraufrufe

d_ff_3 : d_ff (1.5 ns, in_d(3), clk,
out_q(3), out_q_bar(3)) ;
d_ff_2 : d_ff (delay => 1.7 ns, d => in_d(2), clk => clk,
q => out_q(2), q_bar => out_q_bar(2)) ;
d_ff_1 : d_ff (1.9 ns, in_d(1), clk,
q_bar => out_q_bar(1), q => out_q(1)) ;
d_ff_0 : d_ff (q_bar => out_q_bar(0), clk => clk,
q => out_q(0), d => in_d(0)) ;



END with_procedures ;
Prozeduren bieten wie höhere Programmiersprachen die Möglichkeit, Unterprogramme zu realisieren. Sie werden mit einer Liste von Argumenten aufgerufen, die sowohl Eingaben als auch Ausgaben oder bidirektional sein können. Prozeduren werden bis zu einer RETURN-Anweisung oder bis zum Ende abgearbeitet.

In nebenstehendem Beispiel wird ein 4-bit Register realisiert, welches eine D-Flip-Flop-Prozedur 'd_ff' verwendet, die im Deklarationsteil der ARCHITECTURE definiert ist.
Die vier Prozeduren werden immer dann aktiviert, wenn sich mindestens ein Argumentwert mit IN- oder INOUT-Modus ändert, im Beispiel 'delay', 'clk' oder 'd'.