UVM_SEQ_ARB_WEIGHTED Arbitration: How Does It Work and When Should It Be Used?

I’m trying to understand the UVM_SEQ_ARB_WEIGHTED arbitration mode in UVM.

  • What exactly does UVM_SEQ_ARB_WEIGHTED do?

  • How does the sequencer decide which sequence gets the grant when this mode is selected?

  • How are sequence priorities used in the weighted arbitration algorithm?

  • How is it different from UVM_SEQ_ARB_FIFO and UVM_SEQ_ARB_STRICT_FIFO?

  • In what practical verification scenarios would you choose UVM_SEQ_ARB_WEIGHTED over the other arbitration modes?

I’m looking for a conceptual explanation of the arbitration flow rather than a source-code walkthrough.

In UVM_SEQ_ARB_WEIGHTED mode, the sequence “priorities” are not really priorities anymore. They are treated as weights in a weighted random selection among the pending requests. A sequence with a larger value is more likely to be selected, but it is not guaranteed to win over a sequence with a smaller value. In that mode, insertion order also does not matter, no FIFO. You could use this mode to statistically model realistic protocol traffic.

See UVM Tutorial for Candy Lovers – 26. Sequence Arbitration – ClueLogic