Code Verilog - [expand] 1 2 3 4 always @ (p,q,r,s) p=q; // p, r, and s cause the always block to be scheduled even when there is nothing to do. p<=r; p=s;
Code Verilog - [expand] 1 2 3 4 5 always @ (q,r,s) begin p = q; p <= r; p = s; end
Non-blocking assignments get scheduled at the end of the block so the blocking assignments are scheduled in the order they appear and are then overwritten by the scheduled non-blocking assignment at the end of the always.
In the event scheduling section referred to as NBA.Where in LRM it is stated that Non-blocking assignments get scheduled at the end of the block?
yessun_ray said:Do you want to mean that here although in the code p<=r precedes p=s; the last assignment out of the three will be p<=r?
Is it you want to mean that p will get the value of r only and not the values of q and s?
Where is the $display?
The LRM is very clear about multiple NBA's to the same variable, the last one wins, but does not mention the interaction between an NBA followed by a blocking assignment. It suspect it is not syntehsizable.