Monday, December 16, 2019

How to coordinate sequence and test objection

#1 raise& drop should be in pre+post body because those functions are ONLY called when the sequence is "started" (aka a root sequence). a subsequence doesnt call pre/post body and therefore doesnt work change the objection count. so as a rule of thumb you would have as much objections as you would have active root sequences. (reactive) sequences such as for slaves and background functionality do not need objections.
#2 if your sequences are non-blocking you got some options:
- first you could wait for the responses to appear after the final sequences have been send
- second you could use a drain time to let your simulation complete after all objections have been dropped
- you could also have the scoreboard, the monitor or driver raising objections to prevent your simulation to stop too early
#3 driver+monitor could have objections too, i see no issue in that some "component" says "please do not stop now"
#4 this is more work to add raise+drop to every sequence body it is simpler to do something like:
virtual class uvm_active_sequence #(type A,type B=A) extends uvm_sequence#(A,;
    // ctor
    function pre_body(); uvm_test_done.raise_objection(...); endfunction
    functionpost_body(); uvm_test_done.drop_objection(); endfunction
endclass