非阻止分配
非阻塞分配(<=
)用于在边缘敏感的 always
块内进行分配。在块中,在处理整个块之前,新值不可见。例如:
module flip(
input clk,
input reset
)
reg f1;
reg f2;
always @ (posedge clk) begin
if (reset) begin // synchronous reset
f1 <= 0;
f2 <= 1;
end
else begin
f1 <= f2;
f2 <= f1;
end
end
endmodule
请注意此处使用非阻塞(<=
)分配。由于第一个赋值直到程序块之后才真正生效,所以第二个赋值执行预期的操作并实际交换两个变量 - 与阻塞赋值(=
)或其他语言中的赋值不同; f1
仍然在块中第二个赋值的右侧具有其原始值。