How to support multiple register maps in a SOC system for a block with only one register map?

In reply to Tudor Timi:

Thank you Tudor for your kindly response. And I summarize your steps to resolve the multiple maps issues and also retain the independence of block level as below:

  1. In block level, map($reg_map, …) function for each block $reg_block class should be defined, which can map all the registers inside that $reg_block to the $reg_map, and take $reg_map as one of the input arguments.

  2. In system level, multiple block reg_maps need to be defined and created for each block, and block $reg_block references should be used as the parent of the block reg_maps, and call $reg_block.map($block_reg_map, …) of each $reg_block to map all internal registers of the $reg_block to that $block_reg_map.

  3. Also in system level, multiple system reg_maps need to be defined and created for system level, and each $block_reg_map need to be added to its corresponding system $system_reg_map using add_submap() function calls.

You workaround seems to work for me, but I still doubt why UVM can’t provide an easier way to support multiple reg_maps, which seems common in a SOC system.
For example, if it can support adding one reg_map to multiple parent reg_maps, things can become much easier.