按值傳遞
在SystemVerilog中,由值傳遞是傳遞參數給子程序默認的機制。該參數傳遞機制通過將每個參數複製到子例程區域來工作。如果子程序是自動的,那麼子程序在其堆棧中保留參數的本地副本。
通過引用傳遞
參數通過引用傳遞不會被複制到子程序區域,確切地說,原來的參數的引用傳遞到子程序。
子程序然後可以經由參考訪問參數數據。不允許鑄造。
還要注意,它應是非法使用的參數通過引用傳遞的子程序與靜態一生。
只有應按下述法律按引用傳遞:
— A variable,
— A class property,
— A member of an unpacked structure, or
— An element of an unpacked array.
籃網和選擇成網,不得借參照
傳遞對於你的問題
的目的是什麼「mod yyy」在modport?
有一些性能改進,當您使用的參考,當不同的事件被多次觸發的事件,但它是當需要/必要的相當大的性能優化,只使用一個很好的做法。一個推薦實施例通過參考使用通行證可以在link
在這裏找到我展示與參考事件如何modport使用的一種方法。
interface intf(input clk);
event out_event;
logic clk;
modport dut(input clk,ref out_event);
always @(out_event)
$display ($time,"ns"," out_event triggered");
endinterface
module dut(intf.dut d);
reg [2:0] count;
initial
count = 0;
always @ (posedge d.clk)begin
count = count + 1'b1;
if (count == 'd2)
-> d.out_event;
end
endmodule
module top (input clk);
intf int_f(.clk(clk));
dut u0(.d(int_f.dut));
endmodule
上述工作實施例中所用的鏈接EDA-Playground
詳情通過值找到約通行證參閱第13.5.1節的SystemVerilog LRM IEEE 1800-2012和用於通行證通過引用參考13.5節0.2
這個例子的意義是什麼?當我只是使用inout out_event而不是ref時,我找不到任何不同之處。 – bunch
這個例子中的要點是針對你的問題「我找不到任何例子,這是什麼?」和「一個ref參數類似於inout參數,除了一個inout參數被複制兩次:當子例程被調用時,一次從實際參數進入參數,當子例程返回時,一次從參數進入實際。我再次提到了表現的差異。請注意,ref無法通過定向限定符進行限定。 – Emman