Trevor H. wrote:
> 1.
This rule applies to variables driven and read by different processes.
The core of the issue is in Verilog's scheduling semantics (cf.
IEEE1800-2012, sec. 4.4 “Stratified event scheduler”). Blocking
assignments take place in the Active region, that is as soon as the
corresponding statements are executed. Non-blocking assignments will be
scheduled into the NBA region, that is after all statements have
executed.¹
IOW, the non-blocking assignment ensures that all processes that are
looking at a variable will see the value it had before any changes in
the current time step. Much like a VHDL signal (but not quite the same).
> 2.
As far as a single assignment statement is concerned, I'd say this is
true. But if there is an assignment before reading back the variable,
blocking vs non-blocking does synthesize differently.
Footnotes:
¹ Simplified. There are loopholes. Verilog gives you enough rope to hang
yourself.