SV精通3-①类和对象

  • 面向对象编程三要素:封装、继承、多态。
  • 类实际上为数据类型,对象为一个具体的实例。例如,int为语言提供的一种数据类型。
  • 类的定义其实是属性(即成员变量)、行为等的声明,将这一类的属性提取出来。类是属性和方法的自洽体,能够保存和处理数据;而struct结构体则是单纯的数据集合,不能对数据做出符合需求的处理。
  • 成员方法(即方法)则为对数据的处理方法,例如在类中的属性(即成员变量)和行为,定义一个人类的类,人不仅有属性(年龄、名字等),还有一些行为(跑步、说话等),这些行为的实现就需要方法去实现。
例如:
为什么要用OOP?
  • 在每个代码块endfunction、endclass后加label便于配对和阅读。如:endclass :Transaction和endfunction :display等
  • 把class改成module也一样。class为软件盒子,module为硬件盒子。
  • class也要进行例化。
  • 在module内的方法以及变量都是静态的,伴随整个过程。
  • 在class(软件)内的方法和变量则为动态变量,调用一次后销毁。
  • 在软件盒子class内,不能定义硬件的变量,即wire、reg等硬件定义,使用bit等定义软件变量;module硬件盒子内可以定义硬件信号,也可以用bit定义变量。
  • 接口的指针可以传递到类里,因此类可以通过接口获得硬件内部的信号。因此软件盒子和硬件盒子的连接媒介为interface接口。
  • module里定义的方法要在initial和always过程块中调用;在class内定义的方法通过方法嵌套方法来调用,且在class中不能使用initial和always。

  • OOP的概念要素
谈到句柄(指针),则将它理解为指向例化的对象。谈到属性,即为成员变量,可以使用logic和bit。

  • Verilog的例化和SV的class例化的区别
1.Transaction tr创建叫tr的指针,假设地址为0x0011;tr = new()创建了对象,同时对应在堆中开辟了0x0011指向的存储空间。
2.对象的空间位置不会改变,并且指向改存储空间的句柄(指针)可以有多个。
3.句柄:创建一个句柄,即指针,需要指向一个对象:
tr = new();
  • 硬件例化仿真在load时,硬件层次结构就已经确定了(即在跑仿真时不能改变),在编译前就提前确定好了。
  • SV软件的例化即可以很灵活使用,可以随时例化和销毁掉。

    答案:BCD——tr = new TR();例如一个人可以有多个名字,小名、大名等,句柄指向对象。

  • 创建对象:即开辟了新的内存空间,用来存放新的成员变量和方法
tr = new(10);//10被传递给a了
*函数new(),创建对象,并返回句柄给tr。
例题
答案:C;10被传入后在function内addr的3被代替掉为10,logic先定义为16,但是最终起作用的是new内重新赋值为10。

  • 句柄的传递
对象——存储空间。
句柄——空间指针,指向存储空间的指针。
t2 = t1;让t2句柄指向了同一个对象,即堆中的同一片存储空间。
*函数new(),创建对象,并返回句柄
1.t1 = new();——通过new创建了一个对象,然后把这个new()返回的句柄赋予了t1。
2.看到了一次new(),那么就是例化了一次对象。因此上述代码中例化了两个对象。
  • SV也采用了自动回收空间的处理方式。
"需要"指的是,如果存在句柄(指针)指向这个对象(存储空间),那么这个对象是被需要的;反之没有句柄指向该对象,那么该对象不被需要,会被自动销毁。
#####注意#####
创建动态数组为:
byte nb[];
nb = new[10];//new后采用的是中括号。
创建对象则是new(),用的是小括号。
#############
  • 例题
答案:只指向最后一个第四个对象,选B;之前的对象没有句柄指向了。
如果加了automatic,执行完initial1后,最后动态变量wd就不存在了,句柄也销毁了,对象也销毁了,答案选D。

null为关键词

  • 静态变量
引用class类中的静态变量,需要使用class::var语句来引用。
例化了一次Transaction,count就会加一次。如图标注,索引静态变量。
  • 静态方法中可以声明并使用动态变量,但是不能使用class类中的动态成员变量,这是因为如果在调用该静态方法时,静态方法中没有创建具体的对象,那就没有开辟动态成员变量的存储空间,则该方法无法正确使用。
  • 静态方法可以使用类的静态变量,这是因为静态方法和静态变量在编译阶段就已经分配好了内存空间。动态成员变量则不会在编译阶段分配内存空间。
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值