Uvm_reg_hw_reset_seq seems not to work for hierarchical regmodel that contains uvm_reg_files

uvm_reg_hw_reset_seq does not check all registers of a block if the block contains regfiles and has sub-blocks that also contain regfiles.
I have a register model of following structure:

Block A
 +- Regfile A1
 |   +- Reg A1.1     
 |   +- Reg A1.2
 +- Regfile A2
 |   +- Reg A2.1
 |   +- Reg A2.2
 +- Block SubA
     +- Regfile SubA1
         +- Reg SubA1.1     
         +- Reg SubA1.2

If i run the uvm_reg_hw_reset_seq on “Block A” only the registers “SubA1.1” and “SubA1.2” will be checked.


hw_reset_seq = uvm_reg_hw_reset_seq::type_id::create("hw_reset_seq");
hw_reset_seq.model = blockA;
`uvm_send(hw_reset_seq);

The reason for this behavior lies in the do_block(…) task of the uvm_reg_hw_reset_seq (line 109-112):


maps[d].get_submaps(sub_maps);
if(sub_maps.size() !=0) begin 
  continue;
end

uvm_reg_map of “Block A” contains all “local” registers (“A1.1”, “A1.2”, “A2.1”, “A2.2”) but also has a submap for block “SubA”.
So sub_maps.size() is 1 and the current uvm_reg_map (including all local registers of “Block A”) is skipped.

Is this a bug in the uvm_reg_hw_reset_seq or am i doing something wrong?