Register sequences can be started on null handle

As we have already setup which bus sequencer to use in the environment using map method set_sequencer(), can we start register sequence on null for example reg_seq.start(null)? I want to start built in sequences in a register sequence, so do i need to start parent register sequence on target sequencer which is already set in environment or i have to explicitly specify in start() call ?

In reply to mishra_almailtu:

Any sequence which generates seq_items requires a specific sequencer to run on.
Only a virtual sequence which does not generate any sequence_items can be started on a null sequencer.

In reply to chr_sue:
Hi chr_sue…My top sequence is extended from uvm_reg_sequence. It is creating & starting 3 built in register sequences from its body method. Each of them is calling register APIs, none of them is creating seq_items. So which means they can be started on null handle including parent sequence. Correct me if i am wrong ?

In reply to mishra_almailtu:

If you would not create sseq_items nothing will happen. Please look to the adapter which is dealing with seq_items.

In reply to chr_sue:
When register APIs are called with front door path, register read/write API is converted to bus sequence item by adapter method reg2bus. reg2bus will create bus item and fill in the properties based on register item fields. But directly register sequence is not creating any bus item. So can we start them on null handle ?

In reply to mishra_almailtu:
Look to the definition of uvm_reg_sequence. It is parameterized with uvm_reg_item, which is send to the adapter.

In reply to mishra_almailtu:

Register sequences don’t need an explicit sequencer as they use the sequencer stored in the map. The uvm_reg read() and write() methods have optional map arguments. If you don’t specify a map, the methods use the default map.

I assume that by “register sequences” you mean sequences with calls such as rm.reg.read(…) and rm.reg_write(…). The predefined sequences, such as uvm_reg_hw_reset_seq, use these calls and the maps.

In reply to chrisspear:

Thanks Chris Spear…i have one more doubt. Can i call register APIs for performing read/write from a normal sequence which has started on different sequencer than the sequencer which is set for register access in map ? The aim is to read some status registers before driving traffic on DUT & after driving traffic want to check the status of DUT again. In my DUT, there is single axi interface for register access & another separate PHY interface to drive inputs to DUT. I need to perform frequent read/write operations before & after driving traffic.

Thanks

In reply to mishra_almailtu:

Since the registers have their own sequencer handles, it does not matter where you call these methods. I just called rm.reg.read() from a test’s run_phase(), though I don’t recommend that.

In reply to chrisspear:
Thanks Chris…