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

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

3天内不再提示

Systemverilog里class类型的记录

冬至子 来源:CSDN 作者:谷公子 2023-05-24 14:29 次阅读

1. class内容

class里面包含data和对data进行操作的subroutines(functions and tasks)。class的data称为class properties,subroutines称为methods。两者都是class的members

class相当于是定义了一个data type。object是该class的instance。Object handle是持有该class type的变量。

class里的method的lifetime必须为automatic,如果定义成static是非法的(这里不是指static task,而是task内static的variables或arguments)

2. class构造函数

systemverilog提供了class的构造函数,支持在创建object的时候对instance进行初始化。

如果用户没有显示指定new方法,那么隐藏的new方法将会被自动加上。在子类的new方法里应该首先call父类的new构造函数。

super.new需要在子类构造函数中第一条语句就执行,这是因为superclass需要在子class之前被初始化,如果用户没有提供superclass的初始化,那么compiler会自动插入super.new。

image.png

3. static

class中的static properties可以直接引用,不需要该通过class的instance。

class中的methods也可以是static,static method不能访问non-static members(properties或methods),但它可以访问同个class内的static members。如果它访问了non-static members或this handle,那么应该报编译错误。Static methods也不能是virtual。

Static method和task with static lifetime是不一样的,前者描述的是class内method的lifetime,而后者描述的是task内variables和arguments的lifetime。

4. shallow copy和deep copy

Shallow copy只是复制原有object的properties,但如果原有object里含有object handler,也只是复制handler的值,不会把handler object里的properties也进行复制。

Shallow copy也不会创建新的coverage objects(covergroup instances)。

如果要做到连handler里的properties都复制,那么需要deep_copy,deep copy需要user自己实现的。

5. chaining constructors

如果多层class extend的话,那么在constructor里需要调用父类的constructor。

如果父类的constructor需要arguments,那么有两种方法:1. 用super.new(xx)传进去;2. 在extend父类class时就传进去的,用这种方式,在constructor里就别加super.new(xx)了。

父类的new函数如果不需要arguments(没有参数或参数带默认值),那么在子类constructor里对super.new()可写可不写,不写的话,compiler会自动插入。如果父类的constructor需要传参数,那么compiler自动插入也只是为super.new(),也不会给你传参数值进去的(除非在extend时指定),这样simulator会报错。

记住:如果将new定义为local,那么该类将不可以被继承的。

在子类构造函数中需要第一条调用父类构造函数super.new()中,要等super.new()执行完之后,才会做son class的property初始化,如果property有指定初始值,那么就赋值,如果没有指定,那就是undefined的。最后才会继续执行son class构造函数中super.new()以下的语句。因此在给父类构造函数传输参数,如果用子类定义的变量,那么结果会是undefined的,因此,来不及初始化啊。例子如下:

image.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Verilog
    +关注

    关注

    28

    文章

    1327

    浏览量

    109313
收藏 人收藏

    评论

    相关推荐

    [启芯公开课] SystemVerilog for Verification

    学快速发展,这些趋势你了解吗?SystemVerilog + VM是目前的主流,在未来也将被大量采用,这些语言和方法学,你熟练掌握了吗?对SoC芯片设计验证感兴趣的朋友,可以关注启芯工作室推出的SoC芯片
    发表于 06-10 09:25

    systemverilog学习教程

    systemverilog的一些基本语法以及和verilog语言之间的区别。
    发表于 04-01 14:24

    SystemVerilog有哪些标准?

    SystemVerilog有哪些标准?
    发表于 06-21 08:09

    更好地理解SystemVerilog的多态Polymorphism

    保存子类对象,并直接使用父类句柄来调用子类的方法。因此,SystemVerilog中的多态性是一种根据父类对象句柄实际指向不同的对象类型使相同的代码具备不同行为的能力。为了实现这个目的,父类中
    发表于 12-05 17:34

    SystemVerilog Assertion Handbo

    SystemVerilog Assertion Handbook1 ROLE OF SYSTEMVERILOG ASSERTIONSIN A VERIFICATION METHODOLOGY
    发表于 07-22 14:08 188次下载

    SystemVerilog的断言手册

    SystemVerilog Assertion Handbook1 ROLE OF SYSTEMVERILOG ASSERTIONSIN A VERIFICATION METHODOLOGY
    发表于 07-22 14:12 20次下载

    SystemVerilog语言介绍汇总

    作者:limanjihe  https://blog.csdn.net/limanjihe/article/details/83005713 SystemVerilog是一种硬件描述和验证语言
    的头像 发表于 10-11 10:35 2077次阅读

    SystemVerilog中枚举类型的使用建议

    SystemVerilog中枚举类型虽然属于一种“强类型”,但是枚举类型还是提供了一些“不正经”的用法可以实现一些很常见的功能,本文将示例一些在枚举
    的头像 发表于 09-01 14:20 1138次阅读

    SystemVerilog中$cast的应用

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

    SystemVerilog中的package

    SystemVerilog packages提供了对于许多不同数据类型的封装,包括变量、task、function、assertion等等,以至于可以在多个module中共享。
    的头像 发表于 11-07 09:44 906次阅读

    SystemVerilog中的struct

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

    SystemVerilogclass的基本概念

    class,是面向对象编程(object-oriented programming (OOP))的基础,而OOP可以让你创建更高抽象级别的验证环境(如UVM)。
    的头像 发表于 11-14 09:11 1404次阅读

    SystemVerilogclass是什么意思

    class,是面向对象编程(object-oriented programming (OOP))的基础,而OOP可以让你创建更高抽象级别的验证环境(如UVM)。
    的头像 发表于 11-14 09:11 783次阅读

    FPGA学习-SystemVerilog语言简介

    SystemVerilog是一种硬件描述和验证语言(HDVL),它基于IEEE1364-2001 Verilog硬件描述语言(HDL),并对其进行了扩展,包括扩充了 C语言 数据类型、结构、压缩
    的头像 发表于 12-08 10:35 1379次阅读

    SystemVerilog中至关重要的结构体和自定义类型

    在上一篇文章《SystemVerilog中至关重要的的数据类型》中,介绍了枚举类型的本质和使用语法。本文接着介绍SV中同样不可忽略的结构体(structure)和自定义类型(typed
    的头像 发表于 01-21 17:18 1429次阅读
    <b class='flag-5'>SystemVerilog</b>中至关重要的结构体和自定义<b class='flag-5'>类型</b>