Connection count of 0 does not meet required minimum of 1

sequencer code :

class my_slave_sequencer extends uvm_sequencer #(my_seq_item);
 ...
 uvm_analysis_export #(my_transaction) m_request_export;
 uvm_tlm_analysis_fifo #(my_transaction) m_request_fifo;
 ...
 function new(string name, uvm_component parent);
 super.new(name, parent);
 m_request_fifo = new("m_request_fifo", this);
 m_request_export = new("m_request_export", this);
 endfunction
 function void connect_phase(...);
 // super.connect_phase(phase);      // without super.connect_phase showning errror
 m_request_export.connect(m_request_fifo.analysis_export);
 endfunction
endclass

I am connecting m_request_export with monitor analysis_port in my agent…

but in sequencer without calling super.connect_phase(phase) simulator showing error like : -

connection count of 0 does not meet required minimum of 1

can anyone tell me significance of super.connect_phase(phase) as per I know only super.build_phase(phase) have functionality within it.

Thanks

In reply to lalithjithan:

It is an interesting approach what you are using:
analysis_fifo and analysis_export in the sequencer.
It would be interesting what you are doing here. The sequncer is a passive TLM component which cannot initiate anything.

In reply to lalithjithan:

You should never extend uvm_sequencer. It should be used as-is, parameterized with your uvm_sequence_item type.

If you need any additional information in your sequence, it should come from a sequence_item response or from your virtual sequence.

In reply to cgales:

what is wrong with extending uvm_sequencer?
Usually I do it and add lots of information messages, debugging functions in it.
Also sometime extended uvm_sequencer is nice place to keep shared info among sequences. Kind of config_db for single agent level.

In reply to haykp:

super.connect() is making the connections between the TLM interfaces ov uvm_driver and uvm_sequencer. This is neccessary for the correct functionality.

In reply to haykp:

There are many reasons to not extend uvm_sequencer:

  • It requires the use of p_sequencer in your sequences, which significantly reduces the portability of your code.
  • There is the chance to break the uvm_sequencer if you modify the run_phase(). People have created their own run_phase() (out of habit for every uvm_component) and spent significant time trying to debug why things don’t work.
  • Anything you put into the sequencer should be in the base sequence. This further enhances the portability of the sequences between environments.