Two sequencers in an agent

Can I have two sequencers in an agent, that are connected to a single driver. Is this compliant to the OVM?

Hi RP,

Why you need multiple sources of data to single driver?

Thanks,
Vaibhav

A sequencer provides arbitration for multiple sequences/items sent to a driver. I don’t think it was ever intended to have multiple sequencers connected to a driver.

In CBUS protocol ( part of MHL), there is a possibility of interleaving two different transactions(DDC, MSC). So, before one transaction is completed, another transaction can be started. Both the transactions can be completed successfully. We want to implement two sequencers for generating different transactions and interleave them in the driver. Kindly suggest a method, if implementing two sequencers is not OVM compliant.

Sequencer’s don’t generate transactions they just interleave them. The sequences do the generating and you can run any number of sequences simultaneously on one sequencer.

It sounds like you just need to start both sequences your root sequence can:
fork
ddc_seq.start();
msc_seq.start();
join

Rather than having two sequencers in an agent, we can have two agents with individual driver and sequencer. And in turn two agents will be connected to single agent.

Hi,

At first instance, it looks possible to connect one driver with two sequencers. But when I tried it out, I got an Error

Error: (vsim-3978) env.sv(38): Illegal assignment to class type ovm_port_base #(class sqr_if_base__2) [in work/top_sv_unit::ovm_port_base::ovm_port_base__3] from class type ovm_seq_item_pull_imp #(class addr_packet, class addr_packet, class ovm_sequencer__3) [in work/top_sv_unit::ovm_seq_item_pull_imp::ovm_seq_item_pull_imp__3]

In reply to Pratik Shah:

The connection between a sequencer and a driver is a point to point connection. This means that the standard ovm_driver classes only support connection to one sequencer via its seq_item_port.

In theory you could extend the driver to add an extra seq_item_port and connect a second sequencer to that. However, this does beg the question - why?

If you have two or more types of traffic that go over the same physical interface, then you are probably dealing with something which called layering. This is probably better handled in the stimulus generation - see the following pages:

http://verificationacademy.com/uvm-ovm/Sequences/Layering

http://verificationacademy.com/uvm-ovm/Ovm/Sequences/Layering

The first approach on the UVM page is probably simplest to use, but will work with the OVM.

Actually connection and communication between sequencer and driver in UVM are done using TLM sequence ports, this is not analysis port. So, one to one connection is possible, not one to multiple.