在systemverilog中方法也可以聲明為“static”。靜態(tài)方法意味著對(duì)類的所有對(duì)象實(shí)例共享。
在內(nèi)存中,靜態(tài)方法的聲明存儲(chǔ)在一個(gè)同一個(gè)地方,所有對(duì)象實(shí)例都可以訪問。
另外,靜態(tài)方法可以在類外部訪問,即使還沒有實(shí)例化任何一個(gè)類對(duì)象。
靜態(tài)方法只能訪問靜態(tài)屬性。
從靜態(tài)方法訪問非靜態(tài)屬性會(huì)導(dǎo)致編譯錯(cuò)誤,靜態(tài)方法也不能是virtual的,也不能使用“this”句柄。
module class_TOP( ); class base; static logic [31:0] data ; //static property logic [31:0] addr; //dynamic property static task munge; //Static method data = 32'h f0f0_f0f0; //OK to access static variable //addr = 32'h ff_0000; //NOT OK since 'addr' is not static $display("data = %h", data); endtask endclass : base base base1; initial begin base1.munge; end initial #10 $fnish(2); endmodule
仿真log:
data = f0f0f0f0 $fnish at simulation time 10 V C S S i m u l a t i o n R e p o r t
在本例中,我們?cè)陬悺癰ase”中聲明了一個(gè)名為“munge”的靜態(tài)方法。
我們?cè)L問“munge”可以使用尚未完成實(shí)例化的對(duì)象句柄“base1”。
需要注意的是,靜態(tài)方法“munge”只能索引靜態(tài)變量“data”,如果取消下面這行代碼的注釋,則會(huì)發(fā)生編譯錯(cuò)誤。
因?yàn)椤癮ddr”不是靜態(tài)變量,需要實(shí)例化后使用對(duì)象的句柄才能訪問。
//addr = 32'h ff_0000; //NOT OK since 'addr' is not static
靜態(tài)函數(shù)訪問非靜態(tài)變量,會(huì)導(dǎo)致編譯錯(cuò)誤:
Error-[SV-AMC] Non-static member access testbench.sv, 9 class_TOP, "addr" Illegal access of non-static member 'addr' from static method 'base::munge'.
還可以使用類解析操作符訪問靜態(tài)方法,建議使用這種方法,因?yàn)樗宄貥?biāo)識(shí)了我們正在訪問一個(gè)靜態(tài)方法。
class setIt; static int k; static function set (int p ); k = p + 100; endfunction endclass module tbTop; initial begin setIt::set(10); $display("k = %0d",setIt::k); setIt::set(20); $display("k = %0d",setIt::k); end endmodule
仿真log:
k = 110 k = 120 V C S S i m u l a t i o n R e p o r t
靜態(tài)變量和靜態(tài)方法隸屬于一個(gè)類,而不是類的某個(gè)對(duì)象實(shí)例。如果在靜態(tài)方法前面加上virtual,你會(huì)得到一個(gè)編譯錯(cuò)誤:
class base; virtual static task munge(); endtask endclass
編譯log:
Error-[WUCIQ] Invalid qualifer usage testbench.sv, 32 Invalid use of class item qualifers. Cannot use virtual and static keywords together for method declarations.
審核編輯:劉清
-
Verilog語言
+關(guān)注
關(guān)注
0文章
113瀏覽量
8281
原文標(biāo)題:SystemVerilog中的Static方法
文章出處:【微信號(hào):芯片驗(yàn)證工程師,微信公眾號(hào):芯片驗(yàn)證工程師】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論