Young87

SmartCat's Blog

So happy to code my life!

游戏开发交流QQ群号60398951

当前位置:首页 >跨站数据

【UVM源码学习】uvm_registry


  如果对每个factory注册的component/object都创建其实例,内存、仿真/编译的开销会很大。为了减小这种开销,可以采用uvm_registry对factory注册的componnet/object类创建一个轻量级的代理(仅含有get/get_type/get_type_name等方法),只有使用到该component/object时才手动创建其实例(type_name::type_id::create(name,parent),只有使用uvm_component_utils这类宏注册的才能使用type_name:;type_id::create,type_def直接定义的没有type_id)。

  uvm_registry.svh 中主要实现了两个类,uvm_component_registry及uvm_object_registry,分别为component及object的代理类。两个类均直接派生自uvm_object_wrapper。类中实现的主要方法有:

序号方法描述
1create_component创建component
2create_object创建object
3get_type_name返回type_name
4get调用uvm_object的get,若get()为null,factory.register()并返回
5create调用factory的create_component_by_type来实例化类。只有使用uvm factory机制注册的类才能使用type_name::type_id::create的方式进行实例化
6set_type_override调用了factory的set_type_override_by_type
7set_inst_override调用了factory的set_inst_override_by_type


  可以采用以下方法来注册component代理:

type_def uvm_component_registry #(mycomp, “mycomp”) type_id;

  不同仿真器实现方法或存在不同,常用方法是采用以下宏:

`uvm_component_utils(mycomp)  //非参数化的类
`uvm_component_param_utils(mycomp, #(T)) // 参数化的类:


  对于参数化的类,由于传进来的type_name不固定,因而采用uvm_component_param_utils及uvm_object_param_utils宏注册参数化类的时候,没有实现get_type_name的方法,即采用以上两个宏注册的参数化的类不能使用get_type_name。参数化的类本意是通过传入参数消除多个type_name相同的类之间的干扰,因而不建议通过type_name在uvm_factory中查找相关类。

除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog

上一篇: tf.keras: 保存与加载模型

下一篇: Halcon缺陷检测实例转OpenCV实现(三) 物体凸缺陷检测

精华推荐