UVM:8.4.3 用factory 机制创建实例的接口 1.create_object_by_name,根据类名字创建object,原型: 一般只用第一个: 2.create_object_by_type,根据类型创建一个object,原型: 一般只用第一个: 3.create_component_by_name,根据类名创建一个component,原型: 1)第一个类名。 2)第二个父节点全名。 3)第三个新...
所谓的register到factory中,其实就是对两个关联数据进行赋值。 然后后续的create_object_by_type/create_object_by_name都是依据这个关联数组进行查找创建实例的。 find_override_by_type()是实现override的操作 create_object(name)其实就是对应实例化的操作。 m_type_overrides[]这个关联数组至关重要,它存储了overrid...
1.create_object_by_name,依据类名字创建object,原型: 一般仅仅用第一个: 2.create_object_by_type。依据类型创建一个object,原型: 一般仅仅用第一个: 3.create_component_by_name,依据类名创建一个component,原型: 1)第一个类名。 2)第二个父节点全名。 3)第三个新的componen ...
另外,我们知道注册的实质是创建m_type_name["A"]=uvm_register#(A,"A")::me的键值对,如果通过create__by_name创建实例,则需要查找此关联数组,通过"A"获取其键值,再调用create函数创建实例。如果A扩展自object或component时,本身就是带参数的类,如A#(a1),通过create_*_by_name创建实例需要用到"A",而它无...
uvm_config_db传入的参数类型是uvm_object_wrapper, 通过 ”::" 调用静态方法 set() 。 静态类 static也可以声明class, 表示静态类。静态类和静态变量类似,只不过静态类可以封装更多内容。声明静态类的class, 该class的所有实例都可以共享这一个静态类。更多内容UVM设计模式 (三) 静态类、资源管理、uvm_*_pool...
jb_tx = jelly_bean_transaction::type_id::create(.name("jb_tx"), .contxt(get_full_name())); 首先的一个问题,type_id是哪来的? 答:来源于uvm_sequence_item中uvm_object_utils_begin这个宏拓展的代码。先重新看一眼读UVM代码(一)里提到的uvm_sequence_item里,用于注册元素的内容: ...
1. uvm_factory_override其实很简单,它是一个记录把一个已经注册的uvm_object_wrapper用另外一个uvm_object_wrapper来进行替代的数据结构,该结构记录了原wrapper名和对象,替换wrapper名和对象,full_inst_path来跟踪对象的位置 2. 跟这个队列相关的task有两个set_type_override_by_type/set_type_override_by_name ...
object_by_name、create_object_by_type和create_component_by_name等接口,提供了一种更灵活的方式来创建实例,增加了环境的可定制性。总结来说,工厂机制是UVM的重要基石,它扩展了SystemVerilog原始new函数的功能,提升环境的可配置性和重用性,为构建和定制测试场景提供了强大工具。
2. debug_create_by_type()和debug_create_by_name() 这两个函数对factory的搜索算法类似于create_by_type()和create_by_type(),但它们不创建新对象。相反,它们提供了关于将返回的对象类型的详细信息,和列出了override相关信息。具体传递参数用法,大家可以查询UVM手册。
248行执行uvm_factory中定义的create_object_by_type()如下图所示 这里的find_override_by_type()就是...