[转]《SystemVerilog验证测试平台编写指南》学习笔记——抽象类和纯虚方法

抽象类和纯虚方法

抽象类:即可以被扩展但是 不能被直接实例化的类,它使用“ virtual”关键字进行定义。

纯虚方法:这是一种没有实体的方法原型。

  • 一个由抽象类扩展而得来的类只有在所有虚方法都有实体的时候才能被例化。
  • 关键词“pure”表明一个方法声明是原型定义,而不仅仅是空的虚方法
  • 纯虚方法只能在抽象类中定义,但是抽象类中也可以定义非纯方法。

使用纯虚方法的抽象类

/*
可以声明BaseTr类型的句柄,但是却不能创建该类型的对象,
需要首先扩展该类并对所有的纯虚方法提供具体实现。
*/
virtual class BaseTr;
	static int count;		//需要创建的实例数
	int id;					//唯一的事务id

	function new();
		id = count++;		
	endfunction

	pure virtual function bit compare(input BaseTr to);
	pure virtual function BaseTr copy(input BaseTr to=null);
	pure virtual function void display(input string prefix="");
endclass : BaseTr

Transaction类扩展了抽象类

class Transaction extends BaseTr;
	rand bit[31:0] src, dst, data[8];

	extern virtual function bit compare(input BaseTr to);
	extern virtual function BaseTr copy(input BaseTr to=null);
	extern virtual function void display(input string prefix="");

	extern virtual function void copy_data(input Transaction copy);
	extern virtual new();
endclass

Transaction方法的实体

function bit Transaction::compare(input BaseTr to);
	Transaction tr;
	assert($cast(tr,to));		//检查to是否为正确类型
	return((this.src == tr.src) &&
		   (this.dst == tr.dst) &&
		   (this.crc == tr.crc) &&
		   (this.data == tr.data));
endfunction : compare

function BaseTr Transaction::copy(input BaseTr to=null);
	Transaction cp;
	if(to == null)
		cp = new();
	else
		$cast(cp,to);
	copy_data(cp);
	return cp;
endfunction

function void Transaction::copy_data(Transaction copy);
	copy.src = src;
	copy.dst = dst;
	copy.data = data;
	copy.crc = crc;
endfunction

function void Transaction::display(string prefix="");
	$display("%sTransaction%0d src=%h, dst=%%x, crc=%x", prefix, id, src, dst, crc);
endfunction : display

function Transaction::new();
	super.new();
endfunction : new

---------------------
作者:煎丶包
来源:CSDN
原文:https://blog.csdn.net/qq_39794062/article/details/113423688
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值