Suggestion for TB Changes

I am working on USB project where currently we have 1 Host and 1 Device .

Here’s how the current TB Architecture is ::

Both Host and Device has 3 Layers : L1 ( Top-most Layer ) , L2 ( Middle Layer ) and L3 ( Phy Layer ) .

So currently we run a test via “default_sequence” through uvm_config_db#(uvm_object_wrapper) .

The test starts a Host sequence and Device Sequence in main_phase() .

There are 2 drivers in the env :: Host_driver and device_driver which drive transactions to L1 at host and device end respectively .

The host sequence body() starts ( unblocks ) when the an attachment is detected at Host .

Now we need to add support of N-Host Phy so that we can connect N-Devices . Ideally the host can independently communicate with N-devices at a time

(1) Is there a need for more than 1 Driver-Sequence pair at both end ? ( Currently there is only 1 pair at each end )

(2) For N-Phy if I go ahead with Single Driver-Sequencer at each end ,
I have thought of driving the transaction on the appropriate port interface ( via adding a property to user_sequence_item )
to which a device has been attached .
The property ( port_number ) would tell the host_driver which Interface ( Out of N-L1’s ) to drive it to

(3) How can I run N- default_sequences via test ?

All N-Phy would be same host_sequence and device_sequence . So depending on which port the device attaches to , 
the appropriate host_sequence body() task would unblock ( on device attach being detected )  

At present I start default_sequence via ::


    // In connect_phase of uvm_test_top
       uvm_config_db#(uvm_object_wrapper)::set(null,"*seqr_host*.main_phase","default_sequence",host_sequence::type_id::get() ) ;
 
       uvm_config_db#(uvm_object_wrapper)::set(null,"*seqr_device*.main_phase","default_sequence",device_sequence::type_id::get() ) ;
    
Simply writing  :: 

    // In connect_phase of uvm_test_top
       repeat(N)
      uvm_config_db#(uvm_object_wrapper)::set(null,"*seqr_host*.main_phase","default_sequence",host_sequence::type_id::get() ) ;
       repeat(N)    
       uvm_config_db#(uvm_object_wrapper)::set(null,"*seqr_device*.main_phase","default_sequence",device_sequence::type_id::get() ) ;
    
 This doesn't work , any suggestions ? Is it possible via default_sequence ?

In reply to TC_2017:

The “default_sequence” is a legacy methodology that shouldn’t be used in new testbenches. One limitation, as you discovered, is that you can only specify one default_sequence per sequencer.

It is recommended that you start() the sequences in your test and not use any default_sequence.