一、核心基类
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
- Pack/Unpack
在SV模块的学习中,我们懂得了什么是句柄拷贝和对象得拷贝。因此,无论是copy或者clone,都需要确保在操作过程中需要有source object 和 target object。
域的自动化(field automation)
uvm通过域的自动化,使得用户在注册uvm类得同时也可以声明今后会参与到对象拷贝、克隆、打印等操作得成员变量。
uvm_object_utils_begin(box) 域的自动化声明
uvm_object_utils_end
拷贝(copy)
在uvm的数据操作中,需要对copy和clone加以区分。
前者默认创建好了对象,只需要对数据进行拷贝。
后者会自动创建对象,并对source object进行数据拷贝,再返回target object句柄。
无论是copy还是clone,都需要对数据进行复制。
上述的copy中数据成员中含有句柄,是copy句柄本身,还是创建新的对象,copy句柄指向的对象?
因为同时class box在注册打开了`uvm_field_object,所以是深copy,创建新的对象,至于color和diameter没有拷贝过去,是因为ball在注册中关闭了color的copy,同时自动执行了do_copy。
比较(compare)
打印(print)
默认的uvm_default_printer是uvm_table_printer