当前位置:网站首页>SystemVerilog学习-07-类的继承和包的使用
SystemVerilog学习-07-类的继承和包的使用
2022-07-01 05:45:00 【Vuko-wxh】
类的继承
什么是继承?
继承是面向对象编程范式的关键概念。类用来创建用户自定义类型. 继承使得用户可以用非常安全,非侵入的方式对类的行为进行增加或者修改。从基类做扩展并产生新的子类的过程叫类的派生,当一个类被扩展并创建之后,该派生类就继承了其基类的数据成员、属性和方法,这就是类的继承。
继承后的类可以实现以下功能:
继承了原来类的方法,并可以修改
添加新的方法
添加新的数据成员
在实现以上功能的同时需要满足一定的规则:
子类继承父类的所有数据成员和方法
子类可以添加新的数据成员和方法
子类可以重写基类中的数据成员和方法
如果一个方法被重写,其必须保持和基类的原有定义有一致的参数
子类可以通过super操作符来引用父类中的方法和成员
被声明为local的数据成员和方法只能对自己可见,对外部和子类都不可见;对声明为protected的数据成员和方法,对外部不可见,对自身和子类可见。
继承和子类
之前定义过的类Packet,可以进—步扩展构成一个新的类LinkedPacket。通过extends,LinkedPacket继承于其父类Packet,包括继承其所有的成员(变量/方法)。
class LinkedPacket extends Packet;
LinkedPacket next;
function LinkedPacket get_next();
get_next = next;
endfunction
endclass
子类可以继承父类的成员,所以LinkedPacket对象也是一个合法的Packet对象。
由此,父类句柄可以指向子类的对象。
LinkedPacket lp = new;
Packet p = lp;
关于父类和子类的句柄,可以将子类句柄直接赋值给父类句柄,子类可以拥有与父类同名的成员方法,子类可以拥有与父类同名的成员变量。
super
super是用来访问当前对象其父类的成员。尤其当子类的成员如果与父类的成员同名,那么需要使用super来指定访问其父类成员,而非默认的子类成员。
class Packet; // base class
integer value;
function integer delay();
delay = value * value;
endfunction
endclass
class LinkedPacket extends Packet; //derived class
integer value ;
function integer delay();
delay = super.delay ()+ value * super.value;
endfunction
endclass
包的使用
包的定义
为了使得可以在多个模块(硬件)或者类(软件)之间共享用户定义的类型,SV添加了包(package) 。
包的概念参考于VHDL,用户自定义的类型如类、方法、变量、结构体、枚举类等都可以在package…endpackage中定义。
导出包的内容
module、interface、class等可以使用包中定义或者声明的内容。
可以通过域的索引符::号直接引用。
definitions::parameter definitions::instruction_t inst可以指定索引一些需要的包中定义的类型到指定的域中。
module M; import definitions::instruction_t; instruction_t inst; endmodule通过通配符 * 来将包中所有的类别导入到指定的域中。
module M; import definitions::*; instruction_t inst; endmodule包和库的区分
package这个容器可以对类型做一个隔离的作用。package的意义在于将软件(类、类型、方法等)封装在不同的域中,以此来与全局的域进行隔离。
库是编译的产物,硬件( module、interface、program)都会编译到库中,如果不指定编译库的话,会被编译进入默认的库中。库可以容纳硬件类型,也可以容纳软件类型,例如类、方法和包。
包只能容纳软件类型例如类、方法和参数。
reference
- 西电路科验证PPT
边栏推荐
- 【QT】qt加减乘除之后,保留小数点后两位
- json数据比较器
- Chapitre d'apprentissage mongodb: Introduction à la première leçon après l'installation
- OpenGL ES: (3) EGL、EGL绘图的基本步骤、EGLSurface、ANativeWindow
- el-table 动态表头渲染 固定第一列 高度问题
- 穿越派与贸大合作,为大学生增添效率
- Codeforces Round #803 (Div. 2)vp
- OpenGL ES: (5) OpenGL的基本概念、OpenGL ES 在屏幕产生图片的过程、OpenGL管线(pipeline)
- Scope data export mat
- bat操作ftp上传下载命令
猜你喜欢

How to add a gourd pie plate

从底层结构开始学习FPGA----RAM IP的定制与测试

Continue to learn MySQL

穿越派 你的数据云行

Boot + jsp University Community Management System (with source Download Link)

4GB大文件,如何实时远程传输和共享?
SSM的教务管理系统(免费源码获取)

Leetcode Max rectangle, Max square series 84 85. 221. 1277. 1725. (monotonic stack, dynamic programming)

从诺奖知“边缘计算”的未来!

JDBC常见面试题
随机推荐
vsCode函数注解/文件头部注解快捷键
Through cooperation with the University of international trade, we can increase efficiency for college students
HCM 初学 ( 一 ) - 简介
Continue to learn MySQL
Mongodb学习篇:安装后的入门第一课
为什么用葫芦儿派盘取代U盘?
Advanced cross platform application development (III): online resource upgrade / hot update with uni app
QT write custom control - self drawn battery
rust猜数字游戏
My experience from technology to product manager
论文学习记录随笔 多标签之LIFT
2022.6.30-----leetcode.1175
This is the necessary software for college students 𞓜 knowledge management
亲爱的派盘用户,我要向您表白!
HCM 初学 ( 二 ) - 信息类型
Qt编译时,出现 first defined here,原因及解决方法
What is the at instruction set often used in the development of IOT devices?
Advanced drawing skills of Excel lecture 100 (1) - use Gantt chart to show the progress of the project
Ssm+mysql second-hand trading website (thesis + source code access link)
JDBC common interview questions