Suggestions for APB Driver

Hi All,

I am trying to write Driver for the following scenario where Valid and Information could be driven between two posedges of clock

Generally we write driver as

forever begin
  seq_item_port.get(req);

  // @(posedge vif.ACLK); // (Q1) Is this Required ?
  
  // Assume that 'req' type has 'delay' random property with it's own constraint
  if( req.get_delay() > 0 ) begin 
      req.get_delay()*1ps;
  end
  
  vif.VALID <= 1'b1;
  vif.INFO  <= req.info; 
  wait( $rose(vif.VALID & vif.READY,@(posedge vif.ACLK) ); 
  // Unblocks when handshake occurs
  vif.VALID <= 1'b0;
  // Collect Response and Data for Reads. Driver would call put_response after that
end

(Q1) Once get unblocks, are there any advantages of waiting for the nearest posedge of clock ?

(Q2) If Ready were asserted before Valid is driven then would we ever observe Valid being asserted or would it be overridden with 2nd NBA ( with value as 0 thereby never seeing it’s assertion ) ?

Regards