Sequencer Classes

The sequencer serves as an arbiter for controlling transaction flow from multiple stimulus generators.  More specifically, the sequencer controls the flow of ovm_sequence_item-based transactions generated by one or more ovm_sequence #(REQ,RSP)-based sequences.

There are two sequencer variants available.

  • ovm_sequencer #(REQ,RSP) - Requests for new sequence items are initiated by the driver.  Upon such requests, the sequencer selects a sequence from a list of available sequences to produce and deliver the next item to execute.  This sequencer is typically connected to a user-extension of ovm_driver #(REQ,RSP).
  • ovm_push_sequencer #(REQ,RSP) - Sequence items (from the currently running sequences) are pushed by the sequencer to the driver, which blocks item flow when it is not ready to accept new transactions.  This sequencer is typically connected to a user-extension of ovm_push_driver #(REQ,RSP).

Sequencer-driver communication follows a pull or push semantic, depending on which sequencer type is used.  However, sequence-sequencer communication is always initiated by the user-defined sequence, i.e. follows a push semantic.

See Sequence Classes for an overview on sequences and sequence items.

Sequence Item Ports

As with all OVM components, the sequencers and drivers described above use TLM Interfaces, Ports, and Exports to communicate transactions.

The ovm_sequencer #(REQ,RSP) and ovm_driver #(REQ,RSP) pair also uses a sequence item pull port to achieve the special execution semantic needed by the sequencer-driver pair.

sequencers and drivers use a seq_item_port specifically supports sequencer-driver communication.  Connections to these ports are made in the same fashion as the TLM ports.

class ovm_sequence_item extends ovm_transaction
The base class for user-defined sequence items and also the base class for the ovm_sequence class.
virtual class ovm_sequence #(
   type REQ =  ovm_sequence_item,
   type RSP =  REQ
) extends ovm_sequence_base
The ovm_sequence class provides the interfaces necessary in order to create streams of sequence items and/or other sequences.
class ovm_sequencer #(
   type REQ =  ovm_sequence_item,
   type RSP =  REQ
) extends ovm_sequencer_param_base #(REQ, RSP)
class ovm_driver #(type REQ = ovm_sequence_item,
type RSP = REQ) extends ovm_component
The base class for drivers that initiate requests for new transactions via a ovm_seq_item_pull_port.
class ovm_push_sequencer #(
   type REQ =  ovm_sequence_item,
   type RSP =  REQ
) extends ovm_sequencer_param_base #(REQ, RSP)
class ovm_push_driver #(type REQ = ovm_sequence_item,
type RSP = REQ) extends ovm_component
Base class for a driver that passively receives transactions, i.e.
Sequences encapsulate user-defined procedures that generate multiple ovm_sequence_item-based transactions.
The OVM TLM library defines several abstract, transaction-level interfaces and the ports and exports that facilitate their use.