How many flip-flips would this code require?
When you use non-blocking assignments (&lt;=) within a sequential block(@(posedge clk)), the variables you assign become flops. The order you read or write to the variable does not matter because you always read the old value of the variable.

When you use blocking assignments (=) within a sequential procedure, the order you perform read versus write matters in determining with the variable becomes a flop. If you read before write, the variable becomes a flop, otherwise it becomes combinational logic. 

However, if you write before reading the variable, and the variable gets read somewhere outside the always procedure, the variable gets registered in a flop. This is a bad practice for simulation because whether the outside procedure reads the old or new value is a race condition. Synthesis results will be the same.