(5)UVM 核心基类

本文详细介绍了UVM核心基类中的关键方法,包括对象拷贝、比较、打印及打包和解包操作。UVM通过域的自动化简化了这些操作,提供copy、clone、compare、print和pack&unpack功能。默认情况下,拷贝执行深拷贝,比较方法基于自动化域进行,打印功能则可以根据不同打印机设置输出格式。
摘要由CSDN通过智能技术生成

UVM核心基类

一、前言

UVM世界中的类最初都是从一个uvm_void跟类(root class)继承来的,而实际上这个类并没有成员变量和方法。uvm_void只是一个虚类(virtual class),还在等待将来继承于它的子类去开垦。在继承于uvm_void的子类中,有两个类,一个为uvm_object类,另外一个为uvm_port_base类。
在这里插入图片描述

在UVM世界的类库地图中除过事务接口(transaction interface)类继承于uvm_prot_base,其它所有的类都是从uvm_object类一步步继承而来的。从uvm_object提供的方法和相关的宏操作来看,它的核心方法主要提供与数据操作的相关服务:

  • Copy
  • Clone
  • Compare
  • Print
  • Pack/Unpack

在SV模块的学习中,我们懂得了什么是句柄拷贝和对象拷贝。因此,无论是copy或者clone,都需要确保在操作的过程中,需要有source object和target object。

二、域的自动化

在SV中,关于对象的复制,需要自己编写copy()成员方法来规定哪些成员数据需要复制。可以想象的是,如果对uvm_object类的成员数据的复制、打印等操作都要用户自己去定义的话,那么这会带来额外的编码负担,并且可能由于用户代码的不规范也容易出错。

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

class box extends uvm_object;
	int volume=120;
	color_t color=WHITE;
	string name="box";
	`uvm_object_utils_begin(box)
		`uvm_filed_int(volume,UVM_ALL_ON)
		`uvm_filed_enum(color_t,color,UVM_ALL_ON)
		`uvm_filed_string(name,UVM_ALL_ON)
	`uvm_object_utils_end
endclass
  • 域的自动化的相关宏都是`uvm_field_{int,object,string,enum,event,real…}{ARG,FLAG}。ARG表示成员变量,FLAG表示用来标记的数据操作。
  • FLAG初学者可以默认为UVM_ALL_ON或者UVM_DEFAULT
  • 如果你考虑到你接下来的成员变量可能会参与到copy,compare,print类似的操作时,那么在注册时,通过域的自动化对变量做声明

三、拷贝(copy)

class ball extends uvm_object;
	int diameter=10;
	color_t color =RED;
	`uvm_object_utils_begin(ball)
		`uvm_field_int(diameter,UVM_ALL_ON)
		`uvm_filed_enum
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数字IC小白的日常修炼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值