The signal assignment statement modifies the projected waveform of a signal by scheduling one or more events or transactions on that signal. The syntax is:
There are two types of signal assignments as shown in the rule. Both forms use the following three rules
The waveform specifies the values that should be scheduled to appear on the signal. The waveform is either UNAFFECTED or a list of waveform elements. The UNAFFECTED waveform specifies that no values are to be scheduled on the signal. Each waveform element contains an expression that represents the value that should be scheduled on the target. If the AFTER clause appears, then the time expression specifies that the value should be scheduled to occur that amount of time from the current time. If the AFTER clause does not appear, a default delay of 0 fs is used.
The options part contains two unrelated options of how the assignment is to occur. The transport option indicates that a transport delay model should be used to modify the projected waveform. If this does not appear, the default inertial delay model is used. The two models are related to modeling different frequency responses of digital components. The transport model updates the projected waveform, as if it represents a component with infinite frequency response. Thus, however fast the input varies so shall the output. Inertial delay, on the other hand, has a frequency response equal to the delay time specified with the AFTER part. With this model, the value of the waveform element will only be scheduled if the signal retains that value for at least the delay time.
The following statement uses the default inertial delay model. Let's say that b has had the value '1' since forever and takes the value of '0' for 999ps and then returns to the value '1'. The value of signal a will never change because the duration of the '0' pulse is less than the delay of the signal a. Note that the assignment operates the same as because the default delay is 0 fs.
The guarded option specifies that the assignment is guarded by a guard expression. The guard expression is described in the section on block statements. The guard expression is a boolean expression, which if true, will cause the signal assignment to be executed. If the guard expression is false, two things can occur. If the target signal is a resolved signal, then a null transaction is scheduled on the target. If the target signal is not a resolved signal, then nothing is done. The null transaction is discussed with resolved signals in the next chapter.