field automation机制在UVM中非常重要,主要是牵扯到打印,比较,复制,打包以及解包等操作。看下面一段代码
package UVM_cmd;
import uvm_pkg::*'
`include "uvm_macros.svh"
class obj extends uvm_object;
int a;
`uvm_object_utils_begin(obj)
`uvm_field_int(a,UVM_ALL_ON)
`uvm_object_utils_end
function new(string name);
super.new(name);
endfunction
endclass
class my_test extends uvm_test;
obj obj_client;
`uvm_component_utils(my_test)
function new(string name,uvm_component parent);
super.new(name,parent);
endfunction
function void build_phase(uvm_phase phase);
super.build_phase(phase);
obj_client=obj::type_id::create("obj_client");
obj_client.a=10;
obj_client.print();
endfunction
endclass
endpackage
首先要弄明白uvm_object_utils(T)和uvm_object_utils_begin(T)的区别
,看下面的解释
`define uvm_object_utils(T) \
`uvm_object_utils_begin(T) \
`uvm_object_utils_end
所有者两类宏完全一样,都可以实现factory注册,那么怎么区别使用,当我们要实现field automation机制时,我们使用下面这种模式
`uvm_object_utils_begin(T) \
`uvm_object_utils_end
我们展开宏uvm_object_utils_begin(T)
`define uvm_ob