1.核心基类
uvm_object继承自uvm_void, 但是uvm_void是一个虚类,没有任何的变量和方法。
继承自uvm_void,有两个类,一个是uvm_object,还有一个是uvm_port_base
uvm_object核心方法:
copy
clone
compare
print
pack/unpack
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
copy()和clone()的区别,copy默认对象已经创建,而clone会创建新的对象 b2.copy(b1)
do_copy()是copy()的回调函数,自动调用
compare() b2.compare(b1)相同返回1,不同返回0
uvm_default_comparer,uvm_default_printer,uvm_default_packer
pack和unpack
pack是为了将自动化声明的变量打包为比特流(bit stream)
unpack将串行数据解包变为原有的各自域
sim和fpga通信的接口有pci/usb/jtag/uart
2.phase机制
例化的先后顺序,组件在例化之后的连接,顶层到底层的配置
9个phase机制
bulid,connect,run比较常用,build是自顶向下的
只有run是task
class subcomp extends uvm_component
`uvm_component_utils(subcomp)
function new(string name, uvm_component parent);
super.new(name,parent);
endfunction
function void build_phase(uvm_phase phase);
`uvm_info("build_phase", "",UVM_LOW)
endfunction
endclass
class topcomp extends subomp;
subcomp c1, c2;
function void build_phase(uvm_phase phase);
`uvm_info("build_phase", "",UVM_LOW)
c1 = subcomp::type_id::create("c1