X::type_id::create是如何创建实例的
当利用factory机制创建实例的时候,往往使用X::type_id::create(name, parent)来创建实例,比如
function void MyEnv::build_phase(uvm_phase phase);
super.build_phase(phase);
x = X::type_id::create("x", this); // factory机制创建实例
endfunction : build_phase
当然X::type_id::create本质依然是调用new()去创建实例,但是问题在于其UVM内部是如何一步步实现调用new()成功创建实例的。
X::type_id从何而来
要实现通过X::type_id::create创建实例,首先需要对需要创建的class X进行factory注册,即使用宏`uvm_component_utils(X)(或者`uvm_object_utils(X)),从[宏uvm_component_utils以及uvm_object_uitls是帮我们添加了哪些代码](./`uvm_component_utils做了什么.md),我们可以得知`uvm_component_utils(X)中的宏`m_uvm_component_register_internal(X,X)为我们的class添加了两个函数(get_type()和get_object_type())以及一个类型定义(type_id)。所以我们可以使用X::type_id来定位到type_id这个类。深入一下源码,可以看到
typedef uvm_component_register #(T, `"S`") type_id;