当我们声明一个类时还没有分配内存,只有在实例化(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条评论
快来发表一下你的评论吧 !