UVM学习笔记——核心基类

一、uvm_object
1、uvm_void类
是UVM世界中最原始的类,其它类都是从uvm_void继承而来,它没有成员变量和方法,只是一个虚类,等待后续继承于它的子类去开发,在直接继承于uvm_void的子类中有两个类,一个是uvm_object类,另一个是uvm_port_base类

2、uvm_object继承于uvm_void类,在UVM世界中,除了事务接口类继承于uvm_port_base类,其它都继承于uvm_object类

3、uvm_object核心方法
copy、clone、compare、print、pack/unpark

4、域的自动化(filed automation)
域的自动化可以使用户在注册UVM类的同时也可以声明参与对象copy、clone、print等操作的成员变量
例1:

class box extends uvm_object;
int volume=120;
color_t color = WHITE;
string name = “box”;
'uvm_object_utils_begin(box)   \\注册开始
	//域的自动化声明,具体代码意思可以查红宝书275页表10.2,276页表10.3 
	'uvm_filed_int(volume,UVM_ALL_ON)  
	'uvm_filed_enum(color_t,UVM_ALL_ON)
	'uvm_filed_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";
if(b1.compare(b2))
end

虽然没有在box这个类中定义copy这个方法,但是box中的成员变量进行了域的自动化,在进行数据操作时,这些成员变量将会自动参与到数据操作中,因此,b2.volume=80,b2.color = BLACK;

二、uvm_object核心方法
1、copy
该方法默认已经创建好了对象,只对数据进行拷贝,默认深拷贝,即类似于SV中的copy()和do_copy(),(do_copy()是copy()的回调函数)。

2、clone
于copy不同,此方法会创建对象,并对数据进行拷贝。

3、compare
(1)function bit compare (uvm_object rhs,uvm_compare compare=null);
(2)如果不对比较的情况做额外配置的话,比较函数的第二个参数可以省略,即采用默认的比较配置。
(3)可以使用uvm_object::compare()进行数据比较 。例1中的由于b1与b2成员变量都相同,故compare结果为1。
(4)在使用默认比较器时,即使用uvm_package::uvm_default_compare(),uvm_default_compare()是uvm_pkg例化的全局对象。它的最大输出的错误比较信息是,因此当检测到不相同的变量值是,会立即返回,不在比较后面的成员变量。
(5)如果不使用默认的比较器,可以自己创建uvm_comparer对象,或者修改全局的comparer。

4、print
(1)域的自动化声明后,会调用uvm_object::print()函数自动打印,打印功能可以便于调试。

5、pack/unpack
(1)pack:将自动化后的变量打包成bit流文件,unpack:解包。
(2)一般用于于外界的数据交互,例如UVM于FPGA进行交互的时候使用,在UVM世界里一般不用。


版权声明:本文为zwl_liang原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。