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)第三个新...
### Factory Configuration (*)## No instance overrides are registered with this factory## Requested Type Override Type# --- ---# seq_base seq1## All types registered with the factory: 288 total# Type Name# ---# ...# (*) Types with no associated type name will be printed as < un...
所谓的register到factory中,其实就是对两个关联数据进行赋值。 然后后续的create_object_by_type/create_object_by_name都是依据这个关联数组进行查找创建实例的。 find_override_by_type()是实现override的操作 create_object(name)其实就是对应实例化的操作。 m_type_overrides[]这个关联数组至关重要,它存储了overrid...
另外,我们知道注册的实质是创建m_type_name["A"]=uvm_register#(A,"A")::me的键值对,如果通过create__by_name创建实例,则需要查找此关联数组,通过"A"获取其键值,再调用create函数创建实例。如果A扩展自object或component时,本身就是带参数的类,如A#(a1),通过create_*_by_name创建实例需要用到"A",而它无...
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 ...
uvm_config_db传入的参数类型是uvm_object_wrapper, 通过 ”::" 调用静态方法 set() 。 静态类 static也可以声明class, 表示静态类。静态类和静态变量类似,只不过静态类可以封装更多内容。声明静态类的class, 该class的所有实例都可以共享这一个静态类。更多内容UVM设计模式 (三) 静态类、资源管理、uvm_*_pool...
419、479-480行是利用前面产生的uvm_factory的单例调用其中的create_component_by_name()函数产生一个指向uvm_component的uvm_object_wrapper类型的指针并downcast给uvm_test_top,factory机制我们后面会有专门的章节来讲,这里可以简单理解为根据我们传进来的testcase的名字产生了一个实例名为uvm_test_top的uvm_component...
创建环境组件时,一般通过create的工厂方法,最终调用uvm_component的new函数完成树结构的连接。每个组件在树结构中的hierarchy路径由get_full_name函数获取。类似地,uvm_reg也利用了parent和children机制实现层次化结构。在uvm_reg_block中,包含多个uvm_reg;在uvm_reg中,存在多个uvm_field。uvm_reg_block...
object_by_name、create_object_by_type和create_component_by_name等接口,提供了一种更灵活的方式来创建实例,增加了环境的可定制性。总结来说,工厂机制是UVM的重要基石,它扩展了SystemVerilog原始new函数的功能,提升环境的可配置性和重用性,为构建和定制测试场景提供了强大工具。
顺带一提另一个经常看见的函数create()。它的作用也很简单,即根据给定名字(string),在全局的登记表格中查找匹配的句柄,并利用该句柄来创建一个新的实例。 下面是摘自UVM的部分源代码: class uvm_object_registry #(type T=uvm_object, string Tname="<unknown>") ...