刷HDLbits遇到的关于阻塞赋值的问题

题目地址:https://hdlbits.01xz.net/wiki/Exams/ece241_2014_q4

module top_module (
input clk,
input x,
output z
);
reg [2:0] Q;
initial z=1;
always@(posedge clk)begin

** Q0=x^Q0;
Q1=x&Q1;
Q2=x|
Q2**

为什么标出来的三行要用阻塞赋值的方式


module top_module (
    input clk,
    input x,
    output z
); 
reg [2:0] Q;
always@(posedge clk)
begin
    Q[0]<=x^Q[0];
    Q[1]<=x&~Q[1];
    Q[2]<=x|~Q[2];
end
    assign    z = ~(Q[0]|Q[1]|Q[2]);
endmodule