OOP-Encapsulation(面向对象-封装)
内容来自启芯-System Verilog视频
==============================================================
目录结构:
1、代码的抽象和可复用性
2、SV中的OOP程序结构
3、OOP封装
4、OOP对象产生
5、操作对象成员
6、初始化对象
7、数据保护
8、类对象赋值
9、Best practices
10、总结
==============================================================
本章目标:
1、OOP封装
2、保护属性
3、初始化,new函数
OOP:Object OrientedProgramming,面向对象
1、代码的抽象和可复用性
图1、OOP复用
类可将一类事物抽象,可由同一个类定义不同的功能,所以又可增加代码的可复用性。
2、SV中的OOP程序结构
图2、Verilog RTL结构与SV的OOP结构对比
3、OOP封装
(1)Variable变量
(2)methods操作数据
(3)variable和methods是类成员
例子:
图3、类例子,classdriver
上类封装了一些变量和task方法,SV中的class对于有C++基础认识的人应该很好理解。
4、OOP对象产生
图4、类对象产生
driver类产生drvr1和drvr2句柄,后用new产生,给对象分配内存。
5、操作对象成员
drvr = new();
drvr.sa = 3; //drvr内的sa变量赋值为3
drvr.da = 7; //drvr内的da变量赋值为7
drvr.send(); //调用方法
6、初始化对象
通过new实现
new无返回值
new执行后对象分配内存
new不能通过“.”访问。
图5、例子
上图this表示当前实例的对象,与C++相同。
7、数据保护
public和local
默认对象成员为public
local成员不能被直接访问
图6、例子
保护成员在类内操作
8、类对象赋值
图7、类对象赋值
pkt1=pkt2,则pkt1对象的内存清零
垃圾回收:如对象句柄pkt1=null,赋值为空
静态属性:类内声明static属性的变量,则用该类例化对象时,所有对象共用该变量的值。
数组操作:在类内定义数组。
9、Best practices
图8、类外部具体书写task函数内容,“::”作用域
图9、调试函数,display显示,compare比较,copy复制
图10、类内的Virtualinterface
驱动和采样信号通过Virtual interface,类似C++的虚函数
注意在类的定义中,构造对象中传的是对象的地址还是对象。
技巧:通过仿真学习分析调试testbench。
10、总结
本节视频介绍了类对象、类成员、类初始化、类属性、及封装。