====== Concurrent procedure call ======
===== concurrent_procedure_call =====
[ label : ] [ postponed ] procedure_call ;
===== Parents =====
* entity_statement_part
* architecture_statement_part
* block_statement_part
===== Further definitions =====
==== procedure_call ====
''procedure _[[.:bnf#name]] [ ( [[.:bnf#actual_parameter_part]] ) ]''
===== Comment =====
For any concurrent procedure call statement, there is an equivalent process statement.
The equivalent process statement of a concurrent procedure call statement including the keyword **POSTPONED** is a postponed process.
A concurrent procedure call within the statement-part of an **ENTITY** has to be a passive concurrent procedure call.
===== Examples =====
Procedure call without transfer parameters
a_proc ;
----
Named procedure call with transfer parameters which are linked by position.
lab : my_proc( sig_1, sig_2, sig_3 ) ;
----
Procedure call with transfer parameters which are linked by explicit assignment.
register_proc( ck => clock,
d => reg_in,
q => reg_out ) ;
----
Procedure call with transfer parameters which are linked either by position or by explicit assignment.
another_proc( sig_1, sig_2, q => sig_3);
----
This example shows that a concurrent procedure call is equal to a process which has a statement part which only contains the procedure call.
check_timing( tplh, tphl, clk, d, q ) ;
-- concurrent procedure call
PROCESS -- corresponding process
BEGIN
check_timing( tplh, tphl, clk, d, q);
WAIT ON clk, d, q ;
END PROCESS ;