SystemVerilog中的类的赋值

当我们声明一个类时还没有分配内存,只有在实例化(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”。


应用于MIPI C-PHY v1.0-三线共模SDMM0906系列
中国移动携手华为助力解放军总医院成功完成了全国首例5G远程手术
路向何方?后工业时代台湾电子业转型实录
AI全球最具影响力学者榜单 中国学者占比9.3%位于第二梯队
红米Note 4X首发当天!你抢到了吗?京东好评度百分之百
SystemVerilog中的类的赋值
NE555时基集成电路的实验与制作,NE555 introduction
华东师大研发可伸缩离子导电水凝胶传感器,可应用于人体运动监测中
光电耦合器电路图大全(可控硅/稳压电路/隔离耦合电路详解)
QPA2225 Ka波段0.4瓦GaN驱动放大器QORVO
自动驾驶AI芯片选型的20个关键指标
新风系统助力构筑智能家居的新时尚
COB被认为是LED显示技术通向Micro LED的必经之路
美国巴达维亚市警察局提议对三条街道进行LED路灯的改造
龙芯、鲲鹏、海光、飞腾、申威、兆芯—深度对比国产六大CPU厂商
姨妈红iphone7拯救苹果,三星手机重新领跑
IPHONE7和IOS10实用技巧小结,玩转苹果手握极简!
逼近一万亿美元,推动亚马逊市值飙涨的因素是什么?
青岛市财政局、科技局调研科教产融合园区建设推进工作
DEKRA德凯与韩国产业技术试验院签署MoU合作备忘录