In reply to pinegreen:
In your module level ISR, you’ll typically have a field for the block level register model:
class module_isr_sequece extends uvm_reg_sequence;
module_reg_block regmodel;
// ...
endclass
When doing register access, you dig into it to get the registers:
class module_isr_sequece extends uvm_reg_sequence;
virtual task body();
regmodel.some_reg.write(...);
regmodel.some_other_reg.write(...);
endtask
endclass
In your system level ISR, you’ll have a different register model:
class system_isr_sequece extends uvm_reg_sequence;
system_reg_block regmodel;
// ...
endclass
The system regmodel contains one (or more) instance(s) of the module register model. When figuring out that you need to start that certain ISR, you just need to provide it the appropriate module regmodel:
class system_isr_sequece extends uvm_reg_sequence;
virtual task body();
module_isr_sequence module_isr;
// ... figure out what ISR to start and create it
// assume it's 'module_isr'
module_isr.regmodel = regmodel.module_block;
`uvm_send(module_isr, ...)
endtask
endclass
You shouldn’t have any problems with paths being different.