當(dāng)我們聲明一個類時還沒有分配內(nèi)存,只有在實例化(new())時才會分配內(nèi)存。這個時候?qū)ο缶浔?strong>指向被分配的內(nèi)存,下面是對象句柄賦值的示例:
class PCI; …… endclass PCI p1; //a variable 'p1' of type PCI is created. //Memory is not allocated. p1 = new; //this is where memory is allocated for 'p1'. PCI p2; p2 = p1; //class assignment
在上面的例子中,p2是一個PCI類型的變量(尚未完成實例化分配內(nèi)存),而p1是一個完成了實例化的對象句柄。
當(dāng)賦值p2 = p1時,實際上還是只有一個對象,“p1”和“P2”對象句柄現(xiàn)在都指向相同的內(nèi)存空間。
正因為它們都指向相同的內(nèi)存空間,所以“p1”對象的變化將反映到“p2”對象,反之亦然。
module class_TOP( ); class PCITop; logic [31:0] addr; logic [31:0] data; function void disp (string instName); $display("[%s] addr = %h data = %h", instName, addr, data); endfunction endclass : PCITop PCITop PCI1, PCI2; initial begin; PCI1 = new;//create object PCI1 PCI2 = PCI1; //class assignment PCI1.addr = 'h1234_5678; //using PCI1 handle PCI1.data = 'hf0f0_f0f0; PCI1.disp("PCI1"); PCI2.disp("PCI2"); PCI2.addr = 'h8765_4321; //using PCI2 handle PCI2.data = 'hff_0101; PCI1.disp("PCI1"); PCI2.disp("PCI2"); end endmodule
仿真log:
[PCI1] addr = 12345678 data = f0f0f0f0 [PCI2] addr = 12345678 data = f0f0f0f0 [PCI1] addr = 87654321 data = ffff0101 [PCI2] addr = 87654321 data = ffff0101 V C S S i m u l a t i o n R e p o r t
上面的例子中,我們對對象“PCI1”的修改能反映到“PCI2”,對對象“PCI2”的修改也反映到了“PCI1”。
審核編輯:湯梓紅
-
內(nèi)存
+關(guān)注
關(guān)注
8文章
3031瀏覽量
74119 -
Verilog
+關(guān)注
關(guān)注
28文章
1351瀏覽量
110141 -
System
+關(guān)注
關(guān)注
0文章
165瀏覽量
36984
原文標(biāo)題:SystemVerilog中的類的賦值
文章出處:【微信號:芯片驗證工程師,微信公眾號:芯片驗證工程師】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論