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])