UVM中run的理解
你说的是run_phase吗?是从下而上启动的啊。
build_phase是top -down, 其他的除了run_phase是bottom up, run_phase是并行的
楼下那哥们说的和你相反啊
楼上那哥们对run_phase和你持相反观念啊
build_phase是一种自上而下的执行顺序,除了build_phase之外,所有的不耗仿真时间的phase(即function phase)都是自下而上执行的。
UVM把run_phase又分割成了12个小的phase,这12个小的phase各自在执行顺序方面与run_phase完全相同,即自下而上的启动,同时运行。
楼上的说“build_phase是top -down, 其他的除了run_phase是bottom up, run_phase是并行的”,没错啊,build_phase是top-down,其他的phase除了run_phase,都是bottom up,只是,这个run_phase是自下而上启动的,运行是并行的。就说启动有顺序,至于谁先运行完那就看各自的执行时间。run_phase是task,通常是消耗时间的。
希望这个图能帮助你
恩 我明白了很感谢你的细心回答我现在遇到一个实际的问题 就是我定义了3个agent,其中一个agent是复位用的,sequence_reset我设置在reset_phase启动,我的driver_reset设置在run_phase中get_next_item,我的sequence_reset写了3个uvm_do,按理说应该全部执行完3个uvm_do的,我现在不明白为什么仅仅执行了一个,也就是第一个uvm_do,其他二个没有执行,driver_reset一直卡在get_next_item(等待抓取第二个)。
麻烦帮我分析一下,纠结了一晚上了。
很感谢你的图片,很清晰,明白了,谢谢你。
我碰到过类似的问题,你用run_phase和reset_phase,reset_phase 没有raise_objection,被drop了,因为run_phase和12个小的phase是并列的,没有raise,12个小的phase会被顺序的drop掉。如果你在agent中都用run_phase,大家平等,不会有问题。所以你这里要用main_phase,而不是run_phase,或者都用run_phase,或者reset_phase raise。摘抄一段资料:
UVM用户一定要注意:如果想执行一些耗费时间的代码,那么至少也要在此phase下raise一次objection。这个结论只适用于run_time的phase。对于run_phase则不适用。
我其他的agent的driver是在main_phase中进行的,不能把reset_driver也在main_phase上玩吧?这样会有冲突的吧,如果所有agent的driver都用run_phase,也会有冲突的吧?你说的第三种方法,就不知道可不可行了。
我的qq:709596551,晚上回家试试,希望得到你的帮助!
如果所有的agent的driver都设成main_phase或是run_phase,会有冲突的吧?
第三种方法不知道,可不可行,晚上回去试试,我的QQ:709596551,希望得到你的帮助!
学习学习,顶一个,谢了
我是初学者,一直没弄明白main_phase 和run_phase的区别,谁能给解答一下吗,谢谢
UVM初学者,一直也没弄明白run_phase和main_phase的区别,求哪位大神给解答
uvm的资料里说的比较清楚,建议可以看看《UVM1.1应用指南及源代码分析》,网上可以找到
通过sequencer控制不同的sequence在同一个phase(run_phase)按顺序执行,通过同一个driver的interface输入到DUT,不会有冲突
main_phase是run_phase各种小phase中的一个:各种小phase顺序执行,各种小phase合起来与mainphase并行执行。
LOUZHUJIAYOU