Set up Link to heading

In run_phase, set_drain_time is called from phase.phase_done which uvm_objection.

task run_phase(uvm_phase phase);
    phase.phase_done.set_drain_time(this, 10);
endtask

The set_drain_time sets drain in m_drain_time which is called m_forked_drain.

   function void set_drain_time (uvm_object obj=null, time drain);
     if (obj==null)
       obj = m_top;
     m_drain_time[obj] = drain;
     m_set_hier_mode(obj);
   endfunction

objection timeout Link to heading

In m_execute_scheduled_forks(), m_forked_drain is called

    objection.m_forked_drain(ctxt.obj, ctxt.source_obj, ctxt.description, ctxt.count, 1);

and m_forked_drain calls uvm_delay

   task m_forked_drain (uvm_object obj,
                        uvm_object source_obj,
                        string description="",
                        int count=1,
                        int in_top_thread=0);

       int diff_count;

       if (m_drain_time.exists(obj))
         `uvm_delay(m_drain_time[obj])