当我们声明一个类时还没有分配内存,只有在实例化(new())时才会分配内存。这个时候对象句柄指向被分配的内存,下面是对象句柄赋值的示例:
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类型的变量(尚未完成实例化分配内存),而p1是一个完成了实例化的对象句柄。
当赋值p2 = p1时,实际上还是只有一个对象,“p1”和“P2”对象句柄现在都指向相同的内存空间。
正因为它们都指向相同的内存空间,所以“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”。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !