当我们声明一个类时还没有分配内存,只有在实例化(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”。
审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
内存
+关注
关注
9文章
3173浏览量
76099 -
Verilog
+关注
关注
30文章
1370浏览量
114107 -
System
+关注
关注
0文章
166浏览量
38445
原文标题:SystemVerilog中的类的赋值
文章出处:【微信号:芯片验证工程师,微信公众号:芯片验证工程师】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
热点推荐
SystemVerilog中的类构造函数new
在systemverilog中,如果一个类没有显式地声明构造函数(new()),那么编译仿真工具会自动提供一个隐式的new()函数。这个new函数会默认地将所有属性变量。
发表于 11-16 09:58
•4187次阅读
在testbench中如何使用阻塞赋值和非阻塞赋值
本文详细阐述了在一个testbench中,应该如何使用阻塞赋值与非阻塞赋值。首先说结论,建议在testbench中,对时钟信号(包括分频时钟)使用阻塞
SpinalHDL中Bundle与普通数据类型之间的连接赋值转换
SpinalHDL中Bundle与SystemVerilog中的packed struct很像,在某些场景下,与普通数据类型之间的连接赋值可以通过asBits,assignFromBi
发表于 10-18 14:22
更好地理解SystemVerilog的多态Polymorphism
多态(Polymorphism) ,从字面意思上看指的是多种形式,在OOP(面向对象编程)中指的是同一个父类的函数可以体现为不同的行为。在SystemVerilog中,指的是我们可以使用父类
发表于 12-05 17:34
SystemVerilog中$cast的应用
SystemVerilog casting意味着将一种数据类型转换为另一种数据类型。在将一个变量赋值给另一个变量时,SystemVerilog要求这两个变量具有相同的数据类型。
数字硬件建模SystemVerilog-组合逻辑建模(1)连续赋值语句
SystemVerilog有三种在可综合RTL级别表示组合逻辑的方法:连续赋值语句、always程序块和函数。接下来几篇文章将探讨每种编码风格,并推荐最佳实践编码风格。
SystemVerilog中的Semaphores
SystemVerilog中Semaphore(旗语)是一个多个进程之间同步的机制之一,这里需要同步的原因是这多个进程共享某些资源。
verilog中阻塞赋值和非阻塞赋值的区别
阻塞赋值操作符用等号(即 = )表示。“阻塞”是指在进程语句(initial和always)中,当前的赋值语句阻断了其后的语句,也就是说后面的语句必须等到当前的赋值语句执行完毕才能执行
发表于 12-19 16:49
•8924次阅读
简述python空类和实例属性赋值
python类主体没有任何内容,只有pass语句,称为空类。
## 1.2 obj.attr属性赋值
通过obj.attr=value进行类和实例属性
SystemVerilog:处理信号双驱动问题解析
在SystemVerilog中,类型可以分为线网(net)和变量(variable)。线网的赋值设定与Verilog的要求相同,即线网赋值需要使用连续

SystemVerilog中的类的赋值
评论