objection与task phase
object字面意思是“反对”,通过drop来通知系统关闭验证平台,drop之前一定要先raise。
代码一:
task main_phase(uvm_phase phase);
phase.raise_objection(this);
......
phase.drop_objection(this);
endtask
当一个phase中所有objection都已经撤销后,就会关闭此phase进入下一个phase,当所有phase执行完毕后,就会调用$finish来将整个验证平台关掉。
代码二:
task driver::main_phase(uvm_phase phase);
phase.raise_objection(this);
#100;
phase.drop_objection(this);
endtask
task monitor::main_phase(uvm_phase phase);
while(1) begin
......
end
endtask
如果main_phase中没有raise和drop,即没有任何objection被提起,那么他会直接跳转到post_main_phase,此时假设进入main_phase的时刻为0,那么进入post_main_phase的时刻也是0。如果想要执行一些耗费时间的代码,那么要在此phase下任意一个component中至少提起一次objection。
以上结论只适用于12个run-time的phase,不适用于run_phase。run_phase与动态运行的ph