Doing x.stop_sequences() is causing this UVM FATAL Item_done() called with no outstanding requests. Each call to item_done() must be paired with a previous call to get_next_item()

In reply to uvm_va_1:


class base_seq_item extends uvm_seq_item;
  // variable, registrations and all..
endclass
class base_seq extends uvm_sequence#(base_seq_item);
  // pre_body, body, post_body, registration..
endclass
class base_test extends uvm_test;
  // registration and other stuff.
  base_seq m_seq;
  task run_phase (uvm_phase phase);
    // other stuff..
    m_seq = base_seq::type_id::create("m_seq");
    fork
      begin
	m_seq.start(m_sequencer); // assuming provided proper sequencer handle
      end
      begin
	m_seq.wait_for_sequence_state(UVM_FINISHED);
      	m_sequencer.stop_sequences();
      end
    join_any
  endtask
endclass

This is one way to do it. But i’m not encouraging to use the stop_sequences method as with the complex architecture, it will lead to issue in handling multiple threads.

Thanks & Regards,
Tejendra.