在上一篇博客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
所有的进程都是并行的,因此如