I wrote a two-flop synchroniser as always @(posedge clk) begin q1 = d; q2 = q1; end. In simulation q2 follows d after a single clock edge instead of two, and the synthesis report shows both registers fed directly from d. Changing the assignments to <= gives the two-stage delay I expected.
What is the actual difference between = and <= inside an always block, and is there a dependable rule for which one to use where?




