9.3 Concurrent procedure call

...
ENTITY e IS
    ...
BEGIN
    ...
END e ;

...
ARCHITECTURE a OF e IS
    ...
BEGIN
    ...
END a ;

...
CONFIGURATION c
        OF e IS
    ...
    ...
    ...
END

...
PACKAGE pkg IS
    ...
    ...
    ...
END pkg ;


concurrent_procedure_call ::=

[ label : ] [ postponed ] procedure_call ;

..
PACKAGE BODY pck
        IS
    ...
    ...
    ...
END pck ;

...
b: BLOCK IS
    ...
BEGIN
    ...
END BLOCK b ;

FUNCTION f (...)
    RETURN r IS
    ...
BEGIN
    ...
END f ;

PROCEDURE p (...) IS
    ...
BEGIN
    ...
END p ;

p : PROCESS
    ...
BEGIN
    ...
END PROCESS p ;

9.3.1 Further definitions

procedure_call ::=
     procedure _name [ ( actual_parameter_part ) ]

9.3.2 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.

9.3.3 Examples

a_proc ;

Procedure call without transfer parameters

lab : my_proc( sig_1, sig_2, sig_3 ) ;

Named procedure call with transfer parameters
which are linked by position.

register_proc( ck => clock,
                d => reg_in,
                q => reg_out ) ;

Procedure call with transfer parameters which
are linked by explicit assignment.

another_proc( sig_1, sig_2, q => sig_3);

Procedure call with transfer parameters which
are linked either by position or by explicit assignment.

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 ;


This example shows that a concurrent procedure
call is equal to a process which has a statement part
which only contains the procedure call.