Link Search Menu Expand Document


Used In

  • Architecture

Reference Manual

  • Section


signal signal_name : type;
signal signal_name : type := initial_value;

Rules and Examples

signal SUM, CARRY1, CARRY2 : bit;
signal COUNT : integer range 0 to 15;
signal CLK, RESET : std_ulogic := '0';
signal ALARM_TIME : T_CLOCK_TIME := (1, 2, 0, 0);
signal CONDITION : boolean := false;

During elaboration, each signal is set to an initial value. If a signal is not given an explicit initial value, it will default to the leftmost value (‘left) of its declared type:

signal I : integer range 0 to 3; -- I will initialise to 0
signal X : std_logic; -- X will initialise to 'U'

A signal which is driven by more than one process, concurrent statement, or component instance must be declared with a resolved type, i.e. std_logic or std_logic_vector:

architecture COND of TRI_STATE is
    signal TRI_BIT: std_logic;
    TRI_BIT <= BIT_1 when EN_1 = '1' else 'Z';
    TRI_BIT <= BIT_2 when EN_2 = '1' else 'Z';
end COND;

Signals may not be declared in a processor subprogram (except as formal parameters).

Ports declared in an entity are accessible as signals within the associated architecture(s) and do not need to be redeclared.

A signal of a resolved type may be declared as a guarded resolved signal. This is required if all drivers to a signal may be turned off, through guarded assignments.

signal signal_name : resolved_type signal_kind;

The “signal kind” keyword may be register or bus. Guarded resolved signals of kind register retain their current value when drive is turned off, where signals of kind bus rely on the resolution function to provide a “no-drive” value.

Synthesis Issues

Signals are supported for synthesis, providing they are of a type acceptable to the logic synthesis tool.

The signal kinds register and bus are usually ignored.

Only certain resolved signal types are supported. Most tools recognize the std_logic_1164 types.

See Also