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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 5529|回复: 19

[讨论] 有关objection机制的思考

[复制链接]
发表于 2018-8-16 09:39:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
在uvm的验证平台中,只在sequence或者virtual sequence中raise和drop objection,所有的component都没有raise和drop objection,那么component中的run_phase是怎么启动呢?
 楼主| 发表于 2018-8-16 09:39:51 | 显示全部楼层
各位大神赐教
发表于 2018-8-16 10:11:22 | 显示全部楼层
所有 component 在被 construct 之後, 會依 uvm phase 依序執行
 楼主| 发表于 2018-8-16 10:14:30 | 显示全部楼层
是否是因为sequnce在component(比如在test)中例化,然后在main_phase中启动;然后就可以启动所有component的main_phase。
发表于 2018-8-16 15:19:52 | 显示全部楼层
是phase先执行,当执行到main_phase(这是一个具体的phase对象,不是component中的phase函数),该对象会遍历UVM tree,并行的执行每个component中的main_phase.其它phase是一样的。
对于run-time phase而言,存在objection机制,objection是phase对象中的一个属性,用于实现phase的同步。 算法大概是:
fork : run
遍历UVM tree 中所有的main_phase函数.(以main phase为例)
join_none
#0;
fork
time_out;
all_objection drop;
jump;
join_any
disable run;
all_objection drop就是说该phase对象中的objection的数量为0了。上面代码解释了为什么要求没有任何延迟的时候raise_objection,因为一旦有延时,下面的fork-join_any就会执行,然后all_objection_drop就满足条件,然后disable了run.
 楼主| 发表于 2018-8-16 15:31:15 | 显示全部楼层
回复 3# kuolifeng


    run time的pahse如果没有raise objection是无法执行的吧
发表于 2018-8-16 19:46:50 | 显示全部楼层
回复 6# 静影沉璧

只要还有一个被raise的objection没有被drop,此phase就不会结束,所有的component中的此phase都可以正常运行。
发表于 2018-8-16 19:51:51 | 显示全部楼层
回复 5# houxiangyun


   我很好奇的是sequence里面没有phase的概念,但是通常还是建议在sequence里面raise和drop objection,这个是如何实现的呢?
发表于 2018-8-16 20:06:31 | 显示全部楼层
回复 8# zqq624723237

sequence中可以通过starting_phase来控制。
发表于 2018-8-17 09:12:00 | 显示全部楼层
回复 8# zqq624723237


   你可以回忆一下你seq.start(sqr),是在什么位置调用的。是不是在某一个component的run-time phase函数里面(通常在main_phase里面)?也就是说seq启动实际是某一个component在执行其phase函数的一部分(这和你在component中用实际是一样的,你可以试试在seq.start(sqr)前面加延迟,结果和你在component的raise前面加延迟一样)。为什么推荐在sequence里面使用raise和drop是因为当激励给完了以后通常就可以认为该阶段应该结束了。  如果你用的default sequence方式,那么调用位置是sequencer里面的start_phase_sequence()。这个函数不在uvm_phase图里面,它的调用需要满足两个条件:1.当前uvm_phase处于UVM_PHASE_STARTED状态,2.当前遍历到的component是sequencer.满足这两个条件以后,就会调用start_phase_sequence函数,然后启动sequence。(你可以认为start_phase_sequence是sequencer中的回调函数,在每个phase函数执行之前会先执行这个)所以,default sequence就等效在sequencer中raise和drop,还是在component中完成的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-4-28 05:24 , Processed in 0.036040 second(s), 7 queries , Gzip On, Redis On.

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