非阻止分配

非阻塞分配(<=)用于在边缘敏感的 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 仍然在块中第二个赋值的右侧具有其原始值。