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.
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.