A container for a projected output waveform of a signal. The value of the signal is a function of the current values of its drivers. Each process that assigns to a given signal implicitly contains a driver for that signal. A signal assignment statement affects only the associated driver(s).
Each signal assignment statement defines a driver for each scalar signal that is a target of this assignment. In case of signals of complex type, each element has its own driver. Inside processes each signal has only one driver, no matter how many assignment to it are specified.
When an assignment statement is executed, a new value is assigned to the signal driver. The value of the signal is determined based on all its drivers using the resolution function.
signal DataBus :
Std_Logic_Vector (7 downto
0) := "ZZZZZZZZ";
P1: process (A,B)
. . .
DataBus <= "11111111";
end process P1;
P2: process (A,B)
. . .
DataBus <= "00000000";
end process P2;
Signal DataBus is assigned values in two processes, therefore it will have two drivers (one per each process). The assignments will result in a change of the value of respective drivers, which will result in assigning the "XXXXXXXX" value to the DataBus.
Drivers are not associated with signal declarations but with signal assignments.
If a signal has more than one driver in an architecture, it must be of a resolved type.