Connect a Upper-Level Sequencer to both a Driver and a Lower-Level Sequencer

Hello,

I have to build a Layered protocol VIP, and I would like to use the Up-Low Level sequencers technique,
as shown in this webinar : https://verificationacademy.com/seminars/uvm-recipe-protocol-layering/video/509?play=1

In addition, I have the following architecture requirements :

  1. up_sequencer, generating an up_item through a up_sequence,
    is connected to low_sequencer, itself splitting the up_item into low_item(s)
    (this is what is shown in the webinar)
  2. up_sequencer ALSO connected to an up_driver, to drive a DUT VIF (inside a classic UVM_AGENT)
    This is the difference with what is shown in the webinar.

My concern is : it is possible to connect a Sequencer to multiple “Subscribers” ?
I am afraid the “get_next_item/item_done” methods to transfer transactions will work
if only one “Subscriber” (Driver, or Lower-Level Sequencer) is connected to the Upper-Level Sequencer ?

Context of the question and VIP requirements :

  • VIP able to drive DUT VIF up Protocol Layer (up_sequencer/up_driver)
  • VIP able to pass up transactions (up_item) to low_sequencer
    in order that the VIP can also drive the DUT VIF low Protocol Layer
  • low_sequencer/sequence used both as a source for low_driver,
    and a reference model to check “up-to-low implementation” RTL outputs vs low_item
    => low_sequencer would be connected to both the low_driver and to a low_scoreboard

Is this the good way of implementing things, or are there better architecture ideas ?

Thanks,
Etienne