Register model multi-level reg map with address decoding

Hi,

In unit level, I have registers hooked up to a APB interface at certain offsets.
They’re grouped per peripheral in register blocks.
So peripheral_A is at offset 0x1000, peripheral_B at 0x2000 etc.
The addressing scheme had them also grouped per subsystem, so I have also addresses at 0x101000 and 0x102000 etc.
All this worked fine until I had to move up to system level.
At that point, the APB interface is hooked up to a AXI to APB decoder and the address scheme changes completely.
So 0x1000 becomes 0x12345_000, 0x2000 becomes 0x12346_000, but 0x101000 becomes 0x12347_000 and 0x102000 becomes 0x12348_000.
How can I add the submap and respecify the offsets?

Just to make things clearer here is some example code:

uvm_reg_map for peripheral:

my_map.add_reg(reg0, 32'h0, "RW"); my_map.add_reg(reg1, 32'h4, "RW");

uvm_reg_map for apb bus:

apb_map.add_submap(peripheral_A.default_map, 32'h001_000); apb_map.add_submap(peripheral_B.default_map, 32'h002_000); apb_map.add_submap(peripheral_C.default_map, 32'h101_000); apb_map.add_submap(peripheral_D.default_map, 32'h102_000);

The following won’t work as I need to fix the offsets for peripheral_C and peripheral_D.
uvm_reg_map for axi bus:

axi_map.add_submap(peripheral_rb.default_map, 32’h12344_000);

I do not want to separate into separate regmaps, as they all use the same agent/driver/sequencer.

Thanks for your time,

Tsvi