In Section 14.4 replace:
Drives are used to propagate the value of output
or inout
signals at their corresponding clock edge.
A drive is an assignment in which the left hand side is a signal in a clocking
domain.
The syntax to drive a signal is:
@delay signal_expression
= expression;
or
signal_expression <=
expression;
The delay optionally specifies the number of clocking
events (i.e. cycles) that pass before the signal is driven. When no delay is
specified, the default is @0, i.e., the current cycle.
The signal_expression is
either a bit-select, slice, or the entire signal in a
clocking that is to be driven (concatenation is not allowed):
dom.sig // entire
signal
dom.sig[2] // bit-select
dom.sig[8:2] // slice
The expression can be any valid expression that is
type compatible with the signal.
For example:
bus.data[3:0] = 4’h5; // drive on current cycle
@1 bus.data = 8’hz;
// wait 1 cycle and then drive
The value driven onto an output signal is not applied until
the signal’s drive edge (typically the clocking event) plus any output skew has
transpired.
with:
Clocking domain outputs
(output
or inout) are used to drive values onto their
corresponding signals, but at a specified time.
That is, the corresponding signal changes value at the indicated
clocking event as modified by the output skew.
The syntax to specify a synchronous drive is similar to an assignment:
[ ## event_count ] clockvar_expression = expression;
or
clockvar_expression = [ ## event_count ] expression;
The clockvar_expression is either or a bit-select, slice, or
the entire clocking domain output whose corresponding signal is to be driven
(concatenation is not allowed):
dom.sig // entire clockvar
dom.sig[2] // bit-select
dom.sig[8:2] // slice
The expression can be any valid expression that is assignment
compatible with the type of the corresponding signal.
The event_count is an integral expression that optionally specifies the number of clocking events (i.e. cycles) that must
pass before the statement executes.
Specifying a non-zero event_count blocks
the current process until the specified number of clocking events have elapsed
otherwise the statement executes at the current time. The event_count uses a
syntax similar to the cycle-delay operator (see Section 13.10), however, the synchronous drive uses the clocking domain of
the signal being driven and not the default clocking.
The second form of the
synchronous drive uses the intra-assignment syntax. An intra-assignment event-count specification
also delays execution of the statement, but the right-hand side expression is
evaluated before the process blocks, instead of after.
Examples:
bus.data[3:0] = 4’h5; // drive in current cycle
##1 bus.data = 8’hz; // wait 1 (bus) cycle and then drive
##[2]; bus.data = 2; // wait 2 default clocking cycles, then
drive
bus.data = ##2 r; // sample r, wait 2 (bus) cycles, the
drive
Regardless of when the
drive statement executes (due to event-count delays), the driven value is
assigned to the corresponding signal only at the time specified by the output
skew.