virtual function void back_write(input bit[31:0] addr, input bit[31:0] data);
void'(uvm_hdl_deposit(path+addr, data));
endfunction:back_write
virtual function void back_read(input bit[31:0] addr);
bit[31:0] val;
void'(uvm_hdl_read(path+addr, val);
return val;
endfunction:back_read
virtual task send_msg(integral msg);
integral val = 0;
`uvm_info("send_msg", $sformatf("send sync msg: addr='h%0h, msg='h%0h", SYNC_ADDR, msg), UVM_LOW)
back_write(SYNC_ADDR, msg);
endtask:send_msg
virtual task wait_msg(integral msg);
integral val = 0;
do begin
#10us;
val = back_read(SYNC_ADDR);
end while(!(val === msg));
`uvm_info("send_msg", $sformatf("send sync msg: addr='h%0h, msg='h%0h", SYNC_ADDR, msg), UVM_LOW)
endtask:wait_msg