数字IC验证23831--核心基类

本文介绍了UVM中的uvm_object类及其核心方法copy()和compare(),以及域自动化如何简化对象操作。通过实例展示如何在Box类中使用uvm_object_utils进行域声明,以及compare()方法在数据类比较中的应用。
摘要由CSDN通过智能技术生成

uvm_object

  • UVM世界中的类最初都是从一个uvm_void根类(root class)继承来的,而实际上这个类并没有成员变量和方法。
  • uvm_void只是一个虚类(virtual class)(不能例化,只能继承),还在等待将来继承于它的子类去开垦。在继承于uvm_void的子类中,有两个类,一个为uvm_object类,另外一个为uvm_port_base类。
  • 在UVM世界的类库地图中除过事务接口(transaction interface)类继承于uvm_port_base,其它所有的类都是从uvm_object类一步步继承而来的。
    在这里插入图片描述

uvm_object的核心方法

  • copy、Clone、Compare.、Print . Pack/Unpack

域的自动化

  • 从UVM通过域的自动化,使得用户在注册UVM类的同时也可以声明今后会参与到对象拷贝、克隆、打印等操作的成员变量。
  • 域的自动化解放了verifier的双手,这使得在使用uvm_object提供的一些预定义方法时,非常便捷,而无需再实现自定义方法。
  • 在了解了域的自动化常用的宏之后,用户需要考虑哪些成员变量在注册UVM类(uvm_{component, object}_utils)的时候,也一并将它们归置到对应的域列表中,以便为稍后的域方法提供可以自动实现的基础。

copy()

class box extends uvm_object;
int volume = 120;
color_t color = WHITE;
string name = "box" ;
·uvm_object_utils begin (box)  //注册的同时做域的自动化声明
	'uvm_field_int(volume,UVM_ALL_ON)
	`uvm _field_enum (color _t, color,UVM_ALL_ON)
	'uvm_field_string (name, UVM_ ALL_ON)
 `uvm_object_utils_end
 . . .
endclass
box b1, b2;
initial begin
	b1 =new ( "box1");
	b1.volume = 80;
	b1.color =BLACK;
	b2 = new () ;
	b2.copy (b1);
	b2.name = "box2";
end

compare

function bit compare (umobject rhs,uvm comparer comparer=nul1) ;

  • 默认情况下,如果不对比较的情况作出额外配置,用户可以在调用compare()方法时,省略第二项参数,即采用默认的比较配置。.
  • 比较方法经常会在两个数据类少进行。例如从generator产生的一个transaction(数据类),和在设计输出上捕捉的
    transaction(数据类),如果它们为同一种类型,除了可以自定义数据比较之外,也可以直接使用uvm_object::compare()函数来实现数据比较和消息打印。
  • 默认比较器最大输出错误信息为1,即当发送错误时,不在进行后续比较。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值