In Section 14.4.1 rename section to Drives and non-blocking assignments

 

In Section 14.4.1 replace first paragraph (following):

 

All zero-delay signal drives (no cycle delay and no skew) are queued and propagated in one fell swoop, right before read-only synchronize time. Zero-delay signal drives resemble Verilog nonblocking assignments, thus, reading the value of an inout signal immediately after it has been driven will yield the previous (sampled) value, not the driven value:

 

if( bus.data == 31 )

bus.data <= 27;

y = bus.data; // y is 31 (not 27)

 

It is illegal to drive a clocking domain signal with zero delay using = (blocking drive). If the drive specifies a delay or an output skew then the blocking drive is allowed.

 

with:

 

Synchronous signal drives are queued and processed at the end of the verification phase, like non-blocking assignments, that is, they are propagated in one fell swoop without process execution in between drives.

 

A key feature of inout clocking domain variables and synchronous drives is that a driven signal value does not change the clock domain input.  This is because reading the input always yields the last sampled value, and not the current signal value.  In this respect, an inout clocking domain variable resembles non-blocking assignments since reading the variable immediately after it has been assigned will yield the previous value, not the assigned value.

 

            // bus.data is a clock domain inout, y is a variable

if( bus.data == 5 )               if( y == 5 )

    bus.data = 0;                     y <= 0;

$display( bus.data );             $display( y );       // both display 5