Sending Response via rsp_port.write( rsp )

Driver can send responses via rsp_port ( analysis_port ) through :: rsp_port.write( rsp ) ;

The Sequencer sends the response back to appropriate sequence based on
( Response ) property ’ sequence_id ’

The write() Call essentially pushes the Response inside the Response Queue of the Sequence !!

My question is when should driver call :: rsp_port.write( RSP ) ??

Based on my understanding to send response via driver ::

[a] seq_item_port.item_done() is necessary when there is No Pipelining !!

 item_done()  with  Optional Response  needs  to  be  called  if get_next_item() is Used !!

 [A]  If  driver  uses  get_next_item()  , user has to call item_done() . 
      So  no  point in callng write(RSP ) when  driver  does  get_next_item() .

    Response  CAN  be  sent  directly  via  ::  item_done( RSP ) 

    Hence  write()  CAN'T  be  called  as  an  alternative  to  :: item_done(RSP)  !!

**seq_item_port.put_response( RSP ) / seq_item_port.put( RSP ) is Called when get() is Used in driver i.e there is Pipelining !!

 If  driver  does  get() , instead of  seq_item_port.put_response( RSP ) / seq_item_port.put( RSP )  

 rsp_port.write( RSP )  CAN  be  Used  !!

[b]The ONLY advantage with rsp_port.write() is components can receive the Response via write() by connecting to driver’s rsp_port !!**

**[Q2] Sequence waits for response via :: get_response( rsp ) ;

  Is  there  any  alternative  for  fetching  responses  in  the  sequence ?**