When to use blocking and non-blocking assignments
You are not understanding the rule correctly. You must not mix = and &lt;= to the same variable within an always block. 

And yes, generally you should use non-blocking &lt;= assignments to sequential logic. You must us a non-blocking assignment if one always @(posedge clock) block writes, and another always @(posedge clock) reads the same variable, or combinatorial expression of the same variable).

The synthesis tool makes the variable sequential if one of the following is true:


The variable is written with a non-blocking assignment &lt;=
The variable is read before written within the block
The variable is read somewhere else outside the block


Otherwise it becomes combinational logic.