task uvm_sequencer::get_next_item(output REQ t);
REQ req_item;
// If a sequence_item has already been requested, then get_next_item()
// should not be called again until item_done() has been called.
if (get_next_item_called == 1)
uvm_report_error(get_full_name(),
“Get_next_item called twice without item_done or get in between”, UVM_NONE);
if (!sequence_item_requested)
m_select_sequence();
// Set flag indicating that the item has been requested to ensure that item_done or get
// is called between requests
sequence_item_requested = 1;
get_next_item_called = 1;
m_req_fifo.peek(t);
endtask
The above task is implemented in the baseclass of uvm_sequencer. they have implemented the get_next_item method using peek method(if you see the above code). peek is a method which gives the copy of the value and the value will be remained in the mailbox. the size of req_fifo is 1. once a packet has been put inside the req_fifo until i get the packet out i cannot put any other packet. if this is the case, how the hand shaking between driver and sequencer is happening for multiple packets. can anyone give me clarity.?