为什么能够通过type_id::create创建实例

本文详细解析了UVM中如何通过`X::type_id::create`方法创建实例。首先介绍`type_id`的来源,通过`uvm_component_utils`宏在类X中注册类型。接着探讨`create`方法的实现,它调用`create_component_by_type`,最终利用`new()`创建实例。整个过程涉及工厂模式和类型注册,对理解UVM组件创建机制至关重要。
摘要由CSDN通过智能技术生成

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;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值