raise_objection drop_objection UVM 求助
fork
phase.raise_objection(this);
begin
......
end
begin
........
end
phase.drop_objection(this)
join
在这段代码里用的是fork join,那不是应该raise和drop还有那些begin end块并行吗,这段代码为什么可以等begin end块都执行完成才drop?
按照我的理解,raise和drop不应该放在fork里
?、、、
raise objection和drop objection应该是串行的吧,写在fork join里有点问题
虽然你用了fork join 但是这个两个objection函数真正执行的时候是有先后的,虽然同时启动了 但是drop objection没执行,run_phase里面其他进程运行完了 才运行这个drop objection
为什么呢?是不是放在fork外面会更好
是的,放在外面看着会更好。没有raise_objection begin end不会被执行,等所以的begin end都结束了 才会调用drop_objection 这是phase的运行机制啊
1.没有raise,begin块不会执行吗?2.既然是fork join,那raise和drop同时启动,drop在没有raise之前是不能drop,但是等到raise之后,不是drop就执行完了吗,drop也要等到begin块执行完才可以运行吗?
你的意思是没有如果在mainphase,都没有raise,就不会执行了吧,直接到下一个phase
raise 和 drop只是phase下的phase_down函数的两个子函数,内部是有联系的,不只是两个单纯的独立的两个函数
一般来说 raise objection drop objection和uvm_do是绑定的,在sequence里。
你这边drop肯定是第一时间就执行过的,至于begin end会执行完应该是存在其他的raise drop~具体你可以通过UVM自带的phase调试查看执行情况
谢谢你的回答!
你说的phse调试指的是什么,初学这个,不是很懂