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