首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >uvm_component是如何在uvm_factory中注册的?

uvm_component是如何在uvm_factory中注册的?
EN

Stack Overflow用户
提问于 2021-07-14 23:20:44
回答 1查看 448关注 0票数 1

我最近开始研究UVM,并且很难理解工厂的组件/对象注册过程。具体来说,我找不到实际注册的代码行。

以下是我的想法/搜索过程:

  1. 我发现uvm_factory类有一个register方法,它注册给定类型的代理对象
  2. 这个代理对象是uvm_component_registry类,它参数化了最初想要的组件/对象的类型
  3. uvm_component_registry类中有一个get方法,它创建代理对象me并通过factory.register(me)调用将其注册到工厂。
  4. 在uvm_component中,它指出每个uvm_component都应该通过使用uvm_component_utils宏向工厂注册,该宏扩展为以下代码片段: uvm_component_registry #(T,"S") type_id;静态函数type_id get_type();返回type_id::get();端点函数虚拟函数uvm_object_wrapper get_object_type();返回type_id::get();结束函数虚函数字符串get_type_name ();返回type_name;端点函数

所以,我来谈谈问题的根源。在从uvm_component类扩展的user类中,我们只有uvm_component_utils宏,它不调用uvm_component_registryget方法。此外,在使用工厂创建必要的类对象的get阶段之前,不存在build方法调用。当然可以,这意味着我们班已经注册了。问题是-怎么做?是否有一些隐式get方法调用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-15 05:20:08

相反,因为`uvm_component_utils宏添加了

代码语言:javascript
复制
typedef uvm_component_registry #(T,`"S`") type_id;

该参数化类具有一个带有声明初始化的静态变量。

代码语言:javascript
复制
local static this_type me = get();

这将调用get(),而不必构造uvm_component_registry类,因为它是类的专门化。你可能想读我的DVCon论文:使用参数化类和工厂:面向对象验证的阴阳,或者看我在用于UVM验证的SystemVerilog OOP上的短训班。详细介绍了UVM如何在系统-verilog中实现工厂设计模式

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68386089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档