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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
12
返回列表 发新帖
楼主: cxd370830

[求助] sequence中问题

[复制链接]
发表于 2022-5-15 09:46:28 | 显示全部楼层
本帖最后由 eaglezhang01 于 2022-5-15 09:55 编辑


eaglezhang01 发表于 2022-5-11 12:11
二楼的回答是有问题的,get到第一个参数类型是uvm_component,这里this指的类型是sequence,类型都不一样 ...


翻看了张强的UVM实战,第6章有讲p_sequencer ,个人认为讲的虽然不透彻但还算清楚,看了你应该会明白,这个问题一定要弄清楚,面试高频问题
发表于 2022-5-15 10:04:32 | 显示全部楼层
本帖最后由 dtyuzhou 于 2022-5-15 10:07 编辑

config db可以简单粗暴的理解为把所有要共享的东西都放到全局为一的config db中了,那么生下来的的就是放入(set) 、取出(get)、检查(exists)。对于set/get 而言,肯定需要知道放入的类型(#type, 参数化),还需要知道set的内容,就是set/get 函数最后的value。剩余的3个都是用来防止命名冲突的。你可以简单的理解这两个参数构成了一个索引描述符,第一个参数是cntxt,这个是component,sequence不是component所以不能用this的。后续两个是字符串,想怎么玩都可以。
至于第一个为什么是component,我的理解是,uvm tree让各个component都能有一个精确描述的位置,configdb中的第一个参数cntxt,拿过来之后就是用来执行get_full_name()的,能获取一个精确描述路径,减少不必要的冲突,而且描述都是从当前层次往下的,方便高层复用。再配合第二个第三个参数,形成了类似这样的一个描述符 cntxt.get_full_name() + inst_name + field_name。当然实现的时候要考虑通配符的使用,会比这个实现要负责不少。

回到问题,seq确实不能用this,但是seq中默认带过来的component也就是m_sequencer比较方便一点,所以不少人喜欢用m_sequencer。如果环境简单话,你用null也是可以的,set的时候也set到null,get的时候第一个也用null, 这样cntxt 就是uvm_root了,不推荐这种cntxt = null 的做法啊,高层复用的时候挺容易冲突的。

再说m_sequencer 和 p_sequencer 有什么区别,回答是这两个玩意是一个东西,m_sequencer 的类型是uvm_sequencer的基类,p_sequencer的类型是真实sequencer的类型(就是个declare定义的),m_sqr 是用父类的句柄指向了子类(p_sqr), 如果sequencer中定义了一些东西,在sequence中想用的话,就不能用用m_sqr了,会有语法错误的。但是用p_sqr就行了,源代码是$caset(p_sqr, m_sqr),所以就是一个东西。v_seq的时候为什么非要定义p_sqr就是这个原因,因为你无法直接使用m_sequencer.xxx_sqr(语法错误)。但是p_seuqncer.xxx_sqr就是可以的。
 楼主| 发表于 2022-5-17 10:16:56 | 显示全部楼层


dtyuzhou 发表于 2022-5-15 10:04
config db可以简单粗暴的理解为把所有要共享的东西都放到全局为一的config db中了,那么生下来的的就是放入 ...


谢谢大佬 万分感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-12-19 17:51 , Processed in 0.014245 second(s), 6 queries , Gzip On, Redis On.

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