在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: asic_wang

[原创] UVM/OVM中的factory---------个人总结

[复制链接]
发表于 2014-7-29 10:02:28 | 显示全部楼层
些的确实很好,学习了
发表于 2014-7-29 11:39:01 | 显示全部楼层



是这样的。 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更强大,我用的比较多。  不知道大家使用上有啥区分。
发表于 2014-7-30 16:29:33 | 显示全部楼层
感谢楼主分享经验,分享的精神是值得鼓励的。谢谢,受益匪浅。
发表于 2014-7-31 14:01:14 | 显示全部楼层
厉害不错的理解
发表于 2014-8-1 22:14:59 | 显示全部楼层
听君一席话,胜打十年工!
发表于 2014-8-2 06:45:20 | 显示全部楼层
楼主厉害,学习了,
发表于 2014-8-5 09:13:17 | 显示全部楼层
面向对象讲得如此精彩啊!
发表于 2014-8-7 13:57:25 | 显示全部楼层
回复 42# teruyu

mentor 只有一句, The uvm_resource_db API should not be used due to quirks in its behavior.具体怎么quirk没有提及,所以mentor不推荐用。
发表于 2014-8-7 14:17:38 | 显示全部楼层
回复 42# teruyu

基本上了解了,如果在不同层次上调用相同的resource_db,那么可能你在低层次里的set会win, 所以不推荐
发表于 2014-8-18 17:13:07 | 显示全部楼层
感谢楼主,讲得非常好,感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /3 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-19 09:14 , Processed in 0.026764 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表