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