- Section 2.1
- Section 2.2
- Section 8.5
- Section 9.3
procedure procedure_name (parameter_list) is declarations begin sequential statements end procedure_name;
Procedures may have in, out or inout parameters. These may be signal, variable or constant. the default for in parameters is constant. For out and inout it is variable. In fact, a constant in parameter can be associated with a signal, variable constant or expression when the procedure is called:
procedure DISPLAY_MUX ( ALARM_TIME, CURRENT_TIME : in digit; SHOW_A : in std_ulogic; signal DISPLAY_TIME : out digit ) is begin if (SHOW_A = '1') then DISPLAY_TIME <= ALARM_TIME; else DISPLAY_TIME <= CURRENT_TIME; end if; end DISPLAY_MUX;
Procedures may be called concurrently or sequentially. A concurrent procedure call executes whenever any of its in or inout parameters change:
architecture SUBPROG of DISP_MUX is -- begin DISPLAY_MUX (ALARM_TIME, CURRENT_TIME, SHOW_A, DISPLAY_TIME); end SUBPROG;
A procedure may declare local variables. These do not retain their values between successive calls, but are re-initialized each time. Array-type parameters may be unconstrained
procedure PARITY ( signal X : in std_ulogic_vector; signal Y : out std_ulogic ) is variable TMP : std_ulogic := '0'; begin for J in X'range loop TMP := TMP xor X(J); end loop; -- works for any size X Y <= TMP; end PARITY;
A procedure can contain wait statements, unless it is called from a process with a sensitivity list, or from within a function.
If a procedure is defined in a package, its body (the algorithm part) must be placed in the package body.
package REF_PACK is procedure PARITY ( signal X : in std_logic_vector; signal Y : out std_logic ); end REF_PACK; package body REF_PACK is procedure PARITY ( signal X : in std_logic_vector; signal Y : out std_logic ) is begin -- procedure code end PARITY; end REF_PACK;
The keyword end may be followed by the keyword procedure for clarity and consistency.
Procedures may be given an optional label.
A concurrent procedure call can be specified to run as a postponed process.
Procedures are usually supported for synthesis, providing they do not contain any wait statements.
- Concurrent Signal Assignment
- Conditional Signal Assignment
- Package Body
- Wait Statement