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

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;
  • 11
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值