【SystemVerilog笔记(四)】class与package

本文详细介绍了面向对象编程的核心概念,包括类的定义、对象的创建与句柄使用,以及类成员的封装性和继承机制。重点阐述了静态变量和静态方法的特性,并探讨了句柄在不同对象间如何传递。同时,提到了package在组织和导入类、方法中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(一)class
  • 面向对象编程的三要素:封装、继承和多态。
一、类和对象
1.class类
  • class类包含成员变量(property)和成员方法(method)的声明,属于软件的范畴,只能定义软件变量(reg和wire等硬件信号是不能用的),且默认其生命周期是动态的。此外,class可以通过interface作为媒介获取硬件信号。
2.object对象和handle句柄
  • object对象是类的实例,类的例化可以在任意时间点发生;handle句柄是用来指向对象的指针(悬空的句柄为null),示例如下。
Example ex; //声明句柄
ex = new(); //创建对象
3.创建对象
  • 每个class的都需要有new()函数,该函数为系统预留函数,也可进行自定义。不需指定返回值。
  • 在创建对象后,该对象的空间位置不会更改,指向该空间的句柄可以有多个,当没有句柄指向该对象时,sv会自动回收空间。
4.静态变量与静态方法
  • 使用static来声明class内的变量则是静态变量,该类无论例化多少个对象,都会共享一个同名的静态变量。
  • 静态方法中可以声明并使用动态变量,但是不能使用类的动态成员变量。(在使用静态方法是可能并没有创建具体的对象,也就并没有为动态成员变量开辟空间)
  • 静态方法可以使用类的静态成员变量。二者都在编译阶段就开辟了对应的内存空间。
二、类成员的封装性
  • 成员默认类型为public,子类和外部均可访问。
  • 指明protected则只有该类或者子类可以访问。
  • 指明local则只有该类可以访问成员。
  • this.xx表明调用的成员为当前类的成员。
三、类的继承
  • 继承的关键字为extends
class son extends father;
...
endclass
  • 通过super来索引父类的同名函数。子类在定义new函数时应首先通过super.new()调用父类的new函数,若父类new函数没有参数则可省略,系统自动调用。

※如果子类的句柄赋给了父类的句柄,则父类句柄也只能访问共有的父类成员变量和方法。而反之则不允许父类句柄赋给子类的句柄。(欢迎讨论!)

四、句柄的使用
  • 句柄可以作为形式参数通过方法来完成对象指针的传递。
  • 任意时刻都可以为句柄创建新的对象,注意同一个对象可能有多个句柄(不管通过哪个句柄读出数据结果也自然是一样的)。
(二)package
  • package中可以定义类、静态方法和静态变量,不可以定义硬件相关的module、interface等。
  • 通过package::xx的方式导入package中的类、方法等。
  • 如果package名称唯一且内部定义的名称也与其他package各不相同,则可通过import package_name::*的方式使得包中的内容可以被搜索到。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值