|
楼主 |
发表于 2014-7-13 14:02:19
|
显示全部楼层
3 UVM/OVM中的factory机制
上诉的描述已经基本上把一些本质的东西都提及了,太过细节的东西没有必要在分析下去了;那我们就结合UVM中的factory来看看UVM的factory是如何实现的。
(1)任何user defined 的class都是从uvm_object来
(2)定义公共的wrapper类,uvm_obect_wrapper,此类的存在是为了提供一个基类,以便作为factory
override map的lookup key和 lookup value;根本原因是因为每个参数化类都是一个不同的类型,
如果没有一个公共基类,则无法用一个统一类型的句柄来作为override map的lookup key。
(3)在(2)的基础上定了模版类 uvm_component_registry和uvm_object_registry,模版参数就是
user defined的类。
(4)每一个uvm_component_registry#(T)或uvm_object_registry#(T)都会有一个singleton用来作为user definded类型T的轻量级代理和factory的注册。
(5)factory有多种override map,用来进行不同override方式的支持,如override by name、override by type、override inst、override type等。
(6)当我们使用uvm_object_utils/uvm_component_utils的时候,这些宏的重要作用之一就是利用上述机制像uvm_factory中注册,定义变量type_id,定义函数get_type()等。
看到这里,我最想说的是上述这些就是我对uvm class reference文档里下面这段话的理解,原文是:
”the uvm_object_wrapper provides an abstract interface for creating object and component proxies. Instances of these lightweight proxies, representing every uvm_object-based and uvm_component-based object available in the test environment, are requested with the uvm_factory. When the factory is called upon to create and object or component, it finds and delegates the request to the appropriate proxy.“ |
|