In reply to noel_sumners:
The point is, code might be ‘never ending’ because you don’t have any conditions to disable the forever loop.
Also,
forever begin : resetloop
wait(drv_rst_state==RESET_INACTIVE);
fork : resetloop_fork
// Process 1
fork
join_none
// Process 2
fork
join_none
// Process 3
begin
wait(drv_rst_state==amd_reset_uvc_pkg::RESET_ACTIVE);
end
// You will encounter join_any statement as
// Process 1 and 2 finishes immediately.
join_any
disable resetloop_fork;
end // block: resetloop