Welcome ! This website will help YOU (recent graduates/professionals) learn verification languages like SystemVerilog and UVM. Register for free and access more content !

Sequence arbitration is a configuration setting within a sequencer to control the execution of multiple sequences when they are launched in parallel. For example, we could have multiple sequences started on a single sequencer using a fork-join block and we need to have a scheme for the sequencer to order the execution of sequences.

In the code below, how do you know what order the sequencer will follow ?

 
class my_test extends uvm_test;
  ...
  virtual task run_phase (uvm_phase phase);
    ...
    fork
      m_seq1.start (m_sequencer);
      m_seq2.start (m_sequencer);
      m_seq3.start (m_sequencer);
    join
    ...
  endtask
endclass
 

For this purpose, there are 6 different UVM arbitration modes that can be applied to a sequencer.

UVM_SEQ_ARB_FIFO

This is the default arbitration mode where the UVM sequencer starts them in the order specified within the fork-join regardless of their priorities.

UVM_SEQ_ARB_RANDOM

In here the sequencer will randomly start sequences regardless of their priorities.

UVM_SEQ_ARB_STRICT_FIFO

This mode will always grant the sequence with highest priority first. Multiple sequences with the same priority will be arbitrated similar to a FIFO.

UVM_SEQ_ARB_STRICT_RANDOM

This mode will always grant the sequence with highest priority first. Multiple sequences with the same priority will be randomly picked.

UVM_SEQ_ARB_WEIGHTED

There is a higher chance of picking higher priority sequences in this mode.

UVM_SEQ_ARB_USER

If none of the above modes satisfies your requirement, then you can create a user defined arbitration scheme. All you need to do is to create a new sequencer extended from uvm_sequencer and define its user_priority_arbitration function.

Was this article helpful ?

We use cookies to personalize content and ads, to provide social media features and to analyze our traffic. You consent to our cookies if you continue to use our website. To find out more about the cookies we use and how to delete them, see our privacy policy.

  I accept cookies from this site.
Agree
EU Cookie Directive plugin by www.channeldigital.co.uk