Blocking assignment (a=b;) is allowed only in non-implicit style always blocks and in functions. For example, should the design require combinational logic separate from the implicit style block, such as an AND gate, a non-implicit style block (having @ immediately after always) can be defined:
always @(b or c) a = b & c;Another place where this could be useful is when additional flip flops, separate from the implicit style block, are required, such as when an asynchronous signal (async) needs to be synchronized (sync) with sysclk:
always @(posedge sysclk) begin sync = async; end
VITO prohibits blocking assignment in implicit style blocks. For example, the following is illegal:
always begin @(posedge sysclk) sync = async; enddespite the fact it is identical to the previous block.