0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SystemVerilog中的类的赋值

芯片验证工程师 来源:芯片验证工程师 作者:芯片验证工程师 2022-11-21 10:35 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

96fac5d6-675d-11ed-8abf-dac502259ad0.png

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次阅读

    SystemVerilog的Virtual Methods

    SystemVerilog多态能够工作的前提是父的方法被声明为virtual的。
    发表于 11-28 11:12 1057次阅读

    SystemVerilog的联合(union)介绍

    SystemVerilog ,联合只是信号,可通过不同名称和纵横比来加以引用。
    的头像 发表于 10-08 15:45 2346次阅读
    <b class='flag-5'>SystemVerilog</b><b class='flag-5'>中</b>的联合(union)介绍

    在testbench如何使用阻塞赋值和非阻塞赋值

    本文详细阐述了在一个testbench,应该如何使用阻塞赋值与非阻塞赋值。首先说结论,建议在testbench,对时钟信号(包括分频时钟)使用阻塞
    的头像 发表于 04-15 09:34 998次阅读
    在testbench<b class='flag-5'>中</b>如何使用阻塞<b class='flag-5'>赋值</b>和非阻塞<b class='flag-5'>赋值</b>

    SpinalHDLBundle与普通数据类型之间的连接赋值转换

    SpinalHDLBundle与SystemVerilog的packed struct很像,在某些场景下,与普通数据类型之间的连接赋值可以通过asBits,assignFromBi
    发表于 10-18 14:22

    更好地理解SystemVerilog的多态Polymorphism

    多态(Polymorphism) ,从字面意思上看指的是多种形式,在OOP(面向对象编程)中指的是同一个父的函数可以体现为不同的行为。在SystemVerilog,指的是我们可以使用父
    发表于 12-05 17:34

    PHP传值赋值和引用赋值的详细资料详解

    本文档的主要内容详细介绍的是PHP传值赋值和引用赋值的详细资料详解。
    发表于 03-06 17:04 5次下载
    PHP<b class='flag-5'>中</b>传值<b class='flag-5'>赋值</b>和引用<b class='flag-5'>赋值</b>的详细资料详解

    SystemVerilog$cast的应用

    SystemVerilog casting意味着将一种数据类型转换为另一种数据类型。在将一个变量赋值给另一个变量时,SystemVerilog要求这两个变量具有相同的数据类型。
    的头像 发表于 10-17 14:35 3858次阅读

    SystemVerilog的struct

    SystemVerilog“struct”表示相同或不同数据类型的集合。
    的头像 发表于 11-07 10:18 3159次阅读

    SystemVerilog的Shallow Copy

    SystemVerilog的句柄赋值和对象复制的概念是有区别的。
    的头像 发表于 11-21 10:32 1382次阅读

    数字硬件建模SystemVerilog-组合逻辑建模(1)连续赋值语句

    SystemVerilog有三种在可综合RTL级别表示组合逻辑的方法:连续赋值语句、always程序块和函数。接下来几篇文章将探讨每种编码风格,并推荐最佳实践编码风格。
    的头像 发表于 12-07 15:31 2275次阅读

    SystemVerilog的Semaphores

    SystemVerilogSemaphore(旗语)是一个多个进程之间同步的机制之一,这里需要同步的原因是这多个进程共享某些资源。
    的头像 发表于 12-12 09:50 4173次阅读

    verilog阻塞赋值和非阻塞赋值的区别

    阻塞赋值操作符用等号(即 = )表示。“阻塞”是指在进程语句(initial和always),当前的赋值语句阻断了其后的语句,也就是说后面的语句必须等到当前的赋值语句执行完毕才能执行
    发表于 12-19 16:49 8924次阅读

    简述python空和实例属性赋值

    python主体没有任何内容,只有pass语句,称为空。 ## 1.2 obj.attr属性赋值 通过obj.attr=value进行和实例属性
    的头像 发表于 02-21 10:30 1545次阅读

    SystemVerilog:处理信号双驱动问题解析

    SystemVerilog,类型可以分为线网(net)和变量(variable)。线网的赋值设定与Verilog的要求相同,即线网赋值需要使用连续
    的头像 发表于 10-13 14:53 3669次阅读
    <b class='flag-5'>SystemVerilog</b>:处理信号双驱动问题解析