UVM pipelined driver cookbook

In reply to rag123:

No, In above code “m_bfm.begin_transfer(req)” blocking only for command phase.


task begin_transfer(mbus_seq_item req);
  command_phase(req); // blocking only for command.

  pipeline_lock_get(); // directly come out as pipeline_lock = 0. So, non blocking
 
  current_tr = req; // request assignment non blocking.
  ->do_data_phase; // trigger event for data phase and its non blocking.
endtask: begin_transfer

In begin_transfer once ->do_data_phase event call and task will complete.
However, data_phase will work in background and begin_transfer can able to accept second req item.
And for second request, it can block for next data phase only.
So, we can say that this is one stage pipeline.

Thanks,
Harsh