SV中增加了一種方式ref,指定為引用而不是復制。這種方式只能用在automatic的子程序中,這種參數的好處是在子程序中
修改變量對調用它的模塊隨時可見。
task bus_read(input logic [31:0] addr, ref logic [31:0]data); initial fork
bus.request = 1'b1; bus_read(addr,data);
@(posedge bus.grant) bus.addr =addr; thread2: begin //使用ref類型傳遞data,這樣不需
@(posedge bus.enable) data = bus.data; @data; //要等到bus_read進程結束,
....... $display; //thread2便可以看見data的變化
endtask:bus_read end
join
自動(可重入)任務
任務在本質上是靜態的,任務中的所有聲明項的地址空間是靜態分配的,同事並發執行的多個任務共享這些存儲區。
因此,如果這個任務在模塊中的兩個地方被同時調用,則這兩個任務調用將對同一塊地址空間進行操作。操作的結果很有可能是錯誤的。
為了避免這一問題,Verilog通過在task關鍵字前面添加automatic關鍵字,是任務成為可重入的,這樣聲明的任務也稱為自動任務。