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