How driver gets data or sequence_data or sequence_item from sequencer automatically??
Example scenario: only one time need to call get_next_item()from driver to sequencer, from second time on wards need to get data or sequence_data or sequence_item without calling get_next_item() from driver
Even though Get_next_item() inside the forever loop, we are calling still the get_next_item.
if i am not understand, please explain with one example or with code for understanding purpose??
In reply to Subbi Reddy:
See this example.
``` verilog
// sample sequence code
virtual task body();
trans tx;
tx = trans::type_id::create("tx"); // create object for new transaction
start_item(tx); // wait for a driver to request transaction using get_next_item() call
// late randomization
// postponed until tx is requested allows to adjust values based on current test conditions
if(!tx.randomize()) `uvm_error("Randomization failed!")
finish_item(tx); // send transaction to driver
endtask : body
// sample driver code
task run_phase(uvm_phase phase);
trans tx; // NOTE: we are not creating an object, we are simply moving the handle!
forever begin
seq_item_port.get_next_item(tx); // request next sequence item
drive_trans(tx); // drive transaction to the interface
seq_item_port.item_done(); // processed current request
end
endtask : run_phase
Interview Question: how to get transactions from sequencer to driver automatically from second time on-wards without calling get_next_item() in SV or UVM (first time have permission to call get_next_item ()) ??