Continuous Assigns
A module may have any number of continuous assign statements. Continuous assign statements are used to drive values on to wires. For example:
assign a = b & c;
This is referred to as a continuous assign because the wire on the left-hand side of the assignment operator is continuously driven with the value of the expression on the right hand side. The target of the assign statement must be a wire. The continuous assign statement is not a procedural statement and so must be used at the module level; it cannot be placed in an initial or always process.
You can add delay to a continuous assign statement as follows:
assign #10 a = b & c;
In this case, the value of a
changes 10 units of time after the expression
b & c
changes. Continuous assign statement implement inertial delay, meaning
that continuous assign statements swallow glitches. This is illustrated below
with the assumption that the unit of time is 1ns.
![../../_images/inertial-delay.png](../../_images/inertial-delay.png)
It is possible to specify up to three delay values on a continuous assignment:
assign #(10,15) a = b & c;
assign #(10,15,25) x = y ^ z;
When you specify more than one:
The first delay refers to the transition to the 1 value (rise delay).
The second delay refers to the transition to the 0 value (fall delay).
The third delay refers to the transition to the high-impedance value.
When a value changes to the unknown (x) value, the delay is the smallest of the delays specified.
If only two delays are specified, then the delay to high-impedance is the smallest of the two values specified.