How does uvm_component go to Clean-up phases from Run_phases?

In reply to cgales:

Thank you for reply.
I am still confused and I have two questions.

  1. If no ones raise phase.raise_objection explicitly, test may finish right after starting run_phase?
  2. From what I understood, All the same phase state should be completed to go to the next phase state. In run_phase state, some components which could not complete run_phase because of no raise_objection can go to the next phase state?
    For example, there are two objects which are uvm_components.
    In run_phase, test should not be finished until comp1 do drop_objection. After comp1 drop_objection, can comp1 go to check_phase, even if comp2 could not finish comp2 run_phase?

If so, it’s conflicted with my thought that all the uvm components always do the same phase at the same time and should complete the previous phase to go to the next phase. It’s conflicted with my thought because only uvm_component with raise/drop_objection seem to be able to finish. And only those which have finished can go to the next phase such as check_phase, and report_phase.
Please correct me.

//////////////////////////////////////////////////

class comp1
...
task run_phase
phase.raise_objection
...
phase.drop_objection

endtask: run_phase

task check_phase
...
endtask: check_phase
//////////////////////////////////////////////////
class comp2 
task run_phase
// no phase.raise_objection / drop_objection

endtask: run_phase

task check_phase
...
endtask: check_phase
//////////////////////////////////////////////////

Thank you,
Seunghyun Lee