在上一篇博客UVM phase机制(二)中,我们有介绍到run_phase以及12个run_time_phase是如何运转起来的,但是留了一个小问题就是objection,想要run必须raise_objection,要想结束run必须drop_objection。下面我们详细分析一下为什么会这样
在运行到run_node的时候,是这样一个执行结构,
fork
fork
env.run_phase(uvm_phase phase);
join_none
fork
uvm_test_top.run_phase(uvm_phase phase);
join_none
fork
top.run_phase(uvm_phase phase);
join_none
join_none
但是,最终完整的执行结构是
fork
fork
env.run_phase(uvm_phase phase);
join_none
fork
uvm_test_top.run_phase(uvm_phase phase);
join_none
fork
top.run_phase(uvm_phase phase);
join_none
join_none
#0;
fork
begin
fork
process(0);//junp
process(1);//objection
process(2);//timeout
join_any
disable fork
end
join
所有的进程都是并行的,因此如果没有objection的话,那么进程process(1)直接结束,会直接disable fork。直接退出整个执行进程。下面介绍objecti

本文深入探讨了UVM框架中的objection机制,解释了为何在run_phase中需要raise_objection和drop_objection来控制执行流程。通过分析UVM phase结构,展示了raise_objection如何增加objection计数,以及drop_objection如何触发进程结束。同时,文章讨论了多个组件使用objection机制时的协同工作方式,并指出即使在没有在run_phase中raise_objection,main_phase仍然可以并行执行。
最低0.47元/天 解锁文章
1609

被折叠的 条评论
为什么被折叠?



