System Verilog学习笔记(十三)——面向对象编程(1)

System Verilog学习笔记(十三)——面向对象编程(1)

OOP术语

  • 类(class):包含了数据和方法(function,task)的类型
  • 对象(object):类在例化后的实例,对象在创建时需要先声明再例化
  • 句柄(handle):指向对象的指针,可以指向很多对象但是一次只能指向一个
  • 原型(prototype):程序的声明部分,包含程序名、返回类型和参数列表

  • SV在类的定义时,只需要定义构建函数,如果未定义,则系统会自动帮助定义一个空的构建函数(没有形式参数,函数体亦为空)
  • SV类是在运行时测试平台需要的时候才被创建,在SV中,激励对象被不断地创建并且用来驱动DUT,检查结果
  • 类在使用前必须先例化
  • 声明
class Transaction;
   //变量和方法
endclass:Transaction

句柄

  • 声明和使用
Transaction tr; //声明一个句柄
tr=new ();  //为一个Transaction对象分配空间

初始化为特殊值null

  • 为对象创建一个句柄
Transaction t1,t2; //声明两个句柄
t1=new(); //为第一个对象分配地址
t2=t1;  //t1和t2都指向该对象
t1=new(); //为第二个对象分配地址

定义构造函数(constructor)

  • new( )函数又称构造函数,既能分配内存,创建对象,又能初始化变量。默认情况下,将变量设置成默认数值——二值变量为0,四值变量为X。
  • new函数不能有返回值,因为构造函数总是返回一个指向类对象的句柄,其类型就是类本身。

静态变量(static)

  • 在类中创建一个静态变量,该变量将被这个类的所有实例所共享,并且他的使用范围仅限于这个类。
  • 通过类名访问静态变量,::是类作用域操作符
$display ("%d transaction were created",Transaction::count)//引用静态句柄

this

  • this用来明确索引当前所在对象的成员(变量/参数/方法)
  • this只可以用来在类的非静态成员、约束和覆盖组中使用
  • this的使用可以明确所指向变量的作用域
class demo;
	integer x;
	function new(integer x);
		this.x=x;   //类变量x=局部变量x
	endfunction
endclass

赋值和拷贝

  • 声明变量和创建对象是两个过程,也可以一步完成
packet P1;
p1=new();
  • 如果将p1赋值给另外一个变量p2,那么依然只有一个对象,指向这个对象的句柄有p1和p2
packet p1;
packet p2;
p1=new;
p2=new p1; //用new操作符进行复制

数据的隐藏和封装

  • 类的成员在默认情况下是公共属性的,表示对于类自身和外部均可以访问该成员
  • 对于商业开发,类的提供方会限制一些类成员的外部访问权限,继而隐藏类成员的更多细节
  • 数据隐藏的方式使类的测试和维护都变得更为简单
  • 对于成员的限定,如果使用local,则只有该类可以访问此成员,而子类或者外部均无法访问
  • 对于成员的限定,如果使用protected,则表示该类和其子类可以访问此成员,而外部无法访问
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值