Of course, this violates my directive number 3: http://www.sunburst-design.com/papers/CummingsSNUG2000SJ_NBA.pdf ), but it will work.
The reason to avoid using non-blocking assignments for combinational code logic is simulation performance. In the Munkymorgy example, after triggers always, you evaluate the right-hand side (RHS) of all the equations, return to the top of the block always, refresh the LHS of the equations, which again will always cause the block, which will again cause the simulator to evaluate the RHS of the equations, go to the top of the always block, and then update the LHS equations. For large blocks, this can lead to several iterations through an always block with a corresponding modeling penalty.
In your simple 1-line example, there is no internal penalty for the simulation, but in other places there may be penalties for cross-assignment.
Good coders use consistently good coding habits. I would change the code. If changing the code violates the simulation results, then there are additional incorrect coding habits buried elsewhere in the code. The code should not be fragile.
Regards - Cliff Cummings - Verilog and SystemVerilog Guru
user1486442
source share