What is the purpose of having #0 default delay on output signals in clocking block if we are driving the signals using Non blocking assignment

what is the purpose of having #0 default delay on output signals in clocking block if we are driving the signals using Non blocking assignment.

or as #0 delay is there on output signals in clocking block why we need to drive output signals in clocking block using Non blocking assignment

In reply to srbeeram:

#0 is just part of the syntax use to define the output skew. i.e, which time-slot to execute the nonblocking assignment. #0 means the re-NBA region of the current time slot corresponding to the clocking event.

In reply to dave_59:

Hi Dave ,

thanks for providing inputs. Could you please clarify the below too.

if clocking block outputs are driven with blocking statements are they executed in inactive region. if clocking block output are driven with non blocking statements are they executed in re-NBA region. why we need to execute them in re-NBA region instead of NBA region.

In reply to srbeeram:

Clocking block outputs can only be written by clocking block drive statements. If the drive statement is in thread started in a module/interface, it executes in the active region (i.e. the RHS expression of the drive statement executes in the active region). If in a thread started by a program block, it executes in the re-active region. Regardless, of which region the drive statement executes in, the LHS clocking output variable gets updated in the reactive region.

I strongly recommend never using a program block, and ignoring the “re-” half of all the event regions.