Interface signals passed as arguments to tasks and fork join in task

Hi,

I replaced ref arguments in task to inout and used fork join on arguments. But not working(the changes of inout signals are not taken into account).

//++++++++++++++ INTERFACE++++++++++++++++++++++++++++
interface abc_interface;
//in simulation below signals asserts and de-asserts 5 times. This is standard interface given by other IP. So cant change its structure(cant change logic to wire… etc )
logic temp1;
logic temp2;
logic temp3;
endinterface

//+++++++++++++++++++ MONITOR PARENT+++++++++++++++++++++++++++++++++++++++++
class master extends uvm_monitor;

//task check_signals(ref input a, ref input b);// as ref is not used in fork join i replaced this with below line
task check_signals(inout a, inout b);
forever begin
fork
begin
@(posedge a);
end
begin
@(posedge b);
end
join_any
if(a&&b != 1)
uvm_error(get_full_name , $psprintf("both signals not asserted at same time")) else uvm_info(get_full_name, $psprintf(“both signals asserted at same time”), UVM_LOW)//I was supposed to get 5 times this message: but not getting atleast once.
end
endtask

endclass

//+++++++++++++++++ MONITOR CHILD++++++++++++++++
class student extends master;

virtual abc_interface abc_intf_h;

task run_phase(uvm_phase phase)
fork
check_signals(abc_intf_h.temp1 , abc_intf_h.temp2);
check_signals (abc_intf_h.temp2 , abc_intf_h.temp3);
join

endtask

endclass

In reply to muralikrishna229:

This only can work with a ref task argument. See const ref | Verification Academy

In reply to dave_59:

Hi Dave thank you.

If i use ref task argument, i can not perform fork join_none/join_any operations(class master). Any other solution to handle this.

But i used fork join on ref arguments and some extra logic to convert join to join_any.Now its working.

Thanks,
-Murali