非阻止分配

非阻塞分配(<=)用於在邊緣敏感的 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 仍然在塊中第二個賦值的右側具有其原始值。