在UVM中使用工厂模式基本上分为三个步骤:

1. 注册

当定义一个类的时候,它的类型必须要注册,UVM已经提供了专用的宏。

`uvm_component_utils(class_type_name)

`uvm_component_param_utils(class_type_name #(params))

`uvm_object_utils(class_type_name)

`uvm_object_param_utils(class_type_name #(params))

这四个宏中两个是为参数化的类准备的,另外两个是为非参数化的类注册用的。

2. 实例化对象

在对component或object型对象进行实例化的时候要使用静态方法create(),不能采用new()去实例化。也就是要用如下这个非常奇怪的实例化格式:

object_name = class_type::type_id::create("object_name",this);

3. 重载override

最后就是在需要override的时候,按照类型或者名称去override原来的对象。

set_inst_override_by_type(original_type, override_type, full_inst_path )

set_inst_override_by_name(original_type_name, override_type_name, full_inst_path )

参考文献:

[1] UVM的factory机制. http://www.asicdv.com/uvm_scan.asp?id=30

[2] UVM FACTORY . http://www.testbench.in/UT_06_UVM_FACTORY.html

05-11 20:55