While jumping from post_shutdown to reset phase, the threads in the run phase (of monitor) are getting killed.
Is there a way to not kill the thread (task_A in the below example)?
Log :
UVM_INFO | 2054500 | my_mon | in loop waiting for posedge clk ......
UVM_INFO | 2055000 | my_mon | in post_reset_phase
UVM_INFO | 2055500 | my_mon | in loop waiting for posedge clk.....
UVM_INFO | 183094500 | my_mon | in post_shutdown_phase
UVM_INFO | 185149000 | my_mon | in post_reset_phase
(no displays from monitor after this)
// Monitor code =====>
virtual task run_phase(uvm_phase phase);
super.run_phase(phase)
fork
task_A();
join_none
endtask : run_phase
virtual task task_A();
while(1) begin
`LOGN("my_mon", "in loop waiting for posedge clk");
@(posedge clk_if.clk);
// some processing ...
end
endtask
virtual task post_reset_phase(uvm_phase phase);
super.post_reset_phase(phase);
`LOGN("my_mon", "in post_reset_phase");
endtask
virtual task post_shutdown_phase(uvm_phase phase);
super.post_shutdown_phase(phase);
`LOGN("my_mon", "in post_shutdown_phase");
endtask
// Test ===>
function void my_test::phase_ready_to_end(uvm_phase phase);
if(phase.is(uvm_post_shutdown_phase::get())) begin
get_domain().jump(uvm_reset_phase::get());
end
endfunction