uvm_component与uvm_object
uvm_object是UVM中最基本的类,uvm_component也派生自uvm_object,但uvm_component有一些uvm_object没有的特性。
1.在new的时候指定parent参数来形成UVM树形结构。
2.phase自动执行。
只有基于uvm_component的派生类才可能成为UVM树的节点。
uvm_object是分子,uvm_component就是高级生命,uvm_sequence_item是血液,uvm_sequence是sequence_item的组合,config是高级生命的行为准则。
uvm_object
transaction是uvm_sequence_item。
sequence派生自uvm_sequence,sequence将一个sequence_item通过sequencer交给driver。
config:所有的config派生自uvm_object,规范验证平台的行为方式,如规定driver在读取总线时,地址信号持续几个时钟,片选信号何时有效。通过config把配置信息放在一个object中,然后通过config_db进行参数配置。
uvm_reg_item:派生自uvm_sequence_item,用于register model中。
uvm_reg_map、uvm_mem、uvm_reg_field、uvm_reg、uvm_reg_file、uvm_reg_block都派生自uvm_object。
uvm_phase:派生自uvm_object,规定uvm_component的行为方式,使得uvm_component平滑地在各个phase中运转。
与uvm_object相关的宏
`uvm_object_utils:把uvm_object注册到factory机制中。
`uvm_object_param_utils:注册参数化的类。
`uvm_object_utils_begin(my_object)//当transaction需要使用field_automation机制时,使用此宏。
`uvm_object_utils_end
uvm_driver:索要transaction,并按照接口时序驱动sequence_item
uvm_monitor:接受数据,转换成transaction级别的sequence_item。
uvm_sequencer:组织管理sequence_item.
uvm_scoreboard:比较结果。
reference model:直接派生自uvm_component。用软件模拟硬件行为。
uvm_agent:封装sequencer、driver、monitor。引入is_active
uvm_env:将验证组件封装,当运行不同测试用例时,只要例化该env即可。
uvm_test:所有case派生自uvm_test
uvm_component相关宏
`uvm_component_utils
`uvm_component_param_utils
`uvm_component_utils_begin
`uvm_component_utils_end
由于clone()等于new+copy,而uvm_component在实例化时必须指定父节点,因此在uvm_component中clone()函数失效。
(1)
class A extends uvm_object;
...
endclass
class my_env extends uvm_env;
virtual function void build_phase(uvm_phase phase);
A a1;
A a2;
a1 = new("a1");
a1.data = 8