diff --git a/flist/nanosoc_busmatrix_ip.flist b/flist/nanosoc_busmatrix_ip.flist
index a328ec80bc1c5f12a437276ad11cdfa634dad363..945880c99c5edcfa398ba7f89cacafc12e525550 100644
--- a/flist/nanosoc_busmatrix_ip.flist
+++ b/flist/nanosoc_busmatrix_ip.flist
@@ -17,6 +17,7 @@
 
 // =============    NanoSoC BusMatrix IP search path    =============
 $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_BOOTROM_0.v
+$(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXTROM_0.v
 $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_DMEM_0.v
 $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXPRAM_H.v
 $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXPRAM_L.v
@@ -33,10 +34,11 @@ $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/
 $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_0.v
 $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_1.v
 $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_BOOTROM_0.v
+$(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXTROM_0.v
 $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_DMEM_0.v
 $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXPRAM_H.v
 $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXPRAM_L.v
 $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXP.v
 $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_IMEM_0.v
 $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_SYSIO.v
-$(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_SYSTABLE.v
\ No newline at end of file
+$(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_SYSTABLE.v
diff --git a/nanosoc/nanosoc_busmatrix/ipxact/nanosoc_busmatrix/nanosoc_busmatrix.xml b/nanosoc/nanosoc_busmatrix/ipxact/nanosoc_busmatrix/nanosoc_busmatrix.xml
index 64f94570763c7b9e260d9fd39fa352d35fdf70e0..8855828fce4e551d9a5206a8a329d29a78804397 100644
--- a/nanosoc/nanosoc_busmatrix/ipxact/nanosoc_busmatrix/nanosoc_busmatrix.xml
+++ b/nanosoc/nanosoc_busmatrix/ipxact/nanosoc_busmatrix/nanosoc_busmatrix.xml
@@ -45,6 +45,7 @@
          <spirit:slave>
             <spirit:memoryMapRef spirit:memoryMapRef="AHBLiteTarget_Slave__DEBUG_MM"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__BOOTROM_0" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__EXTROM_0" spirit:opaque="true"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__IMEM_0" spirit:opaque="true"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__DMEM_0" spirit:opaque="true"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__SYSIO" spirit:opaque="true"/>
@@ -197,6 +198,7 @@
          <spirit:slave>
             <spirit:memoryMapRef spirit:memoryMapRef="AHBLiteTarget_Slave__DMAC_0_MM"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__BOOTROM_0" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__EXTROM_0" spirit:opaque="true"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__IMEM_0" spirit:opaque="true"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__DMEM_0" spirit:opaque="true"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__SYSIO" spirit:opaque="true"/>
@@ -348,6 +350,7 @@
          <spirit:slave>
             <spirit:memoryMapRef spirit:memoryMapRef="AHBLiteTarget_Slave__DMAC_1_MM"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__BOOTROM_0" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__EXTROM_0" spirit:opaque="true"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__IMEM_0" spirit:opaque="true"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__DMEM_0" spirit:opaque="true"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__SYSIO" spirit:opaque="true"/>
@@ -499,6 +502,7 @@
          <spirit:slave>
             <spirit:memoryMapRef spirit:memoryMapRef="AHBLiteTarget_Slave__CPU_0_MM"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__BOOTROM_0" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__EXTROM_0" spirit:opaque="true"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__IMEM_0" spirit:opaque="true"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__DMEM_0" spirit:opaque="true"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__SYSIO" spirit:opaque="true"/>
@@ -789,6 +793,150 @@
          </spirit:portMaps>
       </spirit:busInterface>
 
+      <spirit:busInterface>
+         <spirit:name>AHBLiteTarget_Master__EXTROM_0</spirit:name>
+         <spirit:description>Master port _EXTROM_0</spirit:description>
+         <spirit:busType spirit:library="AMBA3" spirit:name="AHBLiteTarget" spirit:vendor="amba.com" spirit:version="r2p0_0"/>
+         <spirit:abstractionType spirit:library="AMBA3" spirit:name="AHBLiteTarget_rtl" spirit:vendor="amba.com" spirit:version="r2p0_0"/>
+         <spirit:master>
+            <spirit:addressSpaceRef spirit:addressSpaceRef="AHBLiteTarget_Master__EXTROM_0_AS"/>
+         </spirit:master>
+
+         <spirit:portMaps>
+            <!--  Clock/reset -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HCLK</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HCLK</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRESETn</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRESETn</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <!--  Outputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HSELx</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HSEL_EXTROM_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HADDR</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HADDR_EXTROM_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HTRANS</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HTRANS_EXTROM_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWRITE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWRITE_EXTROM_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HSIZE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HSIZE_EXTROM_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HBURST</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HBURST_EXTROM_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HPROT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HPROT_EXTROM_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!-- HMASTER_EXTROM_0 unmapped -->
+
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWDATA_EXTROM_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HMASTLOCK</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HMASTLOCK_EXTROM_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADY</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYMUX_EXTROM_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!--  Inputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRDATA_EXTROM_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADYOUT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYOUT_EXTROM_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRESP</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRESP_EXTROM_0</spirit:name>
+                 <spirit:vector>
+                    <spirit:left>0</spirit:left>
+                    <spirit:right>0</spirit:right>
+                 </spirit:vector>
+               </spirit:physicalPort>
+            </spirit:portMap>
+         </spirit:portMaps>
+      </spirit:busInterface>
+
       <spirit:busInterface>
          <spirit:name>AHBLiteTarget_Master__IMEM_0</spirit:name>
          <spirit:description>Master port _IMEM_0</spirit:description>
@@ -1863,10 +2011,19 @@
           </spirit:remapPorts>
       </spirit:remapState>
       <spirit:remapState>
-          <spirit:name>remap_n0</spirit:name>
-          <spirit:description>Remap state remap_n0</spirit:description>
+          <spirit:name>remap_n0_1</spirit:name>
+          <spirit:description>Remap state remap_n0_1</spirit:description>
           <spirit:remapPorts>
              <spirit:remapPort spirit:portNameRef="REMAP" spirit:portIndex="0">0</spirit:remapPort>
+             <spirit:remapPort spirit:portNameRef="REMAP" spirit:portIndex="1">1</spirit:remapPort>
+          </spirit:remapPorts>
+      </spirit:remapState>
+      <spirit:remapState>
+          <spirit:name>remap_n0_n1</spirit:name>
+          <spirit:description>Remap state remap_n0_n1</spirit:description>
+          <spirit:remapPorts>
+             <spirit:remapPort spirit:portNameRef="REMAP" spirit:portIndex="0">0</spirit:remapPort>
+             <spirit:remapPort spirit:portNameRef="REMAP" spirit:portIndex="1">0</spirit:remapPort>
           </spirit:remapPorts>
       </spirit:remapState>
 
@@ -1886,10 +2043,30 @@
                 <spirit:range>0x010000000</spirit:range>
              </spirit:segment>
              <spirit:segment>
-                <spirit:name>_BOOTROM_0_0x10000000_0x1fffffff</spirit:name>
+                <spirit:name>_BOOTROM_0_0x10000000_0x17ffffff</spirit:name>
                 <spirit:addressOffset>0x10000000</spirit:addressOffset>
+                <spirit:range>0x008000000</spirit:range>
+             </spirit:segment>
+          </spirit:segments>
+          <spirit:addressUnitBits>8</spirit:addressUnitBits>
+     </spirit:addressSpace>
+
+     <spirit:addressSpace>
+          <spirit:name>AHBLiteTarget_Master__EXTROM_0_AS</spirit:name>
+          <spirit:description>_EXTROM_0 address space</spirit:description>
+          <spirit:range>4G</spirit:range>
+          <spirit:width>32</spirit:width>
+          <spirit:segments>
+             <spirit:segment>
+                <spirit:name>_EXTROM_0_0x00000000_0x0fffffff</spirit:name>
+                <spirit:addressOffset>0x00000000</spirit:addressOffset>
                 <spirit:range>0x010000000</spirit:range>
              </spirit:segment>
+             <spirit:segment>
+                <spirit:name>_EXTROM_0_0x18000000_0x1fffffff</spirit:name>
+                <spirit:addressOffset>0x18000000</spirit:addressOffset>
+                <spirit:range>0x008000000</spirit:range>
+             </spirit:segment>
           </spirit:segments>
           <spirit:addressUnitBits>8</spirit:addressUnitBits>
      </spirit:addressSpace>
@@ -2018,12 +2195,19 @@
          <spirit:description>_DEBUG memory map</spirit:description>
 
          <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__BOOTROM_0"
-                             spirit:segmentRef="_BOOTROM_0_0x10000000_0x1fffffff">
-            <!-- Address_region 0x10000000-0x1fffffff -->
+                             spirit:segmentRef="_BOOTROM_0_0x10000000_0x17ffffff">
+            <!-- Address_region 0x10000000-0x17ffffff -->
             <spirit:name>AHBLiteTarget_Master__BOOTROM_0_0x10000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x10000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__EXTROM_0"
+                             spirit:segmentRef="_EXTROM_0_0x18000000_0x1fffffff">
+            <!-- Address_region 0x18000000-0x1fffffff -->
+            <spirit:name>AHBLiteTarget_Master__EXTROM_0_0x18000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x18000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
          <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__IMEM_0"
                              spirit:segmentRef="_IMEM_0_0x20000000_0x2fffffff">
             <!-- Address_region 0x20000000-0x2fffffff -->
@@ -2091,13 +2275,24 @@
             </spirit:subspaceMap>
          </spirit:memoryRemap>
 
-         <spirit:memoryRemap spirit:state="remap_n0">
-            <spirit:name>AHBLiteTarget_Slave__DEBUG_remap_n0_remap_MM</spirit:name>
-            <spirit:description>_DEBUG remap_n0 remap</spirit:description>
+         <spirit:memoryRemap spirit:state="remap_n0_1">
+            <spirit:name>AHBLiteTarget_Slave__DEBUG_remap_n0_1_remap_MM</spirit:name>
+            <spirit:description>_DEBUG remap_n0_1 remap</spirit:description>
+            <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__EXTROM_0"
+                                spirit:segmentRef="_EXTROM_0_0x00000000_0x0fffffff">
+               <!-- Remapped region, active when REMAP bitcombination is n0_1 address_region 0x00000000-0x0fffffff -->
+               <spirit:name>AHBLiteTarget_Master__EXTROM_0_0x00000000_0_state_remap_n0_1_SM</spirit:name>
+               <spirit:baseAddress>0x00000000</spirit:baseAddress>
+            </spirit:subspaceMap>
+         </spirit:memoryRemap>
+
+         <spirit:memoryRemap spirit:state="remap_n0_n1">
+            <spirit:name>AHBLiteTarget_Slave__DEBUG_remap_n0_n1_remap_MM</spirit:name>
+            <spirit:description>_DEBUG remap_n0_n1 remap</spirit:description>
             <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__BOOTROM_0"
                                 spirit:segmentRef="_BOOTROM_0_0x00000000_0x0fffffff">
-               <!-- Removable region, active only when REMAP bitcombination is n0 address_region 0x00000000-0x0fffffff -->
-               <spirit:name>AHBLiteTarget_Master__BOOTROM_0_0x00000000_0_state_remap_n0_SM</spirit:name>
+               <!-- Removable region, active only when REMAP bitcombination is n0_n1 address_region 0x00000000-0x0fffffff -->
+               <spirit:name>AHBLiteTarget_Master__BOOTROM_0_0x00000000_0_state_remap_n0_n1_SM</spirit:name>
                <spirit:baseAddress>0x00000000</spirit:baseAddress>
             </spirit:subspaceMap>
          </spirit:memoryRemap>
@@ -2116,12 +2311,19 @@
          </spirit:subspaceMap>
 
          <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__BOOTROM_0"
-                             spirit:segmentRef="_BOOTROM_0_0x10000000_0x1fffffff">
-            <!-- Address_region 0x10000000-0x1fffffff -->
+                             spirit:segmentRef="_BOOTROM_0_0x10000000_0x17ffffff">
+            <!-- Address_region 0x10000000-0x17ffffff -->
             <spirit:name>AHBLiteTarget_Master__BOOTROM_0_0x10000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x10000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__EXTROM_0"
+                             spirit:segmentRef="_EXTROM_0_0x18000000_0x1fffffff">
+            <!-- Address_region 0x18000000-0x1fffffff -->
+            <spirit:name>AHBLiteTarget_Master__EXTROM_0_0x18000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x18000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
          <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__IMEM_0"
                              spirit:segmentRef="_IMEM_0_0x20000000_0x2fffffff">
             <!-- Address_region 0x20000000-0x2fffffff -->
@@ -2185,12 +2387,19 @@
          </spirit:subspaceMap>
 
          <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__BOOTROM_0"
-                             spirit:segmentRef="_BOOTROM_0_0x10000000_0x1fffffff">
-            <!-- Address_region 0x10000000-0x1fffffff -->
+                             spirit:segmentRef="_BOOTROM_0_0x10000000_0x17ffffff">
+            <!-- Address_region 0x10000000-0x17ffffff -->
             <spirit:name>AHBLiteTarget_Master__BOOTROM_0_0x10000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x10000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__EXTROM_0"
+                             spirit:segmentRef="_EXTROM_0_0x18000000_0x1fffffff">
+            <!-- Address_region 0x18000000-0x1fffffff -->
+            <spirit:name>AHBLiteTarget_Master__EXTROM_0_0x18000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x18000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
          <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__IMEM_0"
                              spirit:segmentRef="_IMEM_0_0x20000000_0x2fffffff">
             <!-- Address_region 0x20000000-0x2fffffff -->
@@ -2247,12 +2456,19 @@
          <spirit:description>_CPU_0 memory map</spirit:description>
 
          <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__BOOTROM_0"
-                             spirit:segmentRef="_BOOTROM_0_0x10000000_0x1fffffff">
-            <!-- Address_region 0x10000000-0x1fffffff -->
+                             spirit:segmentRef="_BOOTROM_0_0x10000000_0x17ffffff">
+            <!-- Address_region 0x10000000-0x17ffffff -->
             <spirit:name>AHBLiteTarget_Master__BOOTROM_0_0x10000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x10000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__EXTROM_0"
+                             spirit:segmentRef="_EXTROM_0_0x18000000_0x1fffffff">
+            <!-- Address_region 0x18000000-0x1fffffff -->
+            <spirit:name>AHBLiteTarget_Master__EXTROM_0_0x18000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x18000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
          <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__IMEM_0"
                              spirit:segmentRef="_IMEM_0_0x20000000_0x2fffffff">
             <!-- Address_region 0x20000000-0x2fffffff -->
@@ -2320,13 +2536,24 @@
             </spirit:subspaceMap>
          </spirit:memoryRemap>
 
-         <spirit:memoryRemap spirit:state="remap_n0">
-            <spirit:name>AHBLiteTarget_Slave__CPU_0_remap_n0_remap_MM</spirit:name>
-            <spirit:description>_CPU_0 remap_n0 remap</spirit:description>
+         <spirit:memoryRemap spirit:state="remap_n0_1">
+            <spirit:name>AHBLiteTarget_Slave__CPU_0_remap_n0_1_remap_MM</spirit:name>
+            <spirit:description>_CPU_0 remap_n0_1 remap</spirit:description>
+            <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__EXTROM_0"
+                                spirit:segmentRef="_EXTROM_0_0x00000000_0x0fffffff">
+               <!-- Remapped region, active when REMAP bitcombination is n0_1 address_region 0x00000000-0x0fffffff -->
+               <spirit:name>AHBLiteTarget_Master__EXTROM_0_0x00000000_0_state_remap_n0_1_SM</spirit:name>
+               <spirit:baseAddress>0x00000000</spirit:baseAddress>
+            </spirit:subspaceMap>
+         </spirit:memoryRemap>
+
+         <spirit:memoryRemap spirit:state="remap_n0_n1">
+            <spirit:name>AHBLiteTarget_Slave__CPU_0_remap_n0_n1_remap_MM</spirit:name>
+            <spirit:description>_CPU_0 remap_n0_n1 remap</spirit:description>
             <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__BOOTROM_0"
                                 spirit:segmentRef="_BOOTROM_0_0x00000000_0x0fffffff">
-               <!-- Removable region, active only when REMAP bitcombination is n0 address_region 0x00000000-0x0fffffff -->
-               <spirit:name>AHBLiteTarget_Master__BOOTROM_0_0x00000000_0_state_remap_n0_SM</spirit:name>
+               <!-- Removable region, active only when REMAP bitcombination is n0_n1 address_region 0x00000000-0x0fffffff -->
+               <spirit:name>AHBLiteTarget_Master__BOOTROM_0_0x00000000_0_state_remap_n0_n1_SM</spirit:name>
                <spirit:baseAddress>0x00000000</spirit:baseAddress>
             </spirit:subspaceMap>
          </spirit:memoryRemap>
@@ -2818,6 +3045,32 @@
                </spirit:vector>
             </spirit:wire>
          </spirit:port>
+         <spirit:port>
+            <spirit:name>HRDATA_EXTROM_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+               <spirit:vector>
+                  <spirit:left>31</spirit:left>
+                  <spirit:right>0</spirit:right>
+               </spirit:vector>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HREADYOUT_EXTROM_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRESP_EXTROM_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+               <spirit:vector>
+                  <spirit:left>1</spirit:left>
+                  <spirit:right>0</spirit:right>
+               </spirit:vector>
+            </spirit:wire>
+         </spirit:port>
          <spirit:port>
             <spirit:name>HRDATA_IMEM_0</spirit:name>
             <spirit:wire>
@@ -3112,6 +3365,100 @@
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
+         <spirit:port>
+            <spirit:name>HSEL_EXTROM_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HADDR_EXTROM_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+               <spirit:vector>
+                  <spirit:left>31</spirit:left>
+                  <spirit:right>0</spirit:right>
+               </spirit:vector>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HTRANS_EXTROM_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+               <spirit:vector>
+                  <spirit:left>1</spirit:left>
+                  <spirit:right>0</spirit:right>
+               </spirit:vector>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HWRITE_EXTROM_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSIZE_EXTROM_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+               <spirit:vector>
+                  <spirit:left>2</spirit:left>
+                  <spirit:right>0</spirit:right>
+               </spirit:vector>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HBURST_EXTROM_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+               <spirit:vector>
+                  <spirit:left>2</spirit:left>
+                  <spirit:right>0</spirit:right>
+               </spirit:vector>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HPROT_EXTROM_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+               <spirit:vector>
+                  <spirit:left>3</spirit:left>
+                  <spirit:right>0</spirit:right>
+               </spirit:vector>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HMASTER_EXTROM_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+               <spirit:vector>
+                  <spirit:left>3</spirit:left>
+                  <spirit:right>0</spirit:right>
+               </spirit:vector>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HWDATA_EXTROM_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+               <spirit:vector>
+                  <spirit:left>31</spirit:left>
+                  <spirit:right>0</spirit:right>
+               </spirit:vector>
+            </spirit:wire>
+          </spirit:port>
+         <spirit:port>
+            <spirit:name>HMASTLOCK_EXTROM_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HREADYMUX_EXTROM_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
          <spirit:port>
             <spirit:name>HSEL_IMEM_0</spirit:name>
             <spirit:wire>
@@ -3927,6 +4274,10 @@
             <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_arbiter_BOOTROM_0.v</spirit:name>
             <spirit:fileType>verilogSource-2001</spirit:fileType>
          </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_arbiter_EXTROM_0.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
          <spirit:file>
             <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_arbiter_IMEM_0.v</spirit:name>
             <spirit:fileType>verilogSource-2001</spirit:fileType>
@@ -3959,6 +4310,10 @@
             <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_target_output_BOOTROM_0.v</spirit:name>
             <spirit:fileType>verilogSource-2001</spirit:fileType>
          </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_target_output_EXTROM_0.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
          <spirit:file>
             <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_target_output_IMEM_0.v</spirit:name>
             <spirit:fileType>verilogSource-2001</spirit:fileType>
diff --git a/nanosoc/nanosoc_busmatrix/ipxact/nanosoc_busmatrix/nanosoc_busmatrix_lite.xml b/nanosoc/nanosoc_busmatrix/ipxact/nanosoc_busmatrix/nanosoc_busmatrix_lite.xml
index b0ec4cd05819bc7e1a25e70903bdf31cd0891041..043d22378007036b67ebd5bb9055f5816e5acb8b 100644
--- a/nanosoc/nanosoc_busmatrix/ipxact/nanosoc_busmatrix/nanosoc_busmatrix_lite.xml
+++ b/nanosoc/nanosoc_busmatrix/ipxact/nanosoc_busmatrix/nanosoc_busmatrix_lite.xml
@@ -45,6 +45,7 @@
          <spirit:slave>
             <spirit:memoryMapRef spirit:memoryMapRef="AHBLiteInitiator_Slave__DEBUG_MM"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__BOOTROM_0" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__EXTROM_0" spirit:opaque="true"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__IMEM_0" spirit:opaque="true"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__DMEM_0" spirit:opaque="true"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__SYSIO" spirit:opaque="true"/>
@@ -174,6 +175,7 @@
          <spirit:slave>
             <spirit:memoryMapRef spirit:memoryMapRef="AHBLiteInitiator_Slave__DMAC_0_MM"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__BOOTROM_0" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__EXTROM_0" spirit:opaque="true"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__IMEM_0" spirit:opaque="true"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__DMEM_0" spirit:opaque="true"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__SYSIO" spirit:opaque="true"/>
@@ -302,6 +304,7 @@
          <spirit:slave>
             <spirit:memoryMapRef spirit:memoryMapRef="AHBLiteInitiator_Slave__DMAC_1_MM"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__BOOTROM_0" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__EXTROM_0" spirit:opaque="true"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__IMEM_0" spirit:opaque="true"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__DMEM_0" spirit:opaque="true"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__SYSIO" spirit:opaque="true"/>
@@ -430,6 +433,7 @@
          <spirit:slave>
             <spirit:memoryMapRef spirit:memoryMapRef="AHBLiteInitiator_Slave__CPU_0_MM"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__BOOTROM_0" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__EXTROM_0" spirit:opaque="true"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__IMEM_0" spirit:opaque="true"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__DMEM_0" spirit:opaque="true"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__SYSIO" spirit:opaque="true"/>
@@ -690,6 +694,143 @@
          </spirit:portMaps>
       </spirit:busInterface>
 
+      <spirit:busInterface>
+         <spirit:name>AHBLiteTarget_Master__EXTROM_0</spirit:name>
+         <spirit:description>Master port _EXTROM_0</spirit:description>
+         <spirit:busType spirit:library="AMBA3" spirit:name="AHBLiteTarget" spirit:vendor="amba.com" spirit:version="r2p0_0"/>
+         <spirit:abstractionType spirit:library="AMBA3" spirit:name="AHBLiteTarget_rtl" spirit:vendor="amba.com" spirit:version="r2p0_0"/>
+         <spirit:master>
+            <spirit:addressSpaceRef spirit:addressSpaceRef="AHBLiteTarget_Master__EXTROM_0_AS"/>
+         </spirit:master>
+
+         <spirit:portMaps>
+            <!--  Clock/reset -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HCLK</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HCLK</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRESETn</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRESETn</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <!--  Outputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HSELx</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HSEL_EXTROM_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HADDR</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HADDR_EXTROM_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HTRANS</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HTRANS_EXTROM_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWRITE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWRITE_EXTROM_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HSIZE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HSIZE_EXTROM_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HBURST</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HBURST_EXTROM_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HPROT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HPROT_EXTROM_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWDATA_EXTROM_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HMASTLOCK</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HMASTLOCK_EXTROM_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADY</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYMUX_EXTROM_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!--  Inputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRDATA_EXTROM_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADYOUT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYOUT_EXTROM_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRESP</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRESP_EXTROM_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+         </spirit:portMaps>
+      </spirit:busInterface>
+
       <spirit:busInterface>
          <spirit:name>AHBLiteTarget_Master__IMEM_0</spirit:name>
          <spirit:description>Master port _IMEM_0</spirit:description>
@@ -1715,10 +1856,19 @@
           </spirit:remapPorts>
       </spirit:remapState>
       <spirit:remapState>
-          <spirit:name>remap_n0</spirit:name>
-          <spirit:description>Remap state remap_n0</spirit:description>
+          <spirit:name>remap_n0_1</spirit:name>
+          <spirit:description>Remap state remap_n0_1</spirit:description>
           <spirit:remapPorts>
              <spirit:remapPort spirit:portNameRef="REMAP" spirit:portIndex="0">0</spirit:remapPort>
+             <spirit:remapPort spirit:portNameRef="REMAP" spirit:portIndex="1">1</spirit:remapPort>
+          </spirit:remapPorts>
+      </spirit:remapState>
+      <spirit:remapState>
+          <spirit:name>remap_n0_n1</spirit:name>
+          <spirit:description>Remap state remap_n0_n1</spirit:description>
+          <spirit:remapPorts>
+             <spirit:remapPort spirit:portNameRef="REMAP" spirit:portIndex="0">0</spirit:remapPort>
+             <spirit:remapPort spirit:portNameRef="REMAP" spirit:portIndex="1">0</spirit:remapPort>
           </spirit:remapPorts>
       </spirit:remapState>
 
@@ -1738,10 +1888,30 @@
                 <spirit:range>0x010000000</spirit:range>
              </spirit:segment>
              <spirit:segment>
-                <spirit:name>_BOOTROM_0_0x10000000_0x1fffffff</spirit:name>
+                <spirit:name>_BOOTROM_0_0x10000000_0x17ffffff</spirit:name>
                 <spirit:addressOffset>0x10000000</spirit:addressOffset>
+                <spirit:range>0x008000000</spirit:range>
+             </spirit:segment>
+          </spirit:segments>
+          <spirit:addressUnitBits>8</spirit:addressUnitBits>
+     </spirit:addressSpace>
+
+     <spirit:addressSpace>
+          <spirit:name>AHBLiteTarget_Master__EXTROM_0_AS</spirit:name>
+          <spirit:description>_EXTROM_0 address space</spirit:description>
+          <spirit:range>4G</spirit:range>
+          <spirit:width>32</spirit:width>
+          <spirit:segments>
+             <spirit:segment>
+                <spirit:name>_EXTROM_0_0x00000000_0x0fffffff</spirit:name>
+                <spirit:addressOffset>0x00000000</spirit:addressOffset>
                 <spirit:range>0x010000000</spirit:range>
              </spirit:segment>
+             <spirit:segment>
+                <spirit:name>_EXTROM_0_0x18000000_0x1fffffff</spirit:name>
+                <spirit:addressOffset>0x18000000</spirit:addressOffset>
+                <spirit:range>0x008000000</spirit:range>
+             </spirit:segment>
           </spirit:segments>
           <spirit:addressUnitBits>8</spirit:addressUnitBits>
      </spirit:addressSpace>
@@ -1870,12 +2040,19 @@
          <spirit:description>_DEBUG memory map</spirit:description>
 
          <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__BOOTROM_0"
-                             spirit:segmentRef="_BOOTROM_0_0x10000000_0x1fffffff">
-            <!-- Address_region 0x10000000-0x1fffffff -->
+                             spirit:segmentRef="_BOOTROM_0_0x10000000_0x17ffffff">
+            <!-- Address_region 0x10000000-0x17ffffff -->
             <spirit:name>AHBLiteTarget_Master__BOOTROM_0_0x10000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x10000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__EXTROM_0"
+                             spirit:segmentRef="_EXTROM_0_0x18000000_0x1fffffff">
+            <!-- Address_region 0x18000000-0x1fffffff -->
+            <spirit:name>AHBLiteTarget_Master__EXTROM_0_0x18000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x18000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
          <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__IMEM_0"
                              spirit:segmentRef="_IMEM_0_0x20000000_0x2fffffff">
             <!-- Address_region 0x20000000-0x2fffffff -->
@@ -1943,13 +2120,24 @@
             </spirit:subspaceMap>
          </spirit:memoryRemap>
 
-         <spirit:memoryRemap spirit:state="remap_n0">
-            <spirit:name>AHBLiteInitiator_Slave__DEBUG_remap_n0_remap_MM</spirit:name>
-            <spirit:description>_DEBUG remap_n0 remap</spirit:description>
+         <spirit:memoryRemap spirit:state="remap_n0_1">
+            <spirit:name>AHBLiteInitiator_Slave__DEBUG_remap_n0_1_remap_MM</spirit:name>
+            <spirit:description>_DEBUG remap_n0_1 remap</spirit:description>
+            <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__EXTROM_0"
+                                spirit:segmentRef="_EXTROM_0_0x00000000_0x0fffffff">
+               <!-- Remapped region, active when REMAP bitcombination is n0_1 address_region 0x00000000-0x0fffffff -->
+               <spirit:name>AHBLiteTarget_Master__EXTROM_0_0x00000000_0_state_remap_n0_1_SM</spirit:name>
+               <spirit:baseAddress>0x00000000</spirit:baseAddress>
+            </spirit:subspaceMap>
+         </spirit:memoryRemap>
+
+         <spirit:memoryRemap spirit:state="remap_n0_n1">
+            <spirit:name>AHBLiteInitiator_Slave__DEBUG_remap_n0_n1_remap_MM</spirit:name>
+            <spirit:description>_DEBUG remap_n0_n1 remap</spirit:description>
             <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__BOOTROM_0"
                                 spirit:segmentRef="_BOOTROM_0_0x00000000_0x0fffffff">
-               <!-- Removable region, active only when REMAP bitcombination is n0 address_region 0x00000000-0x0fffffff -->
-               <spirit:name>AHBLiteTarget_Master__BOOTROM_0_0x00000000_0_state_remap_n0_SM</spirit:name>
+               <!-- Removable region, active only when REMAP bitcombination is n0_n1 address_region 0x00000000-0x0fffffff -->
+               <spirit:name>AHBLiteTarget_Master__BOOTROM_0_0x00000000_0_state_remap_n0_n1_SM</spirit:name>
                <spirit:baseAddress>0x00000000</spirit:baseAddress>
             </spirit:subspaceMap>
          </spirit:memoryRemap>
@@ -1968,12 +2156,19 @@
          </spirit:subspaceMap>
 
          <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__BOOTROM_0"
-                             spirit:segmentRef="_BOOTROM_0_0x10000000_0x1fffffff">
-            <!-- Address_region 0x10000000-0x1fffffff -->
+                             spirit:segmentRef="_BOOTROM_0_0x10000000_0x17ffffff">
+            <!-- Address_region 0x10000000-0x17ffffff -->
             <spirit:name>AHBLiteTarget_Master__BOOTROM_0_0x10000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x10000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__EXTROM_0"
+                             spirit:segmentRef="_EXTROM_0_0x18000000_0x1fffffff">
+            <!-- Address_region 0x18000000-0x1fffffff -->
+            <spirit:name>AHBLiteTarget_Master__EXTROM_0_0x18000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x18000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
          <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__IMEM_0"
                              spirit:segmentRef="_IMEM_0_0x20000000_0x2fffffff">
             <!-- Address_region 0x20000000-0x2fffffff -->
@@ -2037,12 +2232,19 @@
          </spirit:subspaceMap>
 
          <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__BOOTROM_0"
-                             spirit:segmentRef="_BOOTROM_0_0x10000000_0x1fffffff">
-            <!-- Address_region 0x10000000-0x1fffffff -->
+                             spirit:segmentRef="_BOOTROM_0_0x10000000_0x17ffffff">
+            <!-- Address_region 0x10000000-0x17ffffff -->
             <spirit:name>AHBLiteTarget_Master__BOOTROM_0_0x10000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x10000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__EXTROM_0"
+                             spirit:segmentRef="_EXTROM_0_0x18000000_0x1fffffff">
+            <!-- Address_region 0x18000000-0x1fffffff -->
+            <spirit:name>AHBLiteTarget_Master__EXTROM_0_0x18000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x18000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
          <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__IMEM_0"
                              spirit:segmentRef="_IMEM_0_0x20000000_0x2fffffff">
             <!-- Address_region 0x20000000-0x2fffffff -->
@@ -2099,12 +2301,19 @@
          <spirit:description>_CPU_0 memory map</spirit:description>
 
          <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__BOOTROM_0"
-                             spirit:segmentRef="_BOOTROM_0_0x10000000_0x1fffffff">
-            <!-- Address_region 0x10000000-0x1fffffff -->
+                             spirit:segmentRef="_BOOTROM_0_0x10000000_0x17ffffff">
+            <!-- Address_region 0x10000000-0x17ffffff -->
             <spirit:name>AHBLiteTarget_Master__BOOTROM_0_0x10000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x10000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__EXTROM_0"
+                             spirit:segmentRef="_EXTROM_0_0x18000000_0x1fffffff">
+            <!-- Address_region 0x18000000-0x1fffffff -->
+            <spirit:name>AHBLiteTarget_Master__EXTROM_0_0x18000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x18000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
          <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__IMEM_0"
                              spirit:segmentRef="_IMEM_0_0x20000000_0x2fffffff">
             <!-- Address_region 0x20000000-0x2fffffff -->
@@ -2172,13 +2381,24 @@
             </spirit:subspaceMap>
          </spirit:memoryRemap>
 
-         <spirit:memoryRemap spirit:state="remap_n0">
-            <spirit:name>AHBLiteInitiator_Slave__CPU_0_remap_n0_remap_MM</spirit:name>
-            <spirit:description>_CPU_0 remap_n0 remap</spirit:description>
+         <spirit:memoryRemap spirit:state="remap_n0_1">
+            <spirit:name>AHBLiteInitiator_Slave__CPU_0_remap_n0_1_remap_MM</spirit:name>
+            <spirit:description>_CPU_0 remap_n0_1 remap</spirit:description>
+            <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__EXTROM_0"
+                                spirit:segmentRef="_EXTROM_0_0x00000000_0x0fffffff">
+               <!-- Remapped region, active when REMAP bitcombination is n0_1 address_region 0x00000000-0x0fffffff -->
+               <spirit:name>AHBLiteTarget_Master__EXTROM_0_0x00000000_0_state_remap_n0_1_SM</spirit:name>
+               <spirit:baseAddress>0x00000000</spirit:baseAddress>
+            </spirit:subspaceMap>
+         </spirit:memoryRemap>
+
+         <spirit:memoryRemap spirit:state="remap_n0_n1">
+            <spirit:name>AHBLiteInitiator_Slave__CPU_0_remap_n0_n1_remap_MM</spirit:name>
+            <spirit:description>_CPU_0 remap_n0_n1 remap</spirit:description>
             <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__BOOTROM_0"
                                 spirit:segmentRef="_BOOTROM_0_0x00000000_0x0fffffff">
-               <!-- Removable region, active only when REMAP bitcombination is n0 address_region 0x00000000-0x0fffffff -->
-               <spirit:name>AHBLiteTarget_Master__BOOTROM_0_0x00000000_0_state_remap_n0_SM</spirit:name>
+               <!-- Removable region, active only when REMAP bitcombination is n0_n1 address_region 0x00000000-0x0fffffff -->
+               <spirit:name>AHBLiteTarget_Master__BOOTROM_0_0x00000000_0_state_remap_n0_n1_SM</spirit:name>
                <spirit:baseAddress>0x00000000</spirit:baseAddress>
             </spirit:subspaceMap>
          </spirit:memoryRemap>
@@ -2562,6 +2782,28 @@
                <spirit:direction>in</spirit:direction>
             </spirit:wire>
          </spirit:port>
+         <spirit:port>
+            <spirit:name>HRDATA_EXTROM_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+               <spirit:vector>
+                  <spirit:left>31</spirit:left>
+                  <spirit:right>0</spirit:right>
+               </spirit:vector>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HREADYOUT_EXTROM_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRESP_EXTROM_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
          <spirit:port>
             <spirit:name>HRDATA_IMEM_0</spirit:name>
             <spirit:wire>
@@ -2818,6 +3060,90 @@
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
+         <spirit:port>
+            <spirit:name>HSEL_EXTROM_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HADDR_EXTROM_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+               <spirit:vector>
+                  <spirit:left>31</spirit:left>
+                  <spirit:right>0</spirit:right>
+               </spirit:vector>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HTRANS_EXTROM_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+               <spirit:vector>
+                  <spirit:left>1</spirit:left>
+                  <spirit:right>0</spirit:right>
+               </spirit:vector>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HWRITE_EXTROM_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSIZE_EXTROM_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+               <spirit:vector>
+                  <spirit:left>2</spirit:left>
+                  <spirit:right>0</spirit:right>
+               </spirit:vector>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HBURST_EXTROM_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+               <spirit:vector>
+                  <spirit:left>2</spirit:left>
+                  <spirit:right>0</spirit:right>
+               </spirit:vector>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HPROT_EXTROM_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+               <spirit:vector>
+                  <spirit:left>3</spirit:left>
+                  <spirit:right>0</spirit:right>
+               </spirit:vector>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HWDATA_EXTROM_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+               <spirit:vector>
+                  <spirit:left>31</spirit:left>
+                  <spirit:right>0</spirit:right>
+               </spirit:vector>
+            </spirit:wire>
+          </spirit:port>
+         <spirit:port>
+            <spirit:name>HMASTLOCK_EXTROM_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HREADYMUX_EXTROM_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
          <spirit:port>
             <spirit:name>HSEL_IMEM_0</spirit:name>
             <spirit:wire>
@@ -3551,6 +3877,10 @@
             <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_arbiter_BOOTROM_0.v</spirit:name>
             <spirit:fileType>verilogSource-2001</spirit:fileType>
          </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_arbiter_EXTROM_0.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
          <spirit:file>
             <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_arbiter_IMEM_0.v</spirit:name>
             <spirit:fileType>verilogSource-2001</spirit:fileType>
@@ -3583,6 +3913,10 @@
             <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_target_output_BOOTROM_0.v</spirit:name>
             <spirit:fileType>verilogSource-2001</spirit:fileType>
          </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_target_output_EXTROM_0.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
          <spirit:file>
             <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_target_output_IMEM_0.v</spirit:name>
             <spirit:fileType>verilogSource-2001</spirit:fileType>
diff --git a/nanosoc/nanosoc_busmatrix/logs/nanosoc.log b/nanosoc/nanosoc_busmatrix/logs/nanosoc.log
index 038f8afe8758dffb63e4e2d6e3a6ce02e88e64e9..d9ad973952831f07f46529771673033d0916d7eb 100644
--- a/nanosoc/nanosoc_busmatrix/logs/nanosoc.log
+++ b/nanosoc/nanosoc_busmatrix/logs/nanosoc.log
@@ -14,89 +14,93 @@
 =
 = BuildBusMatrix.pl
 =
-= Run Date : 16/06/2023 08:53:15
+= Run Date : 06/03/2025 11:53:40
 ==============================================================
 
 Script accepted the following parameters:
 
- - Configuration file      : '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/xml/nanosoc.xml'
+ - Configuration file      : '/home/dwf1m12/work/dev/accelerator-project-qspi/nanosoc_tech/nanosoc/nanosoc_busmatrix/xml/nanosoc.xml'
  - Top-level name          : 'nanosoc_busmatrix'
  - Slave interfaces        : 4
- - Master interfaces       : 8
+ - Master interfaces       : 9
  - Architecture type       : 'ahb2'
  - Arbitration scheme      : 'burst'
  - Address map             : user defined
- - Connectivity mapping    : _DEBUG -> _BOOTROM_0, _IMEM_0, _DMEM_0, _SYSIO, _EXP, _EXPRAM_L, _EXPRAM_H, _SYSTABLE, 
-                             _DMAC_0 -> _BOOTROM_0, _IMEM_0, _DMEM_0, _SYSIO, _EXP, _EXPRAM_L, _EXPRAM_H, 
-                             _DMAC_1 -> _BOOTROM_0, _IMEM_0, _DMEM_0, _SYSIO, _EXP, _EXPRAM_L, _EXPRAM_H, 
-                             _CPU_0 -> _BOOTROM_0, _IMEM_0, _DMEM_0, _SYSIO, _EXP, _EXPRAM_L, _EXPRAM_H, _SYSTABLE
+ - Connectivity mapping    : _DEBUG -> _BOOTROM_0, _EXTROM_0, _IMEM_0, _DMEM_0, _SYSIO, _EXP, _EXPRAM_L, _EXPRAM_H, _SYSTABLE, 
+                             _DMAC_0 -> _BOOTROM_0, _EXTROM_0, _IMEM_0, _DMEM_0, _SYSIO, _EXP, _EXPRAM_L, _EXPRAM_H, 
+                             _DMAC_1 -> _BOOTROM_0, _EXTROM_0, _IMEM_0, _DMEM_0, _SYSIO, _EXP, _EXPRAM_L, _EXPRAM_H, 
+                             _CPU_0 -> _BOOTROM_0, _EXTROM_0, _IMEM_0, _DMEM_0, _SYSIO, _EXP, _EXPRAM_L, _EXPRAM_H, _SYSTABLE
  - Connectivity type       : sparse
  - Routing data width      : 32
  - Routing address width   : 32
  - User signal width       : 0
  - Timescales              : no
- - Configuration directory : '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog'
+ - Configuration directory : '/home/dwf1m12/work/dev/accelerator-project-qspi/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog'
  - Source directory        : '/research/AAA/ip_library/latest/Corstone-101/logical/cmsdk_ahb_busmatrix/verilog/src'
- - IPXact target directory : '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/ipxact'
+ - IPXact target directory : '/home/dwf1m12/work/dev/accelerator-project-qspi/nanosoc_tech/nanosoc/nanosoc_busmatrix/ipxact'
  - IPXact source directory : '/research/AAA/ip_library/latest/Corstone-101/logical/cmsdk_ahb_busmatrix/ipxact/src'
  - Overwrite mode          : enabled
 
-Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_BOOTROM_0.v' file...
-Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_DMEM_0.v' file...
-Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXPANSION.v' file...
-Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXPRAM_H.v' file...
-Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXPRAM_L.v' file...
-Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_IMEM_0.v' file...
-Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_SYSIO.v' file...
-Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_SYSTABLE.v' file...
-Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix.v' file...
-Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix_default_slave.v' file...
-Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix_lite.v' file...
-Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_inititator_input.v' file...
-Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_CPU_0.v' file...
-Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DEBUG.v' file...
-Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_0.v' file...
-Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_1.v' file...
-Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_BOOTROM_0.v' file...
-Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_DMEM_0.v' file...
-Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXPANSION.v' file...
-Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXPRAM_H.v' file...
-Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXPRAM_L.v' file...
-Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_IMEM_0.v' file...
-Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_SYSIO.v' file...
-Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_SYSTABLE.v' file...
+Deleting the '/home/dwf1m12/work/dev/accelerator-project-qspi/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_BOOTROM_0.v' file...
+Deleting the '/home/dwf1m12/work/dev/accelerator-project-qspi/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_DMEM_0.v' file...
+Deleting the '/home/dwf1m12/work/dev/accelerator-project-qspi/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXP.v' file...
+Deleting the '/home/dwf1m12/work/dev/accelerator-project-qspi/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXPRAM_H.v' file...
+Deleting the '/home/dwf1m12/work/dev/accelerator-project-qspi/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXPRAM_L.v' file...
+Deleting the '/home/dwf1m12/work/dev/accelerator-project-qspi/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXTROM_0.v' file...
+Deleting the '/home/dwf1m12/work/dev/accelerator-project-qspi/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_IMEM_0.v' file...
+Deleting the '/home/dwf1m12/work/dev/accelerator-project-qspi/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_SYSIO.v' file...
+Deleting the '/home/dwf1m12/work/dev/accelerator-project-qspi/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_SYSTABLE.v' file...
+Deleting the '/home/dwf1m12/work/dev/accelerator-project-qspi/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix.v' file...
+Deleting the '/home/dwf1m12/work/dev/accelerator-project-qspi/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix_default_slave.v' file...
+Deleting the '/home/dwf1m12/work/dev/accelerator-project-qspi/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix_lite.v' file...
+Deleting the '/home/dwf1m12/work/dev/accelerator-project-qspi/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_inititator_input.v' file...
+Deleting the '/home/dwf1m12/work/dev/accelerator-project-qspi/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_CPU_0.v' file...
+Deleting the '/home/dwf1m12/work/dev/accelerator-project-qspi/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DEBUG.v' file...
+Deleting the '/home/dwf1m12/work/dev/accelerator-project-qspi/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_0.v' file...
+Deleting the '/home/dwf1m12/work/dev/accelerator-project-qspi/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_1.v' file...
+Deleting the '/home/dwf1m12/work/dev/accelerator-project-qspi/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_BOOTROM_0.v' file...
+Deleting the '/home/dwf1m12/work/dev/accelerator-project-qspi/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_DMEM_0.v' file...
+Deleting the '/home/dwf1m12/work/dev/accelerator-project-qspi/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXP.v' file...
+Deleting the '/home/dwf1m12/work/dev/accelerator-project-qspi/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXPRAM_H.v' file...
+Deleting the '/home/dwf1m12/work/dev/accelerator-project-qspi/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXPRAM_L.v' file...
+Deleting the '/home/dwf1m12/work/dev/accelerator-project-qspi/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXTROM_0.v' file...
+Deleting the '/home/dwf1m12/work/dev/accelerator-project-qspi/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_IMEM_0.v' file...
+Deleting the '/home/dwf1m12/work/dev/accelerator-project-qspi/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_SYSIO.v' file...
+Deleting the '/home/dwf1m12/work/dev/accelerator-project-qspi/nanosoc_tech/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_SYSTABLE.v' file...
 
-Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/ipxact/nanosoc_busmatrix/nanosoc_busmatrix.xml' file...
-Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/nanosoc_busmatrix/ipxact/nanosoc_busmatrix/nanosoc_busmatrix_lite.xml' file...
+Deleting the '/home/dwf1m12/work/dev/accelerator-project-qspi/nanosoc_tech/nanosoc/nanosoc_busmatrix/ipxact/nanosoc_busmatrix/nanosoc_busmatrix.xml' file...
+Deleting the '/home/dwf1m12/work/dev/accelerator-project-qspi/nanosoc_tech/nanosoc/nanosoc_busmatrix/ipxact/nanosoc_busmatrix/nanosoc_busmatrix_lite.xml' file...
 
 Creating the bus matrix variant...
 
- - Rendering 'nanosoc_busmatrix.xml'
- - Rendering 'nanosoc_busmatrix_lite.xml'
  - Rendering 'nanosoc_matrix_decode_DMAC_0.v'
- - Rendering 'nanosoc_target_output_BOOTROM_0.v'
- - Rendering 'nanosoc_arbiter_EXP.v'
- - Rendering 'nanosoc_arbiter_EXPRAM_H.v'
+ - Rendering 'nanosoc_busmatrix.xml'
+ - Rendering 'nanosoc_matrix_decode_DMAC_1.v'
+ - Rendering 'nanosoc_matrix_decode_CPU_0.v'
  - Rendering 'nanosoc_target_output_IMEM_0.v'
- - Rendering 'nanosoc_target_output_DMEM_0.v'
- - Rendering 'nanosoc_target_output_EXPRAM_L.v'
- - Rendering 'nanosoc_arbiter_SYSIO.v'
+ - Rendering 'nanosoc_inititator_input.v'
+ - Rendering 'nanosoc_arbiter_DMEM_0.v'
  - Rendering 'nanosoc_target_output_SYSIO.v'
  - Rendering 'nanosoc_busmatrix.v'
- - Rendering 'nanosoc_arbiter_EXPRAM_L.v'
- - Rendering 'nanosoc_inititator_input.v'
- - Rendering 'nanosoc_target_output_EXPRAM_H.v'
- - Rendering 'nanosoc_arbiter_BOOTROM_0.v'
- - Rendering 'nanosoc_busmatrix_lite.v'
+ - Rendering 'nanosoc_target_output_EXTROM_0.v'
  - Rendering 'nanosoc_arbiter_IMEM_0.v'
- - Rendering 'nanosoc_arbiter_DMEM_0.v'
- - Rendering 'nanosoc_arbiter_SYSTABLE.v'
- - Rendering 'nanosoc_matrix_decode_CPU_0.v'
+ - Rendering 'nanosoc_arbiter_EXTROM_0.v'
+ - Rendering 'nanosoc_busmatrix_default_slave.v'
+ - Rendering 'nanosoc_busmatrix_lite.v'
+ - Rendering 'nanosoc_arbiter_EXPRAM_H.v'
+ - Rendering 'nanosoc_target_output_BOOTROM_0.v'
+ - Rendering 'nanosoc_target_output_DMEM_0.v'
+ - Rendering 'nanosoc_arbiter_BOOTROM_0.v'
  - Rendering 'nanosoc_matrix_decode_DEBUG.v'
- - Rendering 'nanosoc_matrix_decode_DMAC_1.v'
- - Rendering 'nanosoc_target_output_SYSTABLE.v'
+ - Rendering 'nanosoc_arbiter_SYSIO.v'
+ - Rendering 'nanosoc_target_output_EXPRAM_L.v'
+ - Rendering 'nanosoc_busmatrix_lite.xml'
+ - Rendering 'nanosoc_arbiter_EXPRAM_L.v'
  - Rendering 'nanosoc_target_output_EXP.v'
- - Rendering 'nanosoc_busmatrix_default_slave.v'
+ - Rendering 'nanosoc_arbiter_EXP.v'
+ - Rendering 'nanosoc_arbiter_SYSTABLE.v'
+ - Rendering 'nanosoc_target_output_EXPRAM_H.v'
+ - Rendering 'nanosoc_target_output_SYSTABLE.v'
 
 Done!
 
diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_BOOTROM_0.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_BOOTROM_0.v
index 850c0bccd60e389146d4d5d9ada76dd3ba8092f2..287bd2c92b65eb2120d53ad77cd30ce27a95dc2f 100644
--- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_BOOTROM_0.v
+++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_BOOTROM_0.v
@@ -3,7 +3,7 @@
 // only be used by a person authorised under and to the extent permitted
 // by a subsisting licensing agreement from Arm Limited or its affiliates.
 //
-//            (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates.
+//            (C) COPYRIGHT 2001-2025 Arm Limited or its affiliates.
 //                ALL RIGHTS RESERVED
 //
 // This entire notice must be reproduced on all copies of this file
diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_DMEM_0.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_DMEM_0.v
index e2559ef58dfb6eb30868b759eb77d350e435cbda..e8e1f7c1d6ea50e1cd10cf35cc3251fb4d2517db 100644
--- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_DMEM_0.v
+++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_DMEM_0.v
@@ -3,7 +3,7 @@
 // only be used by a person authorised under and to the extent permitted
 // by a subsisting licensing agreement from Arm Limited or its affiliates.
 //
-//            (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates.
+//            (C) COPYRIGHT 2001-2025 Arm Limited or its affiliates.
 //                ALL RIGHTS RESERVED
 //
 // This entire notice must be reproduced on all copies of this file
diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXP.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXP.v
index 42a514fe5dada28a6eeada2033c99e5406cc4b18..319d1d27d6b4c8b085af8143c2417bda69fe8030 100644
--- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXP.v
+++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXP.v
@@ -3,7 +3,7 @@
 // only be used by a person authorised under and to the extent permitted
 // by a subsisting licensing agreement from Arm Limited or its affiliates.
 //
-//            (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates.
+//            (C) COPYRIGHT 2001-2025 Arm Limited or its affiliates.
 //                ALL RIGHTS RESERVED
 //
 // This entire notice must be reproduced on all copies of this file
diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXPRAM_H.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXPRAM_H.v
index d49521d8b5f460400525106e60625a50eb972162..354be78b57d1d99879edd7b0e64bd23b9c51e448 100644
--- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXPRAM_H.v
+++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXPRAM_H.v
@@ -3,7 +3,7 @@
 // only be used by a person authorised under and to the extent permitted
 // by a subsisting licensing agreement from Arm Limited or its affiliates.
 //
-//            (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates.
+//            (C) COPYRIGHT 2001-2025 Arm Limited or its affiliates.
 //                ALL RIGHTS RESERVED
 //
 // This entire notice must be reproduced on all copies of this file
diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXPRAM_L.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXPRAM_L.v
index 03c9c2571c3966f567e129e62dc9ac40fbad2e6a..0fc77f8b12532556a160b6d2e57fc7c062bd85e9 100644
--- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXPRAM_L.v
+++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXPRAM_L.v
@@ -3,7 +3,7 @@
 // only be used by a person authorised under and to the extent permitted
 // by a subsisting licensing agreement from Arm Limited or its affiliates.
 //
-//            (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates.
+//            (C) COPYRIGHT 2001-2025 Arm Limited or its affiliates.
 //                ALL RIGHTS RESERVED
 //
 // This entire notice must be reproduced on all copies of this file
diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXTROM_0.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXTROM_0.v
new file mode 100644
index 0000000000000000000000000000000000000000..ff3512ad5bab044b9b12ab32d21bff58da105844
--- /dev/null
+++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_EXTROM_0.v
@@ -0,0 +1,328 @@
+//-----------------------------------------------------------------------------
+// The confidential and proprietary information contained in this file may
+// only be used by a person authorised under and to the extent permitted
+// by a subsisting licensing agreement from Arm Limited or its affiliates.
+//
+//            (C) COPYRIGHT 2001-2025 Arm Limited or its affiliates.
+//                ALL RIGHTS RESERVED
+//
+// This entire notice must be reproduced on all copies of this file
+// and copies of this file may only be made by a person if such person is
+// permitted to do so under the terms of a subsisting license agreement
+// from Arm Limited or its affiliates.
+//
+//      SVN Information
+//
+//      Checked In          : $Date: 2017-10-10 15:55:38 +0100 (Tue, 10 Oct 2017) $
+//
+//      Revision            : $Revision: 371321 $
+//
+//      Release Information : Cortex-M System Design Kit-r1p1-00rel0
+//
+//-----------------------------------------------------------------------------
+//
+//------------------------------------------------------------------------------
+//  Abstract            : The Output Arbitration is used to determine which
+//                        of the input stages will be given access to the
+//                        shared slave.
+//
+//  Notes               : The bus matrix has sparse connectivity.
+//
+//-----------------------------------------------------------------------------
+
+
+
+module nanosoc_arbiter_EXTROM_0 (
+
+    // Common AHB signals
+    HCLK ,
+    HRESETn,
+
+    // Input port request signals
+    req_port0,
+    req_port1,
+    req_port2,
+    req_port3,
+
+    HREADYM,
+    HSELM,
+    HTRANSM,
+    HBURSTM,
+    HMASTLOCKM,
+
+    // Arbiter outputs
+    addr_in_port,
+    no_port
+
+    );
+
+
+// -----------------------------------------------------------------------------
+// Input and Output declarations
+// -----------------------------------------------------------------------------
+
+    // Common AHB signals
+    input        HCLK;         // AHB system clock
+    input        HRESETn;      // AHB system reset
+    input        req_port0;     // Port 0 request signal
+    input        req_port1;     // Port 1 request signal
+    input        req_port2;     // Port 2 request signal
+    input        req_port3;     // Port 3 request signal
+    input        HREADYM;      // Transfer done
+    input        HSELM;        // Slave select line
+    input  [1:0] HTRANSM;      // Transfer type
+    input  [2:0] HBURSTM;      // Burst type
+    input        HMASTLOCKM;   // Locked transfer
+    output [1:0] addr_in_port;   // Port address input
+    output       no_port;       // No port selected signal
+
+
+// -----------------------------------------------------------------------------
+// Constant declarations
+// -----------------------------------------------------------------------------
+
+// HTRANS transfer type signal encoding
+`define TRN_IDLE   2'b00       // Idle transfer
+`define TRN_BUSY   2'b01       // Busy transfer
+`define TRN_NONSEQ 2'b10       // NonSequential transfer
+`define TRN_SEQ    2'b11       // Sequential transfer
+
+// HBURST transfer type signal encoding
+`define BUR_SINGLE 3'b000       // Single
+`define BUR_INCR   3'b001       // Incremental
+`define BUR_WRAP4  3'b010       // 4-beat wrap
+`define BUR_INCR4  3'b011       // 4-beat Incr
+`define BUR_WRAP8  3'b100       // 8-beat wrap
+`define BUR_INCR8  3'b101       // 8-beat Incr
+`define BUR_WRAP16 3'b110       // 16-beat Wrap
+`define BUR_INCR16 3'b111       // 16-beat Incr
+
+
+// -----------------------------------------------------------------------------
+// Wire declarations
+// -----------------------------------------------------------------------------
+    wire       HCLK;           // AHB system clock
+    wire       HRESETn;        // AHB system reset
+    wire       req_port0;       // Port 0 request signal
+    wire       req_port1;       // Port 1 request signal
+    wire       req_port2;       // Port 2 request signal
+    wire       req_port3;       // Port 3 request signal
+    wire       HREADYM;        // Transfer done
+    wire       HSELM;          // Slave select line
+    wire [1:0] HTRANSM;        // Transfer type
+    wire [2:0] HBURSTM;        // Burst type
+    wire       HMASTLOCKM;     // Locked transfer
+    wire [1:0] addr_in_port;     // Address input port
+    reg        no_port;         // No port selected signal
+
+// -----------------------------------------------------------------------------
+// Signal declarations
+// -----------------------------------------------------------------------------
+    reg  [1:0] addr_in_port_next; // D-input of addr_in_port
+    reg  [1:0] i_addr_in_port;    // Internal version of addr_in_port
+    reg        no_port_next;       // D-input of no_port
+    reg  [3:0] next_burst_count;   // D-input of reg_burst_count
+    reg  [3:0] reg_burst_count;    // Burst counter
+    reg        next_burst_hold;    // D-input of reg_burst_hold
+    reg        reg_burst_hold;     // Burst hold signal
+
+    // Early burst termination logic
+    reg  [1:0] reg_early_term_count; // Counts number of early terminated bursts
+    wire [1:0] next_early_term_count; // D-input for reg_early_term_count
+
+// -----------------------------------------------------------------------------
+// Beginning of main code
+// -----------------------------------------------------------------------------
+
+// -----------------------------------------------------------------------------
+// BURST TRANSFER COUNTER
+// -----------------------------------------------------------------------------
+//
+// The Burst counter is used to count down from the number of transfers the
+// master should perform and when the counter reaches zero the bus may be
+// passed to another master.
+//
+// reg_burst_count indicates the number of transfers remaining in the
+// current fixed length burst.
+// reg_burst_hold is actually a decode of reg_burst_count=0 but is driven from a register
+// to improve timing
+
+  always @ (HTRANSM or HSELM or HBURSTM or reg_burst_count or reg_burst_hold or reg_early_term_count)
+    begin : p_next_burst_count_comb
+      // Force the Burst logic to reset if this port is de-selected.  This can
+      // happen for two reasons:
+      //   1. The master performs 2 fixed-length bursts back-to-back, but the
+      //      second is to an alternate output port
+      //   2. The master is performing a fixed-length burst but is de-granted mid-
+      //      way by a local AHB Arbiter
+      if (!HSELM)
+        begin
+          next_burst_count = 4'b0000;
+          next_burst_hold  = 1'b0;
+        end
+
+      // Burst logic is initialised on a NONSEQ transfer (i.e. start of burst)
+      // IDLE transfers cause the logic to reset
+      // BUSY transfers pause the decrementer
+      // SEQ transfers decrement the counter
+      else
+        case (HTRANSM)
+
+          `TRN_NONSEQ : begin
+            case (HBURSTM)
+              `BUR_INCR16, `BUR_WRAP16 : begin
+                next_burst_count = 4'b1111;
+                next_burst_hold = 1'b1;
+              end // case: BUR_INCR16 | BUR_WRAP16
+
+              `BUR_INCR8, `BUR_WRAP8 : begin
+                next_burst_count = 4'b0111;
+                next_burst_hold = 1'b1;
+              end // case: BUR_INCR8  | BUR_WRAP8
+
+              `BUR_INCR4, `BUR_WRAP4 : begin
+                next_burst_count = 4'b0011;
+                next_burst_hold = 1'b1;
+              end // case: BUR_INCR4  | BUR_WRAP4
+
+              `BUR_SINGLE, `BUR_INCR : begin
+                next_burst_count = 4'b0000;
+                next_burst_hold = 1'b0;
+              end // case: BUR_SINGLE | BUR_INCR
+
+              default : begin
+                next_burst_count = 4'bxxxx;
+                next_burst_hold = 1'bx;
+              end // case: default
+            endcase // case(HBURSTM)
+
+            // Prevent early burst termination from keeping hold of the port
+            if (reg_early_term_count == 2'b10)
+            begin
+               next_burst_hold = 1'b0;
+               next_burst_count = 4'd0;
+            end
+
+
+          end // case: `TRN_NONSEQ
+
+          `TRN_SEQ : begin
+            next_burst_count = reg_burst_count - 4'b1;
+            if (reg_burst_count == 4'b0001)
+              next_burst_hold = 1'b0;
+            else
+              next_burst_hold = reg_burst_hold;
+          end // case: `TRN_SEQ
+
+          `TRN_BUSY : begin
+            next_burst_count = reg_burst_count;
+            next_burst_hold = reg_burst_hold;
+          end // case: `TRN_BUSY
+
+          `TRN_IDLE : begin
+            next_burst_count = 4'b0000;
+            next_burst_hold = 1'b0;
+          end // case: `TRN_IDLE
+
+          default : begin
+            next_burst_count = 4'bxxxx;
+            next_burst_hold = 1'bx;
+          end // case: default
+
+        endcase // case(HTRANSM)
+    end // block: p_next_burst_countComb
+
+
+  assign next_early_term_count = (!next_burst_hold) ? 2'b00 :
+                               (reg_burst_hold & (HTRANSM == `TRN_NONSEQ)) ?
+                                reg_early_term_count + 2'b1 :
+                                reg_early_term_count;
+
+  // Sequential process
+  always @ (negedge HRESETn or posedge HCLK)
+    begin : p_burst_seq
+      if (!HRESETn)
+        begin
+          reg_burst_count <= 4'b0000;
+          reg_burst_hold  <= 1'b0;
+          reg_early_term_count <= 2'b00;
+        end // if (HRESETn == 1'b0)
+      else
+        if (HREADYM)
+        begin
+            reg_burst_count <= next_burst_count;
+            reg_burst_hold  <= next_burst_hold;
+            reg_early_term_count <= next_early_term_count;
+          end
+    end // block: p_burst_seq
+
+
+// -----------------------------------------------------------------------------
+// Port Selection
+// -----------------------------------------------------------------------------
+// The Output Arbitration function looks at all the requests to use the
+//  output port and determines which is the highest priority request. This
+//  version of the arbitration logic uses a fixed priority scheme that is
+//  gated by a tracking function of the burst boundary. Input port 0 is the
+//  highest priority, input port 1 is the second highest priority, etc.
+// If none of the input ports are requesting then the current port will
+//  remain active if it is performing IDLE transfers to the selected slave. If
+//  this is not the case then the no_port signal will be asserted which
+//  indicates that no input port should be selected.
+
+  always @ (
+             req_port0 or
+             req_port1 or
+             req_port2 or
+             req_port3 or
+             HSELM or HTRANSM or HMASTLOCKM or next_burst_hold or i_addr_in_port
+           )
+    begin : p_sel_port_comb
+      // Default values are used for addr_in_port_next and no_port_next
+      no_port_next = 1'b0;
+      addr_in_port_next = i_addr_in_port;
+
+      if ( HMASTLOCKM | next_burst_hold )
+        addr_in_port_next = i_addr_in_port;
+      else if ( req_port0 | ( (i_addr_in_port == 2'b00) & HSELM &
+                              (HTRANSM != 2'b00) ) )
+        addr_in_port_next = 2'b00;
+      else if ( req_port1 | ( (i_addr_in_port == 2'b01) & HSELM &
+                              (HTRANSM != 2'b00) ) )
+        addr_in_port_next = 2'b01;
+      else if ( req_port2 | ( (i_addr_in_port == 2'b10) & HSELM &
+                              (HTRANSM != 2'b00) ) )
+        addr_in_port_next = 2'b10;
+      else if ( req_port3 | ( (i_addr_in_port == 2'b11) & HSELM &
+                              (HTRANSM != 2'b00) ) )
+        addr_in_port_next = 2'b11;
+      else if (HSELM)
+        addr_in_port_next = i_addr_in_port;
+      else
+        no_port_next = 1'b1;
+    end // block: p_sel_port_comb
+
+
+  // Sequential process
+  always @ (negedge HRESETn or posedge HCLK)
+    begin : p_addr_in_port_reg
+      if (!HRESETn)
+        begin
+          no_port        <= 1'b1;
+          i_addr_in_port <= {2{1'b0}};
+        end
+      else
+        if (HREADYM)
+          begin
+            no_port        <= no_port_next;
+            i_addr_in_port <= addr_in_port_next;
+          end
+    end // block: p_addr_in_port_reg
+
+  // Drive output with internal version
+  assign addr_in_port = i_addr_in_port;
+
+
+endmodule
+
+// --================================= End ===================================--
diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_IMEM_0.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_IMEM_0.v
index 7e3ec3846216af3a7076d6660ab27fc38e92184a..d97f0d49479737ec102220e8225ca9d35c0a0dc0 100644
--- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_IMEM_0.v
+++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_IMEM_0.v
@@ -3,7 +3,7 @@
 // only be used by a person authorised under and to the extent permitted
 // by a subsisting licensing agreement from Arm Limited or its affiliates.
 //
-//            (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates.
+//            (C) COPYRIGHT 2001-2025 Arm Limited or its affiliates.
 //                ALL RIGHTS RESERVED
 //
 // This entire notice must be reproduced on all copies of this file
diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_SYSIO.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_SYSIO.v
index ebbf33182df87673cdb9f6fd909b20fd192c794a..f6adaae7393e4bee1d7ddd02179c0f1046b27bd9 100644
--- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_SYSIO.v
+++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_SYSIO.v
@@ -3,7 +3,7 @@
 // only be used by a person authorised under and to the extent permitted
 // by a subsisting licensing agreement from Arm Limited or its affiliates.
 //
-//            (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates.
+//            (C) COPYRIGHT 2001-2025 Arm Limited or its affiliates.
 //                ALL RIGHTS RESERVED
 //
 // This entire notice must be reproduced on all copies of this file
diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_SYSTABLE.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_SYSTABLE.v
index b0e8bef703369190c81fae4682b56b3ff8a22df1..17c955198dcf8be0a04d3e453b5e0c745fbad9f3 100644
--- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_SYSTABLE.v
+++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_SYSTABLE.v
@@ -3,7 +3,7 @@
 // only be used by a person authorised under and to the extent permitted
 // by a subsisting licensing agreement from Arm Limited or its affiliates.
 //
-//            (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates.
+//            (C) COPYRIGHT 2001-2025 Arm Limited or its affiliates.
 //                ALL RIGHTS RESERVED
 //
 // This entire notice must be reproduced on all copies of this file
diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix.v
index 9defea1e4032b715b527c70e4dc83f6e95c4f8bc..6f775bf8ee1c18717fcd3200519d7cb51445e77a 100644
--- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix.v
+++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix.v
@@ -3,7 +3,7 @@
 // only be used by a person authorised under and to the extent permitted
 // by a subsisting licensing agreement from Arm Limited or its affiliates.
 //
-//            (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates.
+//            (C) COPYRIGHT 2001-2025 Arm Limited or its affiliates.
 //                ALL RIGHTS RESERVED
 //
 // This entire notice must be reproduced on all copies of this file
@@ -30,15 +30,15 @@
 //
 //                         - Architecture type 'ahb2',
 //                         - 4 slave ports (connecting to masters),
-//                         - 8 master ports (connecting to slaves),
+//                         - 9 master ports (connecting to slaves),
 //                         - Routing address width of 32 bits,
 //                         - Routing data width of 32 bits,
 //                         - Arbiter type 'burst',
 //                         - Connectivity mapping:
-//                             _DEBUG -> _BOOTROM_0, _IMEM_0, _DMEM_0, _SYSIO, _EXP, _EXPRAM_L, _EXPRAM_H, _SYSTABLE, 
-//                             _DMAC_0 -> _BOOTROM_0, _IMEM_0, _DMEM_0, _SYSIO, _EXP, _EXPRAM_L, _EXPRAM_H, 
-//                             _DMAC_1 -> _BOOTROM_0, _IMEM_0, _DMEM_0, _SYSIO, _EXP, _EXPRAM_L, _EXPRAM_H, 
-//                             _CPU_0 -> _BOOTROM_0, _IMEM_0, _DMEM_0, _SYSIO, _EXP, _EXPRAM_L, _EXPRAM_H, _SYSTABLE,
+//                             _DEBUG -> _BOOTROM_0, _EXTROM_0, _IMEM_0, _DMEM_0, _SYSIO, _EXP, _EXPRAM_L, _EXPRAM_H, _SYSTABLE, 
+//                             _DMAC_0 -> _BOOTROM_0, _EXTROM_0, _IMEM_0, _DMEM_0, _SYSIO, _EXP, _EXPRAM_L, _EXPRAM_H, 
+//                             _DMAC_1 -> _BOOTROM_0, _EXTROM_0, _IMEM_0, _DMEM_0, _SYSIO, _EXP, _EXPRAM_L, _EXPRAM_H, 
+//                             _CPU_0 -> _BOOTROM_0, _EXTROM_0, _IMEM_0, _DMEM_0, _SYSIO, _EXP, _EXPRAM_L, _EXPRAM_H, _SYSTABLE,
 //                         - Connectivity type 'sparse'.
 //
 //------------------------------------------------------------------------------
@@ -112,36 +112,41 @@ module nanosoc_busmatrix (
     HRESP_BOOTROM_0,
 
     // Output port MI1 (inputs from slave 1)
+    HRDATA_EXTROM_0,
+    HREADYOUT_EXTROM_0,
+    HRESP_EXTROM_0,
+
+    // Output port MI2 (inputs from slave 2)
     HRDATA_IMEM_0,
     HREADYOUT_IMEM_0,
     HRESP_IMEM_0,
 
-    // Output port MI2 (inputs from slave 2)
+    // Output port MI3 (inputs from slave 3)
     HRDATA_DMEM_0,
     HREADYOUT_DMEM_0,
     HRESP_DMEM_0,
 
-    // Output port MI3 (inputs from slave 3)
+    // Output port MI4 (inputs from slave 4)
     HRDATA_SYSIO,
     HREADYOUT_SYSIO,
     HRESP_SYSIO,
 
-    // Output port MI4 (inputs from slave 4)
+    // Output port MI5 (inputs from slave 5)
     HRDATA_EXPRAM_L,
     HREADYOUT_EXPRAM_L,
     HRESP_EXPRAM_L,
 
-    // Output port MI5 (inputs from slave 5)
+    // Output port MI6 (inputs from slave 6)
     HRDATA_EXPRAM_H,
     HREADYOUT_EXPRAM_H,
     HRESP_EXPRAM_H,
 
-    // Output port MI6 (inputs from slave 6)
+    // Output port MI7 (inputs from slave 7)
     HRDATA_EXP,
     HREADYOUT_EXP,
     HRESP_EXP,
 
-    // Output port MI7 (inputs from slave 7)
+    // Output port MI8 (inputs from slave 8)
     HRDATA_SYSTABLE,
     HREADYOUT_SYSTABLE,
     HRESP_SYSTABLE,
@@ -165,6 +170,19 @@ module nanosoc_busmatrix (
     HREADYMUX_BOOTROM_0,
 
     // Output port MI1 (outputs to slave 1)
+    HSEL_EXTROM_0,
+    HADDR_EXTROM_0,
+    HTRANS_EXTROM_0,
+    HWRITE_EXTROM_0,
+    HSIZE_EXTROM_0,
+    HBURST_EXTROM_0,
+    HPROT_EXTROM_0,
+    HMASTER_EXTROM_0,
+    HWDATA_EXTROM_0,
+    HMASTLOCK_EXTROM_0,
+    HREADYMUX_EXTROM_0,
+
+    // Output port MI2 (outputs to slave 2)
     HSEL_IMEM_0,
     HADDR_IMEM_0,
     HTRANS_IMEM_0,
@@ -177,7 +195,7 @@ module nanosoc_busmatrix (
     HMASTLOCK_IMEM_0,
     HREADYMUX_IMEM_0,
 
-    // Output port MI2 (outputs to slave 2)
+    // Output port MI3 (outputs to slave 3)
     HSEL_DMEM_0,
     HADDR_DMEM_0,
     HTRANS_DMEM_0,
@@ -190,7 +208,7 @@ module nanosoc_busmatrix (
     HMASTLOCK_DMEM_0,
     HREADYMUX_DMEM_0,
 
-    // Output port MI3 (outputs to slave 3)
+    // Output port MI4 (outputs to slave 4)
     HSEL_SYSIO,
     HADDR_SYSIO,
     HTRANS_SYSIO,
@@ -203,7 +221,7 @@ module nanosoc_busmatrix (
     HMASTLOCK_SYSIO,
     HREADYMUX_SYSIO,
 
-    // Output port MI4 (outputs to slave 4)
+    // Output port MI5 (outputs to slave 5)
     HSEL_EXPRAM_L,
     HADDR_EXPRAM_L,
     HTRANS_EXPRAM_L,
@@ -216,7 +234,7 @@ module nanosoc_busmatrix (
     HMASTLOCK_EXPRAM_L,
     HREADYMUX_EXPRAM_L,
 
-    // Output port MI5 (outputs to slave 5)
+    // Output port MI6 (outputs to slave 6)
     HSEL_EXPRAM_H,
     HADDR_EXPRAM_H,
     HTRANS_EXPRAM_H,
@@ -229,7 +247,7 @@ module nanosoc_busmatrix (
     HMASTLOCK_EXPRAM_H,
     HREADYMUX_EXPRAM_H,
 
-    // Output port MI6 (outputs to slave 6)
+    // Output port MI7 (outputs to slave 7)
     HSEL_EXP,
     HADDR_EXP,
     HTRANS_EXP,
@@ -242,7 +260,7 @@ module nanosoc_busmatrix (
     HMASTLOCK_EXP,
     HREADYMUX_EXP,
 
-    // Output port MI7 (outputs to slave 7)
+    // Output port MI8 (outputs to slave 8)
     HSEL_SYSTABLE,
     HADDR_SYSTABLE,
     HTRANS_SYSTABLE,
@@ -350,36 +368,41 @@ module nanosoc_busmatrix (
     input   [1:0] HRESP_BOOTROM_0;         // Transfer response
 
     // Output port MI1 (inputs from slave 1)
+    input  [31:0] HRDATA_EXTROM_0;        // Read data bus
+    input         HREADYOUT_EXTROM_0;     // HREADY feedback
+    input   [1:0] HRESP_EXTROM_0;         // Transfer response
+
+    // Output port MI2 (inputs from slave 2)
     input  [31:0] HRDATA_IMEM_0;        // Read data bus
     input         HREADYOUT_IMEM_0;     // HREADY feedback
     input   [1:0] HRESP_IMEM_0;         // Transfer response
 
-    // Output port MI2 (inputs from slave 2)
+    // Output port MI3 (inputs from slave 3)
     input  [31:0] HRDATA_DMEM_0;        // Read data bus
     input         HREADYOUT_DMEM_0;     // HREADY feedback
     input   [1:0] HRESP_DMEM_0;         // Transfer response
 
-    // Output port MI3 (inputs from slave 3)
+    // Output port MI4 (inputs from slave 4)
     input  [31:0] HRDATA_SYSIO;        // Read data bus
     input         HREADYOUT_SYSIO;     // HREADY feedback
     input   [1:0] HRESP_SYSIO;         // Transfer response
 
-    // Output port MI4 (inputs from slave 4)
+    // Output port MI5 (inputs from slave 5)
     input  [31:0] HRDATA_EXPRAM_L;        // Read data bus
     input         HREADYOUT_EXPRAM_L;     // HREADY feedback
     input   [1:0] HRESP_EXPRAM_L;         // Transfer response
 
-    // Output port MI5 (inputs from slave 5)
+    // Output port MI6 (inputs from slave 6)
     input  [31:0] HRDATA_EXPRAM_H;        // Read data bus
     input         HREADYOUT_EXPRAM_H;     // HREADY feedback
     input   [1:0] HRESP_EXPRAM_H;         // Transfer response
 
-    // Output port MI6 (inputs from slave 6)
+    // Output port MI7 (inputs from slave 7)
     input  [31:0] HRDATA_EXP;        // Read data bus
     input         HREADYOUT_EXP;     // HREADY feedback
     input   [1:0] HRESP_EXP;         // Transfer response
 
-    // Output port MI7 (inputs from slave 7)
+    // Output port MI8 (inputs from slave 8)
     input  [31:0] HRDATA_SYSTABLE;        // Read data bus
     input         HREADYOUT_SYSTABLE;     // HREADY feedback
     input   [1:0] HRESP_SYSTABLE;         // Transfer response
@@ -403,6 +426,19 @@ module nanosoc_busmatrix (
     output        HREADYMUX_BOOTROM_0;     // Transfer done
 
     // Output port MI1 (outputs to slave 1)
+    output        HSEL_EXTROM_0;          // Slave Select
+    output [31:0] HADDR_EXTROM_0;         // Address bus
+    output  [1:0] HTRANS_EXTROM_0;        // Transfer type
+    output        HWRITE_EXTROM_0;        // Transfer direction
+    output  [2:0] HSIZE_EXTROM_0;         // Transfer size
+    output  [2:0] HBURST_EXTROM_0;        // Burst type
+    output  [3:0] HPROT_EXTROM_0;         // Protection control
+    output  [3:0] HMASTER_EXTROM_0;       // Master select
+    output [31:0] HWDATA_EXTROM_0;        // Write data
+    output        HMASTLOCK_EXTROM_0;     // Locked Sequence
+    output        HREADYMUX_EXTROM_0;     // Transfer done
+
+    // Output port MI2 (outputs to slave 2)
     output        HSEL_IMEM_0;          // Slave Select
     output [31:0] HADDR_IMEM_0;         // Address bus
     output  [1:0] HTRANS_IMEM_0;        // Transfer type
@@ -415,7 +451,7 @@ module nanosoc_busmatrix (
     output        HMASTLOCK_IMEM_0;     // Locked Sequence
     output        HREADYMUX_IMEM_0;     // Transfer done
 
-    // Output port MI2 (outputs to slave 2)
+    // Output port MI3 (outputs to slave 3)
     output        HSEL_DMEM_0;          // Slave Select
     output [31:0] HADDR_DMEM_0;         // Address bus
     output  [1:0] HTRANS_DMEM_0;        // Transfer type
@@ -428,7 +464,7 @@ module nanosoc_busmatrix (
     output        HMASTLOCK_DMEM_0;     // Locked Sequence
     output        HREADYMUX_DMEM_0;     // Transfer done
 
-    // Output port MI3 (outputs to slave 3)
+    // Output port MI4 (outputs to slave 4)
     output        HSEL_SYSIO;          // Slave Select
     output [31:0] HADDR_SYSIO;         // Address bus
     output  [1:0] HTRANS_SYSIO;        // Transfer type
@@ -441,7 +477,7 @@ module nanosoc_busmatrix (
     output        HMASTLOCK_SYSIO;     // Locked Sequence
     output        HREADYMUX_SYSIO;     // Transfer done
 
-    // Output port MI4 (outputs to slave 4)
+    // Output port MI5 (outputs to slave 5)
     output        HSEL_EXPRAM_L;          // Slave Select
     output [31:0] HADDR_EXPRAM_L;         // Address bus
     output  [1:0] HTRANS_EXPRAM_L;        // Transfer type
@@ -454,7 +490,7 @@ module nanosoc_busmatrix (
     output        HMASTLOCK_EXPRAM_L;     // Locked Sequence
     output        HREADYMUX_EXPRAM_L;     // Transfer done
 
-    // Output port MI5 (outputs to slave 5)
+    // Output port MI6 (outputs to slave 6)
     output        HSEL_EXPRAM_H;          // Slave Select
     output [31:0] HADDR_EXPRAM_H;         // Address bus
     output  [1:0] HTRANS_EXPRAM_H;        // Transfer type
@@ -467,7 +503,7 @@ module nanosoc_busmatrix (
     output        HMASTLOCK_EXPRAM_H;     // Locked Sequence
     output        HREADYMUX_EXPRAM_H;     // Transfer done
 
-    // Output port MI6 (outputs to slave 6)
+    // Output port MI7 (outputs to slave 7)
     output        HSEL_EXP;          // Slave Select
     output [31:0] HADDR_EXP;         // Address bus
     output  [1:0] HTRANS_EXP;        // Transfer type
@@ -480,7 +516,7 @@ module nanosoc_busmatrix (
     output        HMASTLOCK_EXP;     // Locked Sequence
     output        HREADYMUX_EXP;     // Transfer done
 
-    // Output port MI7 (outputs to slave 7)
+    // Output port MI8 (outputs to slave 8)
     output        HSEL_SYSTABLE;          // Slave Select
     output [31:0] HADDR_SYSTABLE;         // Address bus
     output  [1:0] HTRANS_SYSTABLE;        // Transfer type
@@ -614,6 +650,23 @@ module nanosoc_busmatrix (
     wire   [1:0] HRESP_BOOTROM_0;         // Transfer response
 
     // Output Port MI1
+    wire         HSEL_EXTROM_0;          // Slave Select
+    wire  [31:0] HADDR_EXTROM_0;         // Address bus
+    wire   [1:0] HTRANS_EXTROM_0;        // Transfer type
+    wire         HWRITE_EXTROM_0;        // Transfer direction
+    wire   [2:0] HSIZE_EXTROM_0;         // Transfer size
+    wire   [2:0] HBURST_EXTROM_0;        // Burst type
+    wire   [3:0] HPROT_EXTROM_0;         // Protection control
+    wire   [3:0] HMASTER_EXTROM_0;       // Master select
+    wire  [31:0] HWDATA_EXTROM_0;        // Write data
+    wire         HMASTLOCK_EXTROM_0;     // Locked Sequence
+    wire         HREADYMUX_EXTROM_0;     // Transfer done
+
+    wire  [31:0] HRDATA_EXTROM_0;        // Read data bus
+    wire         HREADYOUT_EXTROM_0;     // HREADY feedback
+    wire   [1:0] HRESP_EXTROM_0;         // Transfer response
+
+    // Output Port MI2
     wire         HSEL_IMEM_0;          // Slave Select
     wire  [31:0] HADDR_IMEM_0;         // Address bus
     wire   [1:0] HTRANS_IMEM_0;        // Transfer type
@@ -630,7 +683,7 @@ module nanosoc_busmatrix (
     wire         HREADYOUT_IMEM_0;     // HREADY feedback
     wire   [1:0] HRESP_IMEM_0;         // Transfer response
 
-    // Output Port MI2
+    // Output Port MI3
     wire         HSEL_DMEM_0;          // Slave Select
     wire  [31:0] HADDR_DMEM_0;         // Address bus
     wire   [1:0] HTRANS_DMEM_0;        // Transfer type
@@ -647,7 +700,7 @@ module nanosoc_busmatrix (
     wire         HREADYOUT_DMEM_0;     // HREADY feedback
     wire   [1:0] HRESP_DMEM_0;         // Transfer response
 
-    // Output Port MI3
+    // Output Port MI4
     wire         HSEL_SYSIO;          // Slave Select
     wire  [31:0] HADDR_SYSIO;         // Address bus
     wire   [1:0] HTRANS_SYSIO;        // Transfer type
@@ -664,7 +717,7 @@ module nanosoc_busmatrix (
     wire         HREADYOUT_SYSIO;     // HREADY feedback
     wire   [1:0] HRESP_SYSIO;         // Transfer response
 
-    // Output Port MI4
+    // Output Port MI5
     wire         HSEL_EXPRAM_L;          // Slave Select
     wire  [31:0] HADDR_EXPRAM_L;         // Address bus
     wire   [1:0] HTRANS_EXPRAM_L;        // Transfer type
@@ -681,7 +734,7 @@ module nanosoc_busmatrix (
     wire         HREADYOUT_EXPRAM_L;     // HREADY feedback
     wire   [1:0] HRESP_EXPRAM_L;         // Transfer response
 
-    // Output Port MI5
+    // Output Port MI6
     wire         HSEL_EXPRAM_H;          // Slave Select
     wire  [31:0] HADDR_EXPRAM_H;         // Address bus
     wire   [1:0] HTRANS_EXPRAM_H;        // Transfer type
@@ -698,7 +751,7 @@ module nanosoc_busmatrix (
     wire         HREADYOUT_EXPRAM_H;     // HREADY feedback
     wire   [1:0] HRESP_EXPRAM_H;         // Transfer response
 
-    // Output Port MI6
+    // Output Port MI7
     wire         HSEL_EXP;          // Slave Select
     wire  [31:0] HADDR_EXP;         // Address bus
     wire   [1:0] HTRANS_EXP;        // Transfer type
@@ -715,7 +768,7 @@ module nanosoc_busmatrix (
     wire         HREADYOUT_EXP;     // HREADY feedback
     wire   [1:0] HRESP_EXP;         // Transfer response
 
-    // Output Port MI7
+    // Output Port MI8
     wire         HSEL_SYSTABLE;          // Slave Select
     wire  [31:0] HADDR_SYSTABLE;         // Address bus
     wire   [1:0] HTRANS_SYSTABLE;        // Transfer type
@@ -829,6 +882,10 @@ module nanosoc_busmatrix (
     wire         i_sel0to7;         // Routing selection signal
     wire         i_active0to7;      // Active signal
 
+    // Bus-switch SI0 to MI8 signals
+    wire         i_sel0to8;         // Routing selection signal
+    wire         i_active0to8;      // Active signal
+
     // Bus-switch SI1 to MI0 signals
     wire         i_sel1to0;         // Routing selection signal
     wire         i_active1to0;      // Active signal
@@ -857,6 +914,10 @@ module nanosoc_busmatrix (
     wire         i_sel1to6;         // Routing selection signal
     wire         i_active1to6;      // Active signal
 
+    // Bus-switch SI1 to MI7 signals
+    wire         i_sel1to7;         // Routing selection signal
+    wire         i_active1to7;      // Active signal
+
     // Bus-switch SI2 to MI0 signals
     wire         i_sel2to0;         // Routing selection signal
     wire         i_active2to0;      // Active signal
@@ -885,6 +946,10 @@ module nanosoc_busmatrix (
     wire         i_sel2to6;         // Routing selection signal
     wire         i_active2to6;      // Active signal
 
+    // Bus-switch SI2 to MI7 signals
+    wire         i_sel2to7;         // Routing selection signal
+    wire         i_active2to7;      // Active signal
+
     // Bus-switch SI3 to MI0 signals
     wire         i_sel3to0;         // Routing selection signal
     wire         i_active3to0;      // Active signal
@@ -917,14 +982,19 @@ module nanosoc_busmatrix (
     wire         i_sel3to7;         // Routing selection signal
     wire         i_active3to7;      // Active signal
 
+    // Bus-switch SI3 to MI8 signals
+    wire         i_sel3to8;         // Routing selection signal
+    wire         i_active3to8;      // Active signal
+
     wire         i_hready_mux__bootrom_0;    // Internal HREADYMUXM for MI0
-    wire         i_hready_mux__imem_0;    // Internal HREADYMUXM for MI1
-    wire         i_hready_mux__dmem_0;    // Internal HREADYMUXM for MI2
-    wire         i_hready_mux__sysio;    // Internal HREADYMUXM for MI3
-    wire         i_hready_mux__expram_l;    // Internal HREADYMUXM for MI4
-    wire         i_hready_mux__expram_h;    // Internal HREADYMUXM for MI5
-    wire         i_hready_mux__exp;    // Internal HREADYMUXM for MI6
-    wire         i_hready_mux__systable;    // Internal HREADYMUXM for MI7
+    wire         i_hready_mux__extrom_0;    // Internal HREADYMUXM for MI1
+    wire         i_hready_mux__imem_0;    // Internal HREADYMUXM for MI2
+    wire         i_hready_mux__dmem_0;    // Internal HREADYMUXM for MI3
+    wire         i_hready_mux__sysio;    // Internal HREADYMUXM for MI4
+    wire         i_hready_mux__expram_l;    // Internal HREADYMUXM for MI5
+    wire         i_hready_mux__expram_h;    // Internal HREADYMUXM for MI6
+    wire         i_hready_mux__exp;    // Internal HREADYMUXM for MI7
+    wire         i_hready_mux__systable;    // Internal HREADYMUXM for MI8
 
 
 // -----------------------------------------------------------------------------
@@ -1111,7 +1181,7 @@ module nanosoc_busmatrix (
     .HRESETn    (HRESETn),
 
     // Internal address remapping control
-    .remapping_dec  ( REMAP[0] ),
+    .remapping_dec  ( { REMAP[1], REMAP[0] } ),
 
     // Signals from Input stage SI0
     .HREADYS    (HREADY_DEBUG),
@@ -1127,45 +1197,51 @@ module nanosoc_busmatrix (
 
     // Control/Response for Output Stage MI1
     .active_dec1    (i_active0to1),
-    .readyout_dec1  (i_hready_mux__imem_0),
-    .resp_dec1      (HRESP_IMEM_0),
-    .rdata_dec1     (HRDATA_IMEM_0),
+    .readyout_dec1  (i_hready_mux__extrom_0),
+    .resp_dec1      (HRESP_EXTROM_0),
+    .rdata_dec1     (HRDATA_EXTROM_0),
 
     // Control/Response for Output Stage MI2
     .active_dec2    (i_active0to2),
-    .readyout_dec2  (i_hready_mux__dmem_0),
-    .resp_dec2      (HRESP_DMEM_0),
-    .rdata_dec2     (HRDATA_DMEM_0),
+    .readyout_dec2  (i_hready_mux__imem_0),
+    .resp_dec2      (HRESP_IMEM_0),
+    .rdata_dec2     (HRDATA_IMEM_0),
 
     // Control/Response for Output Stage MI3
     .active_dec3    (i_active0to3),
-    .readyout_dec3  (i_hready_mux__sysio),
-    .resp_dec3      (HRESP_SYSIO),
-    .rdata_dec3     (HRDATA_SYSIO),
+    .readyout_dec3  (i_hready_mux__dmem_0),
+    .resp_dec3      (HRESP_DMEM_0),
+    .rdata_dec3     (HRDATA_DMEM_0),
 
     // Control/Response for Output Stage MI4
     .active_dec4    (i_active0to4),
-    .readyout_dec4  (i_hready_mux__expram_l),
-    .resp_dec4      (HRESP_EXPRAM_L),
-    .rdata_dec4     (HRDATA_EXPRAM_L),
+    .readyout_dec4  (i_hready_mux__sysio),
+    .resp_dec4      (HRESP_SYSIO),
+    .rdata_dec4     (HRDATA_SYSIO),
 
     // Control/Response for Output Stage MI5
     .active_dec5    (i_active0to5),
-    .readyout_dec5  (i_hready_mux__expram_h),
-    .resp_dec5      (HRESP_EXPRAM_H),
-    .rdata_dec5     (HRDATA_EXPRAM_H),
+    .readyout_dec5  (i_hready_mux__expram_l),
+    .resp_dec5      (HRESP_EXPRAM_L),
+    .rdata_dec5     (HRDATA_EXPRAM_L),
 
     // Control/Response for Output Stage MI6
     .active_dec6    (i_active0to6),
-    .readyout_dec6  (i_hready_mux__exp),
-    .resp_dec6      (HRESP_EXP),
-    .rdata_dec6     (HRDATA_EXP),
+    .readyout_dec6  (i_hready_mux__expram_h),
+    .resp_dec6      (HRESP_EXPRAM_H),
+    .rdata_dec6     (HRDATA_EXPRAM_H),
 
     // Control/Response for Output Stage MI7
     .active_dec7    (i_active0to7),
-    .readyout_dec7  (i_hready_mux__systable),
-    .resp_dec7      (HRESP_SYSTABLE),
-    .rdata_dec7     (HRDATA_SYSTABLE),
+    .readyout_dec7  (i_hready_mux__exp),
+    .resp_dec7      (HRESP_EXP),
+    .rdata_dec7     (HRDATA_EXP),
+
+    // Control/Response for Output Stage MI8
+    .active_dec8    (i_active0to8),
+    .readyout_dec8  (i_hready_mux__systable),
+    .resp_dec8      (HRESP_SYSTABLE),
+    .rdata_dec8     (HRDATA_SYSTABLE),
 
     .sel_dec0       (i_sel0to0),
     .sel_dec1       (i_sel0to1),
@@ -1175,6 +1251,7 @@ module nanosoc_busmatrix (
     .sel_dec5       (i_sel0to5),
     .sel_dec6       (i_sel0to6),
     .sel_dec7       (i_sel0to7),
+    .sel_dec8       (i_sel0to8),
 
     .active_dec     (i_active0),
     .HREADYOUTS (i_readyout0),
@@ -1205,39 +1282,45 @@ module nanosoc_busmatrix (
 
     // Control/Response for Output Stage MI1
     .active_dec1    (i_active1to1),
-    .readyout_dec1  (i_hready_mux__imem_0),
-    .resp_dec1      (HRESP_IMEM_0),
-    .rdata_dec1     (HRDATA_IMEM_0),
+    .readyout_dec1  (i_hready_mux__extrom_0),
+    .resp_dec1      (HRESP_EXTROM_0),
+    .rdata_dec1     (HRDATA_EXTROM_0),
 
     // Control/Response for Output Stage MI2
     .active_dec2    (i_active1to2),
-    .readyout_dec2  (i_hready_mux__dmem_0),
-    .resp_dec2      (HRESP_DMEM_0),
-    .rdata_dec2     (HRDATA_DMEM_0),
+    .readyout_dec2  (i_hready_mux__imem_0),
+    .resp_dec2      (HRESP_IMEM_0),
+    .rdata_dec2     (HRDATA_IMEM_0),
 
     // Control/Response for Output Stage MI3
     .active_dec3    (i_active1to3),
-    .readyout_dec3  (i_hready_mux__sysio),
-    .resp_dec3      (HRESP_SYSIO),
-    .rdata_dec3     (HRDATA_SYSIO),
+    .readyout_dec3  (i_hready_mux__dmem_0),
+    .resp_dec3      (HRESP_DMEM_0),
+    .rdata_dec3     (HRDATA_DMEM_0),
 
     // Control/Response for Output Stage MI4
     .active_dec4    (i_active1to4),
-    .readyout_dec4  (i_hready_mux__expram_l),
-    .resp_dec4      (HRESP_EXPRAM_L),
-    .rdata_dec4     (HRDATA_EXPRAM_L),
+    .readyout_dec4  (i_hready_mux__sysio),
+    .resp_dec4      (HRESP_SYSIO),
+    .rdata_dec4     (HRDATA_SYSIO),
 
     // Control/Response for Output Stage MI5
     .active_dec5    (i_active1to5),
-    .readyout_dec5  (i_hready_mux__expram_h),
-    .resp_dec5      (HRESP_EXPRAM_H),
-    .rdata_dec5     (HRDATA_EXPRAM_H),
+    .readyout_dec5  (i_hready_mux__expram_l),
+    .resp_dec5      (HRESP_EXPRAM_L),
+    .rdata_dec5     (HRDATA_EXPRAM_L),
 
     // Control/Response for Output Stage MI6
     .active_dec6    (i_active1to6),
-    .readyout_dec6  (i_hready_mux__exp),
-    .resp_dec6      (HRESP_EXP),
-    .rdata_dec6     (HRDATA_EXP),
+    .readyout_dec6  (i_hready_mux__expram_h),
+    .resp_dec6      (HRESP_EXPRAM_H),
+    .rdata_dec6     (HRDATA_EXPRAM_H),
+
+    // Control/Response for Output Stage MI7
+    .active_dec7    (i_active1to7),
+    .readyout_dec7  (i_hready_mux__exp),
+    .resp_dec7      (HRESP_EXP),
+    .rdata_dec7     (HRDATA_EXP),
 
     .sel_dec0       (i_sel1to0),
     .sel_dec1       (i_sel1to1),
@@ -1246,6 +1329,7 @@ module nanosoc_busmatrix (
     .sel_dec4       (i_sel1to4),
     .sel_dec5       (i_sel1to5),
     .sel_dec6       (i_sel1to6),
+    .sel_dec7       (i_sel1to7),
 
     .active_dec     (i_active1),
     .HREADYOUTS (i_readyout1),
@@ -1276,39 +1360,45 @@ module nanosoc_busmatrix (
 
     // Control/Response for Output Stage MI1
     .active_dec1    (i_active2to1),
-    .readyout_dec1  (i_hready_mux__imem_0),
-    .resp_dec1      (HRESP_IMEM_0),
-    .rdata_dec1     (HRDATA_IMEM_0),
+    .readyout_dec1  (i_hready_mux__extrom_0),
+    .resp_dec1      (HRESP_EXTROM_0),
+    .rdata_dec1     (HRDATA_EXTROM_0),
 
     // Control/Response for Output Stage MI2
     .active_dec2    (i_active2to2),
-    .readyout_dec2  (i_hready_mux__dmem_0),
-    .resp_dec2      (HRESP_DMEM_0),
-    .rdata_dec2     (HRDATA_DMEM_0),
+    .readyout_dec2  (i_hready_mux__imem_0),
+    .resp_dec2      (HRESP_IMEM_0),
+    .rdata_dec2     (HRDATA_IMEM_0),
 
     // Control/Response for Output Stage MI3
     .active_dec3    (i_active2to3),
-    .readyout_dec3  (i_hready_mux__sysio),
-    .resp_dec3      (HRESP_SYSIO),
-    .rdata_dec3     (HRDATA_SYSIO),
+    .readyout_dec3  (i_hready_mux__dmem_0),
+    .resp_dec3      (HRESP_DMEM_0),
+    .rdata_dec3     (HRDATA_DMEM_0),
 
     // Control/Response for Output Stage MI4
     .active_dec4    (i_active2to4),
-    .readyout_dec4  (i_hready_mux__expram_l),
-    .resp_dec4      (HRESP_EXPRAM_L),
-    .rdata_dec4     (HRDATA_EXPRAM_L),
+    .readyout_dec4  (i_hready_mux__sysio),
+    .resp_dec4      (HRESP_SYSIO),
+    .rdata_dec4     (HRDATA_SYSIO),
 
     // Control/Response for Output Stage MI5
     .active_dec5    (i_active2to5),
-    .readyout_dec5  (i_hready_mux__expram_h),
-    .resp_dec5      (HRESP_EXPRAM_H),
-    .rdata_dec5     (HRDATA_EXPRAM_H),
+    .readyout_dec5  (i_hready_mux__expram_l),
+    .resp_dec5      (HRESP_EXPRAM_L),
+    .rdata_dec5     (HRDATA_EXPRAM_L),
 
     // Control/Response for Output Stage MI6
     .active_dec6    (i_active2to6),
-    .readyout_dec6  (i_hready_mux__exp),
-    .resp_dec6      (HRESP_EXP),
-    .rdata_dec6     (HRDATA_EXP),
+    .readyout_dec6  (i_hready_mux__expram_h),
+    .resp_dec6      (HRESP_EXPRAM_H),
+    .rdata_dec6     (HRDATA_EXPRAM_H),
+
+    // Control/Response for Output Stage MI7
+    .active_dec7    (i_active2to7),
+    .readyout_dec7  (i_hready_mux__exp),
+    .resp_dec7      (HRESP_EXP),
+    .rdata_dec7     (HRDATA_EXP),
 
     .sel_dec0       (i_sel2to0),
     .sel_dec1       (i_sel2to1),
@@ -1317,6 +1407,7 @@ module nanosoc_busmatrix (
     .sel_dec4       (i_sel2to4),
     .sel_dec5       (i_sel2to5),
     .sel_dec6       (i_sel2to6),
+    .sel_dec7       (i_sel2to7),
 
     .active_dec     (i_active2),
     .HREADYOUTS (i_readyout2),
@@ -1334,7 +1425,7 @@ module nanosoc_busmatrix (
     .HRESETn    (HRESETn),
 
     // Internal address remapping control
-    .remapping_dec  ( REMAP[0] ),
+    .remapping_dec  ( { REMAP[1], REMAP[0] } ),
 
     // Signals from Input stage SI3
     .HREADYS    (HREADY_CPU_0),
@@ -1350,45 +1441,51 @@ module nanosoc_busmatrix (
 
     // Control/Response for Output Stage MI1
     .active_dec1    (i_active3to1),
-    .readyout_dec1  (i_hready_mux__imem_0),
-    .resp_dec1      (HRESP_IMEM_0),
-    .rdata_dec1     (HRDATA_IMEM_0),
+    .readyout_dec1  (i_hready_mux__extrom_0),
+    .resp_dec1      (HRESP_EXTROM_0),
+    .rdata_dec1     (HRDATA_EXTROM_0),
 
     // Control/Response for Output Stage MI2
     .active_dec2    (i_active3to2),
-    .readyout_dec2  (i_hready_mux__dmem_0),
-    .resp_dec2      (HRESP_DMEM_0),
-    .rdata_dec2     (HRDATA_DMEM_0),
+    .readyout_dec2  (i_hready_mux__imem_0),
+    .resp_dec2      (HRESP_IMEM_0),
+    .rdata_dec2     (HRDATA_IMEM_0),
 
     // Control/Response for Output Stage MI3
     .active_dec3    (i_active3to3),
-    .readyout_dec3  (i_hready_mux__sysio),
-    .resp_dec3      (HRESP_SYSIO),
-    .rdata_dec3     (HRDATA_SYSIO),
+    .readyout_dec3  (i_hready_mux__dmem_0),
+    .resp_dec3      (HRESP_DMEM_0),
+    .rdata_dec3     (HRDATA_DMEM_0),
 
     // Control/Response for Output Stage MI4
     .active_dec4    (i_active3to4),
-    .readyout_dec4  (i_hready_mux__expram_l),
-    .resp_dec4      (HRESP_EXPRAM_L),
-    .rdata_dec4     (HRDATA_EXPRAM_L),
+    .readyout_dec4  (i_hready_mux__sysio),
+    .resp_dec4      (HRESP_SYSIO),
+    .rdata_dec4     (HRDATA_SYSIO),
 
     // Control/Response for Output Stage MI5
     .active_dec5    (i_active3to5),
-    .readyout_dec5  (i_hready_mux__expram_h),
-    .resp_dec5      (HRESP_EXPRAM_H),
-    .rdata_dec5     (HRDATA_EXPRAM_H),
+    .readyout_dec5  (i_hready_mux__expram_l),
+    .resp_dec5      (HRESP_EXPRAM_L),
+    .rdata_dec5     (HRDATA_EXPRAM_L),
 
     // Control/Response for Output Stage MI6
     .active_dec6    (i_active3to6),
-    .readyout_dec6  (i_hready_mux__exp),
-    .resp_dec6      (HRESP_EXP),
-    .rdata_dec6     (HRDATA_EXP),
+    .readyout_dec6  (i_hready_mux__expram_h),
+    .resp_dec6      (HRESP_EXPRAM_H),
+    .rdata_dec6     (HRDATA_EXPRAM_H),
 
     // Control/Response for Output Stage MI7
     .active_dec7    (i_active3to7),
-    .readyout_dec7  (i_hready_mux__systable),
-    .resp_dec7      (HRESP_SYSTABLE),
-    .rdata_dec7     (HRDATA_SYSTABLE),
+    .readyout_dec7  (i_hready_mux__exp),
+    .resp_dec7      (HRESP_EXP),
+    .rdata_dec7     (HRDATA_EXP),
+
+    // Control/Response for Output Stage MI8
+    .active_dec8    (i_active3to8),
+    .readyout_dec8  (i_hready_mux__systable),
+    .resp_dec8      (HRESP_SYSTABLE),
+    .rdata_dec8     (HRDATA_SYSTABLE),
 
     .sel_dec0       (i_sel3to0),
     .sel_dec1       (i_sel3to1),
@@ -1398,6 +1495,7 @@ module nanosoc_busmatrix (
     .sel_dec5       (i_sel3to5),
     .sel_dec6       (i_sel3to6),
     .sel_dec7       (i_sel3to7),
+    .sel_dec8       (i_sel3to8),
 
     .active_dec     (i_active3),
     .HREADYOUTS (i_readyout3),
@@ -1494,7 +1592,7 @@ module nanosoc_busmatrix (
 
 
   // Output stage for MI1
-  nanosoc_target_output_IMEM_0 u_nanosoc_target_output_imem_0_1 (
+  nanosoc_target_output_EXTROM_0 u_nanosoc_target_output_extrom_0_1 (
 
     // Common AHB signals
     .HCLK       (HCLK),
@@ -1553,13 +1651,99 @@ module nanosoc_busmatrix (
     .held_tran_op3  (i_held_tran3),
 
     // Slave read data and response
-    .HREADYOUTM (HREADYOUT_IMEM_0),
+    .HREADYOUTM (HREADYOUT_EXTROM_0),
 
     .active_op0    (i_active0to1),
     .active_op1    (i_active1to1),
     .active_op2    (i_active2to1),
     .active_op3    (i_active3to1),
 
+    // Slave Address/Control Signals
+    .HSELM      (HSEL_EXTROM_0),
+    .HADDRM     (HADDR_EXTROM_0),
+    .HTRANSM    (HTRANS_EXTROM_0),
+    .HWRITEM    (HWRITE_EXTROM_0),
+    .HSIZEM     (HSIZE_EXTROM_0),
+    .HBURSTM    (HBURST_EXTROM_0),
+    .HPROTM     (HPROT_EXTROM_0),
+    .HMASTERM   (HMASTER_EXTROM_0),
+    .HMASTLOCKM (HMASTLOCK_EXTROM_0),
+    .HREADYMUXM (i_hready_mux__extrom_0),
+    .HWDATAM    (HWDATA_EXTROM_0)
+
+    );
+
+  // Drive output with internal version
+  assign HREADYMUX_EXTROM_0 = i_hready_mux__extrom_0;
+
+
+  // Output stage for MI2
+  nanosoc_target_output_IMEM_0 u_nanosoc_target_output_imem_0_2 (
+
+    // Common AHB signals
+    .HCLK       (HCLK),
+    .HRESETn    (HRESETn),
+
+    // Port 0 Signals
+    .sel_op0       (i_sel0to2),
+    .addr_op0      (i_addr0),
+    .trans_op0     (i_trans0),
+    .write_op0     (i_write0),
+    .size_op0      (i_size0),
+    .burst_op0     (i_burst0),
+    .prot_op0      (i_prot0),
+    .master_op0    (i_master0),
+    .mastlock_op0  (i_mastlock0),
+    .wdata_op0     (HWDATA_DEBUG),
+    .held_tran_op0  (i_held_tran0),
+
+    // Port 1 Signals
+    .sel_op1       (i_sel1to2),
+    .addr_op1      (i_addr1),
+    .trans_op1     (i_trans1),
+    .write_op1     (i_write1),
+    .size_op1      (i_size1),
+    .burst_op1     (i_burst1),
+    .prot_op1      (i_prot1),
+    .master_op1    (i_master1),
+    .mastlock_op1  (i_mastlock1),
+    .wdata_op1     (HWDATA_DMAC_0),
+    .held_tran_op1  (i_held_tran1),
+
+    // Port 2 Signals
+    .sel_op2       (i_sel2to2),
+    .addr_op2      (i_addr2),
+    .trans_op2     (i_trans2),
+    .write_op2     (i_write2),
+    .size_op2      (i_size2),
+    .burst_op2     (i_burst2),
+    .prot_op2      (i_prot2),
+    .master_op2    (i_master2),
+    .mastlock_op2  (i_mastlock2),
+    .wdata_op2     (HWDATA_DMAC_1),
+    .held_tran_op2  (i_held_tran2),
+
+    // Port 3 Signals
+    .sel_op3       (i_sel3to2),
+    .addr_op3      (i_addr3),
+    .trans_op3     (i_trans3),
+    .write_op3     (i_write3),
+    .size_op3      (i_size3),
+    .burst_op3     (i_burst3),
+    .prot_op3      (i_prot3),
+    .master_op3    (i_master3),
+    .mastlock_op3  (i_mastlock3),
+    .wdata_op3     (HWDATA_CPU_0),
+    .held_tran_op3  (i_held_tran3),
+
+    // Slave read data and response
+    .HREADYOUTM (HREADYOUT_IMEM_0),
+
+    .active_op0    (i_active0to2),
+    .active_op1    (i_active1to2),
+    .active_op2    (i_active2to2),
+    .active_op3    (i_active3to2),
+
     // Slave Address/Control Signals
     .HSELM      (HSEL_IMEM_0),
     .HADDRM     (HADDR_IMEM_0),
@@ -1579,15 +1763,15 @@ module nanosoc_busmatrix (
   assign HREADYMUX_IMEM_0 = i_hready_mux__imem_0;
 
 
-  // Output stage for MI2
-  nanosoc_target_output_DMEM_0 u_nanosoc_target_output_dmem_0_2 (
+  // Output stage for MI3
+  nanosoc_target_output_DMEM_0 u_nanosoc_target_output_dmem_0_3 (
 
     // Common AHB signals
     .HCLK       (HCLK),
     .HRESETn    (HRESETn),
 
     // Port 0 Signals
-    .sel_op0       (i_sel0to2),
+    .sel_op0       (i_sel0to3),
     .addr_op0      (i_addr0),
     .trans_op0     (i_trans0),
     .write_op0     (i_write0),
@@ -1600,7 +1784,7 @@ module nanosoc_busmatrix (
     .held_tran_op0  (i_held_tran0),
 
     // Port 1 Signals
-    .sel_op1       (i_sel1to2),
+    .sel_op1       (i_sel1to3),
     .addr_op1      (i_addr1),
     .trans_op1     (i_trans1),
     .write_op1     (i_write1),
@@ -1613,7 +1797,7 @@ module nanosoc_busmatrix (
     .held_tran_op1  (i_held_tran1),
 
     // Port 2 Signals
-    .sel_op2       (i_sel2to2),
+    .sel_op2       (i_sel2to3),
     .addr_op2      (i_addr2),
     .trans_op2     (i_trans2),
     .write_op2     (i_write2),
@@ -1626,7 +1810,7 @@ module nanosoc_busmatrix (
     .held_tran_op2  (i_held_tran2),
 
     // Port 3 Signals
-    .sel_op3       (i_sel3to2),
+    .sel_op3       (i_sel3to3),
     .addr_op3      (i_addr3),
     .trans_op3     (i_trans3),
     .write_op3     (i_write3),
@@ -1641,10 +1825,10 @@ module nanosoc_busmatrix (
     // Slave read data and response
     .HREADYOUTM (HREADYOUT_DMEM_0),
 
-    .active_op0    (i_active0to2),
-    .active_op1    (i_active1to2),
-    .active_op2    (i_active2to2),
-    .active_op3    (i_active3to2),
+    .active_op0    (i_active0to3),
+    .active_op1    (i_active1to3),
+    .active_op2    (i_active2to3),
+    .active_op3    (i_active3to3),
 
     // Slave Address/Control Signals
     .HSELM      (HSEL_DMEM_0),
@@ -1665,15 +1849,15 @@ module nanosoc_busmatrix (
   assign HREADYMUX_DMEM_0 = i_hready_mux__dmem_0;
 
 
-  // Output stage for MI3
-  nanosoc_target_output_SYSIO u_nanosoc_target_output_sysio_3 (
+  // Output stage for MI4
+  nanosoc_target_output_SYSIO u_nanosoc_target_output_sysio_4 (
 
     // Common AHB signals
     .HCLK       (HCLK),
     .HRESETn    (HRESETn),
 
     // Port 0 Signals
-    .sel_op0       (i_sel0to3),
+    .sel_op0       (i_sel0to4),
     .addr_op0      (i_addr0),
     .trans_op0     (i_trans0),
     .write_op0     (i_write0),
@@ -1686,7 +1870,7 @@ module nanosoc_busmatrix (
     .held_tran_op0  (i_held_tran0),
 
     // Port 1 Signals
-    .sel_op1       (i_sel1to3),
+    .sel_op1       (i_sel1to4),
     .addr_op1      (i_addr1),
     .trans_op1     (i_trans1),
     .write_op1     (i_write1),
@@ -1699,7 +1883,7 @@ module nanosoc_busmatrix (
     .held_tran_op1  (i_held_tran1),
 
     // Port 2 Signals
-    .sel_op2       (i_sel2to3),
+    .sel_op2       (i_sel2to4),
     .addr_op2      (i_addr2),
     .trans_op2     (i_trans2),
     .write_op2     (i_write2),
@@ -1712,7 +1896,7 @@ module nanosoc_busmatrix (
     .held_tran_op2  (i_held_tran2),
 
     // Port 3 Signals
-    .sel_op3       (i_sel3to3),
+    .sel_op3       (i_sel3to4),
     .addr_op3      (i_addr3),
     .trans_op3     (i_trans3),
     .write_op3     (i_write3),
@@ -1727,10 +1911,10 @@ module nanosoc_busmatrix (
     // Slave read data and response
     .HREADYOUTM (HREADYOUT_SYSIO),
 
-    .active_op0    (i_active0to3),
-    .active_op1    (i_active1to3),
-    .active_op2    (i_active2to3),
-    .active_op3    (i_active3to3),
+    .active_op0    (i_active0to4),
+    .active_op1    (i_active1to4),
+    .active_op2    (i_active2to4),
+    .active_op3    (i_active3to4),
 
     // Slave Address/Control Signals
     .HSELM      (HSEL_SYSIO),
@@ -1751,15 +1935,15 @@ module nanosoc_busmatrix (
   assign HREADYMUX_SYSIO = i_hready_mux__sysio;
 
 
-  // Output stage for MI4
-  nanosoc_target_output_EXPRAM_L u_nanosoc_target_output_expram_l_4 (
+  // Output stage for MI5
+  nanosoc_target_output_EXPRAM_L u_nanosoc_target_output_expram_l_5 (
 
     // Common AHB signals
     .HCLK       (HCLK),
     .HRESETn    (HRESETn),
 
     // Port 0 Signals
-    .sel_op0       (i_sel0to4),
+    .sel_op0       (i_sel0to5),
     .addr_op0      (i_addr0),
     .trans_op0     (i_trans0),
     .write_op0     (i_write0),
@@ -1772,7 +1956,7 @@ module nanosoc_busmatrix (
     .held_tran_op0  (i_held_tran0),
 
     // Port 1 Signals
-    .sel_op1       (i_sel1to4),
+    .sel_op1       (i_sel1to5),
     .addr_op1      (i_addr1),
     .trans_op1     (i_trans1),
     .write_op1     (i_write1),
@@ -1785,7 +1969,7 @@ module nanosoc_busmatrix (
     .held_tran_op1  (i_held_tran1),
 
     // Port 2 Signals
-    .sel_op2       (i_sel2to4),
+    .sel_op2       (i_sel2to5),
     .addr_op2      (i_addr2),
     .trans_op2     (i_trans2),
     .write_op2     (i_write2),
@@ -1798,7 +1982,7 @@ module nanosoc_busmatrix (
     .held_tran_op2  (i_held_tran2),
 
     // Port 3 Signals
-    .sel_op3       (i_sel3to4),
+    .sel_op3       (i_sel3to5),
     .addr_op3      (i_addr3),
     .trans_op3     (i_trans3),
     .write_op3     (i_write3),
@@ -1813,10 +1997,10 @@ module nanosoc_busmatrix (
     // Slave read data and response
     .HREADYOUTM (HREADYOUT_EXPRAM_L),
 
-    .active_op0    (i_active0to4),
-    .active_op1    (i_active1to4),
-    .active_op2    (i_active2to4),
-    .active_op3    (i_active3to4),
+    .active_op0    (i_active0to5),
+    .active_op1    (i_active1to5),
+    .active_op2    (i_active2to5),
+    .active_op3    (i_active3to5),
 
     // Slave Address/Control Signals
     .HSELM      (HSEL_EXPRAM_L),
@@ -1837,15 +2021,15 @@ module nanosoc_busmatrix (
   assign HREADYMUX_EXPRAM_L = i_hready_mux__expram_l;
 
 
-  // Output stage for MI5
-  nanosoc_target_output_EXPRAM_H u_nanosoc_target_output_expram_h_5 (
+  // Output stage for MI6
+  nanosoc_target_output_EXPRAM_H u_nanosoc_target_output_expram_h_6 (
 
     // Common AHB signals
     .HCLK       (HCLK),
     .HRESETn    (HRESETn),
 
     // Port 0 Signals
-    .sel_op0       (i_sel0to5),
+    .sel_op0       (i_sel0to6),
     .addr_op0      (i_addr0),
     .trans_op0     (i_trans0),
     .write_op0     (i_write0),
@@ -1858,7 +2042,7 @@ module nanosoc_busmatrix (
     .held_tran_op0  (i_held_tran0),
 
     // Port 1 Signals
-    .sel_op1       (i_sel1to5),
+    .sel_op1       (i_sel1to6),
     .addr_op1      (i_addr1),
     .trans_op1     (i_trans1),
     .write_op1     (i_write1),
@@ -1871,7 +2055,7 @@ module nanosoc_busmatrix (
     .held_tran_op1  (i_held_tran1),
 
     // Port 2 Signals
-    .sel_op2       (i_sel2to5),
+    .sel_op2       (i_sel2to6),
     .addr_op2      (i_addr2),
     .trans_op2     (i_trans2),
     .write_op2     (i_write2),
@@ -1884,7 +2068,7 @@ module nanosoc_busmatrix (
     .held_tran_op2  (i_held_tran2),
 
     // Port 3 Signals
-    .sel_op3       (i_sel3to5),
+    .sel_op3       (i_sel3to6),
     .addr_op3      (i_addr3),
     .trans_op3     (i_trans3),
     .write_op3     (i_write3),
@@ -1899,10 +2083,10 @@ module nanosoc_busmatrix (
     // Slave read data and response
     .HREADYOUTM (HREADYOUT_EXPRAM_H),
 
-    .active_op0    (i_active0to5),
-    .active_op1    (i_active1to5),
-    .active_op2    (i_active2to5),
-    .active_op3    (i_active3to5),
+    .active_op0    (i_active0to6),
+    .active_op1    (i_active1to6),
+    .active_op2    (i_active2to6),
+    .active_op3    (i_active3to6),
 
     // Slave Address/Control Signals
     .HSELM      (HSEL_EXPRAM_H),
@@ -1923,15 +2107,15 @@ module nanosoc_busmatrix (
   assign HREADYMUX_EXPRAM_H = i_hready_mux__expram_h;
 
 
-  // Output stage for MI6
-  nanosoc_target_output_EXP u_nanosoc_target_output_exp_6 (
+  // Output stage for MI7
+  nanosoc_target_output_EXP u_nanosoc_target_output_exp_7 (
 
     // Common AHB signals
     .HCLK       (HCLK),
     .HRESETn    (HRESETn),
 
     // Port 0 Signals
-    .sel_op0       (i_sel0to6),
+    .sel_op0       (i_sel0to7),
     .addr_op0      (i_addr0),
     .trans_op0     (i_trans0),
     .write_op0     (i_write0),
@@ -1944,7 +2128,7 @@ module nanosoc_busmatrix (
     .held_tran_op0  (i_held_tran0),
 
     // Port 1 Signals
-    .sel_op1       (i_sel1to6),
+    .sel_op1       (i_sel1to7),
     .addr_op1      (i_addr1),
     .trans_op1     (i_trans1),
     .write_op1     (i_write1),
@@ -1957,7 +2141,7 @@ module nanosoc_busmatrix (
     .held_tran_op1  (i_held_tran1),
 
     // Port 2 Signals
-    .sel_op2       (i_sel2to6),
+    .sel_op2       (i_sel2to7),
     .addr_op2      (i_addr2),
     .trans_op2     (i_trans2),
     .write_op2     (i_write2),
@@ -1970,7 +2154,7 @@ module nanosoc_busmatrix (
     .held_tran_op2  (i_held_tran2),
 
     // Port 3 Signals
-    .sel_op3       (i_sel3to6),
+    .sel_op3       (i_sel3to7),
     .addr_op3      (i_addr3),
     .trans_op3     (i_trans3),
     .write_op3     (i_write3),
@@ -1985,10 +2169,10 @@ module nanosoc_busmatrix (
     // Slave read data and response
     .HREADYOUTM (HREADYOUT_EXP),
 
-    .active_op0    (i_active0to6),
-    .active_op1    (i_active1to6),
-    .active_op2    (i_active2to6),
-    .active_op3    (i_active3to6),
+    .active_op0    (i_active0to7),
+    .active_op1    (i_active1to7),
+    .active_op2    (i_active2to7),
+    .active_op3    (i_active3to7),
 
     // Slave Address/Control Signals
     .HSELM      (HSEL_EXP),
@@ -2009,15 +2193,15 @@ module nanosoc_busmatrix (
   assign HREADYMUX_EXP = i_hready_mux__exp;
 
 
-  // Output stage for MI7
-  nanosoc_target_output_SYSTABLE u_nanosoc_target_output_systable_7 (
+  // Output stage for MI8
+  nanosoc_target_output_SYSTABLE u_nanosoc_target_output_systable_8 (
 
     // Common AHB signals
     .HCLK       (HCLK),
     .HRESETn    (HRESETn),
 
     // Port 0 Signals
-    .sel_op0       (i_sel0to7),
+    .sel_op0       (i_sel0to8),
     .addr_op0      (i_addr0),
     .trans_op0     (i_trans0),
     .write_op0     (i_write0),
@@ -2030,7 +2214,7 @@ module nanosoc_busmatrix (
     .held_tran_op0  (i_held_tran0),
 
     // Port 3 Signals
-    .sel_op3       (i_sel3to7),
+    .sel_op3       (i_sel3to8),
     .addr_op3      (i_addr3),
     .trans_op3     (i_trans3),
     .write_op3     (i_write3),
@@ -2045,8 +2229,8 @@ module nanosoc_busmatrix (
     // Slave read data and response
     .HREADYOUTM (HREADYOUT_SYSTABLE),
 
-    .active_op0    (i_active0to7),
-    .active_op3    (i_active3to7),
+    .active_op0    (i_active0to8),
+    .active_op3    (i_active3to8),
 
     // Slave Address/Control Signals
     .HSELM      (HSEL_SYSTABLE),
diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix_default_slave.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix_default_slave.v
index f96bab0acd2ced0fbee9377e9549d669cf8d0f11..46af198dea1198977b03b61046fca81b2cb79192 100644
--- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix_default_slave.v
+++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix_default_slave.v
@@ -3,7 +3,7 @@
 // only be used by a person authorised under and to the extent permitted
 // by a subsisting licensing agreement from Arm Limited or its affiliates.
 //
-//            (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates.
+//            (C) COPYRIGHT 2001-2025 Arm Limited or its affiliates.
 //                ALL RIGHTS RESERVED
 //
 // This entire notice must be reproduced on all copies of this file
diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix_lite.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix_lite.v
index f10532b57d41779da310eb8beb08f555895c44fa..c317d484f3c5bd5372211927764203f1a01e798d 100644
--- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix_lite.v
+++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix_lite.v
@@ -3,7 +3,7 @@
 // only be used by a person authorised under and to the extent permitted
 // by a subsisting licensing agreement from Arm Limited or its affiliates.
 //
-//            (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates.
+//            (C) COPYRIGHT 2001-2025 Arm Limited or its affiliates.
 //                ALL RIGHTS RESERVED
 //
 // This entire notice must be reproduced on all copies of this file
@@ -85,36 +85,41 @@ module nanosoc_busmatrix_lite (
     HRESP_BOOTROM_0,
 
     // Output port MI1 (inputs from slave 1)
+    HRDATA_EXTROM_0,
+    HREADYOUT_EXTROM_0,
+    HRESP_EXTROM_0,
+
+    // Output port MI2 (inputs from slave 2)
     HRDATA_IMEM_0,
     HREADYOUT_IMEM_0,
     HRESP_IMEM_0,
 
-    // Output port MI2 (inputs from slave 2)
+    // Output port MI3 (inputs from slave 3)
     HRDATA_DMEM_0,
     HREADYOUT_DMEM_0,
     HRESP_DMEM_0,
 
-    // Output port MI3 (inputs from slave 3)
+    // Output port MI4 (inputs from slave 4)
     HRDATA_SYSIO,
     HREADYOUT_SYSIO,
     HRESP_SYSIO,
 
-    // Output port MI4 (inputs from slave 4)
+    // Output port MI5 (inputs from slave 5)
     HRDATA_EXPRAM_L,
     HREADYOUT_EXPRAM_L,
     HRESP_EXPRAM_L,
 
-    // Output port MI5 (inputs from slave 5)
+    // Output port MI6 (inputs from slave 6)
     HRDATA_EXPRAM_H,
     HREADYOUT_EXPRAM_H,
     HRESP_EXPRAM_H,
 
-    // Output port MI6 (inputs from slave 6)
+    // Output port MI7 (inputs from slave 7)
     HRDATA_EXP,
     HREADYOUT_EXP,
     HRESP_EXP,
 
-    // Output port MI7 (inputs from slave 7)
+    // Output port MI8 (inputs from slave 8)
     HRDATA_SYSTABLE,
     HREADYOUT_SYSTABLE,
     HRESP_SYSTABLE,
@@ -137,6 +142,18 @@ module nanosoc_busmatrix_lite (
     HREADYMUX_BOOTROM_0,
 
     // Output port MI1 (outputs to slave 1)
+    HSEL_EXTROM_0,
+    HADDR_EXTROM_0,
+    HTRANS_EXTROM_0,
+    HWRITE_EXTROM_0,
+    HSIZE_EXTROM_0,
+    HBURST_EXTROM_0,
+    HPROT_EXTROM_0,
+    HWDATA_EXTROM_0,
+    HMASTLOCK_EXTROM_0,
+    HREADYMUX_EXTROM_0,
+
+    // Output port MI2 (outputs to slave 2)
     HSEL_IMEM_0,
     HADDR_IMEM_0,
     HTRANS_IMEM_0,
@@ -148,7 +165,7 @@ module nanosoc_busmatrix_lite (
     HMASTLOCK_IMEM_0,
     HREADYMUX_IMEM_0,
 
-    // Output port MI2 (outputs to slave 2)
+    // Output port MI3 (outputs to slave 3)
     HSEL_DMEM_0,
     HADDR_DMEM_0,
     HTRANS_DMEM_0,
@@ -160,7 +177,7 @@ module nanosoc_busmatrix_lite (
     HMASTLOCK_DMEM_0,
     HREADYMUX_DMEM_0,
 
-    // Output port MI3 (outputs to slave 3)
+    // Output port MI4 (outputs to slave 4)
     HSEL_SYSIO,
     HADDR_SYSIO,
     HTRANS_SYSIO,
@@ -172,7 +189,7 @@ module nanosoc_busmatrix_lite (
     HMASTLOCK_SYSIO,
     HREADYMUX_SYSIO,
 
-    // Output port MI4 (outputs to slave 4)
+    // Output port MI5 (outputs to slave 5)
     HSEL_EXPRAM_L,
     HADDR_EXPRAM_L,
     HTRANS_EXPRAM_L,
@@ -184,7 +201,7 @@ module nanosoc_busmatrix_lite (
     HMASTLOCK_EXPRAM_L,
     HREADYMUX_EXPRAM_L,
 
-    // Output port MI5 (outputs to slave 5)
+    // Output port MI6 (outputs to slave 6)
     HSEL_EXPRAM_H,
     HADDR_EXPRAM_H,
     HTRANS_EXPRAM_H,
@@ -196,7 +213,7 @@ module nanosoc_busmatrix_lite (
     HMASTLOCK_EXPRAM_H,
     HREADYMUX_EXPRAM_H,
 
-    // Output port MI6 (outputs to slave 6)
+    // Output port MI7 (outputs to slave 7)
     HSEL_EXP,
     HADDR_EXP,
     HTRANS_EXP,
@@ -208,7 +225,7 @@ module nanosoc_busmatrix_lite (
     HMASTLOCK_EXP,
     HREADYMUX_EXP,
 
-    // Output port MI7 (outputs to slave 7)
+    // Output port MI8 (outputs to slave 8)
     HSEL_SYSTABLE,
     HADDR_SYSTABLE,
     HTRANS_SYSTABLE,
@@ -302,36 +319,41 @@ module nanosoc_busmatrix_lite (
     input         HRESP_BOOTROM_0;         // Transfer response
 
     // Output port MI1 (inputs from slave 1)
+    input  [31:0] HRDATA_EXTROM_0;        // Read data bus
+    input         HREADYOUT_EXTROM_0;     // HREADY feedback
+    input         HRESP_EXTROM_0;         // Transfer response
+
+    // Output port MI2 (inputs from slave 2)
     input  [31:0] HRDATA_IMEM_0;        // Read data bus
     input         HREADYOUT_IMEM_0;     // HREADY feedback
     input         HRESP_IMEM_0;         // Transfer response
 
-    // Output port MI2 (inputs from slave 2)
+    // Output port MI3 (inputs from slave 3)
     input  [31:0] HRDATA_DMEM_0;        // Read data bus
     input         HREADYOUT_DMEM_0;     // HREADY feedback
     input         HRESP_DMEM_0;         // Transfer response
 
-    // Output port MI3 (inputs from slave 3)
+    // Output port MI4 (inputs from slave 4)
     input  [31:0] HRDATA_SYSIO;        // Read data bus
     input         HREADYOUT_SYSIO;     // HREADY feedback
     input         HRESP_SYSIO;         // Transfer response
 
-    // Output port MI4 (inputs from slave 4)
+    // Output port MI5 (inputs from slave 5)
     input  [31:0] HRDATA_EXPRAM_L;        // Read data bus
     input         HREADYOUT_EXPRAM_L;     // HREADY feedback
     input         HRESP_EXPRAM_L;         // Transfer response
 
-    // Output port MI5 (inputs from slave 5)
+    // Output port MI6 (inputs from slave 6)
     input  [31:0] HRDATA_EXPRAM_H;        // Read data bus
     input         HREADYOUT_EXPRAM_H;     // HREADY feedback
     input         HRESP_EXPRAM_H;         // Transfer response
 
-    // Output port MI6 (inputs from slave 6)
+    // Output port MI7 (inputs from slave 7)
     input  [31:0] HRDATA_EXP;        // Read data bus
     input         HREADYOUT_EXP;     // HREADY feedback
     input         HRESP_EXP;         // Transfer response
 
-    // Output port MI7 (inputs from slave 7)
+    // Output port MI8 (inputs from slave 8)
     input  [31:0] HRDATA_SYSTABLE;        // Read data bus
     input         HREADYOUT_SYSTABLE;     // HREADY feedback
     input         HRESP_SYSTABLE;         // Transfer response
@@ -354,6 +376,18 @@ module nanosoc_busmatrix_lite (
     output        HREADYMUX_BOOTROM_0;     // Transfer done
 
     // Output port MI1 (outputs to slave 1)
+    output        HSEL_EXTROM_0;          // Slave Select
+    output [31:0] HADDR_EXTROM_0;         // Address bus
+    output  [1:0] HTRANS_EXTROM_0;        // Transfer type
+    output        HWRITE_EXTROM_0;        // Transfer direction
+    output  [2:0] HSIZE_EXTROM_0;         // Transfer size
+    output  [2:0] HBURST_EXTROM_0;        // Burst type
+    output  [3:0] HPROT_EXTROM_0;         // Protection control
+    output [31:0] HWDATA_EXTROM_0;        // Write data
+    output        HMASTLOCK_EXTROM_0;     // Locked Sequence
+    output        HREADYMUX_EXTROM_0;     // Transfer done
+
+    // Output port MI2 (outputs to slave 2)
     output        HSEL_IMEM_0;          // Slave Select
     output [31:0] HADDR_IMEM_0;         // Address bus
     output  [1:0] HTRANS_IMEM_0;        // Transfer type
@@ -365,7 +399,7 @@ module nanosoc_busmatrix_lite (
     output        HMASTLOCK_IMEM_0;     // Locked Sequence
     output        HREADYMUX_IMEM_0;     // Transfer done
 
-    // Output port MI2 (outputs to slave 2)
+    // Output port MI3 (outputs to slave 3)
     output        HSEL_DMEM_0;          // Slave Select
     output [31:0] HADDR_DMEM_0;         // Address bus
     output  [1:0] HTRANS_DMEM_0;        // Transfer type
@@ -377,7 +411,7 @@ module nanosoc_busmatrix_lite (
     output        HMASTLOCK_DMEM_0;     // Locked Sequence
     output        HREADYMUX_DMEM_0;     // Transfer done
 
-    // Output port MI3 (outputs to slave 3)
+    // Output port MI4 (outputs to slave 4)
     output        HSEL_SYSIO;          // Slave Select
     output [31:0] HADDR_SYSIO;         // Address bus
     output  [1:0] HTRANS_SYSIO;        // Transfer type
@@ -389,7 +423,7 @@ module nanosoc_busmatrix_lite (
     output        HMASTLOCK_SYSIO;     // Locked Sequence
     output        HREADYMUX_SYSIO;     // Transfer done
 
-    // Output port MI4 (outputs to slave 4)
+    // Output port MI5 (outputs to slave 5)
     output        HSEL_EXPRAM_L;          // Slave Select
     output [31:0] HADDR_EXPRAM_L;         // Address bus
     output  [1:0] HTRANS_EXPRAM_L;        // Transfer type
@@ -401,7 +435,7 @@ module nanosoc_busmatrix_lite (
     output        HMASTLOCK_EXPRAM_L;     // Locked Sequence
     output        HREADYMUX_EXPRAM_L;     // Transfer done
 
-    // Output port MI5 (outputs to slave 5)
+    // Output port MI6 (outputs to slave 6)
     output        HSEL_EXPRAM_H;          // Slave Select
     output [31:0] HADDR_EXPRAM_H;         // Address bus
     output  [1:0] HTRANS_EXPRAM_H;        // Transfer type
@@ -413,7 +447,7 @@ module nanosoc_busmatrix_lite (
     output        HMASTLOCK_EXPRAM_H;     // Locked Sequence
     output        HREADYMUX_EXPRAM_H;     // Transfer done
 
-    // Output port MI6 (outputs to slave 6)
+    // Output port MI7 (outputs to slave 7)
     output        HSEL_EXP;          // Slave Select
     output [31:0] HADDR_EXP;         // Address bus
     output  [1:0] HTRANS_EXP;        // Transfer type
@@ -425,7 +459,7 @@ module nanosoc_busmatrix_lite (
     output        HMASTLOCK_EXP;     // Locked Sequence
     output        HREADYMUX_EXP;     // Transfer done
 
-    // Output port MI7 (outputs to slave 7)
+    // Output port MI8 (outputs to slave 8)
     output        HSEL_SYSTABLE;          // Slave Select
     output [31:0] HADDR_SYSTABLE;         // Address bus
     output  [1:0] HTRANS_SYSTABLE;        // Transfer type
@@ -544,6 +578,22 @@ module nanosoc_busmatrix_lite (
     wire         HRESP_BOOTROM_0;         // Transfer response
 
     // Output Port MI1
+    wire         HSEL_EXTROM_0;          // Slave Select
+    wire  [31:0] HADDR_EXTROM_0;         // Address bus
+    wire   [1:0] HTRANS_EXTROM_0;        // Transfer type
+    wire         HWRITE_EXTROM_0;        // Transfer direction
+    wire   [2:0] HSIZE_EXTROM_0;         // Transfer size
+    wire   [2:0] HBURST_EXTROM_0;        // Burst type
+    wire   [3:0] HPROT_EXTROM_0;         // Protection control
+    wire  [31:0] HWDATA_EXTROM_0;        // Write data
+    wire         HMASTLOCK_EXTROM_0;     // Locked Sequence
+    wire         HREADYMUX_EXTROM_0;     // Transfer done
+
+    wire  [31:0] HRDATA_EXTROM_0;        // Read data bus
+    wire         HREADYOUT_EXTROM_0;     // HREADY feedback
+    wire         HRESP_EXTROM_0;         // Transfer response
+
+    // Output Port MI2
     wire         HSEL_IMEM_0;          // Slave Select
     wire  [31:0] HADDR_IMEM_0;         // Address bus
     wire   [1:0] HTRANS_IMEM_0;        // Transfer type
@@ -559,7 +609,7 @@ module nanosoc_busmatrix_lite (
     wire         HREADYOUT_IMEM_0;     // HREADY feedback
     wire         HRESP_IMEM_0;         // Transfer response
 
-    // Output Port MI2
+    // Output Port MI3
     wire         HSEL_DMEM_0;          // Slave Select
     wire  [31:0] HADDR_DMEM_0;         // Address bus
     wire   [1:0] HTRANS_DMEM_0;        // Transfer type
@@ -575,7 +625,7 @@ module nanosoc_busmatrix_lite (
     wire         HREADYOUT_DMEM_0;     // HREADY feedback
     wire         HRESP_DMEM_0;         // Transfer response
 
-    // Output Port MI3
+    // Output Port MI4
     wire         HSEL_SYSIO;          // Slave Select
     wire  [31:0] HADDR_SYSIO;         // Address bus
     wire   [1:0] HTRANS_SYSIO;        // Transfer type
@@ -591,7 +641,7 @@ module nanosoc_busmatrix_lite (
     wire         HREADYOUT_SYSIO;     // HREADY feedback
     wire         HRESP_SYSIO;         // Transfer response
 
-    // Output Port MI4
+    // Output Port MI5
     wire         HSEL_EXPRAM_L;          // Slave Select
     wire  [31:0] HADDR_EXPRAM_L;         // Address bus
     wire   [1:0] HTRANS_EXPRAM_L;        // Transfer type
@@ -607,7 +657,7 @@ module nanosoc_busmatrix_lite (
     wire         HREADYOUT_EXPRAM_L;     // HREADY feedback
     wire         HRESP_EXPRAM_L;         // Transfer response
 
-    // Output Port MI5
+    // Output Port MI6
     wire         HSEL_EXPRAM_H;          // Slave Select
     wire  [31:0] HADDR_EXPRAM_H;         // Address bus
     wire   [1:0] HTRANS_EXPRAM_H;        // Transfer type
@@ -623,7 +673,7 @@ module nanosoc_busmatrix_lite (
     wire         HREADYOUT_EXPRAM_H;     // HREADY feedback
     wire         HRESP_EXPRAM_H;         // Transfer response
 
-    // Output Port MI6
+    // Output Port MI7
     wire         HSEL_EXP;          // Slave Select
     wire  [31:0] HADDR_EXP;         // Address bus
     wire   [1:0] HTRANS_EXP;        // Transfer type
@@ -639,7 +689,7 @@ module nanosoc_busmatrix_lite (
     wire         HREADYOUT_EXP;     // HREADY feedback
     wire         HRESP_EXP;         // Transfer response
 
-    // Output Port MI7
+    // Output Port MI8
     wire         HSEL_SYSTABLE;          // Slave Select
     wire  [31:0] HADDR_SYSTABLE;         // Address bus
     wire   [1:0] HTRANS_SYSTABLE;        // Transfer type
@@ -669,6 +719,8 @@ module nanosoc_busmatrix_lite (
 
     wire   [3:0]        i_hmaster_BOOTROM_0;
     wire   [1:0] i_hresp_BOOTROM_0;
+    wire   [3:0]        i_hmaster_EXTROM_0;
+    wire   [1:0] i_hresp_EXTROM_0;
     wire   [3:0]        i_hmaster_IMEM_0;
     wire   [1:0] i_hresp_IMEM_0;
     wire   [3:0]        i_hmaster_DMEM_0;
@@ -702,6 +754,7 @@ module nanosoc_busmatrix_lite (
     assign HRESP_CPU_0  = i_hresp_CPU_0[0];
 
     assign i_hresp_BOOTROM_0 = {{1{tie_low}}, HRESP_BOOTROM_0};
+    assign i_hresp_EXTROM_0 = {{1{tie_low}}, HRESP_EXTROM_0};
     assign i_hresp_IMEM_0 = {{1{tie_low}}, HRESP_IMEM_0};
     assign i_hresp_DMEM_0 = {{1{tie_low}}, HRESP_DMEM_0};
     assign i_hresp_SYSIO = {{1{tie_low}}, HRESP_SYSIO};
@@ -798,6 +851,22 @@ module nanosoc_busmatrix_lite (
     .HRESP_BOOTROM_0      (i_hresp_BOOTROM_0),
 
     // Output port MI1 signals
+    .HSEL_EXTROM_0       (HSEL_EXTROM_0),
+    .HADDR_EXTROM_0      (HADDR_EXTROM_0),
+    .HTRANS_EXTROM_0     (HTRANS_EXTROM_0),
+    .HWRITE_EXTROM_0     (HWRITE_EXTROM_0),
+    .HSIZE_EXTROM_0      (HSIZE_EXTROM_0),
+    .HBURST_EXTROM_0     (HBURST_EXTROM_0),
+    .HPROT_EXTROM_0      (HPROT_EXTROM_0),
+    .HWDATA_EXTROM_0     (HWDATA_EXTROM_0),
+    .HMASTER_EXTROM_0    (i_hmaster_EXTROM_0),
+    .HMASTLOCK_EXTROM_0  (HMASTLOCK_EXTROM_0),
+    .HREADYMUX_EXTROM_0  (HREADYMUX_EXTROM_0),
+    .HRDATA_EXTROM_0     (HRDATA_EXTROM_0),
+    .HREADYOUT_EXTROM_0  (HREADYOUT_EXTROM_0),
+    .HRESP_EXTROM_0      (i_hresp_EXTROM_0),
+
+    // Output port MI2 signals
     .HSEL_IMEM_0       (HSEL_IMEM_0),
     .HADDR_IMEM_0      (HADDR_IMEM_0),
     .HTRANS_IMEM_0     (HTRANS_IMEM_0),
@@ -813,7 +882,7 @@ module nanosoc_busmatrix_lite (
     .HREADYOUT_IMEM_0  (HREADYOUT_IMEM_0),
     .HRESP_IMEM_0      (i_hresp_IMEM_0),
 
-    // Output port MI2 signals
+    // Output port MI3 signals
     .HSEL_DMEM_0       (HSEL_DMEM_0),
     .HADDR_DMEM_0      (HADDR_DMEM_0),
     .HTRANS_DMEM_0     (HTRANS_DMEM_0),
@@ -829,7 +898,7 @@ module nanosoc_busmatrix_lite (
     .HREADYOUT_DMEM_0  (HREADYOUT_DMEM_0),
     .HRESP_DMEM_0      (i_hresp_DMEM_0),
 
-    // Output port MI3 signals
+    // Output port MI4 signals
     .HSEL_SYSIO       (HSEL_SYSIO),
     .HADDR_SYSIO      (HADDR_SYSIO),
     .HTRANS_SYSIO     (HTRANS_SYSIO),
@@ -845,7 +914,7 @@ module nanosoc_busmatrix_lite (
     .HREADYOUT_SYSIO  (HREADYOUT_SYSIO),
     .HRESP_SYSIO      (i_hresp_SYSIO),
 
-    // Output port MI4 signals
+    // Output port MI5 signals
     .HSEL_EXPRAM_L       (HSEL_EXPRAM_L),
     .HADDR_EXPRAM_L      (HADDR_EXPRAM_L),
     .HTRANS_EXPRAM_L     (HTRANS_EXPRAM_L),
@@ -861,7 +930,7 @@ module nanosoc_busmatrix_lite (
     .HREADYOUT_EXPRAM_L  (HREADYOUT_EXPRAM_L),
     .HRESP_EXPRAM_L      (i_hresp_EXPRAM_L),
 
-    // Output port MI5 signals
+    // Output port MI6 signals
     .HSEL_EXPRAM_H       (HSEL_EXPRAM_H),
     .HADDR_EXPRAM_H      (HADDR_EXPRAM_H),
     .HTRANS_EXPRAM_H     (HTRANS_EXPRAM_H),
@@ -877,7 +946,7 @@ module nanosoc_busmatrix_lite (
     .HREADYOUT_EXPRAM_H  (HREADYOUT_EXPRAM_H),
     .HRESP_EXPRAM_H      (i_hresp_EXPRAM_H),
 
-    // Output port MI6 signals
+    // Output port MI7 signals
     .HSEL_EXP       (HSEL_EXP),
     .HADDR_EXP      (HADDR_EXP),
     .HTRANS_EXP     (HTRANS_EXP),
@@ -893,7 +962,7 @@ module nanosoc_busmatrix_lite (
     .HREADYOUT_EXP  (HREADYOUT_EXP),
     .HRESP_EXP      (i_hresp_EXP),
 
-    // Output port MI7 signals
+    // Output port MI8 signals
     .HSEL_SYSTABLE       (HSEL_SYSTABLE),
     .HADDR_SYSTABLE      (HADDR_SYSTABLE),
     .HTRANS_SYSTABLE     (HTRANS_SYSTABLE),
diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_inititator_input.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_inititator_input.v
index d770544cbae49d558bc2dc307f80a4a09ec16aa3..1407bda4967dc2464901e371ae1046a0c9d88de8 100644
--- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_inititator_input.v
+++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_inititator_input.v
@@ -3,7 +3,7 @@
 // only be used by a person authorised under and to the extent permitted
 // by a subsisting licensing agreement from Arm Limited or its affiliates.
 //
-//            (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates.
+//            (C) COPYRIGHT 2001-2025 Arm Limited or its affiliates.
 //                ALL RIGHTS RESERVED
 //
 // This entire notice must be reproduced on all copies of this file
diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_CPU_0.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_CPU_0.v
index 56ac92a2eb48f34a05e53fa1b48c3de459426ef7..9d6224826cf31ac922d3a2545afbaa1077785841 100644
--- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_CPU_0.v
+++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_CPU_0.v
@@ -3,7 +3,7 @@
 // only be used by a person authorised under and to the extent permitted
 // by a subsisting licensing agreement from Arm Limited or its affiliates.
 //
-//            (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates.
+//            (C) COPYRIGHT 2001-2025 Arm Limited or its affiliates.
 //                ALL RIGHTS RESERVED
 //
 // This entire notice must be reproduced on all copies of this file
@@ -96,6 +96,12 @@ module nanosoc_matrix_decode_CPU_0 (
     resp_dec7,
     rdata_dec7,
 
+    // Bus-switch output 8
+    active_dec8,
+    readyout_dec8,
+    resp_dec8,
+    rdata_dec8,
+
     // Output port selection signals
     sel_dec0,
     sel_dec1,
@@ -105,6 +111,7 @@ module nanosoc_matrix_decode_CPU_0 (
     sel_dec5,
     sel_dec6,
     sel_dec7,
+    sel_dec8,
 
     // Selected Output port data and control signals
     active_dec,
@@ -124,7 +131,7 @@ module nanosoc_matrix_decode_CPU_0 (
     input         HRESETn;        // AHB System Reset
 
     // Internal address remapping control
-    input   [0:0] remapping_dec;      // Internal remap signal
+    input   [1:0] remapping_dec;      // Internal remap signal
 
     // Signals from the Input stage
     input         HREADYS;        // Transfer done
@@ -180,6 +187,12 @@ module nanosoc_matrix_decode_CPU_0 (
     input   [1:0] resp_dec7;          // HRESP input
     input  [31:0] rdata_dec7;         // HRDATA input
 
+    // Bus-switch output MI8
+    input         active_dec8;        // Output stage MI8 active_dec signal
+    input         readyout_dec8;      // HREADYOUT input
+    input   [1:0] resp_dec8;          // HRESP input
+    input  [31:0] rdata_dec8;         // HRDATA input
+
     // Output port selection signals
     output        sel_dec0;           // HSEL output
     output        sel_dec1;           // HSEL output
@@ -189,6 +202,7 @@ module nanosoc_matrix_decode_CPU_0 (
     output        sel_dec5;           // HSEL output
     output        sel_dec6;           // HSEL output
     output        sel_dec7;           // HSEL output
+    output        sel_dec8;           // HSEL output
 
     // Selected Output port data and control signals
     output        active_dec;         // Combinatorial active_dec O/P
@@ -205,7 +219,7 @@ module nanosoc_matrix_decode_CPU_0 (
     wire          HCLK;            // AHB System Clock
     wire          HRESETn;         // AHB System Reset
     // Internal address remapping control
-    wire    [0:0] remapping_dec;       // Internal remap signal
+    wire    [1:0] remapping_dec;       // Internal remap signal
 
     // Signals from the Input stage
     wire          HREADYS;         // Transfer done
@@ -269,6 +283,13 @@ module nanosoc_matrix_decode_CPU_0 (
     wire   [31:0] rdata_dec7;          // HRDATA input
     reg           sel_dec7;            // HSEL output
 
+    // Bus-switch output MI8
+    wire          active_dec8;         // active_dec signal
+    wire          readyout_dec8;       // HREADYOUT input
+    wire    [1:0] resp_dec8;           // HRESP input
+    wire   [31:0] rdata_dec8;          // HRDATA input
+    reg           sel_dec8;            // HSEL output
+
 
 // -----------------------------------------------------------------------------
 // Signal declarations
@@ -280,8 +301,8 @@ module nanosoc_matrix_decode_CPU_0 (
     reg     [1:0] HRESPS;          // Combinatorial HRESPS signal
     reg    [31:0] HRDATAS;         // Read data bus
 
-    reg     [3:0] addr_out_port;     // Address output ports
-    reg     [3:0] data_out_port;     // Data output ports
+    reg     [4:0] addr_out_port;     // Address output ports
+    reg     [4:0] data_out_port;     // Data output ports
 
     // Default slave signals
     reg           sel_dft_slv;       // HSEL signal
@@ -334,98 +355,212 @@ module nanosoc_matrix_decode_CPU_0 (
       if (trans_dec != 2'b00)
       begin
 
-        case (remapping_dec)  // Composition: REMAP[0]
-          1'b0 : begin
+        case (remapping_dec)  // Composition: { REMAP[1], REMAP[0] }
+          2'b00 : begin
+            // Static address region 0x00000000-0x0fffffff
+            if ((decode_addr_dec >= 22'h000000) & (decode_addr_dec <= 22'h03ffff))
+               addr_out_port = 5'b00000;  // Select Output port MI0
+            // Static address region 0x10000000-0x17ffffff
+            else if ((decode_addr_dec >= 22'h040000) & (decode_addr_dec <= 22'h05ffff))
+               addr_out_port = 5'b00000;  // Select Output port MI0
+
+            // Static address region 0x18000000-0x1fffffff
+            else if ((decode_addr_dec >= 22'h060000) & (decode_addr_dec <= 22'h07ffff))
+               addr_out_port = 5'b00001;  // Select Output port MI1
+
+            // Static address region 0x20000000-0x2fffffff
+            else if ((decode_addr_dec >= 22'h080000) & (decode_addr_dec <= 22'h0bffff))
+               addr_out_port = 5'b00010;  // Select Output port MI2
+
+            // Static address region 0x30000000-0x3fffffff
+            else if ((decode_addr_dec >= 22'h0c0000) & (decode_addr_dec <= 22'h0fffff))
+               addr_out_port = 5'b00011;  // Select Output port MI3
+
+            // Static address region 0x40000000-0x5fffffff
+            else if ((decode_addr_dec >= 22'h100000) & (decode_addr_dec <= 22'h17ffff))
+               addr_out_port = 5'b00100;  // Select Output port MI4
+
+            // Static address region 0x80000000-0x8fffffff
+            else if ((decode_addr_dec >= 22'h200000) & (decode_addr_dec <= 22'h23ffff))
+               addr_out_port = 5'b00101;  // Select Output port MI5
+
+            // Static address region 0x90000000-0x9fffffff
+            else if ((decode_addr_dec >= 22'h240000) & (decode_addr_dec <= 22'h27ffff))
+               addr_out_port = 5'b00110;  // Select Output port MI6
+
+            // Static address region 0x60000000-0x7fffffff
+            else if ((decode_addr_dec >= 22'h180000) & (decode_addr_dec <= 22'h1fffff))
+               addr_out_port = 5'b00111;  // Select Output port MI7
+            // Static address region 0xa0000000-0xdfffffff
+            else if ((decode_addr_dec >= 22'h280000) & (decode_addr_dec <= 22'h37ffff))
+               addr_out_port = 5'b00111;  // Select Output port MI7
+
+            // Static address region 0xf0000000-0xf003ffff
+            else if ((decode_addr_dec >= 22'h3c0000) & (decode_addr_dec <= 22'h3c00ff))
+               addr_out_port = 5'b01000;  // Select Output port MI8
+
+            else
+              addr_out_port = 5'b10000;   // Select the default slave
+          end
+
+          2'b01 : begin
+            // Remapped address region 0x00000000-0x0fffffff due to REMAP[0]
+            if ((decode_addr_dec >= 22'h000000) & (decode_addr_dec <= 22'h03ffff))
+               addr_out_port = 5'b00010;  // Select Output port MI2
+
             // Static address region 0x00000000-0x0fffffff
+            else if ((decode_addr_dec >= 22'h000000) & (decode_addr_dec <= 22'h03ffff))
+               addr_out_port = 5'b00000;  // Select Output port MI0
+            // Static address region 0x10000000-0x17ffffff
+            else if ((decode_addr_dec >= 22'h040000) & (decode_addr_dec <= 22'h05ffff))
+               addr_out_port = 5'b00000;  // Select Output port MI0
+
+            // Static address region 0x18000000-0x1fffffff
+            else if ((decode_addr_dec >= 22'h060000) & (decode_addr_dec <= 22'h07ffff))
+               addr_out_port = 5'b00001;  // Select Output port MI1
+
+            // Static address region 0x20000000-0x2fffffff
+            else if ((decode_addr_dec >= 22'h080000) & (decode_addr_dec <= 22'h0bffff))
+               addr_out_port = 5'b00010;  // Select Output port MI2
+
+            // Static address region 0x30000000-0x3fffffff
+            else if ((decode_addr_dec >= 22'h0c0000) & (decode_addr_dec <= 22'h0fffff))
+               addr_out_port = 5'b00011;  // Select Output port MI3
+
+            // Static address region 0x40000000-0x5fffffff
+            else if ((decode_addr_dec >= 22'h100000) & (decode_addr_dec <= 22'h17ffff))
+               addr_out_port = 5'b00100;  // Select Output port MI4
+
+            // Static address region 0x80000000-0x8fffffff
+            else if ((decode_addr_dec >= 22'h200000) & (decode_addr_dec <= 22'h23ffff))
+               addr_out_port = 5'b00101;  // Select Output port MI5
+
+            // Static address region 0x90000000-0x9fffffff
+            else if ((decode_addr_dec >= 22'h240000) & (decode_addr_dec <= 22'h27ffff))
+               addr_out_port = 5'b00110;  // Select Output port MI6
+
+            // Static address region 0x60000000-0x7fffffff
+            else if ((decode_addr_dec >= 22'h180000) & (decode_addr_dec <= 22'h1fffff))
+               addr_out_port = 5'b00111;  // Select Output port MI7
+            // Static address region 0xa0000000-0xdfffffff
+            else if ((decode_addr_dec >= 22'h280000) & (decode_addr_dec <= 22'h37ffff))
+               addr_out_port = 5'b00111;  // Select Output port MI7
+
+            // Static address region 0xf0000000-0xf003ffff
+            else if ((decode_addr_dec >= 22'h3c0000) & (decode_addr_dec <= 22'h3c00ff))
+               addr_out_port = 5'b01000;  // Select Output port MI8
+
+            else
+              addr_out_port = 5'b10000;   // Select the default slave
+          end
+
+          2'b10 : begin
+            // Remapped address region 0x00000000-0x0fffffff due to REMAP[1]
             if ((decode_addr_dec >= 22'h000000) & (decode_addr_dec <= 22'h03ffff))
-               addr_out_port = 4'b0000;  // Select Output port MI0
-            // Static address region 0x10000000-0x1fffffff
-            else if ((decode_addr_dec >= 22'h040000) & (decode_addr_dec <= 22'h07ffff))
-               addr_out_port = 4'b0000;  // Select Output port MI0
+               addr_out_port = 5'b00001;  // Select Output port MI1
+
+            // Static address region 0x00000000-0x0fffffff
+            else if ((decode_addr_dec >= 22'h000000) & (decode_addr_dec <= 22'h03ffff))
+               addr_out_port = 5'b00000;  // Select Output port MI0
+            // Static address region 0x10000000-0x17ffffff
+            else if ((decode_addr_dec >= 22'h040000) & (decode_addr_dec <= 22'h05ffff))
+               addr_out_port = 5'b00000;  // Select Output port MI0
+
+            // Static address region 0x18000000-0x1fffffff
+            else if ((decode_addr_dec >= 22'h060000) & (decode_addr_dec <= 22'h07ffff))
+               addr_out_port = 5'b00001;  // Select Output port MI1
 
             // Static address region 0x20000000-0x2fffffff
             else if ((decode_addr_dec >= 22'h080000) & (decode_addr_dec <= 22'h0bffff))
-               addr_out_port = 4'b0001;  // Select Output port MI1
+               addr_out_port = 5'b00010;  // Select Output port MI2
 
             // Static address region 0x30000000-0x3fffffff
             else if ((decode_addr_dec >= 22'h0c0000) & (decode_addr_dec <= 22'h0fffff))
-               addr_out_port = 4'b0010;  // Select Output port MI2
+               addr_out_port = 5'b00011;  // Select Output port MI3
 
             // Static address region 0x40000000-0x5fffffff
             else if ((decode_addr_dec >= 22'h100000) & (decode_addr_dec <= 22'h17ffff))
-               addr_out_port = 4'b0011;  // Select Output port MI3
+               addr_out_port = 5'b00100;  // Select Output port MI4
 
             // Static address region 0x80000000-0x8fffffff
             else if ((decode_addr_dec >= 22'h200000) & (decode_addr_dec <= 22'h23ffff))
-               addr_out_port = 4'b0100;  // Select Output port MI4
+               addr_out_port = 5'b00101;  // Select Output port MI5
 
             // Static address region 0x90000000-0x9fffffff
             else if ((decode_addr_dec >= 22'h240000) & (decode_addr_dec <= 22'h27ffff))
-               addr_out_port = 4'b0101;  // Select Output port MI5
+               addr_out_port = 5'b00110;  // Select Output port MI6
 
             // Static address region 0x60000000-0x7fffffff
             else if ((decode_addr_dec >= 22'h180000) & (decode_addr_dec <= 22'h1fffff))
-               addr_out_port = 4'b0110;  // Select Output port MI6
+               addr_out_port = 5'b00111;  // Select Output port MI7
             // Static address region 0xa0000000-0xdfffffff
             else if ((decode_addr_dec >= 22'h280000) & (decode_addr_dec <= 22'h37ffff))
-               addr_out_port = 4'b0110;  // Select Output port MI6
+               addr_out_port = 5'b00111;  // Select Output port MI7
 
             // Static address region 0xf0000000-0xf003ffff
             else if ((decode_addr_dec >= 22'h3c0000) & (decode_addr_dec <= 22'h3c00ff))
-               addr_out_port = 4'b0111;  // Select Output port MI7
+               addr_out_port = 5'b01000;  // Select Output port MI8
 
             else
-              addr_out_port = 4'b1000;   // Select the default slave
+              addr_out_port = 5'b10000;   // Select the default slave
           end
 
-          1'b1 : begin
+          2'b11 : begin
             // Remapped address region 0x00000000-0x0fffffff due to REMAP[0]
             if ((decode_addr_dec >= 22'h000000) & (decode_addr_dec <= 22'h03ffff))
-               addr_out_port = 4'b0001;  // Select Output port MI1
+               addr_out_port = 5'b00010;  // Select Output port MI2
+
+            // Remapped address region 0x00000000-0x0fffffff due to REMAP[1]
+            else if ((decode_addr_dec >= 22'h000000) & (decode_addr_dec <= 22'h03ffff))
+               addr_out_port = 5'b00001;  // Select Output port MI1
 
             // Static address region 0x00000000-0x0fffffff
             else if ((decode_addr_dec >= 22'h000000) & (decode_addr_dec <= 22'h03ffff))
-               addr_out_port = 4'b0000;  // Select Output port MI0
-            // Static address region 0x10000000-0x1fffffff
-            else if ((decode_addr_dec >= 22'h040000) & (decode_addr_dec <= 22'h07ffff))
-               addr_out_port = 4'b0000;  // Select Output port MI0
+               addr_out_port = 5'b00000;  // Select Output port MI0
+            // Static address region 0x10000000-0x17ffffff
+            else if ((decode_addr_dec >= 22'h040000) & (decode_addr_dec <= 22'h05ffff))
+               addr_out_port = 5'b00000;  // Select Output port MI0
+
+            // Static address region 0x18000000-0x1fffffff
+            else if ((decode_addr_dec >= 22'h060000) & (decode_addr_dec <= 22'h07ffff))
+               addr_out_port = 5'b00001;  // Select Output port MI1
 
             // Static address region 0x20000000-0x2fffffff
             else if ((decode_addr_dec >= 22'h080000) & (decode_addr_dec <= 22'h0bffff))
-               addr_out_port = 4'b0001;  // Select Output port MI1
+               addr_out_port = 5'b00010;  // Select Output port MI2
 
             // Static address region 0x30000000-0x3fffffff
             else if ((decode_addr_dec >= 22'h0c0000) & (decode_addr_dec <= 22'h0fffff))
-               addr_out_port = 4'b0010;  // Select Output port MI2
+               addr_out_port = 5'b00011;  // Select Output port MI3
 
             // Static address region 0x40000000-0x5fffffff
             else if ((decode_addr_dec >= 22'h100000) & (decode_addr_dec <= 22'h17ffff))
-               addr_out_port = 4'b0011;  // Select Output port MI3
+               addr_out_port = 5'b00100;  // Select Output port MI4
 
             // Static address region 0x80000000-0x8fffffff
             else if ((decode_addr_dec >= 22'h200000) & (decode_addr_dec <= 22'h23ffff))
-               addr_out_port = 4'b0100;  // Select Output port MI4
+               addr_out_port = 5'b00101;  // Select Output port MI5
 
             // Static address region 0x90000000-0x9fffffff
             else if ((decode_addr_dec >= 22'h240000) & (decode_addr_dec <= 22'h27ffff))
-               addr_out_port = 4'b0101;  // Select Output port MI5
+               addr_out_port = 5'b00110;  // Select Output port MI6
 
             // Static address region 0x60000000-0x7fffffff
             else if ((decode_addr_dec >= 22'h180000) & (decode_addr_dec <= 22'h1fffff))
-               addr_out_port = 4'b0110;  // Select Output port MI6
+               addr_out_port = 5'b00111;  // Select Output port MI7
             // Static address region 0xa0000000-0xdfffffff
             else if ((decode_addr_dec >= 22'h280000) & (decode_addr_dec <= 22'h37ffff))
-               addr_out_port = 4'b0110;  // Select Output port MI6
+               addr_out_port = 5'b00111;  // Select Output port MI7
 
             // Static address region 0xf0000000-0xf003ffff
             else if ((decode_addr_dec >= 22'h3c0000) & (decode_addr_dec <= 22'h3c00ff))
-               addr_out_port = 4'b0111;  // Select Output port MI7
+               addr_out_port = 5'b01000;  // Select Output port MI8
 
             else
-              addr_out_port = 4'b1000;   // Select the default slave
+              addr_out_port = 5'b10000;   // Select the default slave
           end
 
-          default : addr_out_port = {4{1'bx}};
+          default : addr_out_port = {5{1'bx}};
         endcase
 
       end // if (trans_dec != 2'b00)
@@ -445,19 +580,21 @@ module nanosoc_matrix_decode_CPU_0 (
       sel_dec5 = 1'b0;
       sel_dec6 = 1'b0;
       sel_dec7 = 1'b0;
+      sel_dec8 = 1'b0;
       sel_dft_slv = 1'b0;
 
       if (sel_dec)
         case (addr_out_port)
-          4'b0000 : sel_dec0 = 1'b1;
-          4'b0001 : sel_dec1 = 1'b1;
-          4'b0010 : sel_dec2 = 1'b1;
-          4'b0011 : sel_dec3 = 1'b1;
-          4'b0100 : sel_dec4 = 1'b1;
-          4'b0101 : sel_dec5 = 1'b1;
-          4'b0110 : sel_dec6 = 1'b1;
-          4'b0111 : sel_dec7 = 1'b1;
-          4'b1000 : sel_dft_slv = 1'b1;    // Select the default slave
+          5'b00000 : sel_dec0 = 1'b1;
+          5'b00001 : sel_dec1 = 1'b1;
+          5'b00010 : sel_dec2 = 1'b1;
+          5'b00011 : sel_dec3 = 1'b1;
+          5'b00100 : sel_dec4 = 1'b1;
+          5'b00101 : sel_dec5 = 1'b1;
+          5'b00110 : sel_dec6 = 1'b1;
+          5'b00111 : sel_dec7 = 1'b1;
+          5'b01000 : sel_dec8 = 1'b1;
+          5'b10000 : sel_dft_slv = 1'b1;    // Select the default slave
           default : begin
             sel_dec0 = 1'bx;
             sel_dec1 = 1'bx;
@@ -467,6 +604,7 @@ module nanosoc_matrix_decode_CPU_0 (
             sel_dec5 = 1'bx;
             sel_dec6 = 1'bx;
             sel_dec7 = 1'bx;
+            sel_dec8 = 1'bx;
             sel_dft_slv = 1'bx;
           end
         endcase // case(addr_out_port)
@@ -483,19 +621,21 @@ module nanosoc_matrix_decode_CPU_0 (
              active_dec5 or
              active_dec6 or
              active_dec7 or
+             active_dec8 or
              addr_out_port
            )
     begin : p_active_comb
       case (addr_out_port)
-        4'b0000 : active_dec = active_dec0;
-        4'b0001 : active_dec = active_dec1;
-        4'b0010 : active_dec = active_dec2;
-        4'b0011 : active_dec = active_dec3;
-        4'b0100 : active_dec = active_dec4;
-        4'b0101 : active_dec = active_dec5;
-        4'b0110 : active_dec = active_dec6;
-        4'b0111 : active_dec = active_dec7;
-        4'b1000 : active_dec = 1'b1;         // Select the default slave
+        5'b00000 : active_dec = active_dec0;
+        5'b00001 : active_dec = active_dec1;
+        5'b00010 : active_dec = active_dec2;
+        5'b00011 : active_dec = active_dec3;
+        5'b00100 : active_dec = active_dec4;
+        5'b00101 : active_dec = active_dec5;
+        5'b00110 : active_dec = active_dec6;
+        5'b00111 : active_dec = active_dec7;
+        5'b01000 : active_dec = active_dec8;
+        5'b10000 : active_dec = 1'b1;         // Select the default slave
         default : active_dec = 1'bx;
       endcase // case(addr_out_port)
     end // block: p_active_comb
@@ -515,13 +655,13 @@ module nanosoc_matrix_decode_CPU_0 (
   always @ (negedge HRESETn or posedge HCLK)
     begin : p_data_out_port_seq
       if (~HRESETn)
-        data_out_port <= 4'b1000;
+        data_out_port <= 5'b10000;
       else
         if (HREADYS)
           if (sel_dec & trans_dec[1])
             data_out_port <= addr_out_port;
           else
-            data_out_port <= 4'b1000;
+            data_out_port <= 5'b10000;
     end // block: p_data_out_port_seq
 
   // HREADYOUTS output decode
@@ -535,19 +675,21 @@ module nanosoc_matrix_decode_CPU_0 (
              readyout_dec5 or
              readyout_dec6 or
              readyout_dec7 or
+             readyout_dec8 or
              data_out_port
            )
   begin : p_ready_comb
     case (data_out_port)
-      4'b0000 : HREADYOUTS = readyout_dec0;
-      4'b0001 : HREADYOUTS = readyout_dec1;
-      4'b0010 : HREADYOUTS = readyout_dec2;
-      4'b0011 : HREADYOUTS = readyout_dec3;
-      4'b0100 : HREADYOUTS = readyout_dec4;
-      4'b0101 : HREADYOUTS = readyout_dec5;
-      4'b0110 : HREADYOUTS = readyout_dec6;
-      4'b0111 : HREADYOUTS = readyout_dec7;
-      4'b1000 : HREADYOUTS = readyout_dft_slv;    // Select the default slave
+      5'b00000 : HREADYOUTS = readyout_dec0;
+      5'b00001 : HREADYOUTS = readyout_dec1;
+      5'b00010 : HREADYOUTS = readyout_dec2;
+      5'b00011 : HREADYOUTS = readyout_dec3;
+      5'b00100 : HREADYOUTS = readyout_dec4;
+      5'b00101 : HREADYOUTS = readyout_dec5;
+      5'b00110 : HREADYOUTS = readyout_dec6;
+      5'b00111 : HREADYOUTS = readyout_dec7;
+      5'b01000 : HREADYOUTS = readyout_dec8;
+      5'b10000 : HREADYOUTS = readyout_dft_slv;    // Select the default slave
       default : HREADYOUTS = 1'bx;
     endcase // case(data_out_port)
   end // block: p_ready_comb
@@ -563,19 +705,21 @@ module nanosoc_matrix_decode_CPU_0 (
              resp_dec5 or
              resp_dec6 or
              resp_dec7 or
+             resp_dec8 or
              data_out_port
            )
   begin : p_resp_comb
     case (data_out_port)
-      4'b0000 : HRESPS = resp_dec0;
-      4'b0001 : HRESPS = resp_dec1;
-      4'b0010 : HRESPS = resp_dec2;
-      4'b0011 : HRESPS = resp_dec3;
-      4'b0100 : HRESPS = resp_dec4;
-      4'b0101 : HRESPS = resp_dec5;
-      4'b0110 : HRESPS = resp_dec6;
-      4'b0111 : HRESPS = resp_dec7;
-      4'b1000 : HRESPS = resp_dft_slv;     // Select the default slave
+      5'b00000 : HRESPS = resp_dec0;
+      5'b00001 : HRESPS = resp_dec1;
+      5'b00010 : HRESPS = resp_dec2;
+      5'b00011 : HRESPS = resp_dec3;
+      5'b00100 : HRESPS = resp_dec4;
+      5'b00101 : HRESPS = resp_dec5;
+      5'b00110 : HRESPS = resp_dec6;
+      5'b00111 : HRESPS = resp_dec7;
+      5'b01000 : HRESPS = resp_dec8;
+      5'b10000 : HRESPS = resp_dft_slv;     // Select the default slave
       default : HRESPS = {2{1'bx}};
     endcase // case (data_out_port)
   end // block: p_resp_comb
@@ -590,19 +734,21 @@ module nanosoc_matrix_decode_CPU_0 (
              rdata_dec5 or
              rdata_dec6 or
              rdata_dec7 or
+             rdata_dec8 or
              data_out_port
            )
   begin : p_rdata_comb
     case (data_out_port)
-      4'b0000 : HRDATAS = rdata_dec0;
-      4'b0001 : HRDATAS = rdata_dec1;
-      4'b0010 : HRDATAS = rdata_dec2;
-      4'b0011 : HRDATAS = rdata_dec3;
-      4'b0100 : HRDATAS = rdata_dec4;
-      4'b0101 : HRDATAS = rdata_dec5;
-      4'b0110 : HRDATAS = rdata_dec6;
-      4'b0111 : HRDATAS = rdata_dec7;
-      4'b1000 : HRDATAS = {32{1'b0}};   // Select the default slave
+      5'b00000 : HRDATAS = rdata_dec0;
+      5'b00001 : HRDATAS = rdata_dec1;
+      5'b00010 : HRDATAS = rdata_dec2;
+      5'b00011 : HRDATAS = rdata_dec3;
+      5'b00100 : HRDATAS = rdata_dec4;
+      5'b00101 : HRDATAS = rdata_dec5;
+      5'b00110 : HRDATAS = rdata_dec6;
+      5'b00111 : HRDATAS = rdata_dec7;
+      5'b01000 : HRDATAS = rdata_dec8;
+      5'b10000 : HRDATAS = {32{1'b0}};   // Select the default slave
       default : HRDATAS = {32{1'bx}};
     endcase // case (data_out_port)
   end // block: p_rdata_comb
diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DEBUG.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DEBUG.v
index 19fe1e92d401eb537dea999522cbfef72adbfb5d..1004262cfacc64e6a7ee7baab4039a1f0322579c 100644
--- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DEBUG.v
+++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DEBUG.v
@@ -3,7 +3,7 @@
 // only be used by a person authorised under and to the extent permitted
 // by a subsisting licensing agreement from Arm Limited or its affiliates.
 //
-//            (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates.
+//            (C) COPYRIGHT 2001-2025 Arm Limited or its affiliates.
 //                ALL RIGHTS RESERVED
 //
 // This entire notice must be reproduced on all copies of this file
@@ -96,6 +96,12 @@ module nanosoc_matrix_decode_DEBUG (
     resp_dec7,
     rdata_dec7,
 
+    // Bus-switch output 8
+    active_dec8,
+    readyout_dec8,
+    resp_dec8,
+    rdata_dec8,
+
     // Output port selection signals
     sel_dec0,
     sel_dec1,
@@ -105,6 +111,7 @@ module nanosoc_matrix_decode_DEBUG (
     sel_dec5,
     sel_dec6,
     sel_dec7,
+    sel_dec8,
 
     // Selected Output port data and control signals
     active_dec,
@@ -124,7 +131,7 @@ module nanosoc_matrix_decode_DEBUG (
     input         HRESETn;        // AHB System Reset
 
     // Internal address remapping control
-    input   [0:0] remapping_dec;      // Internal remap signal
+    input   [1:0] remapping_dec;      // Internal remap signal
 
     // Signals from the Input stage
     input         HREADYS;        // Transfer done
@@ -180,6 +187,12 @@ module nanosoc_matrix_decode_DEBUG (
     input   [1:0] resp_dec7;          // HRESP input
     input  [31:0] rdata_dec7;         // HRDATA input
 
+    // Bus-switch output MI8
+    input         active_dec8;        // Output stage MI8 active_dec signal
+    input         readyout_dec8;      // HREADYOUT input
+    input   [1:0] resp_dec8;          // HRESP input
+    input  [31:0] rdata_dec8;         // HRDATA input
+
     // Output port selection signals
     output        sel_dec0;           // HSEL output
     output        sel_dec1;           // HSEL output
@@ -189,6 +202,7 @@ module nanosoc_matrix_decode_DEBUG (
     output        sel_dec5;           // HSEL output
     output        sel_dec6;           // HSEL output
     output        sel_dec7;           // HSEL output
+    output        sel_dec8;           // HSEL output
 
     // Selected Output port data and control signals
     output        active_dec;         // Combinatorial active_dec O/P
@@ -205,7 +219,7 @@ module nanosoc_matrix_decode_DEBUG (
     wire          HCLK;            // AHB System Clock
     wire          HRESETn;         // AHB System Reset
     // Internal address remapping control
-    wire    [0:0] remapping_dec;       // Internal remap signal
+    wire    [1:0] remapping_dec;       // Internal remap signal
 
     // Signals from the Input stage
     wire          HREADYS;         // Transfer done
@@ -269,6 +283,13 @@ module nanosoc_matrix_decode_DEBUG (
     wire   [31:0] rdata_dec7;          // HRDATA input
     reg           sel_dec7;            // HSEL output
 
+    // Bus-switch output MI8
+    wire          active_dec8;         // active_dec signal
+    wire          readyout_dec8;       // HREADYOUT input
+    wire    [1:0] resp_dec8;           // HRESP input
+    wire   [31:0] rdata_dec8;          // HRDATA input
+    reg           sel_dec8;            // HSEL output
+
 
 // -----------------------------------------------------------------------------
 // Signal declarations
@@ -280,8 +301,8 @@ module nanosoc_matrix_decode_DEBUG (
     reg     [1:0] HRESPS;          // Combinatorial HRESPS signal
     reg    [31:0] HRDATAS;         // Read data bus
 
-    reg     [3:0] addr_out_port;     // Address output ports
-    reg     [3:0] data_out_port;     // Data output ports
+    reg     [4:0] addr_out_port;     // Address output ports
+    reg     [4:0] data_out_port;     // Data output ports
 
     // Default slave signals
     reg           sel_dft_slv;       // HSEL signal
@@ -334,98 +355,212 @@ module nanosoc_matrix_decode_DEBUG (
       if (trans_dec != 2'b00)
       begin
 
-        case (remapping_dec)  // Composition: REMAP[0]
-          1'b0 : begin
+        case (remapping_dec)  // Composition: { REMAP[1], REMAP[0] }
+          2'b00 : begin
+            // Static address region 0x00000000-0x0fffffff
+            if ((decode_addr_dec >= 22'h000000) & (decode_addr_dec <= 22'h03ffff))
+               addr_out_port = 5'b00000;  // Select Output port MI0
+            // Static address region 0x10000000-0x17ffffff
+            else if ((decode_addr_dec >= 22'h040000) & (decode_addr_dec <= 22'h05ffff))
+               addr_out_port = 5'b00000;  // Select Output port MI0
+
+            // Static address region 0x18000000-0x1fffffff
+            else if ((decode_addr_dec >= 22'h060000) & (decode_addr_dec <= 22'h07ffff))
+               addr_out_port = 5'b00001;  // Select Output port MI1
+
+            // Static address region 0x20000000-0x2fffffff
+            else if ((decode_addr_dec >= 22'h080000) & (decode_addr_dec <= 22'h0bffff))
+               addr_out_port = 5'b00010;  // Select Output port MI2
+
+            // Static address region 0x30000000-0x3fffffff
+            else if ((decode_addr_dec >= 22'h0c0000) & (decode_addr_dec <= 22'h0fffff))
+               addr_out_port = 5'b00011;  // Select Output port MI3
+
+            // Static address region 0x40000000-0x5fffffff
+            else if ((decode_addr_dec >= 22'h100000) & (decode_addr_dec <= 22'h17ffff))
+               addr_out_port = 5'b00100;  // Select Output port MI4
+
+            // Static address region 0x80000000-0x8fffffff
+            else if ((decode_addr_dec >= 22'h200000) & (decode_addr_dec <= 22'h23ffff))
+               addr_out_port = 5'b00101;  // Select Output port MI5
+
+            // Static address region 0x90000000-0x9fffffff
+            else if ((decode_addr_dec >= 22'h240000) & (decode_addr_dec <= 22'h27ffff))
+               addr_out_port = 5'b00110;  // Select Output port MI6
+
+            // Static address region 0x60000000-0x7fffffff
+            else if ((decode_addr_dec >= 22'h180000) & (decode_addr_dec <= 22'h1fffff))
+               addr_out_port = 5'b00111;  // Select Output port MI7
+            // Static address region 0xa0000000-0xdfffffff
+            else if ((decode_addr_dec >= 22'h280000) & (decode_addr_dec <= 22'h37ffff))
+               addr_out_port = 5'b00111;  // Select Output port MI7
+
+            // Static address region 0xf0000000-0xf003ffff
+            else if ((decode_addr_dec >= 22'h3c0000) & (decode_addr_dec <= 22'h3c00ff))
+               addr_out_port = 5'b01000;  // Select Output port MI8
+
+            else
+              addr_out_port = 5'b10000;   // Select the default slave
+          end
+
+          2'b01 : begin
+            // Remapped address region 0x00000000-0x0fffffff due to REMAP[0]
+            if ((decode_addr_dec >= 22'h000000) & (decode_addr_dec <= 22'h03ffff))
+               addr_out_port = 5'b00010;  // Select Output port MI2
+
             // Static address region 0x00000000-0x0fffffff
+            else if ((decode_addr_dec >= 22'h000000) & (decode_addr_dec <= 22'h03ffff))
+               addr_out_port = 5'b00000;  // Select Output port MI0
+            // Static address region 0x10000000-0x17ffffff
+            else if ((decode_addr_dec >= 22'h040000) & (decode_addr_dec <= 22'h05ffff))
+               addr_out_port = 5'b00000;  // Select Output port MI0
+
+            // Static address region 0x18000000-0x1fffffff
+            else if ((decode_addr_dec >= 22'h060000) & (decode_addr_dec <= 22'h07ffff))
+               addr_out_port = 5'b00001;  // Select Output port MI1
+
+            // Static address region 0x20000000-0x2fffffff
+            else if ((decode_addr_dec >= 22'h080000) & (decode_addr_dec <= 22'h0bffff))
+               addr_out_port = 5'b00010;  // Select Output port MI2
+
+            // Static address region 0x30000000-0x3fffffff
+            else if ((decode_addr_dec >= 22'h0c0000) & (decode_addr_dec <= 22'h0fffff))
+               addr_out_port = 5'b00011;  // Select Output port MI3
+
+            // Static address region 0x40000000-0x5fffffff
+            else if ((decode_addr_dec >= 22'h100000) & (decode_addr_dec <= 22'h17ffff))
+               addr_out_port = 5'b00100;  // Select Output port MI4
+
+            // Static address region 0x80000000-0x8fffffff
+            else if ((decode_addr_dec >= 22'h200000) & (decode_addr_dec <= 22'h23ffff))
+               addr_out_port = 5'b00101;  // Select Output port MI5
+
+            // Static address region 0x90000000-0x9fffffff
+            else if ((decode_addr_dec >= 22'h240000) & (decode_addr_dec <= 22'h27ffff))
+               addr_out_port = 5'b00110;  // Select Output port MI6
+
+            // Static address region 0x60000000-0x7fffffff
+            else if ((decode_addr_dec >= 22'h180000) & (decode_addr_dec <= 22'h1fffff))
+               addr_out_port = 5'b00111;  // Select Output port MI7
+            // Static address region 0xa0000000-0xdfffffff
+            else if ((decode_addr_dec >= 22'h280000) & (decode_addr_dec <= 22'h37ffff))
+               addr_out_port = 5'b00111;  // Select Output port MI7
+
+            // Static address region 0xf0000000-0xf003ffff
+            else if ((decode_addr_dec >= 22'h3c0000) & (decode_addr_dec <= 22'h3c00ff))
+               addr_out_port = 5'b01000;  // Select Output port MI8
+
+            else
+              addr_out_port = 5'b10000;   // Select the default slave
+          end
+
+          2'b10 : begin
+            // Remapped address region 0x00000000-0x0fffffff due to REMAP[1]
             if ((decode_addr_dec >= 22'h000000) & (decode_addr_dec <= 22'h03ffff))
-               addr_out_port = 4'b0000;  // Select Output port MI0
-            // Static address region 0x10000000-0x1fffffff
-            else if ((decode_addr_dec >= 22'h040000) & (decode_addr_dec <= 22'h07ffff))
-               addr_out_port = 4'b0000;  // Select Output port MI0
+               addr_out_port = 5'b00001;  // Select Output port MI1
+
+            // Static address region 0x00000000-0x0fffffff
+            else if ((decode_addr_dec >= 22'h000000) & (decode_addr_dec <= 22'h03ffff))
+               addr_out_port = 5'b00000;  // Select Output port MI0
+            // Static address region 0x10000000-0x17ffffff
+            else if ((decode_addr_dec >= 22'h040000) & (decode_addr_dec <= 22'h05ffff))
+               addr_out_port = 5'b00000;  // Select Output port MI0
+
+            // Static address region 0x18000000-0x1fffffff
+            else if ((decode_addr_dec >= 22'h060000) & (decode_addr_dec <= 22'h07ffff))
+               addr_out_port = 5'b00001;  // Select Output port MI1
 
             // Static address region 0x20000000-0x2fffffff
             else if ((decode_addr_dec >= 22'h080000) & (decode_addr_dec <= 22'h0bffff))
-               addr_out_port = 4'b0001;  // Select Output port MI1
+               addr_out_port = 5'b00010;  // Select Output port MI2
 
             // Static address region 0x30000000-0x3fffffff
             else if ((decode_addr_dec >= 22'h0c0000) & (decode_addr_dec <= 22'h0fffff))
-               addr_out_port = 4'b0010;  // Select Output port MI2
+               addr_out_port = 5'b00011;  // Select Output port MI3
 
             // Static address region 0x40000000-0x5fffffff
             else if ((decode_addr_dec >= 22'h100000) & (decode_addr_dec <= 22'h17ffff))
-               addr_out_port = 4'b0011;  // Select Output port MI3
+               addr_out_port = 5'b00100;  // Select Output port MI4
 
             // Static address region 0x80000000-0x8fffffff
             else if ((decode_addr_dec >= 22'h200000) & (decode_addr_dec <= 22'h23ffff))
-               addr_out_port = 4'b0100;  // Select Output port MI4
+               addr_out_port = 5'b00101;  // Select Output port MI5
 
             // Static address region 0x90000000-0x9fffffff
             else if ((decode_addr_dec >= 22'h240000) & (decode_addr_dec <= 22'h27ffff))
-               addr_out_port = 4'b0101;  // Select Output port MI5
+               addr_out_port = 5'b00110;  // Select Output port MI6
 
             // Static address region 0x60000000-0x7fffffff
             else if ((decode_addr_dec >= 22'h180000) & (decode_addr_dec <= 22'h1fffff))
-               addr_out_port = 4'b0110;  // Select Output port MI6
+               addr_out_port = 5'b00111;  // Select Output port MI7
             // Static address region 0xa0000000-0xdfffffff
             else if ((decode_addr_dec >= 22'h280000) & (decode_addr_dec <= 22'h37ffff))
-               addr_out_port = 4'b0110;  // Select Output port MI6
+               addr_out_port = 5'b00111;  // Select Output port MI7
 
             // Static address region 0xf0000000-0xf003ffff
             else if ((decode_addr_dec >= 22'h3c0000) & (decode_addr_dec <= 22'h3c00ff))
-               addr_out_port = 4'b0111;  // Select Output port MI7
+               addr_out_port = 5'b01000;  // Select Output port MI8
 
             else
-              addr_out_port = 4'b1000;   // Select the default slave
+              addr_out_port = 5'b10000;   // Select the default slave
           end
 
-          1'b1 : begin
+          2'b11 : begin
             // Remapped address region 0x00000000-0x0fffffff due to REMAP[0]
             if ((decode_addr_dec >= 22'h000000) & (decode_addr_dec <= 22'h03ffff))
-               addr_out_port = 4'b0001;  // Select Output port MI1
+               addr_out_port = 5'b00010;  // Select Output port MI2
+
+            // Remapped address region 0x00000000-0x0fffffff due to REMAP[1]
+            else if ((decode_addr_dec >= 22'h000000) & (decode_addr_dec <= 22'h03ffff))
+               addr_out_port = 5'b00001;  // Select Output port MI1
 
             // Static address region 0x00000000-0x0fffffff
             else if ((decode_addr_dec >= 22'h000000) & (decode_addr_dec <= 22'h03ffff))
-               addr_out_port = 4'b0000;  // Select Output port MI0
-            // Static address region 0x10000000-0x1fffffff
-            else if ((decode_addr_dec >= 22'h040000) & (decode_addr_dec <= 22'h07ffff))
-               addr_out_port = 4'b0000;  // Select Output port MI0
+               addr_out_port = 5'b00000;  // Select Output port MI0
+            // Static address region 0x10000000-0x17ffffff
+            else if ((decode_addr_dec >= 22'h040000) & (decode_addr_dec <= 22'h05ffff))
+               addr_out_port = 5'b00000;  // Select Output port MI0
+
+            // Static address region 0x18000000-0x1fffffff
+            else if ((decode_addr_dec >= 22'h060000) & (decode_addr_dec <= 22'h07ffff))
+               addr_out_port = 5'b00001;  // Select Output port MI1
 
             // Static address region 0x20000000-0x2fffffff
             else if ((decode_addr_dec >= 22'h080000) & (decode_addr_dec <= 22'h0bffff))
-               addr_out_port = 4'b0001;  // Select Output port MI1
+               addr_out_port = 5'b00010;  // Select Output port MI2
 
             // Static address region 0x30000000-0x3fffffff
             else if ((decode_addr_dec >= 22'h0c0000) & (decode_addr_dec <= 22'h0fffff))
-               addr_out_port = 4'b0010;  // Select Output port MI2
+               addr_out_port = 5'b00011;  // Select Output port MI3
 
             // Static address region 0x40000000-0x5fffffff
             else if ((decode_addr_dec >= 22'h100000) & (decode_addr_dec <= 22'h17ffff))
-               addr_out_port = 4'b0011;  // Select Output port MI3
+               addr_out_port = 5'b00100;  // Select Output port MI4
 
             // Static address region 0x80000000-0x8fffffff
             else if ((decode_addr_dec >= 22'h200000) & (decode_addr_dec <= 22'h23ffff))
-               addr_out_port = 4'b0100;  // Select Output port MI4
+               addr_out_port = 5'b00101;  // Select Output port MI5
 
             // Static address region 0x90000000-0x9fffffff
             else if ((decode_addr_dec >= 22'h240000) & (decode_addr_dec <= 22'h27ffff))
-               addr_out_port = 4'b0101;  // Select Output port MI5
+               addr_out_port = 5'b00110;  // Select Output port MI6
 
             // Static address region 0x60000000-0x7fffffff
             else if ((decode_addr_dec >= 22'h180000) & (decode_addr_dec <= 22'h1fffff))
-               addr_out_port = 4'b0110;  // Select Output port MI6
+               addr_out_port = 5'b00111;  // Select Output port MI7
             // Static address region 0xa0000000-0xdfffffff
             else if ((decode_addr_dec >= 22'h280000) & (decode_addr_dec <= 22'h37ffff))
-               addr_out_port = 4'b0110;  // Select Output port MI6
+               addr_out_port = 5'b00111;  // Select Output port MI7
 
             // Static address region 0xf0000000-0xf003ffff
             else if ((decode_addr_dec >= 22'h3c0000) & (decode_addr_dec <= 22'h3c00ff))
-               addr_out_port = 4'b0111;  // Select Output port MI7
+               addr_out_port = 5'b01000;  // Select Output port MI8
 
             else
-              addr_out_port = 4'b1000;   // Select the default slave
+              addr_out_port = 5'b10000;   // Select the default slave
           end
 
-          default : addr_out_port = {4{1'bx}};
+          default : addr_out_port = {5{1'bx}};
         endcase
 
       end // if (trans_dec != 2'b00)
@@ -445,19 +580,21 @@ module nanosoc_matrix_decode_DEBUG (
       sel_dec5 = 1'b0;
       sel_dec6 = 1'b0;
       sel_dec7 = 1'b0;
+      sel_dec8 = 1'b0;
       sel_dft_slv = 1'b0;
 
       if (sel_dec)
         case (addr_out_port)
-          4'b0000 : sel_dec0 = 1'b1;
-          4'b0001 : sel_dec1 = 1'b1;
-          4'b0010 : sel_dec2 = 1'b1;
-          4'b0011 : sel_dec3 = 1'b1;
-          4'b0100 : sel_dec4 = 1'b1;
-          4'b0101 : sel_dec5 = 1'b1;
-          4'b0110 : sel_dec6 = 1'b1;
-          4'b0111 : sel_dec7 = 1'b1;
-          4'b1000 : sel_dft_slv = 1'b1;    // Select the default slave
+          5'b00000 : sel_dec0 = 1'b1;
+          5'b00001 : sel_dec1 = 1'b1;
+          5'b00010 : sel_dec2 = 1'b1;
+          5'b00011 : sel_dec3 = 1'b1;
+          5'b00100 : sel_dec4 = 1'b1;
+          5'b00101 : sel_dec5 = 1'b1;
+          5'b00110 : sel_dec6 = 1'b1;
+          5'b00111 : sel_dec7 = 1'b1;
+          5'b01000 : sel_dec8 = 1'b1;
+          5'b10000 : sel_dft_slv = 1'b1;    // Select the default slave
           default : begin
             sel_dec0 = 1'bx;
             sel_dec1 = 1'bx;
@@ -467,6 +604,7 @@ module nanosoc_matrix_decode_DEBUG (
             sel_dec5 = 1'bx;
             sel_dec6 = 1'bx;
             sel_dec7 = 1'bx;
+            sel_dec8 = 1'bx;
             sel_dft_slv = 1'bx;
           end
         endcase // case(addr_out_port)
@@ -483,19 +621,21 @@ module nanosoc_matrix_decode_DEBUG (
              active_dec5 or
              active_dec6 or
              active_dec7 or
+             active_dec8 or
              addr_out_port
            )
     begin : p_active_comb
       case (addr_out_port)
-        4'b0000 : active_dec = active_dec0;
-        4'b0001 : active_dec = active_dec1;
-        4'b0010 : active_dec = active_dec2;
-        4'b0011 : active_dec = active_dec3;
-        4'b0100 : active_dec = active_dec4;
-        4'b0101 : active_dec = active_dec5;
-        4'b0110 : active_dec = active_dec6;
-        4'b0111 : active_dec = active_dec7;
-        4'b1000 : active_dec = 1'b1;         // Select the default slave
+        5'b00000 : active_dec = active_dec0;
+        5'b00001 : active_dec = active_dec1;
+        5'b00010 : active_dec = active_dec2;
+        5'b00011 : active_dec = active_dec3;
+        5'b00100 : active_dec = active_dec4;
+        5'b00101 : active_dec = active_dec5;
+        5'b00110 : active_dec = active_dec6;
+        5'b00111 : active_dec = active_dec7;
+        5'b01000 : active_dec = active_dec8;
+        5'b10000 : active_dec = 1'b1;         // Select the default slave
         default : active_dec = 1'bx;
       endcase // case(addr_out_port)
     end // block: p_active_comb
@@ -515,13 +655,13 @@ module nanosoc_matrix_decode_DEBUG (
   always @ (negedge HRESETn or posedge HCLK)
     begin : p_data_out_port_seq
       if (~HRESETn)
-        data_out_port <= 4'b1000;
+        data_out_port <= 5'b10000;
       else
         if (HREADYS)
           if (sel_dec & trans_dec[1])
             data_out_port <= addr_out_port;
           else
-            data_out_port <= 4'b1000;
+            data_out_port <= 5'b10000;
     end // block: p_data_out_port_seq
 
   // HREADYOUTS output decode
@@ -535,19 +675,21 @@ module nanosoc_matrix_decode_DEBUG (
              readyout_dec5 or
              readyout_dec6 or
              readyout_dec7 or
+             readyout_dec8 or
              data_out_port
            )
   begin : p_ready_comb
     case (data_out_port)
-      4'b0000 : HREADYOUTS = readyout_dec0;
-      4'b0001 : HREADYOUTS = readyout_dec1;
-      4'b0010 : HREADYOUTS = readyout_dec2;
-      4'b0011 : HREADYOUTS = readyout_dec3;
-      4'b0100 : HREADYOUTS = readyout_dec4;
-      4'b0101 : HREADYOUTS = readyout_dec5;
-      4'b0110 : HREADYOUTS = readyout_dec6;
-      4'b0111 : HREADYOUTS = readyout_dec7;
-      4'b1000 : HREADYOUTS = readyout_dft_slv;    // Select the default slave
+      5'b00000 : HREADYOUTS = readyout_dec0;
+      5'b00001 : HREADYOUTS = readyout_dec1;
+      5'b00010 : HREADYOUTS = readyout_dec2;
+      5'b00011 : HREADYOUTS = readyout_dec3;
+      5'b00100 : HREADYOUTS = readyout_dec4;
+      5'b00101 : HREADYOUTS = readyout_dec5;
+      5'b00110 : HREADYOUTS = readyout_dec6;
+      5'b00111 : HREADYOUTS = readyout_dec7;
+      5'b01000 : HREADYOUTS = readyout_dec8;
+      5'b10000 : HREADYOUTS = readyout_dft_slv;    // Select the default slave
       default : HREADYOUTS = 1'bx;
     endcase // case(data_out_port)
   end // block: p_ready_comb
@@ -563,19 +705,21 @@ module nanosoc_matrix_decode_DEBUG (
              resp_dec5 or
              resp_dec6 or
              resp_dec7 or
+             resp_dec8 or
              data_out_port
            )
   begin : p_resp_comb
     case (data_out_port)
-      4'b0000 : HRESPS = resp_dec0;
-      4'b0001 : HRESPS = resp_dec1;
-      4'b0010 : HRESPS = resp_dec2;
-      4'b0011 : HRESPS = resp_dec3;
-      4'b0100 : HRESPS = resp_dec4;
-      4'b0101 : HRESPS = resp_dec5;
-      4'b0110 : HRESPS = resp_dec6;
-      4'b0111 : HRESPS = resp_dec7;
-      4'b1000 : HRESPS = resp_dft_slv;     // Select the default slave
+      5'b00000 : HRESPS = resp_dec0;
+      5'b00001 : HRESPS = resp_dec1;
+      5'b00010 : HRESPS = resp_dec2;
+      5'b00011 : HRESPS = resp_dec3;
+      5'b00100 : HRESPS = resp_dec4;
+      5'b00101 : HRESPS = resp_dec5;
+      5'b00110 : HRESPS = resp_dec6;
+      5'b00111 : HRESPS = resp_dec7;
+      5'b01000 : HRESPS = resp_dec8;
+      5'b10000 : HRESPS = resp_dft_slv;     // Select the default slave
       default : HRESPS = {2{1'bx}};
     endcase // case (data_out_port)
   end // block: p_resp_comb
@@ -590,19 +734,21 @@ module nanosoc_matrix_decode_DEBUG (
              rdata_dec5 or
              rdata_dec6 or
              rdata_dec7 or
+             rdata_dec8 or
              data_out_port
            )
   begin : p_rdata_comb
     case (data_out_port)
-      4'b0000 : HRDATAS = rdata_dec0;
-      4'b0001 : HRDATAS = rdata_dec1;
-      4'b0010 : HRDATAS = rdata_dec2;
-      4'b0011 : HRDATAS = rdata_dec3;
-      4'b0100 : HRDATAS = rdata_dec4;
-      4'b0101 : HRDATAS = rdata_dec5;
-      4'b0110 : HRDATAS = rdata_dec6;
-      4'b0111 : HRDATAS = rdata_dec7;
-      4'b1000 : HRDATAS = {32{1'b0}};   // Select the default slave
+      5'b00000 : HRDATAS = rdata_dec0;
+      5'b00001 : HRDATAS = rdata_dec1;
+      5'b00010 : HRDATAS = rdata_dec2;
+      5'b00011 : HRDATAS = rdata_dec3;
+      5'b00100 : HRDATAS = rdata_dec4;
+      5'b00101 : HRDATAS = rdata_dec5;
+      5'b00110 : HRDATAS = rdata_dec6;
+      5'b00111 : HRDATAS = rdata_dec7;
+      5'b01000 : HRDATAS = rdata_dec8;
+      5'b10000 : HRDATAS = {32{1'b0}};   // Select the default slave
       default : HRDATAS = {32{1'bx}};
     endcase // case (data_out_port)
   end // block: p_rdata_comb
diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_0.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_0.v
index 3168cdcc67e04382a2ca1d1f527368cf136937b1..ef547ec50af0c90ad769753e7aa833fdb51269cc 100644
--- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_0.v
+++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_0.v
@@ -3,7 +3,7 @@
 // only be used by a person authorised under and to the extent permitted
 // by a subsisting licensing agreement from Arm Limited or its affiliates.
 //
-//            (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates.
+//            (C) COPYRIGHT 2001-2025 Arm Limited or its affiliates.
 //                ALL RIGHTS RESERVED
 //
 // This entire notice must be reproduced on all copies of this file
@@ -87,6 +87,12 @@ module nanosoc_matrix_decode_DMAC_0 (
     resp_dec6,
     rdata_dec6,
 
+    // Bus-switch output 7
+    active_dec7,
+    readyout_dec7,
+    resp_dec7,
+    rdata_dec7,
+
     // Output port selection signals
     sel_dec0,
     sel_dec1,
@@ -95,6 +101,7 @@ module nanosoc_matrix_decode_DMAC_0 (
     sel_dec4,
     sel_dec5,
     sel_dec6,
+    sel_dec7,
 
     // Selected Output port data and control signals
     active_dec,
@@ -161,6 +168,12 @@ module nanosoc_matrix_decode_DMAC_0 (
     input   [1:0] resp_dec6;          // HRESP input
     input  [31:0] rdata_dec6;         // HRDATA input
 
+    // Bus-switch output MI7
+    input         active_dec7;        // Output stage MI7 active_dec signal
+    input         readyout_dec7;      // HREADYOUT input
+    input   [1:0] resp_dec7;          // HRESP input
+    input  [31:0] rdata_dec7;         // HRDATA input
+
     // Output port selection signals
     output        sel_dec0;           // HSEL output
     output        sel_dec1;           // HSEL output
@@ -169,6 +182,7 @@ module nanosoc_matrix_decode_DMAC_0 (
     output        sel_dec4;           // HSEL output
     output        sel_dec5;           // HSEL output
     output        sel_dec6;           // HSEL output
+    output        sel_dec7;           // HSEL output
 
     // Selected Output port data and control signals
     output        active_dec;         // Combinatorial active_dec O/P
@@ -240,6 +254,13 @@ module nanosoc_matrix_decode_DMAC_0 (
     wire   [31:0] rdata_dec6;          // HRDATA input
     reg           sel_dec6;            // HSEL output
 
+    // Bus-switch output MI7
+    wire          active_dec7;         // active_dec signal
+    wire          readyout_dec7;       // HREADYOUT input
+    wire    [1:0] resp_dec7;           // HRESP input
+    wire   [31:0] rdata_dec7;          // HRDATA input
+    reg           sel_dec7;            // HSEL output
+
 
 // -----------------------------------------------------------------------------
 // Signal declarations
@@ -251,8 +272,8 @@ module nanosoc_matrix_decode_DMAC_0 (
     reg     [1:0] HRESPS;          // Combinatorial HRESPS signal
     reg    [31:0] HRDATAS;         // Read data bus
 
-    reg     [3:0] addr_out_port;     // Address output ports
-    reg     [3:0] data_out_port;     // Data output ports
+    reg     [4:0] addr_out_port;     // Address output ports
+    reg     [4:0] data_out_port;     // Data output ports
 
     // Default slave signals
     reg           sel_dft_slv;       // HSEL signal
@@ -304,42 +325,46 @@ module nanosoc_matrix_decode_DMAC_0 (
       if (trans_dec != 2'b00)
       begin
 
-        // Address region 0x10000000-0x1fffffff
-        if ((decode_addr_dec >= 22'h040000) & (decode_addr_dec <= 22'h07ffff))
-          addr_out_port = 4'b0000;  // Select Output port MI0
+        // Address region 0x10000000-0x17ffffff
+        if ((decode_addr_dec >= 22'h040000) & (decode_addr_dec <= 22'h05ffff))
+          addr_out_port = 5'b00000;  // Select Output port MI0
+
+        // Address region 0x18000000-0x1fffffff
+        else if ((decode_addr_dec >= 22'h060000) & (decode_addr_dec <= 22'h07ffff))
+          addr_out_port = 5'b00001;  // Select Output port MI1
 
         // Address region 0x00000000-0x0fffffff
         else if ((decode_addr_dec >= 22'h000000) & (decode_addr_dec <= 22'h03ffff))
-          addr_out_port = 4'b0001;  // Select Output port MI1
+          addr_out_port = 5'b00010;  // Select Output port MI2
         // Address region 0x20000000-0x2fffffff
         else if ((decode_addr_dec >= 22'h080000) & (decode_addr_dec <= 22'h0bffff))
-          addr_out_port = 4'b0001;  // Select Output port MI1
+          addr_out_port = 5'b00010;  // Select Output port MI2
 
         // Address region 0x30000000-0x3fffffff
         else if ((decode_addr_dec >= 22'h0c0000) & (decode_addr_dec <= 22'h0fffff))
-          addr_out_port = 4'b0010;  // Select Output port MI2
+          addr_out_port = 5'b00011;  // Select Output port MI3
 
         // Address region 0x40000000-0x5fffffff
         else if ((decode_addr_dec >= 22'h100000) & (decode_addr_dec <= 22'h17ffff))
-          addr_out_port = 4'b0011;  // Select Output port MI3
+          addr_out_port = 5'b00100;  // Select Output port MI4
 
         // Address region 0x80000000-0x8fffffff
         else if ((decode_addr_dec >= 22'h200000) & (decode_addr_dec <= 22'h23ffff))
-          addr_out_port = 4'b0100;  // Select Output port MI4
+          addr_out_port = 5'b00101;  // Select Output port MI5
 
         // Address region 0x90000000-0x9fffffff
         else if ((decode_addr_dec >= 22'h240000) & (decode_addr_dec <= 22'h27ffff))
-          addr_out_port = 4'b0101;  // Select Output port MI5
+          addr_out_port = 5'b00110;  // Select Output port MI6
 
         // Address region 0x60000000-0x7fffffff
         else if ((decode_addr_dec >= 22'h180000) & (decode_addr_dec <= 22'h1fffff))
-          addr_out_port = 4'b0110;  // Select Output port MI6
+          addr_out_port = 5'b00111;  // Select Output port MI7
         // Address region 0xa0000000-0xdfffffff
         else if ((decode_addr_dec >= 22'h280000) & (decode_addr_dec <= 22'h37ffff))
-          addr_out_port = 4'b0110;  // Select Output port MI6
+          addr_out_port = 5'b00111;  // Select Output port MI7
 
         else
-          addr_out_port = 4'b1000;   // Select the default slave
+          addr_out_port = 5'b10000;   // Select the default slave
 
       end // if (trans_dec != 2'b00)
       else
@@ -357,18 +382,20 @@ module nanosoc_matrix_decode_DMAC_0 (
       sel_dec4 = 1'b0;
       sel_dec5 = 1'b0;
       sel_dec6 = 1'b0;
+      sel_dec7 = 1'b0;
       sel_dft_slv = 1'b0;
 
       if (sel_dec)
         case (addr_out_port)
-          4'b0000 : sel_dec0 = 1'b1;
-          4'b0001 : sel_dec1 = 1'b1;
-          4'b0010 : sel_dec2 = 1'b1;
-          4'b0011 : sel_dec3 = 1'b1;
-          4'b0100 : sel_dec4 = 1'b1;
-          4'b0101 : sel_dec5 = 1'b1;
-          4'b0110 : sel_dec6 = 1'b1;
-          4'b1000 : sel_dft_slv = 1'b1;    // Select the default slave
+          5'b00000 : sel_dec0 = 1'b1;
+          5'b00001 : sel_dec1 = 1'b1;
+          5'b00010 : sel_dec2 = 1'b1;
+          5'b00011 : sel_dec3 = 1'b1;
+          5'b00100 : sel_dec4 = 1'b1;
+          5'b00101 : sel_dec5 = 1'b1;
+          5'b00110 : sel_dec6 = 1'b1;
+          5'b00111 : sel_dec7 = 1'b1;
+          5'b10000 : sel_dft_slv = 1'b1;    // Select the default slave
           default : begin
             sel_dec0 = 1'bx;
             sel_dec1 = 1'bx;
@@ -377,6 +404,7 @@ module nanosoc_matrix_decode_DMAC_0 (
             sel_dec4 = 1'bx;
             sel_dec5 = 1'bx;
             sel_dec6 = 1'bx;
+            sel_dec7 = 1'bx;
             sel_dft_slv = 1'bx;
           end
         endcase // case(addr_out_port)
@@ -392,18 +420,20 @@ module nanosoc_matrix_decode_DMAC_0 (
              active_dec4 or
              active_dec5 or
              active_dec6 or
+             active_dec7 or
              addr_out_port
            )
     begin : p_active_comb
       case (addr_out_port)
-        4'b0000 : active_dec = active_dec0;
-        4'b0001 : active_dec = active_dec1;
-        4'b0010 : active_dec = active_dec2;
-        4'b0011 : active_dec = active_dec3;
-        4'b0100 : active_dec = active_dec4;
-        4'b0101 : active_dec = active_dec5;
-        4'b0110 : active_dec = active_dec6;
-        4'b1000 : active_dec = 1'b1;         // Select the default slave
+        5'b00000 : active_dec = active_dec0;
+        5'b00001 : active_dec = active_dec1;
+        5'b00010 : active_dec = active_dec2;
+        5'b00011 : active_dec = active_dec3;
+        5'b00100 : active_dec = active_dec4;
+        5'b00101 : active_dec = active_dec5;
+        5'b00110 : active_dec = active_dec6;
+        5'b00111 : active_dec = active_dec7;
+        5'b10000 : active_dec = 1'b1;         // Select the default slave
         default : active_dec = 1'bx;
       endcase // case(addr_out_port)
     end // block: p_active_comb
@@ -423,13 +453,13 @@ module nanosoc_matrix_decode_DMAC_0 (
   always @ (negedge HRESETn or posedge HCLK)
     begin : p_data_out_port_seq
       if (~HRESETn)
-        data_out_port <= 4'b1000;
+        data_out_port <= 5'b10000;
       else
         if (HREADYS)
           if (sel_dec & trans_dec[1])
             data_out_port <= addr_out_port;
           else
-            data_out_port <= 4'b1000;
+            data_out_port <= 5'b10000;
     end // block: p_data_out_port_seq
 
   // HREADYOUTS output decode
@@ -442,18 +472,20 @@ module nanosoc_matrix_decode_DMAC_0 (
              readyout_dec4 or
              readyout_dec5 or
              readyout_dec6 or
+             readyout_dec7 or
              data_out_port
            )
   begin : p_ready_comb
     case (data_out_port)
-      4'b0000 : HREADYOUTS = readyout_dec0;
-      4'b0001 : HREADYOUTS = readyout_dec1;
-      4'b0010 : HREADYOUTS = readyout_dec2;
-      4'b0011 : HREADYOUTS = readyout_dec3;
-      4'b0100 : HREADYOUTS = readyout_dec4;
-      4'b0101 : HREADYOUTS = readyout_dec5;
-      4'b0110 : HREADYOUTS = readyout_dec6;
-      4'b1000 : HREADYOUTS = readyout_dft_slv;    // Select the default slave
+      5'b00000 : HREADYOUTS = readyout_dec0;
+      5'b00001 : HREADYOUTS = readyout_dec1;
+      5'b00010 : HREADYOUTS = readyout_dec2;
+      5'b00011 : HREADYOUTS = readyout_dec3;
+      5'b00100 : HREADYOUTS = readyout_dec4;
+      5'b00101 : HREADYOUTS = readyout_dec5;
+      5'b00110 : HREADYOUTS = readyout_dec6;
+      5'b00111 : HREADYOUTS = readyout_dec7;
+      5'b10000 : HREADYOUTS = readyout_dft_slv;    // Select the default slave
       default : HREADYOUTS = 1'bx;
     endcase // case(data_out_port)
   end // block: p_ready_comb
@@ -468,18 +500,20 @@ module nanosoc_matrix_decode_DMAC_0 (
              resp_dec4 or
              resp_dec5 or
              resp_dec6 or
+             resp_dec7 or
              data_out_port
            )
   begin : p_resp_comb
     case (data_out_port)
-      4'b0000 : HRESPS = resp_dec0;
-      4'b0001 : HRESPS = resp_dec1;
-      4'b0010 : HRESPS = resp_dec2;
-      4'b0011 : HRESPS = resp_dec3;
-      4'b0100 : HRESPS = resp_dec4;
-      4'b0101 : HRESPS = resp_dec5;
-      4'b0110 : HRESPS = resp_dec6;
-      4'b1000 : HRESPS = resp_dft_slv;     // Select the default slave
+      5'b00000 : HRESPS = resp_dec0;
+      5'b00001 : HRESPS = resp_dec1;
+      5'b00010 : HRESPS = resp_dec2;
+      5'b00011 : HRESPS = resp_dec3;
+      5'b00100 : HRESPS = resp_dec4;
+      5'b00101 : HRESPS = resp_dec5;
+      5'b00110 : HRESPS = resp_dec6;
+      5'b00111 : HRESPS = resp_dec7;
+      5'b10000 : HRESPS = resp_dft_slv;     // Select the default slave
       default : HRESPS = {2{1'bx}};
     endcase // case (data_out_port)
   end // block: p_resp_comb
@@ -493,18 +527,20 @@ module nanosoc_matrix_decode_DMAC_0 (
              rdata_dec4 or
              rdata_dec5 or
              rdata_dec6 or
+             rdata_dec7 or
              data_out_port
            )
   begin : p_rdata_comb
     case (data_out_port)
-      4'b0000 : HRDATAS = rdata_dec0;
-      4'b0001 : HRDATAS = rdata_dec1;
-      4'b0010 : HRDATAS = rdata_dec2;
-      4'b0011 : HRDATAS = rdata_dec3;
-      4'b0100 : HRDATAS = rdata_dec4;
-      4'b0101 : HRDATAS = rdata_dec5;
-      4'b0110 : HRDATAS = rdata_dec6;
-      4'b1000 : HRDATAS = {32{1'b0}};   // Select the default slave
+      5'b00000 : HRDATAS = rdata_dec0;
+      5'b00001 : HRDATAS = rdata_dec1;
+      5'b00010 : HRDATAS = rdata_dec2;
+      5'b00011 : HRDATAS = rdata_dec3;
+      5'b00100 : HRDATAS = rdata_dec4;
+      5'b00101 : HRDATAS = rdata_dec5;
+      5'b00110 : HRDATAS = rdata_dec6;
+      5'b00111 : HRDATAS = rdata_dec7;
+      5'b10000 : HRDATAS = {32{1'b0}};   // Select the default slave
       default : HRDATAS = {32{1'bx}};
     endcase // case (data_out_port)
   end // block: p_rdata_comb
diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_1.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_1.v
index de20dcb82bfe62cdcc90b29355dfcf82a784f3cd..c95c0f45d407a8bb51b2afd4150550aaff9b03cf 100644
--- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_1.v
+++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_DMAC_1.v
@@ -3,7 +3,7 @@
 // only be used by a person authorised under and to the extent permitted
 // by a subsisting licensing agreement from Arm Limited or its affiliates.
 //
-//            (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates.
+//            (C) COPYRIGHT 2001-2025 Arm Limited or its affiliates.
 //                ALL RIGHTS RESERVED
 //
 // This entire notice must be reproduced on all copies of this file
@@ -87,6 +87,12 @@ module nanosoc_matrix_decode_DMAC_1 (
     resp_dec6,
     rdata_dec6,
 
+    // Bus-switch output 7
+    active_dec7,
+    readyout_dec7,
+    resp_dec7,
+    rdata_dec7,
+
     // Output port selection signals
     sel_dec0,
     sel_dec1,
@@ -95,6 +101,7 @@ module nanosoc_matrix_decode_DMAC_1 (
     sel_dec4,
     sel_dec5,
     sel_dec6,
+    sel_dec7,
 
     // Selected Output port data and control signals
     active_dec,
@@ -161,6 +168,12 @@ module nanosoc_matrix_decode_DMAC_1 (
     input   [1:0] resp_dec6;          // HRESP input
     input  [31:0] rdata_dec6;         // HRDATA input
 
+    // Bus-switch output MI7
+    input         active_dec7;        // Output stage MI7 active_dec signal
+    input         readyout_dec7;      // HREADYOUT input
+    input   [1:0] resp_dec7;          // HRESP input
+    input  [31:0] rdata_dec7;         // HRDATA input
+
     // Output port selection signals
     output        sel_dec0;           // HSEL output
     output        sel_dec1;           // HSEL output
@@ -169,6 +182,7 @@ module nanosoc_matrix_decode_DMAC_1 (
     output        sel_dec4;           // HSEL output
     output        sel_dec5;           // HSEL output
     output        sel_dec6;           // HSEL output
+    output        sel_dec7;           // HSEL output
 
     // Selected Output port data and control signals
     output        active_dec;         // Combinatorial active_dec O/P
@@ -240,6 +254,13 @@ module nanosoc_matrix_decode_DMAC_1 (
     wire   [31:0] rdata_dec6;          // HRDATA input
     reg           sel_dec6;            // HSEL output
 
+    // Bus-switch output MI7
+    wire          active_dec7;         // active_dec signal
+    wire          readyout_dec7;       // HREADYOUT input
+    wire    [1:0] resp_dec7;           // HRESP input
+    wire   [31:0] rdata_dec7;          // HRDATA input
+    reg           sel_dec7;            // HSEL output
+
 
 // -----------------------------------------------------------------------------
 // Signal declarations
@@ -251,8 +272,8 @@ module nanosoc_matrix_decode_DMAC_1 (
     reg     [1:0] HRESPS;          // Combinatorial HRESPS signal
     reg    [31:0] HRDATAS;         // Read data bus
 
-    reg     [3:0] addr_out_port;     // Address output ports
-    reg     [3:0] data_out_port;     // Data output ports
+    reg     [4:0] addr_out_port;     // Address output ports
+    reg     [4:0] data_out_port;     // Data output ports
 
     // Default slave signals
     reg           sel_dft_slv;       // HSEL signal
@@ -304,42 +325,46 @@ module nanosoc_matrix_decode_DMAC_1 (
       if (trans_dec != 2'b00)
       begin
 
-        // Address region 0x10000000-0x1fffffff
-        if ((decode_addr_dec >= 22'h040000) & (decode_addr_dec <= 22'h07ffff))
-          addr_out_port = 4'b0000;  // Select Output port MI0
+        // Address region 0x10000000-0x17ffffff
+        if ((decode_addr_dec >= 22'h040000) & (decode_addr_dec <= 22'h05ffff))
+          addr_out_port = 5'b00000;  // Select Output port MI0
+
+        // Address region 0x18000000-0x1fffffff
+        else if ((decode_addr_dec >= 22'h060000) & (decode_addr_dec <= 22'h07ffff))
+          addr_out_port = 5'b00001;  // Select Output port MI1
 
         // Address region 0x00000000-0x0fffffff
         else if ((decode_addr_dec >= 22'h000000) & (decode_addr_dec <= 22'h03ffff))
-          addr_out_port = 4'b0001;  // Select Output port MI1
+          addr_out_port = 5'b00010;  // Select Output port MI2
         // Address region 0x20000000-0x2fffffff
         else if ((decode_addr_dec >= 22'h080000) & (decode_addr_dec <= 22'h0bffff))
-          addr_out_port = 4'b0001;  // Select Output port MI1
+          addr_out_port = 5'b00010;  // Select Output port MI2
 
         // Address region 0x30000000-0x3fffffff
         else if ((decode_addr_dec >= 22'h0c0000) & (decode_addr_dec <= 22'h0fffff))
-          addr_out_port = 4'b0010;  // Select Output port MI2
+          addr_out_port = 5'b00011;  // Select Output port MI3
 
         // Address region 0x40000000-0x5fffffff
         else if ((decode_addr_dec >= 22'h100000) & (decode_addr_dec <= 22'h17ffff))
-          addr_out_port = 4'b0011;  // Select Output port MI3
+          addr_out_port = 5'b00100;  // Select Output port MI4
 
         // Address region 0x80000000-0x8fffffff
         else if ((decode_addr_dec >= 22'h200000) & (decode_addr_dec <= 22'h23ffff))
-          addr_out_port = 4'b0100;  // Select Output port MI4
+          addr_out_port = 5'b00101;  // Select Output port MI5
 
         // Address region 0x90000000-0x9fffffff
         else if ((decode_addr_dec >= 22'h240000) & (decode_addr_dec <= 22'h27ffff))
-          addr_out_port = 4'b0101;  // Select Output port MI5
+          addr_out_port = 5'b00110;  // Select Output port MI6
 
         // Address region 0x60000000-0x7fffffff
         else if ((decode_addr_dec >= 22'h180000) & (decode_addr_dec <= 22'h1fffff))
-          addr_out_port = 4'b0110;  // Select Output port MI6
+          addr_out_port = 5'b00111;  // Select Output port MI7
         // Address region 0xa0000000-0xdfffffff
         else if ((decode_addr_dec >= 22'h280000) & (decode_addr_dec <= 22'h37ffff))
-          addr_out_port = 4'b0110;  // Select Output port MI6
+          addr_out_port = 5'b00111;  // Select Output port MI7
 
         else
-          addr_out_port = 4'b1000;   // Select the default slave
+          addr_out_port = 5'b10000;   // Select the default slave
 
       end // if (trans_dec != 2'b00)
       else
@@ -357,18 +382,20 @@ module nanosoc_matrix_decode_DMAC_1 (
       sel_dec4 = 1'b0;
       sel_dec5 = 1'b0;
       sel_dec6 = 1'b0;
+      sel_dec7 = 1'b0;
       sel_dft_slv = 1'b0;
 
       if (sel_dec)
         case (addr_out_port)
-          4'b0000 : sel_dec0 = 1'b1;
-          4'b0001 : sel_dec1 = 1'b1;
-          4'b0010 : sel_dec2 = 1'b1;
-          4'b0011 : sel_dec3 = 1'b1;
-          4'b0100 : sel_dec4 = 1'b1;
-          4'b0101 : sel_dec5 = 1'b1;
-          4'b0110 : sel_dec6 = 1'b1;
-          4'b1000 : sel_dft_slv = 1'b1;    // Select the default slave
+          5'b00000 : sel_dec0 = 1'b1;
+          5'b00001 : sel_dec1 = 1'b1;
+          5'b00010 : sel_dec2 = 1'b1;
+          5'b00011 : sel_dec3 = 1'b1;
+          5'b00100 : sel_dec4 = 1'b1;
+          5'b00101 : sel_dec5 = 1'b1;
+          5'b00110 : sel_dec6 = 1'b1;
+          5'b00111 : sel_dec7 = 1'b1;
+          5'b10000 : sel_dft_slv = 1'b1;    // Select the default slave
           default : begin
             sel_dec0 = 1'bx;
             sel_dec1 = 1'bx;
@@ -377,6 +404,7 @@ module nanosoc_matrix_decode_DMAC_1 (
             sel_dec4 = 1'bx;
             sel_dec5 = 1'bx;
             sel_dec6 = 1'bx;
+            sel_dec7 = 1'bx;
             sel_dft_slv = 1'bx;
           end
         endcase // case(addr_out_port)
@@ -392,18 +420,20 @@ module nanosoc_matrix_decode_DMAC_1 (
              active_dec4 or
              active_dec5 or
              active_dec6 or
+             active_dec7 or
              addr_out_port
            )
     begin : p_active_comb
       case (addr_out_port)
-        4'b0000 : active_dec = active_dec0;
-        4'b0001 : active_dec = active_dec1;
-        4'b0010 : active_dec = active_dec2;
-        4'b0011 : active_dec = active_dec3;
-        4'b0100 : active_dec = active_dec4;
-        4'b0101 : active_dec = active_dec5;
-        4'b0110 : active_dec = active_dec6;
-        4'b1000 : active_dec = 1'b1;         // Select the default slave
+        5'b00000 : active_dec = active_dec0;
+        5'b00001 : active_dec = active_dec1;
+        5'b00010 : active_dec = active_dec2;
+        5'b00011 : active_dec = active_dec3;
+        5'b00100 : active_dec = active_dec4;
+        5'b00101 : active_dec = active_dec5;
+        5'b00110 : active_dec = active_dec6;
+        5'b00111 : active_dec = active_dec7;
+        5'b10000 : active_dec = 1'b1;         // Select the default slave
         default : active_dec = 1'bx;
       endcase // case(addr_out_port)
     end // block: p_active_comb
@@ -423,13 +453,13 @@ module nanosoc_matrix_decode_DMAC_1 (
   always @ (negedge HRESETn or posedge HCLK)
     begin : p_data_out_port_seq
       if (~HRESETn)
-        data_out_port <= 4'b1000;
+        data_out_port <= 5'b10000;
       else
         if (HREADYS)
           if (sel_dec & trans_dec[1])
             data_out_port <= addr_out_port;
           else
-            data_out_port <= 4'b1000;
+            data_out_port <= 5'b10000;
     end // block: p_data_out_port_seq
 
   // HREADYOUTS output decode
@@ -442,18 +472,20 @@ module nanosoc_matrix_decode_DMAC_1 (
              readyout_dec4 or
              readyout_dec5 or
              readyout_dec6 or
+             readyout_dec7 or
              data_out_port
            )
   begin : p_ready_comb
     case (data_out_port)
-      4'b0000 : HREADYOUTS = readyout_dec0;
-      4'b0001 : HREADYOUTS = readyout_dec1;
-      4'b0010 : HREADYOUTS = readyout_dec2;
-      4'b0011 : HREADYOUTS = readyout_dec3;
-      4'b0100 : HREADYOUTS = readyout_dec4;
-      4'b0101 : HREADYOUTS = readyout_dec5;
-      4'b0110 : HREADYOUTS = readyout_dec6;
-      4'b1000 : HREADYOUTS = readyout_dft_slv;    // Select the default slave
+      5'b00000 : HREADYOUTS = readyout_dec0;
+      5'b00001 : HREADYOUTS = readyout_dec1;
+      5'b00010 : HREADYOUTS = readyout_dec2;
+      5'b00011 : HREADYOUTS = readyout_dec3;
+      5'b00100 : HREADYOUTS = readyout_dec4;
+      5'b00101 : HREADYOUTS = readyout_dec5;
+      5'b00110 : HREADYOUTS = readyout_dec6;
+      5'b00111 : HREADYOUTS = readyout_dec7;
+      5'b10000 : HREADYOUTS = readyout_dft_slv;    // Select the default slave
       default : HREADYOUTS = 1'bx;
     endcase // case(data_out_port)
   end // block: p_ready_comb
@@ -468,18 +500,20 @@ module nanosoc_matrix_decode_DMAC_1 (
              resp_dec4 or
              resp_dec5 or
              resp_dec6 or
+             resp_dec7 or
              data_out_port
            )
   begin : p_resp_comb
     case (data_out_port)
-      4'b0000 : HRESPS = resp_dec0;
-      4'b0001 : HRESPS = resp_dec1;
-      4'b0010 : HRESPS = resp_dec2;
-      4'b0011 : HRESPS = resp_dec3;
-      4'b0100 : HRESPS = resp_dec4;
-      4'b0101 : HRESPS = resp_dec5;
-      4'b0110 : HRESPS = resp_dec6;
-      4'b1000 : HRESPS = resp_dft_slv;     // Select the default slave
+      5'b00000 : HRESPS = resp_dec0;
+      5'b00001 : HRESPS = resp_dec1;
+      5'b00010 : HRESPS = resp_dec2;
+      5'b00011 : HRESPS = resp_dec3;
+      5'b00100 : HRESPS = resp_dec4;
+      5'b00101 : HRESPS = resp_dec5;
+      5'b00110 : HRESPS = resp_dec6;
+      5'b00111 : HRESPS = resp_dec7;
+      5'b10000 : HRESPS = resp_dft_slv;     // Select the default slave
       default : HRESPS = {2{1'bx}};
     endcase // case (data_out_port)
   end // block: p_resp_comb
@@ -493,18 +527,20 @@ module nanosoc_matrix_decode_DMAC_1 (
              rdata_dec4 or
              rdata_dec5 or
              rdata_dec6 or
+             rdata_dec7 or
              data_out_port
            )
   begin : p_rdata_comb
     case (data_out_port)
-      4'b0000 : HRDATAS = rdata_dec0;
-      4'b0001 : HRDATAS = rdata_dec1;
-      4'b0010 : HRDATAS = rdata_dec2;
-      4'b0011 : HRDATAS = rdata_dec3;
-      4'b0100 : HRDATAS = rdata_dec4;
-      4'b0101 : HRDATAS = rdata_dec5;
-      4'b0110 : HRDATAS = rdata_dec6;
-      4'b1000 : HRDATAS = {32{1'b0}};   // Select the default slave
+      5'b00000 : HRDATAS = rdata_dec0;
+      5'b00001 : HRDATAS = rdata_dec1;
+      5'b00010 : HRDATAS = rdata_dec2;
+      5'b00011 : HRDATAS = rdata_dec3;
+      5'b00100 : HRDATAS = rdata_dec4;
+      5'b00101 : HRDATAS = rdata_dec5;
+      5'b00110 : HRDATAS = rdata_dec6;
+      5'b00111 : HRDATAS = rdata_dec7;
+      5'b10000 : HRDATAS = {32{1'b0}};   // Select the default slave
       default : HRDATAS = {32{1'bx}};
     endcase // case (data_out_port)
   end // block: p_rdata_comb
diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_BOOTROM_0.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_BOOTROM_0.v
index d8f6faa12de9f41fe2e523e6f1c3f42ce9be1749..2a8ab327069812db5086149a92db72f000d51fdf 100644
--- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_BOOTROM_0.v
+++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_BOOTROM_0.v
@@ -3,7 +3,7 @@
 // only be used by a person authorised under and to the extent permitted
 // by a subsisting licensing agreement from Arm Limited or its affiliates.
 //
-//            (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates.
+//            (C) COPYRIGHT 2001-2025 Arm Limited or its affiliates.
 //                ALL RIGHTS RESERVED
 //
 // This entire notice must be reproduced on all copies of this file
diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_DMEM_0.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_DMEM_0.v
index e06782c3c5bb7e27fafcd09541cfaecdabd7f178..c8f1bc10cd4269c79ecd31eb84a4162f654363fb 100644
--- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_DMEM_0.v
+++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_DMEM_0.v
@@ -3,7 +3,7 @@
 // only be used by a person authorised under and to the extent permitted
 // by a subsisting licensing agreement from Arm Limited or its affiliates.
 //
-//            (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates.
+//            (C) COPYRIGHT 2001-2025 Arm Limited or its affiliates.
 //                ALL RIGHTS RESERVED
 //
 // This entire notice must be reproduced on all copies of this file
diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXP.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXP.v
index aabb3151cda23a9bdb48506f3778e9aa527d824d..81356b33aa75446911ef9344880f18aaab157374 100644
--- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXP.v
+++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXP.v
@@ -3,7 +3,7 @@
 // only be used by a person authorised under and to the extent permitted
 // by a subsisting licensing agreement from Arm Limited or its affiliates.
 //
-//            (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates.
+//            (C) COPYRIGHT 2001-2025 Arm Limited or its affiliates.
 //                ALL RIGHTS RESERVED
 //
 // This entire notice must be reproduced on all copies of this file
diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXPRAM_H.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXPRAM_H.v
index fa9842dbd9cf78a3b9af2d406ce5b92509716610..73bdc733f21c9a1dd03530cc1c1ce1eb7ea70505 100644
--- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXPRAM_H.v
+++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXPRAM_H.v
@@ -3,7 +3,7 @@
 // only be used by a person authorised under and to the extent permitted
 // by a subsisting licensing agreement from Arm Limited or its affiliates.
 //
-//            (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates.
+//            (C) COPYRIGHT 2001-2025 Arm Limited or its affiliates.
 //                ALL RIGHTS RESERVED
 //
 // This entire notice must be reproduced on all copies of this file
diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXPRAM_L.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXPRAM_L.v
index d772da2bafc3b613335fb2230de3618b6f7b5b56..59ed236ce174fdf11b98b99601d532f1ddc0eabd 100644
--- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXPRAM_L.v
+++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXPRAM_L.v
@@ -3,7 +3,7 @@
 // only be used by a person authorised under and to the extent permitted
 // by a subsisting licensing agreement from Arm Limited or its affiliates.
 //
-//            (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates.
+//            (C) COPYRIGHT 2001-2025 Arm Limited or its affiliates.
 //                ALL RIGHTS RESERVED
 //
 // This entire notice must be reproduced on all copies of this file
diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXTROM_0.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXTROM_0.v
new file mode 100644
index 0000000000000000000000000000000000000000..17f53d2e8bd6f02892131f873351aed85259a35e
--- /dev/null
+++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_EXTROM_0.v
@@ -0,0 +1,563 @@
+//-----------------------------------------------------------------------------
+// The confidential and proprietary information contained in this file may
+// only be used by a person authorised under and to the extent permitted
+// by a subsisting licensing agreement from Arm Limited or its affiliates.
+//
+//            (C) COPYRIGHT 2001-2025 Arm Limited or its affiliates.
+//                ALL RIGHTS RESERVED
+//
+// This entire notice must be reproduced on all copies of this file
+// and copies of this file may only be made by a person if such person is
+// permitted to do so under the terms of a subsisting license agreement
+// from Arm Limited or its affiliates.
+//
+//      SVN Information
+//
+//      Checked In          : $Date: 2017-10-10 15:55:38 +0100 (Tue, 10 Oct 2017) $
+//
+//      Revision            : $Revision: 371321 $
+//
+//      Release Information : Cortex-M System Design Kit-r1p1-00rel0
+//
+//-----------------------------------------------------------------------------
+//
+//-----------------------------------------------------------------------------
+//  Abstract            : The Output Stage is used to route the required input
+//                        stage to the shared slave output.
+//
+//  Notes               : The bus matrix has sparse connectivity,
+//                         and has a burst arbiter scheme.
+//
+//-----------------------------------------------------------------------------
+
+
+
+module nanosoc_target_output_EXTROM_0 (
+
+    // Common AHB signals
+    HCLK,
+    HRESETn,
+
+    // Port 0 Signals
+    sel_op0,
+    addr_op0,
+    trans_op0,
+    write_op0,
+    size_op0,
+    burst_op0,
+    prot_op0,
+    master_op0,
+    mastlock_op0,
+    wdata_op0,
+    held_tran_op0,
+
+    // Port 1 Signals
+    sel_op1,
+    addr_op1,
+    trans_op1,
+    write_op1,
+    size_op1,
+    burst_op1,
+    prot_op1,
+    master_op1,
+    mastlock_op1,
+    wdata_op1,
+    held_tran_op1,
+
+    // Port 2 Signals
+    sel_op2,
+    addr_op2,
+    trans_op2,
+    write_op2,
+    size_op2,
+    burst_op2,
+    prot_op2,
+    master_op2,
+    mastlock_op2,
+    wdata_op2,
+    held_tran_op2,
+
+    // Port 3 Signals
+    sel_op3,
+    addr_op3,
+    trans_op3,
+    write_op3,
+    size_op3,
+    burst_op3,
+    prot_op3,
+    master_op3,
+    mastlock_op3,
+    wdata_op3,
+    held_tran_op3,
+
+    // Slave read data and response
+    HREADYOUTM,
+
+    active_op0,
+    active_op1,
+    active_op2,
+    active_op3,
+
+    // Slave Address/Control Signals
+    HSELM,
+    HADDRM,
+    HTRANSM,
+    HWRITEM,
+    HSIZEM,
+    HBURSTM,
+    HPROTM,
+    HMASTERM,
+    HMASTLOCKM,
+    HREADYMUXM,
+    HWDATAM
+
+    );
+
+
+// -----------------------------------------------------------------------------
+// Input and Output declarations
+// -----------------------------------------------------------------------------
+
+    // Common AHB signals
+    input         HCLK;       // AHB system clock
+    input         HRESETn;    // AHB system reset
+
+    // Bus-switch input 0
+    input         sel_op0;       // Port 0 HSEL signal
+    input [31:0]  addr_op0;      // Port 0 HADDR signal
+    input  [1:0]  trans_op0;     // Port 0 HTRANS signal
+    input         write_op0;     // Port 0 HWRITE signal
+    input  [2:0]  size_op0;      // Port 0 HSIZE signal
+    input  [2:0]  burst_op0;     // Port 0 HBURST signal
+    input  [3:0]  prot_op0;      // Port 0 HPROT signal
+    input  [3:0]  master_op0;    // Port 0 HMASTER signal
+    input         mastlock_op0;  // Port 0 HMASTLOCK signal
+    input [31:0]  wdata_op0;     // Port 0 HWDATA signal
+    input         held_tran_op0;  // Port 0 HeldTran signal
+
+    // Bus-switch input 1
+    input         sel_op1;       // Port 1 HSEL signal
+    input [31:0]  addr_op1;      // Port 1 HADDR signal
+    input  [1:0]  trans_op1;     // Port 1 HTRANS signal
+    input         write_op1;     // Port 1 HWRITE signal
+    input  [2:0]  size_op1;      // Port 1 HSIZE signal
+    input  [2:0]  burst_op1;     // Port 1 HBURST signal
+    input  [3:0]  prot_op1;      // Port 1 HPROT signal
+    input  [3:0]  master_op1;    // Port 1 HMASTER signal
+    input         mastlock_op1;  // Port 1 HMASTLOCK signal
+    input [31:0]  wdata_op1;     // Port 1 HWDATA signal
+    input         held_tran_op1;  // Port 1 HeldTran signal
+
+    // Bus-switch input 2
+    input         sel_op2;       // Port 2 HSEL signal
+    input [31:0]  addr_op2;      // Port 2 HADDR signal
+    input  [1:0]  trans_op2;     // Port 2 HTRANS signal
+    input         write_op2;     // Port 2 HWRITE signal
+    input  [2:0]  size_op2;      // Port 2 HSIZE signal
+    input  [2:0]  burst_op2;     // Port 2 HBURST signal
+    input  [3:0]  prot_op2;      // Port 2 HPROT signal
+    input  [3:0]  master_op2;    // Port 2 HMASTER signal
+    input         mastlock_op2;  // Port 2 HMASTLOCK signal
+    input [31:0]  wdata_op2;     // Port 2 HWDATA signal
+    input         held_tran_op2;  // Port 2 HeldTran signal
+
+    // Bus-switch input 3
+    input         sel_op3;       // Port 3 HSEL signal
+    input [31:0]  addr_op3;      // Port 3 HADDR signal
+    input  [1:0]  trans_op3;     // Port 3 HTRANS signal
+    input         write_op3;     // Port 3 HWRITE signal
+    input  [2:0]  size_op3;      // Port 3 HSIZE signal
+    input  [2:0]  burst_op3;     // Port 3 HBURST signal
+    input  [3:0]  prot_op3;      // Port 3 HPROT signal
+    input  [3:0]  master_op3;    // Port 3 HMASTER signal
+    input         mastlock_op3;  // Port 3 HMASTLOCK signal
+    input [31:0]  wdata_op3;     // Port 3 HWDATA signal
+    input         held_tran_op3;  // Port 3 HeldTran signal
+
+    input         HREADYOUTM; // HREADY feedback
+
+    output        active_op0;    // Port 0 Active signal
+    output        active_op1;    // Port 1 Active signal
+    output        active_op2;    // Port 2 Active signal
+    output        active_op3;    // Port 3 Active signal
+
+    // Slave Address/Control Signals
+    output        HSELM;      // Slave select line
+    output [31:0] HADDRM;     // Address
+    output  [1:0] HTRANSM;    // Transfer type
+    output        HWRITEM;    // Transfer direction
+    output  [2:0] HSIZEM;     // Transfer size
+    output  [2:0] HBURSTM;    // Burst type
+    output  [3:0] HPROTM;     // Protection control
+    output  [3:0] HMASTERM;   // Master ID
+    output        HMASTLOCKM; // Locked transfer
+    output        HREADYMUXM; // Transfer done
+    output [31:0] HWDATAM;    // Write data
+
+
+// -----------------------------------------------------------------------------
+// Wire declarations
+// -----------------------------------------------------------------------------
+    wire        HCLK;       // AHB system clock
+    wire        HRESETn;    // AHB system reset
+
+    // Bus-switch input 0
+    wire        sel_op0;       // Port 0 HSEL signal
+    wire [31:0] addr_op0;      // Port 0 HADDR signal
+    wire  [1:0] trans_op0;     // Port 0 HTRANS signal
+    wire        write_op0;     // Port 0 HWRITE signal
+    wire  [2:0] size_op0;      // Port 0 HSIZE signal
+    wire  [2:0] burst_op0;     // Port 0 HBURST signal
+    wire  [3:0] prot_op0;      // Port 0 HPROT signal
+    wire  [3:0] master_op0;    // Port 0 HMASTER signal
+    wire        mastlock_op0;  // Port 0 HMASTLOCK signal
+    wire [31:0] wdata_op0;     // Port 0 HWDATA signal
+    wire        held_tran_op0;  // Port 0 HeldTran signal
+    reg         active_op0;    // Port 0 Active signal
+
+    // Bus-switch input 1
+    wire        sel_op1;       // Port 1 HSEL signal
+    wire [31:0] addr_op1;      // Port 1 HADDR signal
+    wire  [1:0] trans_op1;     // Port 1 HTRANS signal
+    wire        write_op1;     // Port 1 HWRITE signal
+    wire  [2:0] size_op1;      // Port 1 HSIZE signal
+    wire  [2:0] burst_op1;     // Port 1 HBURST signal
+    wire  [3:0] prot_op1;      // Port 1 HPROT signal
+    wire  [3:0] master_op1;    // Port 1 HMASTER signal
+    wire        mastlock_op1;  // Port 1 HMASTLOCK signal
+    wire [31:0] wdata_op1;     // Port 1 HWDATA signal
+    wire        held_tran_op1;  // Port 1 HeldTran signal
+    reg         active_op1;    // Port 1 Active signal
+
+    // Bus-switch input 2
+    wire        sel_op2;       // Port 2 HSEL signal
+    wire [31:0] addr_op2;      // Port 2 HADDR signal
+    wire  [1:0] trans_op2;     // Port 2 HTRANS signal
+    wire        write_op2;     // Port 2 HWRITE signal
+    wire  [2:0] size_op2;      // Port 2 HSIZE signal
+    wire  [2:0] burst_op2;     // Port 2 HBURST signal
+    wire  [3:0] prot_op2;      // Port 2 HPROT signal
+    wire  [3:0] master_op2;    // Port 2 HMASTER signal
+    wire        mastlock_op2;  // Port 2 HMASTLOCK signal
+    wire [31:0] wdata_op2;     // Port 2 HWDATA signal
+    wire        held_tran_op2;  // Port 2 HeldTran signal
+    reg         active_op2;    // Port 2 Active signal
+
+    // Bus-switch input 3
+    wire        sel_op3;       // Port 3 HSEL signal
+    wire [31:0] addr_op3;      // Port 3 HADDR signal
+    wire  [1:0] trans_op3;     // Port 3 HTRANS signal
+    wire        write_op3;     // Port 3 HWRITE signal
+    wire  [2:0] size_op3;      // Port 3 HSIZE signal
+    wire  [2:0] burst_op3;     // Port 3 HBURST signal
+    wire  [3:0] prot_op3;      // Port 3 HPROT signal
+    wire  [3:0] master_op3;    // Port 3 HMASTER signal
+    wire        mastlock_op3;  // Port 3 HMASTLOCK signal
+    wire [31:0] wdata_op3;     // Port 3 HWDATA signal
+    wire        held_tran_op3;  // Port 3 HeldTran signal
+    reg         active_op3;    // Port 3 Active signal
+
+    // Slave Address/Control Signals
+    wire        HSELM;      // Slave select line
+    reg  [31:0] HADDRM;     // Address
+    wire  [1:0] HTRANSM;    // Transfer type
+    reg         HWRITEM;    // Transfer direction
+    reg   [2:0] HSIZEM;     // Transfer size
+    wire  [2:0] HBURSTM;    // Burst type
+    reg   [3:0] HPROTM;     // Protection control
+    reg   [3:0] HMASTERM;   // Master ID
+    wire        HMASTLOCKM; // Locked transfer
+    wire        HREADYMUXM; // Transfer done
+    reg  [31:0] HWDATAM;    // Write data
+    wire        HREADYOUTM; // HREADY feedback
+
+
+// -----------------------------------------------------------------------------
+// Signal declarations
+// -----------------------------------------------------------------------------
+    wire        req_port0;     // Port 0 request signal
+    wire        req_port1;     // Port 1 request signal
+    wire        req_port2;     // Port 2 request signal
+    wire        req_port3;     // Port 3 request signal
+
+    wire  [1:0] addr_in_port;   // Address input port
+    reg   [1:0] data_in_port;   // Data input port
+    wire        no_port;       // No port selected signal
+    reg         slave_sel;     // Slave select signal
+    reg         wdata_phase;   // Used to prevent unnecesary toggling
+
+    reg         hsel_lock;     // Held HSELS during locked sequence
+    wire        next_hsel_lock; // Pre-registered hsel_lock
+    wire        hlock_arb;     // HMASTLOCK modified by HSEL for arbitration
+
+    reg         i_hselm;       // Internal HSELM
+    reg   [1:0] i_htransm;     // Internal HTRANSM
+    reg   [2:0] i_hburstm;     // Internal HBURSTM
+    wire        i_hreadymuxm;  // Internal HREADYMUXM
+    reg         i_hmastlockm;  // Internal HMASTLOCKM
+
+
+// -----------------------------------------------------------------------------
+// Beginning of main code
+// -----------------------------------------------------------------------------
+
+// -----------------------------------------------------------------------------
+// Port Selection
+// -----------------------------------------------------------------------------
+
+  assign req_port0 = held_tran_op0 & sel_op0;
+  assign req_port1 = held_tran_op1 & sel_op1;
+  assign req_port2 = held_tran_op2 & sel_op2;
+  assign req_port3 = held_tran_op3 & sel_op3;
+
+  // Arbiter instance for resolving requests to this output stage
+  nanosoc_arbiter_EXTROM_0 u_output_arb (
+
+    .HCLK       (HCLK),
+    .HRESETn    (HRESETn),
+
+    .req_port0   (req_port0),
+    .req_port1   (req_port1),
+    .req_port2   (req_port2),
+    .req_port3   (req_port3),
+
+    .HREADYM    (i_hreadymuxm),
+    .HSELM      (i_hselm),
+    .HTRANSM    (i_htransm),
+    .HBURSTM    (i_hburstm),
+    .HMASTLOCKM (hlock_arb),
+
+    .addr_in_port (addr_in_port),
+    .no_port     (no_port)
+
+    );
+
+
+  // Active signal combinatorial decode
+  always @ (addr_in_port or no_port)
+    begin : p_active_comb
+      // Default value(s)
+      active_op0 = 1'b0;
+      active_op1 = 1'b0;
+      active_op2 = 1'b0;
+      active_op3 = 1'b0;
+
+      // Decode selection when enabled
+      if (~no_port)
+        case (addr_in_port)
+          2'b00 : active_op0 = 1'b1;
+          2'b01 : active_op1 = 1'b1;
+          2'b10 : active_op2 = 1'b1;
+          2'b11 : active_op3 = 1'b1;
+          default : begin
+            active_op0 = 1'bx;
+            active_op1 = 1'bx;
+            active_op2 = 1'bx;
+            active_op3 = 1'bx;
+          end
+        endcase // case(addr_in_port)
+    end // block: p_active_comb
+
+
+  //  Address/control output decode
+  always @ (
+             sel_op0 or addr_op0 or trans_op0 or write_op0 or
+             size_op0 or burst_op0 or prot_op0 or
+             master_op0 or mastlock_op0 or
+             sel_op1 or addr_op1 or trans_op1 or write_op1 or
+             size_op1 or burst_op1 or prot_op1 or
+             master_op1 or mastlock_op1 or
+             sel_op2 or addr_op2 or trans_op2 or write_op2 or
+             size_op2 or burst_op2 or prot_op2 or
+             master_op2 or mastlock_op2 or
+             sel_op3 or addr_op3 or trans_op3 or write_op3 or
+             size_op3 or burst_op3 or prot_op3 or
+             master_op3 or mastlock_op3 or
+             addr_in_port or no_port
+           )
+    begin : p_addr_mux
+      // Default values
+      i_hselm     = 1'b0;
+      HADDRM      = {32{1'b0}};
+      i_htransm   = 2'b00;
+      HWRITEM     = 1'b0;
+      HSIZEM      = 3'b000;
+      i_hburstm   = 3'b000;
+      HPROTM      = {4{1'b0}};
+      HMASTERM    = 4'b0000;
+      i_hmastlockm= 1'b0;
+
+      // Decode selection when enabled
+      if (~no_port)
+        case (addr_in_port)
+          // Bus-switch input 0
+          2'b00 :
+            begin
+              i_hselm     = sel_op0;
+              HADDRM      = addr_op0;
+              i_htransm   = trans_op0;
+              HWRITEM     = write_op0;
+              HSIZEM      = size_op0;
+              i_hburstm   = burst_op0;
+              HPROTM      = prot_op0;
+              HMASTERM    = master_op0;
+              i_hmastlockm= mastlock_op0;
+            end // case: 4'b00
+
+          // Bus-switch input 1
+          2'b01 :
+            begin
+              i_hselm     = sel_op1;
+              HADDRM      = addr_op1;
+              i_htransm   = trans_op1;
+              HWRITEM     = write_op1;
+              HSIZEM      = size_op1;
+              i_hburstm   = burst_op1;
+              HPROTM      = prot_op1;
+              HMASTERM    = master_op1;
+              i_hmastlockm= mastlock_op1;
+            end // case: 4'b01
+
+          // Bus-switch input 2
+          2'b10 :
+            begin
+              i_hselm     = sel_op2;
+              HADDRM      = addr_op2;
+              i_htransm   = trans_op2;
+              HWRITEM     = write_op2;
+              HSIZEM      = size_op2;
+              i_hburstm   = burst_op2;
+              HPROTM      = prot_op2;
+              HMASTERM    = master_op2;
+              i_hmastlockm= mastlock_op2;
+            end // case: 4'b10
+
+          // Bus-switch input 3
+          2'b11 :
+            begin
+              i_hselm     = sel_op3;
+              HADDRM      = addr_op3;
+              i_htransm   = trans_op3;
+              HWRITEM     = write_op3;
+              HSIZEM      = size_op3;
+              i_hburstm   = burst_op3;
+              HPROTM      = prot_op3;
+              HMASTERM    = master_op3;
+              i_hmastlockm= mastlock_op3;
+            end // case: 4'b11
+
+          default :
+            begin
+              i_hselm     = 1'bx;
+              HADDRM      = {32{1'bx}};
+              i_htransm   = 2'bxx;
+              HWRITEM     = 1'bx;
+              HSIZEM      = 3'bxxx;
+              i_hburstm   = 3'bxxx;
+              HPROTM      = {4{1'bx}};
+              HMASTERM    = 4'bxxxx;
+              i_hmastlockm= 1'bx;
+            end // case: default
+        endcase // case(addr_in_port)
+    end // block: p_addr_mux
+
+  // hsel_lock provides support for AHB masters that address other
+  // slave regions in the middle of a locked sequence (i.e. HSEL is
+  // de-asserted during the locked sequence).  Unless HMASTLOCK is
+  // held during these intermediate cycles, the OutputArb scheme will
+  // lose track of the locked sequence and may allow another input
+  // port to access the output port which should be locked
+  assign next_hsel_lock = (i_hselm & i_htransm[1] & i_hmastlockm) ? 1'b1 :
+                         (i_hmastlockm == 1'b0) ? 1'b0 :
+                          hsel_lock;
+
+  // Register hsel_lock
+  always @ (negedge HRESETn or posedge HCLK)
+    begin : p_hsel_lock
+      if (~HRESETn)
+        hsel_lock <= 1'b0;
+      else
+        if (i_hreadymuxm)
+          hsel_lock <= next_hsel_lock;
+    end
+
+  // Version of HMASTLOCK which is masked when not selected, unless a
+  // locked sequence has already begun through this port
+  assign hlock_arb = i_hmastlockm & (hsel_lock | i_hselm);
+
+  assign HTRANSM    = i_htransm;
+  assign HBURSTM    = i_hburstm;
+  assign HSELM      = i_hselm;
+  assign HMASTLOCKM = i_hmastlockm;
+
+  // Dataport register
+  always @ (negedge HRESETn or posedge HCLK)
+    begin : p_data_in_port_reg
+      if (~HRESETn)
+        data_in_port <= 2'b11;
+      else
+        if (i_hreadymuxm)
+          data_in_port <= addr_in_port;
+    end
+
+  // Dataphase register
+  always @ (negedge HRESETn or posedge HCLK)
+    begin : p_wdata_phase_reg
+      if (~HRESETn)
+        wdata_phase <= 1'b0;
+      else
+        if (i_hreadymuxm)
+          wdata_phase <= i_hselm & i_htransm[1];
+    end
+
+
+  // HWDATAM output decode
+  always @ (
+             wdata_op0 or
+             wdata_op1 or
+             wdata_op2 or
+             wdata_op3 or
+             data_in_port or wdata_phase
+           )
+    begin : p_data_mux
+      // Default value
+      HWDATAM = {32{1'b0}};
+
+      // If interface active
+      if (wdata_phase)
+        // Decode selection
+        case (data_in_port)
+          2'b00 : HWDATAM  = wdata_op0;
+          2'b01 : HWDATAM  = wdata_op1;
+          2'b10 : HWDATAM  = wdata_op2;
+          2'b11 : HWDATAM  = wdata_op3;
+          default : HWDATAM = {32{1'bx}};
+        endcase // case(data_in_port)
+    end // block: p_data_mux
+
+
+  // ---------------------------------------------------------------------------
+  // HREADYMUXM generation
+  // ---------------------------------------------------------------------------
+  // The HREADY signal on the shared slave is generated directly from
+  //  the shared slave HREADYOUTS if the slave is selected, otherwise
+  //  it mirrors the HREADY signal of the appropriate input port
+  always @ (negedge HRESETn or posedge HCLK)
+    begin : p_slave_sel_reg
+      if (~HRESETn)
+         slave_sel <= 1'b0;
+      else
+        if (i_hreadymuxm)
+           slave_sel  <= i_hselm;
+    end
+
+  // HREADYMUXM output selection
+  assign i_hreadymuxm = (slave_sel) ? HREADYOUTM : 1'b1;
+
+  // Drive output with internal version of the signal
+  assign HREADYMUXM = i_hreadymuxm;
+
+
+endmodule
+
+// --================================= End ===================================--
diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_IMEM_0.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_IMEM_0.v
index b369f495bc2a930c3d4e1ceabdd53eee88cee5a9..b1a79494c6f22dd11a910f58fbe1100ac3d78d08 100644
--- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_IMEM_0.v
+++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_IMEM_0.v
@@ -3,7 +3,7 @@
 // only be used by a person authorised under and to the extent permitted
 // by a subsisting licensing agreement from Arm Limited or its affiliates.
 //
-//            (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates.
+//            (C) COPYRIGHT 2001-2025 Arm Limited or its affiliates.
 //                ALL RIGHTS RESERVED
 //
 // This entire notice must be reproduced on all copies of this file
diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_SYSIO.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_SYSIO.v
index 86b47f186ec24ae027cac3849a5d248a28fab80e..f73bcaa2da45e5c7063a8d8534b12ed9706d0aa8 100644
--- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_SYSIO.v
+++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_SYSIO.v
@@ -3,7 +3,7 @@
 // only be used by a person authorised under and to the extent permitted
 // by a subsisting licensing agreement from Arm Limited or its affiliates.
 //
-//            (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates.
+//            (C) COPYRIGHT 2001-2025 Arm Limited or its affiliates.
 //                ALL RIGHTS RESERVED
 //
 // This entire notice must be reproduced on all copies of this file
diff --git a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_SYSTABLE.v b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_SYSTABLE.v
index f84cb2b2650c823d1e90d3e4d224fbec97983e41..6161188eba749874582bcb4fd08344bea0d00919 100644
--- a/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_SYSTABLE.v
+++ b/nanosoc/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_SYSTABLE.v
@@ -3,7 +3,7 @@
 // only be used by a person authorised under and to the extent permitted
 // by a subsisting licensing agreement from Arm Limited or its affiliates.
 //
-//            (C) COPYRIGHT 2001-2023 Arm Limited or its affiliates.
+//            (C) COPYRIGHT 2001-2025 Arm Limited or its affiliates.
 //                ALL RIGHTS RESERVED
 //
 // This entire notice must be reproduced on all copies of this file
diff --git a/nanosoc/nanosoc_busmatrix/xml/nanosoc.xml b/nanosoc/nanosoc_busmatrix/xml/nanosoc.xml
index eb0be4dd0b6576eb1ebbae716f2e7256a4994573..643061dd17623cd7d62ea964231bca9b5d978423 100644
--- a/nanosoc/nanosoc_busmatrix/xml/nanosoc.xml
+++ b/nanosoc/nanosoc_busmatrix/xml/nanosoc.xml
@@ -35,7 +35,7 @@
 <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
 <!--  Purpose             : based on Example XML file, defining an interconnect for     -->
 <!--                        (was 2 AHB Masters and 3 AHB Slaves.)                       -->
-<!--                         4 AHB Managers and 8 AHB Subordinates                      -->
+<!--                         4 AHB Managers and 9 AHB Subordinates                      -->
 <!--                                                                                    -->
 <!--  Note                : This information will overwrite parameters                  -->
 <!--                         specified on the command line                              -->
@@ -63,6 +63,7 @@
 
   <slave_interface name="_DEBUG">
     <sparse_connect interface="_BOOTROM_0"/>
+    <sparse_connect interface="_EXTROM_0"/>
     <sparse_connect interface="_IMEM_0"/>
     <sparse_connect interface="_DMEM_0"/>
     <sparse_connect interface="_SYSIO"/>
@@ -71,7 +72,8 @@
     <sparse_connect interface="_EXPRAM_H"/>
     <sparse_connect interface="_SYSTABLE"/>
     <address_region interface="_BOOTROM_0" mem_lo='00000000' mem_hi='0fffffff' remapping='none'/>
-    <address_region interface="_BOOTROM_0" mem_lo='10000000' mem_hi='1fffffff' remapping='none'/>
+    <address_region interface="_BOOTROM_0" mem_lo='10000000' mem_hi='17ffffff' remapping='none'/>
+    <address_region interface="_EXTROM_0"  mem_lo='18000000' mem_hi='1fffffff' remapping='none'/>
     <address_region interface="_IMEM_0"    mem_lo='20000000' mem_hi='2fffffff' remapping='none'/>
     <address_region interface="_DMEM_0"    mem_lo='30000000' mem_hi='3fffffff' remapping='none'/>
     <address_region interface="_SYSIO"     mem_lo='40000000' mem_hi='5fffffff' remapping='none'/>
@@ -81,10 +83,12 @@
     <address_region interface="_EXP"       mem_lo='a0000000' mem_hi='dfffffff' remapping='none'/>
     <address_region interface="_SYSTABLE"  mem_lo='f0000000' mem_hi='f003ffff' remapping='none'/>
     <remap_region   interface="_IMEM_0"    mem_lo='00000000' mem_hi='0fffffff' bit='0'/>
+    <remap_region   interface="_EXTROM_0"  mem_lo='00000000' mem_hi='0fffffff' bit='1'/>
   </slave_interface>
 
   <slave_interface name="_DMAC_0">
     <sparse_connect interface="_BOOTROM_0"/>
+    <sparse_connect interface="_EXTROM_0"/>
     <sparse_connect interface="_IMEM_0"/>
     <sparse_connect interface="_DMEM_0"/>
     <sparse_connect interface="_SYSIO"/>
@@ -92,7 +96,8 @@
     <sparse_connect interface="_EXPRAM_L"/>
     <sparse_connect interface="_EXPRAM_H"/>
     <address_region interface="_IMEM_0"    mem_lo='00000000' mem_hi='0fffffff' remapping='none'/>
-    <address_region interface="_BOOTROM_0" mem_lo='10000000' mem_hi='1fffffff' remapping='none'/>
+    <address_region interface="_BOOTROM_0" mem_lo='10000000' mem_hi='17ffffff' remapping='none'/>
+    <address_region interface="_EXTROM_0"  mem_lo='18000000' mem_hi='1fffffff' remapping='none'/>
     <address_region interface="_IMEM_0"    mem_lo='20000000' mem_hi='2fffffff' remapping='none'/>
     <address_region interface="_DMEM_0"    mem_lo='30000000' mem_hi='3fffffff' remapping='none'/>
     <address_region interface="_SYSIO"     mem_lo='40000000' mem_hi='5fffffff' remapping='none'/>
@@ -104,6 +109,7 @@
 
   <slave_interface name="_DMAC_1">
     <sparse_connect interface="_BOOTROM_0"/>
+    <sparse_connect interface="_EXTROM_0"/>
     <sparse_connect interface="_IMEM_0"/>
     <sparse_connect interface="_DMEM_0"/>
     <sparse_connect interface="_SYSIO"/>
@@ -111,7 +117,8 @@
     <sparse_connect interface="_EXPRAM_L"/>
     <sparse_connect interface="_EXPRAM_H"/>
     <address_region interface="_IMEM_0"    mem_lo='00000000' mem_hi='0fffffff' remapping='none'/>
-    <address_region interface="_BOOTROM_0" mem_lo='10000000' mem_hi='1fffffff' remapping='none'/>
+    <address_region interface="_BOOTROM_0" mem_lo='10000000' mem_hi='17ffffff' remapping='none'/>
+    <address_region interface="_EXTROM_0"  mem_lo='18000000' mem_hi='1fffffff' remapping='none'/>
     <address_region interface="_IMEM_0"    mem_lo='20000000' mem_hi='2fffffff' remapping='none'/>
     <address_region interface="_DMEM_0"    mem_lo='30000000' mem_hi='3fffffff' remapping='none'/>
     <address_region interface="_SYSIO"     mem_lo='40000000' mem_hi='5fffffff' remapping='none'/>
@@ -123,6 +130,7 @@
 
   <slave_interface name="_CPU_0">
     <sparse_connect interface="_BOOTROM_0"/>
+    <sparse_connect interface="_EXTROM_0"/>
     <sparse_connect interface="_IMEM_0"/>
     <sparse_connect interface="_DMEM_0"/>
     <sparse_connect interface="_SYSIO"/>
@@ -131,7 +139,8 @@
     <sparse_connect interface="_EXPRAM_H"/>
     <sparse_connect interface="_SYSTABLE"/>
     <address_region interface="_BOOTROM_0" mem_lo='00000000' mem_hi='0fffffff' remapping='none'/>
-    <address_region interface="_BOOTROM_0" mem_lo='10000000' mem_hi='1fffffff' remapping='none'/>
+    <address_region interface="_BOOTROM_0" mem_lo='10000000' mem_hi='17ffffff' remapping='none'/>
+    <address_region interface="_EXTROM_0"  mem_lo='18000000' mem_hi='1fffffff' remapping='none'/>
     <address_region interface="_IMEM_0"    mem_lo='20000000' mem_hi='2fffffff' remapping='none'/>
     <address_region interface="_DMEM_0"    mem_lo='30000000' mem_hi='3fffffff' remapping='none'/>
     <address_region interface="_SYSIO"     mem_lo='40000000' mem_hi='5fffffff' remapping='none'/>
@@ -141,11 +150,13 @@
     <address_region interface="_EXP"       mem_lo='a0000000' mem_hi='dfffffff' remapping='none'/>
     <address_region interface="_SYSTABLE"  mem_lo='f0000000' mem_hi='f003ffff' remapping='none'/>
     <remap_region   interface="_IMEM_0"    mem_lo='00000000' mem_hi='0fffffff' bit='0'/>
+    <remap_region   interface="_EXTROM_0"  mem_lo='00000000' mem_hi='0fffffff' bit='1'/>
   </slave_interface>
 
   <!-- Master interface definitions -->
 
   <master_interface name="_BOOTROM_0"/>
+  <master_interface name="_EXTROM_0"/>
   <master_interface name="_IMEM_0"/>
   <master_interface name="_DMEM_0"/>
   <master_interface name="_SYSIO"/>
diff --git a/nanosoc/nanosoc_regions/sysio/verilog/nanosoc_region_sysio.v b/nanosoc/nanosoc_regions/sysio/verilog/nanosoc_region_sysio.v
index b08b10afc0c620a0cf054ea5b872825bcbff98dd..46c146b2d2ba52fb95085460dc81ef87def5b1cd 100644
--- a/nanosoc/nanosoc_regions/sysio/verilog/nanosoc_region_sysio.v
+++ b/nanosoc/nanosoc_regions/sysio/verilog/nanosoc_region_sysio.v
@@ -73,7 +73,7 @@ module nanosoc_region_sysio #(
     output wire         [15:0]  SYS_GPIO1_IRQ,    // GPIO 0 irqs
     
     // CPU power/reset control
-    output wire                 REMAP_CTRL,       // REMAP control bit
+    output wire         [ 3:0]  REMAP_CTRL,       // REMAP control bit
     output wire                 APBACTIVE,        // APB bus active (for clock gating of PCLKG)
     input  wire                 SYSRESETREQ,      // Processor control - system reset request
     output wire                 WDOGRESETREQ,     // Watchdog reset request
diff --git a/nanosoc/nanosoc_regions/sysio/verilog/nanosoc_sysctrl.v b/nanosoc/nanosoc_regions/sysio/verilog/nanosoc_sysctrl.v
index 8cf8a1cd639a66edddec05663c2c55d9b081509c..36341458463e40cb15a3b7746368a29c309a179e 100644
--- a/nanosoc/nanosoc_regions/sysio/verilog/nanosoc_sysctrl.v
+++ b/nanosoc/nanosoc_regions/sysio/verilog/nanosoc_sysctrl.v
@@ -84,7 +84,7 @@ module nanosoc_sysctrl #(
   input  wire  [3:0]  ECOREVNUM, // ECO revision number
 
    // System control signals
-  output wire         REMAP,     // memory remap
+  output wire  [3:0]  REMAP,     // memory remap
   output wire         PMUENABLE, // Power Management Unit enable, will be disabled in design
                                  // start version
   output wire         LOCKUPRESET // Enable reset if lockup
@@ -118,7 +118,7 @@ localparam  ARM_CMSDK_CM0_SYSCTRL_CID3        = {32'h000000B1}; // 0xFFC : CID 3
 
   reg    [31:0]          read_mux;
   reg    [31:0]          read_mux_le; // little endian of read mux
-  reg                    reg_remap;
+  reg    [ 3:0]          reg_remap;
 `ifdef  CORTEX_M0DESIGNSTART
   wire                   reg_pmuenable;
 `else
@@ -194,7 +194,7 @@ localparam  ARM_CMSDK_CM0_SYSCTRL_CID3        = {32'h000000B1}; // 0xFFC : CID 3
     begin
       if (reg_addr[11:5] == 7'h00) begin
          case(reg_addr[4:2])
-          3'b000: read_mux_le ={{31{1'b0}}, reg_remap} ;
+          3'b000: read_mux_le ={{28{1'b0}}, reg_remap} ;
           3'b001: read_mux_le ={{31{1'b0}}, reg_pmuenable} ;
           3'b010: read_mux_le ={{31{1'b0}}, reg_lockupreset} ;
           3'b100: read_mux_le ={{29{1'b0}}, reg_resetinfo} ;
@@ -262,9 +262,9 @@ localparam  ARM_CMSDK_CM0_SYSCTRL_CID3        = {32'h000000B1}; // 0xFFC : CID 3
   always @(posedge HCLK or negedge HRESETn)
   begin
     if (~HRESETn)
-      reg_remap <= 1'b1;
+      reg_remap <= 4'b0001;
     else if (reg_remap_write)
-      reg_remap <= HWDATALE[0];
+      reg_remap <= HWDATALE[3:0];
   end
 
   // ----------------------------------------------------------
diff --git a/nanosoc/nanosoc_subsystems/interconnect/verilog/nanosoc_ss_interconnect.v b/nanosoc/nanosoc_subsystems/interconnect/verilog/nanosoc_ss_interconnect.v
index 155dbee0e9911fefc95548ed8d6da8716232f6da..eaa24f3325fa644aa003e81f838b59c08daa8570 100644
--- a/nanosoc/nanosoc_subsystems/interconnect/verilog/nanosoc_ss_interconnect.v
+++ b/nanosoc/nanosoc_subsystems/interconnect/verilog/nanosoc_ss_interconnect.v
@@ -92,6 +92,21 @@ module nanosoc_ss_interconnect  #(
     output wire         BOOTROM_0_HMASTLOCK,     // Locked Sequence
     output wire         BOOTROM_0_HREADYMUX,     // Transfer done
 
+    // EXTROM 0 Region Slave Port
+    input  wire  [31:0] EXTROM_0_HRDATA,        // Read data bus
+    input  wire         EXTROM_0_HREADYOUT,     // HREADY feedback
+    input  wire         EXTROM_0_HRESP,         // Transfer response
+    output wire         EXTROM_0_HSEL,          // Slave Select
+    output wire  [31:0] EXTROM_0_HADDR,         // Address bus
+    output wire   [1:0] EXTROM_0_HTRANS,        // Transfer type
+    output wire         EXTROM_0_HWRITE,        // Transfer direction
+    output wire   [2:0] EXTROM_0_HSIZE,         // Transfer size
+    output wire   [2:0] EXTROM_0_HBURST,        // Burst type
+    output wire   [3:0] EXTROM_0_HPROT,         // Protection control
+    output wire  [31:0] EXTROM_0_HWDATA,        // Write data
+    output wire         EXTROM_0_HMASTLOCK,     // Locked Sequence
+    output wire         EXTROM_0_HREADYMUX,     // Transfer done
+
     // CPU 0 Instruction Memory Region Slave Port
     input  wire  [31:0] IMEM_0_HRDATA,        // Read data bus
     input  wire         IMEM_0_HREADYOUT,     // HREADY feedback
@@ -264,19 +279,34 @@ module nanosoc_ss_interconnect  #(
         .HRESP_CPU_0         (CPU_0_HRESP),        // Transfer response
         
         // CPU 0 Bootrom Memory Region Slave Port
-        .HRDATA_BOOTROM_0        (BOOTROM_0_HRDATA),        // Read data bus
-        .HREADYOUT_BOOTROM_0     (BOOTROM_0_HREADYOUT),     // HREADY feedback
-        .HRESP_BOOTROM_0         (BOOTROM_0_HRESP),         // Transfer response
-        .HSEL_BOOTROM_0          (BOOTROM_0_HSEL),          // Slave Select
-        .HADDR_BOOTROM_0         (BOOTROM_0_HADDR),         // Address bus
-        .HTRANS_BOOTROM_0        (BOOTROM_0_HTRANS),        // Transfer type
-        .HWRITE_BOOTROM_0        (BOOTROM_0_HWRITE),        // Transfer direction
-        .HSIZE_BOOTROM_0         (BOOTROM_0_HSIZE),         // Transfer size
-        .HBURST_BOOTROM_0        (BOOTROM_0_HBURST),        // Burst type
-        .HPROT_BOOTROM_0         (BOOTROM_0_HPROT),         // Protection control
-        .HWDATA_BOOTROM_0        (BOOTROM_0_HWDATA),        // Write data
-        .HMASTLOCK_BOOTROM_0     (BOOTROM_0_HMASTLOCK),     // Locked Sequence
-        .HREADYMUX_BOOTROM_0     (BOOTROM_0_HREADYMUX),     // Transfer done
+        .HRDATA_BOOTROM_0    (BOOTROM_0_HRDATA),        // Read data bus
+        .HREADYOUT_BOOTROM_0 (BOOTROM_0_HREADYOUT),     // HREADY feedback
+        .HRESP_BOOTROM_0     (BOOTROM_0_HRESP),         // Transfer response
+        .HSEL_BOOTROM_0      (BOOTROM_0_HSEL),          // Slave Select
+        .HADDR_BOOTROM_0     (BOOTROM_0_HADDR),         // Address bus
+        .HTRANS_BOOTROM_0    (BOOTROM_0_HTRANS),        // Transfer type
+        .HWRITE_BOOTROM_0    (BOOTROM_0_HWRITE),        // Transfer direction
+        .HSIZE_BOOTROM_0     (BOOTROM_0_HSIZE),         // Transfer size
+        .HBURST_BOOTROM_0    (BOOTROM_0_HBURST),        // Burst type
+        .HPROT_BOOTROM_0     (BOOTROM_0_HPROT),         // Protection control
+        .HWDATA_BOOTROM_0    (BOOTROM_0_HWDATA),        // Write data
+        .HMASTLOCK_BOOTROM_0 (BOOTROM_0_HMASTLOCK),     // Locked Sequence
+        .HREADYMUX_BOOTROM_0 (BOOTROM_0_HREADYMUX),     // Transfer done
+        
+        // CPU 0 EXTROM Memory Region Slave Port
+        .HRDATA_EXTROM_0     (EXTROM_0_HRDATA),        // Read data bus
+        .HREADYOUT_EXTROM_0  (EXTROM_0_HREADYOUT),     // HREADY feedback
+        .HRESP_EXTROM_0      (EXTROM_0_HRESP),         // Transfer response
+        .HSEL_EXTROM_0       (EXTROM_0_HSEL),          // Slave Select
+        .HADDR_EXTROM_0      (EXTROM_0_HADDR),         // Address bus
+        .HTRANS_EXTROM_0     (EXTROM_0_HTRANS),        // Transfer type
+        .HWRITE_EXTROM_0     (EXTROM_0_HWRITE),        // Transfer direction
+        .HSIZE_EXTROM_0      (EXTROM_0_HSIZE),         // Transfer size
+        .HBURST_EXTROM_0     (EXTROM_0_HBURST),        // Burst type
+        .HPROT_EXTROM_0      (EXTROM_0_HPROT),         // Protection control
+        .HWDATA_EXTROM_0     (EXTROM_0_HWDATA),        // Write data
+        .HMASTLOCK_EXTROM_0  (EXTROM_0_HMASTLOCK),     // Locked Sequence
+        .HREADYMUX_EXTROM_0  (EXTROM_0_HREADYMUX),     // Transfer done
         
         // CPU 0 Instruction Memory Region Slave Port
         .HRDATA_IMEM_0        (IMEM_0_HRDATA),        // Read data bus
@@ -383,4 +413,4 @@ module nanosoc_ss_interconnect  #(
         .HMASTLOCK_SYSTABLE   (SYSTABLE_HMASTLOCK),   // Locked Sequence
         .HREADYMUX_SYSTABLE   (SYSTABLE_HREADYMUX)    // Transfer done
     );
-endmodule
\ No newline at end of file
+endmodule
diff --git a/nanosoc/nanosoc_subsystems/systemctrl/verilog/nanosoc_ss_systemctrl.v b/nanosoc/nanosoc_subsystems/systemctrl/verilog/nanosoc_ss_systemctrl.v
index 18ca5fe6b68ac2c23e10c0b7f4913b6df836ad87..2796e1e9e04cb533c38187bab5a640be4f5b025a 100644
--- a/nanosoc/nanosoc_subsystems/systemctrl/verilog/nanosoc_ss_systemctrl.v
+++ b/nanosoc/nanosoc_subsystems/systemctrl/verilog/nanosoc_ss_systemctrl.v
@@ -102,7 +102,7 @@ module nanosoc_ss_systemctrl #(
     output wire           [15:0]  SYS_GPIO1_IRQ,    // GPIO 0 IRQs
 
     // CPU power/reset control
-    output wire                   SYS_REMAP_CTRL,       // REMAP control bit
+    output wire           [ 3:0]  SYS_REMAP_CTRL,       // REMAP control bits x4
     output wire                   SYS_WDOGRESETREQ,     // Watchdog reset request
     output wire                   SYS_LOCKUPRESET,      // System Controller Config - Reset if lockup
     
diff --git a/nanosoc/nanosoc_system/verilog/nanosoc_system.v b/nanosoc/nanosoc_system/verilog/nanosoc_system.v
index 4e4b3c1edca353754c7723f7d48e1765125a3daf..05751f4b05ce7a59253092226a2907c97c8926cc 100644
--- a/nanosoc/nanosoc_system/verilog/nanosoc_system.v
+++ b/nanosoc/nanosoc_system/verilog/nanosoc_system.v
@@ -210,6 +210,21 @@ module nanosoc_system #(
     wire          BOOTROM_0_HREADYOUT;    // HREADY feedback
     wire          BOOTROM_0_HRESP;        // Transfer response
     
+    // EXTROM 0 Region Wiring - To Interconnect Subsystem
+    wire          EXTROM_0_HSEL;         // Select
+    wire   [31:0] EXTROM_0_HADDR;        // Address bus
+    wire    [1:0] EXTROM_0_HTRANS;       // Transfer type
+    wire          EXTROM_0_HWRITE;       // Transfer direction
+    wire    [2:0] EXTROM_0_HSIZE;        // Transfer size
+    wire    [2:0] EXTROM_0_HBURST;       // Burst type
+    wire    [3:0] EXTROM_0_HPROT;        // Protection control
+    wire   [31:0] EXTROM_0_HWDATA;       // Write data
+    wire          EXTROM_0_HMASTLOCK;    // Locked Sequence
+    wire   [31:0] EXTROM_0_HRDATA;       // Read data bus
+    wire          EXTROM_0_HREADY;       // HREADY feedback
+    wire          EXTROM_0_HREADYOUT;    // HREADY feedback
+    wire          EXTROM_0_HRESP;        // Transfer response
+    
     // Instruction Memory 0 Region Wiring - To Interconnect Subsystem
     wire          IMEM_0_HSEL;            // Select
     wire   [31:0] IMEM_0_HADDR;           // Address bus
@@ -262,6 +277,11 @@ module nanosoc_system #(
     //--------------------------
     assign CPU_0_PMUENABLE = SYS_PMUENABLE;
     
+// QSPI ROM controller here, plus APB control port
+    assign  EXTROM_0_HRDATA[31:0] = 32'hEEEEEEEE; // Read data bus
+    assign  EXTROM_0_HREADYOUT    = 1'b1;         // HREADY tied off always ready 
+    assign  EXTROM_0_HRESP        = 1'b0;         // Transfer response no error
+
     // Instantiate Subsystem
     //--------------------------
 
@@ -1059,8 +1079,8 @@ wire       EXT_DAT_TXD_TREADY ;
 
 
     // Bus Matrix Remap Control - To Interconnect Subsystem
-    wire                   SYSIO_REMAP_CTRL; // REMAP control bit
-    wire            [3:0]  SYS_REMAP_CTRL;   // REMAP control bit
+    wire            [3:0]  SYSIO_REMAP_CTRL; // REMAP IO control bit
+    wire            [3:0]  SYS_REMAP_CTRL;   // REMAP system control bit
     
     // Lockup Signals - To System
     wire                   SYS_WDOGRESETREQ;   // Watchdog reset request
@@ -1076,7 +1096,7 @@ wire       EXT_DAT_TXD_TREADY ;
     
     // Remap Wiring
     //--------------------------
-    assign SYS_REMAP_CTRL [3:0] = { 3'b000, !SYSIO_REMAP_CTRL};
+    assign SYS_REMAP_CTRL [3:0] = { 2'b00, SYSIO_REMAP_CTRL[1], !SYSIO_REMAP_CTRL[0]};
     
         
     // Combined CPU Wiring
@@ -1475,6 +1495,21 @@ extio8x4_axis_initiator u_extio8x4_axis_initiator
         .BOOTROM_0_HMASTLOCK(BOOTROM_0_HMASTLOCK),
         .BOOTROM_0_HREADYMUX(BOOTROM_0_HREADY),
 
+        // EXTROM 0 Region Slave Port
+        .EXTROM_0_HRDATA(EXTROM_0_HRDATA),
+        .EXTROM_0_HREADYOUT(EXTROM_0_HREADYOUT),
+        .EXTROM_0_HRESP(EXTROM_0_HRESP),
+        .EXTROM_0_HSEL(EXTROM_0_HSEL),
+        .EXTROM_0_HADDR(EXTROM_0_HADDR),
+        .EXTROM_0_HTRANS(EXTROM_0_HTRANS),
+        .EXTROM_0_HWRITE(EXTROM_0_HWRITE),
+        .EXTROM_0_HSIZE(EXTROM_0_HSIZE),
+        .EXTROM_0_HBURST(EXTROM_0_HBURST),
+        .EXTROM_0_HPROT(EXTROM_0_HPROT),
+        .EXTROM_0_HWDATA(EXTROM_0_HWDATA),
+        .EXTROM_0_HMASTLOCK(EXTROM_0_HMASTLOCK),
+        .EXTROM_0_HREADYMUX(EXTROM_0_HREADY),
+
         // CPU 0 Instruction Memory Region Slave Port
         .IMEM_0_HRDATA(IMEM_0_HRDATA),
         .IMEM_0_HREADYOUT(IMEM_0_HREADYOUT),