|
发表于 2014-7-29 11:39:01
|
显示全部楼层
没仔细研究uvm_config_db,应该不是用factory机制来实现,factory机制的主要工作是创建对象,uvm的conf ...
asic_wang 发表于 2014-7-17 16:25
是这样的。 uvm_config_db & uvm_resource_db 的机制和factory没有关系。以uvm_resource_db为例:
1)首先实现了单实例的uvm_resource_pool;
2) 在uvm_resource_pool中,包括两个联合数组rtab & ttab.
rtab的索引是string(简单理解为name,包括scope), 里面的数据类型为queue( 而这个queue里面的数据类型为uvm_resource_base);
ttab的索引时uvm_resource_base(可以简单理解为type,里面的数据类型同上()。
当你通过uvm_resource_db(Type)::set(), 向uvm_resource_pool加入一个资源时,一般会同时更新两个联合数组。
这里说的是一般,还有很多特殊的set()函数,例如: set_anonymous().
3) 资源的读出。例如: read_by_name(), read_by_type()
这里的一个问题就是: 如果满足name和type有多个的话,哪一个读出?
uvm_resource_base有一个数据: precedence. 默认值1000; 还有queue是有头有尾的。
根据UVM的代码,好像: read_by_name()有多个匹配,返回precedence最高的。(存储的precedence值=默认 - hierarchy的深度)
read_by_type()有多个匹配,返回的是queue里面的第一个。
uvm_config_db继承之uvm_resource_db. 有扩展,但实现思路差不多。(用了静态数组)。
我个人觉得uvm_resource_db更强大,我用的比较多。 不知道大家使用上有啥区分。 |
|