diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000000000000000000000000000000000000..1e8a2a67029f62480ec7b57aeba96155a670748c
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "system/socdebug_tech"]
+	path = system/socdebug_tech
+	url = https://git.soton.ac.uk/soclabs/socdebug_tech.git
diff --git a/system/html/v2html_doc.tgz b/system/html/v2html_doc.tgz
deleted file mode 100644
index c8c4493ab25b6ab1c29f849e265354240e7055af..0000000000000000000000000000000000000000
Binary files a/system/html/v2html_doc.tgz and /dev/null differ
diff --git a/system/socdebug_tech b/system/socdebug_tech
new file mode 160000
index 0000000000000000000000000000000000000000..6a6da3cfd4851abf6623991de6389f54593a9854
--- /dev/null
+++ b/system/socdebug_tech
@@ -0,0 +1 @@
+Subproject commit 6a6da3cfd4851abf6623991de6389f54593a9854
diff --git a/system/src/nanosoc_ahb_busmatrix/logs/nanosoc_ahb32_4x7.log b/system/src/nanosoc_ahb_busmatrix/logs/nanosoc_ahb32_4x7.log
deleted file mode 100644
index 6cfcb6733255c4dceb97960a4115a83db3f483f0..0000000000000000000000000000000000000000
--- a/system/src/nanosoc_ahb_busmatrix/logs/nanosoc_ahb32_4x7.log
+++ /dev/null
@@ -1,60 +0,0 @@
-
-==============================================================
-=  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-2013,2017 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.
-=
-= BuildBusMatrix.pl
-=
-= Run Date : 28/04/2023 17:24:27
-==============================================================
-
-Script accepted the following parameters:
-
- - Configuration file      : '/home/dam1n19/Design/test1/secworks-sha256-project/nanosoc/system/src/nanosoc_ahb_busmatrix/xml/nanosoc_ahb32_4x7.xml'
- - Top-level name          : 'nanosoc_ahb32_4x7_busmatrix'
- - Slave interfaces        : 4
- - Master interfaces       : 7
- - Architecture type       : 'ahb2'
- - Arbitration scheme      : 'burst'
- - Address map             : user defined
- - Connectivity mapping    : _adp -> _rom1, _ram2, _ram3, _sys, _exp, _ram8, _ram9, 
-                             _dma -> _rom1, _ram2, _ram3, _sys, _exp, _ram8, _ram9, 
-                             _dma2 -> _rom1, _ram2, _ram3, _sys, _exp, _ram8, _ram9, 
-                             _cpu -> _rom1, _ram2, _ram3, _sys, _exp, _ram8, _ram9
- - Connectivity type       : full
- - Routing data width      : 32
- - Routing address width   : 32
- - User signal width       : 2
- - Timescales              : no
- - Configuration directory : '/home/dam1n19/Design/test1/secworks-sha256-project/nanosoc/system/src/nanosoc_ahb_busmatrix/verilog'
- - Source directory        : '/research/AAA/ip_library/latest/Corstone-101/logical/cmsdk_ahb_busmatrix/verilog/src'
- - IPXact target directory : '/home/dam1n19/Design/test1/secworks-sha256-project/nanosoc/system/src/nanosoc_ahb_busmatrix/ipxact'
- - IPXact source directory : '/research/AAA/ip_library/latest/Corstone-101/logical/cmsdk_ahb_busmatrix/ipxact/src'
- - Overwrite mode          : enabled
-
-Creating the bus matrix variant...
-
- - Rendering 'nanosoc_ahb32_4x7_busmatrix_default_slave.v'
- - Rendering 'nanosoc_ahb32_4x7_busmatrix.v'
- - Rendering 'nanosoc_ahb32_4x7_busmatrix.xml'
- - Rendering 'nanosoc_ahb32_4x7_arbiter.v'
- - Rendering 'nanosoc_ahb32_4x7_inititator_input.v'
- - Rendering 'nanosoc_ahb32_4x7_matrix_decode_dma.v'
- - Rendering 'nanosoc_ahb32_4x7_target_output.v'
- - Rendering 'nanosoc_ahb32_4x7_matrix_decode_adp.v'
- - Rendering 'nanosoc_ahb32_4x7_busmatrix_lite.v'
- - Rendering 'nanosoc_ahb32_4x7_matrix_decode_cpu.v'
- - Rendering 'nanosoc_ahb32_4x7_matrix_decode_dma2.v'
- - Rendering 'nanosoc_ahb32_4x7_busmatrix_lite.xml'
-
-Done!
-
diff --git a/system/src/nanosoc_ahb_busmatrix/verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_busmatrix_lite.v b/system/src/nanosoc_ahb_busmatrix/verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_busmatrix_lite.v
deleted file mode 100644
index ce2264e1a2dfe3efa4074cdcca8d48ec9c49ffd1..0000000000000000000000000000000000000000
--- a/system/src/nanosoc_ahb_busmatrix/verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_busmatrix_lite.v
+++ /dev/null
@@ -1,983 +0,0 @@
-//-----------------------------------------------------------------------------
-// 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-2023 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            : BusMatrixLite is a wrapper module that wraps around
-//                        the BusMatrix module to give AHB Lite compliant
-//                        slave and master interfaces.
-//
-//-----------------------------------------------------------------------------
-
-
-
-module nanosoc_ahb32_4x7_busmatrix_lite (
-
-    // Common AHB signals
-    HCLK,
-    HRESETn,
-
-    // System Address Remap control
-    REMAP,
-
-    // Input port SI0 (inputs from master 0)
-    HADDR_adp,
-    HTRANS_adp,
-    HWRITE_adp,
-    HSIZE_adp,
-    HBURST_adp,
-    HPROT_adp,
-    HWDATA_adp,
-    HMASTLOCK_adp,
-    HAUSER_adp,
-    HWUSER_adp,
-
-    // Input port SI1 (inputs from master 1)
-    HADDR_dma,
-    HTRANS_dma,
-    HWRITE_dma,
-    HSIZE_dma,
-    HBURST_dma,
-    HPROT_dma,
-    HWDATA_dma,
-    HMASTLOCK_dma,
-    HAUSER_dma,
-    HWUSER_dma,
-
-    // Input port SI2 (inputs from master 2)
-    HADDR_dma2,
-    HTRANS_dma2,
-    HWRITE_dma2,
-    HSIZE_dma2,
-    HBURST_dma2,
-    HPROT_dma2,
-    HWDATA_dma2,
-    HMASTLOCK_dma2,
-    HAUSER_dma2,
-    HWUSER_dma2,
-
-    // Input port SI3 (inputs from master 3)
-    HADDR_cpu,
-    HTRANS_cpu,
-    HWRITE_cpu,
-    HSIZE_cpu,
-    HBURST_cpu,
-    HPROT_cpu,
-    HWDATA_cpu,
-    HMASTLOCK_cpu,
-    HAUSER_cpu,
-    HWUSER_cpu,
-
-    // Output port MI0 (inputs from slave 0)
-    HRDATA_rom1,
-    HREADYOUT_rom1,
-    HRESP_rom1,
-    HRUSER_rom1,
-
-    // Output port MI1 (inputs from slave 1)
-    HRDATA_ram2,
-    HREADYOUT_ram2,
-    HRESP_ram2,
-    HRUSER_ram2,
-
-    // Output port MI2 (inputs from slave 2)
-    HRDATA_ram3,
-    HREADYOUT_ram3,
-    HRESP_ram3,
-    HRUSER_ram3,
-
-    // Output port MI3 (inputs from slave 3)
-    HRDATA_sys,
-    HREADYOUT_sys,
-    HRESP_sys,
-    HRUSER_sys,
-
-    // Output port MI4 (inputs from slave 4)
-    HRDATA_ram8,
-    HREADYOUT_ram8,
-    HRESP_ram8,
-    HRUSER_ram8,
-
-    // Output port MI5 (inputs from slave 5)
-    HRDATA_ram9,
-    HREADYOUT_ram9,
-    HRESP_ram9,
-    HRUSER_ram9,
-
-    // Output port MI6 (inputs from slave 6)
-    HRDATA_exp,
-    HREADYOUT_exp,
-    HRESP_exp,
-    HRUSER_exp,
-
-    // Scan test dummy signals; not connected until scan insertion
-    SCANENABLE,   // Scan Test Mode Enable
-    SCANINHCLK,   // Scan Chain Input
-
-
-    // Output port MI0 (outputs to slave 0)
-    HSEL_rom1,
-    HADDR_rom1,
-    HTRANS_rom1,
-    HWRITE_rom1,
-    HSIZE_rom1,
-    HBURST_rom1,
-    HPROT_rom1,
-    HWDATA_rom1,
-    HMASTLOCK_rom1,
-    HREADYMUX_rom1,
-    HAUSER_rom1,
-    HWUSER_rom1,
-
-    // Output port MI1 (outputs to slave 1)
-    HSEL_ram2,
-    HADDR_ram2,
-    HTRANS_ram2,
-    HWRITE_ram2,
-    HSIZE_ram2,
-    HBURST_ram2,
-    HPROT_ram2,
-    HWDATA_ram2,
-    HMASTLOCK_ram2,
-    HREADYMUX_ram2,
-    HAUSER_ram2,
-    HWUSER_ram2,
-
-    // Output port MI2 (outputs to slave 2)
-    HSEL_ram3,
-    HADDR_ram3,
-    HTRANS_ram3,
-    HWRITE_ram3,
-    HSIZE_ram3,
-    HBURST_ram3,
-    HPROT_ram3,
-    HWDATA_ram3,
-    HMASTLOCK_ram3,
-    HREADYMUX_ram3,
-    HAUSER_ram3,
-    HWUSER_ram3,
-
-    // Output port MI3 (outputs to slave 3)
-    HSEL_sys,
-    HADDR_sys,
-    HTRANS_sys,
-    HWRITE_sys,
-    HSIZE_sys,
-    HBURST_sys,
-    HPROT_sys,
-    HWDATA_sys,
-    HMASTLOCK_sys,
-    HREADYMUX_sys,
-    HAUSER_sys,
-    HWUSER_sys,
-
-    // Output port MI4 (outputs to slave 4)
-    HSEL_ram8,
-    HADDR_ram8,
-    HTRANS_ram8,
-    HWRITE_ram8,
-    HSIZE_ram8,
-    HBURST_ram8,
-    HPROT_ram8,
-    HWDATA_ram8,
-    HMASTLOCK_ram8,
-    HREADYMUX_ram8,
-    HAUSER_ram8,
-    HWUSER_ram8,
-
-    // Output port MI5 (outputs to slave 5)
-    HSEL_ram9,
-    HADDR_ram9,
-    HTRANS_ram9,
-    HWRITE_ram9,
-    HSIZE_ram9,
-    HBURST_ram9,
-    HPROT_ram9,
-    HWDATA_ram9,
-    HMASTLOCK_ram9,
-    HREADYMUX_ram9,
-    HAUSER_ram9,
-    HWUSER_ram9,
-
-    // Output port MI6 (outputs to slave 6)
-    HSEL_exp,
-    HADDR_exp,
-    HTRANS_exp,
-    HWRITE_exp,
-    HSIZE_exp,
-    HBURST_exp,
-    HPROT_exp,
-    HWDATA_exp,
-    HMASTLOCK_exp,
-    HREADYMUX_exp,
-    HAUSER_exp,
-    HWUSER_exp,
-
-    // Input port SI0 (outputs to master 0)
-    HRDATA_adp,
-    HREADY_adp,
-    HRESP_adp,
-    HRUSER_adp,
-
-    // Input port SI1 (outputs to master 1)
-    HRDATA_dma,
-    HREADY_dma,
-    HRESP_dma,
-    HRUSER_dma,
-
-    // Input port SI2 (outputs to master 2)
-    HRDATA_dma2,
-    HREADY_dma2,
-    HRESP_dma2,
-    HRUSER_dma2,
-
-    // Input port SI3 (outputs to master 3)
-    HRDATA_cpu,
-    HREADY_cpu,
-    HRESP_cpu,
-    HRUSER_cpu,
-
-    // Scan test dummy signals; not connected until scan insertion
-    SCANOUTHCLK   // Scan Chain Output
-
-    );
-
-// -----------------------------------------------------------------------------
-// Input and Output declarations
-// -----------------------------------------------------------------------------
-
-    // Common AHB signals
-    input         HCLK;            // AHB System Clock
-    input         HRESETn;         // AHB System Reset
-
-    // System Address Remap control
-    input   [3:0] REMAP;           // System Address REMAP control
-
-    // Input port SI0 (inputs from master 0)
-    input  [31:0] HADDR_adp;         // Address bus
-    input   [1:0] HTRANS_adp;        // Transfer type
-    input         HWRITE_adp;        // Transfer direction
-    input   [2:0] HSIZE_adp;         // Transfer size
-    input   [2:0] HBURST_adp;        // Burst type
-    input   [3:0] HPROT_adp;         // Protection control
-    input  [31:0] HWDATA_adp;        // Write data
-    input         HMASTLOCK_adp;     // Locked Sequence
-    input  [1:0] HAUSER_adp;        // Address USER signals
-    input  [1:0] HWUSER_adp;        // Write-data USER signals
-
-    // Input port SI1 (inputs from master 1)
-    input  [31:0] HADDR_dma;         // Address bus
-    input   [1:0] HTRANS_dma;        // Transfer type
-    input         HWRITE_dma;        // Transfer direction
-    input   [2:0] HSIZE_dma;         // Transfer size
-    input   [2:0] HBURST_dma;        // Burst type
-    input   [3:0] HPROT_dma;         // Protection control
-    input  [31:0] HWDATA_dma;        // Write data
-    input         HMASTLOCK_dma;     // Locked Sequence
-    input  [1:0] HAUSER_dma;        // Address USER signals
-    input  [1:0] HWUSER_dma;        // Write-data USER signals
-
-    // Input port SI2 (inputs from master 2)
-    input  [31:0] HADDR_dma2;         // Address bus
-    input   [1:0] HTRANS_dma2;        // Transfer type
-    input         HWRITE_dma2;        // Transfer direction
-    input   [2:0] HSIZE_dma2;         // Transfer size
-    input   [2:0] HBURST_dma2;        // Burst type
-    input   [3:0] HPROT_dma2;         // Protection control
-    input  [31:0] HWDATA_dma2;        // Write data
-    input         HMASTLOCK_dma2;     // Locked Sequence
-    input  [1:0] HAUSER_dma2;        // Address USER signals
-    input  [1:0] HWUSER_dma2;        // Write-data USER signals
-
-    // Input port SI3 (inputs from master 3)
-    input  [31:0] HADDR_cpu;         // Address bus
-    input   [1:0] HTRANS_cpu;        // Transfer type
-    input         HWRITE_cpu;        // Transfer direction
-    input   [2:0] HSIZE_cpu;         // Transfer size
-    input   [2:0] HBURST_cpu;        // Burst type
-    input   [3:0] HPROT_cpu;         // Protection control
-    input  [31:0] HWDATA_cpu;        // Write data
-    input         HMASTLOCK_cpu;     // Locked Sequence
-    input  [1:0] HAUSER_cpu;        // Address USER signals
-    input  [1:0] HWUSER_cpu;        // Write-data USER signals
-
-    // Output port MI0 (inputs from slave 0)
-    input  [31:0] HRDATA_rom1;        // Read data bus
-    input         HREADYOUT_rom1;     // HREADY feedback
-    input         HRESP_rom1;         // Transfer response
-    input  [1:0] HRUSER_rom1;        // Read-data USER signals
-
-    // Output port MI1 (inputs from slave 1)
-    input  [31:0] HRDATA_ram2;        // Read data bus
-    input         HREADYOUT_ram2;     // HREADY feedback
-    input         HRESP_ram2;         // Transfer response
-    input  [1:0] HRUSER_ram2;        // Read-data USER signals
-
-    // Output port MI2 (inputs from slave 2)
-    input  [31:0] HRDATA_ram3;        // Read data bus
-    input         HREADYOUT_ram3;     // HREADY feedback
-    input         HRESP_ram3;         // Transfer response
-    input  [1:0] HRUSER_ram3;        // Read-data USER signals
-
-    // Output port MI3 (inputs from slave 3)
-    input  [31:0] HRDATA_sys;        // Read data bus
-    input         HREADYOUT_sys;     // HREADY feedback
-    input         HRESP_sys;         // Transfer response
-    input  [1:0] HRUSER_sys;        // Read-data USER signals
-
-    // Output port MI4 (inputs from slave 4)
-    input  [31:0] HRDATA_ram8;        // Read data bus
-    input         HREADYOUT_ram8;     // HREADY feedback
-    input         HRESP_ram8;         // Transfer response
-    input  [1:0] HRUSER_ram8;        // Read-data USER signals
-
-    // Output port MI5 (inputs from slave 5)
-    input  [31:0] HRDATA_ram9;        // Read data bus
-    input         HREADYOUT_ram9;     // HREADY feedback
-    input         HRESP_ram9;         // Transfer response
-    input  [1:0] HRUSER_ram9;        // Read-data USER signals
-
-    // Output port MI6 (inputs from slave 6)
-    input  [31:0] HRDATA_exp;        // Read data bus
-    input         HREADYOUT_exp;     // HREADY feedback
-    input         HRESP_exp;         // Transfer response
-    input  [1:0] HRUSER_exp;        // Read-data USER signals
-
-    // Scan test dummy signals; not connected until scan insertion
-    input         SCANENABLE;      // Scan enable signal
-    input         SCANINHCLK;      // HCLK scan input
-
-
-    // Output port MI0 (outputs to slave 0)
-    output        HSEL_rom1;          // Slave Select
-    output [31:0] HADDR_rom1;         // Address bus
-    output  [1:0] HTRANS_rom1;        // Transfer type
-    output        HWRITE_rom1;        // Transfer direction
-    output  [2:0] HSIZE_rom1;         // Transfer size
-    output  [2:0] HBURST_rom1;        // Burst type
-    output  [3:0] HPROT_rom1;         // Protection control
-    output [31:0] HWDATA_rom1;        // Write data
-    output        HMASTLOCK_rom1;     // Locked Sequence
-    output        HREADYMUX_rom1;     // Transfer done
-    output [1:0] HAUSER_rom1;        // Address USER signals
-    output [1:0] HWUSER_rom1;        // Write-data USER signals
-
-    // Output port MI1 (outputs to slave 1)
-    output        HSEL_ram2;          // Slave Select
-    output [31:0] HADDR_ram2;         // Address bus
-    output  [1:0] HTRANS_ram2;        // Transfer type
-    output        HWRITE_ram2;        // Transfer direction
-    output  [2:0] HSIZE_ram2;         // Transfer size
-    output  [2:0] HBURST_ram2;        // Burst type
-    output  [3:0] HPROT_ram2;         // Protection control
-    output [31:0] HWDATA_ram2;        // Write data
-    output        HMASTLOCK_ram2;     // Locked Sequence
-    output        HREADYMUX_ram2;     // Transfer done
-    output [1:0] HAUSER_ram2;        // Address USER signals
-    output [1:0] HWUSER_ram2;        // Write-data USER signals
-
-    // Output port MI2 (outputs to slave 2)
-    output        HSEL_ram3;          // Slave Select
-    output [31:0] HADDR_ram3;         // Address bus
-    output  [1:0] HTRANS_ram3;        // Transfer type
-    output        HWRITE_ram3;        // Transfer direction
-    output  [2:0] HSIZE_ram3;         // Transfer size
-    output  [2:0] HBURST_ram3;        // Burst type
-    output  [3:0] HPROT_ram3;         // Protection control
-    output [31:0] HWDATA_ram3;        // Write data
-    output        HMASTLOCK_ram3;     // Locked Sequence
-    output        HREADYMUX_ram3;     // Transfer done
-    output [1:0] HAUSER_ram3;        // Address USER signals
-    output [1:0] HWUSER_ram3;        // Write-data USER signals
-
-    // Output port MI3 (outputs to slave 3)
-    output        HSEL_sys;          // Slave Select
-    output [31:0] HADDR_sys;         // Address bus
-    output  [1:0] HTRANS_sys;        // Transfer type
-    output        HWRITE_sys;        // Transfer direction
-    output  [2:0] HSIZE_sys;         // Transfer size
-    output  [2:0] HBURST_sys;        // Burst type
-    output  [3:0] HPROT_sys;         // Protection control
-    output [31:0] HWDATA_sys;        // Write data
-    output        HMASTLOCK_sys;     // Locked Sequence
-    output        HREADYMUX_sys;     // Transfer done
-    output [1:0] HAUSER_sys;        // Address USER signals
-    output [1:0] HWUSER_sys;        // Write-data USER signals
-
-    // Output port MI4 (outputs to slave 4)
-    output        HSEL_ram8;          // Slave Select
-    output [31:0] HADDR_ram8;         // Address bus
-    output  [1:0] HTRANS_ram8;        // Transfer type
-    output        HWRITE_ram8;        // Transfer direction
-    output  [2:0] HSIZE_ram8;         // Transfer size
-    output  [2:0] HBURST_ram8;        // Burst type
-    output  [3:0] HPROT_ram8;         // Protection control
-    output [31:0] HWDATA_ram8;        // Write data
-    output        HMASTLOCK_ram8;     // Locked Sequence
-    output        HREADYMUX_ram8;     // Transfer done
-    output [1:0] HAUSER_ram8;        // Address USER signals
-    output [1:0] HWUSER_ram8;        // Write-data USER signals
-
-    // Output port MI5 (outputs to slave 5)
-    output        HSEL_ram9;          // Slave Select
-    output [31:0] HADDR_ram9;         // Address bus
-    output  [1:0] HTRANS_ram9;        // Transfer type
-    output        HWRITE_ram9;        // Transfer direction
-    output  [2:0] HSIZE_ram9;         // Transfer size
-    output  [2:0] HBURST_ram9;        // Burst type
-    output  [3:0] HPROT_ram9;         // Protection control
-    output [31:0] HWDATA_ram9;        // Write data
-    output        HMASTLOCK_ram9;     // Locked Sequence
-    output        HREADYMUX_ram9;     // Transfer done
-    output [1:0] HAUSER_ram9;        // Address USER signals
-    output [1:0] HWUSER_ram9;        // Write-data USER signals
-
-    // Output port MI6 (outputs to slave 6)
-    output        HSEL_exp;          // Slave Select
-    output [31:0] HADDR_exp;         // Address bus
-    output  [1:0] HTRANS_exp;        // Transfer type
-    output        HWRITE_exp;        // Transfer direction
-    output  [2:0] HSIZE_exp;         // Transfer size
-    output  [2:0] HBURST_exp;        // Burst type
-    output  [3:0] HPROT_exp;         // Protection control
-    output [31:0] HWDATA_exp;        // Write data
-    output        HMASTLOCK_exp;     // Locked Sequence
-    output        HREADYMUX_exp;     // Transfer done
-    output [1:0] HAUSER_exp;        // Address USER signals
-    output [1:0] HWUSER_exp;        // Write-data USER signals
-
-    // Input port SI0 (outputs to master 0)
-    output [31:0] HRDATA_adp;        // Read data bus
-    output        HREADY_adp;     // HREADY feedback
-    output        HRESP_adp;         // Transfer response
-    output [1:0] HRUSER_adp;        // Read-data USER signals
-
-    // Input port SI1 (outputs to master 1)
-    output [31:0] HRDATA_dma;        // Read data bus
-    output        HREADY_dma;     // HREADY feedback
-    output        HRESP_dma;         // Transfer response
-    output [1:0] HRUSER_dma;        // Read-data USER signals
-
-    // Input port SI2 (outputs to master 2)
-    output [31:0] HRDATA_dma2;        // Read data bus
-    output        HREADY_dma2;     // HREADY feedback
-    output        HRESP_dma2;         // Transfer response
-    output [1:0] HRUSER_dma2;        // Read-data USER signals
-
-    // Input port SI3 (outputs to master 3)
-    output [31:0] HRDATA_cpu;        // Read data bus
-    output        HREADY_cpu;     // HREADY feedback
-    output        HRESP_cpu;         // Transfer response
-    output [1:0] HRUSER_cpu;        // Read-data USER signals
-
-    // Scan test dummy signals; not connected until scan insertion
-    output        SCANOUTHCLK;     // Scan Chain Output
-
-// -----------------------------------------------------------------------------
-// Wire declarations
-// -----------------------------------------------------------------------------
-
-    // Common AHB signals
-    wire         HCLK;            // AHB System Clock
-    wire         HRESETn;         // AHB System Reset
-
-    // System Address Remap control
-    wire   [3:0] REMAP;           // System REMAP signal
-
-    // Input Port SI0
-    wire  [31:0] HADDR_adp;         // Address bus
-    wire   [1:0] HTRANS_adp;        // Transfer type
-    wire         HWRITE_adp;        // Transfer direction
-    wire   [2:0] HSIZE_adp;         // Transfer size
-    wire   [2:0] HBURST_adp;        // Burst type
-    wire   [3:0] HPROT_adp;         // Protection control
-    wire  [31:0] HWDATA_adp;        // Write data
-    wire         HMASTLOCK_adp;     // Locked Sequence
-
-    wire  [31:0] HRDATA_adp;        // Read data bus
-    wire         HREADY_adp;     // HREADY feedback
-    wire         HRESP_adp;         // Transfer response
-    wire  [1:0] HAUSER_adp;        // Address USER signals
-    wire  [1:0] HWUSER_adp;        // Write-data USER signals
-    wire  [1:0] HRUSER_adp;        // Read-data USER signals
-
-    // Input Port SI1
-    wire  [31:0] HADDR_dma;         // Address bus
-    wire   [1:0] HTRANS_dma;        // Transfer type
-    wire         HWRITE_dma;        // Transfer direction
-    wire   [2:0] HSIZE_dma;         // Transfer size
-    wire   [2:0] HBURST_dma;        // Burst type
-    wire   [3:0] HPROT_dma;         // Protection control
-    wire  [31:0] HWDATA_dma;        // Write data
-    wire         HMASTLOCK_dma;     // Locked Sequence
-
-    wire  [31:0] HRDATA_dma;        // Read data bus
-    wire         HREADY_dma;     // HREADY feedback
-    wire         HRESP_dma;         // Transfer response
-    wire  [1:0] HAUSER_dma;        // Address USER signals
-    wire  [1:0] HWUSER_dma;        // Write-data USER signals
-    wire  [1:0] HRUSER_dma;        // Read-data USER signals
-
-    // Input Port SI2
-    wire  [31:0] HADDR_dma2;         // Address bus
-    wire   [1:0] HTRANS_dma2;        // Transfer type
-    wire         HWRITE_dma2;        // Transfer direction
-    wire   [2:0] HSIZE_dma2;         // Transfer size
-    wire   [2:0] HBURST_dma2;        // Burst type
-    wire   [3:0] HPROT_dma2;         // Protection control
-    wire  [31:0] HWDATA_dma2;        // Write data
-    wire         HMASTLOCK_dma2;     // Locked Sequence
-
-    wire  [31:0] HRDATA_dma2;        // Read data bus
-    wire         HREADY_dma2;     // HREADY feedback
-    wire         HRESP_dma2;         // Transfer response
-    wire  [1:0] HAUSER_dma2;        // Address USER signals
-    wire  [1:0] HWUSER_dma2;        // Write-data USER signals
-    wire  [1:0] HRUSER_dma2;        // Read-data USER signals
-
-    // Input Port SI3
-    wire  [31:0] HADDR_cpu;         // Address bus
-    wire   [1:0] HTRANS_cpu;        // Transfer type
-    wire         HWRITE_cpu;        // Transfer direction
-    wire   [2:0] HSIZE_cpu;         // Transfer size
-    wire   [2:0] HBURST_cpu;        // Burst type
-    wire   [3:0] HPROT_cpu;         // Protection control
-    wire  [31:0] HWDATA_cpu;        // Write data
-    wire         HMASTLOCK_cpu;     // Locked Sequence
-
-    wire  [31:0] HRDATA_cpu;        // Read data bus
-    wire         HREADY_cpu;     // HREADY feedback
-    wire         HRESP_cpu;         // Transfer response
-    wire  [1:0] HAUSER_cpu;        // Address USER signals
-    wire  [1:0] HWUSER_cpu;        // Write-data USER signals
-    wire  [1:0] HRUSER_cpu;        // Read-data USER signals
-
-    // Output Port MI0
-    wire         HSEL_rom1;          // Slave Select
-    wire  [31:0] HADDR_rom1;         // Address bus
-    wire   [1:0] HTRANS_rom1;        // Transfer type
-    wire         HWRITE_rom1;        // Transfer direction
-    wire   [2:0] HSIZE_rom1;         // Transfer size
-    wire   [2:0] HBURST_rom1;        // Burst type
-    wire   [3:0] HPROT_rom1;         // Protection control
-    wire  [31:0] HWDATA_rom1;        // Write data
-    wire         HMASTLOCK_rom1;     // Locked Sequence
-    wire         HREADYMUX_rom1;     // Transfer done
-
-    wire  [31:0] HRDATA_rom1;        // Read data bus
-    wire         HREADYOUT_rom1;     // HREADY feedback
-    wire         HRESP_rom1;         // Transfer response
-    wire  [1:0] HAUSER_rom1;        // Address USER signals
-    wire  [1:0] HWUSER_rom1;        // Write-data USER signals
-    wire  [1:0] HRUSER_rom1;        // Read-data USER signals
-
-    // Output Port MI1
-    wire         HSEL_ram2;          // Slave Select
-    wire  [31:0] HADDR_ram2;         // Address bus
-    wire   [1:0] HTRANS_ram2;        // Transfer type
-    wire         HWRITE_ram2;        // Transfer direction
-    wire   [2:0] HSIZE_ram2;         // Transfer size
-    wire   [2:0] HBURST_ram2;        // Burst type
-    wire   [3:0] HPROT_ram2;         // Protection control
-    wire  [31:0] HWDATA_ram2;        // Write data
-    wire         HMASTLOCK_ram2;     // Locked Sequence
-    wire         HREADYMUX_ram2;     // Transfer done
-
-    wire  [31:0] HRDATA_ram2;        // Read data bus
-    wire         HREADYOUT_ram2;     // HREADY feedback
-    wire         HRESP_ram2;         // Transfer response
-    wire  [1:0] HAUSER_ram2;        // Address USER signals
-    wire  [1:0] HWUSER_ram2;        // Write-data USER signals
-    wire  [1:0] HRUSER_ram2;        // Read-data USER signals
-
-    // Output Port MI2
-    wire         HSEL_ram3;          // Slave Select
-    wire  [31:0] HADDR_ram3;         // Address bus
-    wire   [1:0] HTRANS_ram3;        // Transfer type
-    wire         HWRITE_ram3;        // Transfer direction
-    wire   [2:0] HSIZE_ram3;         // Transfer size
-    wire   [2:0] HBURST_ram3;        // Burst type
-    wire   [3:0] HPROT_ram3;         // Protection control
-    wire  [31:0] HWDATA_ram3;        // Write data
-    wire         HMASTLOCK_ram3;     // Locked Sequence
-    wire         HREADYMUX_ram3;     // Transfer done
-
-    wire  [31:0] HRDATA_ram3;        // Read data bus
-    wire         HREADYOUT_ram3;     // HREADY feedback
-    wire         HRESP_ram3;         // Transfer response
-    wire  [1:0] HAUSER_ram3;        // Address USER signals
-    wire  [1:0] HWUSER_ram3;        // Write-data USER signals
-    wire  [1:0] HRUSER_ram3;        // Read-data USER signals
-
-    // Output Port MI3
-    wire         HSEL_sys;          // Slave Select
-    wire  [31:0] HADDR_sys;         // Address bus
-    wire   [1:0] HTRANS_sys;        // Transfer type
-    wire         HWRITE_sys;        // Transfer direction
-    wire   [2:0] HSIZE_sys;         // Transfer size
-    wire   [2:0] HBURST_sys;        // Burst type
-    wire   [3:0] HPROT_sys;         // Protection control
-    wire  [31:0] HWDATA_sys;        // Write data
-    wire         HMASTLOCK_sys;     // Locked Sequence
-    wire         HREADYMUX_sys;     // Transfer done
-
-    wire  [31:0] HRDATA_sys;        // Read data bus
-    wire         HREADYOUT_sys;     // HREADY feedback
-    wire         HRESP_sys;         // Transfer response
-    wire  [1:0] HAUSER_sys;        // Address USER signals
-    wire  [1:0] HWUSER_sys;        // Write-data USER signals
-    wire  [1:0] HRUSER_sys;        // Read-data USER signals
-
-    // Output Port MI4
-    wire         HSEL_ram8;          // Slave Select
-    wire  [31:0] HADDR_ram8;         // Address bus
-    wire   [1:0] HTRANS_ram8;        // Transfer type
-    wire         HWRITE_ram8;        // Transfer direction
-    wire   [2:0] HSIZE_ram8;         // Transfer size
-    wire   [2:0] HBURST_ram8;        // Burst type
-    wire   [3:0] HPROT_ram8;         // Protection control
-    wire  [31:0] HWDATA_ram8;        // Write data
-    wire         HMASTLOCK_ram8;     // Locked Sequence
-    wire         HREADYMUX_ram8;     // Transfer done
-
-    wire  [31:0] HRDATA_ram8;        // Read data bus
-    wire         HREADYOUT_ram8;     // HREADY feedback
-    wire         HRESP_ram8;         // Transfer response
-    wire  [1:0] HAUSER_ram8;        // Address USER signals
-    wire  [1:0] HWUSER_ram8;        // Write-data USER signals
-    wire  [1:0] HRUSER_ram8;        // Read-data USER signals
-
-    // Output Port MI5
-    wire         HSEL_ram9;          // Slave Select
-    wire  [31:0] HADDR_ram9;         // Address bus
-    wire   [1:0] HTRANS_ram9;        // Transfer type
-    wire         HWRITE_ram9;        // Transfer direction
-    wire   [2:0] HSIZE_ram9;         // Transfer size
-    wire   [2:0] HBURST_ram9;        // Burst type
-    wire   [3:0] HPROT_ram9;         // Protection control
-    wire  [31:0] HWDATA_ram9;        // Write data
-    wire         HMASTLOCK_ram9;     // Locked Sequence
-    wire         HREADYMUX_ram9;     // Transfer done
-
-    wire  [31:0] HRDATA_ram9;        // Read data bus
-    wire         HREADYOUT_ram9;     // HREADY feedback
-    wire         HRESP_ram9;         // Transfer response
-    wire  [1:0] HAUSER_ram9;        // Address USER signals
-    wire  [1:0] HWUSER_ram9;        // Write-data USER signals
-    wire  [1:0] HRUSER_ram9;        // Read-data USER signals
-
-    // Output Port MI6
-    wire         HSEL_exp;          // Slave Select
-    wire  [31:0] HADDR_exp;         // Address bus
-    wire   [1:0] HTRANS_exp;        // Transfer type
-    wire         HWRITE_exp;        // Transfer direction
-    wire   [2:0] HSIZE_exp;         // Transfer size
-    wire   [2:0] HBURST_exp;        // Burst type
-    wire   [3:0] HPROT_exp;         // Protection control
-    wire  [31:0] HWDATA_exp;        // Write data
-    wire         HMASTLOCK_exp;     // Locked Sequence
-    wire         HREADYMUX_exp;     // Transfer done
-
-    wire  [31:0] HRDATA_exp;        // Read data bus
-    wire         HREADYOUT_exp;     // HREADY feedback
-    wire         HRESP_exp;         // Transfer response
-    wire  [1:0] HAUSER_exp;        // Address USER signals
-    wire  [1:0] HWUSER_exp;        // Write-data USER signals
-    wire  [1:0] HRUSER_exp;        // Read-data USER signals
-
-
-// -----------------------------------------------------------------------------
-// Signal declarations
-// -----------------------------------------------------------------------------
-    wire   [3:0] tie_hi_4;
-    wire         tie_hi;
-    wire         tie_low;
-    wire   [1:0] i_hresp_adp;
-    wire   [1:0] i_hresp_dma;
-    wire   [1:0] i_hresp_dma2;
-    wire   [1:0] i_hresp_cpu;
-
-    wire   [3:0]        i_hmaster_rom1;
-    wire   [1:0] i_hresp_rom1;
-    wire   [3:0]        i_hmaster_ram2;
-    wire   [1:0] i_hresp_ram2;
-    wire   [3:0]        i_hmaster_ram3;
-    wire   [1:0] i_hresp_ram3;
-    wire   [3:0]        i_hmaster_sys;
-    wire   [1:0] i_hresp_sys;
-    wire   [3:0]        i_hmaster_ram8;
-    wire   [1:0] i_hresp_ram8;
-    wire   [3:0]        i_hmaster_ram9;
-    wire   [1:0] i_hresp_ram9;
-    wire   [3:0]        i_hmaster_exp;
-    wire   [1:0] i_hresp_exp;
-
-// -----------------------------------------------------------------------------
-// Beginning of main code
-// -----------------------------------------------------------------------------
-
-    assign tie_hi   = 1'b1;
-    assign tie_hi_4 = 4'b1111;
-    assign tie_low  = 1'b0;
-
-
-    assign HRESP_adp  = i_hresp_adp[0];
-
-    assign HRESP_dma  = i_hresp_dma[0];
-
-    assign HRESP_dma2  = i_hresp_dma2[0];
-
-    assign HRESP_cpu  = i_hresp_cpu[0];
-
-    assign i_hresp_rom1 = {{1{tie_low}}, HRESP_rom1};
-    assign i_hresp_ram2 = {{1{tie_low}}, HRESP_ram2};
-    assign i_hresp_ram3 = {{1{tie_low}}, HRESP_ram3};
-    assign i_hresp_sys = {{1{tie_low}}, HRESP_sys};
-    assign i_hresp_ram8 = {{1{tie_low}}, HRESP_ram8};
-    assign i_hresp_ram9 = {{1{tie_low}}, HRESP_ram9};
-    assign i_hresp_exp = {{1{tie_low}}, HRESP_exp};
-
-// BusMatrix instance
-  nanosoc_ahb32_4x7_busmatrix unanosoc_ahb32_4x7_busmatrix (
-    .HCLK       (HCLK),
-    .HRESETn    (HRESETn),
-    .REMAP      (REMAP),
-
-    // Input port SI0 signals
-    .HSEL_adp       (tie_hi),
-    .HADDR_adp      (HADDR_adp),
-    .HTRANS_adp     (HTRANS_adp),
-    .HWRITE_adp     (HWRITE_adp),
-    .HSIZE_adp      (HSIZE_adp),
-    .HBURST_adp     (HBURST_adp),
-    .HPROT_adp      (HPROT_adp),
-    .HWDATA_adp     (HWDATA_adp),
-    .HMASTLOCK_adp  (HMASTLOCK_adp),
-    .HMASTER_adp    (tie_hi_4),
-    .HREADY_adp     (HREADY_adp),
-    .HAUSER_adp     (HAUSER_adp),
-    .HWUSER_adp     (HWUSER_adp),
-    .HRDATA_adp     (HRDATA_adp),
-    .HREADYOUT_adp  (HREADY_adp),
-    .HRESP_adp      (i_hresp_adp),
-    .HRUSER_adp     (HRUSER_adp),
-
-    // Input port SI1 signals
-    .HSEL_dma       (tie_hi),
-    .HADDR_dma      (HADDR_dma),
-    .HTRANS_dma     (HTRANS_dma),
-    .HWRITE_dma     (HWRITE_dma),
-    .HSIZE_dma      (HSIZE_dma),
-    .HBURST_dma     (HBURST_dma),
-    .HPROT_dma      (HPROT_dma),
-    .HWDATA_dma     (HWDATA_dma),
-    .HMASTLOCK_dma  (HMASTLOCK_dma),
-    .HMASTER_dma    (tie_hi_4),
-    .HREADY_dma     (HREADY_dma),
-    .HAUSER_dma     (HAUSER_dma),
-    .HWUSER_dma     (HWUSER_dma),
-    .HRDATA_dma     (HRDATA_dma),
-    .HREADYOUT_dma  (HREADY_dma),
-    .HRESP_dma      (i_hresp_dma),
-    .HRUSER_dma     (HRUSER_dma),
-
-    // Input port SI2 signals
-    .HSEL_dma2       (tie_hi),
-    .HADDR_dma2      (HADDR_dma2),
-    .HTRANS_dma2     (HTRANS_dma2),
-    .HWRITE_dma2     (HWRITE_dma2),
-    .HSIZE_dma2      (HSIZE_dma2),
-    .HBURST_dma2     (HBURST_dma2),
-    .HPROT_dma2      (HPROT_dma2),
-    .HWDATA_dma2     (HWDATA_dma2),
-    .HMASTLOCK_dma2  (HMASTLOCK_dma2),
-    .HMASTER_dma2    (tie_hi_4),
-    .HREADY_dma2     (HREADY_dma2),
-    .HAUSER_dma2     (HAUSER_dma2),
-    .HWUSER_dma2     (HWUSER_dma2),
-    .HRDATA_dma2     (HRDATA_dma2),
-    .HREADYOUT_dma2  (HREADY_dma2),
-    .HRESP_dma2      (i_hresp_dma2),
-    .HRUSER_dma2     (HRUSER_dma2),
-
-    // Input port SI3 signals
-    .HSEL_cpu       (tie_hi),
-    .HADDR_cpu      (HADDR_cpu),
-    .HTRANS_cpu     (HTRANS_cpu),
-    .HWRITE_cpu     (HWRITE_cpu),
-    .HSIZE_cpu      (HSIZE_cpu),
-    .HBURST_cpu     (HBURST_cpu),
-    .HPROT_cpu      (HPROT_cpu),
-    .HWDATA_cpu     (HWDATA_cpu),
-    .HMASTLOCK_cpu  (HMASTLOCK_cpu),
-    .HMASTER_cpu    (tie_hi_4),
-    .HREADY_cpu     (HREADY_cpu),
-    .HAUSER_cpu     (HAUSER_cpu),
-    .HWUSER_cpu     (HWUSER_cpu),
-    .HRDATA_cpu     (HRDATA_cpu),
-    .HREADYOUT_cpu  (HREADY_cpu),
-    .HRESP_cpu      (i_hresp_cpu),
-    .HRUSER_cpu     (HRUSER_cpu),
-
-
-    // Output port MI0 signals
-    .HSEL_rom1       (HSEL_rom1),
-    .HADDR_rom1      (HADDR_rom1),
-    .HTRANS_rom1     (HTRANS_rom1),
-    .HWRITE_rom1     (HWRITE_rom1),
-    .HSIZE_rom1      (HSIZE_rom1),
-    .HBURST_rom1     (HBURST_rom1),
-    .HPROT_rom1      (HPROT_rom1),
-    .HWDATA_rom1     (HWDATA_rom1),
-    .HMASTER_rom1    (i_hmaster_rom1),
-    .HMASTLOCK_rom1  (HMASTLOCK_rom1),
-    .HREADYMUX_rom1  (HREADYMUX_rom1),
-    .HAUSER_rom1     (HAUSER_rom1),
-    .HWUSER_rom1     (HWUSER_rom1),
-    .HRDATA_rom1     (HRDATA_rom1),
-    .HREADYOUT_rom1  (HREADYOUT_rom1),
-    .HRESP_rom1      (i_hresp_rom1),
-    .HRUSER_rom1     (HRUSER_rom1),
-
-    // Output port MI1 signals
-    .HSEL_ram2       (HSEL_ram2),
-    .HADDR_ram2      (HADDR_ram2),
-    .HTRANS_ram2     (HTRANS_ram2),
-    .HWRITE_ram2     (HWRITE_ram2),
-    .HSIZE_ram2      (HSIZE_ram2),
-    .HBURST_ram2     (HBURST_ram2),
-    .HPROT_ram2      (HPROT_ram2),
-    .HWDATA_ram2     (HWDATA_ram2),
-    .HMASTER_ram2    (i_hmaster_ram2),
-    .HMASTLOCK_ram2  (HMASTLOCK_ram2),
-    .HREADYMUX_ram2  (HREADYMUX_ram2),
-    .HAUSER_ram2     (HAUSER_ram2),
-    .HWUSER_ram2     (HWUSER_ram2),
-    .HRDATA_ram2     (HRDATA_ram2),
-    .HREADYOUT_ram2  (HREADYOUT_ram2),
-    .HRESP_ram2      (i_hresp_ram2),
-    .HRUSER_ram2     (HRUSER_ram2),
-
-    // Output port MI2 signals
-    .HSEL_ram3       (HSEL_ram3),
-    .HADDR_ram3      (HADDR_ram3),
-    .HTRANS_ram3     (HTRANS_ram3),
-    .HWRITE_ram3     (HWRITE_ram3),
-    .HSIZE_ram3      (HSIZE_ram3),
-    .HBURST_ram3     (HBURST_ram3),
-    .HPROT_ram3      (HPROT_ram3),
-    .HWDATA_ram3     (HWDATA_ram3),
-    .HMASTER_ram3    (i_hmaster_ram3),
-    .HMASTLOCK_ram3  (HMASTLOCK_ram3),
-    .HREADYMUX_ram3  (HREADYMUX_ram3),
-    .HAUSER_ram3     (HAUSER_ram3),
-    .HWUSER_ram3     (HWUSER_ram3),
-    .HRDATA_ram3     (HRDATA_ram3),
-    .HREADYOUT_ram3  (HREADYOUT_ram3),
-    .HRESP_ram3      (i_hresp_ram3),
-    .HRUSER_ram3     (HRUSER_ram3),
-
-    // Output port MI3 signals
-    .HSEL_sys       (HSEL_sys),
-    .HADDR_sys      (HADDR_sys),
-    .HTRANS_sys     (HTRANS_sys),
-    .HWRITE_sys     (HWRITE_sys),
-    .HSIZE_sys      (HSIZE_sys),
-    .HBURST_sys     (HBURST_sys),
-    .HPROT_sys      (HPROT_sys),
-    .HWDATA_sys     (HWDATA_sys),
-    .HMASTER_sys    (i_hmaster_sys),
-    .HMASTLOCK_sys  (HMASTLOCK_sys),
-    .HREADYMUX_sys  (HREADYMUX_sys),
-    .HAUSER_sys     (HAUSER_sys),
-    .HWUSER_sys     (HWUSER_sys),
-    .HRDATA_sys     (HRDATA_sys),
-    .HREADYOUT_sys  (HREADYOUT_sys),
-    .HRESP_sys      (i_hresp_sys),
-    .HRUSER_sys     (HRUSER_sys),
-
-    // Output port MI4 signals
-    .HSEL_ram8       (HSEL_ram8),
-    .HADDR_ram8      (HADDR_ram8),
-    .HTRANS_ram8     (HTRANS_ram8),
-    .HWRITE_ram8     (HWRITE_ram8),
-    .HSIZE_ram8      (HSIZE_ram8),
-    .HBURST_ram8     (HBURST_ram8),
-    .HPROT_ram8      (HPROT_ram8),
-    .HWDATA_ram8     (HWDATA_ram8),
-    .HMASTER_ram8    (i_hmaster_ram8),
-    .HMASTLOCK_ram8  (HMASTLOCK_ram8),
-    .HREADYMUX_ram8  (HREADYMUX_ram8),
-    .HAUSER_ram8     (HAUSER_ram8),
-    .HWUSER_ram8     (HWUSER_ram8),
-    .HRDATA_ram8     (HRDATA_ram8),
-    .HREADYOUT_ram8  (HREADYOUT_ram8),
-    .HRESP_ram8      (i_hresp_ram8),
-    .HRUSER_ram8     (HRUSER_ram8),
-
-    // Output port MI5 signals
-    .HSEL_ram9       (HSEL_ram9),
-    .HADDR_ram9      (HADDR_ram9),
-    .HTRANS_ram9     (HTRANS_ram9),
-    .HWRITE_ram9     (HWRITE_ram9),
-    .HSIZE_ram9      (HSIZE_ram9),
-    .HBURST_ram9     (HBURST_ram9),
-    .HPROT_ram9      (HPROT_ram9),
-    .HWDATA_ram9     (HWDATA_ram9),
-    .HMASTER_ram9    (i_hmaster_ram9),
-    .HMASTLOCK_ram9  (HMASTLOCK_ram9),
-    .HREADYMUX_ram9  (HREADYMUX_ram9),
-    .HAUSER_ram9     (HAUSER_ram9),
-    .HWUSER_ram9     (HWUSER_ram9),
-    .HRDATA_ram9     (HRDATA_ram9),
-    .HREADYOUT_ram9  (HREADYOUT_ram9),
-    .HRESP_ram9      (i_hresp_ram9),
-    .HRUSER_ram9     (HRUSER_ram9),
-
-    // Output port MI6 signals
-    .HSEL_exp       (HSEL_exp),
-    .HADDR_exp      (HADDR_exp),
-    .HTRANS_exp     (HTRANS_exp),
-    .HWRITE_exp     (HWRITE_exp),
-    .HSIZE_exp      (HSIZE_exp),
-    .HBURST_exp     (HBURST_exp),
-    .HPROT_exp      (HPROT_exp),
-    .HWDATA_exp     (HWDATA_exp),
-    .HMASTER_exp    (i_hmaster_exp),
-    .HMASTLOCK_exp  (HMASTLOCK_exp),
-    .HREADYMUX_exp  (HREADYMUX_exp),
-    .HAUSER_exp     (HAUSER_exp),
-    .HWUSER_exp     (HWUSER_exp),
-    .HRDATA_exp     (HRDATA_exp),
-    .HREADYOUT_exp  (HREADYOUT_exp),
-    .HRESP_exp      (i_hresp_exp),
-    .HRUSER_exp     (HRUSER_exp),
-
-
-    // Scan test dummy signals; not connected until scan insertion
-    .SCANENABLE            (SCANENABLE),
-    .SCANINHCLK            (SCANINHCLK),
-    .SCANOUTHCLK           (SCANOUTHCLK)
-  );
-
-
-endmodule
diff --git a/system/src/nanosoc_ahb_busmatrix/xml/nanosoc_ahb32_4x7.xml b/system/src/nanosoc_ahb_busmatrix/xml/nanosoc_ahb32_4x7.xml
deleted file mode 100644
index ad16c547e2cd9557c76adcc21501d8327ee53266..0000000000000000000000000000000000000000
--- a/system/src/nanosoc_ahb_busmatrix/xml/nanosoc_ahb32_4x7.xml
+++ /dev/null
@@ -1,156 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1" ?>
-
-<!--//----------------------------------------------------------------------------- -->
-<!--// customised interconnect specification for ADP/DMA/ Cortex-M0 controller      -->
-<!--//                                                                              -->
-<!--// Contributors                                                                 -->
-<!--//                                                                              -->
-<!--// David Flynn (d.w.flynn@soton.ac.uk)                                          -->
-<!--//                                                                              -->
-<!--// Copyright (C) 2023, SoC Labs (www.soclabs.org)                               -->
-<!--//----------------------------------------------------------------------------- -->
-
-<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
-<!--  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-2013 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.                                     -->
-<!--                                                                                    -->
-<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -              -->
-<!--  Version and Release Control 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  -->
-<!--                                                                                    -->
-<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
-<!--  Purpose             : based on Example XML file, defining an interconnect for     -->
-<!--                        (was 2 AHB Masters and 3 AHB Slaves.)                       -->
-<!--                         5 AHB subordinates and 3 AHB controllers                   -->
-<!--                                                                                    -->
-<!--  Note                : This information will overwrite parameters                  -->
-<!--                         specified on the command line                              -->
-<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
-
-<cfgfile>
-
-  <!-- - - - - *** DO NOT MODIFY ABOVE THIS LINE *** - - - - - - - - - - -  -->
-
-  <!-- Global definitions -->
-
-  <architecture_version>ahb2</architecture_version>
-  <arbitration_scheme>burst</arbitration_scheme>
-  <routing_data_width>32</routing_data_width>
-  <routing_address_width>32</routing_address_width>
-  <user_signal_width>2</user_signal_width>
-  <bus_matrix_name>nanosoc_ahb32_4x7_busmatrix</bus_matrix_name>
-  <input_stage_name>nanosoc_ahb32_4x7_inititator_input</input_stage_name>
-  <matrix_decode_name>nanosoc_ahb32_4x7_matrix_decode</matrix_decode_name>
-  <output_arbiter_name>nanosoc_ahb32_4x7_arbiter</output_arbiter_name>
-  <output_stage_name>nanosoc_ahb32_4x7_target_output</output_stage_name>
-
-
-  <!-- Slave interface definitions -->
-
-  <slave_interface name="_adp">
-    <sparse_connect interface="_rom1"/>
-    <sparse_connect interface="_ram2"/>
-    <sparse_connect interface="_ram3"/>
-    <sparse_connect interface="_sys"/>
-    <sparse_connect interface="_exp"/>
-    <sparse_connect interface="_ram8"/>
-    <sparse_connect interface="_ram9"/>
-    <address_region interface="_rom1" mem_lo='00000000' mem_hi='0fffffff' remapping='move'/>
-    <address_region interface="_rom1" mem_lo='10000000' mem_hi='1fffffff' remapping='none'/>
-    <address_region interface="_ram2" mem_lo='20000000' mem_hi='2fffffff' remapping='none'/>
-    <address_region interface="_ram3" mem_lo='30000000' mem_hi='3fffffff' remapping='none'/>
-    <address_region interface="_sys"  mem_lo='40000000' mem_hi='5fffffff' remapping='none'/>
-    <address_region interface="_exp"  mem_lo='60000000' mem_hi='7fffffff' remapping='none'/>
-    <address_region interface="_ram8" mem_lo='80000000' mem_hi='8fffffff' remapping='none'/>
-    <address_region interface="_ram9" mem_lo='90000000' mem_hi='9fffffff' remapping='none'/>
-    <address_region interface="_exp"  mem_lo='a0000000' mem_hi='dfffffff' remapping='none'/>
-    <address_region interface="_sys"  mem_lo='f0000000' mem_hi='f003ffff' remapping='none'/>
-    <remap_region   interface="_ram2" mem_lo='00000000' mem_hi='0fffffff' bit='0'/>
-  </slave_interface>
-
-  <slave_interface name="_dma">
-    <sparse_connect interface="_rom1"/>
-    <sparse_connect interface="_ram2"/>
-    <sparse_connect interface="_ram3"/>
-    <sparse_connect interface="_sys"/>
-    <sparse_connect interface="_exp"/>
-    <sparse_connect interface="_ram8"/>
-    <sparse_connect interface="_ram9"/>
-    <address_region interface="_ram2" mem_lo='00000000' mem_hi='0fffffff' remapping='none'/>
-    <address_region interface="_rom1" mem_lo='10000000' mem_hi='1fffffff' remapping='none'/>
-    <address_region interface="_ram2" mem_lo='20000000' mem_hi='2fffffff' remapping='none'/>
-    <address_region interface="_ram3" mem_lo='30000000' mem_hi='3fffffff' remapping='none'/>
-    <address_region interface="_sys"  mem_lo='40000000' mem_hi='5fffffff' remapping='none'/>
-    <address_region interface="_exp"  mem_lo='60000000' mem_hi='7fffffff' remapping='none'/>
-    <address_region interface="_ram8" mem_lo='80000000' mem_hi='8fffffff' remapping='none'/>
-    <address_region interface="_ram9" mem_lo='90000000' mem_hi='9fffffff' remapping='none'/>
-    <address_region interface="_exp"  mem_lo='a0000000' mem_hi='dfffffff' remapping='none'/>
-  </slave_interface>
-
-  <slave_interface name="_dma2">
-    <sparse_connect interface="_rom1"/>
-    <sparse_connect interface="_ram2"/>
-    <sparse_connect interface="_ram3"/>
-    <sparse_connect interface="_sys"/>
-    <sparse_connect interface="_exp"/>
-    <sparse_connect interface="_ram8"/>
-    <sparse_connect interface="_ram9"/>
-    <address_region interface="_ram2" mem_lo='00000000' mem_hi='0fffffff' remapping='none'/>
-    <address_region interface="_rom1" mem_lo='10000000' mem_hi='1fffffff' remapping='none'/>
-    <address_region interface="_ram2" mem_lo='20000000' mem_hi='2fffffff' remapping='none'/>
-    <address_region interface="_ram3" mem_lo='30000000' mem_hi='3fffffff' remapping='none'/>
-    <address_region interface="_sys"  mem_lo='40000000' mem_hi='5fffffff' remapping='none'/>
-    <address_region interface="_exp"  mem_lo='60000000' mem_hi='7fffffff' remapping='none'/>
-    <address_region interface="_ram8" mem_lo='80000000' mem_hi='8fffffff' remapping='none'/>
-    <address_region interface="_ram9" mem_lo='90000000' mem_hi='9fffffff' remapping='none'/>
-    <address_region interface="_exp"  mem_lo='a0000000' mem_hi='dfffffff' remapping='none'/>
-  </slave_interface>
-
-  <slave_interface name="_cpu">
-    <sparse_connect interface="_rom1"/>
-    <sparse_connect interface="_ram2"/>
-    <sparse_connect interface="_ram3"/>
-    <sparse_connect interface="_sys"/>
-    <sparse_connect interface="_exp"/>
-    <sparse_connect interface="_ram8"/>
-    <sparse_connect interface="_ram9"/>
-    <address_region interface="_rom1" mem_lo='00000000' mem_hi='0fffffff' remapping='move'/>
-    <address_region interface="_rom1" mem_lo='10000000' mem_hi='1fffffff' remapping='none'/>
-    <address_region interface="_ram2" mem_lo='20000000' mem_hi='2fffffff' remapping='none'/>
-    <address_region interface="_ram3" mem_lo='30000000' mem_hi='3fffffff' remapping='none'/>
-    <address_region interface="_sys"  mem_lo='40000000' mem_hi='5fffffff' remapping='none'/>
-    <address_region interface="_exp"  mem_lo='60000000' mem_hi='7fffffff' remapping='none'/>
-    <address_region interface="_ram8" mem_lo='80000000' mem_hi='8fffffff' remapping='none'/>
-    <address_region interface="_ram9" mem_lo='90000000' mem_hi='9fffffff' remapping='none'/>
-    <address_region interface="_exp"  mem_lo='a0000000' mem_hi='dfffffff' remapping='none'/>
-    <address_region interface="_sys"  mem_lo='f0000000' mem_hi='f003ffff' remapping='none'/>
-    <remap_region   interface="_ram2" mem_lo='00000000' mem_hi='0fffffff' bit='0'/>
-  </slave_interface>
-
-  <!-- Master interface definitions -->
-
-  <master_interface name="_rom1"/>
-  <master_interface name="_ram2"/>
-  <master_interface name="_ram3"/>
-  <master_interface name="_sys"/>
-  <master_interface name="_ram8"/>
-  <master_interface name="_ram9"/>
-  <master_interface name="_exp"/>
-
-  <!-- - - - - *** DO NOT MODIFY BELOW THIS LINE *** - - - - - - - - - - - -->
-
-</cfgfile>
diff --git a/system/src/nanosoc_ahb_busmatrix/ipxact/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_busmatrix.xml b/system/src/nanosoc_busmatrix/ipxact/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_busmatrix.xml
similarity index 78%
rename from system/src/nanosoc_ahb_busmatrix/ipxact/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_busmatrix.xml
rename to system/src/nanosoc_busmatrix/ipxact/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_busmatrix.xml
index 750b122f94aaae9d4629ba9b9cc9799525b148fb..56e0a18a673f064e13e411f9f532d6848c7645ad 100644
--- a/system/src/nanosoc_ahb_busmatrix/ipxact/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_busmatrix.xml
+++ b/system/src/nanosoc_busmatrix/ipxact/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_busmatrix.xml
@@ -44,13 +44,14 @@
          <spirit:abstractionType spirit:library="AMBA3" spirit:name="AHBLiteTarget_rtl" spirit:vendor="amba.com" spirit:version="r2p0_0"/>
          <spirit:slave>
             <spirit:memoryMapRef spirit:memoryMapRef="AHBLiteTarget_Slave__adp_MM"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__rom1" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__ram2" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__ram3" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__sys" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__ram8" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__ram9" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__bootrom" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__imem" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__dmem" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__sysio" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__expram_l" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__expram_h" spirit:opaque="true"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__exp" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__systable" spirit:opaque="true"/>
          </spirit:slave>
 
          <spirit:portMaps>
@@ -213,18 +214,18 @@
       </spirit:busInterface>
 
       <spirit:busInterface>
-         <spirit:name>AHBLiteTarget_Slave__dma</spirit:name>
-         <spirit:description>Slave port _dma</spirit:description>
+         <spirit:name>AHBLiteTarget_Slave__dma_0</spirit:name>
+         <spirit:description>Slave port _dma_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:slave>
-            <spirit:memoryMapRef spirit:memoryMapRef="AHBLiteTarget_Slave__dma_MM"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__rom1" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__ram2" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__ram3" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__sys" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__ram8" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__ram9" spirit:opaque="true"/>
+            <spirit:memoryMapRef spirit:memoryMapRef="AHBLiteTarget_Slave__dma_0_MM"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__bootrom" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__imem" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__dmem" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__sysio" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__expram_l" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__expram_h" spirit:opaque="true"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__exp" spirit:opaque="true"/>
          </spirit:slave>
 
@@ -252,7 +253,7 @@
                  <spirit:name>HSELx</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HSEL_dma</spirit:name>
+                 <spirit:name>HSEL_dma_0</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -260,7 +261,7 @@
                  <spirit:name>HADDR</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HADDR_dma</spirit:name>
+                 <spirit:name>HADDR_dma_0</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -268,7 +269,7 @@
                  <spirit:name>HTRANS</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HTRANS_dma</spirit:name>
+                 <spirit:name>HTRANS_dma_0</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -276,7 +277,7 @@
                  <spirit:name>HWRITE</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWRITE_dma</spirit:name>
+                 <spirit:name>HWRITE_dma_0</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -284,7 +285,7 @@
                  <spirit:name>HSIZE</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HSIZE_dma</spirit:name>
+                 <spirit:name>HSIZE_dma_0</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -292,7 +293,7 @@
                  <spirit:name>HBURST</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HBURST_dma</spirit:name>
+                 <spirit:name>HBURST_dma_0</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -300,18 +301,18 @@
                  <spirit:name>HPROT</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HPROT_dma</spirit:name>
+                 <spirit:name>HPROT_dma_0</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
 
-            <!-- HMASTER_dma unmapped -->
+            <!-- HMASTER_dma_0 unmapped -->
 
             <spirit:portMap>
                <spirit:logicalPort>
                  <spirit:name>HWDATA</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWDATA_dma</spirit:name>
+                 <spirit:name>HWDATA_dma_0</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -319,7 +320,7 @@
                  <spirit:name>HMASTLOCK</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HMASTLOCK_dma</spirit:name>
+                 <spirit:name>HMASTLOCK_dma_0</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -327,7 +328,7 @@
                  <spirit:name>HREADY</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HREADY_dma</spirit:name>
+                 <spirit:name>HREADY_dma_0</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -335,7 +336,7 @@
                  <spirit:name>HAUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HAUSER_dma</spirit:name>
+                 <spirit:name>HAUSER_dma_0</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -343,7 +344,7 @@
                  <spirit:name>HWUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWUSER_dma</spirit:name>
+                 <spirit:name>HWUSER_dma_0</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
 
@@ -353,7 +354,7 @@
                  <spirit:name>HRDATA</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRDATA_dma</spirit:name>
+                 <spirit:name>HRDATA_dma_0</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -361,7 +362,7 @@
                  <spirit:name>HREADYOUT</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HREADYOUT_dma</spirit:name>
+                 <spirit:name>HREADYOUT_dma_0</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -369,7 +370,7 @@
                  <spirit:name>HRESP</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRESP_dma</spirit:name>
+                 <spirit:name>HRESP_dma_0</spirit:name>
                  <spirit:vector>
                     <spirit:left>0</spirit:left>
                     <spirit:right>0</spirit:right>
@@ -381,25 +382,25 @@
                  <spirit:name>HRUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRUSER_dma</spirit:name>
+                 <spirit:name>HRUSER_dma_0</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
          </spirit:portMaps>
       </spirit:busInterface>
 
       <spirit:busInterface>
-         <spirit:name>AHBLiteTarget_Slave__dma2</spirit:name>
-         <spirit:description>Slave port _dma2</spirit:description>
+         <spirit:name>AHBLiteTarget_Slave__dma_1</spirit:name>
+         <spirit:description>Slave port _dma_1</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:slave>
-            <spirit:memoryMapRef spirit:memoryMapRef="AHBLiteTarget_Slave__dma2_MM"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__rom1" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__ram2" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__ram3" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__sys" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__ram8" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__ram9" spirit:opaque="true"/>
+            <spirit:memoryMapRef spirit:memoryMapRef="AHBLiteTarget_Slave__dma_1_MM"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__bootrom" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__imem" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__dmem" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__sysio" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__expram_l" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__expram_h" spirit:opaque="true"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__exp" spirit:opaque="true"/>
          </spirit:slave>
 
@@ -427,7 +428,7 @@
                  <spirit:name>HSELx</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HSEL_dma2</spirit:name>
+                 <spirit:name>HSEL_dma_1</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -435,7 +436,7 @@
                  <spirit:name>HADDR</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HADDR_dma2</spirit:name>
+                 <spirit:name>HADDR_dma_1</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -443,7 +444,7 @@
                  <spirit:name>HTRANS</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HTRANS_dma2</spirit:name>
+                 <spirit:name>HTRANS_dma_1</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -451,7 +452,7 @@
                  <spirit:name>HWRITE</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWRITE_dma2</spirit:name>
+                 <spirit:name>HWRITE_dma_1</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -459,7 +460,7 @@
                  <spirit:name>HSIZE</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HSIZE_dma2</spirit:name>
+                 <spirit:name>HSIZE_dma_1</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -467,7 +468,7 @@
                  <spirit:name>HBURST</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HBURST_dma2</spirit:name>
+                 <spirit:name>HBURST_dma_1</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -475,18 +476,18 @@
                  <spirit:name>HPROT</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HPROT_dma2</spirit:name>
+                 <spirit:name>HPROT_dma_1</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
 
-            <!-- HMASTER_dma2 unmapped -->
+            <!-- HMASTER_dma_1 unmapped -->
 
             <spirit:portMap>
                <spirit:logicalPort>
                  <spirit:name>HWDATA</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWDATA_dma2</spirit:name>
+                 <spirit:name>HWDATA_dma_1</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -494,7 +495,7 @@
                  <spirit:name>HMASTLOCK</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HMASTLOCK_dma2</spirit:name>
+                 <spirit:name>HMASTLOCK_dma_1</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -502,7 +503,7 @@
                  <spirit:name>HREADY</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HREADY_dma2</spirit:name>
+                 <spirit:name>HREADY_dma_1</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -510,7 +511,7 @@
                  <spirit:name>HAUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HAUSER_dma2</spirit:name>
+                 <spirit:name>HAUSER_dma_1</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -518,7 +519,7 @@
                  <spirit:name>HWUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWUSER_dma2</spirit:name>
+                 <spirit:name>HWUSER_dma_1</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
 
@@ -528,7 +529,7 @@
                  <spirit:name>HRDATA</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRDATA_dma2</spirit:name>
+                 <spirit:name>HRDATA_dma_1</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -536,7 +537,7 @@
                  <spirit:name>HREADYOUT</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HREADYOUT_dma2</spirit:name>
+                 <spirit:name>HREADYOUT_dma_1</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -544,7 +545,7 @@
                  <spirit:name>HRESP</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRESP_dma2</spirit:name>
+                 <spirit:name>HRESP_dma_1</spirit:name>
                  <spirit:vector>
                     <spirit:left>0</spirit:left>
                     <spirit:right>0</spirit:right>
@@ -556,7 +557,7 @@
                  <spirit:name>HRUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRUSER_dma2</spirit:name>
+                 <spirit:name>HRUSER_dma_1</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
          </spirit:portMaps>
@@ -569,13 +570,14 @@
          <spirit:abstractionType spirit:library="AMBA3" spirit:name="AHBLiteTarget_rtl" spirit:vendor="amba.com" spirit:version="r2p0_0"/>
          <spirit:slave>
             <spirit:memoryMapRef spirit:memoryMapRef="AHBLiteTarget_Slave__cpu_MM"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__rom1" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__ram2" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__ram3" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__sys" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__ram8" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__ram9" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__bootrom" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__imem" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__dmem" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__sysio" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__expram_l" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__expram_h" spirit:opaque="true"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__exp" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__systable" spirit:opaque="true"/>
          </spirit:slave>
 
          <spirit:portMaps>
@@ -740,12 +742,12 @@
         <!--Master interfaces -->
 
       <spirit:busInterface>
-         <spirit:name>AHBLiteTarget_Master__rom1</spirit:name>
-         <spirit:description>Master port _rom1</spirit:description>
+         <spirit:name>AHBLiteTarget_Master__bootrom</spirit:name>
+         <spirit:description>Master port _bootrom</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__rom1_AS"/>
+            <spirit:addressSpaceRef spirit:addressSpaceRef="AHBLiteTarget_Master__bootrom_AS"/>
          </spirit:master>
 
          <spirit:portMaps>
@@ -772,7 +774,7 @@
                  <spirit:name>HSELx</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HSEL_rom1</spirit:name>
+                 <spirit:name>HSEL_bootrom</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -780,7 +782,7 @@
                  <spirit:name>HADDR</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HADDR_rom1</spirit:name>
+                 <spirit:name>HADDR_bootrom</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -788,7 +790,7 @@
                  <spirit:name>HTRANS</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HTRANS_rom1</spirit:name>
+                 <spirit:name>HTRANS_bootrom</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -796,7 +798,7 @@
                  <spirit:name>HWRITE</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWRITE_rom1</spirit:name>
+                 <spirit:name>HWRITE_bootrom</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -804,7 +806,7 @@
                  <spirit:name>HSIZE</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HSIZE_rom1</spirit:name>
+                 <spirit:name>HSIZE_bootrom</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -812,7 +814,7 @@
                  <spirit:name>HBURST</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HBURST_rom1</spirit:name>
+                 <spirit:name>HBURST_bootrom</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -820,18 +822,18 @@
                  <spirit:name>HPROT</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HPROT_rom1</spirit:name>
+                 <spirit:name>HPROT_bootrom</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
 
-            <!-- HMASTER_rom1 unmapped -->
+            <!-- HMASTER_bootrom unmapped -->
 
             <spirit:portMap>
                <spirit:logicalPort>
                  <spirit:name>HWDATA</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWDATA_rom1</spirit:name>
+                 <spirit:name>HWDATA_bootrom</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -839,7 +841,7 @@
                  <spirit:name>HMASTLOCK</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HMASTLOCK_rom1</spirit:name>
+                 <spirit:name>HMASTLOCK_bootrom</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -847,7 +849,7 @@
                  <spirit:name>HREADY</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HREADYMUX_rom1</spirit:name>
+                 <spirit:name>HREADYMUX_bootrom</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -855,7 +857,7 @@
                  <spirit:name>HAUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HAUSER_rom1</spirit:name>
+                 <spirit:name>HAUSER_bootrom</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -863,7 +865,7 @@
                  <spirit:name>HWUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWUSER_rom1</spirit:name>
+                 <spirit:name>HWUSER_bootrom</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
 
@@ -873,7 +875,7 @@
                  <spirit:name>HRDATA</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRDATA_rom1</spirit:name>
+                 <spirit:name>HRDATA_bootrom</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -881,7 +883,7 @@
                  <spirit:name>HREADYOUT</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HREADYOUT_rom1</spirit:name>
+                 <spirit:name>HREADYOUT_bootrom</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -889,7 +891,7 @@
                  <spirit:name>HRESP</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRESP_rom1</spirit:name>
+                 <spirit:name>HRESP_bootrom</spirit:name>
                  <spirit:vector>
                     <spirit:left>0</spirit:left>
                     <spirit:right>0</spirit:right>
@@ -901,19 +903,19 @@
                  <spirit:name>HRUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRUSER_rom1</spirit:name>
+                 <spirit:name>HRUSER_bootrom</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
          </spirit:portMaps>
       </spirit:busInterface>
 
       <spirit:busInterface>
-         <spirit:name>AHBLiteTarget_Master__ram2</spirit:name>
-         <spirit:description>Master port _ram2</spirit:description>
+         <spirit:name>AHBLiteTarget_Master__imem</spirit:name>
+         <spirit:description>Master port _imem</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__ram2_AS"/>
+            <spirit:addressSpaceRef spirit:addressSpaceRef="AHBLiteTarget_Master__imem_AS"/>
          </spirit:master>
 
          <spirit:portMaps>
@@ -940,7 +942,7 @@
                  <spirit:name>HSELx</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HSEL_ram2</spirit:name>
+                 <spirit:name>HSEL_imem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -948,7 +950,7 @@
                  <spirit:name>HADDR</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HADDR_ram2</spirit:name>
+                 <spirit:name>HADDR_imem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -956,7 +958,7 @@
                  <spirit:name>HTRANS</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HTRANS_ram2</spirit:name>
+                 <spirit:name>HTRANS_imem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -964,7 +966,7 @@
                  <spirit:name>HWRITE</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWRITE_ram2</spirit:name>
+                 <spirit:name>HWRITE_imem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -972,7 +974,7 @@
                  <spirit:name>HSIZE</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HSIZE_ram2</spirit:name>
+                 <spirit:name>HSIZE_imem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -980,7 +982,7 @@
                  <spirit:name>HBURST</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HBURST_ram2</spirit:name>
+                 <spirit:name>HBURST_imem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -988,18 +990,18 @@
                  <spirit:name>HPROT</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HPROT_ram2</spirit:name>
+                 <spirit:name>HPROT_imem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
 
-            <!-- HMASTER_ram2 unmapped -->
+            <!-- HMASTER_imem unmapped -->
 
             <spirit:portMap>
                <spirit:logicalPort>
                  <spirit:name>HWDATA</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWDATA_ram2</spirit:name>
+                 <spirit:name>HWDATA_imem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1007,7 +1009,7 @@
                  <spirit:name>HMASTLOCK</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HMASTLOCK_ram2</spirit:name>
+                 <spirit:name>HMASTLOCK_imem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1015,7 +1017,7 @@
                  <spirit:name>HREADY</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HREADYMUX_ram2</spirit:name>
+                 <spirit:name>HREADYMUX_imem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1023,7 +1025,7 @@
                  <spirit:name>HAUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HAUSER_ram2</spirit:name>
+                 <spirit:name>HAUSER_imem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1031,7 +1033,7 @@
                  <spirit:name>HWUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWUSER_ram2</spirit:name>
+                 <spirit:name>HWUSER_imem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
 
@@ -1041,7 +1043,7 @@
                  <spirit:name>HRDATA</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRDATA_ram2</spirit:name>
+                 <spirit:name>HRDATA_imem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1049,7 +1051,7 @@
                  <spirit:name>HREADYOUT</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HREADYOUT_ram2</spirit:name>
+                 <spirit:name>HREADYOUT_imem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1057,7 +1059,7 @@
                  <spirit:name>HRESP</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRESP_ram2</spirit:name>
+                 <spirit:name>HRESP_imem</spirit:name>
                  <spirit:vector>
                     <spirit:left>0</spirit:left>
                     <spirit:right>0</spirit:right>
@@ -1069,19 +1071,19 @@
                  <spirit:name>HRUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRUSER_ram2</spirit:name>
+                 <spirit:name>HRUSER_imem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
          </spirit:portMaps>
       </spirit:busInterface>
 
       <spirit:busInterface>
-         <spirit:name>AHBLiteTarget_Master__ram3</spirit:name>
-         <spirit:description>Master port _ram3</spirit:description>
+         <spirit:name>AHBLiteTarget_Master__dmem</spirit:name>
+         <spirit:description>Master port _dmem</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__ram3_AS"/>
+            <spirit:addressSpaceRef spirit:addressSpaceRef="AHBLiteTarget_Master__dmem_AS"/>
          </spirit:master>
 
          <spirit:portMaps>
@@ -1108,7 +1110,7 @@
                  <spirit:name>HSELx</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HSEL_ram3</spirit:name>
+                 <spirit:name>HSEL_dmem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1116,7 +1118,7 @@
                  <spirit:name>HADDR</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HADDR_ram3</spirit:name>
+                 <spirit:name>HADDR_dmem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1124,7 +1126,7 @@
                  <spirit:name>HTRANS</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HTRANS_ram3</spirit:name>
+                 <spirit:name>HTRANS_dmem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1132,7 +1134,7 @@
                  <spirit:name>HWRITE</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWRITE_ram3</spirit:name>
+                 <spirit:name>HWRITE_dmem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1140,7 +1142,7 @@
                  <spirit:name>HSIZE</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HSIZE_ram3</spirit:name>
+                 <spirit:name>HSIZE_dmem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1148,7 +1150,7 @@
                  <spirit:name>HBURST</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HBURST_ram3</spirit:name>
+                 <spirit:name>HBURST_dmem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1156,18 +1158,18 @@
                  <spirit:name>HPROT</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HPROT_ram3</spirit:name>
+                 <spirit:name>HPROT_dmem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
 
-            <!-- HMASTER_ram3 unmapped -->
+            <!-- HMASTER_dmem unmapped -->
 
             <spirit:portMap>
                <spirit:logicalPort>
                  <spirit:name>HWDATA</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWDATA_ram3</spirit:name>
+                 <spirit:name>HWDATA_dmem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1175,7 +1177,7 @@
                  <spirit:name>HMASTLOCK</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HMASTLOCK_ram3</spirit:name>
+                 <spirit:name>HMASTLOCK_dmem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1183,7 +1185,7 @@
                  <spirit:name>HREADY</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HREADYMUX_ram3</spirit:name>
+                 <spirit:name>HREADYMUX_dmem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1191,7 +1193,7 @@
                  <spirit:name>HAUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HAUSER_ram3</spirit:name>
+                 <spirit:name>HAUSER_dmem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1199,7 +1201,7 @@
                  <spirit:name>HWUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWUSER_ram3</spirit:name>
+                 <spirit:name>HWUSER_dmem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
 
@@ -1209,7 +1211,7 @@
                  <spirit:name>HRDATA</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRDATA_ram3</spirit:name>
+                 <spirit:name>HRDATA_dmem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1217,7 +1219,7 @@
                  <spirit:name>HREADYOUT</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HREADYOUT_ram3</spirit:name>
+                 <spirit:name>HREADYOUT_dmem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1225,7 +1227,7 @@
                  <spirit:name>HRESP</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRESP_ram3</spirit:name>
+                 <spirit:name>HRESP_dmem</spirit:name>
                  <spirit:vector>
                     <spirit:left>0</spirit:left>
                     <spirit:right>0</spirit:right>
@@ -1237,19 +1239,19 @@
                  <spirit:name>HRUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRUSER_ram3</spirit:name>
+                 <spirit:name>HRUSER_dmem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
          </spirit:portMaps>
       </spirit:busInterface>
 
       <spirit:busInterface>
-         <spirit:name>AHBLiteTarget_Master__sys</spirit:name>
-         <spirit:description>Master port _sys</spirit:description>
+         <spirit:name>AHBLiteTarget_Master__sysio</spirit:name>
+         <spirit:description>Master port _sysio</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__sys_AS"/>
+            <spirit:addressSpaceRef spirit:addressSpaceRef="AHBLiteTarget_Master__sysio_AS"/>
          </spirit:master>
 
          <spirit:portMaps>
@@ -1276,7 +1278,7 @@
                  <spirit:name>HSELx</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HSEL_sys</spirit:name>
+                 <spirit:name>HSEL_sysio</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1284,7 +1286,7 @@
                  <spirit:name>HADDR</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HADDR_sys</spirit:name>
+                 <spirit:name>HADDR_sysio</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1292,7 +1294,7 @@
                  <spirit:name>HTRANS</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HTRANS_sys</spirit:name>
+                 <spirit:name>HTRANS_sysio</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1300,7 +1302,7 @@
                  <spirit:name>HWRITE</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWRITE_sys</spirit:name>
+                 <spirit:name>HWRITE_sysio</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1308,7 +1310,7 @@
                  <spirit:name>HSIZE</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HSIZE_sys</spirit:name>
+                 <spirit:name>HSIZE_sysio</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1316,7 +1318,7 @@
                  <spirit:name>HBURST</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HBURST_sys</spirit:name>
+                 <spirit:name>HBURST_sysio</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1324,18 +1326,18 @@
                  <spirit:name>HPROT</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HPROT_sys</spirit:name>
+                 <spirit:name>HPROT_sysio</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
 
-            <!-- HMASTER_sys unmapped -->
+            <!-- HMASTER_sysio unmapped -->
 
             <spirit:portMap>
                <spirit:logicalPort>
                  <spirit:name>HWDATA</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWDATA_sys</spirit:name>
+                 <spirit:name>HWDATA_sysio</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1343,7 +1345,7 @@
                  <spirit:name>HMASTLOCK</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HMASTLOCK_sys</spirit:name>
+                 <spirit:name>HMASTLOCK_sysio</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1351,7 +1353,7 @@
                  <spirit:name>HREADY</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HREADYMUX_sys</spirit:name>
+                 <spirit:name>HREADYMUX_sysio</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1359,7 +1361,7 @@
                  <spirit:name>HAUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HAUSER_sys</spirit:name>
+                 <spirit:name>HAUSER_sysio</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1367,7 +1369,7 @@
                  <spirit:name>HWUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWUSER_sys</spirit:name>
+                 <spirit:name>HWUSER_sysio</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
 
@@ -1377,7 +1379,7 @@
                  <spirit:name>HRDATA</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRDATA_sys</spirit:name>
+                 <spirit:name>HRDATA_sysio</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1385,7 +1387,7 @@
                  <spirit:name>HREADYOUT</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HREADYOUT_sys</spirit:name>
+                 <spirit:name>HREADYOUT_sysio</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1393,7 +1395,7 @@
                  <spirit:name>HRESP</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRESP_sys</spirit:name>
+                 <spirit:name>HRESP_sysio</spirit:name>
                  <spirit:vector>
                     <spirit:left>0</spirit:left>
                     <spirit:right>0</spirit:right>
@@ -1405,19 +1407,19 @@
                  <spirit:name>HRUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRUSER_sys</spirit:name>
+                 <spirit:name>HRUSER_sysio</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
          </spirit:portMaps>
       </spirit:busInterface>
 
       <spirit:busInterface>
-         <spirit:name>AHBLiteTarget_Master__ram8</spirit:name>
-         <spirit:description>Master port _ram8</spirit:description>
+         <spirit:name>AHBLiteTarget_Master__expram_l</spirit:name>
+         <spirit:description>Master port _expram_l</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__ram8_AS"/>
+            <spirit:addressSpaceRef spirit:addressSpaceRef="AHBLiteTarget_Master__expram_l_AS"/>
          </spirit:master>
 
          <spirit:portMaps>
@@ -1444,7 +1446,7 @@
                  <spirit:name>HSELx</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HSEL_ram8</spirit:name>
+                 <spirit:name>HSEL_expram_l</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1452,7 +1454,7 @@
                  <spirit:name>HADDR</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HADDR_ram8</spirit:name>
+                 <spirit:name>HADDR_expram_l</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1460,7 +1462,7 @@
                  <spirit:name>HTRANS</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HTRANS_ram8</spirit:name>
+                 <spirit:name>HTRANS_expram_l</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1468,7 +1470,7 @@
                  <spirit:name>HWRITE</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWRITE_ram8</spirit:name>
+                 <spirit:name>HWRITE_expram_l</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1476,7 +1478,7 @@
                  <spirit:name>HSIZE</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HSIZE_ram8</spirit:name>
+                 <spirit:name>HSIZE_expram_l</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1484,7 +1486,7 @@
                  <spirit:name>HBURST</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HBURST_ram8</spirit:name>
+                 <spirit:name>HBURST_expram_l</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1492,18 +1494,18 @@
                  <spirit:name>HPROT</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HPROT_ram8</spirit:name>
+                 <spirit:name>HPROT_expram_l</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
 
-            <!-- HMASTER_ram8 unmapped -->
+            <!-- HMASTER_expram_l unmapped -->
 
             <spirit:portMap>
                <spirit:logicalPort>
                  <spirit:name>HWDATA</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWDATA_ram8</spirit:name>
+                 <spirit:name>HWDATA_expram_l</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1511,7 +1513,7 @@
                  <spirit:name>HMASTLOCK</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HMASTLOCK_ram8</spirit:name>
+                 <spirit:name>HMASTLOCK_expram_l</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1519,7 +1521,7 @@
                  <spirit:name>HREADY</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HREADYMUX_ram8</spirit:name>
+                 <spirit:name>HREADYMUX_expram_l</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1527,7 +1529,7 @@
                  <spirit:name>HAUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HAUSER_ram8</spirit:name>
+                 <spirit:name>HAUSER_expram_l</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1535,7 +1537,7 @@
                  <spirit:name>HWUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWUSER_ram8</spirit:name>
+                 <spirit:name>HWUSER_expram_l</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
 
@@ -1545,7 +1547,7 @@
                  <spirit:name>HRDATA</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRDATA_ram8</spirit:name>
+                 <spirit:name>HRDATA_expram_l</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1553,7 +1555,7 @@
                  <spirit:name>HREADYOUT</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HREADYOUT_ram8</spirit:name>
+                 <spirit:name>HREADYOUT_expram_l</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1561,7 +1563,7 @@
                  <spirit:name>HRESP</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRESP_ram8</spirit:name>
+                 <spirit:name>HRESP_expram_l</spirit:name>
                  <spirit:vector>
                     <spirit:left>0</spirit:left>
                     <spirit:right>0</spirit:right>
@@ -1573,19 +1575,19 @@
                  <spirit:name>HRUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRUSER_ram8</spirit:name>
+                 <spirit:name>HRUSER_expram_l</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
          </spirit:portMaps>
       </spirit:busInterface>
 
       <spirit:busInterface>
-         <spirit:name>AHBLiteTarget_Master__ram9</spirit:name>
-         <spirit:description>Master port _ram9</spirit:description>
+         <spirit:name>AHBLiteTarget_Master__expram_h</spirit:name>
+         <spirit:description>Master port _expram_h</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__ram9_AS"/>
+            <spirit:addressSpaceRef spirit:addressSpaceRef="AHBLiteTarget_Master__expram_h_AS"/>
          </spirit:master>
 
          <spirit:portMaps>
@@ -1612,7 +1614,7 @@
                  <spirit:name>HSELx</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HSEL_ram9</spirit:name>
+                 <spirit:name>HSEL_expram_h</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1620,7 +1622,7 @@
                  <spirit:name>HADDR</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HADDR_ram9</spirit:name>
+                 <spirit:name>HADDR_expram_h</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1628,7 +1630,7 @@
                  <spirit:name>HTRANS</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HTRANS_ram9</spirit:name>
+                 <spirit:name>HTRANS_expram_h</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1636,7 +1638,7 @@
                  <spirit:name>HWRITE</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWRITE_ram9</spirit:name>
+                 <spirit:name>HWRITE_expram_h</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1644,7 +1646,7 @@
                  <spirit:name>HSIZE</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HSIZE_ram9</spirit:name>
+                 <spirit:name>HSIZE_expram_h</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1652,7 +1654,7 @@
                  <spirit:name>HBURST</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HBURST_ram9</spirit:name>
+                 <spirit:name>HBURST_expram_h</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1660,18 +1662,18 @@
                  <spirit:name>HPROT</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HPROT_ram9</spirit:name>
+                 <spirit:name>HPROT_expram_h</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
 
-            <!-- HMASTER_ram9 unmapped -->
+            <!-- HMASTER_expram_h unmapped -->
 
             <spirit:portMap>
                <spirit:logicalPort>
                  <spirit:name>HWDATA</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWDATA_ram9</spirit:name>
+                 <spirit:name>HWDATA_expram_h</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1679,7 +1681,7 @@
                  <spirit:name>HMASTLOCK</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HMASTLOCK_ram9</spirit:name>
+                 <spirit:name>HMASTLOCK_expram_h</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1687,7 +1689,7 @@
                  <spirit:name>HREADY</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HREADYMUX_ram9</spirit:name>
+                 <spirit:name>HREADYMUX_expram_h</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1695,7 +1697,7 @@
                  <spirit:name>HAUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HAUSER_ram9</spirit:name>
+                 <spirit:name>HAUSER_expram_h</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1703,7 +1705,7 @@
                  <spirit:name>HWUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWUSER_ram9</spirit:name>
+                 <spirit:name>HWUSER_expram_h</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
 
@@ -1713,7 +1715,7 @@
                  <spirit:name>HRDATA</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRDATA_ram9</spirit:name>
+                 <spirit:name>HRDATA_expram_h</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1721,7 +1723,7 @@
                  <spirit:name>HREADYOUT</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HREADYOUT_ram9</spirit:name>
+                 <spirit:name>HREADYOUT_expram_h</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1729,7 +1731,7 @@
                  <spirit:name>HRESP</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRESP_ram9</spirit:name>
+                 <spirit:name>HRESP_expram_h</spirit:name>
                  <spirit:vector>
                     <spirit:left>0</spirit:left>
                     <spirit:right>0</spirit:right>
@@ -1741,7 +1743,7 @@
                  <spirit:name>HRUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRUSER_ram9</spirit:name>
+                 <spirit:name>HRUSER_expram_h</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
          </spirit:portMaps>
@@ -1915,6 +1917,174 @@
          </spirit:portMaps>
       </spirit:busInterface>
 
+      <spirit:busInterface>
+         <spirit:name>AHBLiteTarget_Master__systable</spirit:name>
+         <spirit:description>Master port _systable</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__systable_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_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HADDR</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HADDR_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HTRANS</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HTRANS_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWRITE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWRITE_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HSIZE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HSIZE_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HBURST</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HBURST_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HPROT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HPROT_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!-- HMASTER_systable unmapped -->
+
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWDATA_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HMASTLOCK</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HMASTLOCK_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADY</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYMUX_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HAUSER</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HAUSER_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWUSER</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWUSER_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!--  Inputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRDATA_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADYOUT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYOUT_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRESP</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRESP_systable</spirit:name>
+                 <spirit:vector>
+                    <spirit:left>0</spirit:left>
+                    <spirit:right>0</spirit:right>
+                 </spirit:vector>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRUSER</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRUSER_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+         </spirit:portMaps>
+      </spirit:busInterface>
+
       <!--Scan test dummy signals -->
       <spirit:busInterface>
          <spirit:name>DFTInterface_Slave</spirit:name>
@@ -1974,17 +2144,17 @@
    <spirit:remapStates>
 
       <spirit:remapState>
-          <spirit:name>remap_0</spirit:name>
-          <spirit:description>Remap state remap_0</spirit:description>
+          <spirit:name>remap_n0</spirit:name>
+          <spirit:description>Remap state remap_n0</spirit:description>
           <spirit:remapPorts>
-             <spirit:remapPort spirit:portNameRef="REMAP" spirit:portIndex="0">1</spirit:remapPort>
+             <spirit:remapPort spirit:portNameRef="REMAP" spirit:portIndex="0">0</spirit:remapPort>
           </spirit:remapPorts>
       </spirit:remapState>
       <spirit:remapState>
-          <spirit:name>remap_n0</spirit:name>
-          <spirit:description>Remap state remap_n0</spirit:description>
+          <spirit:name>remap_0</spirit:name>
+          <spirit:description>Remap state remap_0</spirit:description>
           <spirit:remapPorts>
-             <spirit:remapPort spirit:portNameRef="REMAP" spirit:portIndex="0">0</spirit:remapPort>
+             <spirit:remapPort spirit:portNameRef="REMAP" spirit:portIndex="0">1</spirit:remapPort>
           </spirit:remapPorts>
       </spirit:remapState>
 
@@ -1993,18 +2163,18 @@
    <spirit:addressSpaces>
 
      <spirit:addressSpace>
-          <spirit:name>AHBLiteTarget_Master__rom1_AS</spirit:name>
-          <spirit:description>_rom1 address space</spirit:description>
+          <spirit:name>AHBLiteTarget_Master__bootrom_AS</spirit:name>
+          <spirit:description>_bootrom address space</spirit:description>
           <spirit:range>4G</spirit:range>
           <spirit:width>32</spirit:width>
           <spirit:segments>
              <spirit:segment>
-                <spirit:name>_rom1_0x00000000_0x0fffffff</spirit:name>
+                <spirit:name>_bootrom_0x00000000_0x0fffffff</spirit:name>
                 <spirit:addressOffset>0x00000000</spirit:addressOffset>
                 <spirit:range>0x010000000</spirit:range>
              </spirit:segment>
              <spirit:segment>
-                <spirit:name>_rom1_0x10000000_0x1fffffff</spirit:name>
+                <spirit:name>_bootrom_0x10000000_0x1fffffff</spirit:name>
                 <spirit:addressOffset>0x10000000</spirit:addressOffset>
                 <spirit:range>0x010000000</spirit:range>
              </spirit:segment>
@@ -2013,18 +2183,18 @@
      </spirit:addressSpace>
 
      <spirit:addressSpace>
-          <spirit:name>AHBLiteTarget_Master__ram2_AS</spirit:name>
-          <spirit:description>_ram2 address space</spirit:description>
+          <spirit:name>AHBLiteTarget_Master__imem_AS</spirit:name>
+          <spirit:description>_imem address space</spirit:description>
           <spirit:range>4G</spirit:range>
           <spirit:width>32</spirit:width>
           <spirit:segments>
              <spirit:segment>
-                <spirit:name>_ram2_0x00000000_0x0fffffff</spirit:name>
+                <spirit:name>_imem_0x00000000_0x0fffffff</spirit:name>
                 <spirit:addressOffset>0x00000000</spirit:addressOffset>
                 <spirit:range>0x010000000</spirit:range>
              </spirit:segment>
              <spirit:segment>
-                <spirit:name>_ram2_0x20000000_0x2fffffff</spirit:name>
+                <spirit:name>_imem_0x20000000_0x2fffffff</spirit:name>
                 <spirit:addressOffset>0x20000000</spirit:addressOffset>
                 <spirit:range>0x010000000</spirit:range>
              </spirit:segment>
@@ -2033,13 +2203,13 @@
      </spirit:addressSpace>
 
      <spirit:addressSpace>
-          <spirit:name>AHBLiteTarget_Master__ram3_AS</spirit:name>
-          <spirit:description>_ram3 address space</spirit:description>
+          <spirit:name>AHBLiteTarget_Master__dmem_AS</spirit:name>
+          <spirit:description>_dmem address space</spirit:description>
           <spirit:range>4G</spirit:range>
           <spirit:width>32</spirit:width>
           <spirit:segments>
              <spirit:segment>
-                <spirit:name>_ram3_0x30000000_0x3fffffff</spirit:name>
+                <spirit:name>_dmem_0x30000000_0x3fffffff</spirit:name>
                 <spirit:addressOffset>0x30000000</spirit:addressOffset>
                 <spirit:range>0x010000000</spirit:range>
              </spirit:segment>
@@ -2048,33 +2218,28 @@
      </spirit:addressSpace>
 
      <spirit:addressSpace>
-          <spirit:name>AHBLiteTarget_Master__sys_AS</spirit:name>
-          <spirit:description>_sys address space</spirit:description>
+          <spirit:name>AHBLiteTarget_Master__sysio_AS</spirit:name>
+          <spirit:description>_sysio address space</spirit:description>
           <spirit:range>4G</spirit:range>
           <spirit:width>32</spirit:width>
           <spirit:segments>
              <spirit:segment>
-                <spirit:name>_sys_0x40000000_0x5fffffff</spirit:name>
+                <spirit:name>_sysio_0x40000000_0x5fffffff</spirit:name>
                 <spirit:addressOffset>0x40000000</spirit:addressOffset>
                 <spirit:range>0x020000000</spirit:range>
              </spirit:segment>
-             <spirit:segment>
-                <spirit:name>_sys_0xf0000000_0xf003ffff</spirit:name>
-                <spirit:addressOffset>0xf0000000</spirit:addressOffset>
-                <spirit:range>0x000040000</spirit:range>
-             </spirit:segment>
           </spirit:segments>
           <spirit:addressUnitBits>8</spirit:addressUnitBits>
      </spirit:addressSpace>
 
      <spirit:addressSpace>
-          <spirit:name>AHBLiteTarget_Master__ram8_AS</spirit:name>
-          <spirit:description>_ram8 address space</spirit:description>
+          <spirit:name>AHBLiteTarget_Master__expram_l_AS</spirit:name>
+          <spirit:description>_expram_l address space</spirit:description>
           <spirit:range>4G</spirit:range>
           <spirit:width>32</spirit:width>
           <spirit:segments>
              <spirit:segment>
-                <spirit:name>_ram8_0x80000000_0x8fffffff</spirit:name>
+                <spirit:name>_expram_l_0x80000000_0x8fffffff</spirit:name>
                 <spirit:addressOffset>0x80000000</spirit:addressOffset>
                 <spirit:range>0x010000000</spirit:range>
              </spirit:segment>
@@ -2083,13 +2248,13 @@
      </spirit:addressSpace>
 
      <spirit:addressSpace>
-          <spirit:name>AHBLiteTarget_Master__ram9_AS</spirit:name>
-          <spirit:description>_ram9 address space</spirit:description>
+          <spirit:name>AHBLiteTarget_Master__expram_h_AS</spirit:name>
+          <spirit:description>_expram_h address space</spirit:description>
           <spirit:range>4G</spirit:range>
           <spirit:width>32</spirit:width>
           <spirit:segments>
              <spirit:segment>
-                <spirit:name>_ram9_0x90000000_0x9fffffff</spirit:name>
+                <spirit:name>_expram_h_0x90000000_0x9fffffff</spirit:name>
                 <spirit:addressOffset>0x90000000</spirit:addressOffset>
                 <spirit:range>0x010000000</spirit:range>
              </spirit:segment>
@@ -2117,6 +2282,21 @@
           <spirit:addressUnitBits>8</spirit:addressUnitBits>
      </spirit:addressSpace>
 
+     <spirit:addressSpace>
+          <spirit:name>AHBLiteTarget_Master__systable_AS</spirit:name>
+          <spirit:description>_systable address space</spirit:description>
+          <spirit:range>4G</spirit:range>
+          <spirit:width>32</spirit:width>
+          <spirit:segments>
+             <spirit:segment>
+                <spirit:name>_systable_0xf0000000_0xf003ffff</spirit:name>
+                <spirit:addressOffset>0xf0000000</spirit:addressOffset>
+                <spirit:range>0x000040000</spirit:range>
+             </spirit:segment>
+          </spirit:segments>
+          <spirit:addressUnitBits>8</spirit:addressUnitBits>
+     </spirit:addressSpace>
+
    </spirit:addressSpaces>
 
    <spirit:memoryMaps>
@@ -2125,31 +2305,31 @@
          <spirit:name>AHBLiteTarget_Slave__adp_MM</spirit:name>
          <spirit:description>_adp memory map</spirit:description>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__rom1"
-                             spirit:segmentRef="_rom1_0x10000000_0x1fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__bootrom"
+                             spirit:segmentRef="_bootrom_0x10000000_0x1fffffff">
             <!-- Address_region 0x10000000-0x1fffffff -->
-            <spirit:name>AHBLiteTarget_Master__rom1_0x10000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__bootrom_0x10000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x10000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram2"
-                             spirit:segmentRef="_ram2_0x20000000_0x2fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__imem"
+                             spirit:segmentRef="_imem_0x20000000_0x2fffffff">
             <!-- Address_region 0x20000000-0x2fffffff -->
-            <spirit:name>AHBLiteTarget_Master__ram2_0x20000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__imem_0x20000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x20000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram3"
-                             spirit:segmentRef="_ram3_0x30000000_0x3fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__dmem"
+                             spirit:segmentRef="_dmem_0x30000000_0x3fffffff">
             <!-- Address_region 0x30000000-0x3fffffff -->
-            <spirit:name>AHBLiteTarget_Master__ram3_0x30000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__dmem_0x30000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x30000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__sys"
-                             spirit:segmentRef="_sys_0x40000000_0x5fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__sysio"
+                             spirit:segmentRef="_sysio_0x40000000_0x5fffffff">
             <!-- Address_region 0x40000000-0x5fffffff -->
-            <spirit:name>AHBLiteTarget_Master__sys_0x40000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__sysio_0x40000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x40000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
@@ -2160,17 +2340,17 @@
             <spirit:baseAddress>0x60000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram8"
-                             spirit:segmentRef="_ram8_0x80000000_0x8fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__expram_l"
+                             spirit:segmentRef="_expram_l_0x80000000_0x8fffffff">
             <!-- Address_region 0x80000000-0x8fffffff -->
-            <spirit:name>AHBLiteTarget_Master__ram8_0x80000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__expram_l_0x80000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x80000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram9"
-                             spirit:segmentRef="_ram9_0x90000000_0x9fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__expram_h"
+                             spirit:segmentRef="_expram_h_0x90000000_0x9fffffff">
             <!-- Address_region 0x90000000-0x9fffffff -->
-            <spirit:name>AHBLiteTarget_Master__ram9_0x90000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__expram_h_0x90000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x90000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
@@ -2181,31 +2361,31 @@
             <spirit:baseAddress>0xa0000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__sys"
-                             spirit:segmentRef="_sys_0xf0000000_0xf003ffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__systable"
+                             spirit:segmentRef="_systable_0xf0000000_0xf003ffff">
             <!-- Address_region 0xf0000000-0xf003ffff -->
-            <spirit:name>AHBLiteTarget_Master__sys_0xf0000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__systable_0xf0000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0xf0000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:memoryRemap spirit:state="remap_0">
-            <spirit:name>AHBLiteTarget_Slave__adp_remap_0_remap_MM</spirit:name>
-            <spirit:description>_adp remap_0 remap</spirit:description>
-            <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram2"
-                                spirit:segmentRef="_ram2_0x00000000_0x0fffffff">
-               <!-- Remapped region, active when REMAP bitcombination is 0 address_region 0x00000000-0x0fffffff -->
-               <spirit:name>AHBLiteTarget_Master__ram2_0x00000000_0_state_remap_0_SM</spirit:name>
-               <spirit:baseAddress>0x00000000</spirit:baseAddress>
-            </spirit:subspaceMap>
-         </spirit:memoryRemap>
-
          <spirit:memoryRemap spirit:state="remap_n0">
             <spirit:name>AHBLiteTarget_Slave__adp_remap_n0_remap_MM</spirit:name>
             <spirit:description>_adp remap_n0 remap</spirit:description>
-            <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__rom1"
-                                spirit:segmentRef="_rom1_0x00000000_0x0fffffff">
+            <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__bootrom"
+                                spirit:segmentRef="_bootrom_0x00000000_0x0fffffff">
                <!-- Removable region, active only when REMAP bitcombination is n0 address_region 0x00000000-0x0fffffff -->
-               <spirit:name>AHBLiteTarget_Master__rom1_0x00000000_0_state_remap_n0_SM</spirit:name>
+               <spirit:name>AHBLiteTarget_Master__bootrom_0x00000000_0_state_remap_n0_SM</spirit:name>
+               <spirit:baseAddress>0x00000000</spirit:baseAddress>
+            </spirit:subspaceMap>
+         </spirit:memoryRemap>
+
+         <spirit:memoryRemap spirit:state="remap_0">
+            <spirit:name>AHBLiteTarget_Slave__adp_remap_0_remap_MM</spirit:name>
+            <spirit:description>_adp remap_0 remap</spirit:description>
+            <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__imem"
+                                spirit:segmentRef="_imem_0x00000000_0x0fffffff">
+               <!-- Remapped region, active when REMAP bitcombination is 0 address_region 0x00000000-0x0fffffff -->
+               <spirit:name>AHBLiteTarget_Master__imem_0x00000000_0_state_remap_0_SM</spirit:name>
                <spirit:baseAddress>0x00000000</spirit:baseAddress>
             </spirit:subspaceMap>
          </spirit:memoryRemap>
@@ -2213,41 +2393,41 @@
       </spirit:memoryMap>
 
       <spirit:memoryMap>
-         <spirit:name>AHBLiteTarget_Slave__dma_MM</spirit:name>
-         <spirit:description>_dma memory map</spirit:description>
+         <spirit:name>AHBLiteTarget_Slave__dma_0_MM</spirit:name>
+         <spirit:description>_dma_0 memory map</spirit:description>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram2"
-                             spirit:segmentRef="_ram2_0x00000000_0x0fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__imem"
+                             spirit:segmentRef="_imem_0x00000000_0x0fffffff">
             <!-- Address_region 0x00000000-0x0fffffff -->
-            <spirit:name>AHBLiteTarget_Master__ram2_0x00000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__imem_0x00000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x00000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__rom1"
-                             spirit:segmentRef="_rom1_0x10000000_0x1fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__bootrom"
+                             spirit:segmentRef="_bootrom_0x10000000_0x1fffffff">
             <!-- Address_region 0x10000000-0x1fffffff -->
-            <spirit:name>AHBLiteTarget_Master__rom1_0x10000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__bootrom_0x10000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x10000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram2"
-                             spirit:segmentRef="_ram2_0x20000000_0x2fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__imem"
+                             spirit:segmentRef="_imem_0x20000000_0x2fffffff">
             <!-- Address_region 0x20000000-0x2fffffff -->
-            <spirit:name>AHBLiteTarget_Master__ram2_0x20000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__imem_0x20000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x20000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram3"
-                             spirit:segmentRef="_ram3_0x30000000_0x3fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__dmem"
+                             spirit:segmentRef="_dmem_0x30000000_0x3fffffff">
             <!-- Address_region 0x30000000-0x3fffffff -->
-            <spirit:name>AHBLiteTarget_Master__ram3_0x30000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__dmem_0x30000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x30000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__sys"
-                             spirit:segmentRef="_sys_0x40000000_0x5fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__sysio"
+                             spirit:segmentRef="_sysio_0x40000000_0x5fffffff">
             <!-- Address_region 0x40000000-0x5fffffff -->
-            <spirit:name>AHBLiteTarget_Master__sys_0x40000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__sysio_0x40000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x40000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
@@ -2258,17 +2438,17 @@
             <spirit:baseAddress>0x60000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram8"
-                             spirit:segmentRef="_ram8_0x80000000_0x8fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__expram_l"
+                             spirit:segmentRef="_expram_l_0x80000000_0x8fffffff">
             <!-- Address_region 0x80000000-0x8fffffff -->
-            <spirit:name>AHBLiteTarget_Master__ram8_0x80000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__expram_l_0x80000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x80000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram9"
-                             spirit:segmentRef="_ram9_0x90000000_0x9fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__expram_h"
+                             spirit:segmentRef="_expram_h_0x90000000_0x9fffffff">
             <!-- Address_region 0x90000000-0x9fffffff -->
-            <spirit:name>AHBLiteTarget_Master__ram9_0x90000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__expram_h_0x90000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x90000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
@@ -2282,41 +2462,41 @@
       </spirit:memoryMap>
 
       <spirit:memoryMap>
-         <spirit:name>AHBLiteTarget_Slave__dma2_MM</spirit:name>
-         <spirit:description>_dma2 memory map</spirit:description>
+         <spirit:name>AHBLiteTarget_Slave__dma_1_MM</spirit:name>
+         <spirit:description>_dma_1 memory map</spirit:description>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram2"
-                             spirit:segmentRef="_ram2_0x00000000_0x0fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__imem"
+                             spirit:segmentRef="_imem_0x00000000_0x0fffffff">
             <!-- Address_region 0x00000000-0x0fffffff -->
-            <spirit:name>AHBLiteTarget_Master__ram2_0x00000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__imem_0x00000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x00000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__rom1"
-                             spirit:segmentRef="_rom1_0x10000000_0x1fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__bootrom"
+                             spirit:segmentRef="_bootrom_0x10000000_0x1fffffff">
             <!-- Address_region 0x10000000-0x1fffffff -->
-            <spirit:name>AHBLiteTarget_Master__rom1_0x10000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__bootrom_0x10000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x10000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram2"
-                             spirit:segmentRef="_ram2_0x20000000_0x2fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__imem"
+                             spirit:segmentRef="_imem_0x20000000_0x2fffffff">
             <!-- Address_region 0x20000000-0x2fffffff -->
-            <spirit:name>AHBLiteTarget_Master__ram2_0x20000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__imem_0x20000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x20000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram3"
-                             spirit:segmentRef="_ram3_0x30000000_0x3fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__dmem"
+                             spirit:segmentRef="_dmem_0x30000000_0x3fffffff">
             <!-- Address_region 0x30000000-0x3fffffff -->
-            <spirit:name>AHBLiteTarget_Master__ram3_0x30000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__dmem_0x30000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x30000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__sys"
-                             spirit:segmentRef="_sys_0x40000000_0x5fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__sysio"
+                             spirit:segmentRef="_sysio_0x40000000_0x5fffffff">
             <!-- Address_region 0x40000000-0x5fffffff -->
-            <spirit:name>AHBLiteTarget_Master__sys_0x40000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__sysio_0x40000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x40000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
@@ -2327,17 +2507,17 @@
             <spirit:baseAddress>0x60000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram8"
-                             spirit:segmentRef="_ram8_0x80000000_0x8fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__expram_l"
+                             spirit:segmentRef="_expram_l_0x80000000_0x8fffffff">
             <!-- Address_region 0x80000000-0x8fffffff -->
-            <spirit:name>AHBLiteTarget_Master__ram8_0x80000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__expram_l_0x80000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x80000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram9"
-                             spirit:segmentRef="_ram9_0x90000000_0x9fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__expram_h"
+                             spirit:segmentRef="_expram_h_0x90000000_0x9fffffff">
             <!-- Address_region 0x90000000-0x9fffffff -->
-            <spirit:name>AHBLiteTarget_Master__ram9_0x90000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__expram_h_0x90000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x90000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
@@ -2354,31 +2534,31 @@
          <spirit:name>AHBLiteTarget_Slave__cpu_MM</spirit:name>
          <spirit:description>_cpu memory map</spirit:description>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__rom1"
-                             spirit:segmentRef="_rom1_0x10000000_0x1fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__bootrom"
+                             spirit:segmentRef="_bootrom_0x10000000_0x1fffffff">
             <!-- Address_region 0x10000000-0x1fffffff -->
-            <spirit:name>AHBLiteTarget_Master__rom1_0x10000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__bootrom_0x10000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x10000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram2"
-                             spirit:segmentRef="_ram2_0x20000000_0x2fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__imem"
+                             spirit:segmentRef="_imem_0x20000000_0x2fffffff">
             <!-- Address_region 0x20000000-0x2fffffff -->
-            <spirit:name>AHBLiteTarget_Master__ram2_0x20000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__imem_0x20000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x20000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram3"
-                             spirit:segmentRef="_ram3_0x30000000_0x3fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__dmem"
+                             spirit:segmentRef="_dmem_0x30000000_0x3fffffff">
             <!-- Address_region 0x30000000-0x3fffffff -->
-            <spirit:name>AHBLiteTarget_Master__ram3_0x30000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__dmem_0x30000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x30000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__sys"
-                             spirit:segmentRef="_sys_0x40000000_0x5fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__sysio"
+                             spirit:segmentRef="_sysio_0x40000000_0x5fffffff">
             <!-- Address_region 0x40000000-0x5fffffff -->
-            <spirit:name>AHBLiteTarget_Master__sys_0x40000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__sysio_0x40000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x40000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
@@ -2389,17 +2569,17 @@
             <spirit:baseAddress>0x60000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram8"
-                             spirit:segmentRef="_ram8_0x80000000_0x8fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__expram_l"
+                             spirit:segmentRef="_expram_l_0x80000000_0x8fffffff">
             <!-- Address_region 0x80000000-0x8fffffff -->
-            <spirit:name>AHBLiteTarget_Master__ram8_0x80000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__expram_l_0x80000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x80000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram9"
-                             spirit:segmentRef="_ram9_0x90000000_0x9fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__expram_h"
+                             spirit:segmentRef="_expram_h_0x90000000_0x9fffffff">
             <!-- Address_region 0x90000000-0x9fffffff -->
-            <spirit:name>AHBLiteTarget_Master__ram9_0x90000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__expram_h_0x90000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x90000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
@@ -2410,31 +2590,31 @@
             <spirit:baseAddress>0xa0000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__sys"
-                             spirit:segmentRef="_sys_0xf0000000_0xf003ffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__systable"
+                             spirit:segmentRef="_systable_0xf0000000_0xf003ffff">
             <!-- Address_region 0xf0000000-0xf003ffff -->
-            <spirit:name>AHBLiteTarget_Master__sys_0xf0000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__systable_0xf0000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0xf0000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:memoryRemap spirit:state="remap_0">
-            <spirit:name>AHBLiteTarget_Slave__cpu_remap_0_remap_MM</spirit:name>
-            <spirit:description>_cpu remap_0 remap</spirit:description>
-            <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram2"
-                                spirit:segmentRef="_ram2_0x00000000_0x0fffffff">
-               <!-- Remapped region, active when REMAP bitcombination is 0 address_region 0x00000000-0x0fffffff -->
-               <spirit:name>AHBLiteTarget_Master__ram2_0x00000000_0_state_remap_0_SM</spirit:name>
-               <spirit:baseAddress>0x00000000</spirit:baseAddress>
-            </spirit:subspaceMap>
-         </spirit:memoryRemap>
-
          <spirit:memoryRemap spirit:state="remap_n0">
             <spirit:name>AHBLiteTarget_Slave__cpu_remap_n0_remap_MM</spirit:name>
             <spirit:description>_cpu remap_n0 remap</spirit:description>
-            <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__rom1"
-                                spirit:segmentRef="_rom1_0x00000000_0x0fffffff">
+            <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__bootrom"
+                                spirit:segmentRef="_bootrom_0x00000000_0x0fffffff">
                <!-- Removable region, active only when REMAP bitcombination is n0 address_region 0x00000000-0x0fffffff -->
-               <spirit:name>AHBLiteTarget_Master__rom1_0x00000000_0_state_remap_n0_SM</spirit:name>
+               <spirit:name>AHBLiteTarget_Master__bootrom_0x00000000_0_state_remap_n0_SM</spirit:name>
+               <spirit:baseAddress>0x00000000</spirit:baseAddress>
+            </spirit:subspaceMap>
+         </spirit:memoryRemap>
+
+         <spirit:memoryRemap spirit:state="remap_0">
+            <spirit:name>AHBLiteTarget_Slave__cpu_remap_0_remap_MM</spirit:name>
+            <spirit:description>_cpu remap_0 remap</spirit:description>
+            <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__imem"
+                                spirit:segmentRef="_imem_0x00000000_0x0fffffff">
+               <!-- Remapped region, active when REMAP bitcombination is 0 address_region 0x00000000-0x0fffffff -->
+               <spirit:name>AHBLiteTarget_Master__imem_0x00000000_0_state_remap_0_SM</spirit:name>
                <spirit:baseAddress>0x00000000</spirit:baseAddress>
             </spirit:subspaceMap>
          </spirit:memoryRemap>
@@ -2615,13 +2795,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HSEL_dma</spirit:name>
+            <spirit:name>HSEL_dma_0</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HADDR_dma</spirit:name>
+            <spirit:name>HADDR_dma_0</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2631,7 +2811,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HTRANS_dma</spirit:name>
+            <spirit:name>HTRANS_dma_0</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2641,13 +2821,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWRITE_dma</spirit:name>
+            <spirit:name>HWRITE_dma_0</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HSIZE_dma</spirit:name>
+            <spirit:name>HSIZE_dma_0</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2657,7 +2837,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HBURST_dma</spirit:name>
+            <spirit:name>HBURST_dma_0</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2670,7 +2850,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HPROT_dma</spirit:name>
+            <spirit:name>HPROT_dma_0</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2680,7 +2860,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HMASTER_dma</spirit:name>
+            <spirit:name>HMASTER_dma_0</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2693,7 +2873,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWDATA_dma</spirit:name>
+            <spirit:name>HWDATA_dma_0</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2703,20 +2883,20 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HMASTLOCK_dma</spirit:name>
+            <spirit:name>HMASTLOCK_dma_0</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HREADY_dma</spirit:name>
+            <spirit:name>HREADY_dma_0</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
             </spirit:wire>
          </spirit:port>
 
          <spirit:port>
-            <spirit:name>HAUSER_dma</spirit:name>
+            <spirit:name>HAUSER_dma_0</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2726,7 +2906,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWUSER_dma</spirit:name>
+            <spirit:name>HWUSER_dma_0</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2736,13 +2916,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HSEL_dma2</spirit:name>
+            <spirit:name>HSEL_dma_1</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HADDR_dma2</spirit:name>
+            <spirit:name>HADDR_dma_1</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2752,7 +2932,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HTRANS_dma2</spirit:name>
+            <spirit:name>HTRANS_dma_1</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2762,13 +2942,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWRITE_dma2</spirit:name>
+            <spirit:name>HWRITE_dma_1</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HSIZE_dma2</spirit:name>
+            <spirit:name>HSIZE_dma_1</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2778,7 +2958,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HBURST_dma2</spirit:name>
+            <spirit:name>HBURST_dma_1</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2791,7 +2971,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HPROT_dma2</spirit:name>
+            <spirit:name>HPROT_dma_1</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2801,7 +2981,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HMASTER_dma2</spirit:name>
+            <spirit:name>HMASTER_dma_1</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2814,7 +2994,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWDATA_dma2</spirit:name>
+            <spirit:name>HWDATA_dma_1</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2824,20 +3004,20 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HMASTLOCK_dma2</spirit:name>
+            <spirit:name>HMASTLOCK_dma_1</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HREADY_dma2</spirit:name>
+            <spirit:name>HREADY_dma_1</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
             </spirit:wire>
          </spirit:port>
 
          <spirit:port>
-            <spirit:name>HAUSER_dma2</spirit:name>
+            <spirit:name>HAUSER_dma_1</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2847,7 +3027,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWUSER_dma2</spirit:name>
+            <spirit:name>HWUSER_dma_1</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2981,7 +3161,7 @@
          <!-- Input signals of Master interfaces -->
 
          <spirit:port>
-            <spirit:name>HRDATA_rom1</spirit:name>
+            <spirit:name>HRDATA_bootrom</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2991,13 +3171,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HREADYOUT_rom1</spirit:name>
+            <spirit:name>HREADYOUT_bootrom</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRESP_rom1</spirit:name>
+            <spirit:name>HRESP_bootrom</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -3007,7 +3187,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRUSER_rom1</spirit:name>
+            <spirit:name>HRUSER_bootrom</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -3017,7 +3197,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRDATA_ram2</spirit:name>
+            <spirit:name>HRDATA_imem</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -3027,13 +3207,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HREADYOUT_ram2</spirit:name>
+            <spirit:name>HREADYOUT_imem</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRESP_ram2</spirit:name>
+            <spirit:name>HRESP_imem</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -3043,7 +3223,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRUSER_ram2</spirit:name>
+            <spirit:name>HRUSER_imem</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -3053,7 +3233,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRDATA_ram3</spirit:name>
+            <spirit:name>HRDATA_dmem</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -3063,13 +3243,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HREADYOUT_ram3</spirit:name>
+            <spirit:name>HREADYOUT_dmem</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRESP_ram3</spirit:name>
+            <spirit:name>HRESP_dmem</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -3079,7 +3259,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRUSER_ram3</spirit:name>
+            <spirit:name>HRUSER_dmem</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -3089,7 +3269,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRDATA_sys</spirit:name>
+            <spirit:name>HRDATA_sysio</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -3099,13 +3279,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HREADYOUT_sys</spirit:name>
+            <spirit:name>HREADYOUT_sysio</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRESP_sys</spirit:name>
+            <spirit:name>HRESP_sysio</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -3115,7 +3295,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRUSER_sys</spirit:name>
+            <spirit:name>HRUSER_sysio</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -3125,7 +3305,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRDATA_ram8</spirit:name>
+            <spirit:name>HRDATA_expram_l</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -3135,13 +3315,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HREADYOUT_ram8</spirit:name>
+            <spirit:name>HREADYOUT_expram_l</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRESP_ram8</spirit:name>
+            <spirit:name>HRESP_expram_l</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -3151,7 +3331,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRUSER_ram8</spirit:name>
+            <spirit:name>HRUSER_expram_l</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -3161,7 +3341,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRDATA_ram9</spirit:name>
+            <spirit:name>HRDATA_expram_h</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -3171,13 +3351,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HREADYOUT_ram9</spirit:name>
+            <spirit:name>HREADYOUT_expram_h</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRESP_ram9</spirit:name>
+            <spirit:name>HRESP_expram_h</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -3187,7 +3367,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRUSER_ram9</spirit:name>
+            <spirit:name>HRUSER_expram_h</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -3232,6 +3412,42 @@
                </spirit:vector>
             </spirit:wire>
          </spirit:port>
+         <spirit:port>
+            <spirit:name>HRDATA_systable</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_systable</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRESP_systable</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>HRUSER_systable</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>
 
          <!-- Scan test dummy signals; not connected until scan insertion -->
 
@@ -3251,13 +3467,13 @@
          <!-- Output signals of Master interfaces -->
 
          <spirit:port>
-            <spirit:name>HSEL_rom1</spirit:name>
+            <spirit:name>HSEL_bootrom</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HADDR_rom1</spirit:name>
+            <spirit:name>HADDR_bootrom</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3267,7 +3483,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HTRANS_rom1</spirit:name>
+            <spirit:name>HTRANS_bootrom</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3277,13 +3493,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWRITE_rom1</spirit:name>
+            <spirit:name>HWRITE_bootrom</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HSIZE_rom1</spirit:name>
+            <spirit:name>HSIZE_bootrom</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3293,7 +3509,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HBURST_rom1</spirit:name>
+            <spirit:name>HBURST_bootrom</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3303,7 +3519,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HPROT_rom1</spirit:name>
+            <spirit:name>HPROT_bootrom</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3313,7 +3529,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HMASTER_rom1</spirit:name>
+            <spirit:name>HMASTER_bootrom</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3323,7 +3539,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWDATA_rom1</spirit:name>
+            <spirit:name>HWDATA_bootrom</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3333,19 +3549,19 @@
             </spirit:wire>
           </spirit:port>
          <spirit:port>
-            <spirit:name>HMASTLOCK_rom1</spirit:name>
+            <spirit:name>HMASTLOCK_bootrom</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HREADYMUX_rom1</spirit:name>
+            <spirit:name>HREADYMUX_bootrom</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HAUSER_rom1</spirit:name>
+            <spirit:name>HAUSER_bootrom</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3355,7 +3571,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWUSER_rom1</spirit:name>
+            <spirit:name>HWUSER_bootrom</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3365,13 +3581,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HSEL_ram2</spirit:name>
+            <spirit:name>HSEL_imem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HADDR_ram2</spirit:name>
+            <spirit:name>HADDR_imem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3381,7 +3597,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HTRANS_ram2</spirit:name>
+            <spirit:name>HTRANS_imem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3391,13 +3607,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWRITE_ram2</spirit:name>
+            <spirit:name>HWRITE_imem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HSIZE_ram2</spirit:name>
+            <spirit:name>HSIZE_imem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3407,7 +3623,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HBURST_ram2</spirit:name>
+            <spirit:name>HBURST_imem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3417,7 +3633,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HPROT_ram2</spirit:name>
+            <spirit:name>HPROT_imem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3427,7 +3643,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HMASTER_ram2</spirit:name>
+            <spirit:name>HMASTER_imem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3437,7 +3653,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWDATA_ram2</spirit:name>
+            <spirit:name>HWDATA_imem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3447,19 +3663,19 @@
             </spirit:wire>
           </spirit:port>
          <spirit:port>
-            <spirit:name>HMASTLOCK_ram2</spirit:name>
+            <spirit:name>HMASTLOCK_imem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HREADYMUX_ram2</spirit:name>
+            <spirit:name>HREADYMUX_imem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HAUSER_ram2</spirit:name>
+            <spirit:name>HAUSER_imem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3469,7 +3685,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWUSER_ram2</spirit:name>
+            <spirit:name>HWUSER_imem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3479,13 +3695,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HSEL_ram3</spirit:name>
+            <spirit:name>HSEL_dmem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HADDR_ram3</spirit:name>
+            <spirit:name>HADDR_dmem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3495,7 +3711,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HTRANS_ram3</spirit:name>
+            <spirit:name>HTRANS_dmem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3505,13 +3721,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWRITE_ram3</spirit:name>
+            <spirit:name>HWRITE_dmem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HSIZE_ram3</spirit:name>
+            <spirit:name>HSIZE_dmem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3521,7 +3737,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HBURST_ram3</spirit:name>
+            <spirit:name>HBURST_dmem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3531,7 +3747,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HPROT_ram3</spirit:name>
+            <spirit:name>HPROT_dmem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3541,7 +3757,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HMASTER_ram3</spirit:name>
+            <spirit:name>HMASTER_dmem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3551,7 +3767,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWDATA_ram3</spirit:name>
+            <spirit:name>HWDATA_dmem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3561,19 +3777,19 @@
             </spirit:wire>
           </spirit:port>
          <spirit:port>
-            <spirit:name>HMASTLOCK_ram3</spirit:name>
+            <spirit:name>HMASTLOCK_dmem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HREADYMUX_ram3</spirit:name>
+            <spirit:name>HREADYMUX_dmem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HAUSER_ram3</spirit:name>
+            <spirit:name>HAUSER_dmem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3583,7 +3799,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWUSER_ram3</spirit:name>
+            <spirit:name>HWUSER_dmem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3593,13 +3809,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HSEL_sys</spirit:name>
+            <spirit:name>HSEL_sysio</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HADDR_sys</spirit:name>
+            <spirit:name>HADDR_sysio</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3609,7 +3825,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HTRANS_sys</spirit:name>
+            <spirit:name>HTRANS_sysio</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3619,13 +3835,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWRITE_sys</spirit:name>
+            <spirit:name>HWRITE_sysio</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HSIZE_sys</spirit:name>
+            <spirit:name>HSIZE_sysio</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3635,7 +3851,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HBURST_sys</spirit:name>
+            <spirit:name>HBURST_sysio</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3645,7 +3861,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HPROT_sys</spirit:name>
+            <spirit:name>HPROT_sysio</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3655,7 +3871,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HMASTER_sys</spirit:name>
+            <spirit:name>HMASTER_sysio</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3665,7 +3881,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWDATA_sys</spirit:name>
+            <spirit:name>HWDATA_sysio</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3675,19 +3891,19 @@
             </spirit:wire>
           </spirit:port>
          <spirit:port>
-            <spirit:name>HMASTLOCK_sys</spirit:name>
+            <spirit:name>HMASTLOCK_sysio</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HREADYMUX_sys</spirit:name>
+            <spirit:name>HREADYMUX_sysio</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HAUSER_sys</spirit:name>
+            <spirit:name>HAUSER_sysio</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3697,7 +3913,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWUSER_sys</spirit:name>
+            <spirit:name>HWUSER_sysio</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3707,13 +3923,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HSEL_ram8</spirit:name>
+            <spirit:name>HSEL_expram_l</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HADDR_ram8</spirit:name>
+            <spirit:name>HADDR_expram_l</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3723,7 +3939,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HTRANS_ram8</spirit:name>
+            <spirit:name>HTRANS_expram_l</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3733,13 +3949,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWRITE_ram8</spirit:name>
+            <spirit:name>HWRITE_expram_l</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HSIZE_ram8</spirit:name>
+            <spirit:name>HSIZE_expram_l</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3749,7 +3965,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HBURST_ram8</spirit:name>
+            <spirit:name>HBURST_expram_l</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3759,7 +3975,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HPROT_ram8</spirit:name>
+            <spirit:name>HPROT_expram_l</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3769,7 +3985,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HMASTER_ram8</spirit:name>
+            <spirit:name>HMASTER_expram_l</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3779,7 +3995,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWDATA_ram8</spirit:name>
+            <spirit:name>HWDATA_expram_l</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3789,19 +4005,19 @@
             </spirit:wire>
           </spirit:port>
          <spirit:port>
-            <spirit:name>HMASTLOCK_ram8</spirit:name>
+            <spirit:name>HMASTLOCK_expram_l</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HREADYMUX_ram8</spirit:name>
+            <spirit:name>HREADYMUX_expram_l</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HAUSER_ram8</spirit:name>
+            <spirit:name>HAUSER_expram_l</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3811,7 +4027,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWUSER_ram8</spirit:name>
+            <spirit:name>HWUSER_expram_l</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3821,13 +4037,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HSEL_ram9</spirit:name>
+            <spirit:name>HSEL_expram_h</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HADDR_ram9</spirit:name>
+            <spirit:name>HADDR_expram_h</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3837,7 +4053,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HTRANS_ram9</spirit:name>
+            <spirit:name>HTRANS_expram_h</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3847,13 +4063,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWRITE_ram9</spirit:name>
+            <spirit:name>HWRITE_expram_h</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HSIZE_ram9</spirit:name>
+            <spirit:name>HSIZE_expram_h</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3863,7 +4079,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HBURST_ram9</spirit:name>
+            <spirit:name>HBURST_expram_h</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3873,7 +4089,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HPROT_ram9</spirit:name>
+            <spirit:name>HPROT_expram_h</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3883,7 +4099,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HMASTER_ram9</spirit:name>
+            <spirit:name>HMASTER_expram_h</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3893,7 +4109,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWDATA_ram9</spirit:name>
+            <spirit:name>HWDATA_expram_h</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3903,19 +4119,19 @@
             </spirit:wire>
           </spirit:port>
          <spirit:port>
-            <spirit:name>HMASTLOCK_ram9</spirit:name>
+            <spirit:name>HMASTLOCK_expram_h</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HREADYMUX_ram9</spirit:name>
+            <spirit:name>HREADYMUX_expram_h</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HAUSER_ram9</spirit:name>
+            <spirit:name>HAUSER_expram_h</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3925,7 +4141,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWUSER_ram9</spirit:name>
+            <spirit:name>HWUSER_expram_h</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -4048,6 +4264,120 @@
                </spirit:vector>
             </spirit:wire>
          </spirit:port>
+         <spirit:port>
+            <spirit:name>HSEL_systable</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HADDR_systable</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_systable</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_systable</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSIZE_systable</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_systable</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_systable</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_systable</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_systable</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_systable</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HREADYMUX_systable</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HAUSER_systable</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>HWUSER_systable</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>
 
          <!-- Output signals of Slave interfaces -->
 
@@ -4088,7 +4418,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRDATA_dma</spirit:name>
+            <spirit:name>HRDATA_dma_0</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -4098,13 +4428,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HREADYOUT_dma</spirit:name>
+            <spirit:name>HREADYOUT_dma_0</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRESP_dma</spirit:name>
+            <spirit:name>HRESP_dma_0</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -4114,7 +4444,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRUSER_dma</spirit:name>
+            <spirit:name>HRUSER_dma_0</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -4124,7 +4454,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRDATA_dma2</spirit:name>
+            <spirit:name>HRDATA_dma_1</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -4134,13 +4464,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HREADYOUT_dma2</spirit:name>
+            <spirit:name>HREADYOUT_dma_1</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRESP_dma2</spirit:name>
+            <spirit:name>HRESP_dma_1</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -4150,7 +4480,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRUSER_dma2</spirit:name>
+            <spirit:name>HRUSER_dma_1</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -4230,11 +4560,11 @@
             <spirit:fileType>verilogSource-2001</spirit:fileType>
          </spirit:file>
          <spirit:file>
-            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_matrix_decode_dma.v</spirit:name>
+            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_matrix_decode_dma_0.v</spirit:name>
             <spirit:fileType>verilogSource-2001</spirit:fileType>
          </spirit:file>
          <spirit:file>
-            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_matrix_decode_dma2.v</spirit:name>
+            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_matrix_decode_dma_1.v</spirit:name>
             <spirit:fileType>verilogSource-2001</spirit:fileType>
          </spirit:file>
          <spirit:file>
@@ -4242,11 +4572,67 @@
             <spirit:fileType>verilogSource-2001</spirit:fileType>
          </spirit:file>
          <spirit:file>
-            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_arbiter.v</spirit:name>
+            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_arbiter_bootrom.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_arbiter_imem.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_arbiter_dmem.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_arbiter_sysio.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_arbiter_expram_l.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_arbiter_expram_h.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_arbiter_exp.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_arbiter_systable.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_target_output_bootrom.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_target_output_imem.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_target_output_dmem.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_target_output_sysio.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_target_output_expram_l.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_target_output_expram_h.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_target_output_exp.v</spirit:name>
             <spirit:fileType>verilogSource-2001</spirit:fileType>
          </spirit:file>
          <spirit:file>
-            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_target_output.v</spirit:name>
+            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_target_output_systable.v</spirit:name>
             <spirit:fileType>verilogSource-2001</spirit:fileType>
          </spirit:file>
       </spirit:fileSet>
diff --git a/system/src/nanosoc_ahb_busmatrix/ipxact/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_busmatrix_lite.xml b/system/src/nanosoc_busmatrix/ipxact/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_busmatrix_lite.xml
similarity index 77%
rename from system/src/nanosoc_ahb_busmatrix/ipxact/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_busmatrix_lite.xml
rename to system/src/nanosoc_busmatrix/ipxact/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_busmatrix_lite.xml
index 0ef75c3fc5856c3d78ebb7112e99a823ec341bb5..0a4c363025c9604aaec4f99e486dfd84cde1a49f 100644
--- a/system/src/nanosoc_ahb_busmatrix/ipxact/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_busmatrix_lite.xml
+++ b/system/src/nanosoc_busmatrix/ipxact/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_busmatrix_lite.xml
@@ -44,13 +44,14 @@
          <spirit:abstractionType spirit:library="AMBA3" spirit:name="AHBLiteInitiator_rtl" spirit:vendor="amba.com" spirit:version="r2p0_0"/>
          <spirit:slave>
             <spirit:memoryMapRef spirit:memoryMapRef="AHBLiteInitiator_Slave__adp_MM"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__rom1" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__ram2" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__ram3" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__sys" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__ram8" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__ram9" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__bootrom" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__imem" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__dmem" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__sysio" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__expram_l" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__expram_h" spirit:opaque="true"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__exp" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__systable" spirit:opaque="true"/>
          </spirit:slave>
 
          <spirit:portMaps>
@@ -190,18 +191,18 @@
       </spirit:busInterface>
 
       <spirit:busInterface>
-         <spirit:name>AHBLiteInitiator_Slave__dma</spirit:name>
-         <spirit:description>Slave port _dma</spirit:description>
+         <spirit:name>AHBLiteInitiator_Slave__dma_0</spirit:name>
+         <spirit:description>Slave port _dma_0</spirit:description>
          <spirit:busType spirit:library="AMBA3" spirit:name="AHBLiteInitiator" spirit:vendor="amba.com" spirit:version="r2p0_0"/>
          <spirit:abstractionType spirit:library="AMBA3" spirit:name="AHBLiteInitiator_rtl" spirit:vendor="amba.com" spirit:version="r2p0_0"/>
          <spirit:slave>
-            <spirit:memoryMapRef spirit:memoryMapRef="AHBLiteInitiator_Slave__dma_MM"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__rom1" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__ram2" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__ram3" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__sys" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__ram8" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__ram9" spirit:opaque="true"/>
+            <spirit:memoryMapRef spirit:memoryMapRef="AHBLiteInitiator_Slave__dma_0_MM"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__bootrom" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__imem" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__dmem" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__sysio" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__expram_l" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__expram_h" spirit:opaque="true"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__exp" spirit:opaque="true"/>
          </spirit:slave>
 
@@ -229,7 +230,7 @@
                  <spirit:name>HADDR</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HADDR_dma</spirit:name>
+                 <spirit:name>HADDR_dma_0</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -237,7 +238,7 @@
                  <spirit:name>HTRANS</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HTRANS_dma</spirit:name>
+                 <spirit:name>HTRANS_dma_0</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -245,7 +246,7 @@
                  <spirit:name>HWRITE</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWRITE_dma</spirit:name>
+                 <spirit:name>HWRITE_dma_0</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -253,7 +254,7 @@
                  <spirit:name>HSIZE</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HSIZE_dma</spirit:name>
+                 <spirit:name>HSIZE_dma_0</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -261,7 +262,7 @@
                  <spirit:name>HBURST</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HBURST_dma</spirit:name>
+                 <spirit:name>HBURST_dma_0</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -269,7 +270,7 @@
                  <spirit:name>HPROT</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HPROT_dma</spirit:name>
+                 <spirit:name>HPROT_dma_0</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -277,7 +278,7 @@
                  <spirit:name>HWDATA</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWDATA_dma</spirit:name>
+                 <spirit:name>HWDATA_dma_0</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -285,7 +286,7 @@
                  <spirit:name>HMASTLOCK</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HMASTLOCK_dma</spirit:name>
+                 <spirit:name>HMASTLOCK_dma_0</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -293,7 +294,7 @@
                  <spirit:name>HAUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HAUSER_dma</spirit:name>
+                 <spirit:name>HAUSER_dma_0</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -301,7 +302,7 @@
                  <spirit:name>HWUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWUSER_dma</spirit:name>
+                 <spirit:name>HWUSER_dma_0</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
 
@@ -311,7 +312,7 @@
                  <spirit:name>HRDATA</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRDATA_dma</spirit:name>
+                 <spirit:name>HRDATA_dma_0</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -319,7 +320,7 @@
                  <spirit:name>HREADY</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HREADY_dma</spirit:name>
+                 <spirit:name>HREADY_dma_0</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -327,7 +328,7 @@
                  <spirit:name>HRESP</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRESP_dma</spirit:name>
+                 <spirit:name>HRESP_dma_0</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -335,25 +336,25 @@
                  <spirit:name>HRUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRUSER_dma</spirit:name>
+                 <spirit:name>HRUSER_dma_0</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
          </spirit:portMaps>
       </spirit:busInterface>
 
       <spirit:busInterface>
-         <spirit:name>AHBLiteInitiator_Slave__dma2</spirit:name>
-         <spirit:description>Slave port _dma2</spirit:description>
+         <spirit:name>AHBLiteInitiator_Slave__dma_1</spirit:name>
+         <spirit:description>Slave port _dma_1</spirit:description>
          <spirit:busType spirit:library="AMBA3" spirit:name="AHBLiteInitiator" spirit:vendor="amba.com" spirit:version="r2p0_0"/>
          <spirit:abstractionType spirit:library="AMBA3" spirit:name="AHBLiteInitiator_rtl" spirit:vendor="amba.com" spirit:version="r2p0_0"/>
          <spirit:slave>
-            <spirit:memoryMapRef spirit:memoryMapRef="AHBLiteInitiator_Slave__dma2_MM"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__rom1" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__ram2" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__ram3" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__sys" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__ram8" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__ram9" spirit:opaque="true"/>
+            <spirit:memoryMapRef spirit:memoryMapRef="AHBLiteInitiator_Slave__dma_1_MM"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__bootrom" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__imem" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__dmem" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__sysio" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__expram_l" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__expram_h" spirit:opaque="true"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__exp" spirit:opaque="true"/>
          </spirit:slave>
 
@@ -381,7 +382,7 @@
                  <spirit:name>HADDR</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HADDR_dma2</spirit:name>
+                 <spirit:name>HADDR_dma_1</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -389,7 +390,7 @@
                  <spirit:name>HTRANS</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HTRANS_dma2</spirit:name>
+                 <spirit:name>HTRANS_dma_1</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -397,7 +398,7 @@
                  <spirit:name>HWRITE</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWRITE_dma2</spirit:name>
+                 <spirit:name>HWRITE_dma_1</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -405,7 +406,7 @@
                  <spirit:name>HSIZE</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HSIZE_dma2</spirit:name>
+                 <spirit:name>HSIZE_dma_1</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -413,7 +414,7 @@
                  <spirit:name>HBURST</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HBURST_dma2</spirit:name>
+                 <spirit:name>HBURST_dma_1</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -421,7 +422,7 @@
                  <spirit:name>HPROT</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HPROT_dma2</spirit:name>
+                 <spirit:name>HPROT_dma_1</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -429,7 +430,7 @@
                  <spirit:name>HWDATA</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWDATA_dma2</spirit:name>
+                 <spirit:name>HWDATA_dma_1</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -437,7 +438,7 @@
                  <spirit:name>HMASTLOCK</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HMASTLOCK_dma2</spirit:name>
+                 <spirit:name>HMASTLOCK_dma_1</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -445,7 +446,7 @@
                  <spirit:name>HAUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HAUSER_dma2</spirit:name>
+                 <spirit:name>HAUSER_dma_1</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -453,7 +454,7 @@
                  <spirit:name>HWUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWUSER_dma2</spirit:name>
+                 <spirit:name>HWUSER_dma_1</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
 
@@ -463,7 +464,7 @@
                  <spirit:name>HRDATA</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRDATA_dma2</spirit:name>
+                 <spirit:name>HRDATA_dma_1</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -471,7 +472,7 @@
                  <spirit:name>HREADY</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HREADY_dma2</spirit:name>
+                 <spirit:name>HREADY_dma_1</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -479,7 +480,7 @@
                  <spirit:name>HRESP</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRESP_dma2</spirit:name>
+                 <spirit:name>HRESP_dma_1</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -487,7 +488,7 @@
                  <spirit:name>HRUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRUSER_dma2</spirit:name>
+                 <spirit:name>HRUSER_dma_1</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
          </spirit:portMaps>
@@ -500,13 +501,14 @@
          <spirit:abstractionType spirit:library="AMBA3" spirit:name="AHBLiteInitiator_rtl" spirit:vendor="amba.com" spirit:version="r2p0_0"/>
          <spirit:slave>
             <spirit:memoryMapRef spirit:memoryMapRef="AHBLiteInitiator_Slave__cpu_MM"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__rom1" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__ram2" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__ram3" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__sys" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__ram8" spirit:opaque="true"/>
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__ram9" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__bootrom" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__imem" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__dmem" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__sysio" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__expram_l" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__expram_h" spirit:opaque="true"/>
             <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__exp" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__systable" spirit:opaque="true"/>
          </spirit:slave>
 
          <spirit:portMaps>
@@ -648,12 +650,12 @@
         <!--Master interfaces -->
 
       <spirit:busInterface>
-         <spirit:name>AHBLiteTarget_Master__rom1</spirit:name>
-         <spirit:description>Master port _rom1</spirit:description>
+         <spirit:name>AHBLiteTarget_Master__bootrom</spirit:name>
+         <spirit:description>Master port _bootrom</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__rom1_AS"/>
+            <spirit:addressSpaceRef spirit:addressSpaceRef="AHBLiteTarget_Master__bootrom_AS"/>
          </spirit:master>
 
          <spirit:portMaps>
@@ -680,7 +682,7 @@
                  <spirit:name>HSELx</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HSEL_rom1</spirit:name>
+                 <spirit:name>HSEL_bootrom</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -688,7 +690,7 @@
                  <spirit:name>HADDR</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HADDR_rom1</spirit:name>
+                 <spirit:name>HADDR_bootrom</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -696,7 +698,7 @@
                  <spirit:name>HTRANS</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HTRANS_rom1</spirit:name>
+                 <spirit:name>HTRANS_bootrom</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -704,7 +706,7 @@
                  <spirit:name>HWRITE</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWRITE_rom1</spirit:name>
+                 <spirit:name>HWRITE_bootrom</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -712,7 +714,7 @@
                  <spirit:name>HSIZE</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HSIZE_rom1</spirit:name>
+                 <spirit:name>HSIZE_bootrom</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -720,7 +722,7 @@
                  <spirit:name>HBURST</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HBURST_rom1</spirit:name>
+                 <spirit:name>HBURST_bootrom</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -728,7 +730,7 @@
                  <spirit:name>HPROT</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HPROT_rom1</spirit:name>
+                 <spirit:name>HPROT_bootrom</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -736,7 +738,7 @@
                  <spirit:name>HWDATA</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWDATA_rom1</spirit:name>
+                 <spirit:name>HWDATA_bootrom</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -744,7 +746,7 @@
                  <spirit:name>HMASTLOCK</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HMASTLOCK_rom1</spirit:name>
+                 <spirit:name>HMASTLOCK_bootrom</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -752,7 +754,7 @@
                  <spirit:name>HREADY</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HREADYMUX_rom1</spirit:name>
+                 <spirit:name>HREADYMUX_bootrom</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -760,7 +762,7 @@
                  <spirit:name>HAUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HAUSER_rom1</spirit:name>
+                 <spirit:name>HAUSER_bootrom</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -768,7 +770,7 @@
                  <spirit:name>HWUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWUSER_rom1</spirit:name>
+                 <spirit:name>HWUSER_bootrom</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
 
@@ -778,7 +780,7 @@
                  <spirit:name>HRDATA</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRDATA_rom1</spirit:name>
+                 <spirit:name>HRDATA_bootrom</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -786,7 +788,7 @@
                  <spirit:name>HREADYOUT</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HREADYOUT_rom1</spirit:name>
+                 <spirit:name>HREADYOUT_bootrom</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -794,7 +796,7 @@
                  <spirit:name>HRESP</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRESP_rom1</spirit:name>
+                 <spirit:name>HRESP_bootrom</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -802,19 +804,19 @@
                  <spirit:name>HRUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRUSER_rom1</spirit:name>
+                 <spirit:name>HRUSER_bootrom</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
          </spirit:portMaps>
       </spirit:busInterface>
 
       <spirit:busInterface>
-         <spirit:name>AHBLiteTarget_Master__ram2</spirit:name>
-         <spirit:description>Master port _ram2</spirit:description>
+         <spirit:name>AHBLiteTarget_Master__imem</spirit:name>
+         <spirit:description>Master port _imem</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__ram2_AS"/>
+            <spirit:addressSpaceRef spirit:addressSpaceRef="AHBLiteTarget_Master__imem_AS"/>
          </spirit:master>
 
          <spirit:portMaps>
@@ -841,7 +843,7 @@
                  <spirit:name>HSELx</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HSEL_ram2</spirit:name>
+                 <spirit:name>HSEL_imem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -849,7 +851,7 @@
                  <spirit:name>HADDR</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HADDR_ram2</spirit:name>
+                 <spirit:name>HADDR_imem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -857,7 +859,7 @@
                  <spirit:name>HTRANS</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HTRANS_ram2</spirit:name>
+                 <spirit:name>HTRANS_imem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -865,7 +867,7 @@
                  <spirit:name>HWRITE</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWRITE_ram2</spirit:name>
+                 <spirit:name>HWRITE_imem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -873,7 +875,7 @@
                  <spirit:name>HSIZE</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HSIZE_ram2</spirit:name>
+                 <spirit:name>HSIZE_imem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -881,7 +883,7 @@
                  <spirit:name>HBURST</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HBURST_ram2</spirit:name>
+                 <spirit:name>HBURST_imem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -889,7 +891,7 @@
                  <spirit:name>HPROT</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HPROT_ram2</spirit:name>
+                 <spirit:name>HPROT_imem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -897,7 +899,7 @@
                  <spirit:name>HWDATA</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWDATA_ram2</spirit:name>
+                 <spirit:name>HWDATA_imem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -905,7 +907,7 @@
                  <spirit:name>HMASTLOCK</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HMASTLOCK_ram2</spirit:name>
+                 <spirit:name>HMASTLOCK_imem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -913,7 +915,7 @@
                  <spirit:name>HREADY</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HREADYMUX_ram2</spirit:name>
+                 <spirit:name>HREADYMUX_imem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -921,7 +923,7 @@
                  <spirit:name>HAUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HAUSER_ram2</spirit:name>
+                 <spirit:name>HAUSER_imem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -929,7 +931,7 @@
                  <spirit:name>HWUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWUSER_ram2</spirit:name>
+                 <spirit:name>HWUSER_imem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
 
@@ -939,7 +941,7 @@
                  <spirit:name>HRDATA</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRDATA_ram2</spirit:name>
+                 <spirit:name>HRDATA_imem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -947,7 +949,7 @@
                  <spirit:name>HREADYOUT</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HREADYOUT_ram2</spirit:name>
+                 <spirit:name>HREADYOUT_imem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -955,7 +957,7 @@
                  <spirit:name>HRESP</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRESP_ram2</spirit:name>
+                 <spirit:name>HRESP_imem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -963,19 +965,19 @@
                  <spirit:name>HRUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRUSER_ram2</spirit:name>
+                 <spirit:name>HRUSER_imem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
          </spirit:portMaps>
       </spirit:busInterface>
 
       <spirit:busInterface>
-         <spirit:name>AHBLiteTarget_Master__ram3</spirit:name>
-         <spirit:description>Master port _ram3</spirit:description>
+         <spirit:name>AHBLiteTarget_Master__dmem</spirit:name>
+         <spirit:description>Master port _dmem</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__ram3_AS"/>
+            <spirit:addressSpaceRef spirit:addressSpaceRef="AHBLiteTarget_Master__dmem_AS"/>
          </spirit:master>
 
          <spirit:portMaps>
@@ -1002,7 +1004,7 @@
                  <spirit:name>HSELx</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HSEL_ram3</spirit:name>
+                 <spirit:name>HSEL_dmem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1010,7 +1012,7 @@
                  <spirit:name>HADDR</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HADDR_ram3</spirit:name>
+                 <spirit:name>HADDR_dmem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1018,7 +1020,7 @@
                  <spirit:name>HTRANS</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HTRANS_ram3</spirit:name>
+                 <spirit:name>HTRANS_dmem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1026,7 +1028,7 @@
                  <spirit:name>HWRITE</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWRITE_ram3</spirit:name>
+                 <spirit:name>HWRITE_dmem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1034,7 +1036,7 @@
                  <spirit:name>HSIZE</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HSIZE_ram3</spirit:name>
+                 <spirit:name>HSIZE_dmem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1042,7 +1044,7 @@
                  <spirit:name>HBURST</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HBURST_ram3</spirit:name>
+                 <spirit:name>HBURST_dmem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1050,7 +1052,7 @@
                  <spirit:name>HPROT</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HPROT_ram3</spirit:name>
+                 <spirit:name>HPROT_dmem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1058,7 +1060,7 @@
                  <spirit:name>HWDATA</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWDATA_ram3</spirit:name>
+                 <spirit:name>HWDATA_dmem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1066,7 +1068,7 @@
                  <spirit:name>HMASTLOCK</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HMASTLOCK_ram3</spirit:name>
+                 <spirit:name>HMASTLOCK_dmem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1074,7 +1076,7 @@
                  <spirit:name>HREADY</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HREADYMUX_ram3</spirit:name>
+                 <spirit:name>HREADYMUX_dmem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1082,7 +1084,7 @@
                  <spirit:name>HAUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HAUSER_ram3</spirit:name>
+                 <spirit:name>HAUSER_dmem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1090,7 +1092,7 @@
                  <spirit:name>HWUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWUSER_ram3</spirit:name>
+                 <spirit:name>HWUSER_dmem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
 
@@ -1100,7 +1102,7 @@
                  <spirit:name>HRDATA</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRDATA_ram3</spirit:name>
+                 <spirit:name>HRDATA_dmem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1108,7 +1110,7 @@
                  <spirit:name>HREADYOUT</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HREADYOUT_ram3</spirit:name>
+                 <spirit:name>HREADYOUT_dmem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1116,7 +1118,7 @@
                  <spirit:name>HRESP</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRESP_ram3</spirit:name>
+                 <spirit:name>HRESP_dmem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1124,19 +1126,19 @@
                  <spirit:name>HRUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRUSER_ram3</spirit:name>
+                 <spirit:name>HRUSER_dmem</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
          </spirit:portMaps>
       </spirit:busInterface>
 
       <spirit:busInterface>
-         <spirit:name>AHBLiteTarget_Master__sys</spirit:name>
-         <spirit:description>Master port _sys</spirit:description>
+         <spirit:name>AHBLiteTarget_Master__sysio</spirit:name>
+         <spirit:description>Master port _sysio</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__sys_AS"/>
+            <spirit:addressSpaceRef spirit:addressSpaceRef="AHBLiteTarget_Master__sysio_AS"/>
          </spirit:master>
 
          <spirit:portMaps>
@@ -1163,7 +1165,7 @@
                  <spirit:name>HSELx</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HSEL_sys</spirit:name>
+                 <spirit:name>HSEL_sysio</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1171,7 +1173,7 @@
                  <spirit:name>HADDR</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HADDR_sys</spirit:name>
+                 <spirit:name>HADDR_sysio</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1179,7 +1181,7 @@
                  <spirit:name>HTRANS</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HTRANS_sys</spirit:name>
+                 <spirit:name>HTRANS_sysio</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1187,7 +1189,7 @@
                  <spirit:name>HWRITE</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWRITE_sys</spirit:name>
+                 <spirit:name>HWRITE_sysio</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1195,7 +1197,7 @@
                  <spirit:name>HSIZE</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HSIZE_sys</spirit:name>
+                 <spirit:name>HSIZE_sysio</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1203,7 +1205,7 @@
                  <spirit:name>HBURST</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HBURST_sys</spirit:name>
+                 <spirit:name>HBURST_sysio</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1211,7 +1213,7 @@
                  <spirit:name>HPROT</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HPROT_sys</spirit:name>
+                 <spirit:name>HPROT_sysio</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1219,7 +1221,7 @@
                  <spirit:name>HWDATA</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWDATA_sys</spirit:name>
+                 <spirit:name>HWDATA_sysio</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1227,7 +1229,7 @@
                  <spirit:name>HMASTLOCK</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HMASTLOCK_sys</spirit:name>
+                 <spirit:name>HMASTLOCK_sysio</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1235,7 +1237,7 @@
                  <spirit:name>HREADY</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HREADYMUX_sys</spirit:name>
+                 <spirit:name>HREADYMUX_sysio</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1243,7 +1245,7 @@
                  <spirit:name>HAUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HAUSER_sys</spirit:name>
+                 <spirit:name>HAUSER_sysio</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1251,7 +1253,7 @@
                  <spirit:name>HWUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWUSER_sys</spirit:name>
+                 <spirit:name>HWUSER_sysio</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
 
@@ -1261,7 +1263,7 @@
                  <spirit:name>HRDATA</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRDATA_sys</spirit:name>
+                 <spirit:name>HRDATA_sysio</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1269,7 +1271,7 @@
                  <spirit:name>HREADYOUT</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HREADYOUT_sys</spirit:name>
+                 <spirit:name>HREADYOUT_sysio</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1277,7 +1279,7 @@
                  <spirit:name>HRESP</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRESP_sys</spirit:name>
+                 <spirit:name>HRESP_sysio</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1285,19 +1287,19 @@
                  <spirit:name>HRUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRUSER_sys</spirit:name>
+                 <spirit:name>HRUSER_sysio</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
          </spirit:portMaps>
       </spirit:busInterface>
 
       <spirit:busInterface>
-         <spirit:name>AHBLiteTarget_Master__ram8</spirit:name>
-         <spirit:description>Master port _ram8</spirit:description>
+         <spirit:name>AHBLiteTarget_Master__expram_l</spirit:name>
+         <spirit:description>Master port _expram_l</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__ram8_AS"/>
+            <spirit:addressSpaceRef spirit:addressSpaceRef="AHBLiteTarget_Master__expram_l_AS"/>
          </spirit:master>
 
          <spirit:portMaps>
@@ -1324,7 +1326,7 @@
                  <spirit:name>HSELx</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HSEL_ram8</spirit:name>
+                 <spirit:name>HSEL_expram_l</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1332,7 +1334,7 @@
                  <spirit:name>HADDR</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HADDR_ram8</spirit:name>
+                 <spirit:name>HADDR_expram_l</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1340,7 +1342,7 @@
                  <spirit:name>HTRANS</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HTRANS_ram8</spirit:name>
+                 <spirit:name>HTRANS_expram_l</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1348,7 +1350,7 @@
                  <spirit:name>HWRITE</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWRITE_ram8</spirit:name>
+                 <spirit:name>HWRITE_expram_l</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1356,7 +1358,7 @@
                  <spirit:name>HSIZE</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HSIZE_ram8</spirit:name>
+                 <spirit:name>HSIZE_expram_l</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1364,7 +1366,7 @@
                  <spirit:name>HBURST</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HBURST_ram8</spirit:name>
+                 <spirit:name>HBURST_expram_l</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1372,7 +1374,7 @@
                  <spirit:name>HPROT</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HPROT_ram8</spirit:name>
+                 <spirit:name>HPROT_expram_l</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1380,7 +1382,7 @@
                  <spirit:name>HWDATA</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWDATA_ram8</spirit:name>
+                 <spirit:name>HWDATA_expram_l</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1388,7 +1390,7 @@
                  <spirit:name>HMASTLOCK</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HMASTLOCK_ram8</spirit:name>
+                 <spirit:name>HMASTLOCK_expram_l</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1396,7 +1398,7 @@
                  <spirit:name>HREADY</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HREADYMUX_ram8</spirit:name>
+                 <spirit:name>HREADYMUX_expram_l</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1404,7 +1406,7 @@
                  <spirit:name>HAUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HAUSER_ram8</spirit:name>
+                 <spirit:name>HAUSER_expram_l</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1412,7 +1414,7 @@
                  <spirit:name>HWUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWUSER_ram8</spirit:name>
+                 <spirit:name>HWUSER_expram_l</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
 
@@ -1422,7 +1424,7 @@
                  <spirit:name>HRDATA</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRDATA_ram8</spirit:name>
+                 <spirit:name>HRDATA_expram_l</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1430,7 +1432,7 @@
                  <spirit:name>HREADYOUT</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HREADYOUT_ram8</spirit:name>
+                 <spirit:name>HREADYOUT_expram_l</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1438,7 +1440,7 @@
                  <spirit:name>HRESP</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRESP_ram8</spirit:name>
+                 <spirit:name>HRESP_expram_l</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1446,19 +1448,19 @@
                  <spirit:name>HRUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRUSER_ram8</spirit:name>
+                 <spirit:name>HRUSER_expram_l</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
          </spirit:portMaps>
       </spirit:busInterface>
 
       <spirit:busInterface>
-         <spirit:name>AHBLiteTarget_Master__ram9</spirit:name>
-         <spirit:description>Master port _ram9</spirit:description>
+         <spirit:name>AHBLiteTarget_Master__expram_h</spirit:name>
+         <spirit:description>Master port _expram_h</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__ram9_AS"/>
+            <spirit:addressSpaceRef spirit:addressSpaceRef="AHBLiteTarget_Master__expram_h_AS"/>
          </spirit:master>
 
          <spirit:portMaps>
@@ -1485,7 +1487,7 @@
                  <spirit:name>HSELx</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HSEL_ram9</spirit:name>
+                 <spirit:name>HSEL_expram_h</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1493,7 +1495,7 @@
                  <spirit:name>HADDR</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HADDR_ram9</spirit:name>
+                 <spirit:name>HADDR_expram_h</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1501,7 +1503,7 @@
                  <spirit:name>HTRANS</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HTRANS_ram9</spirit:name>
+                 <spirit:name>HTRANS_expram_h</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1509,7 +1511,7 @@
                  <spirit:name>HWRITE</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWRITE_ram9</spirit:name>
+                 <spirit:name>HWRITE_expram_h</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1517,7 +1519,7 @@
                  <spirit:name>HSIZE</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HSIZE_ram9</spirit:name>
+                 <spirit:name>HSIZE_expram_h</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1525,7 +1527,7 @@
                  <spirit:name>HBURST</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HBURST_ram9</spirit:name>
+                 <spirit:name>HBURST_expram_h</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1533,7 +1535,7 @@
                  <spirit:name>HPROT</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HPROT_ram9</spirit:name>
+                 <spirit:name>HPROT_expram_h</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1541,7 +1543,7 @@
                  <spirit:name>HWDATA</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWDATA_ram9</spirit:name>
+                 <spirit:name>HWDATA_expram_h</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1549,7 +1551,7 @@
                  <spirit:name>HMASTLOCK</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HMASTLOCK_ram9</spirit:name>
+                 <spirit:name>HMASTLOCK_expram_h</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1557,7 +1559,7 @@
                  <spirit:name>HREADY</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HREADYMUX_ram9</spirit:name>
+                 <spirit:name>HREADYMUX_expram_h</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1565,7 +1567,7 @@
                  <spirit:name>HAUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HAUSER_ram9</spirit:name>
+                 <spirit:name>HAUSER_expram_h</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1573,7 +1575,7 @@
                  <spirit:name>HWUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HWUSER_ram9</spirit:name>
+                 <spirit:name>HWUSER_expram_h</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
 
@@ -1583,7 +1585,7 @@
                  <spirit:name>HRDATA</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRDATA_ram9</spirit:name>
+                 <spirit:name>HRDATA_expram_h</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1591,7 +1593,7 @@
                  <spirit:name>HREADYOUT</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HREADYOUT_ram9</spirit:name>
+                 <spirit:name>HREADYOUT_expram_h</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1599,7 +1601,7 @@
                  <spirit:name>HRESP</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRESP_ram9</spirit:name>
+                 <spirit:name>HRESP_expram_h</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
             <spirit:portMap>
@@ -1607,7 +1609,7 @@
                  <spirit:name>HRUSER</spirit:name>
                </spirit:logicalPort>
                <spirit:physicalPort>
-                 <spirit:name>HRUSER_ram9</spirit:name>
+                 <spirit:name>HRUSER_expram_h</spirit:name>
                </spirit:physicalPort>
             </spirit:portMap>
          </spirit:portMaps>
@@ -1774,6 +1776,167 @@
          </spirit:portMaps>
       </spirit:busInterface>
 
+      <spirit:busInterface>
+         <spirit:name>AHBLiteTarget_Master__systable</spirit:name>
+         <spirit:description>Master port _systable</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__systable_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_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HADDR</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HADDR_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HTRANS</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HTRANS_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWRITE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWRITE_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HSIZE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HSIZE_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HBURST</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HBURST_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HPROT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HPROT_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWDATA_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HMASTLOCK</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HMASTLOCK_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADY</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYMUX_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HAUSER</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HAUSER_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWUSER</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWUSER_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!--  Inputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRDATA_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADYOUT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYOUT_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRESP</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRESP_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRUSER</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRUSER_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+         </spirit:portMaps>
+      </spirit:busInterface>
+
       <!--Scan test dummy signals -->
       <spirit:busInterface>
          <spirit:name>DFTInterface_Slave</spirit:name>
@@ -1833,17 +1996,17 @@
    <spirit:remapStates>
 
       <spirit:remapState>
-          <spirit:name>remap_0</spirit:name>
-          <spirit:description>Remap state remap_0</spirit:description>
+          <spirit:name>remap_n0</spirit:name>
+          <spirit:description>Remap state remap_n0</spirit:description>
           <spirit:remapPorts>
-             <spirit:remapPort spirit:portNameRef="REMAP" spirit:portIndex="0">1</spirit:remapPort>
+             <spirit:remapPort spirit:portNameRef="REMAP" spirit:portIndex="0">0</spirit:remapPort>
           </spirit:remapPorts>
       </spirit:remapState>
       <spirit:remapState>
-          <spirit:name>remap_n0</spirit:name>
-          <spirit:description>Remap state remap_n0</spirit:description>
+          <spirit:name>remap_0</spirit:name>
+          <spirit:description>Remap state remap_0</spirit:description>
           <spirit:remapPorts>
-             <spirit:remapPort spirit:portNameRef="REMAP" spirit:portIndex="0">0</spirit:remapPort>
+             <spirit:remapPort spirit:portNameRef="REMAP" spirit:portIndex="0">1</spirit:remapPort>
           </spirit:remapPorts>
       </spirit:remapState>
 
@@ -1852,18 +2015,18 @@
    <spirit:addressSpaces>
 
      <spirit:addressSpace>
-          <spirit:name>AHBLiteTarget_Master__rom1_AS</spirit:name>
-          <spirit:description>_rom1 address space</spirit:description>
+          <spirit:name>AHBLiteTarget_Master__bootrom_AS</spirit:name>
+          <spirit:description>_bootrom address space</spirit:description>
           <spirit:range>4G</spirit:range>
           <spirit:width>32</spirit:width>
           <spirit:segments>
              <spirit:segment>
-                <spirit:name>_rom1_0x00000000_0x0fffffff</spirit:name>
+                <spirit:name>_bootrom_0x00000000_0x0fffffff</spirit:name>
                 <spirit:addressOffset>0x00000000</spirit:addressOffset>
                 <spirit:range>0x010000000</spirit:range>
              </spirit:segment>
              <spirit:segment>
-                <spirit:name>_rom1_0x10000000_0x1fffffff</spirit:name>
+                <spirit:name>_bootrom_0x10000000_0x1fffffff</spirit:name>
                 <spirit:addressOffset>0x10000000</spirit:addressOffset>
                 <spirit:range>0x010000000</spirit:range>
              </spirit:segment>
@@ -1872,18 +2035,18 @@
      </spirit:addressSpace>
 
      <spirit:addressSpace>
-          <spirit:name>AHBLiteTarget_Master__ram2_AS</spirit:name>
-          <spirit:description>_ram2 address space</spirit:description>
+          <spirit:name>AHBLiteTarget_Master__imem_AS</spirit:name>
+          <spirit:description>_imem address space</spirit:description>
           <spirit:range>4G</spirit:range>
           <spirit:width>32</spirit:width>
           <spirit:segments>
              <spirit:segment>
-                <spirit:name>_ram2_0x00000000_0x0fffffff</spirit:name>
+                <spirit:name>_imem_0x00000000_0x0fffffff</spirit:name>
                 <spirit:addressOffset>0x00000000</spirit:addressOffset>
                 <spirit:range>0x010000000</spirit:range>
              </spirit:segment>
              <spirit:segment>
-                <spirit:name>_ram2_0x20000000_0x2fffffff</spirit:name>
+                <spirit:name>_imem_0x20000000_0x2fffffff</spirit:name>
                 <spirit:addressOffset>0x20000000</spirit:addressOffset>
                 <spirit:range>0x010000000</spirit:range>
              </spirit:segment>
@@ -1892,13 +2055,13 @@
      </spirit:addressSpace>
 
      <spirit:addressSpace>
-          <spirit:name>AHBLiteTarget_Master__ram3_AS</spirit:name>
-          <spirit:description>_ram3 address space</spirit:description>
+          <spirit:name>AHBLiteTarget_Master__dmem_AS</spirit:name>
+          <spirit:description>_dmem address space</spirit:description>
           <spirit:range>4G</spirit:range>
           <spirit:width>32</spirit:width>
           <spirit:segments>
              <spirit:segment>
-                <spirit:name>_ram3_0x30000000_0x3fffffff</spirit:name>
+                <spirit:name>_dmem_0x30000000_0x3fffffff</spirit:name>
                 <spirit:addressOffset>0x30000000</spirit:addressOffset>
                 <spirit:range>0x010000000</spirit:range>
              </spirit:segment>
@@ -1907,33 +2070,28 @@
      </spirit:addressSpace>
 
      <spirit:addressSpace>
-          <spirit:name>AHBLiteTarget_Master__sys_AS</spirit:name>
-          <spirit:description>_sys address space</spirit:description>
+          <spirit:name>AHBLiteTarget_Master__sysio_AS</spirit:name>
+          <spirit:description>_sysio address space</spirit:description>
           <spirit:range>4G</spirit:range>
           <spirit:width>32</spirit:width>
           <spirit:segments>
              <spirit:segment>
-                <spirit:name>_sys_0x40000000_0x5fffffff</spirit:name>
+                <spirit:name>_sysio_0x40000000_0x5fffffff</spirit:name>
                 <spirit:addressOffset>0x40000000</spirit:addressOffset>
                 <spirit:range>0x020000000</spirit:range>
              </spirit:segment>
-             <spirit:segment>
-                <spirit:name>_sys_0xf0000000_0xf003ffff</spirit:name>
-                <spirit:addressOffset>0xf0000000</spirit:addressOffset>
-                <spirit:range>0x000040000</spirit:range>
-             </spirit:segment>
           </spirit:segments>
           <spirit:addressUnitBits>8</spirit:addressUnitBits>
      </spirit:addressSpace>
 
      <spirit:addressSpace>
-          <spirit:name>AHBLiteTarget_Master__ram8_AS</spirit:name>
-          <spirit:description>_ram8 address space</spirit:description>
+          <spirit:name>AHBLiteTarget_Master__expram_l_AS</spirit:name>
+          <spirit:description>_expram_l address space</spirit:description>
           <spirit:range>4G</spirit:range>
           <spirit:width>32</spirit:width>
           <spirit:segments>
              <spirit:segment>
-                <spirit:name>_ram8_0x80000000_0x8fffffff</spirit:name>
+                <spirit:name>_expram_l_0x80000000_0x8fffffff</spirit:name>
                 <spirit:addressOffset>0x80000000</spirit:addressOffset>
                 <spirit:range>0x010000000</spirit:range>
              </spirit:segment>
@@ -1942,13 +2100,13 @@
      </spirit:addressSpace>
 
      <spirit:addressSpace>
-          <spirit:name>AHBLiteTarget_Master__ram9_AS</spirit:name>
-          <spirit:description>_ram9 address space</spirit:description>
+          <spirit:name>AHBLiteTarget_Master__expram_h_AS</spirit:name>
+          <spirit:description>_expram_h address space</spirit:description>
           <spirit:range>4G</spirit:range>
           <spirit:width>32</spirit:width>
           <spirit:segments>
              <spirit:segment>
-                <spirit:name>_ram9_0x90000000_0x9fffffff</spirit:name>
+                <spirit:name>_expram_h_0x90000000_0x9fffffff</spirit:name>
                 <spirit:addressOffset>0x90000000</spirit:addressOffset>
                 <spirit:range>0x010000000</spirit:range>
              </spirit:segment>
@@ -1976,6 +2134,21 @@
           <spirit:addressUnitBits>8</spirit:addressUnitBits>
      </spirit:addressSpace>
 
+     <spirit:addressSpace>
+          <spirit:name>AHBLiteTarget_Master__systable_AS</spirit:name>
+          <spirit:description>_systable address space</spirit:description>
+          <spirit:range>4G</spirit:range>
+          <spirit:width>32</spirit:width>
+          <spirit:segments>
+             <spirit:segment>
+                <spirit:name>_systable_0xf0000000_0xf003ffff</spirit:name>
+                <spirit:addressOffset>0xf0000000</spirit:addressOffset>
+                <spirit:range>0x000040000</spirit:range>
+             </spirit:segment>
+          </spirit:segments>
+          <spirit:addressUnitBits>8</spirit:addressUnitBits>
+     </spirit:addressSpace>
+
    </spirit:addressSpaces>
 
    <spirit:memoryMaps>
@@ -1984,31 +2157,31 @@
          <spirit:name>AHBLiteInitiator_Slave__adp_MM</spirit:name>
          <spirit:description>_adp memory map</spirit:description>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__rom1"
-                             spirit:segmentRef="_rom1_0x10000000_0x1fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__bootrom"
+                             spirit:segmentRef="_bootrom_0x10000000_0x1fffffff">
             <!-- Address_region 0x10000000-0x1fffffff -->
-            <spirit:name>AHBLiteTarget_Master__rom1_0x10000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__bootrom_0x10000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x10000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram2"
-                             spirit:segmentRef="_ram2_0x20000000_0x2fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__imem"
+                             spirit:segmentRef="_imem_0x20000000_0x2fffffff">
             <!-- Address_region 0x20000000-0x2fffffff -->
-            <spirit:name>AHBLiteTarget_Master__ram2_0x20000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__imem_0x20000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x20000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram3"
-                             spirit:segmentRef="_ram3_0x30000000_0x3fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__dmem"
+                             spirit:segmentRef="_dmem_0x30000000_0x3fffffff">
             <!-- Address_region 0x30000000-0x3fffffff -->
-            <spirit:name>AHBLiteTarget_Master__ram3_0x30000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__dmem_0x30000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x30000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__sys"
-                             spirit:segmentRef="_sys_0x40000000_0x5fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__sysio"
+                             spirit:segmentRef="_sysio_0x40000000_0x5fffffff">
             <!-- Address_region 0x40000000-0x5fffffff -->
-            <spirit:name>AHBLiteTarget_Master__sys_0x40000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__sysio_0x40000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x40000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
@@ -2019,17 +2192,17 @@
             <spirit:baseAddress>0x60000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram8"
-                             spirit:segmentRef="_ram8_0x80000000_0x8fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__expram_l"
+                             spirit:segmentRef="_expram_l_0x80000000_0x8fffffff">
             <!-- Address_region 0x80000000-0x8fffffff -->
-            <spirit:name>AHBLiteTarget_Master__ram8_0x80000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__expram_l_0x80000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x80000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram9"
-                             spirit:segmentRef="_ram9_0x90000000_0x9fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__expram_h"
+                             spirit:segmentRef="_expram_h_0x90000000_0x9fffffff">
             <!-- Address_region 0x90000000-0x9fffffff -->
-            <spirit:name>AHBLiteTarget_Master__ram9_0x90000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__expram_h_0x90000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x90000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
@@ -2040,31 +2213,31 @@
             <spirit:baseAddress>0xa0000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__sys"
-                             spirit:segmentRef="_sys_0xf0000000_0xf003ffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__systable"
+                             spirit:segmentRef="_systable_0xf0000000_0xf003ffff">
             <!-- Address_region 0xf0000000-0xf003ffff -->
-            <spirit:name>AHBLiteTarget_Master__sys_0xf0000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__systable_0xf0000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0xf0000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:memoryRemap spirit:state="remap_0">
-            <spirit:name>AHBLiteInitiator_Slave__adp_remap_0_remap_MM</spirit:name>
-            <spirit:description>_adp remap_0 remap</spirit:description>
-            <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram2"
-                                spirit:segmentRef="_ram2_0x00000000_0x0fffffff">
-               <!-- Remapped region, active when REMAP bitcombination is 0 address_region 0x00000000-0x0fffffff -->
-               <spirit:name>AHBLiteTarget_Master__ram2_0x00000000_0_state_remap_0_SM</spirit:name>
-               <spirit:baseAddress>0x00000000</spirit:baseAddress>
-            </spirit:subspaceMap>
-         </spirit:memoryRemap>
-
          <spirit:memoryRemap spirit:state="remap_n0">
             <spirit:name>AHBLiteInitiator_Slave__adp_remap_n0_remap_MM</spirit:name>
             <spirit:description>_adp remap_n0 remap</spirit:description>
-            <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__rom1"
-                                spirit:segmentRef="_rom1_0x00000000_0x0fffffff">
+            <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__bootrom"
+                                spirit:segmentRef="_bootrom_0x00000000_0x0fffffff">
                <!-- Removable region, active only when REMAP bitcombination is n0 address_region 0x00000000-0x0fffffff -->
-               <spirit:name>AHBLiteTarget_Master__rom1_0x00000000_0_state_remap_n0_SM</spirit:name>
+               <spirit:name>AHBLiteTarget_Master__bootrom_0x00000000_0_state_remap_n0_SM</spirit:name>
+               <spirit:baseAddress>0x00000000</spirit:baseAddress>
+            </spirit:subspaceMap>
+         </spirit:memoryRemap>
+
+         <spirit:memoryRemap spirit:state="remap_0">
+            <spirit:name>AHBLiteInitiator_Slave__adp_remap_0_remap_MM</spirit:name>
+            <spirit:description>_adp remap_0 remap</spirit:description>
+            <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__imem"
+                                spirit:segmentRef="_imem_0x00000000_0x0fffffff">
+               <!-- Remapped region, active when REMAP bitcombination is 0 address_region 0x00000000-0x0fffffff -->
+               <spirit:name>AHBLiteTarget_Master__imem_0x00000000_0_state_remap_0_SM</spirit:name>
                <spirit:baseAddress>0x00000000</spirit:baseAddress>
             </spirit:subspaceMap>
          </spirit:memoryRemap>
@@ -2072,41 +2245,41 @@
       </spirit:memoryMap>
 
       <spirit:memoryMap>
-         <spirit:name>AHBLiteInitiator_Slave__dma_MM</spirit:name>
-         <spirit:description>_dma memory map</spirit:description>
+         <spirit:name>AHBLiteInitiator_Slave__dma_0_MM</spirit:name>
+         <spirit:description>_dma_0 memory map</spirit:description>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram2"
-                             spirit:segmentRef="_ram2_0x00000000_0x0fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__imem"
+                             spirit:segmentRef="_imem_0x00000000_0x0fffffff">
             <!-- Address_region 0x00000000-0x0fffffff -->
-            <spirit:name>AHBLiteTarget_Master__ram2_0x00000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__imem_0x00000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x00000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__rom1"
-                             spirit:segmentRef="_rom1_0x10000000_0x1fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__bootrom"
+                             spirit:segmentRef="_bootrom_0x10000000_0x1fffffff">
             <!-- Address_region 0x10000000-0x1fffffff -->
-            <spirit:name>AHBLiteTarget_Master__rom1_0x10000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__bootrom_0x10000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x10000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram2"
-                             spirit:segmentRef="_ram2_0x20000000_0x2fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__imem"
+                             spirit:segmentRef="_imem_0x20000000_0x2fffffff">
             <!-- Address_region 0x20000000-0x2fffffff -->
-            <spirit:name>AHBLiteTarget_Master__ram2_0x20000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__imem_0x20000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x20000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram3"
-                             spirit:segmentRef="_ram3_0x30000000_0x3fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__dmem"
+                             spirit:segmentRef="_dmem_0x30000000_0x3fffffff">
             <!-- Address_region 0x30000000-0x3fffffff -->
-            <spirit:name>AHBLiteTarget_Master__ram3_0x30000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__dmem_0x30000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x30000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__sys"
-                             spirit:segmentRef="_sys_0x40000000_0x5fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__sysio"
+                             spirit:segmentRef="_sysio_0x40000000_0x5fffffff">
             <!-- Address_region 0x40000000-0x5fffffff -->
-            <spirit:name>AHBLiteTarget_Master__sys_0x40000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__sysio_0x40000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x40000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
@@ -2117,17 +2290,17 @@
             <spirit:baseAddress>0x60000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram8"
-                             spirit:segmentRef="_ram8_0x80000000_0x8fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__expram_l"
+                             spirit:segmentRef="_expram_l_0x80000000_0x8fffffff">
             <!-- Address_region 0x80000000-0x8fffffff -->
-            <spirit:name>AHBLiteTarget_Master__ram8_0x80000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__expram_l_0x80000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x80000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram9"
-                             spirit:segmentRef="_ram9_0x90000000_0x9fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__expram_h"
+                             spirit:segmentRef="_expram_h_0x90000000_0x9fffffff">
             <!-- Address_region 0x90000000-0x9fffffff -->
-            <spirit:name>AHBLiteTarget_Master__ram9_0x90000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__expram_h_0x90000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x90000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
@@ -2141,41 +2314,41 @@
       </spirit:memoryMap>
 
       <spirit:memoryMap>
-         <spirit:name>AHBLiteInitiator_Slave__dma2_MM</spirit:name>
-         <spirit:description>_dma2 memory map</spirit:description>
+         <spirit:name>AHBLiteInitiator_Slave__dma_1_MM</spirit:name>
+         <spirit:description>_dma_1 memory map</spirit:description>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram2"
-                             spirit:segmentRef="_ram2_0x00000000_0x0fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__imem"
+                             spirit:segmentRef="_imem_0x00000000_0x0fffffff">
             <!-- Address_region 0x00000000-0x0fffffff -->
-            <spirit:name>AHBLiteTarget_Master__ram2_0x00000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__imem_0x00000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x00000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__rom1"
-                             spirit:segmentRef="_rom1_0x10000000_0x1fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__bootrom"
+                             spirit:segmentRef="_bootrom_0x10000000_0x1fffffff">
             <!-- Address_region 0x10000000-0x1fffffff -->
-            <spirit:name>AHBLiteTarget_Master__rom1_0x10000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__bootrom_0x10000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x10000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram2"
-                             spirit:segmentRef="_ram2_0x20000000_0x2fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__imem"
+                             spirit:segmentRef="_imem_0x20000000_0x2fffffff">
             <!-- Address_region 0x20000000-0x2fffffff -->
-            <spirit:name>AHBLiteTarget_Master__ram2_0x20000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__imem_0x20000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x20000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram3"
-                             spirit:segmentRef="_ram3_0x30000000_0x3fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__dmem"
+                             spirit:segmentRef="_dmem_0x30000000_0x3fffffff">
             <!-- Address_region 0x30000000-0x3fffffff -->
-            <spirit:name>AHBLiteTarget_Master__ram3_0x30000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__dmem_0x30000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x30000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__sys"
-                             spirit:segmentRef="_sys_0x40000000_0x5fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__sysio"
+                             spirit:segmentRef="_sysio_0x40000000_0x5fffffff">
             <!-- Address_region 0x40000000-0x5fffffff -->
-            <spirit:name>AHBLiteTarget_Master__sys_0x40000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__sysio_0x40000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x40000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
@@ -2186,17 +2359,17 @@
             <spirit:baseAddress>0x60000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram8"
-                             spirit:segmentRef="_ram8_0x80000000_0x8fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__expram_l"
+                             spirit:segmentRef="_expram_l_0x80000000_0x8fffffff">
             <!-- Address_region 0x80000000-0x8fffffff -->
-            <spirit:name>AHBLiteTarget_Master__ram8_0x80000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__expram_l_0x80000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x80000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram9"
-                             spirit:segmentRef="_ram9_0x90000000_0x9fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__expram_h"
+                             spirit:segmentRef="_expram_h_0x90000000_0x9fffffff">
             <!-- Address_region 0x90000000-0x9fffffff -->
-            <spirit:name>AHBLiteTarget_Master__ram9_0x90000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__expram_h_0x90000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x90000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
@@ -2213,31 +2386,31 @@
          <spirit:name>AHBLiteInitiator_Slave__cpu_MM</spirit:name>
          <spirit:description>_cpu memory map</spirit:description>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__rom1"
-                             spirit:segmentRef="_rom1_0x10000000_0x1fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__bootrom"
+                             spirit:segmentRef="_bootrom_0x10000000_0x1fffffff">
             <!-- Address_region 0x10000000-0x1fffffff -->
-            <spirit:name>AHBLiteTarget_Master__rom1_0x10000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__bootrom_0x10000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x10000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram2"
-                             spirit:segmentRef="_ram2_0x20000000_0x2fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__imem"
+                             spirit:segmentRef="_imem_0x20000000_0x2fffffff">
             <!-- Address_region 0x20000000-0x2fffffff -->
-            <spirit:name>AHBLiteTarget_Master__ram2_0x20000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__imem_0x20000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x20000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram3"
-                             spirit:segmentRef="_ram3_0x30000000_0x3fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__dmem"
+                             spirit:segmentRef="_dmem_0x30000000_0x3fffffff">
             <!-- Address_region 0x30000000-0x3fffffff -->
-            <spirit:name>AHBLiteTarget_Master__ram3_0x30000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__dmem_0x30000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x30000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__sys"
-                             spirit:segmentRef="_sys_0x40000000_0x5fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__sysio"
+                             spirit:segmentRef="_sysio_0x40000000_0x5fffffff">
             <!-- Address_region 0x40000000-0x5fffffff -->
-            <spirit:name>AHBLiteTarget_Master__sys_0x40000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__sysio_0x40000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x40000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
@@ -2248,17 +2421,17 @@
             <spirit:baseAddress>0x60000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram8"
-                             spirit:segmentRef="_ram8_0x80000000_0x8fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__expram_l"
+                             spirit:segmentRef="_expram_l_0x80000000_0x8fffffff">
             <!-- Address_region 0x80000000-0x8fffffff -->
-            <spirit:name>AHBLiteTarget_Master__ram8_0x80000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__expram_l_0x80000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x80000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram9"
-                             spirit:segmentRef="_ram9_0x90000000_0x9fffffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__expram_h"
+                             spirit:segmentRef="_expram_h_0x90000000_0x9fffffff">
             <!-- Address_region 0x90000000-0x9fffffff -->
-            <spirit:name>AHBLiteTarget_Master__ram9_0x90000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__expram_h_0x90000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0x90000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
@@ -2269,31 +2442,31 @@
             <spirit:baseAddress>0xa0000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__sys"
-                             spirit:segmentRef="_sys_0xf0000000_0xf003ffff">
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__systable"
+                             spirit:segmentRef="_systable_0xf0000000_0xf003ffff">
             <!-- Address_region 0xf0000000-0xf003ffff -->
-            <spirit:name>AHBLiteTarget_Master__sys_0xf0000000_0_state_always_SM</spirit:name>
+            <spirit:name>AHBLiteTarget_Master__systable_0xf0000000_0_state_always_SM</spirit:name>
             <spirit:baseAddress>0xf0000000</spirit:baseAddress>
          </spirit:subspaceMap>
 
-         <spirit:memoryRemap spirit:state="remap_0">
-            <spirit:name>AHBLiteInitiator_Slave__cpu_remap_0_remap_MM</spirit:name>
-            <spirit:description>_cpu remap_0 remap</spirit:description>
-            <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__ram2"
-                                spirit:segmentRef="_ram2_0x00000000_0x0fffffff">
-               <!-- Remapped region, active when REMAP bitcombination is 0 address_region 0x00000000-0x0fffffff -->
-               <spirit:name>AHBLiteTarget_Master__ram2_0x00000000_0_state_remap_0_SM</spirit:name>
-               <spirit:baseAddress>0x00000000</spirit:baseAddress>
-            </spirit:subspaceMap>
-         </spirit:memoryRemap>
-
          <spirit:memoryRemap spirit:state="remap_n0">
             <spirit:name>AHBLiteInitiator_Slave__cpu_remap_n0_remap_MM</spirit:name>
             <spirit:description>_cpu remap_n0 remap</spirit:description>
-            <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__rom1"
-                                spirit:segmentRef="_rom1_0x00000000_0x0fffffff">
+            <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__bootrom"
+                                spirit:segmentRef="_bootrom_0x00000000_0x0fffffff">
                <!-- Removable region, active only when REMAP bitcombination is n0 address_region 0x00000000-0x0fffffff -->
-               <spirit:name>AHBLiteTarget_Master__rom1_0x00000000_0_state_remap_n0_SM</spirit:name>
+               <spirit:name>AHBLiteTarget_Master__bootrom_0x00000000_0_state_remap_n0_SM</spirit:name>
+               <spirit:baseAddress>0x00000000</spirit:baseAddress>
+            </spirit:subspaceMap>
+         </spirit:memoryRemap>
+
+         <spirit:memoryRemap spirit:state="remap_0">
+            <spirit:name>AHBLiteInitiator_Slave__cpu_remap_0_remap_MM</spirit:name>
+            <spirit:description>_cpu remap_0 remap</spirit:description>
+            <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__imem"
+                                spirit:segmentRef="_imem_0x00000000_0x0fffffff">
+               <!-- Remapped region, active when REMAP bitcombination is 0 address_region 0x00000000-0x0fffffff -->
+               <spirit:name>AHBLiteTarget_Master__imem_0x00000000_0_state_remap_0_SM</spirit:name>
                <spirit:baseAddress>0x00000000</spirit:baseAddress>
             </spirit:subspaceMap>
          </spirit:memoryRemap>
@@ -2448,7 +2621,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HADDR_dma</spirit:name>
+            <spirit:name>HADDR_dma_0</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2458,7 +2631,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HTRANS_dma</spirit:name>
+            <spirit:name>HTRANS_dma_0</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2468,13 +2641,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWRITE_dma</spirit:name>
+            <spirit:name>HWRITE_dma_0</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HSIZE_dma</spirit:name>
+            <spirit:name>HSIZE_dma_0</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2484,7 +2657,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HBURST_dma</spirit:name>
+            <spirit:name>HBURST_dma_0</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2497,7 +2670,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HPROT_dma</spirit:name>
+            <spirit:name>HPROT_dma_0</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2507,7 +2680,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWDATA_dma</spirit:name>
+            <spirit:name>HWDATA_dma_0</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2517,13 +2690,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HMASTLOCK_dma</spirit:name>
+            <spirit:name>HMASTLOCK_dma_0</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HAUSER_dma</spirit:name>
+            <spirit:name>HAUSER_dma_0</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2533,7 +2706,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWUSER_dma</spirit:name>
+            <spirit:name>HWUSER_dma_0</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2543,7 +2716,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HADDR_dma2</spirit:name>
+            <spirit:name>HADDR_dma_1</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2553,7 +2726,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HTRANS_dma2</spirit:name>
+            <spirit:name>HTRANS_dma_1</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2563,13 +2736,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWRITE_dma2</spirit:name>
+            <spirit:name>HWRITE_dma_1</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HSIZE_dma2</spirit:name>
+            <spirit:name>HSIZE_dma_1</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2579,7 +2752,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HBURST_dma2</spirit:name>
+            <spirit:name>HBURST_dma_1</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2592,7 +2765,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HPROT_dma2</spirit:name>
+            <spirit:name>HPROT_dma_1</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2602,7 +2775,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWDATA_dma2</spirit:name>
+            <spirit:name>HWDATA_dma_1</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2612,13 +2785,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HMASTLOCK_dma2</spirit:name>
+            <spirit:name>HMASTLOCK_dma_1</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HAUSER_dma2</spirit:name>
+            <spirit:name>HAUSER_dma_1</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2628,7 +2801,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWUSER_dma2</spirit:name>
+            <spirit:name>HWUSER_dma_1</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2736,7 +2909,7 @@
          <!-- Input signals of Master interfaces -->
 
          <spirit:port>
-            <spirit:name>HRDATA_rom1</spirit:name>
+            <spirit:name>HRDATA_bootrom</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2746,19 +2919,19 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HREADYOUT_rom1</spirit:name>
+            <spirit:name>HREADYOUT_bootrom</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRESP_rom1</spirit:name>
+            <spirit:name>HRESP_bootrom</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRUSER_rom1</spirit:name>
+            <spirit:name>HRUSER_bootrom</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2768,7 +2941,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRDATA_ram2</spirit:name>
+            <spirit:name>HRDATA_imem</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2778,19 +2951,19 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HREADYOUT_ram2</spirit:name>
+            <spirit:name>HREADYOUT_imem</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRESP_ram2</spirit:name>
+            <spirit:name>HRESP_imem</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRUSER_ram2</spirit:name>
+            <spirit:name>HRUSER_imem</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2800,7 +2973,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRDATA_ram3</spirit:name>
+            <spirit:name>HRDATA_dmem</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2810,19 +2983,19 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HREADYOUT_ram3</spirit:name>
+            <spirit:name>HREADYOUT_dmem</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRESP_ram3</spirit:name>
+            <spirit:name>HRESP_dmem</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRUSER_ram3</spirit:name>
+            <spirit:name>HRUSER_dmem</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2832,7 +3005,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRDATA_sys</spirit:name>
+            <spirit:name>HRDATA_sysio</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2842,19 +3015,19 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HREADYOUT_sys</spirit:name>
+            <spirit:name>HREADYOUT_sysio</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRESP_sys</spirit:name>
+            <spirit:name>HRESP_sysio</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRUSER_sys</spirit:name>
+            <spirit:name>HRUSER_sysio</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2864,7 +3037,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRDATA_ram8</spirit:name>
+            <spirit:name>HRDATA_expram_l</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2874,19 +3047,19 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HREADYOUT_ram8</spirit:name>
+            <spirit:name>HREADYOUT_expram_l</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRESP_ram8</spirit:name>
+            <spirit:name>HRESP_expram_l</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRUSER_ram8</spirit:name>
+            <spirit:name>HRUSER_expram_l</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2896,7 +3069,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRDATA_ram9</spirit:name>
+            <spirit:name>HRDATA_expram_h</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2906,19 +3079,19 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HREADYOUT_ram9</spirit:name>
+            <spirit:name>HREADYOUT_expram_h</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRESP_ram9</spirit:name>
+            <spirit:name>HRESP_expram_h</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRUSER_ram9</spirit:name>
+            <spirit:name>HRUSER_expram_h</spirit:name>
             <spirit:wire>
                <spirit:direction>in</spirit:direction>
                <spirit:vector>
@@ -2959,6 +3132,38 @@
                </spirit:vector>
             </spirit:wire>
          </spirit:port>
+         <spirit:port>
+            <spirit:name>HRDATA_systable</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_systable</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRESP_systable</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRUSER_systable</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>
 
          <!-- Scan test dummy signals; not connected until scan insertion -->
 
@@ -2978,13 +3183,13 @@
          <!-- Output signals of Master interfaces -->
 
          <spirit:port>
-            <spirit:name>HSEL_rom1</spirit:name>
+            <spirit:name>HSEL_bootrom</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HADDR_rom1</spirit:name>
+            <spirit:name>HADDR_bootrom</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -2994,7 +3199,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HTRANS_rom1</spirit:name>
+            <spirit:name>HTRANS_bootrom</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3004,13 +3209,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWRITE_rom1</spirit:name>
+            <spirit:name>HWRITE_bootrom</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HSIZE_rom1</spirit:name>
+            <spirit:name>HSIZE_bootrom</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3020,7 +3225,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HBURST_rom1</spirit:name>
+            <spirit:name>HBURST_bootrom</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3030,7 +3235,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HPROT_rom1</spirit:name>
+            <spirit:name>HPROT_bootrom</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3040,7 +3245,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWDATA_rom1</spirit:name>
+            <spirit:name>HWDATA_bootrom</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3050,19 +3255,19 @@
             </spirit:wire>
           </spirit:port>
          <spirit:port>
-            <spirit:name>HMASTLOCK_rom1</spirit:name>
+            <spirit:name>HMASTLOCK_bootrom</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HREADYMUX_rom1</spirit:name>
+            <spirit:name>HREADYMUX_bootrom</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HAUSER_rom1</spirit:name>
+            <spirit:name>HAUSER_bootrom</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3072,7 +3277,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWUSER_rom1</spirit:name>
+            <spirit:name>HWUSER_bootrom</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3082,13 +3287,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HSEL_ram2</spirit:name>
+            <spirit:name>HSEL_imem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HADDR_ram2</spirit:name>
+            <spirit:name>HADDR_imem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3098,7 +3303,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HTRANS_ram2</spirit:name>
+            <spirit:name>HTRANS_imem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3108,13 +3313,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWRITE_ram2</spirit:name>
+            <spirit:name>HWRITE_imem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HSIZE_ram2</spirit:name>
+            <spirit:name>HSIZE_imem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3124,7 +3329,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HBURST_ram2</spirit:name>
+            <spirit:name>HBURST_imem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3134,7 +3339,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HPROT_ram2</spirit:name>
+            <spirit:name>HPROT_imem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3144,7 +3349,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWDATA_ram2</spirit:name>
+            <spirit:name>HWDATA_imem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3154,19 +3359,19 @@
             </spirit:wire>
           </spirit:port>
          <spirit:port>
-            <spirit:name>HMASTLOCK_ram2</spirit:name>
+            <spirit:name>HMASTLOCK_imem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HREADYMUX_ram2</spirit:name>
+            <spirit:name>HREADYMUX_imem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HAUSER_ram2</spirit:name>
+            <spirit:name>HAUSER_imem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3176,7 +3381,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWUSER_ram2</spirit:name>
+            <spirit:name>HWUSER_imem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3186,13 +3391,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HSEL_ram3</spirit:name>
+            <spirit:name>HSEL_dmem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HADDR_ram3</spirit:name>
+            <spirit:name>HADDR_dmem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3202,7 +3407,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HTRANS_ram3</spirit:name>
+            <spirit:name>HTRANS_dmem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3212,13 +3417,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWRITE_ram3</spirit:name>
+            <spirit:name>HWRITE_dmem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HSIZE_ram3</spirit:name>
+            <spirit:name>HSIZE_dmem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3228,7 +3433,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HBURST_ram3</spirit:name>
+            <spirit:name>HBURST_dmem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3238,7 +3443,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HPROT_ram3</spirit:name>
+            <spirit:name>HPROT_dmem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3248,7 +3453,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWDATA_ram3</spirit:name>
+            <spirit:name>HWDATA_dmem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3258,19 +3463,19 @@
             </spirit:wire>
           </spirit:port>
          <spirit:port>
-            <spirit:name>HMASTLOCK_ram3</spirit:name>
+            <spirit:name>HMASTLOCK_dmem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HREADYMUX_ram3</spirit:name>
+            <spirit:name>HREADYMUX_dmem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HAUSER_ram3</spirit:name>
+            <spirit:name>HAUSER_dmem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3280,7 +3485,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWUSER_ram3</spirit:name>
+            <spirit:name>HWUSER_dmem</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3290,13 +3495,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HSEL_sys</spirit:name>
+            <spirit:name>HSEL_sysio</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HADDR_sys</spirit:name>
+            <spirit:name>HADDR_sysio</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3306,7 +3511,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HTRANS_sys</spirit:name>
+            <spirit:name>HTRANS_sysio</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3316,13 +3521,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWRITE_sys</spirit:name>
+            <spirit:name>HWRITE_sysio</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HSIZE_sys</spirit:name>
+            <spirit:name>HSIZE_sysio</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3332,7 +3537,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HBURST_sys</spirit:name>
+            <spirit:name>HBURST_sysio</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3342,7 +3547,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HPROT_sys</spirit:name>
+            <spirit:name>HPROT_sysio</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3352,7 +3557,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWDATA_sys</spirit:name>
+            <spirit:name>HWDATA_sysio</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3362,19 +3567,19 @@
             </spirit:wire>
           </spirit:port>
          <spirit:port>
-            <spirit:name>HMASTLOCK_sys</spirit:name>
+            <spirit:name>HMASTLOCK_sysio</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HREADYMUX_sys</spirit:name>
+            <spirit:name>HREADYMUX_sysio</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HAUSER_sys</spirit:name>
+            <spirit:name>HAUSER_sysio</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3384,7 +3589,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWUSER_sys</spirit:name>
+            <spirit:name>HWUSER_sysio</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3394,13 +3599,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HSEL_ram8</spirit:name>
+            <spirit:name>HSEL_expram_l</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HADDR_ram8</spirit:name>
+            <spirit:name>HADDR_expram_l</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3410,7 +3615,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HTRANS_ram8</spirit:name>
+            <spirit:name>HTRANS_expram_l</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3420,13 +3625,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWRITE_ram8</spirit:name>
+            <spirit:name>HWRITE_expram_l</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HSIZE_ram8</spirit:name>
+            <spirit:name>HSIZE_expram_l</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3436,7 +3641,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HBURST_ram8</spirit:name>
+            <spirit:name>HBURST_expram_l</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3446,7 +3651,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HPROT_ram8</spirit:name>
+            <spirit:name>HPROT_expram_l</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3456,7 +3661,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWDATA_ram8</spirit:name>
+            <spirit:name>HWDATA_expram_l</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3466,19 +3671,19 @@
             </spirit:wire>
           </spirit:port>
          <spirit:port>
-            <spirit:name>HMASTLOCK_ram8</spirit:name>
+            <spirit:name>HMASTLOCK_expram_l</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HREADYMUX_ram8</spirit:name>
+            <spirit:name>HREADYMUX_expram_l</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HAUSER_ram8</spirit:name>
+            <spirit:name>HAUSER_expram_l</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3488,7 +3693,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWUSER_ram8</spirit:name>
+            <spirit:name>HWUSER_expram_l</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3498,13 +3703,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HSEL_ram9</spirit:name>
+            <spirit:name>HSEL_expram_h</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HADDR_ram9</spirit:name>
+            <spirit:name>HADDR_expram_h</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3514,7 +3719,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HTRANS_ram9</spirit:name>
+            <spirit:name>HTRANS_expram_h</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3524,13 +3729,13 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWRITE_ram9</spirit:name>
+            <spirit:name>HWRITE_expram_h</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HSIZE_ram9</spirit:name>
+            <spirit:name>HSIZE_expram_h</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3540,7 +3745,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HBURST_ram9</spirit:name>
+            <spirit:name>HBURST_expram_h</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3550,7 +3755,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HPROT_ram9</spirit:name>
+            <spirit:name>HPROT_expram_h</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3560,7 +3765,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWDATA_ram9</spirit:name>
+            <spirit:name>HWDATA_expram_h</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3570,19 +3775,19 @@
             </spirit:wire>
           </spirit:port>
          <spirit:port>
-            <spirit:name>HMASTLOCK_ram9</spirit:name>
+            <spirit:name>HMASTLOCK_expram_h</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HREADYMUX_ram9</spirit:name>
+            <spirit:name>HREADYMUX_expram_h</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HAUSER_ram9</spirit:name>
+            <spirit:name>HAUSER_expram_h</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3592,7 +3797,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HWUSER_ram9</spirit:name>
+            <spirit:name>HWUSER_expram_h</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3705,6 +3910,110 @@
                </spirit:vector>
             </spirit:wire>
          </spirit:port>
+         <spirit:port>
+            <spirit:name>HSEL_systable</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HADDR_systable</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_systable</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_systable</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSIZE_systable</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_systable</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_systable</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_systable</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_systable</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HREADYMUX_systable</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HAUSER_systable</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>HWUSER_systable</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>
 
          <!-- Output signals of Slave interfaces -->
 
@@ -3741,7 +4050,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRDATA_dma</spirit:name>
+            <spirit:name>HRDATA_dma_0</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3751,19 +4060,19 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HREADY_dma</spirit:name>
+            <spirit:name>HREADY_dma_0</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRESP_dma</spirit:name>
+            <spirit:name>HRESP_dma_0</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRUSER_dma</spirit:name>
+            <spirit:name>HRUSER_dma_0</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3773,7 +4082,7 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRDATA_dma2</spirit:name>
+            <spirit:name>HRDATA_dma_1</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3783,19 +4092,19 @@
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HREADY_dma2</spirit:name>
+            <spirit:name>HREADY_dma_1</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRESP_dma2</spirit:name>
+            <spirit:name>HRESP_dma_1</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
             </spirit:wire>
          </spirit:port>
          <spirit:port>
-            <spirit:name>HRUSER_dma2</spirit:name>
+            <spirit:name>HRUSER_dma_1</spirit:name>
             <spirit:wire>
                <spirit:direction>out</spirit:direction>
                <spirit:vector>
@@ -3875,11 +4184,11 @@
             <spirit:fileType>verilogSource-2001</spirit:fileType>
          </spirit:file>
          <spirit:file>
-            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_matrix_decode_dma.v</spirit:name>
+            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_matrix_decode_dma_0.v</spirit:name>
             <spirit:fileType>verilogSource-2001</spirit:fileType>
          </spirit:file>
          <spirit:file>
-            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_matrix_decode_dma2.v</spirit:name>
+            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_matrix_decode_dma_1.v</spirit:name>
             <spirit:fileType>verilogSource-2001</spirit:fileType>
          </spirit:file>
          <spirit:file>
@@ -3887,11 +4196,67 @@
             <spirit:fileType>verilogSource-2001</spirit:fileType>
          </spirit:file>
          <spirit:file>
-            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_arbiter.v</spirit:name>
+            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_arbiter_bootrom.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_arbiter_imem.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_arbiter_dmem.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_arbiter_sysio.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_arbiter_expram_l.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_arbiter_expram_h.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_arbiter_exp.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_arbiter_systable.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_target_output_bootrom.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_target_output_imem.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_target_output_dmem.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_target_output_sysio.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_target_output_expram_l.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_target_output_expram_h.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_target_output_exp.v</spirit:name>
             <spirit:fileType>verilogSource-2001</spirit:fileType>
          </spirit:file>
          <spirit:file>
-            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_target_output.v</spirit:name>
+            <spirit:name>../../verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_target_output_systable.v</spirit:name>
             <spirit:fileType>verilogSource-2001</spirit:fileType>
          </spirit:file>
       </spirit:fileSet>
diff --git a/system/src/nanosoc_busmatrix/ipxact/nanosoc_busmatrix/nanosoc_busmatrix.xml b/system/src/nanosoc_busmatrix/ipxact/nanosoc_busmatrix/nanosoc_busmatrix.xml
new file mode 100644
index 0000000000000000000000000000000000000000..09c4f75645addf45dc508af828cfdb2297c1842c
--- /dev/null
+++ b/system/src/nanosoc_busmatrix/ipxact/nanosoc_busmatrix/nanosoc_busmatrix.xml
@@ -0,0 +1,3995 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
+<!--    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-2017 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  -->
+<!--                                                                                -->
+<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
+<!--  Purpose  : IP-XACT description for the main top of nanosoc_busmatrix     -->
+<!--                                                                                -->
+<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    -->
+
+<spirit:component xmlns:spirit="http://www.spiritconsortium.org/XMLSchema/SPIRIT/1685-2009"
+                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                  xsi:schemaLocation="http://www.spiritconsortium.org/XMLSchema/SPIRIT/1685-2009 http://www.spiritconsortium.org/XMLSchema/SPIRIT/1685-2009/index.xsd">
+   <spirit:vendor>arm.com</spirit:vendor>
+   <spirit:library>CoreLink</spirit:library>
+   <spirit:name>nanosoc_busmatrix</spirit:name>
+   <spirit:version>r0p0_0</spirit:version>
+
+   <spirit:busInterfaces>
+
+      <!--Slave interfaces -->
+
+      <spirit:busInterface>
+         <spirit:name>AHBLiteTarget_Slave__socdebug</spirit:name>
+         <spirit:description>Slave port _socdebug</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:slave>
+            <spirit:memoryMapRef spirit:memoryMapRef="AHBLiteTarget_Slave__socdebug_MM"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__bootrom" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__imem" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__dmem" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__sysio" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__expram_l" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__expram_h" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__exp" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__systable" spirit:opaque="true"/>
+         </spirit:slave>
+
+         <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>
+            <!--  Inputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HSELx</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HSEL_socdebug</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HADDR</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HADDR_socdebug</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HTRANS</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HTRANS_socdebug</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWRITE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWRITE_socdebug</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HSIZE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HSIZE_socdebug</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HBURST</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HBURST_socdebug</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HPROT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HPROT_socdebug</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!-- HMASTER_socdebug unmapped -->
+
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWDATA_socdebug</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HMASTLOCK</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HMASTLOCK_socdebug</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADY</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADY_socdebug</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!--  Outputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRDATA_socdebug</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADYOUT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYOUT_socdebug</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRESP</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRESP_socdebug</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_Slave__dma_0</spirit:name>
+         <spirit:description>Slave port _dma_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:slave>
+            <spirit:memoryMapRef spirit:memoryMapRef="AHBLiteTarget_Slave__dma_0_MM"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__bootrom" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__imem" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__dmem" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__sysio" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__expram_l" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__expram_h" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__exp" spirit:opaque="true"/>
+         </spirit:slave>
+
+         <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>
+            <!--  Inputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HSELx</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HSEL_dma_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HADDR</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HADDR_dma_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HTRANS</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HTRANS_dma_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWRITE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWRITE_dma_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HSIZE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HSIZE_dma_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HBURST</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HBURST_dma_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HPROT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HPROT_dma_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!-- HMASTER_dma_0 unmapped -->
+
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWDATA_dma_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HMASTLOCK</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HMASTLOCK_dma_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADY</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADY_dma_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!--  Outputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRDATA_dma_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADYOUT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYOUT_dma_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRESP</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRESP_dma_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_Slave__dma_1</spirit:name>
+         <spirit:description>Slave port _dma_1</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:slave>
+            <spirit:memoryMapRef spirit:memoryMapRef="AHBLiteTarget_Slave__dma_1_MM"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__bootrom" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__imem" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__dmem" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__sysio" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__expram_l" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__expram_h" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__exp" spirit:opaque="true"/>
+         </spirit:slave>
+
+         <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>
+            <!--  Inputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HSELx</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HSEL_dma_1</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HADDR</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HADDR_dma_1</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HTRANS</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HTRANS_dma_1</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWRITE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWRITE_dma_1</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HSIZE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HSIZE_dma_1</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HBURST</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HBURST_dma_1</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HPROT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HPROT_dma_1</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!-- HMASTER_dma_1 unmapped -->
+
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWDATA_dma_1</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HMASTLOCK</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HMASTLOCK_dma_1</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADY</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADY_dma_1</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!--  Outputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRDATA_dma_1</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADYOUT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYOUT_dma_1</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRESP</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRESP_dma_1</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_Slave__cpu</spirit:name>
+         <spirit:description>Slave port _cpu</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:slave>
+            <spirit:memoryMapRef spirit:memoryMapRef="AHBLiteTarget_Slave__cpu_MM"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__bootrom" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__imem" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__dmem" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__sysio" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__expram_l" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__expram_h" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__exp" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__systable" spirit:opaque="true"/>
+         </spirit:slave>
+
+         <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>
+            <!--  Inputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HSELx</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HSEL_cpu</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HADDR</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HADDR_cpu</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HTRANS</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HTRANS_cpu</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWRITE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWRITE_cpu</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HSIZE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HSIZE_cpu</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HBURST</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HBURST_cpu</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HPROT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HPROT_cpu</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!-- HMASTER_cpu unmapped -->
+
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWDATA_cpu</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HMASTLOCK</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HMASTLOCK_cpu</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADY</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADY_cpu</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!--  Outputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRDATA_cpu</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADYOUT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYOUT_cpu</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRESP</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRESP_cpu</spirit:name>
+                 <spirit:vector>
+                    <spirit:left>0</spirit:left>
+                    <spirit:right>0</spirit:right>
+                 </spirit:vector>
+               </spirit:physicalPort>
+            </spirit:portMap>
+         </spirit:portMaps>
+      </spirit:busInterface>
+
+        <!--Master interfaces -->
+
+      <spirit:busInterface>
+         <spirit:name>AHBLiteTarget_Master__bootrom</spirit:name>
+         <spirit:description>Master port _bootrom</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__bootrom_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_bootrom</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HADDR</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HADDR_bootrom</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HTRANS</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HTRANS_bootrom</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWRITE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWRITE_bootrom</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HSIZE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HSIZE_bootrom</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HBURST</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HBURST_bootrom</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HPROT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HPROT_bootrom</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!-- HMASTER_bootrom unmapped -->
+
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWDATA_bootrom</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HMASTLOCK</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HMASTLOCK_bootrom</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADY</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYMUX_bootrom</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!--  Inputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRDATA_bootrom</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADYOUT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYOUT_bootrom</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRESP</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRESP_bootrom</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</spirit:name>
+         <spirit:description>Master port _imem</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__imem_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_imem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HADDR</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HADDR_imem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HTRANS</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HTRANS_imem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWRITE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWRITE_imem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HSIZE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HSIZE_imem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HBURST</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HBURST_imem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HPROT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HPROT_imem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!-- HMASTER_imem unmapped -->
+
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWDATA_imem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HMASTLOCK</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HMASTLOCK_imem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADY</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYMUX_imem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!--  Inputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRDATA_imem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADYOUT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYOUT_imem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRESP</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRESP_imem</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__dmem</spirit:name>
+         <spirit:description>Master port _dmem</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__dmem_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_dmem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HADDR</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HADDR_dmem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HTRANS</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HTRANS_dmem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWRITE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWRITE_dmem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HSIZE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HSIZE_dmem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HBURST</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HBURST_dmem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HPROT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HPROT_dmem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!-- HMASTER_dmem unmapped -->
+
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWDATA_dmem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HMASTLOCK</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HMASTLOCK_dmem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADY</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYMUX_dmem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!--  Inputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRDATA_dmem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADYOUT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYOUT_dmem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRESP</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRESP_dmem</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__sysio</spirit:name>
+         <spirit:description>Master port _sysio</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__sysio_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_sysio</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HADDR</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HADDR_sysio</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HTRANS</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HTRANS_sysio</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWRITE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWRITE_sysio</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HSIZE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HSIZE_sysio</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HBURST</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HBURST_sysio</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HPROT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HPROT_sysio</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!-- HMASTER_sysio unmapped -->
+
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWDATA_sysio</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HMASTLOCK</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HMASTLOCK_sysio</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADY</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYMUX_sysio</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!--  Inputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRDATA_sysio</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADYOUT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYOUT_sysio</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRESP</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRESP_sysio</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__expram_l</spirit:name>
+         <spirit:description>Master port _expram_l</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__expram_l_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_expram_l</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HADDR</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HADDR_expram_l</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HTRANS</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HTRANS_expram_l</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWRITE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWRITE_expram_l</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HSIZE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HSIZE_expram_l</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HBURST</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HBURST_expram_l</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HPROT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HPROT_expram_l</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!-- HMASTER_expram_l unmapped -->
+
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWDATA_expram_l</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HMASTLOCK</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HMASTLOCK_expram_l</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADY</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYMUX_expram_l</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!--  Inputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRDATA_expram_l</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADYOUT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYOUT_expram_l</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRESP</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRESP_expram_l</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__expram_h</spirit:name>
+         <spirit:description>Master port _expram_h</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__expram_h_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_expram_h</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HADDR</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HADDR_expram_h</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HTRANS</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HTRANS_expram_h</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWRITE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWRITE_expram_h</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HSIZE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HSIZE_expram_h</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HBURST</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HBURST_expram_h</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HPROT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HPROT_expram_h</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!-- HMASTER_expram_h unmapped -->
+
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWDATA_expram_h</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HMASTLOCK</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HMASTLOCK_expram_h</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADY</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYMUX_expram_h</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!--  Inputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRDATA_expram_h</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADYOUT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYOUT_expram_h</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRESP</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRESP_expram_h</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__exp</spirit:name>
+         <spirit:description>Master port _exp</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__exp_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_exp</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HADDR</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HADDR_exp</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HTRANS</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HTRANS_exp</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWRITE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWRITE_exp</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HSIZE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HSIZE_exp</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HBURST</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HBURST_exp</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HPROT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HPROT_exp</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!-- HMASTER_exp unmapped -->
+
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWDATA_exp</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HMASTLOCK</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HMASTLOCK_exp</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADY</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYMUX_exp</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!--  Inputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRDATA_exp</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADYOUT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYOUT_exp</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRESP</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRESP_exp</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__systable</spirit:name>
+         <spirit:description>Master port _systable</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__systable_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_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HADDR</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HADDR_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HTRANS</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HTRANS_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWRITE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWRITE_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HSIZE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HSIZE_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HBURST</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HBURST_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HPROT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HPROT_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!-- HMASTER_systable unmapped -->
+
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWDATA_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HMASTLOCK</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HMASTLOCK_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADY</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYMUX_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!--  Inputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRDATA_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADYOUT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYOUT_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRESP</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRESP_systable</spirit:name>
+                 <spirit:vector>
+                    <spirit:left>0</spirit:left>
+                    <spirit:right>0</spirit:right>
+                 </spirit:vector>
+               </spirit:physicalPort>
+            </spirit:portMap>
+         </spirit:portMaps>
+      </spirit:busInterface>
+
+      <!--Scan test dummy signals -->
+      <spirit:busInterface>
+         <spirit:name>DFTInterface_Slave</spirit:name>
+         <spirit:description>Scan test dummy signals, not connected until scan insertion</spirit:description>
+         <spirit:busType spirit:library="generic" spirit:name="DFTInterface" spirit:vendor="arm.com" spirit:version="r0p0_1"/>
+         <spirit:abstractionType spirit:library="generic" spirit:name="DFTInterface_rtl" spirit:vendor="arm.com" spirit:version="r0p0_1"/>
+         <spirit:slave/>
+         <spirit:portMaps>
+
+            <!--  Clock/reset -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>CLK</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HCLK</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>RESETn</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRESETn</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>DFTSCANMODE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>SCANENABLE</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>DFTSI</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>SCANINHCLK</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>DFTSO</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>SCANOUTHCLK</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+         </spirit:portMaps>
+      </spirit:busInterface>
+
+   </spirit:busInterfaces>
+
+   <spirit:remapStates>
+
+      <spirit:remapState>
+          <spirit:name>remap_0</spirit:name>
+          <spirit:description>Remap state remap_0</spirit:description>
+          <spirit:remapPorts>
+             <spirit:remapPort spirit:portNameRef="REMAP" spirit:portIndex="0">1</spirit:remapPort>
+          </spirit:remapPorts>
+      </spirit:remapState>
+      <spirit:remapState>
+          <spirit:name>remap_n0</spirit:name>
+          <spirit:description>Remap state remap_n0</spirit:description>
+          <spirit:remapPorts>
+             <spirit:remapPort spirit:portNameRef="REMAP" spirit:portIndex="0">0</spirit:remapPort>
+          </spirit:remapPorts>
+      </spirit:remapState>
+
+   </spirit:remapStates>
+
+   <spirit:addressSpaces>
+
+     <spirit:addressSpace>
+          <spirit:name>AHBLiteTarget_Master__bootrom_AS</spirit:name>
+          <spirit:description>_bootrom address space</spirit:description>
+          <spirit:range>4G</spirit:range>
+          <spirit:width>32</spirit:width>
+          <spirit:segments>
+             <spirit:segment>
+                <spirit:name>_bootrom_0x00000000_0x0fffffff</spirit:name>
+                <spirit:addressOffset>0x00000000</spirit:addressOffset>
+                <spirit:range>0x010000000</spirit:range>
+             </spirit:segment>
+             <spirit:segment>
+                <spirit:name>_bootrom_0x10000000_0x1fffffff</spirit:name>
+                <spirit:addressOffset>0x10000000</spirit:addressOffset>
+                <spirit:range>0x010000000</spirit:range>
+             </spirit:segment>
+          </spirit:segments>
+          <spirit:addressUnitBits>8</spirit:addressUnitBits>
+     </spirit:addressSpace>
+
+     <spirit:addressSpace>
+          <spirit:name>AHBLiteTarget_Master__imem_AS</spirit:name>
+          <spirit:description>_imem address space</spirit:description>
+          <spirit:range>4G</spirit:range>
+          <spirit:width>32</spirit:width>
+          <spirit:segments>
+             <spirit:segment>
+                <spirit:name>_imem_0x00000000_0x0fffffff</spirit:name>
+                <spirit:addressOffset>0x00000000</spirit:addressOffset>
+                <spirit:range>0x010000000</spirit:range>
+             </spirit:segment>
+             <spirit:segment>
+                <spirit:name>_imem_0x20000000_0x2fffffff</spirit:name>
+                <spirit:addressOffset>0x20000000</spirit:addressOffset>
+                <spirit:range>0x010000000</spirit:range>
+             </spirit:segment>
+          </spirit:segments>
+          <spirit:addressUnitBits>8</spirit:addressUnitBits>
+     </spirit:addressSpace>
+
+     <spirit:addressSpace>
+          <spirit:name>AHBLiteTarget_Master__dmem_AS</spirit:name>
+          <spirit:description>_dmem address space</spirit:description>
+          <spirit:range>4G</spirit:range>
+          <spirit:width>32</spirit:width>
+          <spirit:segments>
+             <spirit:segment>
+                <spirit:name>_dmem_0x30000000_0x3fffffff</spirit:name>
+                <spirit:addressOffset>0x30000000</spirit:addressOffset>
+                <spirit:range>0x010000000</spirit:range>
+             </spirit:segment>
+          </spirit:segments>
+          <spirit:addressUnitBits>8</spirit:addressUnitBits>
+     </spirit:addressSpace>
+
+     <spirit:addressSpace>
+          <spirit:name>AHBLiteTarget_Master__sysio_AS</spirit:name>
+          <spirit:description>_sysio address space</spirit:description>
+          <spirit:range>4G</spirit:range>
+          <spirit:width>32</spirit:width>
+          <spirit:segments>
+             <spirit:segment>
+                <spirit:name>_sysio_0x40000000_0x5fffffff</spirit:name>
+                <spirit:addressOffset>0x40000000</spirit:addressOffset>
+                <spirit:range>0x020000000</spirit:range>
+             </spirit:segment>
+          </spirit:segments>
+          <spirit:addressUnitBits>8</spirit:addressUnitBits>
+     </spirit:addressSpace>
+
+     <spirit:addressSpace>
+          <spirit:name>AHBLiteTarget_Master__expram_l_AS</spirit:name>
+          <spirit:description>_expram_l address space</spirit:description>
+          <spirit:range>4G</spirit:range>
+          <spirit:width>32</spirit:width>
+          <spirit:segments>
+             <spirit:segment>
+                <spirit:name>_expram_l_0x80000000_0x8fffffff</spirit:name>
+                <spirit:addressOffset>0x80000000</spirit:addressOffset>
+                <spirit:range>0x010000000</spirit:range>
+             </spirit:segment>
+          </spirit:segments>
+          <spirit:addressUnitBits>8</spirit:addressUnitBits>
+     </spirit:addressSpace>
+
+     <spirit:addressSpace>
+          <spirit:name>AHBLiteTarget_Master__expram_h_AS</spirit:name>
+          <spirit:description>_expram_h address space</spirit:description>
+          <spirit:range>4G</spirit:range>
+          <spirit:width>32</spirit:width>
+          <spirit:segments>
+             <spirit:segment>
+                <spirit:name>_expram_h_0x90000000_0x9fffffff</spirit:name>
+                <spirit:addressOffset>0x90000000</spirit:addressOffset>
+                <spirit:range>0x010000000</spirit:range>
+             </spirit:segment>
+          </spirit:segments>
+          <spirit:addressUnitBits>8</spirit:addressUnitBits>
+     </spirit:addressSpace>
+
+     <spirit:addressSpace>
+          <spirit:name>AHBLiteTarget_Master__exp_AS</spirit:name>
+          <spirit:description>_exp address space</spirit:description>
+          <spirit:range>4G</spirit:range>
+          <spirit:width>32</spirit:width>
+          <spirit:segments>
+             <spirit:segment>
+                <spirit:name>_exp_0x60000000_0x7fffffff</spirit:name>
+                <spirit:addressOffset>0x60000000</spirit:addressOffset>
+                <spirit:range>0x020000000</spirit:range>
+             </spirit:segment>
+             <spirit:segment>
+                <spirit:name>_exp_0xa0000000_0xdfffffff</spirit:name>
+                <spirit:addressOffset>0xa0000000</spirit:addressOffset>
+                <spirit:range>0x040000000</spirit:range>
+             </spirit:segment>
+          </spirit:segments>
+          <spirit:addressUnitBits>8</spirit:addressUnitBits>
+     </spirit:addressSpace>
+
+     <spirit:addressSpace>
+          <spirit:name>AHBLiteTarget_Master__systable_AS</spirit:name>
+          <spirit:description>_systable address space</spirit:description>
+          <spirit:range>4G</spirit:range>
+          <spirit:width>32</spirit:width>
+          <spirit:segments>
+             <spirit:segment>
+                <spirit:name>_systable_0xf0000000_0xf003ffff</spirit:name>
+                <spirit:addressOffset>0xf0000000</spirit:addressOffset>
+                <spirit:range>0x000040000</spirit:range>
+             </spirit:segment>
+          </spirit:segments>
+          <spirit:addressUnitBits>8</spirit:addressUnitBits>
+     </spirit:addressSpace>
+
+   </spirit:addressSpaces>
+
+   <spirit:memoryMaps>
+
+      <spirit:memoryMap>
+         <spirit:name>AHBLiteTarget_Slave__socdebug_MM</spirit:name>
+         <spirit:description>_socdebug memory map</spirit:description>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__bootrom"
+                             spirit:segmentRef="_bootrom_0x10000000_0x1fffffff">
+            <!-- Address_region 0x10000000-0x1fffffff -->
+            <spirit:name>AHBLiteTarget_Master__bootrom_0x10000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x10000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__imem"
+                             spirit:segmentRef="_imem_0x20000000_0x2fffffff">
+            <!-- Address_region 0x20000000-0x2fffffff -->
+            <spirit:name>AHBLiteTarget_Master__imem_0x20000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x20000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__dmem"
+                             spirit:segmentRef="_dmem_0x30000000_0x3fffffff">
+            <!-- Address_region 0x30000000-0x3fffffff -->
+            <spirit:name>AHBLiteTarget_Master__dmem_0x30000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x30000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__sysio"
+                             spirit:segmentRef="_sysio_0x40000000_0x5fffffff">
+            <!-- Address_region 0x40000000-0x5fffffff -->
+            <spirit:name>AHBLiteTarget_Master__sysio_0x40000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x40000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__exp"
+                             spirit:segmentRef="_exp_0x60000000_0x7fffffff">
+            <!-- Address_region 0x60000000-0x7fffffff -->
+            <spirit:name>AHBLiteTarget_Master__exp_0x60000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x60000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__expram_l"
+                             spirit:segmentRef="_expram_l_0x80000000_0x8fffffff">
+            <!-- Address_region 0x80000000-0x8fffffff -->
+            <spirit:name>AHBLiteTarget_Master__expram_l_0x80000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x80000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__expram_h"
+                             spirit:segmentRef="_expram_h_0x90000000_0x9fffffff">
+            <!-- Address_region 0x90000000-0x9fffffff -->
+            <spirit:name>AHBLiteTarget_Master__expram_h_0x90000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x90000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__exp"
+                             spirit:segmentRef="_exp_0xa0000000_0xdfffffff">
+            <!-- Address_region 0xa0000000-0xdfffffff -->
+            <spirit:name>AHBLiteTarget_Master__exp_0xa0000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0xa0000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__systable"
+                             spirit:segmentRef="_systable_0xf0000000_0xf003ffff">
+            <!-- Address_region 0xf0000000-0xf003ffff -->
+            <spirit:name>AHBLiteTarget_Master__systable_0xf0000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0xf0000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:memoryRemap spirit:state="remap_0">
+            <spirit:name>AHBLiteTarget_Slave__socdebug_remap_0_remap_MM</spirit:name>
+            <spirit:description>_socdebug remap_0 remap</spirit:description>
+            <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__imem"
+                                spirit:segmentRef="_imem_0x00000000_0x0fffffff">
+               <!-- Remapped region, active when REMAP bitcombination is 0 address_region 0x00000000-0x0fffffff -->
+               <spirit:name>AHBLiteTarget_Master__imem_0x00000000_0_state_remap_0_SM</spirit:name>
+               <spirit:baseAddress>0x00000000</spirit:baseAddress>
+            </spirit:subspaceMap>
+         </spirit:memoryRemap>
+
+         <spirit:memoryRemap spirit:state="remap_n0">
+            <spirit:name>AHBLiteTarget_Slave__socdebug_remap_n0_remap_MM</spirit:name>
+            <spirit:description>_socdebug remap_n0 remap</spirit:description>
+            <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__bootrom"
+                                spirit:segmentRef="_bootrom_0x00000000_0x0fffffff">
+               <!-- Removable region, active only when REMAP bitcombination is n0 address_region 0x00000000-0x0fffffff -->
+               <spirit:name>AHBLiteTarget_Master__bootrom_0x00000000_0_state_remap_n0_SM</spirit:name>
+               <spirit:baseAddress>0x00000000</spirit:baseAddress>
+            </spirit:subspaceMap>
+         </spirit:memoryRemap>
+
+      </spirit:memoryMap>
+
+      <spirit:memoryMap>
+         <spirit:name>AHBLiteTarget_Slave__dma_0_MM</spirit:name>
+         <spirit:description>_dma_0 memory map</spirit:description>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__imem"
+                             spirit:segmentRef="_imem_0x00000000_0x0fffffff">
+            <!-- Address_region 0x00000000-0x0fffffff -->
+            <spirit:name>AHBLiteTarget_Master__imem_0x00000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x00000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__bootrom"
+                             spirit:segmentRef="_bootrom_0x10000000_0x1fffffff">
+            <!-- Address_region 0x10000000-0x1fffffff -->
+            <spirit:name>AHBLiteTarget_Master__bootrom_0x10000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x10000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__imem"
+                             spirit:segmentRef="_imem_0x20000000_0x2fffffff">
+            <!-- Address_region 0x20000000-0x2fffffff -->
+            <spirit:name>AHBLiteTarget_Master__imem_0x20000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x20000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__dmem"
+                             spirit:segmentRef="_dmem_0x30000000_0x3fffffff">
+            <!-- Address_region 0x30000000-0x3fffffff -->
+            <spirit:name>AHBLiteTarget_Master__dmem_0x30000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x30000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__sysio"
+                             spirit:segmentRef="_sysio_0x40000000_0x5fffffff">
+            <!-- Address_region 0x40000000-0x5fffffff -->
+            <spirit:name>AHBLiteTarget_Master__sysio_0x40000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x40000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__exp"
+                             spirit:segmentRef="_exp_0x60000000_0x7fffffff">
+            <!-- Address_region 0x60000000-0x7fffffff -->
+            <spirit:name>AHBLiteTarget_Master__exp_0x60000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x60000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__expram_l"
+                             spirit:segmentRef="_expram_l_0x80000000_0x8fffffff">
+            <!-- Address_region 0x80000000-0x8fffffff -->
+            <spirit:name>AHBLiteTarget_Master__expram_l_0x80000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x80000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__expram_h"
+                             spirit:segmentRef="_expram_h_0x90000000_0x9fffffff">
+            <!-- Address_region 0x90000000-0x9fffffff -->
+            <spirit:name>AHBLiteTarget_Master__expram_h_0x90000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x90000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__exp"
+                             spirit:segmentRef="_exp_0xa0000000_0xdfffffff">
+            <!-- Address_region 0xa0000000-0xdfffffff -->
+            <spirit:name>AHBLiteTarget_Master__exp_0xa0000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0xa0000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+      </spirit:memoryMap>
+
+      <spirit:memoryMap>
+         <spirit:name>AHBLiteTarget_Slave__dma_1_MM</spirit:name>
+         <spirit:description>_dma_1 memory map</spirit:description>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__imem"
+                             spirit:segmentRef="_imem_0x00000000_0x0fffffff">
+            <!-- Address_region 0x00000000-0x0fffffff -->
+            <spirit:name>AHBLiteTarget_Master__imem_0x00000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x00000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__bootrom"
+                             spirit:segmentRef="_bootrom_0x10000000_0x1fffffff">
+            <!-- Address_region 0x10000000-0x1fffffff -->
+            <spirit:name>AHBLiteTarget_Master__bootrom_0x10000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x10000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__imem"
+                             spirit:segmentRef="_imem_0x20000000_0x2fffffff">
+            <!-- Address_region 0x20000000-0x2fffffff -->
+            <spirit:name>AHBLiteTarget_Master__imem_0x20000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x20000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__dmem"
+                             spirit:segmentRef="_dmem_0x30000000_0x3fffffff">
+            <!-- Address_region 0x30000000-0x3fffffff -->
+            <spirit:name>AHBLiteTarget_Master__dmem_0x30000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x30000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__sysio"
+                             spirit:segmentRef="_sysio_0x40000000_0x5fffffff">
+            <!-- Address_region 0x40000000-0x5fffffff -->
+            <spirit:name>AHBLiteTarget_Master__sysio_0x40000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x40000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__exp"
+                             spirit:segmentRef="_exp_0x60000000_0x7fffffff">
+            <!-- Address_region 0x60000000-0x7fffffff -->
+            <spirit:name>AHBLiteTarget_Master__exp_0x60000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x60000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__expram_l"
+                             spirit:segmentRef="_expram_l_0x80000000_0x8fffffff">
+            <!-- Address_region 0x80000000-0x8fffffff -->
+            <spirit:name>AHBLiteTarget_Master__expram_l_0x80000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x80000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__expram_h"
+                             spirit:segmentRef="_expram_h_0x90000000_0x9fffffff">
+            <!-- Address_region 0x90000000-0x9fffffff -->
+            <spirit:name>AHBLiteTarget_Master__expram_h_0x90000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x90000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__exp"
+                             spirit:segmentRef="_exp_0xa0000000_0xdfffffff">
+            <!-- Address_region 0xa0000000-0xdfffffff -->
+            <spirit:name>AHBLiteTarget_Master__exp_0xa0000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0xa0000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+      </spirit:memoryMap>
+
+      <spirit:memoryMap>
+         <spirit:name>AHBLiteTarget_Slave__cpu_MM</spirit:name>
+         <spirit:description>_cpu memory map</spirit:description>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__bootrom"
+                             spirit:segmentRef="_bootrom_0x10000000_0x1fffffff">
+            <!-- Address_region 0x10000000-0x1fffffff -->
+            <spirit:name>AHBLiteTarget_Master__bootrom_0x10000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x10000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__imem"
+                             spirit:segmentRef="_imem_0x20000000_0x2fffffff">
+            <!-- Address_region 0x20000000-0x2fffffff -->
+            <spirit:name>AHBLiteTarget_Master__imem_0x20000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x20000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__dmem"
+                             spirit:segmentRef="_dmem_0x30000000_0x3fffffff">
+            <!-- Address_region 0x30000000-0x3fffffff -->
+            <spirit:name>AHBLiteTarget_Master__dmem_0x30000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x30000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__sysio"
+                             spirit:segmentRef="_sysio_0x40000000_0x5fffffff">
+            <!-- Address_region 0x40000000-0x5fffffff -->
+            <spirit:name>AHBLiteTarget_Master__sysio_0x40000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x40000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__exp"
+                             spirit:segmentRef="_exp_0x60000000_0x7fffffff">
+            <!-- Address_region 0x60000000-0x7fffffff -->
+            <spirit:name>AHBLiteTarget_Master__exp_0x60000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x60000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__expram_l"
+                             spirit:segmentRef="_expram_l_0x80000000_0x8fffffff">
+            <!-- Address_region 0x80000000-0x8fffffff -->
+            <spirit:name>AHBLiteTarget_Master__expram_l_0x80000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x80000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__expram_h"
+                             spirit:segmentRef="_expram_h_0x90000000_0x9fffffff">
+            <!-- Address_region 0x90000000-0x9fffffff -->
+            <spirit:name>AHBLiteTarget_Master__expram_h_0x90000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x90000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__exp"
+                             spirit:segmentRef="_exp_0xa0000000_0xdfffffff">
+            <!-- Address_region 0xa0000000-0xdfffffff -->
+            <spirit:name>AHBLiteTarget_Master__exp_0xa0000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0xa0000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__systable"
+                             spirit:segmentRef="_systable_0xf0000000_0xf003ffff">
+            <!-- Address_region 0xf0000000-0xf003ffff -->
+            <spirit:name>AHBLiteTarget_Master__systable_0xf0000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0xf0000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:memoryRemap spirit:state="remap_0">
+            <spirit:name>AHBLiteTarget_Slave__cpu_remap_0_remap_MM</spirit:name>
+            <spirit:description>_cpu remap_0 remap</spirit:description>
+            <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__imem"
+                                spirit:segmentRef="_imem_0x00000000_0x0fffffff">
+               <!-- Remapped region, active when REMAP bitcombination is 0 address_region 0x00000000-0x0fffffff -->
+               <spirit:name>AHBLiteTarget_Master__imem_0x00000000_0_state_remap_0_SM</spirit:name>
+               <spirit:baseAddress>0x00000000</spirit:baseAddress>
+            </spirit:subspaceMap>
+         </spirit:memoryRemap>
+
+         <spirit:memoryRemap spirit:state="remap_n0">
+            <spirit:name>AHBLiteTarget_Slave__cpu_remap_n0_remap_MM</spirit:name>
+            <spirit:description>_cpu remap_n0 remap</spirit:description>
+            <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__bootrom"
+                                spirit:segmentRef="_bootrom_0x00000000_0x0fffffff">
+               <!-- Removable region, active only when REMAP bitcombination is n0 address_region 0x00000000-0x0fffffff -->
+               <spirit:name>AHBLiteTarget_Master__bootrom_0x00000000_0_state_remap_n0_SM</spirit:name>
+               <spirit:baseAddress>0x00000000</spirit:baseAddress>
+            </spirit:subspaceMap>
+         </spirit:memoryRemap>
+
+      </spirit:memoryMap>
+
+   </spirit:memoryMaps>
+
+
+   <spirit:model>
+      <spirit:views>
+         <spirit:view>
+            <spirit:name>verilogsource</spirit:name>
+            <spirit:description>nanosoc_busmatrix bus matrix</spirit:description>
+            <spirit:envIdentifier>:*Simulation:</spirit:envIdentifier>
+            <spirit:envIdentifier>:*Synthesis:</spirit:envIdentifier>
+            <spirit:language>verilog</spirit:language>
+            <spirit:modelName>nanosoc_busmatrix</spirit:modelName>
+            <spirit:fileSetRef>
+               <spirit:localName>fs-verilogsource</spirit:localName>
+            </spirit:fileSetRef>
+         </spirit:view>
+      </spirit:views>
+
+      <spirit:ports>
+
+         <!-- Common clock and reset -->
+
+         <spirit:port>
+            <spirit:name>HCLK</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRESETn</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+
+         <!-- Remap port -->
+         <spirit:port>
+            <spirit:name>REMAP</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+               <spirit:vector>
+                  <spirit:left>3</spirit:left>
+                  <spirit:right>0</spirit:right>
+               </spirit:vector>
+               <spirit:driver>
+                  <spirit:defaultValue>0</spirit:defaultValue>
+               </spirit:driver>
+            </spirit:wire>
+         </spirit:port>
+
+          <!-- Input signals of Slave interfaces -->
+
+         <spirit:port>
+            <spirit:name>HSEL_socdebug</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HADDR_socdebug</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>HTRANS_socdebug</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>HWRITE_socdebug</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSIZE_socdebug</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</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_socdebug</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+               <spirit:vector>
+                  <spirit:left>2</spirit:left>
+                  <spirit:right>0</spirit:right>
+               </spirit:vector>
+               <spirit:driver>
+                  <spirit:defaultValue>0</spirit:defaultValue>
+               </spirit:driver>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HPROT_socdebug</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</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_socdebug</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+               <spirit:vector>
+                  <spirit:left>3</spirit:left>
+                  <spirit:right>0</spirit:right>
+               </spirit:vector>
+               <spirit:driver>
+                  <spirit:defaultValue>0</spirit:defaultValue>
+               </spirit:driver>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HWDATA_socdebug</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>HMASTLOCK_socdebug</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HREADY_socdebug</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+
+         <spirit:port>
+            <spirit:name>HSEL_dma_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HADDR_dma_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>HTRANS_dma_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>HWRITE_dma_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSIZE_dma_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</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_dma_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+               <spirit:vector>
+                  <spirit:left>2</spirit:left>
+                  <spirit:right>0</spirit:right>
+               </spirit:vector>
+               <spirit:driver>
+                  <spirit:defaultValue>0</spirit:defaultValue>
+               </spirit:driver>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HPROT_dma_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</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_dma_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+               <spirit:vector>
+                  <spirit:left>3</spirit:left>
+                  <spirit:right>0</spirit:right>
+               </spirit:vector>
+               <spirit:driver>
+                  <spirit:defaultValue>1</spirit:defaultValue>
+               </spirit:driver>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HWDATA_dma_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>HMASTLOCK_dma_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HREADY_dma_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+
+         <spirit:port>
+            <spirit:name>HSEL_dma_1</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HADDR_dma_1</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>HTRANS_dma_1</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>HWRITE_dma_1</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSIZE_dma_1</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</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_dma_1</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+               <spirit:vector>
+                  <spirit:left>2</spirit:left>
+                  <spirit:right>0</spirit:right>
+               </spirit:vector>
+               <spirit:driver>
+                  <spirit:defaultValue>0</spirit:defaultValue>
+               </spirit:driver>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HPROT_dma_1</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</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_dma_1</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+               <spirit:vector>
+                  <spirit:left>3</spirit:left>
+                  <spirit:right>0</spirit:right>
+               </spirit:vector>
+               <spirit:driver>
+                  <spirit:defaultValue>2</spirit:defaultValue>
+               </spirit:driver>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HWDATA_dma_1</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>HMASTLOCK_dma_1</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HREADY_dma_1</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+
+         <spirit:port>
+            <spirit:name>HSEL_cpu</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HADDR_cpu</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>HTRANS_cpu</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>HWRITE_cpu</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSIZE_cpu</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</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_cpu</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+               <spirit:vector>
+                  <spirit:left>2</spirit:left>
+                  <spirit:right>0</spirit:right>
+               </spirit:vector>
+               <spirit:driver>
+                  <spirit:defaultValue>0</spirit:defaultValue>
+               </spirit:driver>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HPROT_cpu</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</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_cpu</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+               <spirit:vector>
+                  <spirit:left>3</spirit:left>
+                  <spirit:right>0</spirit:right>
+               </spirit:vector>
+               <spirit:driver>
+                  <spirit:defaultValue>3</spirit:defaultValue>
+               </spirit:driver>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HWDATA_cpu</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>HMASTLOCK_cpu</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HREADY_cpu</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+
+
+         <!-- Input signals of Master interfaces -->
+
+         <spirit:port>
+            <spirit:name>HRDATA_bootrom</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_bootrom</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRESP_bootrom</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</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_imem</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRESP_imem</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_dmem</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_dmem</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRESP_dmem</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_sysio</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_sysio</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRESP_sysio</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_expram_l</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_expram_l</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRESP_expram_l</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_expram_h</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_expram_h</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRESP_expram_h</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_exp</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_exp</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRESP_exp</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_systable</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_systable</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRESP_systable</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>
+
+         <!-- Scan test dummy signals; not connected until scan insertion -->
+
+         <spirit:port>
+            <spirit:name>SCANENABLE</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>SCANINHCLK</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+
+         <!-- Output signals of Master interfaces -->
+
+         <spirit:port>
+            <spirit:name>HSEL_bootrom</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HADDR_bootrom</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_bootrom</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_bootrom</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSIZE_bootrom</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_bootrom</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_bootrom</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_bootrom</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_bootrom</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_bootrom</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HREADYMUX_bootrom</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSEL_imem</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HADDR_imem</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_imem</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_imem</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSIZE_imem</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_imem</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_imem</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_imem</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_imem</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_imem</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HREADYMUX_imem</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSEL_dmem</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HADDR_dmem</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_dmem</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_dmem</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSIZE_dmem</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_dmem</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_dmem</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_dmem</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_dmem</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_dmem</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HREADYMUX_dmem</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSEL_sysio</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HADDR_sysio</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_sysio</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_sysio</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSIZE_sysio</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_sysio</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_sysio</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_sysio</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_sysio</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_sysio</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HREADYMUX_sysio</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSEL_expram_l</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HADDR_expram_l</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_expram_l</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_expram_l</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSIZE_expram_l</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_expram_l</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_expram_l</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_expram_l</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_expram_l</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_expram_l</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HREADYMUX_expram_l</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSEL_expram_h</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HADDR_expram_h</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_expram_h</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_expram_h</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSIZE_expram_h</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_expram_h</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_expram_h</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_expram_h</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_expram_h</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_expram_h</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HREADYMUX_expram_h</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSEL_exp</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HADDR_exp</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_exp</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_exp</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSIZE_exp</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_exp</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_exp</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_exp</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_exp</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_exp</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HREADYMUX_exp</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSEL_systable</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HADDR_systable</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_systable</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_systable</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSIZE_systable</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_systable</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_systable</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_systable</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_systable</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_systable</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HREADYMUX_systable</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+
+         <!-- Output signals of Slave interfaces -->
+
+         <spirit:port>
+            <spirit:name>HRDATA_socdebug</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>HREADYOUT_socdebug</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRESP_socdebug</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>HRDATA_dma_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>HREADYOUT_dma_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRESP_dma_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>HRDATA_dma_1</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>HREADYOUT_dma_1</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRESP_dma_1</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>HRDATA_cpu</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>HREADYOUT_cpu</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRESP_cpu</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>
+
+         <!-- Scan test dummy signals; not connected until scan insertion -->
+
+         <spirit:port>
+            <spirit:name>SCANOUTHCLK</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+     </spirit:ports>
+   </spirit:model>
+
+   <spirit:fileSets>
+      <spirit:fileSet>
+         <spirit:name>fs-verilogsource</spirit:name>
+         <spirit:displayName/>
+         <spirit:description>File list for nanosoc_busmatrix</spirit:description>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_busmatrix.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+            <spirit:isIncludeFile spirit:externalDeclarations="true">false</spirit:isIncludeFile>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_busmatrix_default_slave.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_inititator_input.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_matrix_decode_socdebug.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_matrix_decode_dma_0.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_matrix_decode_dma_1.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_matrix_decode_cpu.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_arbiter_bootrom.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_arbiter_imem.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_arbiter_dmem.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_arbiter_sysio.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_arbiter_expram_l.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_arbiter_expram_h.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_arbiter_exp.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_arbiter_systable.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_target_output_bootrom.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_target_output_imem.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_target_output_dmem.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_target_output_sysio.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_target_output_expram_l.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_target_output_expram_h.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_target_output_exp.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_target_output_systable.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+      </spirit:fileSet>
+   </spirit:fileSets>
+
+   <spirit:description>nanosoc_busmatrix</spirit:description>
+
+</spirit:component>
diff --git a/system/src/nanosoc_busmatrix/ipxact/nanosoc_busmatrix/nanosoc_busmatrix_lite.xml b/system/src/nanosoc_busmatrix/ipxact/nanosoc_busmatrix/nanosoc_busmatrix_lite.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d20bd2e684569d45f35e6934bf4330ca6405531a
--- /dev/null
+++ b/system/src/nanosoc_busmatrix/ipxact/nanosoc_busmatrix/nanosoc_busmatrix_lite.xml
@@ -0,0 +1,3619 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
+<!--    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-2017 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  -->
+<!--                                                                                -->
+<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
+<!--  Purpose  : IP-XACT description for the AHB-Lite wrapper of nanosoc_busmatrix_lite     -->
+<!--                                                                                -->
+<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    -->
+
+<spirit:component xmlns:spirit="http://www.spiritconsortium.org/XMLSchema/SPIRIT/1685-2009"
+                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                  xsi:schemaLocation="http://www.spiritconsortium.org/XMLSchema/SPIRIT/1685-2009 http://www.spiritconsortium.org/XMLSchema/SPIRIT/1685-2009/index.xsd">
+   <spirit:vendor>arm.com</spirit:vendor>
+   <spirit:library>CoreLink</spirit:library>
+   <spirit:name>nanosoc_busmatrix_lite</spirit:name>
+   <spirit:version>r0p0_0</spirit:version>
+
+   <spirit:busInterfaces>
+
+      <!--Slave interfaces -->
+
+      <spirit:busInterface>
+         <spirit:name>AHBLiteInitiator_Slave__socdebug</spirit:name>
+         <spirit:description>Slave port _socdebug</spirit:description>
+         <spirit:busType spirit:library="AMBA3" spirit:name="AHBLiteInitiator" spirit:vendor="amba.com" spirit:version="r2p0_0"/>
+         <spirit:abstractionType spirit:library="AMBA3" spirit:name="AHBLiteInitiator_rtl" spirit:vendor="amba.com" spirit:version="r2p0_0"/>
+         <spirit:slave>
+            <spirit:memoryMapRef spirit:memoryMapRef="AHBLiteInitiator_Slave__socdebug_MM"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__bootrom" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__imem" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__dmem" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__sysio" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__expram_l" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__expram_h" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__exp" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__systable" spirit:opaque="true"/>
+         </spirit:slave>
+
+         <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>
+            <!--  Inputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HADDR</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HADDR_socdebug</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HTRANS</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HTRANS_socdebug</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWRITE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWRITE_socdebug</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HSIZE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HSIZE_socdebug</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HBURST</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HBURST_socdebug</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HPROT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HPROT_socdebug</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWDATA_socdebug</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HMASTLOCK</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HMASTLOCK_socdebug</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!--  Outputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRDATA_socdebug</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADY</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADY_socdebug</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRESP</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRESP_socdebug</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+         </spirit:portMaps>
+      </spirit:busInterface>
+
+      <spirit:busInterface>
+         <spirit:name>AHBLiteInitiator_Slave__dma_0</spirit:name>
+         <spirit:description>Slave port _dma_0</spirit:description>
+         <spirit:busType spirit:library="AMBA3" spirit:name="AHBLiteInitiator" spirit:vendor="amba.com" spirit:version="r2p0_0"/>
+         <spirit:abstractionType spirit:library="AMBA3" spirit:name="AHBLiteInitiator_rtl" spirit:vendor="amba.com" spirit:version="r2p0_0"/>
+         <spirit:slave>
+            <spirit:memoryMapRef spirit:memoryMapRef="AHBLiteInitiator_Slave__dma_0_MM"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__bootrom" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__imem" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__dmem" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__sysio" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__expram_l" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__expram_h" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__exp" spirit:opaque="true"/>
+         </spirit:slave>
+
+         <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>
+            <!--  Inputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HADDR</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HADDR_dma_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HTRANS</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HTRANS_dma_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWRITE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWRITE_dma_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HSIZE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HSIZE_dma_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HBURST</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HBURST_dma_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HPROT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HPROT_dma_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWDATA_dma_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HMASTLOCK</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HMASTLOCK_dma_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!--  Outputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRDATA_dma_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADY</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADY_dma_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRESP</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRESP_dma_0</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+         </spirit:portMaps>
+      </spirit:busInterface>
+
+      <spirit:busInterface>
+         <spirit:name>AHBLiteInitiator_Slave__dma_1</spirit:name>
+         <spirit:description>Slave port _dma_1</spirit:description>
+         <spirit:busType spirit:library="AMBA3" spirit:name="AHBLiteInitiator" spirit:vendor="amba.com" spirit:version="r2p0_0"/>
+         <spirit:abstractionType spirit:library="AMBA3" spirit:name="AHBLiteInitiator_rtl" spirit:vendor="amba.com" spirit:version="r2p0_0"/>
+         <spirit:slave>
+            <spirit:memoryMapRef spirit:memoryMapRef="AHBLiteInitiator_Slave__dma_1_MM"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__bootrom" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__imem" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__dmem" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__sysio" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__expram_l" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__expram_h" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__exp" spirit:opaque="true"/>
+         </spirit:slave>
+
+         <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>
+            <!--  Inputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HADDR</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HADDR_dma_1</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HTRANS</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HTRANS_dma_1</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWRITE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWRITE_dma_1</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HSIZE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HSIZE_dma_1</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HBURST</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HBURST_dma_1</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HPROT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HPROT_dma_1</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWDATA_dma_1</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HMASTLOCK</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HMASTLOCK_dma_1</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!--  Outputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRDATA_dma_1</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADY</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADY_dma_1</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRESP</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRESP_dma_1</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+         </spirit:portMaps>
+      </spirit:busInterface>
+
+      <spirit:busInterface>
+         <spirit:name>AHBLiteInitiator_Slave__cpu</spirit:name>
+         <spirit:description>Slave port _cpu</spirit:description>
+         <spirit:busType spirit:library="AMBA3" spirit:name="AHBLiteInitiator" spirit:vendor="amba.com" spirit:version="r2p0_0"/>
+         <spirit:abstractionType spirit:library="AMBA3" spirit:name="AHBLiteInitiator_rtl" spirit:vendor="amba.com" spirit:version="r2p0_0"/>
+         <spirit:slave>
+            <spirit:memoryMapRef spirit:memoryMapRef="AHBLiteInitiator_Slave__cpu_MM"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__bootrom" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__imem" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__dmem" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__sysio" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__expram_l" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__expram_h" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__exp" spirit:opaque="true"/>
+            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master__systable" spirit:opaque="true"/>
+         </spirit:slave>
+
+         <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>
+            <!--  Inputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HADDR</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HADDR_cpu</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HTRANS</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HTRANS_cpu</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWRITE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWRITE_cpu</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HSIZE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HSIZE_cpu</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HBURST</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HBURST_cpu</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HPROT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HPROT_cpu</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWDATA_cpu</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HMASTLOCK</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HMASTLOCK_cpu</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!--  Outputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRDATA_cpu</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADY</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADY_cpu</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRESP</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRESP_cpu</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+         </spirit:portMaps>
+      </spirit:busInterface>
+
+        <!--Master interfaces -->
+
+      <spirit:busInterface>
+         <spirit:name>AHBLiteTarget_Master__bootrom</spirit:name>
+         <spirit:description>Master port _bootrom</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__bootrom_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_bootrom</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HADDR</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HADDR_bootrom</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HTRANS</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HTRANS_bootrom</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWRITE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWRITE_bootrom</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HSIZE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HSIZE_bootrom</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HBURST</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HBURST_bootrom</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HPROT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HPROT_bootrom</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWDATA_bootrom</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HMASTLOCK</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HMASTLOCK_bootrom</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADY</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYMUX_bootrom</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!--  Inputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRDATA_bootrom</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADYOUT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYOUT_bootrom</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRESP</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRESP_bootrom</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+         </spirit:portMaps>
+      </spirit:busInterface>
+
+      <spirit:busInterface>
+         <spirit:name>AHBLiteTarget_Master__imem</spirit:name>
+         <spirit:description>Master port _imem</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__imem_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_imem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HADDR</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HADDR_imem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HTRANS</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HTRANS_imem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWRITE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWRITE_imem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HSIZE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HSIZE_imem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HBURST</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HBURST_imem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HPROT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HPROT_imem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWDATA_imem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HMASTLOCK</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HMASTLOCK_imem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADY</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYMUX_imem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!--  Inputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRDATA_imem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADYOUT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYOUT_imem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRESP</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRESP_imem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+         </spirit:portMaps>
+      </spirit:busInterface>
+
+      <spirit:busInterface>
+         <spirit:name>AHBLiteTarget_Master__dmem</spirit:name>
+         <spirit:description>Master port _dmem</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__dmem_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_dmem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HADDR</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HADDR_dmem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HTRANS</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HTRANS_dmem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWRITE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWRITE_dmem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HSIZE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HSIZE_dmem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HBURST</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HBURST_dmem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HPROT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HPROT_dmem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWDATA_dmem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HMASTLOCK</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HMASTLOCK_dmem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADY</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYMUX_dmem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!--  Inputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRDATA_dmem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADYOUT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYOUT_dmem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRESP</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRESP_dmem</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+         </spirit:portMaps>
+      </spirit:busInterface>
+
+      <spirit:busInterface>
+         <spirit:name>AHBLiteTarget_Master__sysio</spirit:name>
+         <spirit:description>Master port _sysio</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__sysio_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_sysio</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HADDR</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HADDR_sysio</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HTRANS</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HTRANS_sysio</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWRITE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWRITE_sysio</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HSIZE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HSIZE_sysio</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HBURST</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HBURST_sysio</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HPROT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HPROT_sysio</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWDATA_sysio</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HMASTLOCK</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HMASTLOCK_sysio</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADY</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYMUX_sysio</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!--  Inputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRDATA_sysio</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADYOUT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYOUT_sysio</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRESP</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRESP_sysio</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+         </spirit:portMaps>
+      </spirit:busInterface>
+
+      <spirit:busInterface>
+         <spirit:name>AHBLiteTarget_Master__expram_l</spirit:name>
+         <spirit:description>Master port _expram_l</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__expram_l_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_expram_l</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HADDR</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HADDR_expram_l</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HTRANS</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HTRANS_expram_l</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWRITE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWRITE_expram_l</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HSIZE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HSIZE_expram_l</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HBURST</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HBURST_expram_l</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HPROT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HPROT_expram_l</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWDATA_expram_l</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HMASTLOCK</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HMASTLOCK_expram_l</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADY</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYMUX_expram_l</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!--  Inputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRDATA_expram_l</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADYOUT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYOUT_expram_l</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRESP</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRESP_expram_l</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+         </spirit:portMaps>
+      </spirit:busInterface>
+
+      <spirit:busInterface>
+         <spirit:name>AHBLiteTarget_Master__expram_h</spirit:name>
+         <spirit:description>Master port _expram_h</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__expram_h_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_expram_h</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HADDR</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HADDR_expram_h</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HTRANS</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HTRANS_expram_h</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWRITE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWRITE_expram_h</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HSIZE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HSIZE_expram_h</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HBURST</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HBURST_expram_h</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HPROT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HPROT_expram_h</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWDATA_expram_h</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HMASTLOCK</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HMASTLOCK_expram_h</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADY</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYMUX_expram_h</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!--  Inputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRDATA_expram_h</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADYOUT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYOUT_expram_h</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRESP</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRESP_expram_h</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+         </spirit:portMaps>
+      </spirit:busInterface>
+
+      <spirit:busInterface>
+         <spirit:name>AHBLiteTarget_Master__exp</spirit:name>
+         <spirit:description>Master port _exp</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__exp_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_exp</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HADDR</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HADDR_exp</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HTRANS</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HTRANS_exp</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWRITE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWRITE_exp</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HSIZE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HSIZE_exp</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HBURST</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HBURST_exp</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HPROT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HPROT_exp</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWDATA_exp</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HMASTLOCK</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HMASTLOCK_exp</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADY</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYMUX_exp</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!--  Inputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRDATA_exp</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADYOUT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYOUT_exp</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRESP</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRESP_exp</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+         </spirit:portMaps>
+      </spirit:busInterface>
+
+      <spirit:busInterface>
+         <spirit:name>AHBLiteTarget_Master__systable</spirit:name>
+         <spirit:description>Master port _systable</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__systable_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_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HADDR</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HADDR_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HTRANS</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HTRANS_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWRITE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWRITE_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HSIZE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HSIZE_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HBURST</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HBURST_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HPROT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HPROT_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HWDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HWDATA_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HMASTLOCK</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HMASTLOCK_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADY</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYMUX_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <!--  Inputs -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRDATA</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRDATA_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HREADYOUT</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HREADYOUT_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>HRESP</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRESP_systable</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+         </spirit:portMaps>
+      </spirit:busInterface>
+
+      <!--Scan test dummy signals -->
+      <spirit:busInterface>
+         <spirit:name>DFTInterface_Slave</spirit:name>
+         <spirit:description>Scan test dummy signals, not connected until scan insertion</spirit:description>
+         <spirit:busType spirit:library="generic" spirit:name="DFTInterface" spirit:vendor="arm.com" spirit:version="r0p0_1"/>
+         <spirit:abstractionType spirit:library="generic" spirit:name="DFTInterface_rtl" spirit:vendor="arm.com" spirit:version="r0p0_1"/>
+         <spirit:slave/>
+         <spirit:portMaps>
+
+            <!--  Clock/reset -->
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>CLK</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HCLK</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>RESETn</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>HRESETn</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>DFTSCANMODE</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>SCANENABLE</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>DFTSI</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>SCANINHCLK</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+            <spirit:portMap>
+               <spirit:logicalPort>
+                 <spirit:name>DFTSO</spirit:name>
+               </spirit:logicalPort>
+               <spirit:physicalPort>
+                 <spirit:name>SCANOUTHCLK</spirit:name>
+               </spirit:physicalPort>
+            </spirit:portMap>
+         </spirit:portMaps>
+      </spirit:busInterface>
+
+   </spirit:busInterfaces>
+
+   <spirit:remapStates>
+
+      <spirit:remapState>
+          <spirit:name>remap_0</spirit:name>
+          <spirit:description>Remap state remap_0</spirit:description>
+          <spirit:remapPorts>
+             <spirit:remapPort spirit:portNameRef="REMAP" spirit:portIndex="0">1</spirit:remapPort>
+          </spirit:remapPorts>
+      </spirit:remapState>
+      <spirit:remapState>
+          <spirit:name>remap_n0</spirit:name>
+          <spirit:description>Remap state remap_n0</spirit:description>
+          <spirit:remapPorts>
+             <spirit:remapPort spirit:portNameRef="REMAP" spirit:portIndex="0">0</spirit:remapPort>
+          </spirit:remapPorts>
+      </spirit:remapState>
+
+   </spirit:remapStates>
+
+   <spirit:addressSpaces>
+
+     <spirit:addressSpace>
+          <spirit:name>AHBLiteTarget_Master__bootrom_AS</spirit:name>
+          <spirit:description>_bootrom address space</spirit:description>
+          <spirit:range>4G</spirit:range>
+          <spirit:width>32</spirit:width>
+          <spirit:segments>
+             <spirit:segment>
+                <spirit:name>_bootrom_0x00000000_0x0fffffff</spirit:name>
+                <spirit:addressOffset>0x00000000</spirit:addressOffset>
+                <spirit:range>0x010000000</spirit:range>
+             </spirit:segment>
+             <spirit:segment>
+                <spirit:name>_bootrom_0x10000000_0x1fffffff</spirit:name>
+                <spirit:addressOffset>0x10000000</spirit:addressOffset>
+                <spirit:range>0x010000000</spirit:range>
+             </spirit:segment>
+          </spirit:segments>
+          <spirit:addressUnitBits>8</spirit:addressUnitBits>
+     </spirit:addressSpace>
+
+     <spirit:addressSpace>
+          <spirit:name>AHBLiteTarget_Master__imem_AS</spirit:name>
+          <spirit:description>_imem address space</spirit:description>
+          <spirit:range>4G</spirit:range>
+          <spirit:width>32</spirit:width>
+          <spirit:segments>
+             <spirit:segment>
+                <spirit:name>_imem_0x00000000_0x0fffffff</spirit:name>
+                <spirit:addressOffset>0x00000000</spirit:addressOffset>
+                <spirit:range>0x010000000</spirit:range>
+             </spirit:segment>
+             <spirit:segment>
+                <spirit:name>_imem_0x20000000_0x2fffffff</spirit:name>
+                <spirit:addressOffset>0x20000000</spirit:addressOffset>
+                <spirit:range>0x010000000</spirit:range>
+             </spirit:segment>
+          </spirit:segments>
+          <spirit:addressUnitBits>8</spirit:addressUnitBits>
+     </spirit:addressSpace>
+
+     <spirit:addressSpace>
+          <spirit:name>AHBLiteTarget_Master__dmem_AS</spirit:name>
+          <spirit:description>_dmem address space</spirit:description>
+          <spirit:range>4G</spirit:range>
+          <spirit:width>32</spirit:width>
+          <spirit:segments>
+             <spirit:segment>
+                <spirit:name>_dmem_0x30000000_0x3fffffff</spirit:name>
+                <spirit:addressOffset>0x30000000</spirit:addressOffset>
+                <spirit:range>0x010000000</spirit:range>
+             </spirit:segment>
+          </spirit:segments>
+          <spirit:addressUnitBits>8</spirit:addressUnitBits>
+     </spirit:addressSpace>
+
+     <spirit:addressSpace>
+          <spirit:name>AHBLiteTarget_Master__sysio_AS</spirit:name>
+          <spirit:description>_sysio address space</spirit:description>
+          <spirit:range>4G</spirit:range>
+          <spirit:width>32</spirit:width>
+          <spirit:segments>
+             <spirit:segment>
+                <spirit:name>_sysio_0x40000000_0x5fffffff</spirit:name>
+                <spirit:addressOffset>0x40000000</spirit:addressOffset>
+                <spirit:range>0x020000000</spirit:range>
+             </spirit:segment>
+          </spirit:segments>
+          <spirit:addressUnitBits>8</spirit:addressUnitBits>
+     </spirit:addressSpace>
+
+     <spirit:addressSpace>
+          <spirit:name>AHBLiteTarget_Master__expram_l_AS</spirit:name>
+          <spirit:description>_expram_l address space</spirit:description>
+          <spirit:range>4G</spirit:range>
+          <spirit:width>32</spirit:width>
+          <spirit:segments>
+             <spirit:segment>
+                <spirit:name>_expram_l_0x80000000_0x8fffffff</spirit:name>
+                <spirit:addressOffset>0x80000000</spirit:addressOffset>
+                <spirit:range>0x010000000</spirit:range>
+             </spirit:segment>
+          </spirit:segments>
+          <spirit:addressUnitBits>8</spirit:addressUnitBits>
+     </spirit:addressSpace>
+
+     <spirit:addressSpace>
+          <spirit:name>AHBLiteTarget_Master__expram_h_AS</spirit:name>
+          <spirit:description>_expram_h address space</spirit:description>
+          <spirit:range>4G</spirit:range>
+          <spirit:width>32</spirit:width>
+          <spirit:segments>
+             <spirit:segment>
+                <spirit:name>_expram_h_0x90000000_0x9fffffff</spirit:name>
+                <spirit:addressOffset>0x90000000</spirit:addressOffset>
+                <spirit:range>0x010000000</spirit:range>
+             </spirit:segment>
+          </spirit:segments>
+          <spirit:addressUnitBits>8</spirit:addressUnitBits>
+     </spirit:addressSpace>
+
+     <spirit:addressSpace>
+          <spirit:name>AHBLiteTarget_Master__exp_AS</spirit:name>
+          <spirit:description>_exp address space</spirit:description>
+          <spirit:range>4G</spirit:range>
+          <spirit:width>32</spirit:width>
+          <spirit:segments>
+             <spirit:segment>
+                <spirit:name>_exp_0x60000000_0x7fffffff</spirit:name>
+                <spirit:addressOffset>0x60000000</spirit:addressOffset>
+                <spirit:range>0x020000000</spirit:range>
+             </spirit:segment>
+             <spirit:segment>
+                <spirit:name>_exp_0xa0000000_0xdfffffff</spirit:name>
+                <spirit:addressOffset>0xa0000000</spirit:addressOffset>
+                <spirit:range>0x040000000</spirit:range>
+             </spirit:segment>
+          </spirit:segments>
+          <spirit:addressUnitBits>8</spirit:addressUnitBits>
+     </spirit:addressSpace>
+
+     <spirit:addressSpace>
+          <spirit:name>AHBLiteTarget_Master__systable_AS</spirit:name>
+          <spirit:description>_systable address space</spirit:description>
+          <spirit:range>4G</spirit:range>
+          <spirit:width>32</spirit:width>
+          <spirit:segments>
+             <spirit:segment>
+                <spirit:name>_systable_0xf0000000_0xf003ffff</spirit:name>
+                <spirit:addressOffset>0xf0000000</spirit:addressOffset>
+                <spirit:range>0x000040000</spirit:range>
+             </spirit:segment>
+          </spirit:segments>
+          <spirit:addressUnitBits>8</spirit:addressUnitBits>
+     </spirit:addressSpace>
+
+   </spirit:addressSpaces>
+
+   <spirit:memoryMaps>
+
+      <spirit:memoryMap>
+         <spirit:name>AHBLiteInitiator_Slave__socdebug_MM</spirit:name>
+         <spirit:description>_socdebug memory map</spirit:description>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__bootrom"
+                             spirit:segmentRef="_bootrom_0x10000000_0x1fffffff">
+            <!-- Address_region 0x10000000-0x1fffffff -->
+            <spirit:name>AHBLiteTarget_Master__bootrom_0x10000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x10000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__imem"
+                             spirit:segmentRef="_imem_0x20000000_0x2fffffff">
+            <!-- Address_region 0x20000000-0x2fffffff -->
+            <spirit:name>AHBLiteTarget_Master__imem_0x20000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x20000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__dmem"
+                             spirit:segmentRef="_dmem_0x30000000_0x3fffffff">
+            <!-- Address_region 0x30000000-0x3fffffff -->
+            <spirit:name>AHBLiteTarget_Master__dmem_0x30000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x30000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__sysio"
+                             spirit:segmentRef="_sysio_0x40000000_0x5fffffff">
+            <!-- Address_region 0x40000000-0x5fffffff -->
+            <spirit:name>AHBLiteTarget_Master__sysio_0x40000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x40000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__exp"
+                             spirit:segmentRef="_exp_0x60000000_0x7fffffff">
+            <!-- Address_region 0x60000000-0x7fffffff -->
+            <spirit:name>AHBLiteTarget_Master__exp_0x60000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x60000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__expram_l"
+                             spirit:segmentRef="_expram_l_0x80000000_0x8fffffff">
+            <!-- Address_region 0x80000000-0x8fffffff -->
+            <spirit:name>AHBLiteTarget_Master__expram_l_0x80000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x80000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__expram_h"
+                             spirit:segmentRef="_expram_h_0x90000000_0x9fffffff">
+            <!-- Address_region 0x90000000-0x9fffffff -->
+            <spirit:name>AHBLiteTarget_Master__expram_h_0x90000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x90000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__exp"
+                             spirit:segmentRef="_exp_0xa0000000_0xdfffffff">
+            <!-- Address_region 0xa0000000-0xdfffffff -->
+            <spirit:name>AHBLiteTarget_Master__exp_0xa0000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0xa0000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__systable"
+                             spirit:segmentRef="_systable_0xf0000000_0xf003ffff">
+            <!-- Address_region 0xf0000000-0xf003ffff -->
+            <spirit:name>AHBLiteTarget_Master__systable_0xf0000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0xf0000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:memoryRemap spirit:state="remap_0">
+            <spirit:name>AHBLiteInitiator_Slave__socdebug_remap_0_remap_MM</spirit:name>
+            <spirit:description>_socdebug remap_0 remap</spirit:description>
+            <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__imem"
+                                spirit:segmentRef="_imem_0x00000000_0x0fffffff">
+               <!-- Remapped region, active when REMAP bitcombination is 0 address_region 0x00000000-0x0fffffff -->
+               <spirit:name>AHBLiteTarget_Master__imem_0x00000000_0_state_remap_0_SM</spirit:name>
+               <spirit:baseAddress>0x00000000</spirit:baseAddress>
+            </spirit:subspaceMap>
+         </spirit:memoryRemap>
+
+         <spirit:memoryRemap spirit:state="remap_n0">
+            <spirit:name>AHBLiteInitiator_Slave__socdebug_remap_n0_remap_MM</spirit:name>
+            <spirit:description>_socdebug remap_n0 remap</spirit:description>
+            <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__bootrom"
+                                spirit:segmentRef="_bootrom_0x00000000_0x0fffffff">
+               <!-- Removable region, active only when REMAP bitcombination is n0 address_region 0x00000000-0x0fffffff -->
+               <spirit:name>AHBLiteTarget_Master__bootrom_0x00000000_0_state_remap_n0_SM</spirit:name>
+               <spirit:baseAddress>0x00000000</spirit:baseAddress>
+            </spirit:subspaceMap>
+         </spirit:memoryRemap>
+
+      </spirit:memoryMap>
+
+      <spirit:memoryMap>
+         <spirit:name>AHBLiteInitiator_Slave__dma_0_MM</spirit:name>
+         <spirit:description>_dma_0 memory map</spirit:description>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__imem"
+                             spirit:segmentRef="_imem_0x00000000_0x0fffffff">
+            <!-- Address_region 0x00000000-0x0fffffff -->
+            <spirit:name>AHBLiteTarget_Master__imem_0x00000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x00000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__bootrom"
+                             spirit:segmentRef="_bootrom_0x10000000_0x1fffffff">
+            <!-- Address_region 0x10000000-0x1fffffff -->
+            <spirit:name>AHBLiteTarget_Master__bootrom_0x10000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x10000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__imem"
+                             spirit:segmentRef="_imem_0x20000000_0x2fffffff">
+            <!-- Address_region 0x20000000-0x2fffffff -->
+            <spirit:name>AHBLiteTarget_Master__imem_0x20000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x20000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__dmem"
+                             spirit:segmentRef="_dmem_0x30000000_0x3fffffff">
+            <!-- Address_region 0x30000000-0x3fffffff -->
+            <spirit:name>AHBLiteTarget_Master__dmem_0x30000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x30000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__sysio"
+                             spirit:segmentRef="_sysio_0x40000000_0x5fffffff">
+            <!-- Address_region 0x40000000-0x5fffffff -->
+            <spirit:name>AHBLiteTarget_Master__sysio_0x40000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x40000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__exp"
+                             spirit:segmentRef="_exp_0x60000000_0x7fffffff">
+            <!-- Address_region 0x60000000-0x7fffffff -->
+            <spirit:name>AHBLiteTarget_Master__exp_0x60000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x60000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__expram_l"
+                             spirit:segmentRef="_expram_l_0x80000000_0x8fffffff">
+            <!-- Address_region 0x80000000-0x8fffffff -->
+            <spirit:name>AHBLiteTarget_Master__expram_l_0x80000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x80000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__expram_h"
+                             spirit:segmentRef="_expram_h_0x90000000_0x9fffffff">
+            <!-- Address_region 0x90000000-0x9fffffff -->
+            <spirit:name>AHBLiteTarget_Master__expram_h_0x90000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x90000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__exp"
+                             spirit:segmentRef="_exp_0xa0000000_0xdfffffff">
+            <!-- Address_region 0xa0000000-0xdfffffff -->
+            <spirit:name>AHBLiteTarget_Master__exp_0xa0000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0xa0000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+      </spirit:memoryMap>
+
+      <spirit:memoryMap>
+         <spirit:name>AHBLiteInitiator_Slave__dma_1_MM</spirit:name>
+         <spirit:description>_dma_1 memory map</spirit:description>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__imem"
+                             spirit:segmentRef="_imem_0x00000000_0x0fffffff">
+            <!-- Address_region 0x00000000-0x0fffffff -->
+            <spirit:name>AHBLiteTarget_Master__imem_0x00000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x00000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__bootrom"
+                             spirit:segmentRef="_bootrom_0x10000000_0x1fffffff">
+            <!-- Address_region 0x10000000-0x1fffffff -->
+            <spirit:name>AHBLiteTarget_Master__bootrom_0x10000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x10000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__imem"
+                             spirit:segmentRef="_imem_0x20000000_0x2fffffff">
+            <!-- Address_region 0x20000000-0x2fffffff -->
+            <spirit:name>AHBLiteTarget_Master__imem_0x20000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x20000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__dmem"
+                             spirit:segmentRef="_dmem_0x30000000_0x3fffffff">
+            <!-- Address_region 0x30000000-0x3fffffff -->
+            <spirit:name>AHBLiteTarget_Master__dmem_0x30000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x30000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__sysio"
+                             spirit:segmentRef="_sysio_0x40000000_0x5fffffff">
+            <!-- Address_region 0x40000000-0x5fffffff -->
+            <spirit:name>AHBLiteTarget_Master__sysio_0x40000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x40000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__exp"
+                             spirit:segmentRef="_exp_0x60000000_0x7fffffff">
+            <!-- Address_region 0x60000000-0x7fffffff -->
+            <spirit:name>AHBLiteTarget_Master__exp_0x60000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x60000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__expram_l"
+                             spirit:segmentRef="_expram_l_0x80000000_0x8fffffff">
+            <!-- Address_region 0x80000000-0x8fffffff -->
+            <spirit:name>AHBLiteTarget_Master__expram_l_0x80000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x80000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__expram_h"
+                             spirit:segmentRef="_expram_h_0x90000000_0x9fffffff">
+            <!-- Address_region 0x90000000-0x9fffffff -->
+            <spirit:name>AHBLiteTarget_Master__expram_h_0x90000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x90000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__exp"
+                             spirit:segmentRef="_exp_0xa0000000_0xdfffffff">
+            <!-- Address_region 0xa0000000-0xdfffffff -->
+            <spirit:name>AHBLiteTarget_Master__exp_0xa0000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0xa0000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+      </spirit:memoryMap>
+
+      <spirit:memoryMap>
+         <spirit:name>AHBLiteInitiator_Slave__cpu_MM</spirit:name>
+         <spirit:description>_cpu memory map</spirit:description>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__bootrom"
+                             spirit:segmentRef="_bootrom_0x10000000_0x1fffffff">
+            <!-- Address_region 0x10000000-0x1fffffff -->
+            <spirit:name>AHBLiteTarget_Master__bootrom_0x10000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x10000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__imem"
+                             spirit:segmentRef="_imem_0x20000000_0x2fffffff">
+            <!-- Address_region 0x20000000-0x2fffffff -->
+            <spirit:name>AHBLiteTarget_Master__imem_0x20000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x20000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__dmem"
+                             spirit:segmentRef="_dmem_0x30000000_0x3fffffff">
+            <!-- Address_region 0x30000000-0x3fffffff -->
+            <spirit:name>AHBLiteTarget_Master__dmem_0x30000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x30000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__sysio"
+                             spirit:segmentRef="_sysio_0x40000000_0x5fffffff">
+            <!-- Address_region 0x40000000-0x5fffffff -->
+            <spirit:name>AHBLiteTarget_Master__sysio_0x40000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x40000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__exp"
+                             spirit:segmentRef="_exp_0x60000000_0x7fffffff">
+            <!-- Address_region 0x60000000-0x7fffffff -->
+            <spirit:name>AHBLiteTarget_Master__exp_0x60000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x60000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__expram_l"
+                             spirit:segmentRef="_expram_l_0x80000000_0x8fffffff">
+            <!-- Address_region 0x80000000-0x8fffffff -->
+            <spirit:name>AHBLiteTarget_Master__expram_l_0x80000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x80000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__expram_h"
+                             spirit:segmentRef="_expram_h_0x90000000_0x9fffffff">
+            <!-- Address_region 0x90000000-0x9fffffff -->
+            <spirit:name>AHBLiteTarget_Master__expram_h_0x90000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0x90000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__exp"
+                             spirit:segmentRef="_exp_0xa0000000_0xdfffffff">
+            <!-- Address_region 0xa0000000-0xdfffffff -->
+            <spirit:name>AHBLiteTarget_Master__exp_0xa0000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0xa0000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__systable"
+                             spirit:segmentRef="_systable_0xf0000000_0xf003ffff">
+            <!-- Address_region 0xf0000000-0xf003ffff -->
+            <spirit:name>AHBLiteTarget_Master__systable_0xf0000000_0_state_always_SM</spirit:name>
+            <spirit:baseAddress>0xf0000000</spirit:baseAddress>
+         </spirit:subspaceMap>
+
+         <spirit:memoryRemap spirit:state="remap_0">
+            <spirit:name>AHBLiteInitiator_Slave__cpu_remap_0_remap_MM</spirit:name>
+            <spirit:description>_cpu remap_0 remap</spirit:description>
+            <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__imem"
+                                spirit:segmentRef="_imem_0x00000000_0x0fffffff">
+               <!-- Remapped region, active when REMAP bitcombination is 0 address_region 0x00000000-0x0fffffff -->
+               <spirit:name>AHBLiteTarget_Master__imem_0x00000000_0_state_remap_0_SM</spirit:name>
+               <spirit:baseAddress>0x00000000</spirit:baseAddress>
+            </spirit:subspaceMap>
+         </spirit:memoryRemap>
+
+         <spirit:memoryRemap spirit:state="remap_n0">
+            <spirit:name>AHBLiteInitiator_Slave__cpu_remap_n0_remap_MM</spirit:name>
+            <spirit:description>_cpu remap_n0 remap</spirit:description>
+            <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master__bootrom"
+                                spirit:segmentRef="_bootrom_0x00000000_0x0fffffff">
+               <!-- Removable region, active only when REMAP bitcombination is n0 address_region 0x00000000-0x0fffffff -->
+               <spirit:name>AHBLiteTarget_Master__bootrom_0x00000000_0_state_remap_n0_SM</spirit:name>
+               <spirit:baseAddress>0x00000000</spirit:baseAddress>
+            </spirit:subspaceMap>
+         </spirit:memoryRemap>
+
+      </spirit:memoryMap>
+
+   </spirit:memoryMaps>
+
+
+   <spirit:model>
+      <spirit:views>
+         <spirit:view>
+            <spirit:name>verilogsource</spirit:name>
+            <spirit:description>nanosoc_busmatrix_lite bus matrix</spirit:description>
+            <spirit:envIdentifier>:*Simulation:</spirit:envIdentifier>
+            <spirit:envIdentifier>:*Synthesis:</spirit:envIdentifier>
+            <spirit:language>verilog</spirit:language>
+            <spirit:modelName>nanosoc_busmatrix_lite</spirit:modelName>
+            <spirit:fileSetRef>
+               <spirit:localName>fs-verilogsource</spirit:localName>
+            </spirit:fileSetRef>
+         </spirit:view>
+      </spirit:views>
+
+      <spirit:ports>
+
+         <!-- Common clock and reset -->
+
+         <spirit:port>
+            <spirit:name>HCLK</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRESETn</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+
+         <!-- Remap port -->
+         <spirit:port>
+            <spirit:name>REMAP</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+               <spirit:vector>
+                  <spirit:left>3</spirit:left>
+                  <spirit:right>0</spirit:right>
+               </spirit:vector>
+               <spirit:driver>
+                  <spirit:defaultValue>0</spirit:defaultValue>
+               </spirit:driver>
+            </spirit:wire>
+         </spirit:port>
+
+          <!-- Input signals of Slave interfaces -->
+
+         <spirit:port>
+            <spirit:name>HADDR_socdebug</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>HTRANS_socdebug</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>HWRITE_socdebug</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSIZE_socdebug</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</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_socdebug</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+               <spirit:vector>
+                  <spirit:left>2</spirit:left>
+                  <spirit:right>0</spirit:right>
+               </spirit:vector>
+               <spirit:driver>
+                  <spirit:defaultValue>0</spirit:defaultValue>
+               </spirit:driver>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HPROT_socdebug</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</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_socdebug</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>HMASTLOCK_socdebug</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HADDR_dma_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>HTRANS_dma_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>HWRITE_dma_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSIZE_dma_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</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_dma_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+               <spirit:vector>
+                  <spirit:left>2</spirit:left>
+                  <spirit:right>0</spirit:right>
+               </spirit:vector>
+               <spirit:driver>
+                  <spirit:defaultValue>0</spirit:defaultValue>
+               </spirit:driver>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HPROT_dma_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</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_dma_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>HMASTLOCK_dma_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HADDR_dma_1</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>HTRANS_dma_1</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>HWRITE_dma_1</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSIZE_dma_1</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</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_dma_1</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+               <spirit:vector>
+                  <spirit:left>2</spirit:left>
+                  <spirit:right>0</spirit:right>
+               </spirit:vector>
+               <spirit:driver>
+                  <spirit:defaultValue>0</spirit:defaultValue>
+               </spirit:driver>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HPROT_dma_1</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</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_dma_1</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>HMASTLOCK_dma_1</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HADDR_cpu</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>HTRANS_cpu</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>HWRITE_cpu</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSIZE_cpu</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</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_cpu</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+               <spirit:vector>
+                  <spirit:left>2</spirit:left>
+                  <spirit:right>0</spirit:right>
+               </spirit:vector>
+               <spirit:driver>
+                  <spirit:defaultValue>0</spirit:defaultValue>
+               </spirit:driver>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HPROT_cpu</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</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_cpu</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>HMASTLOCK_cpu</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+
+         <!-- Input signals of Master interfaces -->
+
+         <spirit:port>
+            <spirit:name>HRDATA_bootrom</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_bootrom</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRESP_bootrom</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRDATA_imem</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_imem</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRESP_imem</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRDATA_dmem</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_dmem</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRESP_dmem</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRDATA_sysio</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_sysio</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRESP_sysio</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRDATA_expram_l</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_expram_l</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRESP_expram_l</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRDATA_expram_h</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_expram_h</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRESP_expram_h</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRDATA_exp</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_exp</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRESP_exp</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRDATA_systable</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_systable</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRESP_systable</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+
+         <!-- Scan test dummy signals; not connected until scan insertion -->
+
+         <spirit:port>
+            <spirit:name>SCANENABLE</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>SCANINHCLK</spirit:name>
+            <spirit:wire>
+               <spirit:direction>in</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+
+         <!-- Output signals of Master interfaces -->
+
+         <spirit:port>
+            <spirit:name>HSEL_bootrom</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HADDR_bootrom</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_bootrom</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_bootrom</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSIZE_bootrom</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_bootrom</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_bootrom</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_bootrom</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_bootrom</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HREADYMUX_bootrom</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSEL_imem</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HADDR_imem</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_imem</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_imem</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSIZE_imem</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_imem</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_imem</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_imem</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_imem</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HREADYMUX_imem</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSEL_dmem</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HADDR_dmem</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_dmem</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_dmem</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSIZE_dmem</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_dmem</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_dmem</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_dmem</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_dmem</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HREADYMUX_dmem</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSEL_sysio</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HADDR_sysio</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_sysio</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_sysio</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSIZE_sysio</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_sysio</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_sysio</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_sysio</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_sysio</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HREADYMUX_sysio</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSEL_expram_l</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HADDR_expram_l</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_expram_l</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_expram_l</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSIZE_expram_l</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_expram_l</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_expram_l</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_expram_l</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_expram_l</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HREADYMUX_expram_l</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSEL_expram_h</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HADDR_expram_h</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_expram_h</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_expram_h</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSIZE_expram_h</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_expram_h</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_expram_h</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_expram_h</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_expram_h</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HREADYMUX_expram_h</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSEL_exp</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HADDR_exp</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_exp</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_exp</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSIZE_exp</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_exp</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_exp</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_exp</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_exp</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HREADYMUX_exp</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSEL_systable</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HADDR_systable</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_systable</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_systable</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HSIZE_systable</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_systable</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_systable</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_systable</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_systable</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HREADYMUX_systable</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+
+         <!-- Output signals of Slave interfaces -->
+
+         <spirit:port>
+            <spirit:name>HRDATA_socdebug</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>HREADY_socdebug</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRESP_socdebug</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRDATA_dma_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>HREADY_dma_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRESP_dma_0</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRDATA_dma_1</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>HREADY_dma_1</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRESP_dma_1</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRDATA_cpu</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>HREADY_cpu</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+         <spirit:port>
+            <spirit:name>HRESP_cpu</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+
+         <!-- Scan test dummy signals; not connected until scan insertion -->
+
+         <spirit:port>
+            <spirit:name>SCANOUTHCLK</spirit:name>
+            <spirit:wire>
+               <spirit:direction>out</spirit:direction>
+            </spirit:wire>
+         </spirit:port>
+     </spirit:ports>
+   </spirit:model>
+
+   <spirit:fileSets>
+      <spirit:fileSet>
+         <spirit:name>fs-verilogsource</spirit:name>
+         <spirit:displayName/>
+         <spirit:description>File list for nanosoc_busmatrix_lite</spirit:description>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_busmatrix_lite.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+            <spirit:isIncludeFile spirit:externalDeclarations="true">false</spirit:isIncludeFile>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_busmatrix.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_busmatrix_default_slave.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_inititator_input.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_matrix_decode_socdebug.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_matrix_decode_dma_0.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_matrix_decode_dma_1.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_matrix_decode_cpu.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_arbiter_bootrom.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_arbiter_imem.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_arbiter_dmem.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_arbiter_sysio.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_arbiter_expram_l.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_arbiter_expram_h.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_arbiter_exp.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_arbiter_systable.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_target_output_bootrom.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_target_output_imem.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_target_output_dmem.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_target_output_sysio.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_target_output_expram_l.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_target_output_expram_h.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_target_output_exp.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+         <spirit:file>
+            <spirit:name>../../verilog/nanosoc_busmatrix/nanosoc_target_output_systable.v</spirit:name>
+            <spirit:fileType>verilogSource-2001</spirit:fileType>
+         </spirit:file>
+      </spirit:fileSet>
+   </spirit:fileSets>
+
+   <spirit:description>nanosoc_busmatrix_lite</spirit:description>
+
+</spirit:component>
diff --git a/system/src/nanosoc_busmatrix/logs/nanosoc.log b/system/src/nanosoc_busmatrix/logs/nanosoc.log
new file mode 100644
index 0000000000000000000000000000000000000000..e2affe3e8f623e89e5f061e85797a8c6a3b560f5
--- /dev/null
+++ b/system/src/nanosoc_busmatrix/logs/nanosoc.log
@@ -0,0 +1,102 @@
+
+==============================================================
+=  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-2013,2017 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.
+=
+= BuildBusMatrix.pl
+=
+= Run Date : 03/06/2023 21:57:27
+==============================================================
+
+Script accepted the following parameters:
+
+ - Configuration file      : '/home/dam1n19/accelerator-project/nanosoc_tech/system/src/nanosoc_busmatrix/xml/nanosoc.xml'
+ - Top-level name          : 'nanosoc_busmatrix'
+ - Slave interfaces        : 4
+ - Master interfaces       : 8
+ - Architecture type       : 'ahb2'
+ - Arbitration scheme      : 'burst'
+ - Address map             : user defined
+ - Connectivity mapping    : _socdebug -> _bootrom, _imem, _dmem, _sysio, _exp, _expram_l, _expram_h, _systable, 
+                             _dma_0 -> _bootrom, _imem, _dmem, _sysio, _exp, _expram_l, _expram_h, 
+                             _dma_1 -> _bootrom, _imem, _dmem, _sysio, _exp, _expram_l, _expram_h, 
+                             _cpu -> _bootrom, _imem, _dmem, _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/src/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/src/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/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_bootrom.v' file...
+Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_dmem.v' file...
+Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_exp.v' file...
+Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_expram_h.v' file...
+Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_expram_l.v' file...
+Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_imem.v' file...
+Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_sysio.v' file...
+Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_systable.v' file...
+Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix.v' file...
+Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix_default_slave.v' file...
+Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix_lite.v' file...
+Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_inititator_input.v' file...
+Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_cpu.v' file...
+Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_dma_0.v' file...
+Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_dma_1.v' file...
+Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_socshute.v' file...
+Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_bootrom.v' file...
+Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_dmem.v' file...
+Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_exp.v' file...
+Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_expram_h.v' file...
+Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_expram_l.v' file...
+Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_imem.v' file...
+Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_sysio.v' file...
+Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_systable.v' file...
+
+Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/src/nanosoc_busmatrix/ipxact/nanosoc_busmatrix/nanosoc_busmatrix.xml' file...
+Deleting the '/home/dam1n19/accelerator-project/nanosoc_tech/system/src/nanosoc_busmatrix/ipxact/nanosoc_busmatrix/nanosoc_busmatrix_lite.xml' file...
+
+Creating the bus matrix variant...
+
+ - Rendering 'nanosoc_arbiter_imem.v'
+ - Rendering 'nanosoc_busmatrix_lite.v'
+ - Rendering 'nanosoc_matrix_decode_dma_0.v'
+ - Rendering 'nanosoc_arbiter_sysio.v'
+ - Rendering 'nanosoc_arbiter_bootrom.v'
+ - Rendering 'nanosoc_busmatrix.v'
+ - Rendering 'nanosoc_busmatrix_default_slave.v'
+ - Rendering 'nanosoc_matrix_decode_dma_1.v'
+ - Rendering 'nanosoc_target_output_expram_h.v'
+ - Rendering 'nanosoc_arbiter_exp.v'
+ - Rendering 'nanosoc_arbiter_expram_l.v'
+ - Rendering 'nanosoc_target_output_systable.v'
+ - Rendering 'nanosoc_target_output_sysio.v'
+ - Rendering 'nanosoc_matrix_decode_cpu.v'
+ - Rendering 'nanosoc_arbiter_systable.v'
+ - Rendering 'nanosoc_target_output_exp.v'
+ - Rendering 'nanosoc_matrix_decode_socdebug.v'
+ - Rendering 'nanosoc_target_output_expram_l.v'
+ - Rendering 'nanosoc_busmatrix.xml'
+ - Rendering 'nanosoc_busmatrix_lite.xml'
+ - Rendering 'nanosoc_arbiter_dmem.v'
+ - Rendering 'nanosoc_inititator_input.v'
+ - Rendering 'nanosoc_target_output_dmem.v'
+ - Rendering 'nanosoc_arbiter_expram_h.v'
+ - Rendering 'nanosoc_target_output_imem.v'
+ - Rendering 'nanosoc_target_output_bootrom.v'
+
+Done!
+
diff --git a/system/src/nanosoc_ahb_busmatrix/makefile b/system/src/nanosoc_busmatrix/makefile
similarity index 93%
rename from system/src/nanosoc_ahb_busmatrix/makefile
rename to system/src/nanosoc_busmatrix/makefile
index 5d6a83e330d2aa6130e73d790b93bb42ce02b88c..24b95e66b64344d9ee400581831de160118de4d6 100644
--- a/system/src/nanosoc_ahb_busmatrix/makefile
+++ b/system/src/nanosoc_busmatrix/makefile
@@ -12,10 +12,10 @@
 .DEFAULT_GOAL := build
 
 # Name of Bus Matrix to generate
-MATRIX_NAME ?= nanosoc_ahb32_4x7
+MATRIX_NAME ?= nanosoc
 
 # Top-level directory of Bus Matrix
-BUILD_DIR  ?= $(SOCLABS_NANOSOC_TECH_DIR)/system/src/nanosoc_ahb_busmatrix
+BUILD_DIR  ?= $(SOCLABS_NANOSOC_TECH_DIR)/system/src/nanosoc_busmatrix
 
 # Directory location of BuildBusMatrix Script
 SOURCE_DIR  = $(ARM_IP_LIBRARY_PATH)/latest/Corstone-101/logical/cmsdk_ahb_busmatrix
diff --git a/system/src/nanosoc_ahb_busmatrix/verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_arbiter.v b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_bootrom.v
similarity index 99%
rename from system/src/nanosoc_ahb_busmatrix/verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_arbiter.v
rename to system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_bootrom.v
index 9480d052f3d4b93584d1452b5c15503e652fbaa4..1bff1c888bd2eee25156535716b533a2038f6de2 100644
--- a/system/src/nanosoc_ahb_busmatrix/verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_arbiter.v
+++ b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_bootrom.v
@@ -26,13 +26,13 @@
 //                        of the input stages will be given access to the
 //                        shared slave.
 //
-//  Notes               : The bus matrix has full connectivity.
+//  Notes               : The bus matrix has sparse connectivity.
 //
 //-----------------------------------------------------------------------------
 
 
 
-module nanosoc_ahb32_4x7_arbiter (
+module nanosoc_arbiter_bootrom (
 
     // Common AHB signals
     HCLK ,
diff --git a/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_dmem.v b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_dmem.v
new file mode 100644
index 0000000000000000000000000000000000000000..a7a2f62924d74780951965ec3b8e52bfe04afadf
--- /dev/null
+++ b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_dmem.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-2023 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_dmem (
+
+    // 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/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_exp.v b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_exp.v
new file mode 100644
index 0000000000000000000000000000000000000000..76af6da662b50a01c5fbe34f669518c20640858b
--- /dev/null
+++ b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_exp.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-2023 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_exp (
+
+    // 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/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_expram_h.v b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_expram_h.v
new file mode 100644
index 0000000000000000000000000000000000000000..0079998239ea1139fef8b2f79337a832e6246590
--- /dev/null
+++ b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_expram_h.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-2023 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_expram_h (
+
+    // 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/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_expram_l.v b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_expram_l.v
new file mode 100644
index 0000000000000000000000000000000000000000..5dacc6c05fabb76b7ef9fd9dd6a8f75b6d8c4360
--- /dev/null
+++ b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_expram_l.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-2023 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_expram_l (
+
+    // 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/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_imem.v b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_imem.v
new file mode 100644
index 0000000000000000000000000000000000000000..271e90272f4e2191f6c2642e80009dc355f0a59a
--- /dev/null
+++ b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_imem.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-2023 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_imem (
+
+    // 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/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_sysio.v b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_sysio.v
new file mode 100644
index 0000000000000000000000000000000000000000..6af8977e2ed9c157c828d24e7743c062a6b54ea7
--- /dev/null
+++ b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_sysio.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-2023 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_sysio (
+
+    // 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/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_systable.v b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_systable.v
new file mode 100644
index 0000000000000000000000000000000000000000..64e34e0b8e5eb3fa90df3594a061bb698f8c566e
--- /dev/null
+++ b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_arbiter_systable.v
@@ -0,0 +1,314 @@
+//-----------------------------------------------------------------------------
+// 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-2023 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_systable (
+
+    // Common AHB signals
+    HCLK ,
+    HRESETn,
+
+    // Input port request signals
+    req_port0,
+    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_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_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_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_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/system/src/nanosoc_ahb_busmatrix/verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_busmatrix.v b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix.v
similarity index 53%
rename from system/src/nanosoc_ahb_busmatrix/verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_busmatrix.v
rename to system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix.v
index 610aa3f1565656a407abfdf4e4f3ed84219c2c67..490243aba00d3c1c743f2f0398a9b534c0ceb25f 100644
--- a/system/src/nanosoc_ahb_busmatrix/verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_busmatrix.v
+++ b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix.v
@@ -30,20 +30,22 @@
 //
 //                         - Architecture type 'ahb2',
 //                         - 4 slave ports (connecting to masters),
-//                         - 7 master ports (connecting to slaves),
+//                         - 8 master ports (connecting to slaves),
 //                         - Routing address width of 32 bits,
 //                         - Routing data width of 32 bits,
-//                         - xUSER signal width of 2 bits,
 //                         - Arbiter type 'burst',
 //                         - Connectivity mapping:
-//                             S<0..3> -> M<0..6>,
-//                         - Connectivity type 'full'.
+//                             _socdebug -> _bootrom, _imem, _dmem, _sysio, _exp, _expram_l, _expram_h, _systable, 
+//                             _dma_0 -> _bootrom, _imem, _dmem, _sysio, _exp, _expram_l, _expram_h, 
+//                             _dma_1 -> _bootrom, _imem, _dmem, _sysio, _exp, _expram_l, _expram_h, 
+//                             _cpu -> _bootrom, _imem, _dmem, _sysio, _exp, _expram_l, _expram_h, _systable,
+//                         - Connectivity type 'sparse'.
 //
 //------------------------------------------------------------------------------
 
 
 
-module nanosoc_ahb32_4x7_busmatrix (
+module nanosoc_busmatrix (
 
     // Common AHB signals
     HCLK,
@@ -53,49 +55,43 @@ module nanosoc_ahb32_4x7_busmatrix (
     REMAP,
 
     // Input port SI0 (inputs from master 0)
-    HSEL_adp,
-    HADDR_adp,
-    HTRANS_adp,
-    HWRITE_adp,
-    HSIZE_adp,
-    HBURST_adp,
-    HPROT_adp,
-    HMASTER_adp,
-    HWDATA_adp,
-    HMASTLOCK_adp,
-    HREADY_adp,
-    HAUSER_adp,
-    HWUSER_adp,
+    HSEL_socdebug,
+    HADDR_socdebug,
+    HTRANS_socdebug,
+    HWRITE_socdebug,
+    HSIZE_socdebug,
+    HBURST_socdebug,
+    HPROT_socdebug,
+    HMASTER_socdebug,
+    HWDATA_socdebug,
+    HMASTLOCK_socdebug,
+    HREADY_socdebug,
 
     // Input port SI1 (inputs from master 1)
-    HSEL_dma,
-    HADDR_dma,
-    HTRANS_dma,
-    HWRITE_dma,
-    HSIZE_dma,
-    HBURST_dma,
-    HPROT_dma,
-    HMASTER_dma,
-    HWDATA_dma,
-    HMASTLOCK_dma,
-    HREADY_dma,
-    HAUSER_dma,
-    HWUSER_dma,
+    HSEL_dma_0,
+    HADDR_dma_0,
+    HTRANS_dma_0,
+    HWRITE_dma_0,
+    HSIZE_dma_0,
+    HBURST_dma_0,
+    HPROT_dma_0,
+    HMASTER_dma_0,
+    HWDATA_dma_0,
+    HMASTLOCK_dma_0,
+    HREADY_dma_0,
 
     // Input port SI2 (inputs from master 2)
-    HSEL_dma2,
-    HADDR_dma2,
-    HTRANS_dma2,
-    HWRITE_dma2,
-    HSIZE_dma2,
-    HBURST_dma2,
-    HPROT_dma2,
-    HMASTER_dma2,
-    HWDATA_dma2,
-    HMASTLOCK_dma2,
-    HREADY_dma2,
-    HAUSER_dma2,
-    HWUSER_dma2,
+    HSEL_dma_1,
+    HADDR_dma_1,
+    HTRANS_dma_1,
+    HWRITE_dma_1,
+    HSIZE_dma_1,
+    HBURST_dma_1,
+    HPROT_dma_1,
+    HMASTER_dma_1,
+    HWDATA_dma_1,
+    HMASTLOCK_dma_1,
+    HREADY_dma_1,
 
     // Input port SI3 (inputs from master 3)
     HSEL_cpu,
@@ -109,50 +105,46 @@ module nanosoc_ahb32_4x7_busmatrix (
     HWDATA_cpu,
     HMASTLOCK_cpu,
     HREADY_cpu,
-    HAUSER_cpu,
-    HWUSER_cpu,
 
     // Output port MI0 (inputs from slave 0)
-    HRDATA_rom1,
-    HREADYOUT_rom1,
-    HRESP_rom1,
-    HRUSER_rom1,
+    HRDATA_bootrom,
+    HREADYOUT_bootrom,
+    HRESP_bootrom,
 
     // Output port MI1 (inputs from slave 1)
-    HRDATA_ram2,
-    HREADYOUT_ram2,
-    HRESP_ram2,
-    HRUSER_ram2,
+    HRDATA_imem,
+    HREADYOUT_imem,
+    HRESP_imem,
 
     // Output port MI2 (inputs from slave 2)
-    HRDATA_ram3,
-    HREADYOUT_ram3,
-    HRESP_ram3,
-    HRUSER_ram3,
+    HRDATA_dmem,
+    HREADYOUT_dmem,
+    HRESP_dmem,
 
     // Output port MI3 (inputs from slave 3)
-    HRDATA_sys,
-    HREADYOUT_sys,
-    HRESP_sys,
-    HRUSER_sys,
+    HRDATA_sysio,
+    HREADYOUT_sysio,
+    HRESP_sysio,
 
     // Output port MI4 (inputs from slave 4)
-    HRDATA_ram8,
-    HREADYOUT_ram8,
-    HRESP_ram8,
-    HRUSER_ram8,
+    HRDATA_expram_l,
+    HREADYOUT_expram_l,
+    HRESP_expram_l,
 
     // Output port MI5 (inputs from slave 5)
-    HRDATA_ram9,
-    HREADYOUT_ram9,
-    HRESP_ram9,
-    HRUSER_ram9,
+    HRDATA_expram_h,
+    HREADYOUT_expram_h,
+    HRESP_expram_h,
 
     // Output port MI6 (inputs from slave 6)
     HRDATA_exp,
     HREADYOUT_exp,
     HRESP_exp,
-    HRUSER_exp,
+
+    // Output port MI7 (inputs from slave 7)
+    HRDATA_systable,
+    HREADYOUT_systable,
+    HRESP_systable,
 
     // Scan test dummy signals; not connected until scan insertion
     SCANENABLE,   // Scan Test Mode Enable
@@ -160,94 +152,82 @@ module nanosoc_ahb32_4x7_busmatrix (
 
 
     // Output port MI0 (outputs to slave 0)
-    HSEL_rom1,
-    HADDR_rom1,
-    HTRANS_rom1,
-    HWRITE_rom1,
-    HSIZE_rom1,
-    HBURST_rom1,
-    HPROT_rom1,
-    HMASTER_rom1,
-    HWDATA_rom1,
-    HMASTLOCK_rom1,
-    HREADYMUX_rom1,
-    HAUSER_rom1,
-    HWUSER_rom1,
+    HSEL_bootrom,
+    HADDR_bootrom,
+    HTRANS_bootrom,
+    HWRITE_bootrom,
+    HSIZE_bootrom,
+    HBURST_bootrom,
+    HPROT_bootrom,
+    HMASTER_bootrom,
+    HWDATA_bootrom,
+    HMASTLOCK_bootrom,
+    HREADYMUX_bootrom,
 
     // Output port MI1 (outputs to slave 1)
-    HSEL_ram2,
-    HADDR_ram2,
-    HTRANS_ram2,
-    HWRITE_ram2,
-    HSIZE_ram2,
-    HBURST_ram2,
-    HPROT_ram2,
-    HMASTER_ram2,
-    HWDATA_ram2,
-    HMASTLOCK_ram2,
-    HREADYMUX_ram2,
-    HAUSER_ram2,
-    HWUSER_ram2,
+    HSEL_imem,
+    HADDR_imem,
+    HTRANS_imem,
+    HWRITE_imem,
+    HSIZE_imem,
+    HBURST_imem,
+    HPROT_imem,
+    HMASTER_imem,
+    HWDATA_imem,
+    HMASTLOCK_imem,
+    HREADYMUX_imem,
 
     // Output port MI2 (outputs to slave 2)
-    HSEL_ram3,
-    HADDR_ram3,
-    HTRANS_ram3,
-    HWRITE_ram3,
-    HSIZE_ram3,
-    HBURST_ram3,
-    HPROT_ram3,
-    HMASTER_ram3,
-    HWDATA_ram3,
-    HMASTLOCK_ram3,
-    HREADYMUX_ram3,
-    HAUSER_ram3,
-    HWUSER_ram3,
+    HSEL_dmem,
+    HADDR_dmem,
+    HTRANS_dmem,
+    HWRITE_dmem,
+    HSIZE_dmem,
+    HBURST_dmem,
+    HPROT_dmem,
+    HMASTER_dmem,
+    HWDATA_dmem,
+    HMASTLOCK_dmem,
+    HREADYMUX_dmem,
 
     // Output port MI3 (outputs to slave 3)
-    HSEL_sys,
-    HADDR_sys,
-    HTRANS_sys,
-    HWRITE_sys,
-    HSIZE_sys,
-    HBURST_sys,
-    HPROT_sys,
-    HMASTER_sys,
-    HWDATA_sys,
-    HMASTLOCK_sys,
-    HREADYMUX_sys,
-    HAUSER_sys,
-    HWUSER_sys,
+    HSEL_sysio,
+    HADDR_sysio,
+    HTRANS_sysio,
+    HWRITE_sysio,
+    HSIZE_sysio,
+    HBURST_sysio,
+    HPROT_sysio,
+    HMASTER_sysio,
+    HWDATA_sysio,
+    HMASTLOCK_sysio,
+    HREADYMUX_sysio,
 
     // Output port MI4 (outputs to slave 4)
-    HSEL_ram8,
-    HADDR_ram8,
-    HTRANS_ram8,
-    HWRITE_ram8,
-    HSIZE_ram8,
-    HBURST_ram8,
-    HPROT_ram8,
-    HMASTER_ram8,
-    HWDATA_ram8,
-    HMASTLOCK_ram8,
-    HREADYMUX_ram8,
-    HAUSER_ram8,
-    HWUSER_ram8,
+    HSEL_expram_l,
+    HADDR_expram_l,
+    HTRANS_expram_l,
+    HWRITE_expram_l,
+    HSIZE_expram_l,
+    HBURST_expram_l,
+    HPROT_expram_l,
+    HMASTER_expram_l,
+    HWDATA_expram_l,
+    HMASTLOCK_expram_l,
+    HREADYMUX_expram_l,
 
     // Output port MI5 (outputs to slave 5)
-    HSEL_ram9,
-    HADDR_ram9,
-    HTRANS_ram9,
-    HWRITE_ram9,
-    HSIZE_ram9,
-    HBURST_ram9,
-    HPROT_ram9,
-    HMASTER_ram9,
-    HWDATA_ram9,
-    HMASTLOCK_ram9,
-    HREADYMUX_ram9,
-    HAUSER_ram9,
-    HWUSER_ram9,
+    HSEL_expram_h,
+    HADDR_expram_h,
+    HTRANS_expram_h,
+    HWRITE_expram_h,
+    HSIZE_expram_h,
+    HBURST_expram_h,
+    HPROT_expram_h,
+    HMASTER_expram_h,
+    HWDATA_expram_h,
+    HMASTLOCK_expram_h,
+    HREADYMUX_expram_h,
 
     // Output port MI6 (outputs to slave 6)
     HSEL_exp,
@@ -261,32 +241,39 @@ module nanosoc_ahb32_4x7_busmatrix (
     HWDATA_exp,
     HMASTLOCK_exp,
     HREADYMUX_exp,
-    HAUSER_exp,
-    HWUSER_exp,
+
+    // Output port MI7 (outputs to slave 7)
+    HSEL_systable,
+    HADDR_systable,
+    HTRANS_systable,
+    HWRITE_systable,
+    HSIZE_systable,
+    HBURST_systable,
+    HPROT_systable,
+    HMASTER_systable,
+    HWDATA_systable,
+    HMASTLOCK_systable,
+    HREADYMUX_systable,
 
     // Input port SI0 (outputs to master 0)
-    HRDATA_adp,
-    HREADYOUT_adp,
-    HRESP_adp,
-    HRUSER_adp,
+    HRDATA_socdebug,
+    HREADYOUT_socdebug,
+    HRESP_socdebug,
 
     // Input port SI1 (outputs to master 1)
-    HRDATA_dma,
-    HREADYOUT_dma,
-    HRESP_dma,
-    HRUSER_dma,
+    HRDATA_dma_0,
+    HREADYOUT_dma_0,
+    HRESP_dma_0,
 
     // Input port SI2 (outputs to master 2)
-    HRDATA_dma2,
-    HREADYOUT_dma2,
-    HRESP_dma2,
-    HRUSER_dma2,
+    HRDATA_dma_1,
+    HREADYOUT_dma_1,
+    HRESP_dma_1,
 
     // Input port SI3 (outputs to master 3)
     HRDATA_cpu,
     HREADYOUT_cpu,
     HRESP_cpu,
-    HRUSER_cpu,
 
     // Scan test dummy signals; not connected until scan insertion
     SCANOUTHCLK   // Scan Chain Output
@@ -306,49 +293,43 @@ module nanosoc_ahb32_4x7_busmatrix (
     input   [3:0] REMAP;           // REMAP input
 
     // Input port SI0 (inputs from master 0)
-    input         HSEL_adp;          // Slave Select
-    input  [31:0] HADDR_adp;         // Address bus
-    input   [1:0] HTRANS_adp;        // Transfer type
-    input         HWRITE_adp;        // Transfer direction
-    input   [2:0] HSIZE_adp;         // Transfer size
-    input   [2:0] HBURST_adp;        // Burst type
-    input   [3:0] HPROT_adp;         // Protection control
-    input   [3:0] HMASTER_adp;       // Master select
-    input  [31:0] HWDATA_adp;        // Write data
-    input         HMASTLOCK_adp;     // Locked Sequence
-    input         HREADY_adp;        // Transfer done
-    input  [1:0] HAUSER_adp;        // Address USER signals
-    input  [1:0] HWUSER_adp;        // Write-data USER signals
+    input         HSEL_socdebug;          // Slave Select
+    input  [31:0] HADDR_socdebug;         // Address bus
+    input   [1:0] HTRANS_socdebug;        // Transfer type
+    input         HWRITE_socdebug;        // Transfer direction
+    input   [2:0] HSIZE_socdebug;         // Transfer size
+    input   [2:0] HBURST_socdebug;        // Burst type
+    input   [3:0] HPROT_socdebug;         // Protection control
+    input   [3:0] HMASTER_socdebug;       // Master select
+    input  [31:0] HWDATA_socdebug;        // Write data
+    input         HMASTLOCK_socdebug;     // Locked Sequence
+    input         HREADY_socdebug;        // Transfer done
 
     // Input port SI1 (inputs from master 1)
-    input         HSEL_dma;          // Slave Select
-    input  [31:0] HADDR_dma;         // Address bus
-    input   [1:0] HTRANS_dma;        // Transfer type
-    input         HWRITE_dma;        // Transfer direction
-    input   [2:0] HSIZE_dma;         // Transfer size
-    input   [2:0] HBURST_dma;        // Burst type
-    input   [3:0] HPROT_dma;         // Protection control
-    input   [3:0] HMASTER_dma;       // Master select
-    input  [31:0] HWDATA_dma;        // Write data
-    input         HMASTLOCK_dma;     // Locked Sequence
-    input         HREADY_dma;        // Transfer done
-    input  [1:0] HAUSER_dma;        // Address USER signals
-    input  [1:0] HWUSER_dma;        // Write-data USER signals
+    input         HSEL_dma_0;          // Slave Select
+    input  [31:0] HADDR_dma_0;         // Address bus
+    input   [1:0] HTRANS_dma_0;        // Transfer type
+    input         HWRITE_dma_0;        // Transfer direction
+    input   [2:0] HSIZE_dma_0;         // Transfer size
+    input   [2:0] HBURST_dma_0;        // Burst type
+    input   [3:0] HPROT_dma_0;         // Protection control
+    input   [3:0] HMASTER_dma_0;       // Master select
+    input  [31:0] HWDATA_dma_0;        // Write data
+    input         HMASTLOCK_dma_0;     // Locked Sequence
+    input         HREADY_dma_0;        // Transfer done
 
     // Input port SI2 (inputs from master 2)
-    input         HSEL_dma2;          // Slave Select
-    input  [31:0] HADDR_dma2;         // Address bus
-    input   [1:0] HTRANS_dma2;        // Transfer type
-    input         HWRITE_dma2;        // Transfer direction
-    input   [2:0] HSIZE_dma2;         // Transfer size
-    input   [2:0] HBURST_dma2;        // Burst type
-    input   [3:0] HPROT_dma2;         // Protection control
-    input   [3:0] HMASTER_dma2;       // Master select
-    input  [31:0] HWDATA_dma2;        // Write data
-    input         HMASTLOCK_dma2;     // Locked Sequence
-    input         HREADY_dma2;        // Transfer done
-    input  [1:0] HAUSER_dma2;        // Address USER signals
-    input  [1:0] HWUSER_dma2;        // Write-data USER signals
+    input         HSEL_dma_1;          // Slave Select
+    input  [31:0] HADDR_dma_1;         // Address bus
+    input   [1:0] HTRANS_dma_1;        // Transfer type
+    input         HWRITE_dma_1;        // Transfer direction
+    input   [2:0] HSIZE_dma_1;         // Transfer size
+    input   [2:0] HBURST_dma_1;        // Burst type
+    input   [3:0] HPROT_dma_1;         // Protection control
+    input   [3:0] HMASTER_dma_1;       // Master select
+    input  [31:0] HWDATA_dma_1;        // Write data
+    input         HMASTLOCK_dma_1;     // Locked Sequence
+    input         HREADY_dma_1;        // Transfer done
 
     // Input port SI3 (inputs from master 3)
     input         HSEL_cpu;          // Slave Select
@@ -362,50 +343,46 @@ module nanosoc_ahb32_4x7_busmatrix (
     input  [31:0] HWDATA_cpu;        // Write data
     input         HMASTLOCK_cpu;     // Locked Sequence
     input         HREADY_cpu;        // Transfer done
-    input  [1:0] HAUSER_cpu;        // Address USER signals
-    input  [1:0] HWUSER_cpu;        // Write-data USER signals
 
     // Output port MI0 (inputs from slave 0)
-    input  [31:0] HRDATA_rom1;        // Read data bus
-    input         HREADYOUT_rom1;     // HREADY feedback
-    input   [1:0] HRESP_rom1;         // Transfer response
-    input  [1:0] HRUSER_rom1;        // Read-data USER signals
+    input  [31:0] HRDATA_bootrom;        // Read data bus
+    input         HREADYOUT_bootrom;     // HREADY feedback
+    input   [1:0] HRESP_bootrom;         // Transfer response
 
     // Output port MI1 (inputs from slave 1)
-    input  [31:0] HRDATA_ram2;        // Read data bus
-    input         HREADYOUT_ram2;     // HREADY feedback
-    input   [1:0] HRESP_ram2;         // Transfer response
-    input  [1:0] HRUSER_ram2;        // Read-data USER signals
+    input  [31:0] HRDATA_imem;        // Read data bus
+    input         HREADYOUT_imem;     // HREADY feedback
+    input   [1:0] HRESP_imem;         // Transfer response
 
     // Output port MI2 (inputs from slave 2)
-    input  [31:0] HRDATA_ram3;        // Read data bus
-    input         HREADYOUT_ram3;     // HREADY feedback
-    input   [1:0] HRESP_ram3;         // Transfer response
-    input  [1:0] HRUSER_ram3;        // Read-data USER signals
+    input  [31:0] HRDATA_dmem;        // Read data bus
+    input         HREADYOUT_dmem;     // HREADY feedback
+    input   [1:0] HRESP_dmem;         // Transfer response
 
     // Output port MI3 (inputs from slave 3)
-    input  [31:0] HRDATA_sys;        // Read data bus
-    input         HREADYOUT_sys;     // HREADY feedback
-    input   [1:0] HRESP_sys;         // Transfer response
-    input  [1:0] HRUSER_sys;        // Read-data USER signals
+    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)
-    input  [31:0] HRDATA_ram8;        // Read data bus
-    input         HREADYOUT_ram8;     // HREADY feedback
-    input   [1:0] HRESP_ram8;         // Transfer response
-    input  [1:0] HRUSER_ram8;        // Read-data USER signals
+    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)
-    input  [31:0] HRDATA_ram9;        // Read data bus
-    input         HREADYOUT_ram9;     // HREADY feedback
-    input   [1:0] HRESP_ram9;         // Transfer response
-    input  [1:0] HRUSER_ram9;        // Read-data USER signals
+    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)
     input  [31:0] HRDATA_exp;        // Read data bus
     input         HREADYOUT_exp;     // HREADY feedback
     input   [1:0] HRESP_exp;         // Transfer response
-    input  [1:0] HRUSER_exp;        // Read-data USER signals
+
+    // Output port MI7 (inputs from slave 7)
+    input  [31:0] HRDATA_systable;        // Read data bus
+    input         HREADYOUT_systable;     // HREADY feedback
+    input   [1:0] HRESP_systable;         // Transfer response
 
     // Scan test dummy signals; not connected until scan insertion
     input         SCANENABLE;      // Scan enable signal
@@ -413,94 +390,82 @@ module nanosoc_ahb32_4x7_busmatrix (
 
 
     // Output port MI0 (outputs to slave 0)
-    output        HSEL_rom1;          // Slave Select
-    output [31:0] HADDR_rom1;         // Address bus
-    output  [1:0] HTRANS_rom1;        // Transfer type
-    output        HWRITE_rom1;        // Transfer direction
-    output  [2:0] HSIZE_rom1;         // Transfer size
-    output  [2:0] HBURST_rom1;        // Burst type
-    output  [3:0] HPROT_rom1;         // Protection control
-    output  [3:0] HMASTER_rom1;       // Master select
-    output [31:0] HWDATA_rom1;        // Write data
-    output        HMASTLOCK_rom1;     // Locked Sequence
-    output        HREADYMUX_rom1;     // Transfer done
-    output [1:0] HAUSER_rom1;        // Address USER signals
-    output [1:0] HWUSER_rom1;        // Write-data USER signals
+    output        HSEL_bootrom;          // Slave Select
+    output [31:0] HADDR_bootrom;         // Address bus
+    output  [1:0] HTRANS_bootrom;        // Transfer type
+    output        HWRITE_bootrom;        // Transfer direction
+    output  [2:0] HSIZE_bootrom;         // Transfer size
+    output  [2:0] HBURST_bootrom;        // Burst type
+    output  [3:0] HPROT_bootrom;         // Protection control
+    output  [3:0] HMASTER_bootrom;       // Master select
+    output [31:0] HWDATA_bootrom;        // Write data
+    output        HMASTLOCK_bootrom;     // Locked Sequence
+    output        HREADYMUX_bootrom;     // Transfer done
 
     // Output port MI1 (outputs to slave 1)
-    output        HSEL_ram2;          // Slave Select
-    output [31:0] HADDR_ram2;         // Address bus
-    output  [1:0] HTRANS_ram2;        // Transfer type
-    output        HWRITE_ram2;        // Transfer direction
-    output  [2:0] HSIZE_ram2;         // Transfer size
-    output  [2:0] HBURST_ram2;        // Burst type
-    output  [3:0] HPROT_ram2;         // Protection control
-    output  [3:0] HMASTER_ram2;       // Master select
-    output [31:0] HWDATA_ram2;        // Write data
-    output        HMASTLOCK_ram2;     // Locked Sequence
-    output        HREADYMUX_ram2;     // Transfer done
-    output [1:0] HAUSER_ram2;        // Address USER signals
-    output [1:0] HWUSER_ram2;        // Write-data USER signals
+    output        HSEL_imem;          // Slave Select
+    output [31:0] HADDR_imem;         // Address bus
+    output  [1:0] HTRANS_imem;        // Transfer type
+    output        HWRITE_imem;        // Transfer direction
+    output  [2:0] HSIZE_imem;         // Transfer size
+    output  [2:0] HBURST_imem;        // Burst type
+    output  [3:0] HPROT_imem;         // Protection control
+    output  [3:0] HMASTER_imem;       // Master select
+    output [31:0] HWDATA_imem;        // Write data
+    output        HMASTLOCK_imem;     // Locked Sequence
+    output        HREADYMUX_imem;     // Transfer done
 
     // Output port MI2 (outputs to slave 2)
-    output        HSEL_ram3;          // Slave Select
-    output [31:0] HADDR_ram3;         // Address bus
-    output  [1:0] HTRANS_ram3;        // Transfer type
-    output        HWRITE_ram3;        // Transfer direction
-    output  [2:0] HSIZE_ram3;         // Transfer size
-    output  [2:0] HBURST_ram3;        // Burst type
-    output  [3:0] HPROT_ram3;         // Protection control
-    output  [3:0] HMASTER_ram3;       // Master select
-    output [31:0] HWDATA_ram3;        // Write data
-    output        HMASTLOCK_ram3;     // Locked Sequence
-    output        HREADYMUX_ram3;     // Transfer done
-    output [1:0] HAUSER_ram3;        // Address USER signals
-    output [1:0] HWUSER_ram3;        // Write-data USER signals
+    output        HSEL_dmem;          // Slave Select
+    output [31:0] HADDR_dmem;         // Address bus
+    output  [1:0] HTRANS_dmem;        // Transfer type
+    output        HWRITE_dmem;        // Transfer direction
+    output  [2:0] HSIZE_dmem;         // Transfer size
+    output  [2:0] HBURST_dmem;        // Burst type
+    output  [3:0] HPROT_dmem;         // Protection control
+    output  [3:0] HMASTER_dmem;       // Master select
+    output [31:0] HWDATA_dmem;        // Write data
+    output        HMASTLOCK_dmem;     // Locked Sequence
+    output        HREADYMUX_dmem;     // Transfer done
 
     // Output port MI3 (outputs to slave 3)
-    output        HSEL_sys;          // Slave Select
-    output [31:0] HADDR_sys;         // Address bus
-    output  [1:0] HTRANS_sys;        // Transfer type
-    output        HWRITE_sys;        // Transfer direction
-    output  [2:0] HSIZE_sys;         // Transfer size
-    output  [2:0] HBURST_sys;        // Burst type
-    output  [3:0] HPROT_sys;         // Protection control
-    output  [3:0] HMASTER_sys;       // Master select
-    output [31:0] HWDATA_sys;        // Write data
-    output        HMASTLOCK_sys;     // Locked Sequence
-    output        HREADYMUX_sys;     // Transfer done
-    output [1:0] HAUSER_sys;        // Address USER signals
-    output [1:0] HWUSER_sys;        // Write-data USER signals
+    output        HSEL_sysio;          // Slave Select
+    output [31:0] HADDR_sysio;         // Address bus
+    output  [1:0] HTRANS_sysio;        // Transfer type
+    output        HWRITE_sysio;        // Transfer direction
+    output  [2:0] HSIZE_sysio;         // Transfer size
+    output  [2:0] HBURST_sysio;        // Burst type
+    output  [3:0] HPROT_sysio;         // Protection control
+    output  [3:0] HMASTER_sysio;       // Master select
+    output [31:0] HWDATA_sysio;        // Write data
+    output        HMASTLOCK_sysio;     // Locked Sequence
+    output        HREADYMUX_sysio;     // Transfer done
 
     // Output port MI4 (outputs to slave 4)
-    output        HSEL_ram8;          // Slave Select
-    output [31:0] HADDR_ram8;         // Address bus
-    output  [1:0] HTRANS_ram8;        // Transfer type
-    output        HWRITE_ram8;        // Transfer direction
-    output  [2:0] HSIZE_ram8;         // Transfer size
-    output  [2:0] HBURST_ram8;        // Burst type
-    output  [3:0] HPROT_ram8;         // Protection control
-    output  [3:0] HMASTER_ram8;       // Master select
-    output [31:0] HWDATA_ram8;        // Write data
-    output        HMASTLOCK_ram8;     // Locked Sequence
-    output        HREADYMUX_ram8;     // Transfer done
-    output [1:0] HAUSER_ram8;        // Address USER signals
-    output [1:0] HWUSER_ram8;        // Write-data USER signals
+    output        HSEL_expram_l;          // Slave Select
+    output [31:0] HADDR_expram_l;         // Address bus
+    output  [1:0] HTRANS_expram_l;        // Transfer type
+    output        HWRITE_expram_l;        // Transfer direction
+    output  [2:0] HSIZE_expram_l;         // Transfer size
+    output  [2:0] HBURST_expram_l;        // Burst type
+    output  [3:0] HPROT_expram_l;         // Protection control
+    output  [3:0] HMASTER_expram_l;       // Master select
+    output [31:0] HWDATA_expram_l;        // Write data
+    output        HMASTLOCK_expram_l;     // Locked Sequence
+    output        HREADYMUX_expram_l;     // Transfer done
 
     // Output port MI5 (outputs to slave 5)
-    output        HSEL_ram9;          // Slave Select
-    output [31:0] HADDR_ram9;         // Address bus
-    output  [1:0] HTRANS_ram9;        // Transfer type
-    output        HWRITE_ram9;        // Transfer direction
-    output  [2:0] HSIZE_ram9;         // Transfer size
-    output  [2:0] HBURST_ram9;        // Burst type
-    output  [3:0] HPROT_ram9;         // Protection control
-    output  [3:0] HMASTER_ram9;       // Master select
-    output [31:0] HWDATA_ram9;        // Write data
-    output        HMASTLOCK_ram9;     // Locked Sequence
-    output        HREADYMUX_ram9;     // Transfer done
-    output [1:0] HAUSER_ram9;        // Address USER signals
-    output [1:0] HWUSER_ram9;        // Write-data USER signals
+    output        HSEL_expram_h;          // Slave Select
+    output [31:0] HADDR_expram_h;         // Address bus
+    output  [1:0] HTRANS_expram_h;        // Transfer type
+    output        HWRITE_expram_h;        // Transfer direction
+    output  [2:0] HSIZE_expram_h;         // Transfer size
+    output  [2:0] HBURST_expram_h;        // Burst type
+    output  [3:0] HPROT_expram_h;         // Protection control
+    output  [3:0] HMASTER_expram_h;       // Master select
+    output [31:0] HWDATA_expram_h;        // Write data
+    output        HMASTLOCK_expram_h;     // Locked Sequence
+    output        HREADYMUX_expram_h;     // Transfer done
 
     // Output port MI6 (outputs to slave 6)
     output        HSEL_exp;          // Slave Select
@@ -514,32 +479,39 @@ module nanosoc_ahb32_4x7_busmatrix (
     output [31:0] HWDATA_exp;        // Write data
     output        HMASTLOCK_exp;     // Locked Sequence
     output        HREADYMUX_exp;     // Transfer done
-    output [1:0] HAUSER_exp;        // Address USER signals
-    output [1:0] HWUSER_exp;        // Write-data USER signals
+
+    // Output port MI7 (outputs to slave 7)
+    output        HSEL_systable;          // Slave Select
+    output [31:0] HADDR_systable;         // Address bus
+    output  [1:0] HTRANS_systable;        // Transfer type
+    output        HWRITE_systable;        // Transfer direction
+    output  [2:0] HSIZE_systable;         // Transfer size
+    output  [2:0] HBURST_systable;        // Burst type
+    output  [3:0] HPROT_systable;         // Protection control
+    output  [3:0] HMASTER_systable;       // Master select
+    output [31:0] HWDATA_systable;        // Write data
+    output        HMASTLOCK_systable;     // Locked Sequence
+    output        HREADYMUX_systable;     // Transfer done
 
     // Input port SI0 (outputs to master 0)
-    output [31:0] HRDATA_adp;        // Read data bus
-    output        HREADYOUT_adp;     // HREADY feedback
-    output  [1:0] HRESP_adp;         // Transfer response
-    output [1:0] HRUSER_adp;        // Read-data USER signals
+    output [31:0] HRDATA_socdebug;        // Read data bus
+    output        HREADYOUT_socdebug;     // HREADY feedback
+    output  [1:0] HRESP_socdebug;         // Transfer response
 
     // Input port SI1 (outputs to master 1)
-    output [31:0] HRDATA_dma;        // Read data bus
-    output        HREADYOUT_dma;     // HREADY feedback
-    output  [1:0] HRESP_dma;         // Transfer response
-    output [1:0] HRUSER_dma;        // Read-data USER signals
+    output [31:0] HRDATA_dma_0;        // Read data bus
+    output        HREADYOUT_dma_0;     // HREADY feedback
+    output  [1:0] HRESP_dma_0;         // Transfer response
 
     // Input port SI2 (outputs to master 2)
-    output [31:0] HRDATA_dma2;        // Read data bus
-    output        HREADYOUT_dma2;     // HREADY feedback
-    output  [1:0] HRESP_dma2;         // Transfer response
-    output [1:0] HRUSER_dma2;        // Read-data USER signals
+    output [31:0] HRDATA_dma_1;        // Read data bus
+    output        HREADYOUT_dma_1;     // HREADY feedback
+    output  [1:0] HRESP_dma_1;         // Transfer response
 
     // Input port SI3 (outputs to master 3)
     output [31:0] HRDATA_cpu;        // Read data bus
     output        HREADYOUT_cpu;     // HREADY feedback
     output  [1:0] HRESP_cpu;         // Transfer response
-    output [1:0] HRUSER_cpu;        // Read-data USER signals
 
     // Scan test dummy signals; not connected until scan insertion
     output        SCANOUTHCLK;     // Scan Chain Output
@@ -557,64 +529,55 @@ module nanosoc_ahb32_4x7_busmatrix (
     wire   [3:0] REMAP;           // REMAP signal
 
     // Input Port SI0
-    wire         HSEL_adp;          // Slave Select
-    wire  [31:0] HADDR_adp;         // Address bus
-    wire   [1:0] HTRANS_adp;        // Transfer type
-    wire         HWRITE_adp;        // Transfer direction
-    wire   [2:0] HSIZE_adp;         // Transfer size
-    wire   [2:0] HBURST_adp;        // Burst type
-    wire   [3:0] HPROT_adp;         // Protection control
-    wire   [3:0] HMASTER_adp;       // Master select
-    wire  [31:0] HWDATA_adp;        // Write data
-    wire         HMASTLOCK_adp;     // Locked Sequence
-    wire         HREADY_adp;        // Transfer done
-
-    wire  [31:0] HRDATA_adp;        // Read data bus
-    wire         HREADYOUT_adp;     // HREADY feedback
-    wire   [1:0] HRESP_adp;         // Transfer response
-    wire  [1:0] HAUSER_adp;        // Address USER signals
-    wire  [1:0] HWUSER_adp;        // Write-data USER signals
-    wire  [1:0] HRUSER_adp;        // Read-data USER signals
+    wire         HSEL_socdebug;          // Slave Select
+    wire  [31:0] HADDR_socdebug;         // Address bus
+    wire   [1:0] HTRANS_socdebug;        // Transfer type
+    wire         HWRITE_socdebug;        // Transfer direction
+    wire   [2:0] HSIZE_socdebug;         // Transfer size
+    wire   [2:0] HBURST_socdebug;        // Burst type
+    wire   [3:0] HPROT_socdebug;         // Protection control
+    wire   [3:0] HMASTER_socdebug;       // Master select
+    wire  [31:0] HWDATA_socdebug;        // Write data
+    wire         HMASTLOCK_socdebug;     // Locked Sequence
+    wire         HREADY_socdebug;        // Transfer done
+
+    wire  [31:0] HRDATA_socdebug;        // Read data bus
+    wire         HREADYOUT_socdebug;     // HREADY feedback
+    wire   [1:0] HRESP_socdebug;         // Transfer response
 
     // Input Port SI1
-    wire         HSEL_dma;          // Slave Select
-    wire  [31:0] HADDR_dma;         // Address bus
-    wire   [1:0] HTRANS_dma;        // Transfer type
-    wire         HWRITE_dma;        // Transfer direction
-    wire   [2:0] HSIZE_dma;         // Transfer size
-    wire   [2:0] HBURST_dma;        // Burst type
-    wire   [3:0] HPROT_dma;         // Protection control
-    wire   [3:0] HMASTER_dma;       // Master select
-    wire  [31:0] HWDATA_dma;        // Write data
-    wire         HMASTLOCK_dma;     // Locked Sequence
-    wire         HREADY_dma;        // Transfer done
-
-    wire  [31:0] HRDATA_dma;        // Read data bus
-    wire         HREADYOUT_dma;     // HREADY feedback
-    wire   [1:0] HRESP_dma;         // Transfer response
-    wire  [1:0] HAUSER_dma;        // Address USER signals
-    wire  [1:0] HWUSER_dma;        // Write-data USER signals
-    wire  [1:0] HRUSER_dma;        // Read-data USER signals
+    wire         HSEL_dma_0;          // Slave Select
+    wire  [31:0] HADDR_dma_0;         // Address bus
+    wire   [1:0] HTRANS_dma_0;        // Transfer type
+    wire         HWRITE_dma_0;        // Transfer direction
+    wire   [2:0] HSIZE_dma_0;         // Transfer size
+    wire   [2:0] HBURST_dma_0;        // Burst type
+    wire   [3:0] HPROT_dma_0;         // Protection control
+    wire   [3:0] HMASTER_dma_0;       // Master select
+    wire  [31:0] HWDATA_dma_0;        // Write data
+    wire         HMASTLOCK_dma_0;     // Locked Sequence
+    wire         HREADY_dma_0;        // Transfer done
+
+    wire  [31:0] HRDATA_dma_0;        // Read data bus
+    wire         HREADYOUT_dma_0;     // HREADY feedback
+    wire   [1:0] HRESP_dma_0;         // Transfer response
 
     // Input Port SI2
-    wire         HSEL_dma2;          // Slave Select
-    wire  [31:0] HADDR_dma2;         // Address bus
-    wire   [1:0] HTRANS_dma2;        // Transfer type
-    wire         HWRITE_dma2;        // Transfer direction
-    wire   [2:0] HSIZE_dma2;         // Transfer size
-    wire   [2:0] HBURST_dma2;        // Burst type
-    wire   [3:0] HPROT_dma2;         // Protection control
-    wire   [3:0] HMASTER_dma2;       // Master select
-    wire  [31:0] HWDATA_dma2;        // Write data
-    wire         HMASTLOCK_dma2;     // Locked Sequence
-    wire         HREADY_dma2;        // Transfer done
-
-    wire  [31:0] HRDATA_dma2;        // Read data bus
-    wire         HREADYOUT_dma2;     // HREADY feedback
-    wire   [1:0] HRESP_dma2;         // Transfer response
-    wire  [1:0] HAUSER_dma2;        // Address USER signals
-    wire  [1:0] HWUSER_dma2;        // Write-data USER signals
-    wire  [1:0] HRUSER_dma2;        // Read-data USER signals
+    wire         HSEL_dma_1;          // Slave Select
+    wire  [31:0] HADDR_dma_1;         // Address bus
+    wire   [1:0] HTRANS_dma_1;        // Transfer type
+    wire         HWRITE_dma_1;        // Transfer direction
+    wire   [2:0] HSIZE_dma_1;         // Transfer size
+    wire   [2:0] HBURST_dma_1;        // Burst type
+    wire   [3:0] HPROT_dma_1;         // Protection control
+    wire   [3:0] HMASTER_dma_1;       // Master select
+    wire  [31:0] HWDATA_dma_1;        // Write data
+    wire         HMASTLOCK_dma_1;     // Locked Sequence
+    wire         HREADY_dma_1;        // Transfer done
+
+    wire  [31:0] HRDATA_dma_1;        // Read data bus
+    wire         HREADYOUT_dma_1;     // HREADY feedback
+    wire   [1:0] HRESP_dma_1;         // Transfer response
 
     // Input Port SI3
     wire         HSEL_cpu;          // Slave Select
@@ -632,129 +595,108 @@ module nanosoc_ahb32_4x7_busmatrix (
     wire  [31:0] HRDATA_cpu;        // Read data bus
     wire         HREADYOUT_cpu;     // HREADY feedback
     wire   [1:0] HRESP_cpu;         // Transfer response
-    wire  [1:0] HAUSER_cpu;        // Address USER signals
-    wire  [1:0] HWUSER_cpu;        // Write-data USER signals
-    wire  [1:0] HRUSER_cpu;        // Read-data USER signals
 
     // Output Port MI0
-    wire         HSEL_rom1;          // Slave Select
-    wire  [31:0] HADDR_rom1;         // Address bus
-    wire   [1:0] HTRANS_rom1;        // Transfer type
-    wire         HWRITE_rom1;        // Transfer direction
-    wire   [2:0] HSIZE_rom1;         // Transfer size
-    wire   [2:0] HBURST_rom1;        // Burst type
-    wire   [3:0] HPROT_rom1;         // Protection control
-    wire   [3:0] HMASTER_rom1;       // Master select
-    wire  [31:0] HWDATA_rom1;        // Write data
-    wire         HMASTLOCK_rom1;     // Locked Sequence
-    wire         HREADYMUX_rom1;     // Transfer done
-
-    wire  [31:0] HRDATA_rom1;        // Read data bus
-    wire         HREADYOUT_rom1;     // HREADY feedback
-    wire   [1:0] HRESP_rom1;         // Transfer response
-    wire  [1:0] HAUSER_rom1;        // Address USER signals
-    wire  [1:0] HWUSER_rom1;        // Write-data USER signals
-    wire  [1:0] HRUSER_rom1;        // Read-data USER signals
+    wire         HSEL_bootrom;          // Slave Select
+    wire  [31:0] HADDR_bootrom;         // Address bus
+    wire   [1:0] HTRANS_bootrom;        // Transfer type
+    wire         HWRITE_bootrom;        // Transfer direction
+    wire   [2:0] HSIZE_bootrom;         // Transfer size
+    wire   [2:0] HBURST_bootrom;        // Burst type
+    wire   [3:0] HPROT_bootrom;         // Protection control
+    wire   [3:0] HMASTER_bootrom;       // Master select
+    wire  [31:0] HWDATA_bootrom;        // Write data
+    wire         HMASTLOCK_bootrom;     // Locked Sequence
+    wire         HREADYMUX_bootrom;     // Transfer done
+
+    wire  [31:0] HRDATA_bootrom;        // Read data bus
+    wire         HREADYOUT_bootrom;     // HREADY feedback
+    wire   [1:0] HRESP_bootrom;         // Transfer response
 
     // Output Port MI1
-    wire         HSEL_ram2;          // Slave Select
-    wire  [31:0] HADDR_ram2;         // Address bus
-    wire   [1:0] HTRANS_ram2;        // Transfer type
-    wire         HWRITE_ram2;        // Transfer direction
-    wire   [2:0] HSIZE_ram2;         // Transfer size
-    wire   [2:0] HBURST_ram2;        // Burst type
-    wire   [3:0] HPROT_ram2;         // Protection control
-    wire   [3:0] HMASTER_ram2;       // Master select
-    wire  [31:0] HWDATA_ram2;        // Write data
-    wire         HMASTLOCK_ram2;     // Locked Sequence
-    wire         HREADYMUX_ram2;     // Transfer done
-
-    wire  [31:0] HRDATA_ram2;        // Read data bus
-    wire         HREADYOUT_ram2;     // HREADY feedback
-    wire   [1:0] HRESP_ram2;         // Transfer response
-    wire  [1:0] HAUSER_ram2;        // Address USER signals
-    wire  [1:0] HWUSER_ram2;        // Write-data USER signals
-    wire  [1:0] HRUSER_ram2;        // Read-data USER signals
+    wire         HSEL_imem;          // Slave Select
+    wire  [31:0] HADDR_imem;         // Address bus
+    wire   [1:0] HTRANS_imem;        // Transfer type
+    wire         HWRITE_imem;        // Transfer direction
+    wire   [2:0] HSIZE_imem;         // Transfer size
+    wire   [2:0] HBURST_imem;        // Burst type
+    wire   [3:0] HPROT_imem;         // Protection control
+    wire   [3:0] HMASTER_imem;       // Master select
+    wire  [31:0] HWDATA_imem;        // Write data
+    wire         HMASTLOCK_imem;     // Locked Sequence
+    wire         HREADYMUX_imem;     // Transfer done
+
+    wire  [31:0] HRDATA_imem;        // Read data bus
+    wire         HREADYOUT_imem;     // HREADY feedback
+    wire   [1:0] HRESP_imem;         // Transfer response
 
     // Output Port MI2
-    wire         HSEL_ram3;          // Slave Select
-    wire  [31:0] HADDR_ram3;         // Address bus
-    wire   [1:0] HTRANS_ram3;        // Transfer type
-    wire         HWRITE_ram3;        // Transfer direction
-    wire   [2:0] HSIZE_ram3;         // Transfer size
-    wire   [2:0] HBURST_ram3;        // Burst type
-    wire   [3:0] HPROT_ram3;         // Protection control
-    wire   [3:0] HMASTER_ram3;       // Master select
-    wire  [31:0] HWDATA_ram3;        // Write data
-    wire         HMASTLOCK_ram3;     // Locked Sequence
-    wire         HREADYMUX_ram3;     // Transfer done
-
-    wire  [31:0] HRDATA_ram3;        // Read data bus
-    wire         HREADYOUT_ram3;     // HREADY feedback
-    wire   [1:0] HRESP_ram3;         // Transfer response
-    wire  [1:0] HAUSER_ram3;        // Address USER signals
-    wire  [1:0] HWUSER_ram3;        // Write-data USER signals
-    wire  [1:0] HRUSER_ram3;        // Read-data USER signals
+    wire         HSEL_dmem;          // Slave Select
+    wire  [31:0] HADDR_dmem;         // Address bus
+    wire   [1:0] HTRANS_dmem;        // Transfer type
+    wire         HWRITE_dmem;        // Transfer direction
+    wire   [2:0] HSIZE_dmem;         // Transfer size
+    wire   [2:0] HBURST_dmem;        // Burst type
+    wire   [3:0] HPROT_dmem;         // Protection control
+    wire   [3:0] HMASTER_dmem;       // Master select
+    wire  [31:0] HWDATA_dmem;        // Write data
+    wire         HMASTLOCK_dmem;     // Locked Sequence
+    wire         HREADYMUX_dmem;     // Transfer done
+
+    wire  [31:0] HRDATA_dmem;        // Read data bus
+    wire         HREADYOUT_dmem;     // HREADY feedback
+    wire   [1:0] HRESP_dmem;         // Transfer response
 
     // Output Port MI3
-    wire         HSEL_sys;          // Slave Select
-    wire  [31:0] HADDR_sys;         // Address bus
-    wire   [1:0] HTRANS_sys;        // Transfer type
-    wire         HWRITE_sys;        // Transfer direction
-    wire   [2:0] HSIZE_sys;         // Transfer size
-    wire   [2:0] HBURST_sys;        // Burst type
-    wire   [3:0] HPROT_sys;         // Protection control
-    wire   [3:0] HMASTER_sys;       // Master select
-    wire  [31:0] HWDATA_sys;        // Write data
-    wire         HMASTLOCK_sys;     // Locked Sequence
-    wire         HREADYMUX_sys;     // Transfer done
-
-    wire  [31:0] HRDATA_sys;        // Read data bus
-    wire         HREADYOUT_sys;     // HREADY feedback
-    wire   [1:0] HRESP_sys;         // Transfer response
-    wire  [1:0] HAUSER_sys;        // Address USER signals
-    wire  [1:0] HWUSER_sys;        // Write-data USER signals
-    wire  [1:0] HRUSER_sys;        // Read-data USER signals
+    wire         HSEL_sysio;          // Slave Select
+    wire  [31:0] HADDR_sysio;         // Address bus
+    wire   [1:0] HTRANS_sysio;        // Transfer type
+    wire         HWRITE_sysio;        // Transfer direction
+    wire   [2:0] HSIZE_sysio;         // Transfer size
+    wire   [2:0] HBURST_sysio;        // Burst type
+    wire   [3:0] HPROT_sysio;         // Protection control
+    wire   [3:0] HMASTER_sysio;       // Master select
+    wire  [31:0] HWDATA_sysio;        // Write data
+    wire         HMASTLOCK_sysio;     // Locked Sequence
+    wire         HREADYMUX_sysio;     // Transfer done
+
+    wire  [31:0] HRDATA_sysio;        // Read data bus
+    wire         HREADYOUT_sysio;     // HREADY feedback
+    wire   [1:0] HRESP_sysio;         // Transfer response
 
     // Output Port MI4
-    wire         HSEL_ram8;          // Slave Select
-    wire  [31:0] HADDR_ram8;         // Address bus
-    wire   [1:0] HTRANS_ram8;        // Transfer type
-    wire         HWRITE_ram8;        // Transfer direction
-    wire   [2:0] HSIZE_ram8;         // Transfer size
-    wire   [2:0] HBURST_ram8;        // Burst type
-    wire   [3:0] HPROT_ram8;         // Protection control
-    wire   [3:0] HMASTER_ram8;       // Master select
-    wire  [31:0] HWDATA_ram8;        // Write data
-    wire         HMASTLOCK_ram8;     // Locked Sequence
-    wire         HREADYMUX_ram8;     // Transfer done
-
-    wire  [31:0] HRDATA_ram8;        // Read data bus
-    wire         HREADYOUT_ram8;     // HREADY feedback
-    wire   [1:0] HRESP_ram8;         // Transfer response
-    wire  [1:0] HAUSER_ram8;        // Address USER signals
-    wire  [1:0] HWUSER_ram8;        // Write-data USER signals
-    wire  [1:0] HRUSER_ram8;        // Read-data USER signals
+    wire         HSEL_expram_l;          // Slave Select
+    wire  [31:0] HADDR_expram_l;         // Address bus
+    wire   [1:0] HTRANS_expram_l;        // Transfer type
+    wire         HWRITE_expram_l;        // Transfer direction
+    wire   [2:0] HSIZE_expram_l;         // Transfer size
+    wire   [2:0] HBURST_expram_l;        // Burst type
+    wire   [3:0] HPROT_expram_l;         // Protection control
+    wire   [3:0] HMASTER_expram_l;       // Master select
+    wire  [31:0] HWDATA_expram_l;        // Write data
+    wire         HMASTLOCK_expram_l;     // Locked Sequence
+    wire         HREADYMUX_expram_l;     // Transfer done
+
+    wire  [31:0] HRDATA_expram_l;        // Read data bus
+    wire         HREADYOUT_expram_l;     // HREADY feedback
+    wire   [1:0] HRESP_expram_l;         // Transfer response
 
     // Output Port MI5
-    wire         HSEL_ram9;          // Slave Select
-    wire  [31:0] HADDR_ram9;         // Address bus
-    wire   [1:0] HTRANS_ram9;        // Transfer type
-    wire         HWRITE_ram9;        // Transfer direction
-    wire   [2:0] HSIZE_ram9;         // Transfer size
-    wire   [2:0] HBURST_ram9;        // Burst type
-    wire   [3:0] HPROT_ram9;         // Protection control
-    wire   [3:0] HMASTER_ram9;       // Master select
-    wire  [31:0] HWDATA_ram9;        // Write data
-    wire         HMASTLOCK_ram9;     // Locked Sequence
-    wire         HREADYMUX_ram9;     // Transfer done
-
-    wire  [31:0] HRDATA_ram9;        // Read data bus
-    wire         HREADYOUT_ram9;     // HREADY feedback
-    wire   [1:0] HRESP_ram9;         // Transfer response
-    wire  [1:0] HAUSER_ram9;        // Address USER signals
-    wire  [1:0] HWUSER_ram9;        // Write-data USER signals
-    wire  [1:0] HRUSER_ram9;        // Read-data USER signals
+    wire         HSEL_expram_h;          // Slave Select
+    wire  [31:0] HADDR_expram_h;         // Address bus
+    wire   [1:0] HTRANS_expram_h;        // Transfer type
+    wire         HWRITE_expram_h;        // Transfer direction
+    wire   [2:0] HSIZE_expram_h;         // Transfer size
+    wire   [2:0] HBURST_expram_h;        // Burst type
+    wire   [3:0] HPROT_expram_h;         // Protection control
+    wire   [3:0] HMASTER_expram_h;       // Master select
+    wire  [31:0] HWDATA_expram_h;        // Write data
+    wire         HMASTLOCK_expram_h;     // Locked Sequence
+    wire         HREADYMUX_expram_h;     // Transfer done
+
+    wire  [31:0] HRDATA_expram_h;        // Read data bus
+    wire         HREADYOUT_expram_h;     // HREADY feedback
+    wire   [1:0] HRESP_expram_h;         // Transfer response
 
     // Output Port MI6
     wire         HSEL_exp;          // Slave Select
@@ -772,9 +714,23 @@ module nanosoc_ahb32_4x7_busmatrix (
     wire  [31:0] HRDATA_exp;        // Read data bus
     wire         HREADYOUT_exp;     // HREADY feedback
     wire   [1:0] HRESP_exp;         // Transfer response
-    wire  [1:0] HAUSER_exp;        // Address USER signals
-    wire  [1:0] HWUSER_exp;        // Write-data USER signals
-    wire  [1:0] HRUSER_exp;        // Read-data USER signals
+
+    // Output Port MI7
+    wire         HSEL_systable;          // Slave Select
+    wire  [31:0] HADDR_systable;         // Address bus
+    wire   [1:0] HTRANS_systable;        // Transfer type
+    wire         HWRITE_systable;        // Transfer direction
+    wire   [2:0] HSIZE_systable;         // Transfer size
+    wire   [2:0] HBURST_systable;        // Burst type
+    wire   [3:0] HPROT_systable;         // Protection control
+    wire   [3:0] HMASTER_systable;       // Master select
+    wire  [31:0] HWDATA_systable;        // Write data
+    wire         HMASTLOCK_systable;     // Locked Sequence
+    wire         HREADYMUX_systable;     // Transfer done
+
+    wire  [31:0] HRDATA_systable;        // Read data bus
+    wire         HREADYOUT_systable;     // HREADY feedback
+    wire   [1:0] HRESP_systable;         // Transfer response
 
 
 // -----------------------------------------------------------------------------
@@ -795,7 +751,6 @@ module nanosoc_ahb32_4x7_busmatrix (
     wire         i_held_tran0;       // HeldTran signal
     wire         i_readyout0;       // Readyout signal
     wire   [1:0] i_resp0;           // Response signal
-    wire  [1:0] i_auser0;          // HAUSER signal
 
     // Bus-switch input SI1
     wire         i_sel1;            // HSEL signal
@@ -811,7 +766,6 @@ module nanosoc_ahb32_4x7_busmatrix (
     wire         i_held_tran1;       // HeldTran signal
     wire         i_readyout1;       // Readyout signal
     wire   [1:0] i_resp1;           // Response signal
-    wire  [1:0] i_auser1;          // HAUSER signal
 
     // Bus-switch input SI2
     wire         i_sel2;            // HSEL signal
@@ -827,7 +781,6 @@ module nanosoc_ahb32_4x7_busmatrix (
     wire         i_held_tran2;       // HeldTran signal
     wire         i_readyout2;       // Readyout signal
     wire   [1:0] i_resp2;           // Response signal
-    wire  [1:0] i_auser2;          // HAUSER signal
 
     // Bus-switch input SI3
     wire         i_sel3;            // HSEL signal
@@ -843,7 +796,6 @@ module nanosoc_ahb32_4x7_busmatrix (
     wire         i_held_tran3;       // HeldTran signal
     wire         i_readyout3;       // Readyout signal
     wire   [1:0] i_resp3;           // Response signal
-    wire  [1:0] i_auser3;          // HAUSER signal
 
     // Bus-switch SI0 to MI0 signals
     wire         i_sel0to0;         // Routing selection signal
@@ -873,6 +825,10 @@ module nanosoc_ahb32_4x7_busmatrix (
     wire         i_sel0to6;         // Routing selection signal
     wire         i_active0to6;      // Active signal
 
+    // Bus-switch SI0 to MI7 signals
+    wire         i_sel0to7;         // Routing selection signal
+    wire         i_active0to7;      // Active signal
+
     // Bus-switch SI1 to MI0 signals
     wire         i_sel1to0;         // Routing selection signal
     wire         i_active1to0;      // Active signal
@@ -957,13 +913,18 @@ module nanosoc_ahb32_4x7_busmatrix (
     wire         i_sel3to6;         // Routing selection signal
     wire         i_active3to6;      // Active signal
 
-    wire         i_hready_mux__rom1;    // Internal HREADYMUXM for MI0
-    wire         i_hready_mux__ram2;    // Internal HREADYMUXM for MI1
-    wire         i_hready_mux__ram3;    // Internal HREADYMUXM for MI2
-    wire         i_hready_mux__sys;    // Internal HREADYMUXM for MI3
-    wire         i_hready_mux__ram8;    // Internal HREADYMUXM for MI4
-    wire         i_hready_mux__ram9;    // Internal HREADYMUXM for MI5
+    // Bus-switch SI3 to MI7 signals
+    wire         i_sel3to7;         // Routing selection signal
+    wire         i_active3to7;      // Active signal
+
+    wire         i_hready_mux__bootrom;    // Internal HREADYMUXM for MI0
+    wire         i_hready_mux__imem;    // Internal HREADYMUXM for MI1
+    wire         i_hready_mux__dmem;    // 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
 
 
 // -----------------------------------------------------------------------------
@@ -971,24 +932,23 @@ module nanosoc_ahb32_4x7_busmatrix (
 // -----------------------------------------------------------------------------
 
   // Input stage for SI0
-  nanosoc_ahb32_4x7_inititator_input u_nanosoc_ahb32_4x7_inititator_input_0 (
+  nanosoc_inititator_input u_nanosoc_inititator_input_0 (
 
     // Common AHB signals
     .HCLK       (HCLK),
     .HRESETn    (HRESETn),
 
     // Input Port Address/Control Signals
-    .HSELS      (HSEL_adp),
-    .HADDRS     (HADDR_adp),
-    .HTRANSS    (HTRANS_adp),
-    .HWRITES    (HWRITE_adp),
-    .HSIZES     (HSIZE_adp),
-    .HBURSTS    (HBURST_adp),
-    .HPROTS     (HPROT_adp),
-    .HMASTERS   (HMASTER_adp),
-    .HMASTLOCKS (HMASTLOCK_adp),
-    .HREADYS    (HREADY_adp),
-    .HAUSERS    (HAUSER_adp),
+    .HSELS      (HSEL_socdebug),
+    .HADDRS     (HADDR_socdebug),
+    .HTRANSS    (HTRANS_socdebug),
+    .HWRITES    (HWRITE_socdebug),
+    .HSIZES     (HSIZE_socdebug),
+    .HBURSTS    (HBURST_socdebug),
+    .HPROTS     (HPROT_socdebug),
+    .HMASTERS   (HMASTER_socdebug),
+    .HMASTLOCKS (HMASTLOCK_socdebug),
+    .HREADYS    (HREADY_socdebug),
 
     // Internal Response
     .active_ip     (i_active0),
@@ -996,13 +956,12 @@ module nanosoc_ahb32_4x7_busmatrix (
     .resp_ip       (i_resp0),
 
     // Input Port Response
-    .HREADYOUTS (HREADYOUT_adp),
-    .HRESPS     (HRESP_adp),
+    .HREADYOUTS (HREADYOUT_socdebug),
+    .HRESPS     (HRESP_socdebug),
 
     // Internal Address/Control Signals
     .sel_ip        (i_sel0),
     .addr_ip       (i_addr0),
-    .auser_ip      (i_auser0),
     .trans_ip      (i_trans0),
     .write_ip      (i_write0),
     .size_ip       (i_size0),
@@ -1016,24 +975,23 @@ module nanosoc_ahb32_4x7_busmatrix (
 
 
   // Input stage for SI1
-  nanosoc_ahb32_4x7_inititator_input u_nanosoc_ahb32_4x7_inititator_input_1 (
+  nanosoc_inititator_input u_nanosoc_inititator_input_1 (
 
     // Common AHB signals
     .HCLK       (HCLK),
     .HRESETn    (HRESETn),
 
     // Input Port Address/Control Signals
-    .HSELS      (HSEL_dma),
-    .HADDRS     (HADDR_dma),
-    .HTRANSS    (HTRANS_dma),
-    .HWRITES    (HWRITE_dma),
-    .HSIZES     (HSIZE_dma),
-    .HBURSTS    (HBURST_dma),
-    .HPROTS     (HPROT_dma),
-    .HMASTERS   (HMASTER_dma),
-    .HMASTLOCKS (HMASTLOCK_dma),
-    .HREADYS    (HREADY_dma),
-    .HAUSERS    (HAUSER_dma),
+    .HSELS      (HSEL_dma_0),
+    .HADDRS     (HADDR_dma_0),
+    .HTRANSS    (HTRANS_dma_0),
+    .HWRITES    (HWRITE_dma_0),
+    .HSIZES     (HSIZE_dma_0),
+    .HBURSTS    (HBURST_dma_0),
+    .HPROTS     (HPROT_dma_0),
+    .HMASTERS   (HMASTER_dma_0),
+    .HMASTLOCKS (HMASTLOCK_dma_0),
+    .HREADYS    (HREADY_dma_0),
 
     // Internal Response
     .active_ip     (i_active1),
@@ -1041,13 +999,12 @@ module nanosoc_ahb32_4x7_busmatrix (
     .resp_ip       (i_resp1),
 
     // Input Port Response
-    .HREADYOUTS (HREADYOUT_dma),
-    .HRESPS     (HRESP_dma),
+    .HREADYOUTS (HREADYOUT_dma_0),
+    .HRESPS     (HRESP_dma_0),
 
     // Internal Address/Control Signals
     .sel_ip        (i_sel1),
     .addr_ip       (i_addr1),
-    .auser_ip      (i_auser1),
     .trans_ip      (i_trans1),
     .write_ip      (i_write1),
     .size_ip       (i_size1),
@@ -1061,24 +1018,23 @@ module nanosoc_ahb32_4x7_busmatrix (
 
 
   // Input stage for SI2
-  nanosoc_ahb32_4x7_inititator_input u_nanosoc_ahb32_4x7_inititator_input_2 (
+  nanosoc_inititator_input u_nanosoc_inititator_input_2 (
 
     // Common AHB signals
     .HCLK       (HCLK),
     .HRESETn    (HRESETn),
 
     // Input Port Address/Control Signals
-    .HSELS      (HSEL_dma2),
-    .HADDRS     (HADDR_dma2),
-    .HTRANSS    (HTRANS_dma2),
-    .HWRITES    (HWRITE_dma2),
-    .HSIZES     (HSIZE_dma2),
-    .HBURSTS    (HBURST_dma2),
-    .HPROTS     (HPROT_dma2),
-    .HMASTERS   (HMASTER_dma2),
-    .HMASTLOCKS (HMASTLOCK_dma2),
-    .HREADYS    (HREADY_dma2),
-    .HAUSERS    (HAUSER_dma2),
+    .HSELS      (HSEL_dma_1),
+    .HADDRS     (HADDR_dma_1),
+    .HTRANSS    (HTRANS_dma_1),
+    .HWRITES    (HWRITE_dma_1),
+    .HSIZES     (HSIZE_dma_1),
+    .HBURSTS    (HBURST_dma_1),
+    .HPROTS     (HPROT_dma_1),
+    .HMASTERS   (HMASTER_dma_1),
+    .HMASTLOCKS (HMASTLOCK_dma_1),
+    .HREADYS    (HREADY_dma_1),
 
     // Internal Response
     .active_ip     (i_active2),
@@ -1086,13 +1042,12 @@ module nanosoc_ahb32_4x7_busmatrix (
     .resp_ip       (i_resp2),
 
     // Input Port Response
-    .HREADYOUTS (HREADYOUT_dma2),
-    .HRESPS     (HRESP_dma2),
+    .HREADYOUTS (HREADYOUT_dma_1),
+    .HRESPS     (HRESP_dma_1),
 
     // Internal Address/Control Signals
     .sel_ip        (i_sel2),
     .addr_ip       (i_addr2),
-    .auser_ip      (i_auser2),
     .trans_ip      (i_trans2),
     .write_ip      (i_write2),
     .size_ip       (i_size2),
@@ -1106,7 +1061,7 @@ module nanosoc_ahb32_4x7_busmatrix (
 
 
   // Input stage for SI3
-  nanosoc_ahb32_4x7_inititator_input u_nanosoc_ahb32_4x7_inititator_input_3 (
+  nanosoc_inititator_input u_nanosoc_inititator_input_3 (
 
     // Common AHB signals
     .HCLK       (HCLK),
@@ -1123,7 +1078,6 @@ module nanosoc_ahb32_4x7_busmatrix (
     .HMASTERS   (HMASTER_cpu),
     .HMASTLOCKS (HMASTLOCK_cpu),
     .HREADYS    (HREADY_cpu),
-    .HAUSERS    (HAUSER_cpu),
 
     // Internal Response
     .active_ip     (i_active3),
@@ -1137,7 +1091,6 @@ module nanosoc_ahb32_4x7_busmatrix (
     // Internal Address/Control Signals
     .sel_ip        (i_sel3),
     .addr_ip       (i_addr3),
-    .auser_ip      (i_auser3),
     .trans_ip      (i_trans3),
     .write_ip      (i_write3),
     .size_ip       (i_size3),
@@ -1151,7 +1104,7 @@ module nanosoc_ahb32_4x7_busmatrix (
 
 
   // Matrix decoder for SI0
-  nanosoc_ahb32_4x7_matrix_decode_adp u_nanosoc_ahb32_4x7_matrix_decode_adp (
+  nanosoc_matrix_decode_socdebug u_nanosoc_matrix_decode_socdebug (
 
     // Common AHB signals
     .HCLK       (HCLK),
@@ -1161,59 +1114,58 @@ module nanosoc_ahb32_4x7_busmatrix (
     .remapping_dec  ( REMAP[0] ),
 
     // Signals from Input stage SI0
-    .HREADYS    (HREADY_adp),
+    .HREADYS    (HREADY_socdebug),
     .sel_dec        (i_sel0),
     .decode_addr_dec (i_addr0[31:10]),   // HADDR[9:0] is not decoded
     .trans_dec      (i_trans0),
 
     // Control/Response for Output Stage MI0
     .active_dec0    (i_active0to0),
-    .readyout_dec0  (i_hready_mux__rom1),
-    .resp_dec0      (HRESP_rom1),
-    .rdata_dec0     (HRDATA_rom1),
-    .ruser_dec0     (HRUSER_rom1),
+    .readyout_dec0  (i_hready_mux__bootrom),
+    .resp_dec0      (HRESP_bootrom),
+    .rdata_dec0     (HRDATA_bootrom),
 
     // Control/Response for Output Stage MI1
     .active_dec1    (i_active0to1),
-    .readyout_dec1  (i_hready_mux__ram2),
-    .resp_dec1      (HRESP_ram2),
-    .rdata_dec1     (HRDATA_ram2),
-    .ruser_dec1     (HRUSER_ram2),
+    .readyout_dec1  (i_hready_mux__imem),
+    .resp_dec1      (HRESP_imem),
+    .rdata_dec1     (HRDATA_imem),
 
     // Control/Response for Output Stage MI2
     .active_dec2    (i_active0to2),
-    .readyout_dec2  (i_hready_mux__ram3),
-    .resp_dec2      (HRESP_ram3),
-    .rdata_dec2     (HRDATA_ram3),
-    .ruser_dec2     (HRUSER_ram3),
+    .readyout_dec2  (i_hready_mux__dmem),
+    .resp_dec2      (HRESP_dmem),
+    .rdata_dec2     (HRDATA_dmem),
 
     // Control/Response for Output Stage MI3
     .active_dec3    (i_active0to3),
-    .readyout_dec3  (i_hready_mux__sys),
-    .resp_dec3      (HRESP_sys),
-    .rdata_dec3     (HRDATA_sys),
-    .ruser_dec3     (HRUSER_sys),
+    .readyout_dec3  (i_hready_mux__sysio),
+    .resp_dec3      (HRESP_sysio),
+    .rdata_dec3     (HRDATA_sysio),
 
     // Control/Response for Output Stage MI4
     .active_dec4    (i_active0to4),
-    .readyout_dec4  (i_hready_mux__ram8),
-    .resp_dec4      (HRESP_ram8),
-    .rdata_dec4     (HRDATA_ram8),
-    .ruser_dec4     (HRUSER_ram8),
+    .readyout_dec4  (i_hready_mux__expram_l),
+    .resp_dec4      (HRESP_expram_l),
+    .rdata_dec4     (HRDATA_expram_l),
 
     // Control/Response for Output Stage MI5
     .active_dec5    (i_active0to5),
-    .readyout_dec5  (i_hready_mux__ram9),
-    .resp_dec5      (HRESP_ram9),
-    .rdata_dec5     (HRDATA_ram9),
-    .ruser_dec5     (HRUSER_ram9),
+    .readyout_dec5  (i_hready_mux__expram_h),
+    .resp_dec5      (HRESP_expram_h),
+    .rdata_dec5     (HRDATA_expram_h),
 
     // Control/Response for Output Stage MI6
     .active_dec6    (i_active0to6),
     .readyout_dec6  (i_hready_mux__exp),
     .resp_dec6      (HRESP_exp),
     .rdata_dec6     (HRDATA_exp),
-    .ruser_dec6     (HRUSER_exp),
+
+    // Control/Response for Output Stage MI7
+    .active_dec7    (i_active0to7),
+    .readyout_dec7  (i_hready_mux__systable),
+    .resp_dec7      (HRESP_systable),
+    .rdata_dec7     (HRDATA_systable),
 
     .sel_dec0       (i_sel0to0),
     .sel_dec1       (i_sel0to1),
@@ -1222,77 +1174,70 @@ module nanosoc_ahb32_4x7_busmatrix (
     .sel_dec4       (i_sel0to4),
     .sel_dec5       (i_sel0to5),
     .sel_dec6       (i_sel0to6),
+    .sel_dec7       (i_sel0to7),
 
     .active_dec     (i_active0),
     .HREADYOUTS (i_readyout0),
     .HRESPS     (i_resp0),
-    .HRUSERS    (HRUSER_adp),
-    .HRDATAS    (HRDATA_adp)
+    .HRDATAS    (HRDATA_socdebug)
 
     );
 
 
   // Matrix decoder for SI1
-  nanosoc_ahb32_4x7_matrix_decode_dma u_nanosoc_ahb32_4x7_matrix_decode_dma (
+  nanosoc_matrix_decode_dma_0 u_nanosoc_matrix_decode_dma_0 (
 
     // Common AHB signals
     .HCLK       (HCLK),
     .HRESETn    (HRESETn),
 
     // Signals from Input stage SI1
-    .HREADYS    (HREADY_dma),
+    .HREADYS    (HREADY_dma_0),
     .sel_dec        (i_sel1),
     .decode_addr_dec (i_addr1[31:10]),   // HADDR[9:0] is not decoded
     .trans_dec      (i_trans1),
 
     // Control/Response for Output Stage MI0
     .active_dec0    (i_active1to0),
-    .readyout_dec0  (i_hready_mux__rom1),
-    .resp_dec0      (HRESP_rom1),
-    .rdata_dec0     (HRDATA_rom1),
-    .ruser_dec0     (HRUSER_rom1),
+    .readyout_dec0  (i_hready_mux__bootrom),
+    .resp_dec0      (HRESP_bootrom),
+    .rdata_dec0     (HRDATA_bootrom),
 
     // Control/Response for Output Stage MI1
     .active_dec1    (i_active1to1),
-    .readyout_dec1  (i_hready_mux__ram2),
-    .resp_dec1      (HRESP_ram2),
-    .rdata_dec1     (HRDATA_ram2),
-    .ruser_dec1     (HRUSER_ram2),
+    .readyout_dec1  (i_hready_mux__imem),
+    .resp_dec1      (HRESP_imem),
+    .rdata_dec1     (HRDATA_imem),
 
     // Control/Response for Output Stage MI2
     .active_dec2    (i_active1to2),
-    .readyout_dec2  (i_hready_mux__ram3),
-    .resp_dec2      (HRESP_ram3),
-    .rdata_dec2     (HRDATA_ram3),
-    .ruser_dec2     (HRUSER_ram3),
+    .readyout_dec2  (i_hready_mux__dmem),
+    .resp_dec2      (HRESP_dmem),
+    .rdata_dec2     (HRDATA_dmem),
 
     // Control/Response for Output Stage MI3
     .active_dec3    (i_active1to3),
-    .readyout_dec3  (i_hready_mux__sys),
-    .resp_dec3      (HRESP_sys),
-    .rdata_dec3     (HRDATA_sys),
-    .ruser_dec3     (HRUSER_sys),
+    .readyout_dec3  (i_hready_mux__sysio),
+    .resp_dec3      (HRESP_sysio),
+    .rdata_dec3     (HRDATA_sysio),
 
     // Control/Response for Output Stage MI4
     .active_dec4    (i_active1to4),
-    .readyout_dec4  (i_hready_mux__ram8),
-    .resp_dec4      (HRESP_ram8),
-    .rdata_dec4     (HRDATA_ram8),
-    .ruser_dec4     (HRUSER_ram8),
+    .readyout_dec4  (i_hready_mux__expram_l),
+    .resp_dec4      (HRESP_expram_l),
+    .rdata_dec4     (HRDATA_expram_l),
 
     // Control/Response for Output Stage MI5
     .active_dec5    (i_active1to5),
-    .readyout_dec5  (i_hready_mux__ram9),
-    .resp_dec5      (HRESP_ram9),
-    .rdata_dec5     (HRDATA_ram9),
-    .ruser_dec5     (HRUSER_ram9),
+    .readyout_dec5  (i_hready_mux__expram_h),
+    .resp_dec5      (HRESP_expram_h),
+    .rdata_dec5     (HRDATA_expram_h),
 
     // Control/Response for Output Stage MI6
     .active_dec6    (i_active1to6),
     .readyout_dec6  (i_hready_mux__exp),
     .resp_dec6      (HRESP_exp),
     .rdata_dec6     (HRDATA_exp),
-    .ruser_dec6     (HRUSER_exp),
 
     .sel_dec0       (i_sel1to0),
     .sel_dec1       (i_sel1to1),
@@ -1305,73 +1250,65 @@ module nanosoc_ahb32_4x7_busmatrix (
     .active_dec     (i_active1),
     .HREADYOUTS (i_readyout1),
     .HRESPS     (i_resp1),
-    .HRUSERS    (HRUSER_dma),
-    .HRDATAS    (HRDATA_dma)
+    .HRDATAS    (HRDATA_dma_0)
 
     );
 
 
   // Matrix decoder for SI2
-  nanosoc_ahb32_4x7_matrix_decode_dma2 u_nanosoc_ahb32_4x7_matrix_decode_dma2 (
+  nanosoc_matrix_decode_dma_1 u_nanosoc_matrix_decode_dma_1 (
 
     // Common AHB signals
     .HCLK       (HCLK),
     .HRESETn    (HRESETn),
 
     // Signals from Input stage SI2
-    .HREADYS    (HREADY_dma2),
+    .HREADYS    (HREADY_dma_1),
     .sel_dec        (i_sel2),
     .decode_addr_dec (i_addr2[31:10]),   // HADDR[9:0] is not decoded
     .trans_dec      (i_trans2),
 
     // Control/Response for Output Stage MI0
     .active_dec0    (i_active2to0),
-    .readyout_dec0  (i_hready_mux__rom1),
-    .resp_dec0      (HRESP_rom1),
-    .rdata_dec0     (HRDATA_rom1),
-    .ruser_dec0     (HRUSER_rom1),
+    .readyout_dec0  (i_hready_mux__bootrom),
+    .resp_dec0      (HRESP_bootrom),
+    .rdata_dec0     (HRDATA_bootrom),
 
     // Control/Response for Output Stage MI1
     .active_dec1    (i_active2to1),
-    .readyout_dec1  (i_hready_mux__ram2),
-    .resp_dec1      (HRESP_ram2),
-    .rdata_dec1     (HRDATA_ram2),
-    .ruser_dec1     (HRUSER_ram2),
+    .readyout_dec1  (i_hready_mux__imem),
+    .resp_dec1      (HRESP_imem),
+    .rdata_dec1     (HRDATA_imem),
 
     // Control/Response for Output Stage MI2
     .active_dec2    (i_active2to2),
-    .readyout_dec2  (i_hready_mux__ram3),
-    .resp_dec2      (HRESP_ram3),
-    .rdata_dec2     (HRDATA_ram3),
-    .ruser_dec2     (HRUSER_ram3),
+    .readyout_dec2  (i_hready_mux__dmem),
+    .resp_dec2      (HRESP_dmem),
+    .rdata_dec2     (HRDATA_dmem),
 
     // Control/Response for Output Stage MI3
     .active_dec3    (i_active2to3),
-    .readyout_dec3  (i_hready_mux__sys),
-    .resp_dec3      (HRESP_sys),
-    .rdata_dec3     (HRDATA_sys),
-    .ruser_dec3     (HRUSER_sys),
+    .readyout_dec3  (i_hready_mux__sysio),
+    .resp_dec3      (HRESP_sysio),
+    .rdata_dec3     (HRDATA_sysio),
 
     // Control/Response for Output Stage MI4
     .active_dec4    (i_active2to4),
-    .readyout_dec4  (i_hready_mux__ram8),
-    .resp_dec4      (HRESP_ram8),
-    .rdata_dec4     (HRDATA_ram8),
-    .ruser_dec4     (HRUSER_ram8),
+    .readyout_dec4  (i_hready_mux__expram_l),
+    .resp_dec4      (HRESP_expram_l),
+    .rdata_dec4     (HRDATA_expram_l),
 
     // Control/Response for Output Stage MI5
     .active_dec5    (i_active2to5),
-    .readyout_dec5  (i_hready_mux__ram9),
-    .resp_dec5      (HRESP_ram9),
-    .rdata_dec5     (HRDATA_ram9),
-    .ruser_dec5     (HRUSER_ram9),
+    .readyout_dec5  (i_hready_mux__expram_h),
+    .resp_dec5      (HRESP_expram_h),
+    .rdata_dec5     (HRDATA_expram_h),
 
     // Control/Response for Output Stage MI6
     .active_dec6    (i_active2to6),
     .readyout_dec6  (i_hready_mux__exp),
     .resp_dec6      (HRESP_exp),
     .rdata_dec6     (HRDATA_exp),
-    .ruser_dec6     (HRUSER_exp),
 
     .sel_dec0       (i_sel2to0),
     .sel_dec1       (i_sel2to1),
@@ -1384,14 +1321,13 @@ module nanosoc_ahb32_4x7_busmatrix (
     .active_dec     (i_active2),
     .HREADYOUTS (i_readyout2),
     .HRESPS     (i_resp2),
-    .HRUSERS    (HRUSER_dma2),
-    .HRDATAS    (HRDATA_dma2)
+    .HRDATAS    (HRDATA_dma_1)
 
     );
 
 
   // Matrix decoder for SI3
-  nanosoc_ahb32_4x7_matrix_decode_cpu u_nanosoc_ahb32_4x7_matrix_decode_cpu (
+  nanosoc_matrix_decode_cpu u_nanosoc_matrix_decode_cpu (
 
     // Common AHB signals
     .HCLK       (HCLK),
@@ -1408,52 +1344,51 @@ module nanosoc_ahb32_4x7_busmatrix (
 
     // Control/Response for Output Stage MI0
     .active_dec0    (i_active3to0),
-    .readyout_dec0  (i_hready_mux__rom1),
-    .resp_dec0      (HRESP_rom1),
-    .rdata_dec0     (HRDATA_rom1),
-    .ruser_dec0     (HRUSER_rom1),
+    .readyout_dec0  (i_hready_mux__bootrom),
+    .resp_dec0      (HRESP_bootrom),
+    .rdata_dec0     (HRDATA_bootrom),
 
     // Control/Response for Output Stage MI1
     .active_dec1    (i_active3to1),
-    .readyout_dec1  (i_hready_mux__ram2),
-    .resp_dec1      (HRESP_ram2),
-    .rdata_dec1     (HRDATA_ram2),
-    .ruser_dec1     (HRUSER_ram2),
+    .readyout_dec1  (i_hready_mux__imem),
+    .resp_dec1      (HRESP_imem),
+    .rdata_dec1     (HRDATA_imem),
 
     // Control/Response for Output Stage MI2
     .active_dec2    (i_active3to2),
-    .readyout_dec2  (i_hready_mux__ram3),
-    .resp_dec2      (HRESP_ram3),
-    .rdata_dec2     (HRDATA_ram3),
-    .ruser_dec2     (HRUSER_ram3),
+    .readyout_dec2  (i_hready_mux__dmem),
+    .resp_dec2      (HRESP_dmem),
+    .rdata_dec2     (HRDATA_dmem),
 
     // Control/Response for Output Stage MI3
     .active_dec3    (i_active3to3),
-    .readyout_dec3  (i_hready_mux__sys),
-    .resp_dec3      (HRESP_sys),
-    .rdata_dec3     (HRDATA_sys),
-    .ruser_dec3     (HRUSER_sys),
+    .readyout_dec3  (i_hready_mux__sysio),
+    .resp_dec3      (HRESP_sysio),
+    .rdata_dec3     (HRDATA_sysio),
 
     // Control/Response for Output Stage MI4
     .active_dec4    (i_active3to4),
-    .readyout_dec4  (i_hready_mux__ram8),
-    .resp_dec4      (HRESP_ram8),
-    .rdata_dec4     (HRDATA_ram8),
-    .ruser_dec4     (HRUSER_ram8),
+    .readyout_dec4  (i_hready_mux__expram_l),
+    .resp_dec4      (HRESP_expram_l),
+    .rdata_dec4     (HRDATA_expram_l),
 
     // Control/Response for Output Stage MI5
     .active_dec5    (i_active3to5),
-    .readyout_dec5  (i_hready_mux__ram9),
-    .resp_dec5      (HRESP_ram9),
-    .rdata_dec5     (HRDATA_ram9),
-    .ruser_dec5     (HRUSER_ram9),
+    .readyout_dec5  (i_hready_mux__expram_h),
+    .resp_dec5      (HRESP_expram_h),
+    .rdata_dec5     (HRDATA_expram_h),
 
     // Control/Response for Output Stage MI6
     .active_dec6    (i_active3to6),
     .readyout_dec6  (i_hready_mux__exp),
     .resp_dec6      (HRESP_exp),
     .rdata_dec6     (HRDATA_exp),
-    .ruser_dec6     (HRUSER_exp),
+
+    // Control/Response for Output Stage MI7
+    .active_dec7    (i_active3to7),
+    .readyout_dec7  (i_hready_mux__systable),
+    .resp_dec7      (HRESP_systable),
+    .rdata_dec7     (HRDATA_systable),
 
     .sel_dec0       (i_sel3to0),
     .sel_dec1       (i_sel3to1),
@@ -1462,18 +1397,18 @@ module nanosoc_ahb32_4x7_busmatrix (
     .sel_dec4       (i_sel3to4),
     .sel_dec5       (i_sel3to5),
     .sel_dec6       (i_sel3to6),
+    .sel_dec7       (i_sel3to7),
 
     .active_dec     (i_active3),
     .HREADYOUTS (i_readyout3),
     .HRESPS     (i_resp3),
-    .HRUSERS    (HRUSER_cpu),
     .HRDATAS    (HRDATA_cpu)
 
     );
 
 
   // Output stage for MI0
-  nanosoc_ahb32_4x7_target_output u_nanosoc_ahb32_4x7_target_output_0 (
+  nanosoc_target_output_bootrom u_nanosoc_target_output_bootrom_0 (
 
     // Common AHB signals
     .HCLK       (HCLK),
@@ -1482,7 +1417,6 @@ module nanosoc_ahb32_4x7_busmatrix (
     // Port 0 Signals
     .sel_op0       (i_sel0to0),
     .addr_op0      (i_addr0),
-    .auser_op0     (i_auser0),
     .trans_op0     (i_trans0),
     .write_op0     (i_write0),
     .size_op0      (i_size0),
@@ -1490,14 +1424,12 @@ module nanosoc_ahb32_4x7_busmatrix (
     .prot_op0      (i_prot0),
     .master_op0    (i_master0),
     .mastlock_op0  (i_mastlock0),
-    .wdata_op0     (HWDATA_adp),
-    .wuser_op0     (HWUSER_adp),
+    .wdata_op0     (HWDATA_socdebug),
     .held_tran_op0  (i_held_tran0),
 
     // Port 1 Signals
     .sel_op1       (i_sel1to0),
     .addr_op1      (i_addr1),
-    .auser_op1     (i_auser1),
     .trans_op1     (i_trans1),
     .write_op1     (i_write1),
     .size_op1      (i_size1),
@@ -1505,14 +1437,12 @@ module nanosoc_ahb32_4x7_busmatrix (
     .prot_op1      (i_prot1),
     .master_op1    (i_master1),
     .mastlock_op1  (i_mastlock1),
-    .wdata_op1     (HWDATA_dma),
-    .wuser_op1     (HWUSER_dma),
+    .wdata_op1     (HWDATA_dma_0),
     .held_tran_op1  (i_held_tran1),
 
     // Port 2 Signals
     .sel_op2       (i_sel2to0),
     .addr_op2      (i_addr2),
-    .auser_op2     (i_auser2),
     .trans_op2     (i_trans2),
     .write_op2     (i_write2),
     .size_op2      (i_size2),
@@ -1520,14 +1450,12 @@ module nanosoc_ahb32_4x7_busmatrix (
     .prot_op2      (i_prot2),
     .master_op2    (i_master2),
     .mastlock_op2  (i_mastlock2),
-    .wdata_op2     (HWDATA_dma2),
-    .wuser_op2     (HWUSER_dma2),
+    .wdata_op2     (HWDATA_dma_1),
     .held_tran_op2  (i_held_tran2),
 
     // Port 3 Signals
     .sel_op3       (i_sel3to0),
     .addr_op3      (i_addr3),
-    .auser_op3     (i_auser3),
     .trans_op3     (i_trans3),
     .write_op3     (i_write3),
     .size_op3      (i_size3),
@@ -1536,11 +1464,10 @@ module nanosoc_ahb32_4x7_busmatrix (
     .master_op3    (i_master3),
     .mastlock_op3  (i_mastlock3),
     .wdata_op3     (HWDATA_cpu),
-    .wuser_op3     (HWUSER_cpu),
     .held_tran_op3  (i_held_tran3),
 
     // Slave read data and response
-    .HREADYOUTM (HREADYOUT_rom1),
+    .HREADYOUTM (HREADYOUT_bootrom),
 
     .active_op0    (i_active0to0),
     .active_op1    (i_active1to0),
@@ -1548,28 +1475,26 @@ module nanosoc_ahb32_4x7_busmatrix (
     .active_op3    (i_active3to0),
 
     // Slave Address/Control Signals
-    .HSELM      (HSEL_rom1),
-    .HADDRM     (HADDR_rom1),
-    .HAUSERM    (HAUSER_rom1),
-    .HTRANSM    (HTRANS_rom1),
-    .HWRITEM    (HWRITE_rom1),
-    .HSIZEM     (HSIZE_rom1),
-    .HBURSTM    (HBURST_rom1),
-    .HPROTM     (HPROT_rom1),
-    .HMASTERM   (HMASTER_rom1),
-    .HMASTLOCKM (HMASTLOCK_rom1),
-    .HREADYMUXM (i_hready_mux__rom1),
-    .HWUSERM    (HWUSER_rom1),
-    .HWDATAM    (HWDATA_rom1)
+    .HSELM      (HSEL_bootrom),
+    .HADDRM     (HADDR_bootrom),
+    .HTRANSM    (HTRANS_bootrom),
+    .HWRITEM    (HWRITE_bootrom),
+    .HSIZEM     (HSIZE_bootrom),
+    .HBURSTM    (HBURST_bootrom),
+    .HPROTM     (HPROT_bootrom),
+    .HMASTERM   (HMASTER_bootrom),
+    .HMASTLOCKM (HMASTLOCK_bootrom),
+    .HREADYMUXM (i_hready_mux__bootrom),
+    .HWDATAM    (HWDATA_bootrom)
 
     );
 
   // Drive output with internal version
-  assign HREADYMUX_rom1 = i_hready_mux__rom1;
+  assign HREADYMUX_bootrom = i_hready_mux__bootrom;
 
 
   // Output stage for MI1
-  nanosoc_ahb32_4x7_target_output u_nanosoc_ahb32_4x7_target_output_1 (
+  nanosoc_target_output_imem u_nanosoc_target_output_imem_1 (
 
     // Common AHB signals
     .HCLK       (HCLK),
@@ -1578,7 +1503,6 @@ module nanosoc_ahb32_4x7_busmatrix (
     // Port 0 Signals
     .sel_op0       (i_sel0to1),
     .addr_op0      (i_addr0),
-    .auser_op0     (i_auser0),
     .trans_op0     (i_trans0),
     .write_op0     (i_write0),
     .size_op0      (i_size0),
@@ -1586,14 +1510,12 @@ module nanosoc_ahb32_4x7_busmatrix (
     .prot_op0      (i_prot0),
     .master_op0    (i_master0),
     .mastlock_op0  (i_mastlock0),
-    .wdata_op0     (HWDATA_adp),
-    .wuser_op0     (HWUSER_adp),
+    .wdata_op0     (HWDATA_socdebug),
     .held_tran_op0  (i_held_tran0),
 
     // Port 1 Signals
     .sel_op1       (i_sel1to1),
     .addr_op1      (i_addr1),
-    .auser_op1     (i_auser1),
     .trans_op1     (i_trans1),
     .write_op1     (i_write1),
     .size_op1      (i_size1),
@@ -1601,14 +1523,12 @@ module nanosoc_ahb32_4x7_busmatrix (
     .prot_op1      (i_prot1),
     .master_op1    (i_master1),
     .mastlock_op1  (i_mastlock1),
-    .wdata_op1     (HWDATA_dma),
-    .wuser_op1     (HWUSER_dma),
+    .wdata_op1     (HWDATA_dma_0),
     .held_tran_op1  (i_held_tran1),
 
     // Port 2 Signals
     .sel_op2       (i_sel2to1),
     .addr_op2      (i_addr2),
-    .auser_op2     (i_auser2),
     .trans_op2     (i_trans2),
     .write_op2     (i_write2),
     .size_op2      (i_size2),
@@ -1616,14 +1536,12 @@ module nanosoc_ahb32_4x7_busmatrix (
     .prot_op2      (i_prot2),
     .master_op2    (i_master2),
     .mastlock_op2  (i_mastlock2),
-    .wdata_op2     (HWDATA_dma2),
-    .wuser_op2     (HWUSER_dma2),
+    .wdata_op2     (HWDATA_dma_1),
     .held_tran_op2  (i_held_tran2),
 
     // Port 3 Signals
     .sel_op3       (i_sel3to1),
     .addr_op3      (i_addr3),
-    .auser_op3     (i_auser3),
     .trans_op3     (i_trans3),
     .write_op3     (i_write3),
     .size_op3      (i_size3),
@@ -1632,11 +1550,10 @@ module nanosoc_ahb32_4x7_busmatrix (
     .master_op3    (i_master3),
     .mastlock_op3  (i_mastlock3),
     .wdata_op3     (HWDATA_cpu),
-    .wuser_op3     (HWUSER_cpu),
     .held_tran_op3  (i_held_tran3),
 
     // Slave read data and response
-    .HREADYOUTM (HREADYOUT_ram2),
+    .HREADYOUTM (HREADYOUT_imem),
 
     .active_op0    (i_active0to1),
     .active_op1    (i_active1to1),
@@ -1644,28 +1561,26 @@ module nanosoc_ahb32_4x7_busmatrix (
     .active_op3    (i_active3to1),
 
     // Slave Address/Control Signals
-    .HSELM      (HSEL_ram2),
-    .HADDRM     (HADDR_ram2),
-    .HAUSERM    (HAUSER_ram2),
-    .HTRANSM    (HTRANS_ram2),
-    .HWRITEM    (HWRITE_ram2),
-    .HSIZEM     (HSIZE_ram2),
-    .HBURSTM    (HBURST_ram2),
-    .HPROTM     (HPROT_ram2),
-    .HMASTERM   (HMASTER_ram2),
-    .HMASTLOCKM (HMASTLOCK_ram2),
-    .HREADYMUXM (i_hready_mux__ram2),
-    .HWUSERM    (HWUSER_ram2),
-    .HWDATAM    (HWDATA_ram2)
+    .HSELM      (HSEL_imem),
+    .HADDRM     (HADDR_imem),
+    .HTRANSM    (HTRANS_imem),
+    .HWRITEM    (HWRITE_imem),
+    .HSIZEM     (HSIZE_imem),
+    .HBURSTM    (HBURST_imem),
+    .HPROTM     (HPROT_imem),
+    .HMASTERM   (HMASTER_imem),
+    .HMASTLOCKM (HMASTLOCK_imem),
+    .HREADYMUXM (i_hready_mux__imem),
+    .HWDATAM    (HWDATA_imem)
 
     );
 
   // Drive output with internal version
-  assign HREADYMUX_ram2 = i_hready_mux__ram2;
+  assign HREADYMUX_imem = i_hready_mux__imem;
 
 
   // Output stage for MI2
-  nanosoc_ahb32_4x7_target_output u_nanosoc_ahb32_4x7_target_output_2 (
+  nanosoc_target_output_dmem u_nanosoc_target_output_dmem_2 (
 
     // Common AHB signals
     .HCLK       (HCLK),
@@ -1674,7 +1589,6 @@ module nanosoc_ahb32_4x7_busmatrix (
     // Port 0 Signals
     .sel_op0       (i_sel0to2),
     .addr_op0      (i_addr0),
-    .auser_op0     (i_auser0),
     .trans_op0     (i_trans0),
     .write_op0     (i_write0),
     .size_op0      (i_size0),
@@ -1682,14 +1596,12 @@ module nanosoc_ahb32_4x7_busmatrix (
     .prot_op0      (i_prot0),
     .master_op0    (i_master0),
     .mastlock_op0  (i_mastlock0),
-    .wdata_op0     (HWDATA_adp),
-    .wuser_op0     (HWUSER_adp),
+    .wdata_op0     (HWDATA_socdebug),
     .held_tran_op0  (i_held_tran0),
 
     // Port 1 Signals
     .sel_op1       (i_sel1to2),
     .addr_op1      (i_addr1),
-    .auser_op1     (i_auser1),
     .trans_op1     (i_trans1),
     .write_op1     (i_write1),
     .size_op1      (i_size1),
@@ -1697,14 +1609,12 @@ module nanosoc_ahb32_4x7_busmatrix (
     .prot_op1      (i_prot1),
     .master_op1    (i_master1),
     .mastlock_op1  (i_mastlock1),
-    .wdata_op1     (HWDATA_dma),
-    .wuser_op1     (HWUSER_dma),
+    .wdata_op1     (HWDATA_dma_0),
     .held_tran_op1  (i_held_tran1),
 
     // Port 2 Signals
     .sel_op2       (i_sel2to2),
     .addr_op2      (i_addr2),
-    .auser_op2     (i_auser2),
     .trans_op2     (i_trans2),
     .write_op2     (i_write2),
     .size_op2      (i_size2),
@@ -1712,14 +1622,12 @@ module nanosoc_ahb32_4x7_busmatrix (
     .prot_op2      (i_prot2),
     .master_op2    (i_master2),
     .mastlock_op2  (i_mastlock2),
-    .wdata_op2     (HWDATA_dma2),
-    .wuser_op2     (HWUSER_dma2),
+    .wdata_op2     (HWDATA_dma_1),
     .held_tran_op2  (i_held_tran2),
 
     // Port 3 Signals
     .sel_op3       (i_sel3to2),
     .addr_op3      (i_addr3),
-    .auser_op3     (i_auser3),
     .trans_op3     (i_trans3),
     .write_op3     (i_write3),
     .size_op3      (i_size3),
@@ -1728,11 +1636,10 @@ module nanosoc_ahb32_4x7_busmatrix (
     .master_op3    (i_master3),
     .mastlock_op3  (i_mastlock3),
     .wdata_op3     (HWDATA_cpu),
-    .wuser_op3     (HWUSER_cpu),
     .held_tran_op3  (i_held_tran3),
 
     // Slave read data and response
-    .HREADYOUTM (HREADYOUT_ram3),
+    .HREADYOUTM (HREADYOUT_dmem),
 
     .active_op0    (i_active0to2),
     .active_op1    (i_active1to2),
@@ -1740,28 +1647,26 @@ module nanosoc_ahb32_4x7_busmatrix (
     .active_op3    (i_active3to2),
 
     // Slave Address/Control Signals
-    .HSELM      (HSEL_ram3),
-    .HADDRM     (HADDR_ram3),
-    .HAUSERM    (HAUSER_ram3),
-    .HTRANSM    (HTRANS_ram3),
-    .HWRITEM    (HWRITE_ram3),
-    .HSIZEM     (HSIZE_ram3),
-    .HBURSTM    (HBURST_ram3),
-    .HPROTM     (HPROT_ram3),
-    .HMASTERM   (HMASTER_ram3),
-    .HMASTLOCKM (HMASTLOCK_ram3),
-    .HREADYMUXM (i_hready_mux__ram3),
-    .HWUSERM    (HWUSER_ram3),
-    .HWDATAM    (HWDATA_ram3)
+    .HSELM      (HSEL_dmem),
+    .HADDRM     (HADDR_dmem),
+    .HTRANSM    (HTRANS_dmem),
+    .HWRITEM    (HWRITE_dmem),
+    .HSIZEM     (HSIZE_dmem),
+    .HBURSTM    (HBURST_dmem),
+    .HPROTM     (HPROT_dmem),
+    .HMASTERM   (HMASTER_dmem),
+    .HMASTLOCKM (HMASTLOCK_dmem),
+    .HREADYMUXM (i_hready_mux__dmem),
+    .HWDATAM    (HWDATA_dmem)
 
     );
 
   // Drive output with internal version
-  assign HREADYMUX_ram3 = i_hready_mux__ram3;
+  assign HREADYMUX_dmem = i_hready_mux__dmem;
 
 
   // Output stage for MI3
-  nanosoc_ahb32_4x7_target_output u_nanosoc_ahb32_4x7_target_output_3 (
+  nanosoc_target_output_sysio u_nanosoc_target_output_sysio_3 (
 
     // Common AHB signals
     .HCLK       (HCLK),
@@ -1770,7 +1675,6 @@ module nanosoc_ahb32_4x7_busmatrix (
     // Port 0 Signals
     .sel_op0       (i_sel0to3),
     .addr_op0      (i_addr0),
-    .auser_op0     (i_auser0),
     .trans_op0     (i_trans0),
     .write_op0     (i_write0),
     .size_op0      (i_size0),
@@ -1778,14 +1682,12 @@ module nanosoc_ahb32_4x7_busmatrix (
     .prot_op0      (i_prot0),
     .master_op0    (i_master0),
     .mastlock_op0  (i_mastlock0),
-    .wdata_op0     (HWDATA_adp),
-    .wuser_op0     (HWUSER_adp),
+    .wdata_op0     (HWDATA_socdebug),
     .held_tran_op0  (i_held_tran0),
 
     // Port 1 Signals
     .sel_op1       (i_sel1to3),
     .addr_op1      (i_addr1),
-    .auser_op1     (i_auser1),
     .trans_op1     (i_trans1),
     .write_op1     (i_write1),
     .size_op1      (i_size1),
@@ -1793,14 +1695,12 @@ module nanosoc_ahb32_4x7_busmatrix (
     .prot_op1      (i_prot1),
     .master_op1    (i_master1),
     .mastlock_op1  (i_mastlock1),
-    .wdata_op1     (HWDATA_dma),
-    .wuser_op1     (HWUSER_dma),
+    .wdata_op1     (HWDATA_dma_0),
     .held_tran_op1  (i_held_tran1),
 
     // Port 2 Signals
     .sel_op2       (i_sel2to3),
     .addr_op2      (i_addr2),
-    .auser_op2     (i_auser2),
     .trans_op2     (i_trans2),
     .write_op2     (i_write2),
     .size_op2      (i_size2),
@@ -1808,14 +1708,12 @@ module nanosoc_ahb32_4x7_busmatrix (
     .prot_op2      (i_prot2),
     .master_op2    (i_master2),
     .mastlock_op2  (i_mastlock2),
-    .wdata_op2     (HWDATA_dma2),
-    .wuser_op2     (HWUSER_dma2),
+    .wdata_op2     (HWDATA_dma_1),
     .held_tran_op2  (i_held_tran2),
 
     // Port 3 Signals
     .sel_op3       (i_sel3to3),
     .addr_op3      (i_addr3),
-    .auser_op3     (i_auser3),
     .trans_op3     (i_trans3),
     .write_op3     (i_write3),
     .size_op3      (i_size3),
@@ -1824,11 +1722,10 @@ module nanosoc_ahb32_4x7_busmatrix (
     .master_op3    (i_master3),
     .mastlock_op3  (i_mastlock3),
     .wdata_op3     (HWDATA_cpu),
-    .wuser_op3     (HWUSER_cpu),
     .held_tran_op3  (i_held_tran3),
 
     // Slave read data and response
-    .HREADYOUTM (HREADYOUT_sys),
+    .HREADYOUTM (HREADYOUT_sysio),
 
     .active_op0    (i_active0to3),
     .active_op1    (i_active1to3),
@@ -1836,28 +1733,26 @@ module nanosoc_ahb32_4x7_busmatrix (
     .active_op3    (i_active3to3),
 
     // Slave Address/Control Signals
-    .HSELM      (HSEL_sys),
-    .HADDRM     (HADDR_sys),
-    .HAUSERM    (HAUSER_sys),
-    .HTRANSM    (HTRANS_sys),
-    .HWRITEM    (HWRITE_sys),
-    .HSIZEM     (HSIZE_sys),
-    .HBURSTM    (HBURST_sys),
-    .HPROTM     (HPROT_sys),
-    .HMASTERM   (HMASTER_sys),
-    .HMASTLOCKM (HMASTLOCK_sys),
-    .HREADYMUXM (i_hready_mux__sys),
-    .HWUSERM    (HWUSER_sys),
-    .HWDATAM    (HWDATA_sys)
+    .HSELM      (HSEL_sysio),
+    .HADDRM     (HADDR_sysio),
+    .HTRANSM    (HTRANS_sysio),
+    .HWRITEM    (HWRITE_sysio),
+    .HSIZEM     (HSIZE_sysio),
+    .HBURSTM    (HBURST_sysio),
+    .HPROTM     (HPROT_sysio),
+    .HMASTERM   (HMASTER_sysio),
+    .HMASTLOCKM (HMASTLOCK_sysio),
+    .HREADYMUXM (i_hready_mux__sysio),
+    .HWDATAM    (HWDATA_sysio)
 
     );
 
   // Drive output with internal version
-  assign HREADYMUX_sys = i_hready_mux__sys;
+  assign HREADYMUX_sysio = i_hready_mux__sysio;
 
 
   // Output stage for MI4
-  nanosoc_ahb32_4x7_target_output u_nanosoc_ahb32_4x7_target_output_4 (
+  nanosoc_target_output_expram_l u_nanosoc_target_output_expram_l_4 (
 
     // Common AHB signals
     .HCLK       (HCLK),
@@ -1866,7 +1761,6 @@ module nanosoc_ahb32_4x7_busmatrix (
     // Port 0 Signals
     .sel_op0       (i_sel0to4),
     .addr_op0      (i_addr0),
-    .auser_op0     (i_auser0),
     .trans_op0     (i_trans0),
     .write_op0     (i_write0),
     .size_op0      (i_size0),
@@ -1874,14 +1768,12 @@ module nanosoc_ahb32_4x7_busmatrix (
     .prot_op0      (i_prot0),
     .master_op0    (i_master0),
     .mastlock_op0  (i_mastlock0),
-    .wdata_op0     (HWDATA_adp),
-    .wuser_op0     (HWUSER_adp),
+    .wdata_op0     (HWDATA_socdebug),
     .held_tran_op0  (i_held_tran0),
 
     // Port 1 Signals
     .sel_op1       (i_sel1to4),
     .addr_op1      (i_addr1),
-    .auser_op1     (i_auser1),
     .trans_op1     (i_trans1),
     .write_op1     (i_write1),
     .size_op1      (i_size1),
@@ -1889,14 +1781,12 @@ module nanosoc_ahb32_4x7_busmatrix (
     .prot_op1      (i_prot1),
     .master_op1    (i_master1),
     .mastlock_op1  (i_mastlock1),
-    .wdata_op1     (HWDATA_dma),
-    .wuser_op1     (HWUSER_dma),
+    .wdata_op1     (HWDATA_dma_0),
     .held_tran_op1  (i_held_tran1),
 
     // Port 2 Signals
     .sel_op2       (i_sel2to4),
     .addr_op2      (i_addr2),
-    .auser_op2     (i_auser2),
     .trans_op2     (i_trans2),
     .write_op2     (i_write2),
     .size_op2      (i_size2),
@@ -1904,14 +1794,12 @@ module nanosoc_ahb32_4x7_busmatrix (
     .prot_op2      (i_prot2),
     .master_op2    (i_master2),
     .mastlock_op2  (i_mastlock2),
-    .wdata_op2     (HWDATA_dma2),
-    .wuser_op2     (HWUSER_dma2),
+    .wdata_op2     (HWDATA_dma_1),
     .held_tran_op2  (i_held_tran2),
 
     // Port 3 Signals
     .sel_op3       (i_sel3to4),
     .addr_op3      (i_addr3),
-    .auser_op3     (i_auser3),
     .trans_op3     (i_trans3),
     .write_op3     (i_write3),
     .size_op3      (i_size3),
@@ -1920,11 +1808,10 @@ module nanosoc_ahb32_4x7_busmatrix (
     .master_op3    (i_master3),
     .mastlock_op3  (i_mastlock3),
     .wdata_op3     (HWDATA_cpu),
-    .wuser_op3     (HWUSER_cpu),
     .held_tran_op3  (i_held_tran3),
 
     // Slave read data and response
-    .HREADYOUTM (HREADYOUT_ram8),
+    .HREADYOUTM (HREADYOUT_expram_l),
 
     .active_op0    (i_active0to4),
     .active_op1    (i_active1to4),
@@ -1932,28 +1819,26 @@ module nanosoc_ahb32_4x7_busmatrix (
     .active_op3    (i_active3to4),
 
     // Slave Address/Control Signals
-    .HSELM      (HSEL_ram8),
-    .HADDRM     (HADDR_ram8),
-    .HAUSERM    (HAUSER_ram8),
-    .HTRANSM    (HTRANS_ram8),
-    .HWRITEM    (HWRITE_ram8),
-    .HSIZEM     (HSIZE_ram8),
-    .HBURSTM    (HBURST_ram8),
-    .HPROTM     (HPROT_ram8),
-    .HMASTERM   (HMASTER_ram8),
-    .HMASTLOCKM (HMASTLOCK_ram8),
-    .HREADYMUXM (i_hready_mux__ram8),
-    .HWUSERM    (HWUSER_ram8),
-    .HWDATAM    (HWDATA_ram8)
+    .HSELM      (HSEL_expram_l),
+    .HADDRM     (HADDR_expram_l),
+    .HTRANSM    (HTRANS_expram_l),
+    .HWRITEM    (HWRITE_expram_l),
+    .HSIZEM     (HSIZE_expram_l),
+    .HBURSTM    (HBURST_expram_l),
+    .HPROTM     (HPROT_expram_l),
+    .HMASTERM   (HMASTER_expram_l),
+    .HMASTLOCKM (HMASTLOCK_expram_l),
+    .HREADYMUXM (i_hready_mux__expram_l),
+    .HWDATAM    (HWDATA_expram_l)
 
     );
 
   // Drive output with internal version
-  assign HREADYMUX_ram8 = i_hready_mux__ram8;
+  assign HREADYMUX_expram_l = i_hready_mux__expram_l;
 
 
   // Output stage for MI5
-  nanosoc_ahb32_4x7_target_output u_nanosoc_ahb32_4x7_target_output_5 (
+  nanosoc_target_output_expram_h u_nanosoc_target_output_expram_h_5 (
 
     // Common AHB signals
     .HCLK       (HCLK),
@@ -1962,7 +1847,6 @@ module nanosoc_ahb32_4x7_busmatrix (
     // Port 0 Signals
     .sel_op0       (i_sel0to5),
     .addr_op0      (i_addr0),
-    .auser_op0     (i_auser0),
     .trans_op0     (i_trans0),
     .write_op0     (i_write0),
     .size_op0      (i_size0),
@@ -1970,14 +1854,12 @@ module nanosoc_ahb32_4x7_busmatrix (
     .prot_op0      (i_prot0),
     .master_op0    (i_master0),
     .mastlock_op0  (i_mastlock0),
-    .wdata_op0     (HWDATA_adp),
-    .wuser_op0     (HWUSER_adp),
+    .wdata_op0     (HWDATA_socdebug),
     .held_tran_op0  (i_held_tran0),
 
     // Port 1 Signals
     .sel_op1       (i_sel1to5),
     .addr_op1      (i_addr1),
-    .auser_op1     (i_auser1),
     .trans_op1     (i_trans1),
     .write_op1     (i_write1),
     .size_op1      (i_size1),
@@ -1985,14 +1867,12 @@ module nanosoc_ahb32_4x7_busmatrix (
     .prot_op1      (i_prot1),
     .master_op1    (i_master1),
     .mastlock_op1  (i_mastlock1),
-    .wdata_op1     (HWDATA_dma),
-    .wuser_op1     (HWUSER_dma),
+    .wdata_op1     (HWDATA_dma_0),
     .held_tran_op1  (i_held_tran1),
 
     // Port 2 Signals
     .sel_op2       (i_sel2to5),
     .addr_op2      (i_addr2),
-    .auser_op2     (i_auser2),
     .trans_op2     (i_trans2),
     .write_op2     (i_write2),
     .size_op2      (i_size2),
@@ -2000,14 +1880,12 @@ module nanosoc_ahb32_4x7_busmatrix (
     .prot_op2      (i_prot2),
     .master_op2    (i_master2),
     .mastlock_op2  (i_mastlock2),
-    .wdata_op2     (HWDATA_dma2),
-    .wuser_op2     (HWUSER_dma2),
+    .wdata_op2     (HWDATA_dma_1),
     .held_tran_op2  (i_held_tran2),
 
     // Port 3 Signals
     .sel_op3       (i_sel3to5),
     .addr_op3      (i_addr3),
-    .auser_op3     (i_auser3),
     .trans_op3     (i_trans3),
     .write_op3     (i_write3),
     .size_op3      (i_size3),
@@ -2016,11 +1894,10 @@ module nanosoc_ahb32_4x7_busmatrix (
     .master_op3    (i_master3),
     .mastlock_op3  (i_mastlock3),
     .wdata_op3     (HWDATA_cpu),
-    .wuser_op3     (HWUSER_cpu),
     .held_tran_op3  (i_held_tran3),
 
     // Slave read data and response
-    .HREADYOUTM (HREADYOUT_ram9),
+    .HREADYOUTM (HREADYOUT_expram_h),
 
     .active_op0    (i_active0to5),
     .active_op1    (i_active1to5),
@@ -2028,28 +1905,26 @@ module nanosoc_ahb32_4x7_busmatrix (
     .active_op3    (i_active3to5),
 
     // Slave Address/Control Signals
-    .HSELM      (HSEL_ram9),
-    .HADDRM     (HADDR_ram9),
-    .HAUSERM    (HAUSER_ram9),
-    .HTRANSM    (HTRANS_ram9),
-    .HWRITEM    (HWRITE_ram9),
-    .HSIZEM     (HSIZE_ram9),
-    .HBURSTM    (HBURST_ram9),
-    .HPROTM     (HPROT_ram9),
-    .HMASTERM   (HMASTER_ram9),
-    .HMASTLOCKM (HMASTLOCK_ram9),
-    .HREADYMUXM (i_hready_mux__ram9),
-    .HWUSERM    (HWUSER_ram9),
-    .HWDATAM    (HWDATA_ram9)
+    .HSELM      (HSEL_expram_h),
+    .HADDRM     (HADDR_expram_h),
+    .HTRANSM    (HTRANS_expram_h),
+    .HWRITEM    (HWRITE_expram_h),
+    .HSIZEM     (HSIZE_expram_h),
+    .HBURSTM    (HBURST_expram_h),
+    .HPROTM     (HPROT_expram_h),
+    .HMASTERM   (HMASTER_expram_h),
+    .HMASTLOCKM (HMASTLOCK_expram_h),
+    .HREADYMUXM (i_hready_mux__expram_h),
+    .HWDATAM    (HWDATA_expram_h)
 
     );
 
   // Drive output with internal version
-  assign HREADYMUX_ram9 = i_hready_mux__ram9;
+  assign HREADYMUX_expram_h = i_hready_mux__expram_h;
 
 
   // Output stage for MI6
-  nanosoc_ahb32_4x7_target_output u_nanosoc_ahb32_4x7_target_output_6 (
+  nanosoc_target_output_exp u_nanosoc_target_output_exp_6 (
 
     // Common AHB signals
     .HCLK       (HCLK),
@@ -2058,7 +1933,6 @@ module nanosoc_ahb32_4x7_busmatrix (
     // Port 0 Signals
     .sel_op0       (i_sel0to6),
     .addr_op0      (i_addr0),
-    .auser_op0     (i_auser0),
     .trans_op0     (i_trans0),
     .write_op0     (i_write0),
     .size_op0      (i_size0),
@@ -2066,14 +1940,12 @@ module nanosoc_ahb32_4x7_busmatrix (
     .prot_op0      (i_prot0),
     .master_op0    (i_master0),
     .mastlock_op0  (i_mastlock0),
-    .wdata_op0     (HWDATA_adp),
-    .wuser_op0     (HWUSER_adp),
+    .wdata_op0     (HWDATA_socdebug),
     .held_tran_op0  (i_held_tran0),
 
     // Port 1 Signals
     .sel_op1       (i_sel1to6),
     .addr_op1      (i_addr1),
-    .auser_op1     (i_auser1),
     .trans_op1     (i_trans1),
     .write_op1     (i_write1),
     .size_op1      (i_size1),
@@ -2081,14 +1953,12 @@ module nanosoc_ahb32_4x7_busmatrix (
     .prot_op1      (i_prot1),
     .master_op1    (i_master1),
     .mastlock_op1  (i_mastlock1),
-    .wdata_op1     (HWDATA_dma),
-    .wuser_op1     (HWUSER_dma),
+    .wdata_op1     (HWDATA_dma_0),
     .held_tran_op1  (i_held_tran1),
 
     // Port 2 Signals
     .sel_op2       (i_sel2to6),
     .addr_op2      (i_addr2),
-    .auser_op2     (i_auser2),
     .trans_op2     (i_trans2),
     .write_op2     (i_write2),
     .size_op2      (i_size2),
@@ -2096,14 +1966,12 @@ module nanosoc_ahb32_4x7_busmatrix (
     .prot_op2      (i_prot2),
     .master_op2    (i_master2),
     .mastlock_op2  (i_mastlock2),
-    .wdata_op2     (HWDATA_dma2),
-    .wuser_op2     (HWUSER_dma2),
+    .wdata_op2     (HWDATA_dma_1),
     .held_tran_op2  (i_held_tran2),
 
     // Port 3 Signals
     .sel_op3       (i_sel3to6),
     .addr_op3      (i_addr3),
-    .auser_op3     (i_auser3),
     .trans_op3     (i_trans3),
     .write_op3     (i_write3),
     .size_op3      (i_size3),
@@ -2112,7 +1980,6 @@ module nanosoc_ahb32_4x7_busmatrix (
     .master_op3    (i_master3),
     .mastlock_op3  (i_mastlock3),
     .wdata_op3     (HWDATA_cpu),
-    .wuser_op3     (HWUSER_cpu),
     .held_tran_op3  (i_held_tran3),
 
     // Slave read data and response
@@ -2126,7 +1993,6 @@ module nanosoc_ahb32_4x7_busmatrix (
     // Slave Address/Control Signals
     .HSELM      (HSEL_exp),
     .HADDRM     (HADDR_exp),
-    .HAUSERM    (HAUSER_exp),
     .HTRANSM    (HTRANS_exp),
     .HWRITEM    (HWRITE_exp),
     .HSIZEM     (HSIZE_exp),
@@ -2135,7 +2001,6 @@ module nanosoc_ahb32_4x7_busmatrix (
     .HMASTERM   (HMASTER_exp),
     .HMASTLOCKM (HMASTLOCK_exp),
     .HREADYMUXM (i_hready_mux__exp),
-    .HWUSERM    (HWUSER_exp),
     .HWDATAM    (HWDATA_exp)
 
     );
@@ -2144,6 +2009,64 @@ module nanosoc_ahb32_4x7_busmatrix (
   assign HREADYMUX_exp = i_hready_mux__exp;
 
 
+  // Output stage for MI7
+  nanosoc_target_output_systable u_nanosoc_target_output_systable_7 (
+
+    // Common AHB signals
+    .HCLK       (HCLK),
+    .HRESETn    (HRESETn),
+
+    // Port 0 Signals
+    .sel_op0       (i_sel0to7),
+    .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_socdebug),
+    .held_tran_op0  (i_held_tran0),
+
+    // Port 3 Signals
+    .sel_op3       (i_sel3to7),
+    .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),
+    .held_tran_op3  (i_held_tran3),
+
+    // Slave read data and response
+    .HREADYOUTM (HREADYOUT_systable),
+
+    .active_op0    (i_active0to7),
+    .active_op3    (i_active3to7),
+
+    // Slave Address/Control Signals
+    .HSELM      (HSEL_systable),
+    .HADDRM     (HADDR_systable),
+    .HTRANSM    (HTRANS_systable),
+    .HWRITEM    (HWRITE_systable),
+    .HSIZEM     (HSIZE_systable),
+    .HBURSTM    (HBURST_systable),
+    .HPROTM     (HPROT_systable),
+    .HMASTERM   (HMASTER_systable),
+    .HMASTLOCKM (HMASTLOCK_systable),
+    .HREADYMUXM (i_hready_mux__systable),
+    .HWDATAM    (HWDATA_systable)
+
+    );
+
+  // Drive output with internal version
+  assign HREADYMUX_systable = i_hready_mux__systable;
+
+
 endmodule
 
 // --================================= End ===================================--
diff --git a/system/src/nanosoc_ahb_busmatrix/verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_busmatrix_default_slave.v b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix_default_slave.v
similarity index 98%
rename from system/src/nanosoc_ahb_busmatrix/verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_busmatrix_default_slave.v
rename to system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix_default_slave.v
index a43ec0c9bba5e0bc66e8856914a9ddaa40598d80..f96bab0acd2ced0fbee9377e9549d669cf8d0f11 100644
--- a/system/src/nanosoc_ahb_busmatrix/verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_busmatrix_default_slave.v
+++ b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix_default_slave.v
@@ -28,7 +28,7 @@
 
 
 
-module nanosoc_ahb32_4x7_busmatrix_default_slave (
+module nanosoc_busmatrix_default_slave (
 
     // Common AHB signals
     HCLK,
diff --git a/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix_lite.v b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix_lite.v
new file mode 100644
index 0000000000000000000000000000000000000000..ddc19b025332831f49110881150a1b3407e148b7
--- /dev/null
+++ b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_busmatrix_lite.v
@@ -0,0 +1,920 @@
+//-----------------------------------------------------------------------------
+// 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-2023 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            : BusMatrixLite is a wrapper module that wraps around
+//                        the BusMatrix module to give AHB Lite compliant
+//                        slave and master interfaces.
+//
+//-----------------------------------------------------------------------------
+
+
+
+module nanosoc_busmatrix_lite (
+
+    // Common AHB signals
+    HCLK,
+    HRESETn,
+
+    // System Address Remap control
+    REMAP,
+
+    // Input port SI0 (inputs from master 0)
+    HADDR_socdebug,
+    HTRANS_socdebug,
+    HWRITE_socdebug,
+    HSIZE_socdebug,
+    HBURST_socdebug,
+    HPROT_socdebug,
+    HWDATA_socdebug,
+    HMASTLOCK_socdebug,
+
+    // Input port SI1 (inputs from master 1)
+    HADDR_dma_0,
+    HTRANS_dma_0,
+    HWRITE_dma_0,
+    HSIZE_dma_0,
+    HBURST_dma_0,
+    HPROT_dma_0,
+    HWDATA_dma_0,
+    HMASTLOCK_dma_0,
+
+    // Input port SI2 (inputs from master 2)
+    HADDR_dma_1,
+    HTRANS_dma_1,
+    HWRITE_dma_1,
+    HSIZE_dma_1,
+    HBURST_dma_1,
+    HPROT_dma_1,
+    HWDATA_dma_1,
+    HMASTLOCK_dma_1,
+
+    // Input port SI3 (inputs from master 3)
+    HADDR_cpu,
+    HTRANS_cpu,
+    HWRITE_cpu,
+    HSIZE_cpu,
+    HBURST_cpu,
+    HPROT_cpu,
+    HWDATA_cpu,
+    HMASTLOCK_cpu,
+
+    // Output port MI0 (inputs from slave 0)
+    HRDATA_bootrom,
+    HREADYOUT_bootrom,
+    HRESP_bootrom,
+
+    // Output port MI1 (inputs from slave 1)
+    HRDATA_imem,
+    HREADYOUT_imem,
+    HRESP_imem,
+
+    // Output port MI2 (inputs from slave 2)
+    HRDATA_dmem,
+    HREADYOUT_dmem,
+    HRESP_dmem,
+
+    // Output port MI3 (inputs from slave 3)
+    HRDATA_sysio,
+    HREADYOUT_sysio,
+    HRESP_sysio,
+
+    // Output port MI4 (inputs from slave 4)
+    HRDATA_expram_l,
+    HREADYOUT_expram_l,
+    HRESP_expram_l,
+
+    // Output port MI5 (inputs from slave 5)
+    HRDATA_expram_h,
+    HREADYOUT_expram_h,
+    HRESP_expram_h,
+
+    // Output port MI6 (inputs from slave 6)
+    HRDATA_exp,
+    HREADYOUT_exp,
+    HRESP_exp,
+
+    // Output port MI7 (inputs from slave 7)
+    HRDATA_systable,
+    HREADYOUT_systable,
+    HRESP_systable,
+
+    // Scan test dummy signals; not connected until scan insertion
+    SCANENABLE,   // Scan Test Mode Enable
+    SCANINHCLK,   // Scan Chain Input
+
+
+    // Output port MI0 (outputs to slave 0)
+    HSEL_bootrom,
+    HADDR_bootrom,
+    HTRANS_bootrom,
+    HWRITE_bootrom,
+    HSIZE_bootrom,
+    HBURST_bootrom,
+    HPROT_bootrom,
+    HWDATA_bootrom,
+    HMASTLOCK_bootrom,
+    HREADYMUX_bootrom,
+
+    // Output port MI1 (outputs to slave 1)
+    HSEL_imem,
+    HADDR_imem,
+    HTRANS_imem,
+    HWRITE_imem,
+    HSIZE_imem,
+    HBURST_imem,
+    HPROT_imem,
+    HWDATA_imem,
+    HMASTLOCK_imem,
+    HREADYMUX_imem,
+
+    // Output port MI2 (outputs to slave 2)
+    HSEL_dmem,
+    HADDR_dmem,
+    HTRANS_dmem,
+    HWRITE_dmem,
+    HSIZE_dmem,
+    HBURST_dmem,
+    HPROT_dmem,
+    HWDATA_dmem,
+    HMASTLOCK_dmem,
+    HREADYMUX_dmem,
+
+    // Output port MI3 (outputs to slave 3)
+    HSEL_sysio,
+    HADDR_sysio,
+    HTRANS_sysio,
+    HWRITE_sysio,
+    HSIZE_sysio,
+    HBURST_sysio,
+    HPROT_sysio,
+    HWDATA_sysio,
+    HMASTLOCK_sysio,
+    HREADYMUX_sysio,
+
+    // Output port MI4 (outputs to slave 4)
+    HSEL_expram_l,
+    HADDR_expram_l,
+    HTRANS_expram_l,
+    HWRITE_expram_l,
+    HSIZE_expram_l,
+    HBURST_expram_l,
+    HPROT_expram_l,
+    HWDATA_expram_l,
+    HMASTLOCK_expram_l,
+    HREADYMUX_expram_l,
+
+    // Output port MI5 (outputs to slave 5)
+    HSEL_expram_h,
+    HADDR_expram_h,
+    HTRANS_expram_h,
+    HWRITE_expram_h,
+    HSIZE_expram_h,
+    HBURST_expram_h,
+    HPROT_expram_h,
+    HWDATA_expram_h,
+    HMASTLOCK_expram_h,
+    HREADYMUX_expram_h,
+
+    // Output port MI6 (outputs to slave 6)
+    HSEL_exp,
+    HADDR_exp,
+    HTRANS_exp,
+    HWRITE_exp,
+    HSIZE_exp,
+    HBURST_exp,
+    HPROT_exp,
+    HWDATA_exp,
+    HMASTLOCK_exp,
+    HREADYMUX_exp,
+
+    // Output port MI7 (outputs to slave 7)
+    HSEL_systable,
+    HADDR_systable,
+    HTRANS_systable,
+    HWRITE_systable,
+    HSIZE_systable,
+    HBURST_systable,
+    HPROT_systable,
+    HWDATA_systable,
+    HMASTLOCK_systable,
+    HREADYMUX_systable,
+
+    // Input port SI0 (outputs to master 0)
+    HRDATA_socdebug,
+    HREADY_socdebug,
+    HRESP_socdebug,
+
+    // Input port SI1 (outputs to master 1)
+    HRDATA_dma_0,
+    HREADY_dma_0,
+    HRESP_dma_0,
+
+    // Input port SI2 (outputs to master 2)
+    HRDATA_dma_1,
+    HREADY_dma_1,
+    HRESP_dma_1,
+
+    // Input port SI3 (outputs to master 3)
+    HRDATA_cpu,
+    HREADY_cpu,
+    HRESP_cpu,
+
+    // Scan test dummy signals; not connected until scan insertion
+    SCANOUTHCLK   // Scan Chain Output
+
+    );
+
+// -----------------------------------------------------------------------------
+// Input and Output declarations
+// -----------------------------------------------------------------------------
+
+    // Common AHB signals
+    input         HCLK;            // AHB System Clock
+    input         HRESETn;         // AHB System Reset
+
+    // System Address Remap control
+    input   [3:0] REMAP;           // System Address REMAP control
+
+    // Input port SI0 (inputs from master 0)
+    input  [31:0] HADDR_socdebug;         // Address bus
+    input   [1:0] HTRANS_socdebug;        // Transfer type
+    input         HWRITE_socdebug;        // Transfer direction
+    input   [2:0] HSIZE_socdebug;         // Transfer size
+    input   [2:0] HBURST_socdebug;        // Burst type
+    input   [3:0] HPROT_socdebug;         // Protection control
+    input  [31:0] HWDATA_socdebug;        // Write data
+    input         HMASTLOCK_socdebug;     // Locked Sequence
+
+    // Input port SI1 (inputs from master 1)
+    input  [31:0] HADDR_dma_0;         // Address bus
+    input   [1:0] HTRANS_dma_0;        // Transfer type
+    input         HWRITE_dma_0;        // Transfer direction
+    input   [2:0] HSIZE_dma_0;         // Transfer size
+    input   [2:0] HBURST_dma_0;        // Burst type
+    input   [3:0] HPROT_dma_0;         // Protection control
+    input  [31:0] HWDATA_dma_0;        // Write data
+    input         HMASTLOCK_dma_0;     // Locked Sequence
+
+    // Input port SI2 (inputs from master 2)
+    input  [31:0] HADDR_dma_1;         // Address bus
+    input   [1:0] HTRANS_dma_1;        // Transfer type
+    input         HWRITE_dma_1;        // Transfer direction
+    input   [2:0] HSIZE_dma_1;         // Transfer size
+    input   [2:0] HBURST_dma_1;        // Burst type
+    input   [3:0] HPROT_dma_1;         // Protection control
+    input  [31:0] HWDATA_dma_1;        // Write data
+    input         HMASTLOCK_dma_1;     // Locked Sequence
+
+    // Input port SI3 (inputs from master 3)
+    input  [31:0] HADDR_cpu;         // Address bus
+    input   [1:0] HTRANS_cpu;        // Transfer type
+    input         HWRITE_cpu;        // Transfer direction
+    input   [2:0] HSIZE_cpu;         // Transfer size
+    input   [2:0] HBURST_cpu;        // Burst type
+    input   [3:0] HPROT_cpu;         // Protection control
+    input  [31:0] HWDATA_cpu;        // Write data
+    input         HMASTLOCK_cpu;     // Locked Sequence
+
+    // Output port MI0 (inputs from slave 0)
+    input  [31:0] HRDATA_bootrom;        // Read data bus
+    input         HREADYOUT_bootrom;     // HREADY feedback
+    input         HRESP_bootrom;         // Transfer response
+
+    // Output port MI1 (inputs from slave 1)
+    input  [31:0] HRDATA_imem;        // Read data bus
+    input         HREADYOUT_imem;     // HREADY feedback
+    input         HRESP_imem;         // Transfer response
+
+    // Output port MI2 (inputs from slave 2)
+    input  [31:0] HRDATA_dmem;        // Read data bus
+    input         HREADYOUT_dmem;     // HREADY feedback
+    input         HRESP_dmem;         // Transfer response
+
+    // Output port MI3 (inputs from slave 3)
+    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)
+    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)
+    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)
+    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)
+    input  [31:0] HRDATA_systable;        // Read data bus
+    input         HREADYOUT_systable;     // HREADY feedback
+    input         HRESP_systable;         // Transfer response
+
+    // Scan test dummy signals; not connected until scan insertion
+    input         SCANENABLE;      // Scan enable signal
+    input         SCANINHCLK;      // HCLK scan input
+
+
+    // Output port MI0 (outputs to slave 0)
+    output        HSEL_bootrom;          // Slave Select
+    output [31:0] HADDR_bootrom;         // Address bus
+    output  [1:0] HTRANS_bootrom;        // Transfer type
+    output        HWRITE_bootrom;        // Transfer direction
+    output  [2:0] HSIZE_bootrom;         // Transfer size
+    output  [2:0] HBURST_bootrom;        // Burst type
+    output  [3:0] HPROT_bootrom;         // Protection control
+    output [31:0] HWDATA_bootrom;        // Write data
+    output        HMASTLOCK_bootrom;     // Locked Sequence
+    output        HREADYMUX_bootrom;     // Transfer done
+
+    // Output port MI1 (outputs to slave 1)
+    output        HSEL_imem;          // Slave Select
+    output [31:0] HADDR_imem;         // Address bus
+    output  [1:0] HTRANS_imem;        // Transfer type
+    output        HWRITE_imem;        // Transfer direction
+    output  [2:0] HSIZE_imem;         // Transfer size
+    output  [2:0] HBURST_imem;        // Burst type
+    output  [3:0] HPROT_imem;         // Protection control
+    output [31:0] HWDATA_imem;        // Write data
+    output        HMASTLOCK_imem;     // Locked Sequence
+    output        HREADYMUX_imem;     // Transfer done
+
+    // Output port MI2 (outputs to slave 2)
+    output        HSEL_dmem;          // Slave Select
+    output [31:0] HADDR_dmem;         // Address bus
+    output  [1:0] HTRANS_dmem;        // Transfer type
+    output        HWRITE_dmem;        // Transfer direction
+    output  [2:0] HSIZE_dmem;         // Transfer size
+    output  [2:0] HBURST_dmem;        // Burst type
+    output  [3:0] HPROT_dmem;         // Protection control
+    output [31:0] HWDATA_dmem;        // Write data
+    output        HMASTLOCK_dmem;     // Locked Sequence
+    output        HREADYMUX_dmem;     // Transfer done
+
+    // Output port MI3 (outputs to slave 3)
+    output        HSEL_sysio;          // Slave Select
+    output [31:0] HADDR_sysio;         // Address bus
+    output  [1:0] HTRANS_sysio;        // Transfer type
+    output        HWRITE_sysio;        // Transfer direction
+    output  [2:0] HSIZE_sysio;         // Transfer size
+    output  [2:0] HBURST_sysio;        // Burst type
+    output  [3:0] HPROT_sysio;         // Protection control
+    output [31:0] HWDATA_sysio;        // Write data
+    output        HMASTLOCK_sysio;     // Locked Sequence
+    output        HREADYMUX_sysio;     // Transfer done
+
+    // Output port MI4 (outputs to slave 4)
+    output        HSEL_expram_l;          // Slave Select
+    output [31:0] HADDR_expram_l;         // Address bus
+    output  [1:0] HTRANS_expram_l;        // Transfer type
+    output        HWRITE_expram_l;        // Transfer direction
+    output  [2:0] HSIZE_expram_l;         // Transfer size
+    output  [2:0] HBURST_expram_l;        // Burst type
+    output  [3:0] HPROT_expram_l;         // Protection control
+    output [31:0] HWDATA_expram_l;        // Write data
+    output        HMASTLOCK_expram_l;     // Locked Sequence
+    output        HREADYMUX_expram_l;     // Transfer done
+
+    // Output port MI5 (outputs to slave 5)
+    output        HSEL_expram_h;          // Slave Select
+    output [31:0] HADDR_expram_h;         // Address bus
+    output  [1:0] HTRANS_expram_h;        // Transfer type
+    output        HWRITE_expram_h;        // Transfer direction
+    output  [2:0] HSIZE_expram_h;         // Transfer size
+    output  [2:0] HBURST_expram_h;        // Burst type
+    output  [3:0] HPROT_expram_h;         // Protection control
+    output [31:0] HWDATA_expram_h;        // Write data
+    output        HMASTLOCK_expram_h;     // Locked Sequence
+    output        HREADYMUX_expram_h;     // Transfer done
+
+    // Output port MI6 (outputs to slave 6)
+    output        HSEL_exp;          // Slave Select
+    output [31:0] HADDR_exp;         // Address bus
+    output  [1:0] HTRANS_exp;        // Transfer type
+    output        HWRITE_exp;        // Transfer direction
+    output  [2:0] HSIZE_exp;         // Transfer size
+    output  [2:0] HBURST_exp;        // Burst type
+    output  [3:0] HPROT_exp;         // Protection control
+    output [31:0] HWDATA_exp;        // Write data
+    output        HMASTLOCK_exp;     // Locked Sequence
+    output        HREADYMUX_exp;     // Transfer done
+
+    // Output port MI7 (outputs to slave 7)
+    output        HSEL_systable;          // Slave Select
+    output [31:0] HADDR_systable;         // Address bus
+    output  [1:0] HTRANS_systable;        // Transfer type
+    output        HWRITE_systable;        // Transfer direction
+    output  [2:0] HSIZE_systable;         // Transfer size
+    output  [2:0] HBURST_systable;        // Burst type
+    output  [3:0] HPROT_systable;         // Protection control
+    output [31:0] HWDATA_systable;        // Write data
+    output        HMASTLOCK_systable;     // Locked Sequence
+    output        HREADYMUX_systable;     // Transfer done
+
+    // Input port SI0 (outputs to master 0)
+    output [31:0] HRDATA_socdebug;        // Read data bus
+    output        HREADY_socdebug;     // HREADY feedback
+    output        HRESP_socdebug;         // Transfer response
+
+    // Input port SI1 (outputs to master 1)
+    output [31:0] HRDATA_dma_0;        // Read data bus
+    output        HREADY_dma_0;     // HREADY feedback
+    output        HRESP_dma_0;         // Transfer response
+
+    // Input port SI2 (outputs to master 2)
+    output [31:0] HRDATA_dma_1;        // Read data bus
+    output        HREADY_dma_1;     // HREADY feedback
+    output        HRESP_dma_1;         // Transfer response
+
+    // Input port SI3 (outputs to master 3)
+    output [31:0] HRDATA_cpu;        // Read data bus
+    output        HREADY_cpu;     // HREADY feedback
+    output        HRESP_cpu;         // Transfer response
+
+    // Scan test dummy signals; not connected until scan insertion
+    output        SCANOUTHCLK;     // Scan Chain Output
+
+// -----------------------------------------------------------------------------
+// Wire declarations
+// -----------------------------------------------------------------------------
+
+    // Common AHB signals
+    wire         HCLK;            // AHB System Clock
+    wire         HRESETn;         // AHB System Reset
+
+    // System Address Remap control
+    wire   [3:0] REMAP;           // System REMAP signal
+
+    // Input Port SI0
+    wire  [31:0] HADDR_socdebug;         // Address bus
+    wire   [1:0] HTRANS_socdebug;        // Transfer type
+    wire         HWRITE_socdebug;        // Transfer direction
+    wire   [2:0] HSIZE_socdebug;         // Transfer size
+    wire   [2:0] HBURST_socdebug;        // Burst type
+    wire   [3:0] HPROT_socdebug;         // Protection control
+    wire  [31:0] HWDATA_socdebug;        // Write data
+    wire         HMASTLOCK_socdebug;     // Locked Sequence
+
+    wire  [31:0] HRDATA_socdebug;        // Read data bus
+    wire         HREADY_socdebug;     // HREADY feedback
+    wire         HRESP_socdebug;         // Transfer response
+
+    // Input Port SI1
+    wire  [31:0] HADDR_dma_0;         // Address bus
+    wire   [1:0] HTRANS_dma_0;        // Transfer type
+    wire         HWRITE_dma_0;        // Transfer direction
+    wire   [2:0] HSIZE_dma_0;         // Transfer size
+    wire   [2:0] HBURST_dma_0;        // Burst type
+    wire   [3:0] HPROT_dma_0;         // Protection control
+    wire  [31:0] HWDATA_dma_0;        // Write data
+    wire         HMASTLOCK_dma_0;     // Locked Sequence
+
+    wire  [31:0] HRDATA_dma_0;        // Read data bus
+    wire         HREADY_dma_0;     // HREADY feedback
+    wire         HRESP_dma_0;         // Transfer response
+
+    // Input Port SI2
+    wire  [31:0] HADDR_dma_1;         // Address bus
+    wire   [1:0] HTRANS_dma_1;        // Transfer type
+    wire         HWRITE_dma_1;        // Transfer direction
+    wire   [2:0] HSIZE_dma_1;         // Transfer size
+    wire   [2:0] HBURST_dma_1;        // Burst type
+    wire   [3:0] HPROT_dma_1;         // Protection control
+    wire  [31:0] HWDATA_dma_1;        // Write data
+    wire         HMASTLOCK_dma_1;     // Locked Sequence
+
+    wire  [31:0] HRDATA_dma_1;        // Read data bus
+    wire         HREADY_dma_1;     // HREADY feedback
+    wire         HRESP_dma_1;         // Transfer response
+
+    // Input Port SI3
+    wire  [31:0] HADDR_cpu;         // Address bus
+    wire   [1:0] HTRANS_cpu;        // Transfer type
+    wire         HWRITE_cpu;        // Transfer direction
+    wire   [2:0] HSIZE_cpu;         // Transfer size
+    wire   [2:0] HBURST_cpu;        // Burst type
+    wire   [3:0] HPROT_cpu;         // Protection control
+    wire  [31:0] HWDATA_cpu;        // Write data
+    wire         HMASTLOCK_cpu;     // Locked Sequence
+
+    wire  [31:0] HRDATA_cpu;        // Read data bus
+    wire         HREADY_cpu;     // HREADY feedback
+    wire         HRESP_cpu;         // Transfer response
+
+    // Output Port MI0
+    wire         HSEL_bootrom;          // Slave Select
+    wire  [31:0] HADDR_bootrom;         // Address bus
+    wire   [1:0] HTRANS_bootrom;        // Transfer type
+    wire         HWRITE_bootrom;        // Transfer direction
+    wire   [2:0] HSIZE_bootrom;         // Transfer size
+    wire   [2:0] HBURST_bootrom;        // Burst type
+    wire   [3:0] HPROT_bootrom;         // Protection control
+    wire  [31:0] HWDATA_bootrom;        // Write data
+    wire         HMASTLOCK_bootrom;     // Locked Sequence
+    wire         HREADYMUX_bootrom;     // Transfer done
+
+    wire  [31:0] HRDATA_bootrom;        // Read data bus
+    wire         HREADYOUT_bootrom;     // HREADY feedback
+    wire         HRESP_bootrom;         // Transfer response
+
+    // Output Port MI1
+    wire         HSEL_imem;          // Slave Select
+    wire  [31:0] HADDR_imem;         // Address bus
+    wire   [1:0] HTRANS_imem;        // Transfer type
+    wire         HWRITE_imem;        // Transfer direction
+    wire   [2:0] HSIZE_imem;         // Transfer size
+    wire   [2:0] HBURST_imem;        // Burst type
+    wire   [3:0] HPROT_imem;         // Protection control
+    wire  [31:0] HWDATA_imem;        // Write data
+    wire         HMASTLOCK_imem;     // Locked Sequence
+    wire         HREADYMUX_imem;     // Transfer done
+
+    wire  [31:0] HRDATA_imem;        // Read data bus
+    wire         HREADYOUT_imem;     // HREADY feedback
+    wire         HRESP_imem;         // Transfer response
+
+    // Output Port MI2
+    wire         HSEL_dmem;          // Slave Select
+    wire  [31:0] HADDR_dmem;         // Address bus
+    wire   [1:0] HTRANS_dmem;        // Transfer type
+    wire         HWRITE_dmem;        // Transfer direction
+    wire   [2:0] HSIZE_dmem;         // Transfer size
+    wire   [2:0] HBURST_dmem;        // Burst type
+    wire   [3:0] HPROT_dmem;         // Protection control
+    wire  [31:0] HWDATA_dmem;        // Write data
+    wire         HMASTLOCK_dmem;     // Locked Sequence
+    wire         HREADYMUX_dmem;     // Transfer done
+
+    wire  [31:0] HRDATA_dmem;        // Read data bus
+    wire         HREADYOUT_dmem;     // HREADY feedback
+    wire         HRESP_dmem;         // Transfer response
+
+    // Output Port MI3
+    wire         HSEL_sysio;          // Slave Select
+    wire  [31:0] HADDR_sysio;         // Address bus
+    wire   [1:0] HTRANS_sysio;        // Transfer type
+    wire         HWRITE_sysio;        // Transfer direction
+    wire   [2:0] HSIZE_sysio;         // Transfer size
+    wire   [2:0] HBURST_sysio;        // Burst type
+    wire   [3:0] HPROT_sysio;         // Protection control
+    wire  [31:0] HWDATA_sysio;        // Write data
+    wire         HMASTLOCK_sysio;     // Locked Sequence
+    wire         HREADYMUX_sysio;     // Transfer done
+
+    wire  [31:0] HRDATA_sysio;        // Read data bus
+    wire         HREADYOUT_sysio;     // HREADY feedback
+    wire         HRESP_sysio;         // Transfer response
+
+    // Output Port MI4
+    wire         HSEL_expram_l;          // Slave Select
+    wire  [31:0] HADDR_expram_l;         // Address bus
+    wire   [1:0] HTRANS_expram_l;        // Transfer type
+    wire         HWRITE_expram_l;        // Transfer direction
+    wire   [2:0] HSIZE_expram_l;         // Transfer size
+    wire   [2:0] HBURST_expram_l;        // Burst type
+    wire   [3:0] HPROT_expram_l;         // Protection control
+    wire  [31:0] HWDATA_expram_l;        // Write data
+    wire         HMASTLOCK_expram_l;     // Locked Sequence
+    wire         HREADYMUX_expram_l;     // Transfer done
+
+    wire  [31:0] HRDATA_expram_l;        // Read data bus
+    wire         HREADYOUT_expram_l;     // HREADY feedback
+    wire         HRESP_expram_l;         // Transfer response
+
+    // Output Port MI5
+    wire         HSEL_expram_h;          // Slave Select
+    wire  [31:0] HADDR_expram_h;         // Address bus
+    wire   [1:0] HTRANS_expram_h;        // Transfer type
+    wire         HWRITE_expram_h;        // Transfer direction
+    wire   [2:0] HSIZE_expram_h;         // Transfer size
+    wire   [2:0] HBURST_expram_h;        // Burst type
+    wire   [3:0] HPROT_expram_h;         // Protection control
+    wire  [31:0] HWDATA_expram_h;        // Write data
+    wire         HMASTLOCK_expram_h;     // Locked Sequence
+    wire         HREADYMUX_expram_h;     // Transfer done
+
+    wire  [31:0] HRDATA_expram_h;        // Read data bus
+    wire         HREADYOUT_expram_h;     // HREADY feedback
+    wire         HRESP_expram_h;         // Transfer response
+
+    // Output Port MI6
+    wire         HSEL_exp;          // Slave Select
+    wire  [31:0] HADDR_exp;         // Address bus
+    wire   [1:0] HTRANS_exp;        // Transfer type
+    wire         HWRITE_exp;        // Transfer direction
+    wire   [2:0] HSIZE_exp;         // Transfer size
+    wire   [2:0] HBURST_exp;        // Burst type
+    wire   [3:0] HPROT_exp;         // Protection control
+    wire  [31:0] HWDATA_exp;        // Write data
+    wire         HMASTLOCK_exp;     // Locked Sequence
+    wire         HREADYMUX_exp;     // Transfer done
+
+    wire  [31:0] HRDATA_exp;        // Read data bus
+    wire         HREADYOUT_exp;     // HREADY feedback
+    wire         HRESP_exp;         // Transfer response
+
+    // Output Port MI7
+    wire         HSEL_systable;          // Slave Select
+    wire  [31:0] HADDR_systable;         // Address bus
+    wire   [1:0] HTRANS_systable;        // Transfer type
+    wire         HWRITE_systable;        // Transfer direction
+    wire   [2:0] HSIZE_systable;         // Transfer size
+    wire   [2:0] HBURST_systable;        // Burst type
+    wire   [3:0] HPROT_systable;         // Protection control
+    wire  [31:0] HWDATA_systable;        // Write data
+    wire         HMASTLOCK_systable;     // Locked Sequence
+    wire         HREADYMUX_systable;     // Transfer done
+
+    wire  [31:0] HRDATA_systable;        // Read data bus
+    wire         HREADYOUT_systable;     // HREADY feedback
+    wire         HRESP_systable;         // Transfer response
+
+
+// -----------------------------------------------------------------------------
+// Signal declarations
+// -----------------------------------------------------------------------------
+    wire   [3:0] tie_hi_4;
+    wire         tie_hi;
+    wire         tie_low;
+    wire   [1:0] i_hresp_socdebug;
+    wire   [1:0] i_hresp_dma_0;
+    wire   [1:0] i_hresp_dma_1;
+    wire   [1:0] i_hresp_cpu;
+
+    wire   [3:0]        i_hmaster_bootrom;
+    wire   [1:0] i_hresp_bootrom;
+    wire   [3:0]        i_hmaster_imem;
+    wire   [1:0] i_hresp_imem;
+    wire   [3:0]        i_hmaster_dmem;
+    wire   [1:0] i_hresp_dmem;
+    wire   [3:0]        i_hmaster_sysio;
+    wire   [1:0] i_hresp_sysio;
+    wire   [3:0]        i_hmaster_expram_l;
+    wire   [1:0] i_hresp_expram_l;
+    wire   [3:0]        i_hmaster_expram_h;
+    wire   [1:0] i_hresp_expram_h;
+    wire   [3:0]        i_hmaster_exp;
+    wire   [1:0] i_hresp_exp;
+    wire   [3:0]        i_hmaster_systable;
+    wire   [1:0] i_hresp_systable;
+
+// -----------------------------------------------------------------------------
+// Beginning of main code
+// -----------------------------------------------------------------------------
+
+    assign tie_hi   = 1'b1;
+    assign tie_hi_4 = 4'b1111;
+    assign tie_low  = 1'b0;
+
+
+    assign HRESP_socdebug  = i_hresp_socdebug[0];
+
+    assign HRESP_dma_0  = i_hresp_dma_0[0];
+
+    assign HRESP_dma_1  = i_hresp_dma_1[0];
+
+    assign HRESP_cpu  = i_hresp_cpu[0];
+
+    assign i_hresp_bootrom = {{1{tie_low}}, HRESP_bootrom};
+    assign i_hresp_imem = {{1{tie_low}}, HRESP_imem};
+    assign i_hresp_dmem = {{1{tie_low}}, HRESP_dmem};
+    assign i_hresp_sysio = {{1{tie_low}}, HRESP_sysio};
+    assign i_hresp_expram_l = {{1{tie_low}}, HRESP_expram_l};
+    assign i_hresp_expram_h = {{1{tie_low}}, HRESP_expram_h};
+    assign i_hresp_exp = {{1{tie_low}}, HRESP_exp};
+    assign i_hresp_systable = {{1{tie_low}}, HRESP_systable};
+
+// BusMatrix instance
+  nanosoc_busmatrix unanosoc_busmatrix (
+    .HCLK       (HCLK),
+    .HRESETn    (HRESETn),
+    .REMAP      (REMAP),
+
+    // Input port SI0 signals
+    .HSEL_socdebug       (tie_hi),
+    .HADDR_socdebug      (HADDR_socdebug),
+    .HTRANS_socdebug     (HTRANS_socdebug),
+    .HWRITE_socdebug     (HWRITE_socdebug),
+    .HSIZE_socdebug      (HSIZE_socdebug),
+    .HBURST_socdebug     (HBURST_socdebug),
+    .HPROT_socdebug      (HPROT_socdebug),
+    .HWDATA_socdebug     (HWDATA_socdebug),
+    .HMASTLOCK_socdebug  (HMASTLOCK_socdebug),
+    .HMASTER_socdebug    (tie_hi_4),
+    .HREADY_socdebug     (HREADY_socdebug),
+    .HRDATA_socdebug     (HRDATA_socdebug),
+    .HREADYOUT_socdebug  (HREADY_socdebug),
+    .HRESP_socdebug      (i_hresp_socdebug),
+
+    // Input port SI1 signals
+    .HSEL_dma_0       (tie_hi),
+    .HADDR_dma_0      (HADDR_dma_0),
+    .HTRANS_dma_0     (HTRANS_dma_0),
+    .HWRITE_dma_0     (HWRITE_dma_0),
+    .HSIZE_dma_0      (HSIZE_dma_0),
+    .HBURST_dma_0     (HBURST_dma_0),
+    .HPROT_dma_0      (HPROT_dma_0),
+    .HWDATA_dma_0     (HWDATA_dma_0),
+    .HMASTLOCK_dma_0  (HMASTLOCK_dma_0),
+    .HMASTER_dma_0    (tie_hi_4),
+    .HREADY_dma_0     (HREADY_dma_0),
+    .HRDATA_dma_0     (HRDATA_dma_0),
+    .HREADYOUT_dma_0  (HREADY_dma_0),
+    .HRESP_dma_0      (i_hresp_dma_0),
+
+    // Input port SI2 signals
+    .HSEL_dma_1       (tie_hi),
+    .HADDR_dma_1      (HADDR_dma_1),
+    .HTRANS_dma_1     (HTRANS_dma_1),
+    .HWRITE_dma_1     (HWRITE_dma_1),
+    .HSIZE_dma_1      (HSIZE_dma_1),
+    .HBURST_dma_1     (HBURST_dma_1),
+    .HPROT_dma_1      (HPROT_dma_1),
+    .HWDATA_dma_1     (HWDATA_dma_1),
+    .HMASTLOCK_dma_1  (HMASTLOCK_dma_1),
+    .HMASTER_dma_1    (tie_hi_4),
+    .HREADY_dma_1     (HREADY_dma_1),
+    .HRDATA_dma_1     (HRDATA_dma_1),
+    .HREADYOUT_dma_1  (HREADY_dma_1),
+    .HRESP_dma_1      (i_hresp_dma_1),
+
+    // Input port SI3 signals
+    .HSEL_cpu       (tie_hi),
+    .HADDR_cpu      (HADDR_cpu),
+    .HTRANS_cpu     (HTRANS_cpu),
+    .HWRITE_cpu     (HWRITE_cpu),
+    .HSIZE_cpu      (HSIZE_cpu),
+    .HBURST_cpu     (HBURST_cpu),
+    .HPROT_cpu      (HPROT_cpu),
+    .HWDATA_cpu     (HWDATA_cpu),
+    .HMASTLOCK_cpu  (HMASTLOCK_cpu),
+    .HMASTER_cpu    (tie_hi_4),
+    .HREADY_cpu     (HREADY_cpu),
+    .HRDATA_cpu     (HRDATA_cpu),
+    .HREADYOUT_cpu  (HREADY_cpu),
+    .HRESP_cpu      (i_hresp_cpu),
+
+
+    // Output port MI0 signals
+    .HSEL_bootrom       (HSEL_bootrom),
+    .HADDR_bootrom      (HADDR_bootrom),
+    .HTRANS_bootrom     (HTRANS_bootrom),
+    .HWRITE_bootrom     (HWRITE_bootrom),
+    .HSIZE_bootrom      (HSIZE_bootrom),
+    .HBURST_bootrom     (HBURST_bootrom),
+    .HPROT_bootrom      (HPROT_bootrom),
+    .HWDATA_bootrom     (HWDATA_bootrom),
+    .HMASTER_bootrom    (i_hmaster_bootrom),
+    .HMASTLOCK_bootrom  (HMASTLOCK_bootrom),
+    .HREADYMUX_bootrom  (HREADYMUX_bootrom),
+    .HRDATA_bootrom     (HRDATA_bootrom),
+    .HREADYOUT_bootrom  (HREADYOUT_bootrom),
+    .HRESP_bootrom      (i_hresp_bootrom),
+
+    // Output port MI1 signals
+    .HSEL_imem       (HSEL_imem),
+    .HADDR_imem      (HADDR_imem),
+    .HTRANS_imem     (HTRANS_imem),
+    .HWRITE_imem     (HWRITE_imem),
+    .HSIZE_imem      (HSIZE_imem),
+    .HBURST_imem     (HBURST_imem),
+    .HPROT_imem      (HPROT_imem),
+    .HWDATA_imem     (HWDATA_imem),
+    .HMASTER_imem    (i_hmaster_imem),
+    .HMASTLOCK_imem  (HMASTLOCK_imem),
+    .HREADYMUX_imem  (HREADYMUX_imem),
+    .HRDATA_imem     (HRDATA_imem),
+    .HREADYOUT_imem  (HREADYOUT_imem),
+    .HRESP_imem      (i_hresp_imem),
+
+    // Output port MI2 signals
+    .HSEL_dmem       (HSEL_dmem),
+    .HADDR_dmem      (HADDR_dmem),
+    .HTRANS_dmem     (HTRANS_dmem),
+    .HWRITE_dmem     (HWRITE_dmem),
+    .HSIZE_dmem      (HSIZE_dmem),
+    .HBURST_dmem     (HBURST_dmem),
+    .HPROT_dmem      (HPROT_dmem),
+    .HWDATA_dmem     (HWDATA_dmem),
+    .HMASTER_dmem    (i_hmaster_dmem),
+    .HMASTLOCK_dmem  (HMASTLOCK_dmem),
+    .HREADYMUX_dmem  (HREADYMUX_dmem),
+    .HRDATA_dmem     (HRDATA_dmem),
+    .HREADYOUT_dmem  (HREADYOUT_dmem),
+    .HRESP_dmem      (i_hresp_dmem),
+
+    // Output port MI3 signals
+    .HSEL_sysio       (HSEL_sysio),
+    .HADDR_sysio      (HADDR_sysio),
+    .HTRANS_sysio     (HTRANS_sysio),
+    .HWRITE_sysio     (HWRITE_sysio),
+    .HSIZE_sysio      (HSIZE_sysio),
+    .HBURST_sysio     (HBURST_sysio),
+    .HPROT_sysio      (HPROT_sysio),
+    .HWDATA_sysio     (HWDATA_sysio),
+    .HMASTER_sysio    (i_hmaster_sysio),
+    .HMASTLOCK_sysio  (HMASTLOCK_sysio),
+    .HREADYMUX_sysio  (HREADYMUX_sysio),
+    .HRDATA_sysio     (HRDATA_sysio),
+    .HREADYOUT_sysio  (HREADYOUT_sysio),
+    .HRESP_sysio      (i_hresp_sysio),
+
+    // Output port MI4 signals
+    .HSEL_expram_l       (HSEL_expram_l),
+    .HADDR_expram_l      (HADDR_expram_l),
+    .HTRANS_expram_l     (HTRANS_expram_l),
+    .HWRITE_expram_l     (HWRITE_expram_l),
+    .HSIZE_expram_l      (HSIZE_expram_l),
+    .HBURST_expram_l     (HBURST_expram_l),
+    .HPROT_expram_l      (HPROT_expram_l),
+    .HWDATA_expram_l     (HWDATA_expram_l),
+    .HMASTER_expram_l    (i_hmaster_expram_l),
+    .HMASTLOCK_expram_l  (HMASTLOCK_expram_l),
+    .HREADYMUX_expram_l  (HREADYMUX_expram_l),
+    .HRDATA_expram_l     (HRDATA_expram_l),
+    .HREADYOUT_expram_l  (HREADYOUT_expram_l),
+    .HRESP_expram_l      (i_hresp_expram_l),
+
+    // Output port MI5 signals
+    .HSEL_expram_h       (HSEL_expram_h),
+    .HADDR_expram_h      (HADDR_expram_h),
+    .HTRANS_expram_h     (HTRANS_expram_h),
+    .HWRITE_expram_h     (HWRITE_expram_h),
+    .HSIZE_expram_h      (HSIZE_expram_h),
+    .HBURST_expram_h     (HBURST_expram_h),
+    .HPROT_expram_h      (HPROT_expram_h),
+    .HWDATA_expram_h     (HWDATA_expram_h),
+    .HMASTER_expram_h    (i_hmaster_expram_h),
+    .HMASTLOCK_expram_h  (HMASTLOCK_expram_h),
+    .HREADYMUX_expram_h  (HREADYMUX_expram_h),
+    .HRDATA_expram_h     (HRDATA_expram_h),
+    .HREADYOUT_expram_h  (HREADYOUT_expram_h),
+    .HRESP_expram_h      (i_hresp_expram_h),
+
+    // Output port MI6 signals
+    .HSEL_exp       (HSEL_exp),
+    .HADDR_exp      (HADDR_exp),
+    .HTRANS_exp     (HTRANS_exp),
+    .HWRITE_exp     (HWRITE_exp),
+    .HSIZE_exp      (HSIZE_exp),
+    .HBURST_exp     (HBURST_exp),
+    .HPROT_exp      (HPROT_exp),
+    .HWDATA_exp     (HWDATA_exp),
+    .HMASTER_exp    (i_hmaster_exp),
+    .HMASTLOCK_exp  (HMASTLOCK_exp),
+    .HREADYMUX_exp  (HREADYMUX_exp),
+    .HRDATA_exp     (HRDATA_exp),
+    .HREADYOUT_exp  (HREADYOUT_exp),
+    .HRESP_exp      (i_hresp_exp),
+
+    // Output port MI7 signals
+    .HSEL_systable       (HSEL_systable),
+    .HADDR_systable      (HADDR_systable),
+    .HTRANS_systable     (HTRANS_systable),
+    .HWRITE_systable     (HWRITE_systable),
+    .HSIZE_systable      (HSIZE_systable),
+    .HBURST_systable     (HBURST_systable),
+    .HPROT_systable      (HPROT_systable),
+    .HWDATA_systable     (HWDATA_systable),
+    .HMASTER_systable    (i_hmaster_systable),
+    .HMASTLOCK_systable  (HMASTLOCK_systable),
+    .HREADYMUX_systable  (HREADYMUX_systable),
+    .HRDATA_systable     (HRDATA_systable),
+    .HREADYOUT_systable  (HREADYOUT_systable),
+    .HRESP_systable      (i_hresp_systable),
+
+
+    // Scan test dummy signals; not connected until scan insertion
+    .SCANENABLE            (SCANENABLE),
+    .SCANINHCLK            (SCANINHCLK),
+    .SCANOUTHCLK           (SCANOUTHCLK)
+  );
+
+
+endmodule
diff --git a/system/src/nanosoc_ahb_busmatrix/verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_inititator_input.v b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_inititator_input.v
similarity index 97%
rename from system/src/nanosoc_ahb_busmatrix/verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_inititator_input.v
rename to system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_inititator_input.v
index f44b208ff4aa4909edc5a1fafd20867a342d7dfa..d770544cbae49d558bc2dc307f80a4a09ec16aa3 100644
--- a/system/src/nanosoc_ahb_busmatrix/verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_inititator_input.v
+++ b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_inititator_input.v
@@ -29,7 +29,7 @@
 
 
 
-module nanosoc_ahb32_4x7_inititator_input (
+module nanosoc_inititator_input (
 
     // Common AHB signals
     HCLK,
@@ -38,7 +38,6 @@ module nanosoc_ahb32_4x7_inititator_input (
     // Input Port Address/Control Signals
     HSELS,
     HADDRS,
-    HAUSERS,
     HTRANSS,
     HWRITES,
     HSIZES,
@@ -60,7 +59,6 @@ module nanosoc_ahb32_4x7_inititator_input (
     // Internal Address/Control Signals
     sel_ip,
     addr_ip,
-    auser_ip,
     trans_ip,
     write_ip,
     size_ip,
@@ -81,7 +79,6 @@ module nanosoc_ahb32_4x7_inititator_input (
     input         HRESETn;         // AHB System Reset
     input         HSELS;           // Slave Select from AHB
     input  [31:0] HADDRS;          // Address bus from AHB
-    input  [1:0] HAUSERS;         // Additional user adress bus
     input   [1:0] HTRANSS;         // Transfer type from AHB
     input         HWRITES;         // Transfer direction from AHB
     input   [2:0] HSIZES;          // Transfer size from AHB
@@ -98,7 +95,6 @@ module nanosoc_ahb32_4x7_inititator_input (
     output  [1:0] HRESPS;          // Transfer response to AHB
     output        sel_ip;             // HSEL output
     output [31:0] addr_ip;            // HADDR output
-    output [1:0] auser_ip;           // HAUSER output
     output  [1:0] trans_ip;           // HTRANS output
     output        write_ip;           // HWRITE output
     output  [2:0] size_ip;            // HSIZE output
@@ -144,7 +140,6 @@ module nanosoc_ahb32_4x7_inititator_input (
     wire        HRESETn;         // AHB System Reset
     wire        HSELS;           // Slave Select from AHB
     wire [31:0] HADDRS;          // Address bus from AHB
-    wire [1:0] HAUSERS;         // Additional user adress bus
     wire  [1:0] HTRANSS;         // Transfer type from AHB
     wire        HWRITES;         // Transfer direction from AHB
     wire  [2:0] HSIZES;          // Transfer size from AHB
@@ -157,7 +152,6 @@ module nanosoc_ahb32_4x7_inititator_input (
     reg   [1:0] HRESPS;          // Transfer response to AHB
     reg         sel_ip;             // HSEL output
     reg  [31:0] addr_ip;            // HADDR output
-    reg  [1:0] auser_ip;           // HAUSER output
     wire  [1:0] trans_ip;           // HTRANS output
     reg         write_ip;           // HWRITE output
     reg   [2:0] size_ip;            // HSIZE output
@@ -184,7 +178,6 @@ module nanosoc_ahb32_4x7_inititator_input (
                                      // valid transfer
     reg   [1:0] reg_trans;            // Registered HTRANSS
     reg  [31:0] reg_addr;             // Registered HADDRS
-    reg  [1:0] reg_auser;
     reg         reg_write;            // Registered HWRITES
     reg   [2:0] reg_size;             // Registered HSIZES
     reg   [2:0] reg_burst;            // Registered HBURSTS
@@ -221,7 +214,6 @@ module nanosoc_ahb32_4x7_inititator_input (
         begin
           reg_trans    <= 2'b00;
           reg_addr     <= {32{1'b0}};
-          reg_auser    <= {2{1'b0}};
           reg_write    <= 1'b0 ;
           reg_size     <= 3'b000;
           reg_burst    <= 3'b000;
@@ -234,7 +226,6 @@ module nanosoc_ahb32_4x7_inititator_input (
           begin
             reg_trans    <= HTRANSS;
             reg_addr     <= HADDRS;
-            reg_auser    <= HAUSERS;
             reg_write    <= HWRITES;
             reg_size     <= HSIZES;
             reg_burst    <= HBURSTS;
@@ -301,7 +292,6 @@ module nanosoc_ahb32_4x7_inititator_input (
 
   always @ ( pend_tran_reg or HSELS or HTRANSS or HADDRS or HWRITES or
              HSIZES or HBURSTS or HPROTS or HMASTERS or HMASTLOCKS or
-             HAUSERS or reg_auser or
              reg_addr or reg_write or reg_size or reg_burst or reg_prot or
              reg_master or reg_mastlock
            )
@@ -311,7 +301,6 @@ module nanosoc_ahb32_4x7_inititator_input (
           sel_ip      = HSELS;
           trans_int   = HTRANSS;
           addr_ip     = HADDRS;
-          auser_ip    = HAUSERS;
           write_ip    = HWRITES;
           size_ip     = HSIZES;
           burst_int   = HBURSTS;
@@ -324,7 +313,6 @@ module nanosoc_ahb32_4x7_inititator_input (
           sel_ip      = 1'b1;
           trans_int   = `TRN_NONSEQ;
           addr_ip     = reg_addr;
-          auser_ip    = reg_auser;
           write_ip    = reg_write;
           size_ip     = reg_size;
           burst_int   = reg_burst;
diff --git a/system/src/nanosoc_ahb_busmatrix/verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_matrix_decode_cpu.v b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_cpu.v
similarity index 91%
rename from system/src/nanosoc_ahb_busmatrix/verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_matrix_decode_cpu.v
rename to system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_cpu.v
index f918dcb94daa5b41ca7e961395e6ac7b9f9209aa..6ef8fbc7fe46b4fee26a14cc28d856d4f1fe86e9 100644
--- a/system/src/nanosoc_ahb_busmatrix/verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_matrix_decode_cpu.v
+++ b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_cpu.v
@@ -27,13 +27,13 @@
 //                         that do not map to an Output port are diverted to
 //                         the local default slave.
 //
-//  Notes               : The bus matrix has full connectivity.
+//  Notes               : The bus matrix has sparse connectivity.
 //
 //-----------------------------------------------------------------------------
 
 
 
-module nanosoc_ahb32_4x7_matrix_decode_cpu (
+module nanosoc_matrix_decode_cpu (
 
     // Common AHB signals
     HCLK,
@@ -53,49 +53,48 @@ module nanosoc_ahb32_4x7_matrix_decode_cpu (
     readyout_dec0,
     resp_dec0,
     rdata_dec0,
-    ruser_dec0,
 
     // Bus-switch output 1
     active_dec1,
     readyout_dec1,
     resp_dec1,
     rdata_dec1,
-    ruser_dec1,
 
     // Bus-switch output 2
     active_dec2,
     readyout_dec2,
     resp_dec2,
     rdata_dec2,
-    ruser_dec2,
 
     // Bus-switch output 3
     active_dec3,
     readyout_dec3,
     resp_dec3,
     rdata_dec3,
-    ruser_dec3,
 
     // Bus-switch output 4
     active_dec4,
     readyout_dec4,
     resp_dec4,
     rdata_dec4,
-    ruser_dec4,
 
     // Bus-switch output 5
     active_dec5,
     readyout_dec5,
     resp_dec5,
     rdata_dec5,
-    ruser_dec5,
 
     // Bus-switch output 6
     active_dec6,
     readyout_dec6,
     resp_dec6,
     rdata_dec6,
-    ruser_dec6,
+
+    // Bus-switch output 7
+    active_dec7,
+    readyout_dec7,
+    resp_dec7,
+    rdata_dec7,
 
     // Output port selection signals
     sel_dec0,
@@ -105,12 +104,12 @@ module nanosoc_ahb32_4x7_matrix_decode_cpu (
     sel_dec4,
     sel_dec5,
     sel_dec6,
+    sel_dec7,
 
     // Selected Output port data and control signals
     active_dec,
     HREADYOUTS,
     HRESPS,
-    HRUSERS,
     HRDATAS
 
     );
@@ -138,49 +137,48 @@ module nanosoc_ahb32_4x7_matrix_decode_cpu (
     input         readyout_dec0;      // HREADYOUT input
     input   [1:0] resp_dec0;          // HRESP input
     input  [31:0] rdata_dec0;         // HRDATA input
-    input  [1:0] ruser_dec0;         // HRUSER input
 
     // Bus-switch output MI1
     input         active_dec1;        // Output stage MI1 active_dec signal
     input         readyout_dec1;      // HREADYOUT input
     input   [1:0] resp_dec1;          // HRESP input
     input  [31:0] rdata_dec1;         // HRDATA input
-    input  [1:0] ruser_dec1;         // HRUSER input
 
     // Bus-switch output MI2
     input         active_dec2;        // Output stage MI2 active_dec signal
     input         readyout_dec2;      // HREADYOUT input
     input   [1:0] resp_dec2;          // HRESP input
     input  [31:0] rdata_dec2;         // HRDATA input
-    input  [1:0] ruser_dec2;         // HRUSER input
 
     // Bus-switch output MI3
     input         active_dec3;        // Output stage MI3 active_dec signal
     input         readyout_dec3;      // HREADYOUT input
     input   [1:0] resp_dec3;          // HRESP input
     input  [31:0] rdata_dec3;         // HRDATA input
-    input  [1:0] ruser_dec3;         // HRUSER input
 
     // Bus-switch output MI4
     input         active_dec4;        // Output stage MI4 active_dec signal
     input         readyout_dec4;      // HREADYOUT input
     input   [1:0] resp_dec4;          // HRESP input
     input  [31:0] rdata_dec4;         // HRDATA input
-    input  [1:0] ruser_dec4;         // HRUSER input
 
     // Bus-switch output MI5
     input         active_dec5;        // Output stage MI5 active_dec signal
     input         readyout_dec5;      // HREADYOUT input
     input   [1:0] resp_dec5;          // HRESP input
     input  [31:0] rdata_dec5;         // HRDATA input
-    input  [1:0] ruser_dec5;         // HRUSER input
 
     // Bus-switch output MI6
     input         active_dec6;        // Output stage MI6 active_dec signal
     input         readyout_dec6;      // HREADYOUT input
     input   [1:0] resp_dec6;          // HRESP input
     input  [31:0] rdata_dec6;         // HRDATA input
-    input  [1:0] ruser_dec6;         // HRUSER 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
@@ -190,12 +188,12 @@ module nanosoc_ahb32_4x7_matrix_decode_cpu (
     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
     output        HREADYOUTS;     // HREADY feedback output
     output  [1:0] HRESPS;         // Transfer response
-    output [1:0] HRUSERS;        // User read Data
     output [31:0] HRDATAS;        // Read Data
 
 
@@ -220,7 +218,6 @@ module nanosoc_ahb32_4x7_matrix_decode_cpu (
     wire          readyout_dec0;       // HREADYOUT input
     wire    [1:0] resp_dec0;           // HRESP input
     wire   [31:0] rdata_dec0;          // HRDATA input
-    wire   [1:0] ruser_dec0;          // HRUSER input
     reg           sel_dec0;            // HSEL output
 
     // Bus-switch output MI1
@@ -228,7 +225,6 @@ module nanosoc_ahb32_4x7_matrix_decode_cpu (
     wire          readyout_dec1;       // HREADYOUT input
     wire    [1:0] resp_dec1;           // HRESP input
     wire   [31:0] rdata_dec1;          // HRDATA input
-    wire   [1:0] ruser_dec1;          // HRUSER input
     reg           sel_dec1;            // HSEL output
 
     // Bus-switch output MI2
@@ -236,7 +232,6 @@ module nanosoc_ahb32_4x7_matrix_decode_cpu (
     wire          readyout_dec2;       // HREADYOUT input
     wire    [1:0] resp_dec2;           // HRESP input
     wire   [31:0] rdata_dec2;          // HRDATA input
-    wire   [1:0] ruser_dec2;          // HRUSER input
     reg           sel_dec2;            // HSEL output
 
     // Bus-switch output MI3
@@ -244,7 +239,6 @@ module nanosoc_ahb32_4x7_matrix_decode_cpu (
     wire          readyout_dec3;       // HREADYOUT input
     wire    [1:0] resp_dec3;           // HRESP input
     wire   [31:0] rdata_dec3;          // HRDATA input
-    wire   [1:0] ruser_dec3;          // HRUSER input
     reg           sel_dec3;            // HSEL output
 
     // Bus-switch output MI4
@@ -252,7 +246,6 @@ module nanosoc_ahb32_4x7_matrix_decode_cpu (
     wire          readyout_dec4;       // HREADYOUT input
     wire    [1:0] resp_dec4;           // HRESP input
     wire   [31:0] rdata_dec4;          // HRDATA input
-    wire   [1:0] ruser_dec4;          // HRUSER input
     reg           sel_dec4;            // HSEL output
 
     // Bus-switch output MI5
@@ -260,7 +253,6 @@ module nanosoc_ahb32_4x7_matrix_decode_cpu (
     wire          readyout_dec5;       // HREADYOUT input
     wire    [1:0] resp_dec5;           // HRESP input
     wire   [31:0] rdata_dec5;          // HRDATA input
-    wire   [1:0] ruser_dec5;          // HRUSER input
     reg           sel_dec5;            // HSEL output
 
     // Bus-switch output MI6
@@ -268,9 +260,15 @@ module nanosoc_ahb32_4x7_matrix_decode_cpu (
     wire          readyout_dec6;       // HREADYOUT input
     wire    [1:0] resp_dec6;           // HRESP input
     wire   [31:0] rdata_dec6;          // HRDATA input
-    wire   [1:0] ruser_dec6;          // HRUSER 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
@@ -280,7 +278,6 @@ module nanosoc_ahb32_4x7_matrix_decode_cpu (
     reg           active_dec;          // Combinatorial active_dec O/P signal
     reg           HREADYOUTS;      // Combinatorial HREADYOUT signal
     reg     [1:0] HRESPS;          // Combinatorial HRESPS signal
-    reg    [1:0] HRUSERS;
     reg    [31:0] HRDATAS;         // Read data bus
 
     reg     [3:0] addr_out_port;     // Address output ports
@@ -300,7 +297,7 @@ module nanosoc_ahb32_4x7_matrix_decode_cpu (
 // Default slave (accessed when HADDR is unmapped)
 //------------------------------------------------------------------------------
 
-  nanosoc_ahb32_4x7_busmatrix_default_slave u_nanosoc_ahb32_4x7_busmatrix_default_slave (
+  nanosoc_busmatrix_default_slave u_nanosoc_busmatrix_default_slave (
 
     // Common AHB signals
     .HCLK        (HCLK),
@@ -357,9 +354,6 @@ module nanosoc_ahb32_4x7_matrix_decode_cpu (
             // 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
-            // Static address region 0xf0000000-0xf003ffff
-            else if ((decode_addr_dec >= 22'h3c0000) & (decode_addr_dec <= 22'h3c00ff))
-               addr_out_port = 4'b0011;  // Select Output port MI3
 
             // Static address region 0x80000000-0x8fffffff
             else if ((decode_addr_dec >= 22'h200000) & (decode_addr_dec <= 22'h23ffff))
@@ -376,6 +370,10 @@ module nanosoc_ahb32_4x7_matrix_decode_cpu (
             else if ((decode_addr_dec >= 22'h280000) & (decode_addr_dec <= 22'h37ffff))
                addr_out_port = 4'b0110;  // Select Output port MI6
 
+            // 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
+
             else
               addr_out_port = 4'b1000;   // Select the default slave
           end
@@ -403,9 +401,6 @@ module nanosoc_ahb32_4x7_matrix_decode_cpu (
             // 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
-            // Static address region 0xf0000000-0xf003ffff
-            else if ((decode_addr_dec >= 22'h3c0000) & (decode_addr_dec <= 22'h3c00ff))
-               addr_out_port = 4'b0011;  // Select Output port MI3
 
             // Static address region 0x80000000-0x8fffffff
             else if ((decode_addr_dec >= 22'h200000) & (decode_addr_dec <= 22'h23ffff))
@@ -422,6 +417,10 @@ module nanosoc_ahb32_4x7_matrix_decode_cpu (
             else if ((decode_addr_dec >= 22'h280000) & (decode_addr_dec <= 22'h37ffff))
                addr_out_port = 4'b0110;  // Select Output port MI6
 
+            // 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
+
             else
               addr_out_port = 4'b1000;   // Select the default slave
           end
@@ -445,6 +444,7 @@ module nanosoc_ahb32_4x7_matrix_decode_cpu (
       sel_dec4 = 1'b0;
       sel_dec5 = 1'b0;
       sel_dec6 = 1'b0;
+      sel_dec7 = 1'b0;
       sel_dft_slv = 1'b0;
 
       if (sel_dec)
@@ -456,6 +456,7 @@ module nanosoc_ahb32_4x7_matrix_decode_cpu (
           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
           default : begin
             sel_dec0 = 1'bx;
@@ -465,6 +466,7 @@ module nanosoc_ahb32_4x7_matrix_decode_cpu (
             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)
@@ -480,6 +482,7 @@ module nanosoc_ahb32_4x7_matrix_decode_cpu (
              active_dec4 or
              active_dec5 or
              active_dec6 or
+             active_dec7 or
              addr_out_port
            )
     begin : p_active_comb
@@ -491,6 +494,7 @@ module nanosoc_ahb32_4x7_matrix_decode_cpu (
         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
         default : active_dec = 1'bx;
       endcase // case(addr_out_port)
@@ -530,6 +534,7 @@ module nanosoc_ahb32_4x7_matrix_decode_cpu (
              readyout_dec4 or
              readyout_dec5 or
              readyout_dec6 or
+             readyout_dec7 or
              data_out_port
            )
   begin : p_ready_comb
@@ -541,6 +546,7 @@ module nanosoc_ahb32_4x7_matrix_decode_cpu (
       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
       default : HREADYOUTS = 1'bx;
     endcase // case(data_out_port)
@@ -556,6 +562,7 @@ module nanosoc_ahb32_4x7_matrix_decode_cpu (
              resp_dec4 or
              resp_dec5 or
              resp_dec6 or
+             resp_dec7 or
              data_out_port
            )
   begin : p_resp_comb
@@ -567,6 +574,7 @@ module nanosoc_ahb32_4x7_matrix_decode_cpu (
       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
       default : HRESPS = {2{1'bx}};
     endcase // case (data_out_port)
@@ -581,6 +589,7 @@ module nanosoc_ahb32_4x7_matrix_decode_cpu (
              rdata_dec4 or
              rdata_dec5 or
              rdata_dec6 or
+             rdata_dec7 or
              data_out_port
            )
   begin : p_rdata_comb
@@ -592,36 +601,12 @@ module nanosoc_ahb32_4x7_matrix_decode_cpu (
       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
       default : HRDATAS = {32{1'bx}};
     endcase // case (data_out_port)
   end // block: p_rdata_comb
 
-  // HRUSERS output decode
-  always @ (
-             ruser_dec0 or
-             ruser_dec1 or
-             ruser_dec2 or
-             ruser_dec3 or
-             ruser_dec4 or
-             ruser_dec5 or
-             ruser_dec6 or
-             data_out_port
-           )
-  begin : p_ruser_comb
-    case (data_out_port)
-      4'b0000 : HRUSERS = ruser_dec0;
-      4'b0001 : HRUSERS = ruser_dec1;
-      4'b0010 : HRUSERS = ruser_dec2;
-      4'b0011 : HRUSERS = ruser_dec3;
-      4'b0100 : HRUSERS = ruser_dec4;
-      4'b0101 : HRUSERS = ruser_dec5;
-      4'b0110 : HRUSERS = ruser_dec6;
-      4'b1000 : HRUSERS = {2{1'b0}};   // Select the default slave
-      default : HRUSERS = {2{1'bx}};
-    endcase // case (data_out_port)
-  end // block: p_ruser_comb
-
 
 endmodule
 
diff --git a/system/src/nanosoc_ahb_busmatrix/verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_matrix_decode_dma.v b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_dma_0.v
similarity index 90%
rename from system/src/nanosoc_ahb_busmatrix/verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_matrix_decode_dma.v
rename to system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_dma_0.v
index 8620f63109a1386e426090a04163c037b97b5b4d..19ffc405f9ac202b3d3fc54addda7307754179c7 100644
--- a/system/src/nanosoc_ahb_busmatrix/verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_matrix_decode_dma.v
+++ b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_dma_0.v
@@ -27,13 +27,13 @@
 //                         that do not map to an Output port are diverted to
 //                         the local default slave.
 //
-//  Notes               : The bus matrix has full connectivity.
+//  Notes               : The bus matrix has sparse connectivity.
 //
 //-----------------------------------------------------------------------------
 
 
 
-module nanosoc_ahb32_4x7_matrix_decode_dma (
+module nanosoc_matrix_decode_dma_0 (
 
     // Common AHB signals
     HCLK,
@@ -50,49 +50,42 @@ module nanosoc_ahb32_4x7_matrix_decode_dma (
     readyout_dec0,
     resp_dec0,
     rdata_dec0,
-    ruser_dec0,
 
     // Bus-switch output 1
     active_dec1,
     readyout_dec1,
     resp_dec1,
     rdata_dec1,
-    ruser_dec1,
 
     // Bus-switch output 2
     active_dec2,
     readyout_dec2,
     resp_dec2,
     rdata_dec2,
-    ruser_dec2,
 
     // Bus-switch output 3
     active_dec3,
     readyout_dec3,
     resp_dec3,
     rdata_dec3,
-    ruser_dec3,
 
     // Bus-switch output 4
     active_dec4,
     readyout_dec4,
     resp_dec4,
     rdata_dec4,
-    ruser_dec4,
 
     // Bus-switch output 5
     active_dec5,
     readyout_dec5,
     resp_dec5,
     rdata_dec5,
-    ruser_dec5,
 
     // Bus-switch output 6
     active_dec6,
     readyout_dec6,
     resp_dec6,
     rdata_dec6,
-    ruser_dec6,
 
     // Output port selection signals
     sel_dec0,
@@ -107,7 +100,6 @@ module nanosoc_ahb32_4x7_matrix_decode_dma (
     active_dec,
     HREADYOUTS,
     HRESPS,
-    HRUSERS,
     HRDATAS
 
     );
@@ -132,49 +124,42 @@ module nanosoc_ahb32_4x7_matrix_decode_dma (
     input         readyout_dec0;      // HREADYOUT input
     input   [1:0] resp_dec0;          // HRESP input
     input  [31:0] rdata_dec0;         // HRDATA input
-    input  [1:0] ruser_dec0;         // HRUSER input
 
     // Bus-switch output MI1
     input         active_dec1;        // Output stage MI1 active_dec signal
     input         readyout_dec1;      // HREADYOUT input
     input   [1:0] resp_dec1;          // HRESP input
     input  [31:0] rdata_dec1;         // HRDATA input
-    input  [1:0] ruser_dec1;         // HRUSER input
 
     // Bus-switch output MI2
     input         active_dec2;        // Output stage MI2 active_dec signal
     input         readyout_dec2;      // HREADYOUT input
     input   [1:0] resp_dec2;          // HRESP input
     input  [31:0] rdata_dec2;         // HRDATA input
-    input  [1:0] ruser_dec2;         // HRUSER input
 
     // Bus-switch output MI3
     input         active_dec3;        // Output stage MI3 active_dec signal
     input         readyout_dec3;      // HREADYOUT input
     input   [1:0] resp_dec3;          // HRESP input
     input  [31:0] rdata_dec3;         // HRDATA input
-    input  [1:0] ruser_dec3;         // HRUSER input
 
     // Bus-switch output MI4
     input         active_dec4;        // Output stage MI4 active_dec signal
     input         readyout_dec4;      // HREADYOUT input
     input   [1:0] resp_dec4;          // HRESP input
     input  [31:0] rdata_dec4;         // HRDATA input
-    input  [1:0] ruser_dec4;         // HRUSER input
 
     // Bus-switch output MI5
     input         active_dec5;        // Output stage MI5 active_dec signal
     input         readyout_dec5;      // HREADYOUT input
     input   [1:0] resp_dec5;          // HRESP input
     input  [31:0] rdata_dec5;         // HRDATA input
-    input  [1:0] ruser_dec5;         // HRUSER input
 
     // Bus-switch output MI6
     input         active_dec6;        // Output stage MI6 active_dec signal
     input         readyout_dec6;      // HREADYOUT input
     input   [1:0] resp_dec6;          // HRESP input
     input  [31:0] rdata_dec6;         // HRDATA input
-    input  [1:0] ruser_dec6;         // HRUSER input
 
     // Output port selection signals
     output        sel_dec0;           // HSEL output
@@ -189,7 +174,6 @@ module nanosoc_ahb32_4x7_matrix_decode_dma (
     output        active_dec;         // Combinatorial active_dec O/P
     output        HREADYOUTS;     // HREADY feedback output
     output  [1:0] HRESPS;         // Transfer response
-    output [1:0] HRUSERS;        // User read Data
     output [31:0] HRDATAS;        // Read Data
 
 
@@ -212,7 +196,6 @@ module nanosoc_ahb32_4x7_matrix_decode_dma (
     wire          readyout_dec0;       // HREADYOUT input
     wire    [1:0] resp_dec0;           // HRESP input
     wire   [31:0] rdata_dec0;          // HRDATA input
-    wire   [1:0] ruser_dec0;          // HRUSER input
     reg           sel_dec0;            // HSEL output
 
     // Bus-switch output MI1
@@ -220,7 +203,6 @@ module nanosoc_ahb32_4x7_matrix_decode_dma (
     wire          readyout_dec1;       // HREADYOUT input
     wire    [1:0] resp_dec1;           // HRESP input
     wire   [31:0] rdata_dec1;          // HRDATA input
-    wire   [1:0] ruser_dec1;          // HRUSER input
     reg           sel_dec1;            // HSEL output
 
     // Bus-switch output MI2
@@ -228,7 +210,6 @@ module nanosoc_ahb32_4x7_matrix_decode_dma (
     wire          readyout_dec2;       // HREADYOUT input
     wire    [1:0] resp_dec2;           // HRESP input
     wire   [31:0] rdata_dec2;          // HRDATA input
-    wire   [1:0] ruser_dec2;          // HRUSER input
     reg           sel_dec2;            // HSEL output
 
     // Bus-switch output MI3
@@ -236,7 +217,6 @@ module nanosoc_ahb32_4x7_matrix_decode_dma (
     wire          readyout_dec3;       // HREADYOUT input
     wire    [1:0] resp_dec3;           // HRESP input
     wire   [31:0] rdata_dec3;          // HRDATA input
-    wire   [1:0] ruser_dec3;          // HRUSER input
     reg           sel_dec3;            // HSEL output
 
     // Bus-switch output MI4
@@ -244,7 +224,6 @@ module nanosoc_ahb32_4x7_matrix_decode_dma (
     wire          readyout_dec4;       // HREADYOUT input
     wire    [1:0] resp_dec4;           // HRESP input
     wire   [31:0] rdata_dec4;          // HRDATA input
-    wire   [1:0] ruser_dec4;          // HRUSER input
     reg           sel_dec4;            // HSEL output
 
     // Bus-switch output MI5
@@ -252,7 +231,6 @@ module nanosoc_ahb32_4x7_matrix_decode_dma (
     wire          readyout_dec5;       // HREADYOUT input
     wire    [1:0] resp_dec5;           // HRESP input
     wire   [31:0] rdata_dec5;          // HRDATA input
-    wire   [1:0] ruser_dec5;          // HRUSER input
     reg           sel_dec5;            // HSEL output
 
     // Bus-switch output MI6
@@ -260,7 +238,6 @@ module nanosoc_ahb32_4x7_matrix_decode_dma (
     wire          readyout_dec6;       // HREADYOUT input
     wire    [1:0] resp_dec6;           // HRESP input
     wire   [31:0] rdata_dec6;          // HRDATA input
-    wire   [1:0] ruser_dec6;          // HRUSER input
     reg           sel_dec6;            // HSEL output
 
 
@@ -272,7 +249,6 @@ module nanosoc_ahb32_4x7_matrix_decode_dma (
     reg           active_dec;          // Combinatorial active_dec O/P signal
     reg           HREADYOUTS;      // Combinatorial HREADYOUT signal
     reg     [1:0] HRESPS;          // Combinatorial HRESPS signal
-    reg    [1:0] HRUSERS;
     reg    [31:0] HRDATAS;         // Read data bus
 
     reg     [3:0] addr_out_port;     // Address output ports
@@ -292,7 +268,7 @@ module nanosoc_ahb32_4x7_matrix_decode_dma (
 // Default slave (accessed when HADDR is unmapped)
 //------------------------------------------------------------------------------
 
-  nanosoc_ahb32_4x7_busmatrix_default_slave u_nanosoc_ahb32_4x7_busmatrix_default_slave (
+  nanosoc_busmatrix_default_slave u_nanosoc_busmatrix_default_slave (
 
     // Common AHB signals
     .HCLK        (HCLK),
@@ -533,31 +509,6 @@ module nanosoc_ahb32_4x7_matrix_decode_dma (
     endcase // case (data_out_port)
   end // block: p_rdata_comb
 
-  // HRUSERS output decode
-  always @ (
-             ruser_dec0 or
-             ruser_dec1 or
-             ruser_dec2 or
-             ruser_dec3 or
-             ruser_dec4 or
-             ruser_dec5 or
-             ruser_dec6 or
-             data_out_port
-           )
-  begin : p_ruser_comb
-    case (data_out_port)
-      4'b0000 : HRUSERS = ruser_dec0;
-      4'b0001 : HRUSERS = ruser_dec1;
-      4'b0010 : HRUSERS = ruser_dec2;
-      4'b0011 : HRUSERS = ruser_dec3;
-      4'b0100 : HRUSERS = ruser_dec4;
-      4'b0101 : HRUSERS = ruser_dec5;
-      4'b0110 : HRUSERS = ruser_dec6;
-      4'b1000 : HRUSERS = {2{1'b0}};   // Select the default slave
-      default : HRUSERS = {2{1'bx}};
-    endcase // case (data_out_port)
-  end // block: p_ruser_comb
-
 
 endmodule
 
diff --git a/system/src/nanosoc_ahb_busmatrix/verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_matrix_decode_dma2.v b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_dma_1.v
similarity index 90%
rename from system/src/nanosoc_ahb_busmatrix/verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_matrix_decode_dma2.v
rename to system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_dma_1.v
index c841e8400d7e0a4ce571728cb08b6ee072161bcb..c4b99993d51ed148f1181dad10a992ebc9b5cd74 100644
--- a/system/src/nanosoc_ahb_busmatrix/verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_matrix_decode_dma2.v
+++ b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_dma_1.v
@@ -27,13 +27,13 @@
 //                         that do not map to an Output port are diverted to
 //                         the local default slave.
 //
-//  Notes               : The bus matrix has full connectivity.
+//  Notes               : The bus matrix has sparse connectivity.
 //
 //-----------------------------------------------------------------------------
 
 
 
-module nanosoc_ahb32_4x7_matrix_decode_dma2 (
+module nanosoc_matrix_decode_dma_1 (
 
     // Common AHB signals
     HCLK,
@@ -50,49 +50,42 @@ module nanosoc_ahb32_4x7_matrix_decode_dma2 (
     readyout_dec0,
     resp_dec0,
     rdata_dec0,
-    ruser_dec0,
 
     // Bus-switch output 1
     active_dec1,
     readyout_dec1,
     resp_dec1,
     rdata_dec1,
-    ruser_dec1,
 
     // Bus-switch output 2
     active_dec2,
     readyout_dec2,
     resp_dec2,
     rdata_dec2,
-    ruser_dec2,
 
     // Bus-switch output 3
     active_dec3,
     readyout_dec3,
     resp_dec3,
     rdata_dec3,
-    ruser_dec3,
 
     // Bus-switch output 4
     active_dec4,
     readyout_dec4,
     resp_dec4,
     rdata_dec4,
-    ruser_dec4,
 
     // Bus-switch output 5
     active_dec5,
     readyout_dec5,
     resp_dec5,
     rdata_dec5,
-    ruser_dec5,
 
     // Bus-switch output 6
     active_dec6,
     readyout_dec6,
     resp_dec6,
     rdata_dec6,
-    ruser_dec6,
 
     // Output port selection signals
     sel_dec0,
@@ -107,7 +100,6 @@ module nanosoc_ahb32_4x7_matrix_decode_dma2 (
     active_dec,
     HREADYOUTS,
     HRESPS,
-    HRUSERS,
     HRDATAS
 
     );
@@ -132,49 +124,42 @@ module nanosoc_ahb32_4x7_matrix_decode_dma2 (
     input         readyout_dec0;      // HREADYOUT input
     input   [1:0] resp_dec0;          // HRESP input
     input  [31:0] rdata_dec0;         // HRDATA input
-    input  [1:0] ruser_dec0;         // HRUSER input
 
     // Bus-switch output MI1
     input         active_dec1;        // Output stage MI1 active_dec signal
     input         readyout_dec1;      // HREADYOUT input
     input   [1:0] resp_dec1;          // HRESP input
     input  [31:0] rdata_dec1;         // HRDATA input
-    input  [1:0] ruser_dec1;         // HRUSER input
 
     // Bus-switch output MI2
     input         active_dec2;        // Output stage MI2 active_dec signal
     input         readyout_dec2;      // HREADYOUT input
     input   [1:0] resp_dec2;          // HRESP input
     input  [31:0] rdata_dec2;         // HRDATA input
-    input  [1:0] ruser_dec2;         // HRUSER input
 
     // Bus-switch output MI3
     input         active_dec3;        // Output stage MI3 active_dec signal
     input         readyout_dec3;      // HREADYOUT input
     input   [1:0] resp_dec3;          // HRESP input
     input  [31:0] rdata_dec3;         // HRDATA input
-    input  [1:0] ruser_dec3;         // HRUSER input
 
     // Bus-switch output MI4
     input         active_dec4;        // Output stage MI4 active_dec signal
     input         readyout_dec4;      // HREADYOUT input
     input   [1:0] resp_dec4;          // HRESP input
     input  [31:0] rdata_dec4;         // HRDATA input
-    input  [1:0] ruser_dec4;         // HRUSER input
 
     // Bus-switch output MI5
     input         active_dec5;        // Output stage MI5 active_dec signal
     input         readyout_dec5;      // HREADYOUT input
     input   [1:0] resp_dec5;          // HRESP input
     input  [31:0] rdata_dec5;         // HRDATA input
-    input  [1:0] ruser_dec5;         // HRUSER input
 
     // Bus-switch output MI6
     input         active_dec6;        // Output stage MI6 active_dec signal
     input         readyout_dec6;      // HREADYOUT input
     input   [1:0] resp_dec6;          // HRESP input
     input  [31:0] rdata_dec6;         // HRDATA input
-    input  [1:0] ruser_dec6;         // HRUSER input
 
     // Output port selection signals
     output        sel_dec0;           // HSEL output
@@ -189,7 +174,6 @@ module nanosoc_ahb32_4x7_matrix_decode_dma2 (
     output        active_dec;         // Combinatorial active_dec O/P
     output        HREADYOUTS;     // HREADY feedback output
     output  [1:0] HRESPS;         // Transfer response
-    output [1:0] HRUSERS;        // User read Data
     output [31:0] HRDATAS;        // Read Data
 
 
@@ -212,7 +196,6 @@ module nanosoc_ahb32_4x7_matrix_decode_dma2 (
     wire          readyout_dec0;       // HREADYOUT input
     wire    [1:0] resp_dec0;           // HRESP input
     wire   [31:0] rdata_dec0;          // HRDATA input
-    wire   [1:0] ruser_dec0;          // HRUSER input
     reg           sel_dec0;            // HSEL output
 
     // Bus-switch output MI1
@@ -220,7 +203,6 @@ module nanosoc_ahb32_4x7_matrix_decode_dma2 (
     wire          readyout_dec1;       // HREADYOUT input
     wire    [1:0] resp_dec1;           // HRESP input
     wire   [31:0] rdata_dec1;          // HRDATA input
-    wire   [1:0] ruser_dec1;          // HRUSER input
     reg           sel_dec1;            // HSEL output
 
     // Bus-switch output MI2
@@ -228,7 +210,6 @@ module nanosoc_ahb32_4x7_matrix_decode_dma2 (
     wire          readyout_dec2;       // HREADYOUT input
     wire    [1:0] resp_dec2;           // HRESP input
     wire   [31:0] rdata_dec2;          // HRDATA input
-    wire   [1:0] ruser_dec2;          // HRUSER input
     reg           sel_dec2;            // HSEL output
 
     // Bus-switch output MI3
@@ -236,7 +217,6 @@ module nanosoc_ahb32_4x7_matrix_decode_dma2 (
     wire          readyout_dec3;       // HREADYOUT input
     wire    [1:0] resp_dec3;           // HRESP input
     wire   [31:0] rdata_dec3;          // HRDATA input
-    wire   [1:0] ruser_dec3;          // HRUSER input
     reg           sel_dec3;            // HSEL output
 
     // Bus-switch output MI4
@@ -244,7 +224,6 @@ module nanosoc_ahb32_4x7_matrix_decode_dma2 (
     wire          readyout_dec4;       // HREADYOUT input
     wire    [1:0] resp_dec4;           // HRESP input
     wire   [31:0] rdata_dec4;          // HRDATA input
-    wire   [1:0] ruser_dec4;          // HRUSER input
     reg           sel_dec4;            // HSEL output
 
     // Bus-switch output MI5
@@ -252,7 +231,6 @@ module nanosoc_ahb32_4x7_matrix_decode_dma2 (
     wire          readyout_dec5;       // HREADYOUT input
     wire    [1:0] resp_dec5;           // HRESP input
     wire   [31:0] rdata_dec5;          // HRDATA input
-    wire   [1:0] ruser_dec5;          // HRUSER input
     reg           sel_dec5;            // HSEL output
 
     // Bus-switch output MI6
@@ -260,7 +238,6 @@ module nanosoc_ahb32_4x7_matrix_decode_dma2 (
     wire          readyout_dec6;       // HREADYOUT input
     wire    [1:0] resp_dec6;           // HRESP input
     wire   [31:0] rdata_dec6;          // HRDATA input
-    wire   [1:0] ruser_dec6;          // HRUSER input
     reg           sel_dec6;            // HSEL output
 
 
@@ -272,7 +249,6 @@ module nanosoc_ahb32_4x7_matrix_decode_dma2 (
     reg           active_dec;          // Combinatorial active_dec O/P signal
     reg           HREADYOUTS;      // Combinatorial HREADYOUT signal
     reg     [1:0] HRESPS;          // Combinatorial HRESPS signal
-    reg    [1:0] HRUSERS;
     reg    [31:0] HRDATAS;         // Read data bus
 
     reg     [3:0] addr_out_port;     // Address output ports
@@ -292,7 +268,7 @@ module nanosoc_ahb32_4x7_matrix_decode_dma2 (
 // Default slave (accessed when HADDR is unmapped)
 //------------------------------------------------------------------------------
 
-  nanosoc_ahb32_4x7_busmatrix_default_slave u_nanosoc_ahb32_4x7_busmatrix_default_slave (
+  nanosoc_busmatrix_default_slave u_nanosoc_busmatrix_default_slave (
 
     // Common AHB signals
     .HCLK        (HCLK),
@@ -533,31 +509,6 @@ module nanosoc_ahb32_4x7_matrix_decode_dma2 (
     endcase // case (data_out_port)
   end // block: p_rdata_comb
 
-  // HRUSERS output decode
-  always @ (
-             ruser_dec0 or
-             ruser_dec1 or
-             ruser_dec2 or
-             ruser_dec3 or
-             ruser_dec4 or
-             ruser_dec5 or
-             ruser_dec6 or
-             data_out_port
-           )
-  begin : p_ruser_comb
-    case (data_out_port)
-      4'b0000 : HRUSERS = ruser_dec0;
-      4'b0001 : HRUSERS = ruser_dec1;
-      4'b0010 : HRUSERS = ruser_dec2;
-      4'b0011 : HRUSERS = ruser_dec3;
-      4'b0100 : HRUSERS = ruser_dec4;
-      4'b0101 : HRUSERS = ruser_dec5;
-      4'b0110 : HRUSERS = ruser_dec6;
-      4'b1000 : HRUSERS = {2{1'b0}};   // Select the default slave
-      default : HRUSERS = {2{1'bx}};
-    endcase // case (data_out_port)
-  end // block: p_ruser_comb
-
 
 endmodule
 
diff --git a/system/src/nanosoc_ahb_busmatrix/verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_matrix_decode_adp.v b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_socdebug.v
similarity index 91%
rename from system/src/nanosoc_ahb_busmatrix/verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_matrix_decode_adp.v
rename to system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_socdebug.v
index e748865cc5595a0b0701279e79a9a282b1a84ebf..31471bac4ebbc4f78ab4b7b2b6f3df62f0617e72 100644
--- a/system/src/nanosoc_ahb_busmatrix/verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_matrix_decode_adp.v
+++ b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_matrix_decode_socdebug.v
@@ -27,13 +27,13 @@
 //                         that do not map to an Output port are diverted to
 //                         the local default slave.
 //
-//  Notes               : The bus matrix has full connectivity.
+//  Notes               : The bus matrix has sparse connectivity.
 //
 //-----------------------------------------------------------------------------
 
 
 
-module nanosoc_ahb32_4x7_matrix_decode_adp (
+module nanosoc_matrix_decode_socdebug (
 
     // Common AHB signals
     HCLK,
@@ -53,49 +53,48 @@ module nanosoc_ahb32_4x7_matrix_decode_adp (
     readyout_dec0,
     resp_dec0,
     rdata_dec0,
-    ruser_dec0,
 
     // Bus-switch output 1
     active_dec1,
     readyout_dec1,
     resp_dec1,
     rdata_dec1,
-    ruser_dec1,
 
     // Bus-switch output 2
     active_dec2,
     readyout_dec2,
     resp_dec2,
     rdata_dec2,
-    ruser_dec2,
 
     // Bus-switch output 3
     active_dec3,
     readyout_dec3,
     resp_dec3,
     rdata_dec3,
-    ruser_dec3,
 
     // Bus-switch output 4
     active_dec4,
     readyout_dec4,
     resp_dec4,
     rdata_dec4,
-    ruser_dec4,
 
     // Bus-switch output 5
     active_dec5,
     readyout_dec5,
     resp_dec5,
     rdata_dec5,
-    ruser_dec5,
 
     // Bus-switch output 6
     active_dec6,
     readyout_dec6,
     resp_dec6,
     rdata_dec6,
-    ruser_dec6,
+
+    // Bus-switch output 7
+    active_dec7,
+    readyout_dec7,
+    resp_dec7,
+    rdata_dec7,
 
     // Output port selection signals
     sel_dec0,
@@ -105,12 +104,12 @@ module nanosoc_ahb32_4x7_matrix_decode_adp (
     sel_dec4,
     sel_dec5,
     sel_dec6,
+    sel_dec7,
 
     // Selected Output port data and control signals
     active_dec,
     HREADYOUTS,
     HRESPS,
-    HRUSERS,
     HRDATAS
 
     );
@@ -138,49 +137,48 @@ module nanosoc_ahb32_4x7_matrix_decode_adp (
     input         readyout_dec0;      // HREADYOUT input
     input   [1:0] resp_dec0;          // HRESP input
     input  [31:0] rdata_dec0;         // HRDATA input
-    input  [1:0] ruser_dec0;         // HRUSER input
 
     // Bus-switch output MI1
     input         active_dec1;        // Output stage MI1 active_dec signal
     input         readyout_dec1;      // HREADYOUT input
     input   [1:0] resp_dec1;          // HRESP input
     input  [31:0] rdata_dec1;         // HRDATA input
-    input  [1:0] ruser_dec1;         // HRUSER input
 
     // Bus-switch output MI2
     input         active_dec2;        // Output stage MI2 active_dec signal
     input         readyout_dec2;      // HREADYOUT input
     input   [1:0] resp_dec2;          // HRESP input
     input  [31:0] rdata_dec2;         // HRDATA input
-    input  [1:0] ruser_dec2;         // HRUSER input
 
     // Bus-switch output MI3
     input         active_dec3;        // Output stage MI3 active_dec signal
     input         readyout_dec3;      // HREADYOUT input
     input   [1:0] resp_dec3;          // HRESP input
     input  [31:0] rdata_dec3;         // HRDATA input
-    input  [1:0] ruser_dec3;         // HRUSER input
 
     // Bus-switch output MI4
     input         active_dec4;        // Output stage MI4 active_dec signal
     input         readyout_dec4;      // HREADYOUT input
     input   [1:0] resp_dec4;          // HRESP input
     input  [31:0] rdata_dec4;         // HRDATA input
-    input  [1:0] ruser_dec4;         // HRUSER input
 
     // Bus-switch output MI5
     input         active_dec5;        // Output stage MI5 active_dec signal
     input         readyout_dec5;      // HREADYOUT input
     input   [1:0] resp_dec5;          // HRESP input
     input  [31:0] rdata_dec5;         // HRDATA input
-    input  [1:0] ruser_dec5;         // HRUSER input
 
     // Bus-switch output MI6
     input         active_dec6;        // Output stage MI6 active_dec signal
     input         readyout_dec6;      // HREADYOUT input
     input   [1:0] resp_dec6;          // HRESP input
     input  [31:0] rdata_dec6;         // HRDATA input
-    input  [1:0] ruser_dec6;         // HRUSER 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
@@ -190,12 +188,12 @@ module nanosoc_ahb32_4x7_matrix_decode_adp (
     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
     output        HREADYOUTS;     // HREADY feedback output
     output  [1:0] HRESPS;         // Transfer response
-    output [1:0] HRUSERS;        // User read Data
     output [31:0] HRDATAS;        // Read Data
 
 
@@ -220,7 +218,6 @@ module nanosoc_ahb32_4x7_matrix_decode_adp (
     wire          readyout_dec0;       // HREADYOUT input
     wire    [1:0] resp_dec0;           // HRESP input
     wire   [31:0] rdata_dec0;          // HRDATA input
-    wire   [1:0] ruser_dec0;          // HRUSER input
     reg           sel_dec0;            // HSEL output
 
     // Bus-switch output MI1
@@ -228,7 +225,6 @@ module nanosoc_ahb32_4x7_matrix_decode_adp (
     wire          readyout_dec1;       // HREADYOUT input
     wire    [1:0] resp_dec1;           // HRESP input
     wire   [31:0] rdata_dec1;          // HRDATA input
-    wire   [1:0] ruser_dec1;          // HRUSER input
     reg           sel_dec1;            // HSEL output
 
     // Bus-switch output MI2
@@ -236,7 +232,6 @@ module nanosoc_ahb32_4x7_matrix_decode_adp (
     wire          readyout_dec2;       // HREADYOUT input
     wire    [1:0] resp_dec2;           // HRESP input
     wire   [31:0] rdata_dec2;          // HRDATA input
-    wire   [1:0] ruser_dec2;          // HRUSER input
     reg           sel_dec2;            // HSEL output
 
     // Bus-switch output MI3
@@ -244,7 +239,6 @@ module nanosoc_ahb32_4x7_matrix_decode_adp (
     wire          readyout_dec3;       // HREADYOUT input
     wire    [1:0] resp_dec3;           // HRESP input
     wire   [31:0] rdata_dec3;          // HRDATA input
-    wire   [1:0] ruser_dec3;          // HRUSER input
     reg           sel_dec3;            // HSEL output
 
     // Bus-switch output MI4
@@ -252,7 +246,6 @@ module nanosoc_ahb32_4x7_matrix_decode_adp (
     wire          readyout_dec4;       // HREADYOUT input
     wire    [1:0] resp_dec4;           // HRESP input
     wire   [31:0] rdata_dec4;          // HRDATA input
-    wire   [1:0] ruser_dec4;          // HRUSER input
     reg           sel_dec4;            // HSEL output
 
     // Bus-switch output MI5
@@ -260,7 +253,6 @@ module nanosoc_ahb32_4x7_matrix_decode_adp (
     wire          readyout_dec5;       // HREADYOUT input
     wire    [1:0] resp_dec5;           // HRESP input
     wire   [31:0] rdata_dec5;          // HRDATA input
-    wire   [1:0] ruser_dec5;          // HRUSER input
     reg           sel_dec5;            // HSEL output
 
     // Bus-switch output MI6
@@ -268,9 +260,15 @@ module nanosoc_ahb32_4x7_matrix_decode_adp (
     wire          readyout_dec6;       // HREADYOUT input
     wire    [1:0] resp_dec6;           // HRESP input
     wire   [31:0] rdata_dec6;          // HRDATA input
-    wire   [1:0] ruser_dec6;          // HRUSER 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
@@ -280,7 +278,6 @@ module nanosoc_ahb32_4x7_matrix_decode_adp (
     reg           active_dec;          // Combinatorial active_dec O/P signal
     reg           HREADYOUTS;      // Combinatorial HREADYOUT signal
     reg     [1:0] HRESPS;          // Combinatorial HRESPS signal
-    reg    [1:0] HRUSERS;
     reg    [31:0] HRDATAS;         // Read data bus
 
     reg     [3:0] addr_out_port;     // Address output ports
@@ -300,7 +297,7 @@ module nanosoc_ahb32_4x7_matrix_decode_adp (
 // Default slave (accessed when HADDR is unmapped)
 //------------------------------------------------------------------------------
 
-  nanosoc_ahb32_4x7_busmatrix_default_slave u_nanosoc_ahb32_4x7_busmatrix_default_slave (
+  nanosoc_busmatrix_default_slave u_nanosoc_busmatrix_default_slave (
 
     // Common AHB signals
     .HCLK        (HCLK),
@@ -357,9 +354,6 @@ module nanosoc_ahb32_4x7_matrix_decode_adp (
             // 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
-            // Static address region 0xf0000000-0xf003ffff
-            else if ((decode_addr_dec >= 22'h3c0000) & (decode_addr_dec <= 22'h3c00ff))
-               addr_out_port = 4'b0011;  // Select Output port MI3
 
             // Static address region 0x80000000-0x8fffffff
             else if ((decode_addr_dec >= 22'h200000) & (decode_addr_dec <= 22'h23ffff))
@@ -376,6 +370,10 @@ module nanosoc_ahb32_4x7_matrix_decode_adp (
             else if ((decode_addr_dec >= 22'h280000) & (decode_addr_dec <= 22'h37ffff))
                addr_out_port = 4'b0110;  // Select Output port MI6
 
+            // 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
+
             else
               addr_out_port = 4'b1000;   // Select the default slave
           end
@@ -403,9 +401,6 @@ module nanosoc_ahb32_4x7_matrix_decode_adp (
             // 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
-            // Static address region 0xf0000000-0xf003ffff
-            else if ((decode_addr_dec >= 22'h3c0000) & (decode_addr_dec <= 22'h3c00ff))
-               addr_out_port = 4'b0011;  // Select Output port MI3
 
             // Static address region 0x80000000-0x8fffffff
             else if ((decode_addr_dec >= 22'h200000) & (decode_addr_dec <= 22'h23ffff))
@@ -422,6 +417,10 @@ module nanosoc_ahb32_4x7_matrix_decode_adp (
             else if ((decode_addr_dec >= 22'h280000) & (decode_addr_dec <= 22'h37ffff))
                addr_out_port = 4'b0110;  // Select Output port MI6
 
+            // 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
+
             else
               addr_out_port = 4'b1000;   // Select the default slave
           end
@@ -445,6 +444,7 @@ module nanosoc_ahb32_4x7_matrix_decode_adp (
       sel_dec4 = 1'b0;
       sel_dec5 = 1'b0;
       sel_dec6 = 1'b0;
+      sel_dec7 = 1'b0;
       sel_dft_slv = 1'b0;
 
       if (sel_dec)
@@ -456,6 +456,7 @@ module nanosoc_ahb32_4x7_matrix_decode_adp (
           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
           default : begin
             sel_dec0 = 1'bx;
@@ -465,6 +466,7 @@ module nanosoc_ahb32_4x7_matrix_decode_adp (
             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)
@@ -480,6 +482,7 @@ module nanosoc_ahb32_4x7_matrix_decode_adp (
              active_dec4 or
              active_dec5 or
              active_dec6 or
+             active_dec7 or
              addr_out_port
            )
     begin : p_active_comb
@@ -491,6 +494,7 @@ module nanosoc_ahb32_4x7_matrix_decode_adp (
         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
         default : active_dec = 1'bx;
       endcase // case(addr_out_port)
@@ -530,6 +534,7 @@ module nanosoc_ahb32_4x7_matrix_decode_adp (
              readyout_dec4 or
              readyout_dec5 or
              readyout_dec6 or
+             readyout_dec7 or
              data_out_port
            )
   begin : p_ready_comb
@@ -541,6 +546,7 @@ module nanosoc_ahb32_4x7_matrix_decode_adp (
       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
       default : HREADYOUTS = 1'bx;
     endcase // case(data_out_port)
@@ -556,6 +562,7 @@ module nanosoc_ahb32_4x7_matrix_decode_adp (
              resp_dec4 or
              resp_dec5 or
              resp_dec6 or
+             resp_dec7 or
              data_out_port
            )
   begin : p_resp_comb
@@ -567,6 +574,7 @@ module nanosoc_ahb32_4x7_matrix_decode_adp (
       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
       default : HRESPS = {2{1'bx}};
     endcase // case (data_out_port)
@@ -581,6 +589,7 @@ module nanosoc_ahb32_4x7_matrix_decode_adp (
              rdata_dec4 or
              rdata_dec5 or
              rdata_dec6 or
+             rdata_dec7 or
              data_out_port
            )
   begin : p_rdata_comb
@@ -592,36 +601,12 @@ module nanosoc_ahb32_4x7_matrix_decode_adp (
       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
       default : HRDATAS = {32{1'bx}};
     endcase // case (data_out_port)
   end // block: p_rdata_comb
 
-  // HRUSERS output decode
-  always @ (
-             ruser_dec0 or
-             ruser_dec1 or
-             ruser_dec2 or
-             ruser_dec3 or
-             ruser_dec4 or
-             ruser_dec5 or
-             ruser_dec6 or
-             data_out_port
-           )
-  begin : p_ruser_comb
-    case (data_out_port)
-      4'b0000 : HRUSERS = ruser_dec0;
-      4'b0001 : HRUSERS = ruser_dec1;
-      4'b0010 : HRUSERS = ruser_dec2;
-      4'b0011 : HRUSERS = ruser_dec3;
-      4'b0100 : HRUSERS = ruser_dec4;
-      4'b0101 : HRUSERS = ruser_dec5;
-      4'b0110 : HRUSERS = ruser_dec6;
-      4'b1000 : HRUSERS = {2{1'b0}};   // Select the default slave
-      default : HRUSERS = {2{1'bx}};
-    endcase // case (data_out_port)
-  end // block: p_ruser_comb
-
 
 endmodule
 
diff --git a/system/src/nanosoc_ahb_busmatrix/verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_target_output.v b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_bootrom.v
similarity index 89%
rename from system/src/nanosoc_ahb_busmatrix/verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_target_output.v
rename to system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_bootrom.v
index 083e5b33120aee40baf7c702e2ebe4ba94b9f692..ac68ef830fa96e1c9673dc0d8394bd0a0b67bad7 100644
--- a/system/src/nanosoc_ahb_busmatrix/verilog/nanosoc_ahb32_4x7_busmatrix/nanosoc_ahb32_4x7_target_output.v
+++ b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_bootrom.v
@@ -25,14 +25,14 @@
 //  Abstract            : The Output Stage is used to route the required input
 //                        stage to the shared slave output.
 //
-//  Notes               : The bus matrix has full connectivity,
+//  Notes               : The bus matrix has sparse connectivity,
 //                         and has a burst arbiter scheme.
 //
 //-----------------------------------------------------------------------------
 
 
 
-module nanosoc_ahb32_4x7_target_output (
+module nanosoc_target_output_bootrom (
 
     // Common AHB signals
     HCLK,
@@ -41,7 +41,6 @@ module nanosoc_ahb32_4x7_target_output (
     // Port 0 Signals
     sel_op0,
     addr_op0,
-    auser_op0,
     trans_op0,
     write_op0,
     size_op0,
@@ -50,13 +49,11 @@ module nanosoc_ahb32_4x7_target_output (
     master_op0,
     mastlock_op0,
     wdata_op0,
-    wuser_op0,
     held_tran_op0,
 
     // Port 1 Signals
     sel_op1,
     addr_op1,
-    auser_op1,
     trans_op1,
     write_op1,
     size_op1,
@@ -65,13 +62,11 @@ module nanosoc_ahb32_4x7_target_output (
     master_op1,
     mastlock_op1,
     wdata_op1,
-    wuser_op1,
     held_tran_op1,
 
     // Port 2 Signals
     sel_op2,
     addr_op2,
-    auser_op2,
     trans_op2,
     write_op2,
     size_op2,
@@ -80,13 +75,11 @@ module nanosoc_ahb32_4x7_target_output (
     master_op2,
     mastlock_op2,
     wdata_op2,
-    wuser_op2,
     held_tran_op2,
 
     // Port 3 Signals
     sel_op3,
     addr_op3,
-    auser_op3,
     trans_op3,
     write_op3,
     size_op3,
@@ -95,7 +88,6 @@ module nanosoc_ahb32_4x7_target_output (
     master_op3,
     mastlock_op3,
     wdata_op3,
-    wuser_op3,
     held_tran_op3,
 
     // Slave read data and response
@@ -109,7 +101,6 @@ module nanosoc_ahb32_4x7_target_output (
     // Slave Address/Control Signals
     HSELM,
     HADDRM,
-    HAUSERM,
     HTRANSM,
     HWRITEM,
     HSIZEM,
@@ -118,7 +109,6 @@ module nanosoc_ahb32_4x7_target_output (
     HMASTERM,
     HMASTLOCKM,
     HREADYMUXM,
-    HWUSERM,
     HWDATAM
 
     );
@@ -135,7 +125,6 @@ module nanosoc_ahb32_4x7_target_output (
     // Bus-switch input 0
     input         sel_op0;       // Port 0 HSEL signal
     input [31:0]  addr_op0;      // Port 0 HADDR signal
-    input [1:0]  auser_op0;     // Port 0 HAUSER 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
@@ -144,13 +133,11 @@ module nanosoc_ahb32_4x7_target_output (
     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 [1:0]  wuser_op0;     // Port 0 HWUSER 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]  auser_op1;     // Port 1 HAUSER 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
@@ -159,13 +146,11 @@ module nanosoc_ahb32_4x7_target_output (
     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 [1:0]  wuser_op1;     // Port 1 HWUSER 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]  auser_op2;     // Port 2 HAUSER 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
@@ -174,13 +159,11 @@ module nanosoc_ahb32_4x7_target_output (
     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 [1:0]  wuser_op2;     // Port 2 HWUSER 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]  auser_op3;     // Port 3 HAUSER 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
@@ -189,7 +172,6 @@ module nanosoc_ahb32_4x7_target_output (
     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 [1:0]  wuser_op3;     // Port 3 HWUSER signal
     input         held_tran_op3;  // Port 3 HeldTran signal
 
     input         HREADYOUTM; // HREADY feedback
@@ -202,7 +184,6 @@ module nanosoc_ahb32_4x7_target_output (
     // Slave Address/Control Signals
     output        HSELM;      // Slave select line
     output [31:0] HADDRM;     // Address
-    output [1:0] HAUSERM;    // User Address bus
     output  [1:0] HTRANSM;    // Transfer type
     output        HWRITEM;    // Transfer direction
     output  [2:0] HSIZEM;     // Transfer size
@@ -211,7 +192,6 @@ module nanosoc_ahb32_4x7_target_output (
     output  [3:0] HMASTERM;   // Master ID
     output        HMASTLOCKM; // Locked transfer
     output        HREADYMUXM; // Transfer done
-    output [1:0] HWUSERM;    // User data bus
     output [31:0] HWDATAM;    // Write data
 
 
@@ -224,7 +204,6 @@ module nanosoc_ahb32_4x7_target_output (
     // Bus-switch input 0
     wire        sel_op0;       // Port 0 HSEL signal
     wire [31:0] addr_op0;      // Port 0 HADDR signal
-    wire [1:0] auser_op0;     // Port 0 HAUSER 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
@@ -233,14 +212,12 @@ module nanosoc_ahb32_4x7_target_output (
     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 [1:0] wuser_op0;     // Port 0 HWUSER 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] auser_op1;     // Port 1 HAUSER 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
@@ -249,14 +226,12 @@ module nanosoc_ahb32_4x7_target_output (
     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 [1:0] wuser_op1;     // Port 1 HWUSER 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] auser_op2;     // Port 2 HAUSER 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
@@ -265,14 +240,12 @@ module nanosoc_ahb32_4x7_target_output (
     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 [1:0] wuser_op2;     // Port 2 HWUSER 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] auser_op3;     // Port 3 HAUSER 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
@@ -281,14 +254,12 @@ module nanosoc_ahb32_4x7_target_output (
     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 [1:0] wuser_op3;     // Port 3 HWUSER 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
-    reg  [1:0] HAUSERM;    // User Address bus
     wire  [1:0] HTRANSM;    // Transfer type
     reg         HWRITEM;    // Transfer direction
     reg   [2:0] HSIZEM;     // Transfer size
@@ -297,7 +268,6 @@ module nanosoc_ahb32_4x7_target_output (
     reg   [3:0] HMASTERM;   // Master ID
     wire        HMASTLOCKM; // Locked transfer
     wire        HREADYMUXM; // Transfer done
-    reg  [1:0] HWUSERM;    // User data bus
     reg  [31:0] HWDATAM;    // Write data
     wire        HREADYOUTM; // HREADY feedback
 
@@ -341,7 +311,7 @@ module nanosoc_ahb32_4x7_target_output (
   assign req_port3 = held_tran_op3 & sel_op3;
 
   // Arbiter instance for resolving requests to this output stage
-  nanosoc_ahb32_4x7_arbiter u_output_arb (
+  nanosoc_arbiter_bootrom u_output_arb (
 
     .HCLK       (HCLK),
     .HRESETn    (HRESETn),
@@ -393,19 +363,15 @@ module nanosoc_ahb32_4x7_target_output (
   always @ (
              sel_op0 or addr_op0 or trans_op0 or write_op0 or
              size_op0 or burst_op0 or prot_op0 or
-             auser_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
-             auser_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
-             auser_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
-             auser_op3 or
              master_op3 or mastlock_op3 or
              addr_in_port or no_port
            )
@@ -413,7 +379,6 @@ module nanosoc_ahb32_4x7_target_output (
       // Default values
       i_hselm     = 1'b0;
       HADDRM      = {32{1'b0}};
-      HAUSERM     = {2{1'b0}};
       i_htransm   = 2'b00;
       HWRITEM     = 1'b0;
       HSIZEM      = 3'b000;
@@ -430,7 +395,6 @@ module nanosoc_ahb32_4x7_target_output (
             begin
               i_hselm     = sel_op0;
               HADDRM      = addr_op0;
-              HAUSERM     = auser_op0;
               i_htransm   = trans_op0;
               HWRITEM     = write_op0;
               HSIZEM      = size_op0;
@@ -445,7 +409,6 @@ module nanosoc_ahb32_4x7_target_output (
             begin
               i_hselm     = sel_op1;
               HADDRM      = addr_op1;
-              HAUSERM     = auser_op1;
               i_htransm   = trans_op1;
               HWRITEM     = write_op1;
               HSIZEM      = size_op1;
@@ -460,7 +423,6 @@ module nanosoc_ahb32_4x7_target_output (
             begin
               i_hselm     = sel_op2;
               HADDRM      = addr_op2;
-              HAUSERM     = auser_op2;
               i_htransm   = trans_op2;
               HWRITEM     = write_op2;
               HSIZEM      = size_op2;
@@ -475,7 +437,6 @@ module nanosoc_ahb32_4x7_target_output (
             begin
               i_hselm     = sel_op3;
               HADDRM      = addr_op3;
-              HAUSERM     = auser_op3;
               i_htransm   = trans_op3;
               HWRITEM     = write_op3;
               HSIZEM      = size_op3;
@@ -489,7 +450,6 @@ module nanosoc_ahb32_4x7_target_output (
             begin
               i_hselm     = 1'bx;
               HADDRM      = {32{1'bx}};
-              HAUSERM     = {2{1'bx}};
               i_htransm   = 2'bxx;
               HWRITEM     = 1'bx;
               HSIZEM      = 3'bxxx;
@@ -575,29 +535,6 @@ module nanosoc_ahb32_4x7_target_output (
         endcase // case(data_in_port)
     end // block: p_data_mux
 
-  // HWUSERM output decode
-  always @ (
-             wuser_op0 or
-             wuser_op1 or
-             wuser_op2 or
-             wuser_op3 or
-             data_in_port or wdata_phase
-           )
-    begin : p_wuser_mux
-      // Default value
-      HWUSERM  = {2{1'b0}};
-
-      // If interface active
-      if (wdata_phase)
-        // Decode selection
-        case (data_in_port)
-          2'b00 : HWUSERM  = wuser_op0;
-          2'b01 : HWUSERM  = wuser_op1;
-          2'b10 : HWUSERM  = wuser_op2;
-          2'b11 : HWUSERM  = wuser_op3;
-          default : HWUSERM  = {2{1'bx}};
-        endcase // case(data_in_port)
-    end // block: p_wuser_mux
 
   // ---------------------------------------------------------------------------
   // HREADYMUXM generation
diff --git a/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_dmem.v b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_dmem.v
new file mode 100644
index 0000000000000000000000000000000000000000..99666f7b60d796dba210dab992227295aea4a0a9
--- /dev/null
+++ b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_dmem.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-2023 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_dmem (
+
+    // 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_dmem 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/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_exp.v b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_exp.v
new file mode 100644
index 0000000000000000000000000000000000000000..799e0baf2f9e8b7e392c43dfedebf8802329e96f
--- /dev/null
+++ b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_exp.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-2023 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_exp (
+
+    // 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_exp 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/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_expram_h.v b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_expram_h.v
new file mode 100644
index 0000000000000000000000000000000000000000..2aee3e45ab62b2bcf445a45454b87ededf432443
--- /dev/null
+++ b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_expram_h.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-2023 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_expram_h (
+
+    // 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_expram_h 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/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_expram_l.v b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_expram_l.v
new file mode 100644
index 0000000000000000000000000000000000000000..f973a67669f24bb619cb63335b5b85d4641367c9
--- /dev/null
+++ b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_expram_l.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-2023 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_expram_l (
+
+    // 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_expram_l 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/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_imem.v b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_imem.v
new file mode 100644
index 0000000000000000000000000000000000000000..cf2b4f8dac88429ff4f2dc3c57a246accb109425
--- /dev/null
+++ b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_imem.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-2023 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_imem (
+
+    // 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_imem 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/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_sysio.v b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_sysio.v
new file mode 100644
index 0000000000000000000000000000000000000000..609a2e81ee1ca368f4573fb9678b5736215752c7
--- /dev/null
+++ b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_sysio.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-2023 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_sysio (
+
+    // 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_sysio 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/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_systable.v b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_systable.v
new file mode 100644
index 0000000000000000000000000000000000000000..0f46a25565d48cac638030b79575d10f02a554d5
--- /dev/null
+++ b/system/src/nanosoc_busmatrix/verilog/nanosoc_busmatrix/nanosoc_target_output_systable.v
@@ -0,0 +1,429 @@
+//-----------------------------------------------------------------------------
+// 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-2023 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_systable (
+
+    // 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 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_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 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_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 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_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_port3 = held_tran_op3 & sel_op3;
+
+  // Arbiter instance for resolving requests to this output stage
+  nanosoc_arbiter_systable u_output_arb (
+
+    .HCLK       (HCLK),
+    .HRESETn    (HRESETn),
+
+    .req_port0   (req_port0),
+    .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_op3 = 1'b0;
+
+      // Decode selection when enabled
+      if (~no_port)
+        case (addr_in_port)
+          2'b00 : active_op0 = 1'b1;
+          2'b11 : active_op3 = 1'b1;
+          default : begin
+            active_op0 = 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_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 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_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'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/system/src/nanosoc_busmatrix/xml/nanosoc.xml b/system/src/nanosoc_busmatrix/xml/nanosoc.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0df4b12d207ef9a52444b831d98562b09e778222
--- /dev/null
+++ b/system/src/nanosoc_busmatrix/xml/nanosoc.xml
@@ -0,0 +1,159 @@
+<?xml version="1.0" encoding="iso-8859-1" ?>
+
+<!--//----------------------------------------------------------------------------- -->
+<!--// customised interconnect specification for ADP/DMA/ Cortex-M0 controller      -->
+<!--//                                                                              -->
+<!--// Contributors                                                                 -->
+<!--//                                                                              -->
+<!--// David Flynn (d.w.flynn@soton.ac.uk)                                          -->
+<!--//                                                                              -->
+<!--// Copyright (C) 2023, SoC Labs (www.soclabs.org)                               -->
+<!--//----------------------------------------------------------------------------- -->
+
+<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
+<!--  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-2013 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.                                     -->
+<!--                                                                                    -->
+<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -              -->
+<!--  Version and Release Control 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  -->
+<!--                                                                                    -->
+<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
+<!--  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                      -->
+<!--                                                                                    -->
+<!--  Note                : This information will overwrite parameters                  -->
+<!--                         specified on the command line                              -->
+<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
+
+<cfgfile>
+
+  <!-- - - - - *** DO NOT MODIFY ABOVE THIS LINE *** - - - - - - - - - - -  -->
+
+  <!-- Global definitions -->
+
+  <architecture_version>ahb2</architecture_version>
+  <arbitration_scheme>burst</arbitration_scheme>
+  <routing_data_width>32</routing_data_width>
+  <routing_address_width>32</routing_address_width>
+  <user_signal_width>0</user_signal_width>
+  <bus_matrix_name>nanosoc_busmatrix</bus_matrix_name>
+  <input_stage_name>nanosoc_inititator_input</input_stage_name>
+  <matrix_decode_name>nanosoc_matrix_decode</matrix_decode_name>
+  <output_arbiter_name>nanosoc_arbiter</output_arbiter_name>
+  <output_stage_name>nanosoc_target_output< /output_stage_name>
+
+
+  <!-- Slave interface definitions -->
+
+  <slave_interface name="_socdebug">
+    <sparse_connect interface="_bootrom"/>
+    <sparse_connect interface="_imem"/>
+    <sparse_connect interface="_dmem"/>
+    <sparse_connect interface="_sysio"/>
+    <sparse_connect interface="_exp"/>
+    <sparse_connect interface="_expram_l"/>
+    <sparse_connect interface="_expram_h"/>
+    <sparse_connect interface="_systable"/>
+    <address_region interface="_bootrom"   mem_lo='00000000' mem_hi='0fffffff' remapping='move'/>
+    <address_region interface="_bootrom"   mem_lo='10000000' mem_hi='1fffffff' remapping='none'/>
+    <address_region interface="_imem"      mem_lo='20000000' mem_hi='2fffffff' remapping='none'/>
+    <address_region interface="_dmem"      mem_lo='30000000' mem_hi='3fffffff' remapping='none'/>
+    <address_region interface="_sysio"     mem_lo='40000000' mem_hi='5fffffff' remapping='none'/>
+    <address_region interface="_exp"       mem_lo='60000000' mem_hi='7fffffff' remapping='none'/>
+    <address_region interface="_expram_l"  mem_lo='80000000' mem_hi='8fffffff' remapping='none'/>
+    <address_region interface="_expram_h"  mem_lo='90000000' mem_hi='9fffffff' remapping='none'/>
+    <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"      mem_lo='00000000' mem_hi='0fffffff' bit='0'/>
+  </slave_interface>
+
+  <slave_interface name="_dma_0">
+    <sparse_connect interface="_bootrom"/>
+    <sparse_connect interface="_imem"/>
+    <sparse_connect interface="_dmem"/>
+    <sparse_connect interface="_sysio"/>
+    <sparse_connect interface="_exp"/>
+    <sparse_connect interface="_expram_l"/>
+    <sparse_connect interface="_expram_h"/>
+    <address_region interface="_imem"      mem_lo='00000000' mem_hi='0fffffff' remapping='none'/>
+    <address_region interface="_bootrom"   mem_lo='10000000' mem_hi='1fffffff' remapping='none'/>
+    <address_region interface="_imem"      mem_lo='20000000' mem_hi='2fffffff' remapping='none'/>
+    <address_region interface="_dmem"      mem_lo='30000000' mem_hi='3fffffff' remapping='none'/>
+    <address_region interface="_sysio"     mem_lo='40000000' mem_hi='5fffffff' remapping='none'/>
+    <address_region interface="_exp"       mem_lo='60000000' mem_hi='7fffffff' remapping='none'/>
+    <address_region interface="_expram_l"  mem_lo='80000000' mem_hi='8fffffff' remapping='none'/>
+    <address_region interface="_expram_h"  mem_lo='90000000' mem_hi='9fffffff' remapping='none'/>
+    <address_region interface="_exp"       mem_lo='a0000000' mem_hi='dfffffff' remapping='none'/>
+  </slave_interface>
+
+  <slave_interface name="_dma_1">
+    <sparse_connect interface="_bootrom"/>
+    <sparse_connect interface="_imem"/>
+    <sparse_connect interface="_dmem"/>
+    <sparse_connect interface="_sysio"/>
+    <sparse_connect interface="_exp"/>
+    <sparse_connect interface="_expram_l"/>
+    <sparse_connect interface="_expram_h"/>
+    <address_region interface="_imem"      mem_lo='00000000' mem_hi='0fffffff' remapping='none'/>
+    <address_region interface="_bootrom"   mem_lo='10000000' mem_hi='1fffffff' remapping='none'/>
+    <address_region interface="_imem"      mem_lo='20000000' mem_hi='2fffffff' remapping='none'/>
+    <address_region interface="_dmem"      mem_lo='30000000' mem_hi='3fffffff' remapping='none'/>
+    <address_region interface="_sysio"     mem_lo='40000000' mem_hi='5fffffff' remapping='none'/>
+    <address_region interface="_exp"       mem_lo='60000000' mem_hi='7fffffff' remapping='none'/>
+    <address_region interface="_expram_l"  mem_lo='80000000' mem_hi='8fffffff' remapping='none'/>
+    <address_region interface="_expram_h"  mem_lo='90000000' mem_hi='9fffffff' remapping='none'/>
+    <address_region interface="_exp"       mem_lo='a0000000' mem_hi='dfffffff' remapping='none'/>
+  </slave_interface>
+
+  <slave_interface name="_cpu">
+    <sparse_connect interface="_bootrom"/>
+    <sparse_connect interface="_imem"/>
+    <sparse_connect interface="_dmem"/>
+    <sparse_connect interface="_sysio"/>
+    <sparse_connect interface="_exp"/>
+    <sparse_connect interface="_expram_l"/>
+    <sparse_connect interface="_expram_h"/>
+    <sparse_connect interface="_systable"/>
+    <address_region interface="_bootrom"   mem_lo='00000000' mem_hi='0fffffff' remapping='move'/>
+    <address_region interface="_bootrom"   mem_lo='10000000' mem_hi='1fffffff' remapping='none'/>
+    <address_region interface="_imem"      mem_lo='20000000' mem_hi='2fffffff' remapping='none'/>
+    <address_region interface="_dmem"      mem_lo='30000000' mem_hi='3fffffff' remapping='none'/>
+    <address_region interface="_sysio"     mem_lo='40000000' mem_hi='5fffffff' remapping='none'/>
+    <address_region interface="_exp"       mem_lo='60000000' mem_hi='7fffffff' remapping='none'/>
+    <address_region interface="_expram_l"  mem_lo='80000000' mem_hi='8fffffff' remapping='none'/>
+    <address_region interface="_expram_h"  mem_lo='90000000' mem_hi='9fffffff' remapping='none'/>
+    <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"      mem_lo='00000000' mem_hi='0fffffff' bit='0'/>
+  </slave_interface>
+
+  <!-- Master interface definitions -->
+
+  <master_interface name="_bootrom"/>
+  <master_interface name="_imem"/>
+  <master_interface name="_dmem"/>
+  <master_interface name="_sysio"/>
+  <master_interface name="_expram_l"/>
+  <master_interface name="_expram_h"/>
+  <master_interface name="_exp"/>
+  <master_interface name="_systable"/>
+
+  <!-- - - - - *** DO NOT MODIFY BELOW THIS LINE *** - - - - - - - - - - - -->
+
+</cfgfile>
diff --git a/system/src/verilog/nanosoc_chip.v b/system/src/nanosoc_chip/chip/verilog/nanosoc_chip.v
similarity index 58%
rename from system/src/verilog/nanosoc_chip.v
rename to system/src/nanosoc_chip/chip/verilog/nanosoc_chip.v
index a1e108ad4ddc822c7d3b9d3ba7a3303d42bf8d98..9f29474abce915348298915ee0cad6226ed32a2e 100644
--- a/system/src/verilog/nanosoc_chip.v
+++ b/system/src/nanosoc_chip/chip/verilog/nanosoc_chip.v
@@ -45,40 +45,44 @@
 //param ADDR_WIDTH_RAM = 15; // 32KB
 //param ADDR_WIDTH_RAM = 16; // 64KB
 
-module nanosoc_chip
- #(parameter ADDR_WIDTH_RAM = 14)
- (
-`ifdef POWER_PINS
-  inout  wire          VDDIO,
-  inout  wire          VSSIO,
-  inout  wire          VDD,
-  inout  wire          VSS,
-`endif
-  input  wire          xtal_clk_i,
-  output wire          xtal_clk_o,
-  input  wire          nrst_i,
-  input  wire  [15:0]  p0_i, // level-shifted input from pad
-  output wire  [15:0]  p0_o, // output port drive
-  output wire  [15:0]  p0_e, // active high output drive enable (pad tech dependent)
-  output wire  [15:0]  p0_z, // active low output drive enable (pad tech dependent)
-  input  wire  [15:0]  p1_i, // level-shifted input from pad
-  output wire  [15:0]  p1_o, // output port drive
-  output wire  [15:0]  p1_e, // active high output drive enable (pad tech dependent)
-  output wire  [15:0]  p1_z, // active low output drive enable (pad tech dependent)
-  input  wire          swdio_i,
-  output wire          swdio_o,
-  output wire          swdio_e,
-  output wire          swdio_z,
-  input  wire          swdclk_i
+module nanosoc_chip #(
+    parameter SYS_ADDR_W = 32,
+    parameter SYS_DATA_W = 32,
+    parameter RAM_ADDR_W = 14,
+    parameter RAM_DATA_W = 32
+  )(
+  `ifdef POWER_PINS
+    inout  wire          VDDIO,
+    inout  wire          VSSIO,
+    inout  wire          VDD,
+    inout  wire          VSS,
+  `endif
+    input  wire          xtal_clk_i,
+    output wire          xtal_clk_o,
+    input  wire          nrst_i,
+    input  wire  [15:0]  p0_i, // level-shifted input from pad
+    output wire  [15:0]  p0_o, // output port drive
+    output wire  [15:0]  p0_e, // active high output drive enable (pad tech dependent)
+    output wire  [15:0]  p0_z, // active low output drive enable (pad tech dependent)
+    input  wire  [15:0]  p1_i, // level-shifted input from pad
+    output wire  [15:0]  p1_o, // output port drive
+    output wire  [15:0]  p1_e, // active high output drive enable (pad tech dependent)
+    output wire  [15:0]  p1_z, // active low output drive enable (pad tech dependent)
+    input  wire          swdio_i,
+    output wire          swdio_o,
+    output wire          swdio_e,
+    output wire          swdio_z,
+    input  wire          swdclk_i
   );
 
-localparam    CLKGATE_PRESENT = 0;
-localparam    DMA_CHANNEL_NUM = 2;
-localparam    INCLUDE_DMA = 1;
-localparam    CORTEX_M0 = 1;
+  localparam    CLKGATE_PRESENT = 0;
+  localparam    DMA_CHANNEL_NUM = 2;
+  localparam    INCLUDE_DMA = 1;
+  localparam    CORTEX_M0 = 1;
 
 //------------------------------------
 // CMSDK internal wire naming preserved
+//------------------------------------
 
   wire          xtal_clk_in = xtal_clk_i;
   wire          xtal_clk_out;
@@ -168,66 +172,63 @@ localparam    CORTEX_M0 = 1;
 //TIE_LO uTIELO (.tielo(tielo));
  wire tielo = 1'b0;
 
-
-
 //----------------------------------------
-// SOC clock and reset management
+// SoC Clock and Reset Management
 //----------------------------------------
-//
-
-    wire         PORESETn;// Power on reset
-    wire         HRESETn; // AHB reset
-    wire         PRESETn; // APB and peripheral reset
-    wire         DBGRESETn; // Debug system reset
-    wire         FCLK;    // Free running system clock
-    wire         HCLK;    // System clock from PMU
-    wire         DCLK;
-    wire         SCLK;
-    wire         PCLK;    // Peripheral clock
-    wire         PCLKG;   // Gated PCLK for APB
-    wire         PCLKEN;  // Clock divider for AHB to APB bridge
-    wire         APBACTIVE;
+  wire         PORESETn;// Power on reset
+  wire         HRESETn; // AHB reset
+  wire         PRESETn; // APB and peripheral reset
+  wire         DBGRESETn; // Debug system reset
+  wire         FCLK;    // Free running system clock
+  wire         HCLK;    // System clock from PMU
+  wire         DCLK;
+  wire         SCLK;
+  wire         PCLK;    // Peripheral clock
+  wire         PCLKG;   // Gated PCLK for APB
+  wire         PCLKEN;  // Clock divider for AHB to APB bridge
+  wire         APBACTIVE;
+  
   // event signals
-    wire         TXEV;
-    wire         RXEV;
-    wire         nTRST;            // JTAG - Test reset (active low)
-    wire         SWDI;          // JTAG/SWD - TMS / SWD data input
-    wire         SWCLK;         // JTAG/SWD - TCK / SWCLK
-    wire         SWDO;             // SWD - SWD data output
-    wire         SWDOEN;           // SWD - SWD data output enable
-    wire         SYSRESETREQ;    // processor system reset request
-    wire         WDOGRESETREQ;   // watchdog system reset request
-    wire         HRESETREQ;      // Combined system reset request
-    wire         NANOSOC_SYSRESETREQ; // Combined system reset request
-    wire         clk_ctrl_sys_reset_req;
-    wire         PMUHRESETREQ;
-    wire         PMUDBGRESETREQ;
-    wire         LOCKUP;
-    wire         LOCKUPRESET;
-    wire         SLEEPING;
-    wire         GATEHCLK;         // Processor status - safe to gate HCLK
-    wire         WAKEUP;           // Wake up request from WIC
-    wire         WICENREQ;         // WIC enable request from PMU
-    wire         WICENACK;         // WIC enable ack to PMU
-    wire         PMUENABLE;
-    wire         CDBGPWRUPREQ;     // Debug Power Up request to PMU
-    wire         CDBGPWRUPACK;     // Debug Power Up ACK from PMU
-    wire         SLEEPHOLDREQn;    // Sleep extension request from PMU
-    wire         SLEEPHOLDACKn;    // Sleep extension request to PMU
-    wire         SYSPWRDOWNACK;
-    wire         DBGPWRDOWNACK;
-    wire         SYSPWRDOWN;
-    wire         DBGPWRDOWN;
-    wire         SYSISOLATEn;
-    wire         SYSRETAINn;
-    wire         DBGISOLATEn;
-    wire         SLEEPDEEP;
-    wire         ADPRESETREQ;
-    // Scan test dummy signals; not connected until scan insertion
-    wire          TESTMODE;        // Test mode enable signal (override synchronizers etc)
-    wire          SCANENABLE;      // Scan enable signal
-    wire          SCANINHCLK;      // HCLK scan input
-    wire          SCANOUTHCLK;     // Scan Chain wire  
+  wire         TXEV;
+  wire         RXEV;
+  wire         nTRST;            // JTAG - Test reset (active low)
+  wire         SWDI;          // JTAG/SWD - TMS / SWD data input
+  wire         SWCLK;         // JTAG/SWD - TCK / SWCLK
+  wire         SWDO;             // SWD - SWD data output
+  wire         SWDOEN;           // SWD - SWD data output enable
+  wire         SYSRESETREQ;    // processor system reset request
+  wire         WDOGRESETREQ;   // watchdog system reset request
+  wire         HRESETREQ;      // Combined system reset request
+  wire         NANOSOC_SYSRESETREQ; // Combined system reset request
+  wire         clk_ctrl_sys_reset_req;
+  wire         PMUHRESETREQ;
+  wire         PMUDBGRESETREQ;
+  wire         LOCKUP;
+  wire         LOCKUPRESET;
+  wire         SLEEPING;
+  wire         GATEHCLK;         // Processor status - safe to gate HCLK
+  wire         WAKEUP;           // Wake up request from WIC
+  wire         WICENREQ;         // WIC enable request from PMU
+  wire         WICENACK;         // WIC enable ack to PMU
+  wire         PMUENABLE;
+  wire         CDBGPWRUPREQ;     // Debug Power Up request to PMU
+  wire         CDBGPWRUPACK;     // Debug Power Up ACK from PMU
+  wire         SLEEPHOLDREQn;    // Sleep extension request from PMU
+  wire         SLEEPHOLDACKn;    // Sleep extension request to PMU
+  wire         SYSPWRDOWNACK;
+  wire         DBGPWRDOWNACK;
+  wire         SYSPWRDOWN;
+  wire         DBGPWRDOWN;
+  wire         SYSISOLATEn;
+  wire         SYSRETAINn;
+  wire         DBGISOLATEn;
+  wire         SLEEPDEEP;
+  wire         ADPRESETREQ;
+  // Scan test dummy signals; not connected until scan insertion
+  wire          TESTMODE;        // Test mode enable signal (override synchronizers etc)
+  wire          SCANENABLE;      // Scan enable signal
+  wire          SCANINHCLK;      // HCLK scan input
+  wire          SCANOUTHCLK;     // Scan Chain wire  
 
 // not required for FPGA
     assign        TESTMODE = 1'b0; 
@@ -415,205 +416,205 @@ localparam    CORTEX_M0 = 1;
     wire          ROM_MAP;
     
     // Manager port SI0 (inputs from master 0)
-    wire   [31:0] HADDR_adp;         // Address bus
-    wire    [1:0] HTRANS_adp;        // Transfer type
-    wire          HWRITE_adp;        // Transfer direction
-    wire    [2:0] HSIZE_adp;         // Transfer size
-    wire    [2:0] HBURST_adp;        // Burst type
-    wire    [3:0] HPROT_adp;         // Protection control
-    wire   [31:0] HWDATA_adp;        // Write data
-    wire          HMASTLOCK_adp;     // Locked Sequence
-    wire    [1:0] HAUSER_adp;        // Address USER signals
-    wire    [1:0] HWUSER_adp;        // Write-data USER signals
+    wire  [SYS_ADDR_W-1:0] HADDR_adp;         // Address bus
+    wire             [1:0] HTRANS_adp;        // Transfer type
+    wire                   HWRITE_adp;        // Transfer direction
+    wire             [2:0] HSIZE_adp;         // Transfer size
+    wire             [2:0] HBURST_adp;        // Burst type
+    wire             [3:0] HPROT_adp;         // Protection control
+    wire  [SYS_DATA_W-1:0] HWDATA_adp;        // Write data
+    wire                   HMASTLOCK_adp;     // Locked Sequence
+    wire             [1:0] HAUSER_adp;        // Address USER signals
+    wire             [1:0] HWUSER_adp;        // Write-data USER signals
     // Manager port SI0 (outputs to master 0)
-    wire   [31:0] HRDATA_adp;        // Read data bus
-    wire          HREADY_adp;        // HREADY feedback
-    wire          HRESP_adp;         // Transfer response
-    wire    [1:0] HRUSER_adp;        // Read-data USER signals
+    wire  [SYS_DATA_W-1:0] HRDATA_adp;        // Read data bus
+    wire                   HREADY_adp;        // HREADY feedback
+    wire                    HRESP_adp;         // Transfer response
+    wire             [1:0] HRUSER_adp;        // Read-data USER signals
 
     // Manager port SI1 (inputs from master 1)
-    wire   [31:0] HADDR_dma;         // Address bus
-    wire    [1:0] HTRANS_dma;        // Transfer type
-    wire          HWRITE_dma;        // Transfer direction
-    wire    [2:0] HSIZE_dma;         // Transfer size
-    wire    [2:0] HBURST_dma;        // Burst type
-    wire    [3:0] HPROT_dma;         // Protection control
-    wire   [31:0] HWDATA_dma;        // Write data
-    wire          HMASTLOCK_dma;     // Locked Sequence
-    wire    [1:0] HAUSER_dma;        // Address USER signals
-    wire    [1:0] HWUSER_dma;        // Write-data USER signals
+    wire   [SYS_ADDR_W-1:0] HADDR_dma;         // Address bus
+    wire              [1:0] HTRANS_dma;        // Transfer type
+    wire                    HWRITE_dma;        // Transfer direction
+    wire              [2:0] HSIZE_dma;         // Transfer size
+    wire              [2:0] HBURST_dma;        // Burst type
+    wire              [3:0] HPROT_dma;         // Protection control
+    wire   [SYS_DATA_W-1:0] HWDATA_dma;        // Write data
+    wire                    HMASTLOCK_dma;     // Locked Sequence
+    wire              [1:0] HAUSER_dma;        // Address USER signals
+    wire              [1:0] HWUSER_dma;        // Write-data USER signals
     // Manager port SI1 (outputs to master 1)
-    wire   [31:0] HRDATA_dma;        // Read data bus
-    wire          HREADY_dma;        // HREADY feedback
-    wire          HRESP_dma;         // Transfer response
-    wire    [1:0] HRUSER_dma;        // Read-data USER signals
+    wire   [SYS_DATA_W-1:0] HRDATA_dma;        // Read data bus
+    wire                    HREADY_dma;        // HREADY feedback
+    wire                    HRESP_dma;         // Transfer response
+    wire              [1:0] HRUSER_dma;        // Read-data USER signals
 
     // Manager port SI2 (inputs from master 2)
-    wire   [31:0] HADDR_dma2;         // Address bus
-    wire    [1:0] HTRANS_dma2;        // Transfer type
-    wire          HWRITE_dma2;        // Transfer direction
-    wire    [2:0] HSIZE_dma2;         // Transfer size
-    wire    [2:0] HBURST_dma2;        // Burst type
-    wire    [3:0] HPROT_dma2;         // Protection control
-    wire   [31:0] HWDATA_dma2;        // Write data
-    wire          HMASTLOCK_dma2;     // Locked Sequence
-    wire    [1:0] HAUSER_dma2;        // Address USER signals
-    wire    [1:0] HWUSER_dma2;        // Write-data USER signals
+    wire   [SYS_ADDR_W-1:0] HADDR_dma2;         // Address bus
+    wire              [1:0] HTRANS_dma2;        // Transfer type
+    wire                    HWRITE_dma2;        // Transfer direction
+    wire              [2:0] HSIZE_dma2;         // Transfer size
+    wire              [2:0] HBURST_dma2;        // Burst type
+    wire              [3:0] HPROT_dma2;         // Protection control
+    wire   [SYS_DATA_W-1:0] HWDATA_dma2;        // Write data
+    wire                    HMASTLOCK_dma2;     // Locked Sequence
+    wire              [1:0] HAUSER_dma2;        // Address USER signals
+    wire              [1:0] HWUSER_dma2;        // Write-data USER signals
     // Manager port SI2 (outputs to master 2)
-    wire   [31:0] HRDATA_dma2;        // Read data bus
-    wire          HREADY_dma2;        // HREADY feedback
-    wire          HRESP_dma2;         // Transfer response
-    wire    [1:0] HRUSER_dma2;        // Read-data USER signals
+    wire   [SYS_DATA_W-1:0] HRDATA_dma2;        // Read data bus
+    wire                    HREADY_dma2;        // HREADY feedback
+    wire                    HRESP_dma2;         // Transfer response
+    wire              [1:0] HRUSER_dma2;        // Read-data USER signals
 
     // Manager port SI3 (inputs from master 3)
-    wire   [31:0] HADDR_cpu;         // Address bus
-    wire    [1:0] HTRANS_cpu;        // Transfer type
-    wire          HWRITE_cpu;        // Transfer direction
-    wire    [2:0] HSIZE_cpu;         // Transfer size
-    wire    [2:0] HBURST_cpu;        // Burst type
-    wire    [3:0] HPROT_cpu;         // Protection control
-    wire   [31:0] HWDATA_cpu;        // Write data
-    wire          HMASTLOCK_cpu;     // Locked Sequence
-    wire    [1:0] HAUSER_cpu;        // Address USER signals
-    wire    [1:0] HWUSER_cpu;        // Write-data USER signals
+    wire   [SYS_ADDR_W-1:0] HADDR_cpu;         // Address bus
+    wire              [1:0] HTRANS_cpu;        // Transfer type
+    wire                    HWRITE_cpu;        // Transfer direction
+    wire              [2:0] HSIZE_cpu;         // Transfer size
+    wire              [2:0] HBURST_cpu;        // Burst type
+    wire              [3:0] HPROT_cpu;         // Protection control
+    wire   [SYS_DATA_W-1:0] HWDATA_cpu;        // Write data
+    wire                    HMASTLOCK_cpu;     // Locked Sequence
+    wire              [1:0] HAUSER_cpu;        // Address USER signals
+    wire              [1:0] HWUSER_cpu;        // Write-data USER signals
     // Manager port SI3 (outputs to master 3)
-    wire   [31:0] HRDATA_cpu;        // Read data bus
-    wire          HREADY_cpu;        // HREADY feedback
-    wire          HRESP_cpu;         // Transfer response
-    wire    [1:0] HRUSER_cpu;        // Read-data USER signals
+    wire   [SYS_DATA_W-1:0] HRDATA_cpu;        // Read data bus
+    wire                    HREADY_cpu;        // HREADY feedback
+    wire                    HRESP_cpu;         // Transfer response
+    wire              [1:0] HRUSER_cpu;        // Read-data USER signals
 
     // Subordinate port MI0 (outputs to slave 0)
-    wire          HSEL_rom1;          // Slave Select
-    wire   [31:0] HADDR_rom1;         // Address bus
-    wire    [1:0] HTRANS_rom1;        // Transfer type
-    wire          HWRITE_rom1;        // Transfer direction
-    wire    [2:0] HSIZE_rom1;         // Transfer size
-    wire    [2:0] HBURST_rom1;        // Burst type
-    wire    [3:0] HPROT_rom1;         // Protection control
-    wire   [31:0] HWDATA_rom1;        // Write data
-    wire          HMASTLOCK_rom1;     // Locked Sequence
-    wire          HREADYMUX_rom1;     // Transfer done
-    wire    [1:0] HAUSER_rom1;        // Address USER signals
-    wire    [1:0] HWUSER_rom1;        // Write-data USER signals
+    wire                    HSEL_bootrom;          // Slave Select
+    wire   [SYS_ADDR_W-1:0] HADDR_bootrom;         // Address bus
+    wire              [1:0] HTRANS_bootrom;        // Transfer type
+    wire                    HWRITE_bootrom;        // Transfer direction
+    wire              [2:0] HSIZE_bootrom;         // Transfer size
+    wire              [2:0] HBURST_bootrom;        // Burst type
+    wire              [3:0] HPROT_bootrom;         // Protection control
+    wire   [SYS_DATA_W-1:0] HWDATA_bootrom;        // Write data
+    wire                    HMASTLOCK_bootrom;     // Locked Sequence
+    wire                    HREADYMUX_bootrom;     // Transfer done
+    wire              [1:0] HAUSER_bootrom;        // Address USER signals
+    wire              [1:0] HWUSER_bootrom;        // Write-data USER signals
     // Subordinate port MI0 (inputs from slave 0)
-    wire   [31:0] HRDATA_rom1;        // Read data bus
-    wire          HREADYOUT_rom1;     // HREADY feedback
-    wire          HRESP_rom1;         // Transfer response
-    wire    [1:0] HRUSER_rom1;        // Read-data USER signals
+    wire   [SYS_DATA_W-1:0] HRDATA_bootrom;        // Read data bus
+    wire                    HREADYOUT_bootrom;     // HREADY feedback
+    wire                    HRESP_bootrom;         // Transfer response
+    wire              [1:0] HRUSER_bootrom;        // Read-data USER signals
 
     // Subordinate port MI1 (outputs to slave 1)
-    wire          HSEL_ram2;          // Slave Select
-    wire   [31:0] HADDR_ram2;         // Address bus
-    wire    [1:0] HTRANS_ram2;        // Transfer type
-    wire          HWRITE_ram2;        // Transfer direction
-    wire    [2:0] HSIZE_ram2;         // Transfer size
-    wire    [2:0] HBURST_ram2;        // Burst type
-    wire    [3:0] HPROT_ram2;         // Protection control
-    wire   [31:0] HWDATA_ram2;        // Write data
-    wire          HMASTLOCK_ram2;     // Locked Sequence
-    wire          HREADYMUX_ram2;     // Transfer done
-    wire    [1:0] HAUSER_ram2;        // Address USER signals
-    wire    [1:0] HWUSER_ram2;        // Write-data USER signals
+    wire                    HSEL_imem;          // Slave Select
+    wire   [SYS_ADDR_W-1:0] HADDR_imem;         // Address bus
+    wire              [1:0] HTRANS_imem;        // Transfer type
+    wire                    HWRITE_imem;        // Transfer direction
+    wire              [2:0] HSIZE_imem;         // Transfer size
+    wire              [2:0] HBURST_imem;        // Burst type
+    wire              [3:0] HPROT_imem;         // Protection control
+    wire   [SYS_DATA_W-1:0] HWDATA_imem;        // Write data
+    wire                    HMASTLOCK_imem;     // Locked Sequence
+    wire                    HREADYMUX_imem;     // Transfer done
+    wire              [1:0] HAUSER_imem;        // Address USER signals
+    wire              [1:0] HWUSER_imem;        // Write-data USER signals
     // Subordinate port MI1 (inputs from slave 1)
-    wire   [31:0] HRDATA_ram2;        // Read data bus
-    wire          HREADYOUT_ram2;     // HREADY feedback
-    wire          HRESP_ram2;         // Transfer response
-    wire    [1:0] HRUSER_ram2;        // Read-data USER signals
+    wire   [SYS_DATA_W-1:0] HRDATA_imem;        // Read data bus
+    wire                    HREADYOUT_imem;     // HREADY feedback
+    wire                    HRESP_imem;         // Transfer response
+    wire              [1:0] HRUSER_imem;        // Read-data USER signals
 
     // Subordinate port MI2 (outputs to slave 2)
-    wire          HSEL_ram3;          // Slave Select
-    wire   [31:0] HADDR_ram3;         // Address bus
-    wire    [1:0] HTRANS_ram3;        // Transfer type
-    wire          HWRITE_ram3;        // Transfer direction
-    wire    [2:0] HSIZE_ram3;         // Transfer size
-    wire    [2:0] HBURST_ram3;        // Burst type
-    wire    [3:0] HPROT_ram3;         // Protection control
-    wire   [31:0] HWDATA_ram3;        // Write data
-    wire          HMASTLOCK_ram3;     // Locked Sequence
-    wire          HREADYMUX_ram3;     // Transfer done
-    wire    [1:0] HAUSER_ram3;        // Address USER signals
-    wire    [1:0] HWUSER_ram3;        // Write-data USER signals
+    wire                    HSEL_dmem;          // Slave Select
+    wire   [SYS_ADDR_W-1:0] HADDR_dmem;         // Address bus
+    wire              [1:0] HTRANS_dmem;        // Transfer type
+    wire                    HWRITE_dmem;        // Transfer direction
+    wire              [2:0] HSIZE_dmem;         // Transfer size
+    wire              [2:0] HBURST_dmem;        // Burst type
+    wire              [3:0] HPROT_dmem;         // Protection control
+    wire   [SYS_DATA_W-1:0] HWDATA_dmem;        // Write data
+    wire                    HMASTLOCK_dmem;     // Locked Sequence
+    wire                    HREADYMUX_dmem;     // Transfer done
+    wire              [1:0] HAUSER_dmem;        // Address USER signals
+    wire              [1:0] HWUSER_dmem;        // Write-data USER signals
     // Subordinate port MI2 (inputs from slave 2)
-    wire   [31:0] HRDATA_ram3;        // Read data bus
-    wire          HREADYOUT_ram3;     // HREADY feedback
-    wire          HRESP_ram3;         // Transfer response
-    wire    [1:0] HRUSER_ram3;        // Read-data USER signals
+    wire   [SYS_DATA_W-1:0] HRDATA_dmem;        // Read data bus
+    wire                    HREADYOUT_dmem;     // HREADY feedback
+    wire                    HRESP_dmem;         // Transfer response
+    wire              [1:0] HRUSER_dmem;        // Read-data USER signals
 
     // Subordinate port MI3 (outputs to slave 3)
-    wire          HSEL_sys;          // Slave Select
-    wire   [31:0] HADDR_sys;         // Address bus
-    wire    [1:0] HTRANS_sys;        // Transfer type
-    wire          HWRITE_sys;        // Transfer direction
-    wire    [2:0] HSIZE_sys;         // Transfer size
-    wire    [2:0] HBURST_sys;        // Burst type
-    wire    [3:0] HPROT_sys;         // Protection control
-    wire   [31:0] HWDATA_sys;        // Write data
-    wire          HMASTLOCK_sys;     // Locked Sequence
-    wire          HREADYMUX_sys;     // Transfer done
-    wire    [1:0] HAUSER_sys;        // Address USER signals
-    wire    [1:0] HWUSER_sys;        // Write-data USER signals
+    wire                    HSEL_sysio;          // Slave Select
+    wire   [SYS_ADDR_W-1:0] HADDR_sysio;         // Address bus
+    wire              [1:0] HTRANS_sysio;        // Transfer type
+    wire                    HWRITE_sysio;        // Transfer direction
+    wire              [2:0] HSIZE_sysio;         // Transfer size
+    wire              [2:0] HBURST_sysio;        // Burst type
+    wire              [3:0] HPROT_sysio;         // Protection control
+    wire   [SYS_DATA_W-1:0] HWDATA_sysio;        // Write data
+    wire                    HMASTLOCK_sysio;     // Locked Sequence
+    wire                    HREADYMUX_sysio;     // Transfer done
+    wire              [1:0] HAUSER_sysio;        // Address USER signals
+    wire              [1:0] HWUSER_sysio;        // Write-data USER signals
     // Subordinate port MI3 (inputs from slave 3)
-    wire   [31:0] HRDATA_sys;        // Read data bus
-    wire          HREADYOUT_sys;     // HREADY feedback
-    wire          HRESP_sys;         // Transfer response
-    wire    [1:0] HRUSER_sys;        // Read-data USER signals
+    wire   [SYS_DATA_W-1:0] HRDATA_sysio;        // Read data bus
+    wire                    HREADYOUT_sysio;     // HREADY feedback
+    wire                    HRESP_sysio;         // Transfer response
+    wire              [1:0] HRUSER_sysio;        // Read-data USER signals
 
     // Subordinate port MI4 (outputs to slave 4)
-    wire          HSEL_ram8;          // Slave Select
-    wire   [31:0] HADDR_ram8;         // Address bus
-    wire    [1:0] HTRANS_ram8;        // Transfer type
-    wire          HWRITE_ram8;        // Transfer direction
-    wire    [2:0] HSIZE_ram8;         // Transfer size
-    wire    [2:0] HBURST_ram8;        // Burst type
-    wire    [3:0] HPROT_ram8;         // Protection control
-    wire   [31:0] HWDATA_ram8;        // Write data
-    wire          HMASTLOCK_ram8;     // Locked Sequence
-    wire          HREADYMUX_ram8;     // Transfer done
-    wire    [1:0] HAUSER_ram8;        // Address USER signals
-    wire    [1:0] HWUSER_ram8;        // Write-data USER signals
+    wire                    HSEL_expram_l;          // Slave Select
+    wire   [SYS_ADDR_W-1:0] HADDR_expram_l;         // Address bus
+    wire              [1:0] HTRANS_expram_l;        // Transfer type
+    wire                    HWRITE_expram_l;        // Transfer direction
+    wire              [2:0] HSIZE_expram_l;         // Transfer size
+    wire              [2:0] HBURST_expram_l;        // Burst type
+    wire              [3:0] HPROT_expram_l;         // Protection control
+    wire   [SYS_DATA_W-1:0] HWDATA_expram_l;        // Write data
+    wire                    HMASTLOCK_expram_l;     // Locked Sequence
+    wire                    HREADYMUX_expram_l;     // Transfer done
+    wire              [1:0] HAUSER_expram_l;        // Address USER signals
+    wire              [1:0] HWUSER_expram_l;        // Write-data USER signals
     // Subordinate port MI4 (inputs from slave 4)
-    wire   [31:0] HRDATA_ram8;        // Read data bus
-    wire          HREADYOUT_ram8;     // HREADY feedback
-    wire          HRESP_ram8;         // Transfer response
-    wire    [1:0] HRUSER_ram8;        // Read-data USER signals
+    wire   [SYS_DATA_W-1:0] HRDATA_expram_l;        // Read data bus
+    wire                    HREADYOUT_expram_l;     // HREADY feedback
+    wire                    HRESP_expram_l;         // Transfer response
+    wire              [1:0] HRUSER_expram_l;        // Read-data USER signals
 
     // Subordinate   port MI5 (outputs to slave 5)
-    wire          HSEL_ram9;          // Slave Select
-    wire   [31:0] HADDR_ram9;         // Address bus
-    wire    [1:0] HTRANS_ram9;        // Transfer type
-    wire          HWRITE_ram9;        // Transfer direction
-    wire    [2:0] HSIZE_ram9;         // Transfer size
-    wire    [2:0] HBURST_ram9;        // Burst type
-    wire    [3:0] HPROT_ram9;         // Protection control
-    wire   [31:0] HWDATA_ram9;        // Write data
-    wire          HMASTLOCK_ram9;     // Locked Sequence
-    wire          HREADYMUX_ram9;     // Transfer done
-    wire    [1:0] HAUSER_ram9;        // Address USER signals
-    wire    [1:0] HWUSER_ram9;        // Write-data USER signals
-    // Subordinate port MI5 (inputs from slave 5)
-    wire   [31:0] HRDATA_ram9;        // Read data bus
-    wire          HREADYOUT_ram9;     // HREADY feedback
-    wire          HRESP_ram9;         // Transfer response
-    wire    [1:0] HRUSER_ram9;        // Read-data USER signals
-
-     // Subordinate   port MI6 (outputs to slave 6)
-    wire          HSEL_exp;           // Slave Select
-    wire   [31:0] HADDR_exp;          // Address bus
-    wire    [1:0] HTRANS_exp;         // Transfer type
-    wire          HWRITE_exp;         // Transfer direction
-    wire    [2:0] HSIZE_exp;          // Transfer size
-    wire    [2:0] HBURST_exp;         // Burst type
-    wire    [3:0] HPROT_exp;          // Protection control
-    wire   [31:0] HWDATA_exp;         // Write data
-    wire          HMASTLOCK_exp;      // Locked Sequence
-    wire          HREADYMUX_exp;      // Transfer done
-    wire    [1:0] HAUSER_exp;         // Address USER signals
-    wire    [1:0] HWUSER_exp;         // Write-data USER signals
+    wire                    HSEL_expram_h;          // Slave Select
+    wire   [SYS_ADDR_W-1:0] HADDR_expram_h;         // Address bus
+    wire              [1:0] HTRANS_expram_h;        // Transfer type
+    wire                    HWRITE_expram_h;        // Transfer direction
+    wire              [2:0] HSIZE_expram_h;         // Transfer size
+    wire              [2:0] HBURST_expram_h;        // Burst type
+    wire              [3:0] HPROT_expram_h;         // Protection control
+    wire   [SYS_DATA_W-1:0] HWDATA_expram_h;        // Write data
+    wire                    HMASTLOCK_expram_h;     // Locked Sequence
+    wire                    HREADYMUX_expram_h;     // Transfer done
+    wire              [1:0] HAUSER_expram_h;        // Address USER signals
+    wire              [1:0] HWUSER_expram_h;        // Write-data USER signals
     // Subordinate port MI5 (inputs from slave 5)
-    wire   [31:0] HRDATA_exp;         // Read data bus
-    wire          HREADYOUT_exp;      // HREADY feedback
-    wire          HRESP_exp;          // Transfer response
-    wire    [1:0] HRUSER_exp;         // Read-data USER signals
+    wire   [SYS_DATA_W-1:0] HRDATA_expram_h;        // Read data bus
+    wire                    HREADYOUT_expram_h;     // HREADY feedback
+    wire                    HRESP_expram_h;         // Transfer response
+    wire              [1:0] HRUSER_expram_h;        // Read-data USER signals
+
+    // Subordinate   port MI6 (outputs to slave 6)
+    wire                    HSEL_exp;           // Slave Select
+    wire   [SYS_ADDR_W-1:0] HADDR_exp;          // Address bus
+    wire              [1:0] HTRANS_exp;         // Transfer type
+    wire                    HWRITE_exp;         // Transfer direction
+    wire              [2:0] HSIZE_exp;          // Transfer size
+    wire              [2:0] HBURST_exp;         // Burst type
+    wire              [3:0] HPROT_exp;          // Protection control
+    wire   [SYS_DATA_W-1:0] HWDATA_exp;         // Write data
+    wire                    HMASTLOCK_exp;      // Locked Sequence
+    wire                    HREADYMUX_exp;      // Transfer done
+    wire              [1:0] HAUSER_exp;         // Address USER signals
+    wire              [1:0] HWUSER_exp;         // Write-data USER signals
+    // Subordinate port MI5 (inputs from slave 6)
+    wire   [SYS_DATA_W-1:0] HRDATA_exp;         // Read data bus
+    wire                    HREADYOUT_exp;      // HREADY feedback
+    wire                    HRESP_exp;          // Transfer response
+    wire              [1:0] HRUSER_exp;         // Read-data USER signals
 
 
 //------------------------------------------------------------------------------
@@ -623,8 +624,7 @@ localparam    CORTEX_M0 = 1;
 //------------------------------------------------------------------------------
 
 // BusMatrix instance
-  nanosoc_ahb32_4x7_busmatrix_lite
-   u_nanosoc_ahb32_4x7_busmatrix_lite (
+  nanosoc_ahb32_4x7_busmatrix_lite u_nanosoc_ahb32_4x7_busmatrix_lite (
     .HCLK       (HCLK),
     .HRESETn    (HRESETn),
     .REMAP      (REMAP),
@@ -694,112 +694,112 @@ localparam    CORTEX_M0 = 1;
     .HRUSER_cpu      (HRUSER_cpu),
 
     // Output port MI0 signals
-    .HSEL_rom1       (HSEL_rom1),
-    .HADDR_rom1      (HADDR_rom1),
-    .HTRANS_rom1     (HTRANS_rom1),
-    .HWRITE_rom1     (HWRITE_rom1),
-    .HSIZE_rom1      (HSIZE_rom1),
-    .HBURST_rom1     (HBURST_rom1),
-    .HPROT_rom1      (HPROT_rom1),
-    .HWDATA_rom1     (HWDATA_rom1),
-    .HMASTLOCK_rom1  (HMASTLOCK_rom1),
-    .HREADYMUX_rom1  (HREADYMUX_rom1),
-    .HAUSER_rom1     (HAUSER_rom1),
-    .HWUSER_rom1     (HWUSER_rom1),
-    .HRDATA_rom1     (HRDATA_rom1),
-    .HREADYOUT_rom1  (HREADYOUT_rom1),
-    .HRESP_rom1      (HRESP_rom1),
-    .HRUSER_rom1     (HRUSER_rom1),
+    .HSEL_bootrom       (HSEL_bootrom),
+    .HADDR_bootrom      (HADDR_bootrom),
+    .HTRANS_bootrom     (HTRANS_bootrom),
+    .HWRITE_bootrom     (HWRITE_bootrom),
+    .HSIZE_bootrom      (HSIZE_bootrom),
+    .HBURST_bootrom     (HBURST_bootrom),
+    .HPROT_bootrom      (HPROT_bootrom),
+    .HWDATA_bootrom     (HWDATA_bootrom),
+    .HMASTLOCK_bootrom  (HMASTLOCK_bootrom),
+    .HREADYMUX_bootrom  (HREADYMUX_bootrom),
+    .HAUSER_bootrom     (HAUSER_bootrom),
+    .HWUSER_bootrom     (HWUSER_bootrom),
+    .HRDATA_bootrom     (HRDATA_bootrom),
+    .HREADYOUT_bootrom  (HREADYOUT_bootrom),
+    .HRESP_bootrom      (HRESP_bootrom),
+    .HRUSER_bootrom     (HRUSER_bootrom),
 
     // Output port MI1 signals
-    .HSEL_ram2       (HSEL_ram2),
-    .HADDR_ram2      (HADDR_ram2),
-    .HTRANS_ram2     (HTRANS_ram2),
-    .HWRITE_ram2     (HWRITE_ram2),
-    .HSIZE_ram2      (HSIZE_ram2),
-    .HBURST_ram2     (HBURST_ram2),
-    .HPROT_ram2      (HPROT_ram2),
-    .HWDATA_ram2     (HWDATA_ram2),
-    .HMASTLOCK_ram2  (HMASTLOCK_ram2),
-    .HREADYMUX_ram2  (HREADYMUX_ram2),
-    .HAUSER_ram2     (HAUSER_ram2),
-    .HWUSER_ram2     (HWUSER_ram2),
-    .HRDATA_ram2     (HRDATA_ram2),
-    .HREADYOUT_ram2  (HREADYOUT_ram2),
-    .HRESP_ram2      (HRESP_ram2),
-    .HRUSER_ram2     (HRUSER_ram2),
+    .HSEL_imem       (HSEL_imem),
+    .HADDR_imem      (HADDR_imem),
+    .HTRANS_imem     (HTRANS_imem),
+    .HWRITE_imem     (HWRITE_imem),
+    .HSIZE_imem      (HSIZE_imem),
+    .HBURST_imem     (HBURST_imem),
+    .HPROT_imem      (HPROT_imem),
+    .HWDATA_imem     (HWDATA_imem),
+    .HMASTLOCK_imem  (HMASTLOCK_imem),
+    .HREADYMUX_imem  (HREADYMUX_imem),
+    .HAUSER_imem     (HAUSER_imem),
+    .HWUSER_imem     (HWUSER_imem),
+    .HRDATA_imem     (HRDATA_imem),
+    .HREADYOUT_imem  (HREADYOUT_imem),
+    .HRESP_imem      (HRESP_imem),
+    .HRUSER_imem     (HRUSER_imem),
 
     // Output port MI2 signals
-    .HSEL_ram3       (HSEL_ram3),
-    .HADDR_ram3      (HADDR_ram3),
-    .HTRANS_ram3     (HTRANS_ram3),
-    .HWRITE_ram3     (HWRITE_ram3),
-    .HSIZE_ram3      (HSIZE_ram3),
-    .HBURST_ram3     (HBURST_ram3),
-    .HPROT_ram3      (HPROT_ram3),
-    .HWDATA_ram3     (HWDATA_ram3),
-    .HMASTLOCK_ram3  (HMASTLOCK_ram3),
-    .HREADYMUX_ram3  (HREADYMUX_ram3),
-    .HAUSER_ram3     (HAUSER_ram3),
-    .HWUSER_ram3     (HWUSER_ram3),
-    .HRDATA_ram3     (HRDATA_ram3),
-    .HREADYOUT_ram3  (HREADYOUT_ram3),
-    .HRESP_ram3      (HRESP_ram3),
-    .HRUSER_ram3     (HRUSER_ram3),
+    .HSEL_dmem       (HSEL_dmem),
+    .HADDR_dmem      (HADDR_dmem),
+    .HTRANS_dmem     (HTRANS_dmem),
+    .HWRITE_dmem     (HWRITE_dmem),
+    .HSIZE_dmem      (HSIZE_dmem),
+    .HBURST_dmem     (HBURST_dmem),
+    .HPROT_dmem      (HPROT_dmem),
+    .HWDATA_dmem     (HWDATA_dmem),
+    .HMASTLOCK_dmem  (HMASTLOCK_dmem),
+    .HREADYMUX_dmem  (HREADYMUX_dmem),
+    .HAUSER_dmem     (HAUSER_dmem),
+    .HWUSER_dmem     (HWUSER_dmem),
+    .HRDATA_dmem     (HRDATA_dmem),
+    .HREADYOUT_dmem  (HREADYOUT_dmem),
+    .HRESP_dmem      (HRESP_dmem),
+    .HRUSER_dmem     (HRUSER_dmem),
 
     // Output port MI3 signals
-    .HSEL_sys        (HSEL_sys),
-    .HADDR_sys       (HADDR_sys),
-    .HTRANS_sys      (HTRANS_sys),
-    .HWRITE_sys      (HWRITE_sys),
-    .HSIZE_sys       (HSIZE_sys),
-    .HBURST_sys      (HBURST_sys),
-    .HPROT_sys       (HPROT_sys),
-    .HWDATA_sys      (HWDATA_sys),
-    .HMASTLOCK_sys   (HMASTLOCK_sys),
-    .HREADYMUX_sys   (HREADYMUX_sys),
-    .HAUSER_sys      (HAUSER_sys),
-    .HWUSER_sys      (HWUSER_sys),
-    .HRDATA_sys      (HRDATA_sys),
-    .HREADYOUT_sys   (HREADYOUT_sys),
-    .HRESP_sys       (HRESP_sys),
-    .HRUSER_sys      (HRUSER_sys),
+    .HSEL_sysio        (HSEL_sysio),
+    .HADDR_sysio       (HADDR_sysio),
+    .HTRANS_sysio      (HTRANS_sysio),
+    .HWRITE_sysio      (HWRITE_sysio),
+    .HSIZE_sysio       (HSIZE_sysio),
+    .HBURST_sysio      (HBURST_sysio),
+    .HPROT_sysio       (HPROT_sysio),
+    .HWDATA_sysio      (HWDATA_sysio),
+    .HMASTLOCK_sysio   (HMASTLOCK_sysio),
+    .HREADYMUX_sysio   (HREADYMUX_sysio),
+    .HAUSER_sysio      (HAUSER_sysio),
+    .HWUSER_sysio      (HWUSER_sysio),
+    .HRDATA_sysio      (HRDATA_sysio),
+    .HREADYOUT_sysio   (HREADYOUT_sysio),
+    .HRESP_sysio       (HRESP_sysio),
+    .HRUSER_sysio      (HRUSER_sysio),
 
     // Output port MI4 signals
-    .HSEL_ram8       (HSEL_ram8),
-    .HADDR_ram8      (HADDR_ram8),
-    .HTRANS_ram8     (HTRANS_ram8),
-    .HWRITE_ram8     (HWRITE_ram8),
-    .HSIZE_ram8      (HSIZE_ram8),
-    .HBURST_ram8     (HBURST_ram8),
-    .HPROT_ram8      (HPROT_ram8),
-    .HWDATA_ram8     (HWDATA_ram8),
-    .HMASTLOCK_ram8  (HMASTLOCK_ram8),
-    .HREADYMUX_ram8  (HREADYMUX_ram8),
-    .HAUSER_ram8     (HAUSER_ram8),
-    .HWUSER_ram8     (HWUSER_ram8),
-    .HRDATA_ram8     (HRDATA_ram8),
-    .HREADYOUT_ram8  (HREADYOUT_ram8),
-    .HRESP_ram8      (HRESP_ram8),
-    .HRUSER_ram8     (HRUSER_ram8),
+    .HSEL_expram_l       (HSEL_expram_l),
+    .HADDR_expram_l      (HADDR_expram_l),
+    .HTRANS_expram_l     (HTRANS_expram_l),
+    .HWRITE_expram_l     (HWRITE_expram_l),
+    .HSIZE_expram_l      (HSIZE_expram_l),
+    .HBURST_expram_l     (HBURST_expram_l),
+    .HPROT_expram_l      (HPROT_expram_l),
+    .HWDATA_expram_l     (HWDATA_expram_l),
+    .HMASTLOCK_expram_l  (HMASTLOCK_expram_l),
+    .HREADYMUX_expram_l  (HREADYMUX_expram_l),
+    .HAUSER_expram_l     (HAUSER_expram_l),
+    .HWUSER_expram_l     (HWUSER_expram_l),
+    .HRDATA_expram_l     (HRDATA_expram_l),
+    .HREADYOUT_expram_l  (HREADYOUT_expram_l),
+    .HRESP_expram_l      (HRESP_expram_l),
+    .HRUSER_expram_l     (HRUSER_expram_l),
 
     // Output port MI5 signals
-    .HSEL_ram9       (HSEL_ram9),
-    .HADDR_ram9      (HADDR_ram9),
-    .HTRANS_ram9     (HTRANS_ram9),
-    .HWRITE_ram9     (HWRITE_ram9),
-    .HSIZE_ram9      (HSIZE_ram9),
-    .HBURST_ram9     (HBURST_ram9),
-    .HPROT_ram9      (HPROT_ram9),
-    .HWDATA_ram9     (HWDATA_ram9),
-    .HMASTLOCK_ram9  (HMASTLOCK_ram9),
-    .HREADYMUX_ram9  (HREADYMUX_ram9),
-    .HAUSER_ram9     (HAUSER_ram9),
-    .HWUSER_ram9     (HWUSER_ram9),
-    .HRDATA_ram9     (HRDATA_ram9),
-    .HREADYOUT_ram9  (HREADYOUT_ram9),
-    .HRESP_ram9      (HRESP_ram9),
-    .HRUSER_ram9     (HRUSER_ram9),
+    .HSEL_expram_h       (HSEL_expram_h),
+    .HADDR_expram_h      (HADDR_expram_h),
+    .HTRANS_expram_h     (HTRANS_expram_h),
+    .HWRITE_expram_h     (HWRITE_expram_h),
+    .HSIZE_expram_h      (HSIZE_expram_h),
+    .HBURST_expram_h     (HBURST_expram_h),
+    .HPROT_expram_h      (HPROT_expram_h),
+    .HWDATA_expram_h     (HWDATA_expram_h),
+    .HMASTLOCK_expram_h  (HMASTLOCK_expram_h),
+    .HREADYMUX_expram_h  (HREADYMUX_expram_h),
+    .HAUSER_expram_h     (HAUSER_expram_h),
+    .HWUSER_expram_h     (HWUSER_expram_h),
+    .HRDATA_expram_h     (HRDATA_expram_h),
+    .HREADYOUT_expram_h  (HREADYOUT_expram_h),
+    .HRESP_expram_h      (HRESP_expram_h),
+    .HRUSER_expram_h     (HRUSER_expram_h),
 
     // Output port MI6 signals
     .HSEL_exp        (HSEL_exp),
@@ -825,6 +825,102 @@ localparam    CORTEX_M0 = 1;
     .SCANOUTHCLK     (SCANOUTHCLK)
   );
 
+//----------------------------------------
+// Bootrom Region (region_bootrom)
+//----------------------------------------
+  
+  localparam BOOTROM_ADDR_W = 10;
+  
+  nanosoc_region_bootrom #(
+    .SYS_ADDR_W     (SYS_ADDR_W),
+    .SYS_DATA_W     (SYS_DATA_W),
+    .BOOTROM_ADDR_W (BOOTROM_ADDR_W)
+  ) u_nanosoc_region_bootrom (
+    .HCLK      (HCLK),
+    .HRESETn   (HRESETn),
+    .HSEL      (HSEL_bootrom),
+    .HADDR     (HADDR_bootrom),
+    .HTRANS    (HTRANS_bootrom),
+    .HSIZE     (HSIZE_bootrom),
+    .HPROT     (HPROT_bootrom),
+    .HWRITE    (HWRITE_bootrom),
+    .HREADY    (HREADYMUX_bootrom),
+    .HWDATA    (HWDATA_bootrom),
+    .HREADYOUT (HREADYOUTS_bootrom),
+    .HRESP     (HRESPS_bootrom),
+    .HRDATA    (HRDATA_bootrom)
+  );
+  
+//----------------------------------------
+// Instruction Memory Region  (region_imem)
+//----------------------------------------
+
+  localparam IMEM_RAM_ADDR_W   = RAM_ADDR_W;
+  localparam IMEM_RAM_DATA_W   = RAM_DATA_W;
+  localparam IMEM_RAM_FPGA_IMG = "image.hex";
+
+  nanosoc_region_imem #(
+    .SYS_ADDR_W        (SYS_ADDR_W),
+    .SYS_DATA_W        (SYS_DATA_W),
+    .IMEM_RAM_ADDR_W   (IMEM_RAM_ADDR_W),
+    .IMEM_RAM_DATA_W   (IMEM_RAM_DATA_W),
+    .IMEM_RAM_FPGA_IMG (IMEM_RAM_FPGA_IMG)
+  ) u_nanosoc_region_imem (
+    .HCLK      (HCLK),
+    .HRESETn   (HRESETn),
+    .HSEL      (HSEL_imem),
+    .HADDR     (HADDR_imem),
+    .HTRANS    (HTRANS_imem),
+    .HSIZE     (HSIZE_imem),
+    .HPROT     (HPROT_imem),
+    .HWRITE    (HWRITE_imem),
+    .HREADY    (HREADYMUX_imem),
+    .HWDATA    (HWDATA_imem),
+    .HREADYOUT (HREADYOUTS_imem),
+    .HRESP     (HRESPS_imem),
+    .HRDATA    (HRDATA_imem)
+  );
+  
+//----------------------------------------
+// Data Memory Region  (region_dmem)
+//----------------------------------------
+
+  localparam DMEM_RAM_ADDR_W   = RAM_ADDR_W;
+  localparam DMEM_RAM_DATA_W   = RAM_DATA_W;
+
+  nanosoc_region_dmem #(
+    .SYS_ADDR_W        (SYS_ADDR_W),
+    .SYS_DATA_W        (SYS_DATA_W),
+    .DMEM_RAM_ADDR_W   (DMEM_RAM_ADDR_W),
+    .DMEM_RAM_DATA_W   (DMEM_RAM_DATA_W)
+  ) u_nanosoc_region_dmem (
+    .HCLK      (HCLK),
+    .HRESETn   (HRESETn),
+    .HSEL      (HSEL_dmem),
+    .HADDR     (HADDR_dmem),
+    .HTRANS    (HTRANS_dmem),
+    .HSIZE     (HSIZE_dmem),
+    .HPROT     (HPROT_dmem),
+    .HWRITE    (HWRITE_dmem),
+    .HREADY    (HREADYMUX_dmem),
+    .HWDATA    (HWDATA_dmem),
+    .HREADYOUT (HREADYOUTS_dmem),
+    .HRESP     (HRESPS_dmem),
+    .HRDATA    (HRDATA_dmem)
+  );
+
+//----------------------------------------
+// System Peripheral Region  (region_sysio)
+//----------------------------------------
+
+//---------------------------------------------
+// Expansion SRAM Low Region  (region_expram_l)
+//---------------------------------------------
+
+//----------------------------------------------
+// Expansion SRAM High Region  (region_expram_h)
+//----------------------------------------------
+
 // ************************************************
 // ************************************************
 //
@@ -842,7 +938,7 @@ localparam    CORTEX_M0 = 1;
   assign exp_irq2 = exp_irq[2];
   assign exp_irq3 = exp_irq[3];
 
-  //----------------------------------------
+//----------------------------------------
 // Expansion Region "exp" instance
 //----------------------------------------
 
@@ -895,150 +991,16 @@ nanosoc_exp_wrapper #(
 
   assign   HRUSER_exp = 2'b00;
   
-// ************************************************
-   
-//----------------------------------------
-// Boot ROM "rom1" firmware
-// mapped 0x10000000-0x1fffffff
-// and on REMAP[0]
-// mapped 0x00000000-0x0000ffff
-//----------------------------------------
-
-nanosoc_ahb_bootrom
-//  #(.AW(10)  ) // 1K bytes ROM
-   u_ahb_bootloader (
-    .HCLK             (HCLK),
-    .HRESETn          (HRESETn),
-    .HSEL             (HSEL_rom1),
-    .HADDR            (HADDR_rom1[ 9:0]),
-    .HTRANS           (HTRANS_rom1),
-    .HSIZE            (HSIZE_rom1),
-    .HWRITE           (HWRITE_rom1),
-    .HWDATA           (HWDATA_rom1),
-    .HREADY           (HREADYMUX_rom1),
-    .HREADYOUT        (HREADYOUT_rom1),
-    .HRDATA           (HRDATA_rom1),
-    .HRESP            (HRESP_rom1)
-  );
-
-//----------------------------------------
-// CODE/DATA "ram2"
-// mapped 0x20000000-0x2fffffff
-//----------------------------------------
-
-localparam AWRAM2 = ADDR_WIDTH_RAM; // Address width - to match RAM instance size
-  wire  [AWRAM2-3:0] addr_ram2;
-  wire    [31:0] wdata_ram2;
-  wire    [31:0] rdata_ram2;
-  wire     [3:0] wen_ram2;
-  wire           cs_ram2;
-
-  // AHB to SRAM bridge
-  cmsdk_ahb_to_sram #(.AW(AWRAM2)) u_ahb_to_sram2
-  (
-    // AHB Inputs
-    .HCLK       (HCLK),
-    .HRESETn    (HRESETn),
-    .HSEL       (HSEL_ram2),  // AHB inputs
-    .HADDR      (HADDR_ram2[AWRAM2-1:0]),
-    .HTRANS     (HTRANS_ram2),
-    .HSIZE      (HSIZE_ram2),
-    .HWRITE     (HWRITE_ram2),
-    .HWDATA     (HWDATA_ram2),
-    .HREADY     (HREADYMUX_ram2),
-
-    // AHB Outputs
-    .HREADYOUT  (HREADYOUT_ram2), // Outputs
-    .HRDATA     (HRDATA_ram2),
-    .HRESP      (HRESP_ram2),
-
-   // SRAM input
-    .SRAMRDATA  (rdata_ram2),
-   // SRAM Outputs
-    .SRAMADDR   (addr_ram2),
-    .SRAMWDATA  (wdata_ram2),
-    .SRAMWEN    (wen_ram2),
-    .SRAMCS     (cs_ram2)
-   );
-
-  // SRAM model
-//  cmsdk_fpga_sram #(.AW(AWRAM2)) u_fpga_ram2
-  cmsdk_fpga_rom #(.AW(AWRAM2), .filename("image.hex") ) u_fpga_ram2
-   (
-   // SRAM Inputs
-    .CLK        (HCLK),
-    .ADDR       (addr_ram2),
-    .WDATA      (wdata_ram2),
-    .WREN       (wen_ram2),
-    .CS         (cs_ram2),
-   // SRAM Output
-    .RDATA      (rdata_ram2)
-   );
-
-
-//----------------------------------------
-// DATA "ram3" 
-// mapped 0x30000000-0x3fffffff
-//----------------------------------------
-
-localparam AWRAM3 = ADDR_WIDTH_RAM; // Address width - to match RAM instance size
-  wire  [AWRAM3-3:0] addr_ram3;
-  wire    [31:0] wdata_ram3;
-  wire    [31:0] rdata_ram3;
-  wire     [3:0] wen_ram3;
-  wire           cs_ram3;
-
-  // AHB to SRAM bridge
-  cmsdk_ahb_to_sram #(.AW(AWRAM3)) u_ahb_to_sram3
-  (
-    // AHB Inputs
-    .HCLK       (HCLK),
-    .HRESETn    (HRESETn),
-    .HSEL       (HSEL_ram3),  // AHB inputs
-    .HADDR      (HADDR_ram3[AWRAM3-1:0]),
-    .HTRANS     (HTRANS_ram3),
-    .HSIZE      (HSIZE_ram3),
-    .HWRITE     (HWRITE_ram3),
-    .HWDATA     (HWDATA_ram3),
-    .HREADY     (HREADYMUX_ram3),
-
-    // AHB Outputs
-    .HREADYOUT  (HREADYOUT_ram3), // Outputs
-    .HRDATA     (HRDATA_ram3),
-    .HRESP      (HRESP_ram3),
-
-   // SRAM input
-    .SRAMRDATA  (rdata_ram3),
-   // SRAM Outputs
-    .SRAMADDR   (addr_ram3),
-    .SRAMWDATA  (wdata_ram3),
-    .SRAMWEN    (wen_ram3),
-    .SRAMCS     (cs_ram3)
-   );
-
-  // SRAM model
-  cmsdk_fpga_sram #(.AW(AWRAM3)) u_fpga_ram3
-   (
-   // SRAM Inputs
-    .CLK        (HCLK),
-    .ADDR       (addr_ram3),
-    .WDATA      (wdata_ram3),
-    .WREN       (wen_ram3),
-    .CS         (cs_ram3),
-   // SRAM Output
-    .RDATA      (rdata_ram3)
-   );
-
 //----------------------------------------
 // Expansion/DMA "ram8,ram9" RAM instances
 //----------------------------------------
 
 localparam AWRAM8 = ADDR_WIDTH_RAM; // Address width - to match RAM instance size
-  wire  [AWRAM8-3:0] addr_ram8;
-  wire    [31:0] wdata_ram8;
-  wire    [31:0] rdata_ram8;
-  wire     [3:0] wen_ram8;
-  wire           cs_ram8;
+  wire  [AWRAM8-3:0] addr_expram_l;
+  wire    [31:0] wdata_expram_l;
+  wire    [31:0] rdata_expram_l;
+  wire     [3:0] wen_expram_l;
+  wire           cs_expram_l;
 
   // AHB to SRAM bridge
   cmsdk_ahb_to_sram #(.AW(AWRAM8)) u_ahb_to_sram8
@@ -1046,49 +1008,49 @@ localparam AWRAM8 = ADDR_WIDTH_RAM; // Address width - to match RAM instance siz
     // AHB Inputs
     .HCLK       (HCLK),
     .HRESETn    (HRESETn),
-    .HSEL       (HSEL_ram8),  // AHB inputs
-    .HADDR      (HADDR_ram8[AWRAM8-1:0]),
-    .HTRANS     (HTRANS_ram8),
-    .HSIZE      (HSIZE_ram8),
-    .HWRITE     (HWRITE_ram8),
-    .HWDATA     (HWDATA_ram8),
-    .HREADY     (HREADYMUX_ram8),
+    .HSEL       (HSEL_expram_l),  // AHB inputs
+    .HADDR      (HADDR_expram_l[AWRAM8-1:0]),
+    .HTRANS     (HTRANS_expram_l),
+    .HSIZE      (HSIZE_expram_l),
+    .HWRITE     (HWRITE_expram_l),
+    .HWDATA     (HWDATA_expram_l),
+    .HREADY     (HREADYMUX_expram_l),
 
     // AHB Outputs
-    .HREADYOUT  (HREADYOUT_ram8), // Outputs
-    .HRDATA     (HRDATA_ram8),
-    .HRESP      (HRESP_ram8),
+    .HREADYOUT  (HREADYOUT_expram_l), // Outputs
+    .HRDATA     (HRDATA_expram_l),
+    .HRESP      (HRESP_expram_l),
 
    // SRAM input
-    .SRAMRDATA  (rdata_ram8),
+    .SRAMRDATA  (rdata_expram_l),
    // SRAM Outputs
-    .SRAMADDR   (addr_ram8),
-    .SRAMWDATA  (wdata_ram8),
-    .SRAMWEN    (wen_ram8),
-    .SRAMCS     (cs_ram8)
+    .SRAMADDR   (addr_expram_l),
+    .SRAMWDATA  (wdata_expram_l),
+    .SRAMWEN    (wen_expram_l),
+    .SRAMCS     (cs_expram_l)
    );
 
   // SRAM model
-  cmsdk_fpga_sram #(.AW(AWRAM8)) u_fpga_ram8
+  cmsdk_fpga_sram #(.AW(AWRAM8)) u_fpga_expram_l
    (
    // SRAM Inputs
     .CLK        (HCLK),
-    .ADDR       (addr_ram8),
-    .WDATA      (wdata_ram8),
-    .WREN       (wen_ram8),
-    .CS         (cs_ram8),
+    .ADDR       (addr_expram_l),
+    .WDATA      (wdata_expram_l),
+    .WREN       (wen_expram_l),
+    .CS         (cs_expram_l),
    // SRAM Output
-    .RDATA      (rdata_ram8)
+    .RDATA      (rdata_expram_l)
    );
 
 // instandiate expansion RAM instance to appear at 0x90000000
 
-localparam AWRAM9 = ADDR_WIDTH_RAM; // Address width - to match RAM instance size
-  wire  [AWRAM9-3:0] addr_ram9;
-  wire    [31:0] wdata_ram9;
-  wire    [31:0] rdata_ram9;
-  wire     [3:0] wen_ram9;
-  wire           cs_ram9;
+  localparam AWRAM9 = ADDR_WIDTH_RAM; // Address width - to match RAM instance size
+  wire  [AWRAM9-3:0] addr_expram_h;
+  wire    [31:0] wdata_expram_h;
+  wire    [31:0] rdata_expram_h;
+  wire     [3:0] wen_expram_h;
+  wire           cs_expram_h;
 
   // AHB to SRAM bridge
   cmsdk_ahb_to_sram #(.AW(AWRAM9)) u_ahb_to_sram9
@@ -1096,50 +1058,50 @@ localparam AWRAM9 = ADDR_WIDTH_RAM; // Address width - to match RAM instance siz
     // AHB Inputs
     .HCLK       (HCLK),
     .HRESETn    (HRESETn),
-    .HSEL       (HSEL_ram9),  // AHB inputs
-    .HADDR      (HADDR_ram9[AWRAM9-1:0]),
-    .HTRANS     (HTRANS_ram9),
-    .HSIZE      (HSIZE_ram9),
-    .HWRITE     (HWRITE_ram9),
-    .HWDATA     (HWDATA_ram9),
-    .HREADY     (HREADYMUX_ram9),
+    .HSEL       (HSEL_expram_h),  // AHB inputs
+    .HADDR      (HADDR_expram_h[AWRAM9-1:0]),
+    .HTRANS     (HTRANS_expram_h),
+    .HSIZE      (HSIZE_expram_h),
+    .HWRITE     (HWRITE_expram_h),
+    .HWDATA     (HWDATA_expram_h),
+    .HREADY     (HREADYMUX_expram_h),
 
     // AHB Outputs
-    .HREADYOUT  (HREADYOUT_ram9), // Outputs
-    .HRDATA     (HRDATA_ram9),
-    .HRESP      (HRESP_ram9),
+    .HREADYOUT  (HREADYOUT_expram_h), // Outputs
+    .HRDATA     (HRDATA_expram_h),
+    .HRESP      (HRESP_expram_h),
 
    // SRAM input
-    .SRAMRDATA  (rdata_ram9),
+    .SRAMRDATA  (rdata_expram_h),
    // SRAM Outputs
-    .SRAMADDR   (addr_ram9),
-    .SRAMWDATA  (wdata_ram9),
-    .SRAMWEN    (wen_ram9),
-    .SRAMCS     (cs_ram9)
+    .SRAMADDR   (addr_expram_h),
+    .SRAMWDATA  (wdata_expram_h),
+    .SRAMWEN    (wen_expram_h),
+    .SRAMCS     (cs_expram_h)
    );
 
   // SRAM model
-  cmsdk_fpga_sram #(.AW(AWRAM9)) u_fpga_ram9
+  cmsdk_fpga_sram #(.AW(AWRAM9)) u_fpga_expram_h
    (
    // SRAM Inputs
     .CLK        (HCLK),
-    .ADDR       (addr_ram9),
-    .WDATA      (wdata_ram9),
-    .WREN       (wen_ram9),
-    .CS         (cs_ram9),
+    .ADDR       (addr_expram_h),
+    .WDATA      (wdata_expram_h),
+    .WREN       (wen_expram_h),
+    .CS         (cs_expram_h),
    // SRAM Output
-    .RDATA      (rdata_ram9)
+    .RDATA      (rdata_expram_h)
    );
 
-//    assign   [31:0] HRDATA_ram8 = 32'hdead8888; // Read data bus
-//    assign          HREADYOUT_ram8 = 1'b1;      // HREADY feedback
-//    assign          HRESP_ram8 = 1'b0;          // Transfer response
-//    assign    [1:0] HRUSER_ram8 = 00;            // Read-data USER signals
+//    assign   [31:0] HRDATA_expram_l = 32'hdead8888; // Read data bus
+//    assign          HREADYOUT_expram_l = 1'b1;      // HREADY feedback
+//    assign          HRESP_expram_l = 1'b0;          // Transfer response
+//    assign    [1:0] HRUSER_expram_l = 00;            // Read-data USER signals
 //
-//    assign   [31:0] HRDATA_ram9 = 32'hdead9999; // Read data bus
-//    assign          HREADYOUT_ram9 = 1'b1;      // HREADY feedback
-//    assign          HRESP_ram9 = 1'b0;          // Transfer response
-//    assign    [1:0] HRUSER_ram9 = 00;            // Read-data USER signals
+//    assign   [31:0] HRDATA_expram_h = 32'hdead9999; // Read data bus
+//    assign          HREADYOUT_expram_h = 1'b1;      // HREADY feedback
+//    assign          HRESP_expram_h = 1'b0;          // Transfer response
+//    assign    [1:0] HRUSER_expram_h = 00;            // Read-data USER signals
 
 
 //----------------------------------------
@@ -1243,10 +1205,10 @@ localparam AWRAM9 = ADDR_WIDTH_RAM; // Address width - to match RAM instance siz
   
   wire        [7:0]  ft_clkdiv = 8'd03;
 
-  nanosoc_ft1248_stream_io_v1_0 #
-   (.FT1248_WIDTH (1),
-    .FT1248_CLKON(0) )
-    u_ftdio_com    (
+  nanosoc_ft1248_stream_io_v1_0 #(
+    .FT1248_WIDTH (1),
+    .FT1248_CLKON (0) 
+  ) u_ftdio_com (
     .clk              (HCLK),
     .resetn           (HRESETn),
     .ft_clkdiv        (ft_clkdiv    ),
@@ -1289,10 +1251,11 @@ localparam AWRAM9 = ADDR_WIDTH_RAM; // Address width - to match RAM instance siz
   ///generate if (INCLUDE_DMA != 0) begin : gen_dma
   // DMA controller present
   pl230_udma u_pl230_udma (
-  // Clock and Reset
+    // Clock and Reset
     .hclk          (HCLK),
     .hresetn       (HRESETn),
-  // DMA Control
+    
+    // DMA Control
     .dma_req       (dma230_req),
     .dma_sreq      (dma230_req),
     .dma_waitonreq (dma230_tie0),
@@ -1300,7 +1263,8 @@ localparam AWRAM9 = ADDR_WIDTH_RAM; // Address width - to match RAM instance siz
     .dma_active    (),
     .dma_done      (dma230_done_ch),
     .dma_err       (dmac_err),
-  // AHB-Lite Master Interface
+    
+    // AHB-Lite Master Interface
     .hready        (HREADY_dma),
     .hresp         (HRESP_dma),
     .hrdata        (HRDATA_dma),
@@ -1312,7 +1276,8 @@ localparam AWRAM9 = ADDR_WIDTH_RAM; // Address width - to match RAM instance siz
     .hmastlock     (HMASTLOCK_dma),
     .hprot         (HPROT_dma),
     .hwdata        (HWDATA_dma),
-  // APB Slave Interface
+    
+    // APB Slave Interface
     .pclken        (PCLKEN),
     .psel          (exp15_psel),
     .pen           (exp_penable),
@@ -1404,8 +1369,7 @@ localparam AWRAM9 = ADDR_WIDTH_RAM; // Address width - to match RAM instance siz
 
 
   // Cortex-M0 integration level
-  nanosoc_cpu
-  u_nanosoc_cpu (
+  nanosoc_cpu u_nanosoc_cpu (
     .HCLK             (gated_hclk), //HCLK),
     .FCLK             (FCLK),
     .DCLK             (DCLK),
@@ -1468,41 +1432,31 @@ localparam AWRAM9 = ADDR_WIDTH_RAM; // Address width - to match RAM instance siz
 
   assign p0_out_nen     = ~p0_out_en;     //active low pad drive option
   assign p1_out_nen_mux = ~p1_out_en_mux; //active low pad drive option
-  
-
-  // Common AHB signals
-  wire  [31:0]       HADDR;
-  wire  [1:0]        HTRANS;
-  wire  [2:0]        HSIZE;
-  wire               HWRITE;
-  wire  [31:0]       HWDATA;
-  wire               HREADY;
 
   localparam BASEADDR_GPIO0       = 32'h4001_0000;
   localparam BASEADDR_GPIO1       = 32'h4001_1000;
   localparam BASEADDR_SYSROMTABLE = 32'hf000_0000;
 
-   nanosoc_sysio
-    u_nanosoc_sysio (
+  nanosoc_sysio u_nanosoc_sysio (
     .FCLK             (FCLK         ), // free-running clock
     .PORESETn         (PORESETn     ), // Power-On-Reset (active-low)
     .TESTMODE         (TESTMODE     ), // Test-mode override for testability
     .HCLK             (HCLK         ), // AHB interconnect clock
     .HRESETn          (HRESETn      ), // AHB interconnect reset (active-low)
     // Common AHB signals
-    .HSEL             (HSEL_sys     ),
-    .HADDR            (HADDR_sys    ),
-    .HBURST           (HBURST_sys   ),
-    .HMASTLOCK        (HMASTLOCK_sys),
-    .HPROT            (HPROT_sys    ),
-    .HSIZE            (HSIZE_sys    ),
-    .HTRANS           (HTRANS_sys   ),
-    .HWDATA           (HWDATA_sys   ),
-    .HWRITE           (HWRITE_sys   ),
-    .HREADY           (HREADYMUX_sys),
-    .HRDATA           (HRDATA_sys   ),
-    .HRESP            (HRESP_sys    ),
-    .HREADYOUT        (HREADYOUT_sys),
+    .HSEL             (HSEL_sysio     ),
+    .HADDR            (HADDR_sysio    ),
+    .HBURST           (HBURST_sysio   ),
+    .HMASTLOCK        (HMASTLOCK_sysio),
+    .HPROT            (HPROT_sysio    ),
+    .HSIZE            (HSIZE_sysio    ),
+    .HTRANS           (HTRANS_sysio   ),
+    .HWDATA           (HWDATA_sysio   ),
+    .HWRITE           (HWRITE_sysio   ),
+    .HREADY           (HREADYMUX_sysio),
+    .HRDATA           (HRDATA_sysio   ),
+    .HRESP            (HRESP_sysio    ),
+    .HREADYOUT        (HREADYOUT_sysio),
     // APB clocking
     .PCLK             (PCLK         ),
     .PCLKG            (PCLKG        ),
@@ -1594,8 +1548,7 @@ localparam AWRAM9 = ADDR_WIDTH_RAM; // Address width - to match RAM instance siz
   assign        swdio_e       =  SWDOEN;
   assign        swdio_z       =  !SWDOEN;
 
-  nanosoc_mcu_pin_mux
-    u_pin_mux (
+  nanosoc_mcu_pin_mux u_pin_mux (
     // UART
     .uart0_rxd        (uart0_rxd),
     .uart0_txd        (uart0_txd),
diff --git a/system/src/nanosoc_chip/chip/verilog/nanosoc_chip_new.v b/system/src/nanosoc_chip/chip/verilog/nanosoc_chip_new.v
new file mode 100644
index 0000000000000000000000000000000000000000..8e4958d7b5938257da5f140821b27f98e2ff9fc2
--- /dev/null
+++ b/system/src/nanosoc_chip/chip/verilog/nanosoc_chip_new.v
@@ -0,0 +1,835 @@
+module nanosoc_chip #(
+    parameter SYS_ADDR_W      = 32,
+    parameter SYS_DATA_W      = 32,
+    parameter RAM_ADDR_W      = 14,
+    parameter RAM_DATA_W      = 32,
+    parameter DMA_CHANNEL_NUM = 2,
+    parameter CLKGATE_PRESENT = 0
+  )(
+  `ifdef POWER_PINS
+    inout  wire          VDDIO,
+    inout  wire          VSSIO,
+    inout  wire          VDD,
+    inout  wire          VSS,
+  `endif
+    input  wire          xtal_clk_i,
+    output wire          xtal_clk_o,
+    input  wire          nrst_i,
+    input  wire  [15:0]  p0_i, // level-shifted input from pad
+    output wire  [15:0]  p0_o, // output port drive
+    output wire  [15:0]  p0_e, // active high output drive enable (pad tech dependent)
+    output wire  [15:0]  p0_z, // active low output drive enable (pad tech dependent)
+    input  wire  [15:0]  p1_i, // level-shifted input from pad
+    output wire  [15:0]  p1_o, // output port drive
+    output wire  [15:0]  p1_e, // active high output drive enable (pad tech dependent)
+    output wire  [15:0]  p1_z, // active low output drive enable (pad tech dependent)
+    input  wire          swdio_i,
+    output wire          swdio_o,
+    output wire          swdio_e,
+    output wire          swdio_z,
+    input  wire          swdclk_i
+  );
+
+  //------------------------------------
+  // CMSDK internal wire naming preserved
+  //------------------------------------
+
+  wire          xtal_clk_in;
+  wire          xtal_clk_out;
+  wire          pll_clk;
+  wire          CLK;
+  
+  assign        xtal_clk_in = xtal_clk_i;
+  assign        xtal_clk_o = xtal_clk_out;
+  wire          nrst_in = nrst_i;
+  
+  wire  [15:0]  p0_in;             // level-shifted input from pad
+  wire  [15:0]  p0_out;            // output port drive
+  wire  [15:0]  p0_out_en;         // active high output drive enable (pad tech dependent)
+  wire  [15:0]  p0_out_nen;        // active low output drive enable (pad tech dependent)
+
+  wire  [15:0]  p1_in;            // level-shifted input from pad
+  wire  [15:0]  p1_out;           // output port drive
+  wire  [15:0]  p1_out_en;        // active high output drive enable (pad tech dependent)
+  wire  [15:0]  p1_out_nen;       // active low output drive enable (pad tech dependent)
+  wire  [15:0]  p1_in_mux;        // level-shifted input from pad
+  wire  [15:0]  p1_out_mux;       // output port drive
+  wire  [15:0]  p1_out_en_mux;    // active high output drive enable (pad tech dependent)
+  wire  [15:0]  p1_out_nen_mux;   // active low output drive enable (pad tech dependent)
+
+  wire          swdio_in;
+  wire          swdio_out;
+  wire          swdio_out_en;
+  wire          swdio_out_nen;
+  wire          swdclk_in;
+
+  wire          ft_clk_o;
+  wire          ft_ssn_o;
+  wire          ft_miso_i;
+  wire          ft_miosio_o;
+  wire          ft_miosio_e;
+  wire          ft_miosio_z;
+  wire          ft_miosio_i;
+
+ // --------------------------------------------------------------------------------
+ // Port-0 IO pad driver mapping
+ // --------------------------------------------------------------------------------
+
+  assign        p0_in = p0_i;      // level-shifted input from pad
+  assign        p0_o = p0_out;     // output port drive
+  assign        p0_e = p0_out_en;  // active high output drive enable (pad tech dependent)
+  assign        p0_z = p0_out_nen; // active low output drive enable (pad tech dependent)
+
+
+ // --------------------------------------------------------------------------------
+ // Port-1 IO pad driver mapping
+ // --------------------------------------------------------------------------------
+
+  assign        ft_miso_i    = p1_i[0]; // FT_MISO INPUT pad configuration
+  assign        p1_in_mux[0] = p1_i[0];
+  assign        p1_o[0]      = 1'b0;    
+  assign        p1_e[0]      = 1'b0;
+  assign        p1_z[0]      = 1'b1;
+  
+  assign        p1_in_mux[1] = p1_i[1]; // FT_CLK OUTPUT pad configuration
+  assign        p1_o[1]      = ft_clk_o;    
+  assign        p1_e[1]      = 1'b1; 
+  assign        p1_z[1]      = 1'b0;
+
+  assign        ft_miosio_i  = p1_i[2]; // FT_MIOSIO INOUT pad configuration
+  assign        p1_in_mux[2] = p1_i[2];
+  assign        p1_o[2]      = ft_miosio_o;    
+  assign        p1_e[2]      = ft_miosio_e;
+  assign        p1_z[2]      = ft_miosio_z;
+
+  assign        p1_in_mux[3] = p1_i[3]; // FT_SSN OUTPUT pad configuration
+  assign        p1_o[3]      = ft_ssn_o;    
+  assign        p1_e[3]      = 1'b1; 
+  assign        p1_z[3]      = 1'b0;
+
+  assign        p1_in_mux[15:4] = p1_i[15:4]; // IO MUX controlled bidirectionals
+  assign        p1_o[15:4]      = p1_out_mux[15:4];    
+  assign        p1_e[15:4]      = p1_out_en_mux[15:4];
+  assign        p1_z[15:4]      = p1_out_nen_mux[15:4];
+
+
+  wire tiehi = 1'b1;
+  wire tielo = 1'b0;
+
+  //----------------------------------------
+  // SoC Clock and Reset Management
+  //----------------------------------------
+  
+  wire         PORESETn;// Power on reset
+  wire         HRESETn; // AHB reset
+  wire         PRESETn; // APB and peripheral reset
+  wire         DBGRESETn; // Debug system reset
+  wire         FCLK;    // Free running system clock
+  wire         HCLK;    // System clock from PMU
+  wire         DCLK;
+  wire         SCLK;
+  wire         PCLK;    // Peripheral clock
+  wire         PCLKG;   // Gated PCLK for APB
+  wire         PCLKEN;  // Clock divider for AHB to APB bridge
+  wire         APBACTIVE;
+  
+  // event signals
+  wire         TXEV;
+  wire         RXEV;
+  wire         nTRST;           // JTAG - Test reset (active low)
+  wire         SWDI;            // JTAG/SWD - TMS / SWD data input
+  wire         SWCLK;           // JTAG/SWD - TCK / SWCLK
+  wire         SWDO;            // SWD - SWD data output
+  wire         SWDOEN;          // SWD - SWD data output enable
+  wire         SYSRESETREQ;    // processor system reset request
+  wire         WDOGRESETREQ;   // watchdog system reset request
+  wire         HRESETREQ;      // Combined system reset request
+  wire         NANOSOC_SYSRESETREQ; // Combined system reset request
+  wire         clk_ctrl_sys_reset_req;
+  wire         PMUHRESETREQ;
+  wire         PMUDBGRESETREQ;
+  wire         LOCKUP;
+  wire         LOCKUPRESET;
+  wire         SLEEPING;
+  wire         GATEHCLK;         // Processor status - safe to gate HCLK
+  wire         WAKEUP;           // Wake up request from WIC
+  wire         WICENREQ;         // WIC enable request from PMU
+  wire         WICENACK;         // WIC enable ack to PMU
+  wire         PMUENABLE;
+  wire         CDBGPWRUPREQ;     // Debug Power Up request to PMU
+  wire         CDBGPWRUPACK;     // Debug Power Up ACK from PMU
+  wire         SLEEPHOLDREQn;    // Sleep extension request from PMU
+  wire         SLEEPHOLDACKn;    // Sleep extension request to PMU
+  wire         SYSPWRDOWNACK;
+  wire         DBGPWRDOWNACK;
+  wire         SYSPWRDOWN;
+  wire         DBGPWRDOWN;
+  wire         SYSISOLATEn;
+  wire         SYSRETAINn;
+  wire         DBGISOLATEn;
+  wire         SLEEPDEEP;
+  wire         ADPRESETREQ;
+  // Scan test dummy signals; not connected until scan insertion
+  wire          TESTMODE;        // Test mode enable signal (override synchronizers etc)
+  wire          SCANENABLE;      // Scan enable signal
+  wire          SCANINHCLK;      // HCLK scan input
+  wire          SCANOUTHCLK;     // Scan Chain wire  
+
+// not required for FPGA
+  assign        TESTMODE = 1'b0; 
+  assign        SCANENABLE = 1'b0; 
+  assign        SCANINHCLK = 1'b0; 
+  assign        SCANOUTHCLK = 1'b0;
+
+// Technology-specific PLL/Frequecy synthesizer would generate
+// CLK, FCLK (Free running system clock) from xtal_clk_in
+
+  assign  pll_clk = xtal_clk_in; // default to no PLL
+  assign  CLK = (TESTMODE) ? xtal_clk_in : pll_clk;
+  assign  HCLK  = FCLK;
+  
+
+//?    assign   HCLKSYS  = (INCLUDE_DMA!=0) ? SCLK : HCLK;
+  
+   // System Reset request can be from processor or watchdog
+   // or when lockup happens and the control flag is set.
+   assign  NANOSOC_SYSRESETREQ = SYSRESETREQ | WDOGRESETREQ |
+                               ADPRESETREQ |
+                               (LOCKUP & LOCKUPRESET);
+   assign clk_ctrl_sys_reset_req = PMUHRESETREQ | HRESETREQ;
+
+  // Clock controller to generate reset and clock signals
+  nanosoc_mcu_clkctrl #(
+    .CLKGATE_PRESENT (CLKGATE_PRESENT)
+  ) u_nanosoc_mcu_clkctrl (
+     // inputs
+    .XTAL1            (CLK),
+    .NRST             (nrst_in),
+
+    .APBACTIVE        (APBACTIVE),
+    .SLEEPING         (SLEEPING),
+    .SLEEPDEEP        (SLEEPDEEP),
+    .LOCKUP           (LOCKUP),
+    .LOCKUPRESET      (LOCKUPRESET),
+    .SYSRESETREQ      (clk_ctrl_sys_reset_req),
+    .DBGRESETREQ      (PMUDBGRESETREQ),
+    .CGBYPASS         (TESTMODE),
+    .RSTBYPASS        (TESTMODE),
+
+     // outputs
+    .XTAL2            (xtal_clk_out),
+    .FCLK             (FCLK),
+    .PCLK             (PCLK),
+    .PCLKG            (PCLKG),
+    .PCLKEN           (PCLKEN),
+//?`ifdef CORTEX_M0DESIGNSTART
+//?    .PORESETn         (PORESETn),  // for cm0 designstart
+//?    .HRESETn          (HRESETn),   // for cm0 designstart
+//?`endif
+    .PRESETn          (PRESETn)
+    );
+
+    wire   gated_hclk;
+    wire   gated_dclk;
+    wire   gated_sclk;
+
+  cortexm0_rst_ctl u_rst_ctl (
+     // Inputs
+    .GLOBALRESETn      (nrst_in),
+    .FCLK              (FCLK),
+    .HCLK              (gated_hclk),
+    .DCLK              (gated_dclk),
+    .SYSRESETREQ       (NANOSOC_SYSRESETREQ),
+    .PMUHRESETREQ      (PMUHRESETREQ),
+    .PMUDBGRESETREQ    (PMUDBGRESETREQ),
+    .RSTBYPASS         (TESTMODE),
+    .SE                (SCANENABLE),
+
+    // Outputs
+    .PORESETn          (PORESETn),
+    .HRESETn           (HRESETn),
+    .DBGRESETn         (DBGRESETn),
+    .HRESETREQ         (HRESETREQ)
+  );
+
+
+  // Cortex-M0 Power management unit
+  cortexm0_pmu u_cortexm0_pmu ( // Inputs
+    .FCLK             (FCLK),
+    .PORESETn         (PORESETn),
+    .HRESETREQ        (NANOSOC_SYSRESETREQ), // from processor / watchdog
+    .PMUENABLE        (PMUENABLE),       // from System Controller
+    .WICENACK         (WICENACK),        // from WIC in integration
+
+    .WAKEUP           (WAKEUP),          // from WIC in integration
+    .CDBGPWRUPREQ     (CDBGPWRUPREQ),
+
+    .SLEEPDEEP        (SLEEPDEEP),
+    .SLEEPHOLDACKn    (SLEEPHOLDACKn),
+    .GATEHCLK         (GATEHCLK),
+    .SYSPWRDOWNACK    (SYSPWRDOWNACK),
+    .DBGPWRDOWNACK    (DBGPWRDOWNACK),
+    .CGBYPASS         (TESTMODE),
+
+    // Outputs
+    .HCLK             (gated_hclk),
+    .DCLK             (gated_dclk),
+    .SCLK             (gated_sclk),
+    .WICENREQ         (WICENREQ),
+    .CDBGPWRUPACK     (CDBGPWRUPACK),
+    .SYSISOLATEn      (SYSISOLATEn),
+    .SYSRETAINn       (SYSRETAINn),
+    .SYSPWRDOWN       (SYSPWRDOWN),
+    .DBGISOLATEn      (DBGISOLATEn),
+    .DBGPWRDOWN       (DBGPWRDOWN),
+    .SLEEPHOLDREQn    (SLEEPHOLDREQn),
+    .PMUDBGRESETREQ   (PMUDBGRESETREQ),
+    .PMUHRESETREQ     (PMUHRESETREQ)
+  );
+
+  // Bypass clock gating cell in PMU if CLKGATE_PRESENT is 0
+  assign  HCLK = (CLKGATE_PRESENT==0) ? FCLK : gated_hclk;
+  assign  DCLK = (CLKGATE_PRESENT==0) ? FCLK : gated_dclk;
+  assign  SCLK = (CLKGATE_PRESENT==0) ? FCLK : gated_sclk;
+
+
+  // In this example system, power control takes place immediately.
+  // In a real circuit you might need to add delays in the next two
+  // signal assignments for correct operation.
+  assign   SYSPWRDOWNACK = SYSPWRDOWN;
+  assign   DBGPWRDOWNACK = DBGPWRDOWN;
+
+  wire              exp_penable;
+  wire              exp_pwrite;
+  wire  [11:0]      exp_paddr;
+  wire  [31:0]      exp_pwdata;
+  wire              exp12_psel;
+  wire              exp12_pready;
+  wire              exp12_pslverr;
+  wire     [31:0]   exp12_prdata;
+  wire              exp13_psel;
+  wire              exp13_pready;
+  wire              exp13_pslverr;
+  wire     [31:0]   exp13_prdata;
+  wire              exp14_psel;
+  wire              exp14_pready;
+  wire              exp14_pslverr;
+  wire     [31:0]   exp14_prdata;
+  wire              exp15_psel;
+  wire              exp15_pready;
+  wire              exp15_pslverr;
+  wire     [31:0]   exp15_prdata;
+
+
+  // internal peripheral signals
+  wire               uart0_rxd;
+  wire               uart0_txd;
+  wire               uart0_txen;
+  wire               uart1_rxd;
+  wire               uart1_txd;
+  wire               uart1_txen;
+  wire               uart2_rxd;
+  wire               uart2_txd;
+  wire               uart2_txen;
+  wire               timer0_extin;
+  wire               timer1_extin;
+
+  wire  [15:0]       p0_altfunc;
+
+  wire  [15:0]       p1_altfunc;
+
+  wire               exp_irq0;
+  wire               exp_irq1;
+  wire               exp_irq2;
+  wire               exp_irq3;
+  wire               exp_irqB;
+  wire               exp_irqC;
+  wire               exp_irqD;
+
+
+//----------------------------------------
+// ADP ASCII DEBUG PROTOCOL controller
+// AHB MANAGER 0
+//----------------------------------------
+
+  // -------------------------------
+  // ADP engine stream and control interfaces
+  // -------------------------------
+
+  wire        comio_tx_ready;
+  wire [7:0]  comio_tx_data8;
+  wire        comio_tx_valid;
+
+  wire        comio_rx_ready;
+  wire [7:0]  comio_rx_data8;
+  wire        comio_rx_valid;
+  
+  wire        stdio_tx_ready;
+  wire [7:0]  stdio_tx_data8;
+  wire        stdio_tx_valid;
+
+  wire        stdio_rx_ready;
+  wire [7:0]  stdio_rx_data8;
+  wire        stdio_rx_valid;
+
+  wire [7:0]  adp_gpo8;
+  wire [7:0]  adp_gpi8;
+
+  assign adp_gpi8 = adp_gpo8;
+  assign ADPRESETREQ = adp_gpo8[0];
+
+  // ADP debug controller present
+  nanosoc_adp_control_v1_0 u_adp_control (
+    // Clock and Reset
+    .ahb_hclk          (HCLK),
+    .ahb_hresetn       (HRESETn),
+    // DMA Control
+    .com_rx_tready     (comio_rx_ready),
+    .com_rx_tdata      (comio_rx_data8),
+    .com_rx_tvalid     (comio_rx_valid),
+    .com_tx_tready     (comio_tx_ready),
+    .com_tx_tdata      (comio_tx_data8),
+    .com_tx_tvalid     (comio_tx_valid),
+    .stdio_rx_tready   (stdio_rx_ready),
+    .stdio_rx_tdata    (stdio_rx_data8),
+    .stdio_rx_tvalid   (stdio_rx_valid),
+    .stdio_tx_tready   (stdio_tx_ready),
+    .stdio_tx_tdata    (stdio_tx_data8),
+    .stdio_tx_tvalid   (stdio_tx_valid),
+    .gpo8              (adp_gpo8),
+    .gpi8              (adp_gpi8),
+    
+    // AHB-Lite Master Interface
+    .ahb_hready        (HREADY_adp),
+    .ahb_hresp         (HRESP_adp),
+    .ahb_hrdata        (HRDATA_adp),
+    .ahb_htrans        (HTRANS_adp),
+    .ahb_hwrite        (HWRITE_adp),
+    .ahb_haddr         (HADDR_adp),
+    .ahb_hsize         (HSIZE_adp),
+    .ahb_hburst        (HBURST_adp),
+    .ahb_hmastlock     (HMASTLOCK_adp),
+    .ahb_hprot         (HPROT_adp),
+    .ahb_hwdata        (HWDATA_adp)
+  );
+    assign HAUSER_adp [1:0] = 2'b00;        // Address USER signals
+    assign HWUSER_adp [1:0] = 2'b00;        // Write-data USER signals
+
+   nanosoc_apb_usrt u_apb_usrt_com (
+    .PCLK              (PCLK),     // Peripheral clock
+    .PCLKG             (PCLKG),    // Gated PCLK for bus
+    .PRESETn           (PRESETn),  // Reset
+
+    .PSEL              (exp14_psel),     // APB interface inputs
+    .PADDR             (exp_paddr[11:2]),
+    .PENABLE           (exp_penable),
+    .PWRITE            (exp_pwrite),
+    .PWDATA            (exp_pwdata),
+
+    .PRDATA            (exp14_prdata),   // APB interface outputs
+    .PREADY            (exp14_pready),
+    .PSLVERR           (exp14_pslverr),
+
+    .ECOREVNUM         (4'h0),// Engineering-change-order revision bits
+
+    .TX_VALID_o        (stdio_rx_valid),
+    .TX_DATA8_o        (stdio_rx_data8),
+    .TX_READY_i        (stdio_rx_ready),
+
+    .RX_VALID_i        (stdio_tx_valid),
+    .RX_DATA8_i        (stdio_tx_data8),
+    .RX_READY_o        (stdio_tx_ready),
+
+    .TXINT             ( ),       // Transmit Interrupt
+    .RXINT             ( ),       // Receive  Interrupt
+    .TXOVRINT          ( ),    // Transmit Overrun Interrupt
+    .RXOVRINT          ( ),    // Receive  Overrun Interrupt
+    .UARTINT           ( ) // Combined Interrupt
+  );
+  
+  wire        [7:0]  ft_clkdiv = 8'd03;
+
+  nanosoc_ft1248_stream_io_v1_0 #(
+    .FT1248_WIDTH (1),
+    .FT1248_CLKON (0) 
+  ) u_ftdio_com (
+    .clk              (HCLK),
+    .resetn           (HRESETn),
+    .ft_clkdiv        (ft_clkdiv    ),
+    .ft_clk_o         (ft_clk_o     ),
+    .ft_ssn_o         (ft_ssn_o     ),
+    .ft_miso_i        (ft_miso_i    ),
+    .ft_miosio_o      (ft_miosio_o  ),
+    .ft_miosio_e      (ft_miosio_e  ),
+    .ft_miosio_z      (ft_miosio_z  ),
+    .ft_miosio_i      (ft_miosio_i  ),
+    .rxd_tready       (comio_tx_ready),
+    .rxd_tdata        (comio_tx_data8),
+    .rxd_tvalid       (comio_tx_valid),
+    .rxd_tlast        (1'b0),
+    .txd_tready       (comio_rx_ready),
+    .txd_tdata        (comio_rx_data8),
+    .txd_tvalid       (comio_rx_valid),
+    .txd_tlast        ( )
+  );
+ 
+ 
+//----------------------------------------
+// DIRECT MEMORY ACCESS controller
+// AHB MANAGER 1
+//----------------------------------------
+
+  // DMA interface not used in this example system
+  wire  [DMA_CHANNEL_NUM-1:0] dma230_req;  // tie off signal.
+  wire  [DMA_CHANNEL_NUM-1:0] dma230_tie0 = {DMA_CHANNEL_NUM{1'b0}};
+
+  assign dma230_req[0] = exp_drq_ip;
+  assign dma230_req[1] = exp_drq_op;
+
+
+  // DMA done per channel
+  wire  [DMA_CHANNEL_NUM-1:0] dma230_done_ch;
+  wire dmac_done;
+  wire dmac_err;
+  
+  ///generate if (INCLUDE_DMA != 0) begin : gen_dma
+  // DMA controller present
+  pl230_udma u_pl230_udma (
+    // Clock and Reset
+    .hclk          (HCLK),
+    .hresetn       (HRESETn),
+    
+    // DMA Control
+    .dma_req       (dma230_req),
+    .dma_sreq      (dma230_req),
+    .dma_waitonreq (dma230_tie0),
+    .dma_stall     (1'b0),
+    .dma_active    (),
+    .dma_done      (dma230_done_ch),
+    .dma_err       (dmac_err),
+    
+    // AHB-Lite Master Interface
+    .hready        (HREADY_dma),
+    .hresp         (HRESP_dma),
+    .hrdata        (HRDATA_dma),
+    .htrans        (HTRANS_dma),
+    .hwrite        (HWRITE_dma),
+    .haddr         (HADDR_dma),
+    .hsize         (HSIZE_dma),
+    .hburst        (HBURST_dma),
+    .hmastlock     (HMASTLOCK_dma),
+    .hprot         (HPROT_dma),
+    .hwdata        (HWDATA_dma),
+    
+    // APB Slave Interface
+    .pclken        (PCLKEN),
+    .psel          (exp15_psel),
+    .pen           (exp_penable),
+    .pwrite        (exp_pwrite),
+    .paddr         (exp_paddr[11:0]),
+    .pwdata        (exp_pwdata[31:0]),
+    .prdata        (exp15_prdata)
+  );
+
+    assign exp15_pready  = 1'b1;
+    assign exp15_pslverr = 1'b0;
+    assign dmac_done    = |dma230_done_ch; // OR all the DMA done together
+
+/*  end else begin : gen_no_pl230_udma
+    // DMA controller not present
+    assign HADDR_dma      [31:0] = 32'ha2a2a2a2; // Address bus
+    assign HTRANS_dma      [1:0] = 2'b00;        // Transfer type
+    assign HWRITE_dma            = 1'b0;         // Transfer direction
+    assign HSIZE_dma       [2:0] = 3'b010;       // Transfer size
+    assign HBURST_dma      [2:0] = 3'b001;       // Burst type
+    assign HPROT_dma       [3:0] = 4'b0010;      // Protection control
+    assign HWDATA_dma     [31:0] = 32'hd2d2d2d2; // Write data
+    assign HMASTLOCK_dma         = 1'b0;         // Locked Sequence
+    assign HAUSER_dma      [1:0] = 2'b00;        // Address USER signals
+    assign HWUSER_dma      [1:0] = 2'b00;        // Write-data USER signals
+
+    assign dmac_done = 1'b0;
+    assign dmac_err  = 1'b0;
+    assign exp15_pready  = 1'b1;
+    assign exp15_pslverr = 1'b0;
+    assign exp15_prdata  = 32'h00000000;
+    assign dma230_done_ch = {DMA_CHANNEL_NUM{1'b0}};
+
+  end endgenerate
+*/
+
+
+
+//----------------------------------------
+// CORTEX-M0 CPU controller
+// AHB MANAGER 3
+//----------------------------------------
+
+    wire         SYS_NMI;                   // Watchdog nin-maskable interrupt
+    wire  [31:0] SYS_APB_IRQ;               // APB subsystem IRQs
+    wire  [15:0] SYS_GPIO0_IRQ;             // GPIO-0 IRQs
+    wire  [15:0] SYS_GPIO1_IRQ;             // GPIO-1 IRQs
+
+    wire         gpio0_combintr;
+    wire         gpio1_combintr;
+    assign       gpio0_combintr = |SYS_GPIO0_IRQ[15:0];
+    assign       gpio1_combintr = |SYS_GPIO1_IRQ[15:0];
+
+    wire         intnmi_cm0;
+    wire  [31:0] intisr_cm0;
+
+// match interrupts to CMSDK for validation code reuse
+
+  assign intnmi_cm0        = SYS_NMI;
+  //assign intisr_cm0[ 5: 0] = SYS_APB_IRQ[ 5: 0];
+  assign intisr_cm0[ 0]    = exp_irq0;
+  assign intisr_cm0[ 1]    = exp_irq1;
+  assign intisr_cm0[ 2]    = exp_irq2;
+  assign intisr_cm0[ 3]    = exp_irq3;
+  assign intisr_cm0[ 5: 4] = SYS_APB_IRQ[ 5: 4];
+  assign intisr_cm0[ 6]    = SYS_APB_IRQ[ 6]   | gpio0_combintr;
+  assign intisr_cm0[ 7]    = SYS_APB_IRQ[ 7]   | gpio1_combintr;
+  assign intisr_cm0[14: 8] = SYS_APB_IRQ[14: 8];
+  assign intisr_cm0[15]    = SYS_APB_IRQ[15]   | dmac_done | dmac_err;
+  assign intisr_cm0[31:16] = SYS_APB_IRQ[31:16]| SYS_GPIO0_IRQ[15:0];
+    
+    assign HAUSER_cpu [1:0] = 2'b00;        // Address USER signals
+    assign HWUSER_cpu [1:0] = 2'b00;        // Write-data USER signals
+
+
+  // Cortex-M0 integration level
+  nanosoc_cpu u_nanosoc_cpu (
+    .HCLK             (gated_hclk), //HCLK),
+    .FCLK             (FCLK),
+    .DCLK             (DCLK),
+    .SCLK             (SCLK),
+    .HRESETn          (HRESETn),
+    .PORESETn         (PORESETn),
+    .DBGRESETn        (DBGRESETn),
+    .RSTBYPASS        (TESTMODE),
+    .DFTSE            (SCANENABLE),
+    // AHB port
+    .HADDR           (HADDR_cpu),
+    .HTRANS          (HTRANS_cpu),
+    .HWRITE          (HWRITE_cpu),
+    .HSIZE           (HSIZE_cpu),
+    .HBURST          (HBURST_cpu),
+    .HPROT           (HPROT_cpu),
+    .HWDATA          (HWDATA_cpu),
+    .HMASTLOCK       (HMASTLOCK_cpu),
+    .HREADY          (HREADY_cpu),
+//    .HAUSER          (HAUSER_cpu),
+//    .HWUSER          (HWUSER_cpu),
+    .HRDATA          (HRDATA_cpu),
+    .HRESP           (HRESP_cpu),
+//    .HRUSER          (HRUSER_cpu),
+  // sideband signals
+     .NMI            (intnmi_cm0),        // Non-maskable interrupt input
+     .IRQ            (intisr_cm0[31:0]),  // Interrupt request inputs
+     .TXEV           (TXEV),              // Event output (SEV executed)
+     .RXEV           (RXEV),              // Event input
+  // MISCELLANEOUS ---------------------
+     .SLEEPING       (SLEEPING),
+     .SLEEPDEEP      (SLEEPDEEP),
+     .WAKEUP         (WAKEUP       ), // Wake up request from WIC
+     .WICENREQ       (WICENREQ     ), // WIC enable request from PMU
+     .WICENACK       (WICENACK     ), // WIC enable ack to PMU
+     .SLEEPHOLDREQn  (SLEEPHOLDREQn),
+     .SLEEPHOLDACKn  (SLEEPHOLDACKn),
+     .CDBGPWRUPACK   (CDBGPWRUPACK),
+     .CDBGPWRUPREQ   (CDBGPWRUPREQ),
+     .LOCKUP         (LOCKUP),            // Core is locked-up
+     .GATEHCLK       (GATEHCLK),
+     .SYSRESETREQ    (SYSRESETREQ),       // System reset request
+     .WDOGRESETREQ   (WDOGRESETREQ),      // Watchdog HW reset request
+     .ADPRESETREQ    (ADPRESETREQ),       // ADP debugger reset request
+     
+  // Debug - JTAG or Serial wire
+     // inputs
+    .SWDI            (SWDI),
+    .SWCLK           (SWCLK),
+     // outputs
+    .SWDO            (SWDO),
+    .SWDOEN          (SWDOEN)
+  );
+
+  assign   RXEV = dmac_done;  // Generate event when a DMA operation completed.
+
+
+//------------------------------------
+// internal wires
+
+  assign p0_out_nen     = ~p0_out_en;     //active low pad drive option
+  assign p1_out_nen_mux = ~p1_out_en_mux; //active low pad drive option
+
+  localparam BASEADDR_GPIO0       = 32'h4001_0000;
+  localparam BASEADDR_GPIO1       = 32'h4001_1000;
+  localparam BASEADDR_SYSROMTABLE = 32'hf000_0000;
+
+  nanosoc_sysio u_nanosoc_sysio (
+    .FCLK             (FCLK         ), // free-running clock
+    .PORESETn         (PORESETn     ), // Power-On-Reset (active-low)
+    .TESTMODE         (TESTMODE     ), // Test-mode override for testability
+    .HCLK             (HCLK         ), // AHB interconnect clock
+    .HRESETn          (HRESETn      ), // AHB interconnect reset (active-low)
+    // Common AHB signals
+    .HSEL             (HSEL_sysio     ),
+    .HADDR            (HADDR_sysio    ),
+    .HBURST           (HBURST_sysio   ),
+    .HMASTLOCK        (HMASTLOCK_sysio),
+    .HPROT            (HPROT_sysio    ),
+    .HSIZE            (HSIZE_sysio    ),
+    .HTRANS           (HTRANS_sysio   ),
+    .HWDATA           (HWDATA_sysio   ),
+    .HWRITE           (HWRITE_sysio   ),
+    .HREADY           (HREADYMUX_sysio),
+    .HRDATA           (HRDATA_sysio   ),
+    .HRESP            (HRESP_sysio    ),
+    .HREADYOUT        (HREADYOUT_sysio),
+    // APB clocking
+    .PCLK             (PCLK         ),
+    .PCLKG            (PCLKG        ),
+    .PRESETn          (PRESETn      ),
+    .PCLKEN           (PCLKEN       ),
+  // APB expansion select outputs
+    .exp12_psel       (exp12_psel   ),
+    .exp13_psel       (exp13_psel   ),
+    .exp14_psel       (exp14_psel   ),
+    .exp15_psel       (exp15_psel   ),
+    .exp_pwdata       (exp_pwdata   ),
+    .exp_paddr        (exp_paddr    ),
+    .exp_pwrite       (exp_pwrite   ),
+    .exp_penable      (exp_penable  ),
+  // APB expansion interface inputs
+    .exp12_prdata     (exp12_prdata ),
+    .exp12_pready     (exp12_pready ),
+    .exp12_pslverr    (exp12_pslverr),
+    .exp13_prdata     (exp13_prdata ),
+    .exp13_pready     (exp13_pready ),
+    .exp13_pslverr    (exp13_pslverr),
+    .exp14_prdata     (exp14_prdata ),
+    .exp14_pready     (exp14_pready ),
+    .exp14_pslverr    (exp14_pslverr),
+    .exp15_prdata     (exp15_prdata ),
+    .exp15_pready     (exp15_pready ),
+    .exp15_pslverr    (exp15_pslverr),
+    // CPU sideband signalling
+    .SYS_NMI          (SYS_NMI      ),
+    .SYS_APB_IRQ      (SYS_APB_IRQ  ),
+    // CPU specific power/reset control
+    .REMAP_CTRL       (ROM_MAP      ),
+    .APBACTIVE        (APBACTIVE    ),
+    .SYSRESETREQ      (SYSRESETREQ  ),
+    .WDOGRESETREQ     (WDOGRESETREQ ),
+    .LOCKUP           (LOCKUP       ),
+    .LOCKUPRESET      (LOCKUPRESET  ),
+    .PMUENABLE        (PMUENABLE    ),
+    // chip IO
+    .SYS_GPIO0_IRQ    (SYS_GPIO0_IRQ ),
+    .SYS_GPIO1_IRQ    (SYS_GPIO1_IRQ ),
+    // IO signalling
+    .uart0_rxd        (uart1_txd), //(uart0_rxd    ), // crossover
+    .uart0_txd        (uart0_txd    ),
+    .uart0_txen       (uart0_txen   ),
+    .uart1_rxd        (uart0_txd), //uart1_rxd    ), // crossover
+    .uart1_txd        (uart1_txd    ),
+    .uart1_txen       (uart1_txen   ),
+    .uart2_rxd        (uart2_rxd    ),
+    .uart2_txd        (uart2_txd    ),
+    .uart2_txen       (uart2_txen   ),
+    .timer0_extin     (timer0_extin ),  
+    .timer1_extin     (timer1_extin ),
+    // GPIO port signalling
+    .p0_in            (p0_in        ),
+    .p0_out           (p0_out       ),
+    .p0_outen         (p0_out_en    ),
+    .p0_altfunc       (p0_altfunc   ),
+
+    .p1_in            (p1_in        ),
+    .p1_out           (p1_out       ),
+    .p1_outen         (p1_out_en    ),
+    .p1_altfunc       (p1_altfunc   )
+    );
+
+ assign REMAP[3] = 1'b0;
+ assign REMAP[2] = 1'b0;
+ assign REMAP[1] = 1'b0;
+ assign REMAP[0] =!ROM_MAP;
+ 
+ assign exp12_pready = 1'b1;
+ assign exp13_pready = 1'b1;
+ assign exp12_pslverr = 1'b0;
+ assign exp13_pslverr = 1'b0;
+ assign exp12_prdata = 32'h0;
+ assign exp13_prdata = 32'h0;
+ 
+
+  // Serial wire debug is used.  nTRST, TDI and TDO are not needed
+
+
+//----------------------------------------
+// I/O port pin muxing and tristate
+//----------------------------------------
+
+  assign        SWCLK         =  swdclk_i;
+  assign        SWDI          =  swdio_i;
+  assign        swdio_o       =  SWDO;
+  assign        swdio_e       =  SWDOEN;
+  assign        swdio_z       =  !SWDOEN;
+
+  nanosoc_mcu_pin_mux u_pin_mux (
+    // UART
+    .uart0_rxd        (uart0_rxd),
+    .uart0_txd        (uart0_txd),
+    .uart0_txen       (uart0_txen),
+    .uart1_rxd        (uart1_rxd),
+    .uart1_txd        (uart1_txd),
+    .uart1_txen       (uart1_txen),
+    .uart2_rxd        (uart2_rxd),
+    .uart2_txd        (uart2_txd),
+    .uart2_txen       (uart2_txen),
+
+    // Timer
+    .timer0_extin     (timer0_extin),
+    .timer1_extin     (timer1_extin),
+
+
+    // IO Ports
+    .p0_in            ( ), // was (p0_in) now from pad inputs),
+    .p0_out           (p0_out),
+    .p0_outen         (p0_out_en),
+    .p0_altfunc       (p0_altfunc),
+
+    .p1_in            ( ), // was(p1_in) now from pad inputs),
+    .p1_out           (p1_out),
+    .p1_outen         (p1_out_en),
+    .p1_altfunc       (p1_altfunc),
+
+    // Debug
+    .i_trst_n         ( ),
+    .i_swditms        ( ), //i_swditms),
+    .i_swclktck       ( ), //i_swclktck),
+    .i_tdi            ( ),
+    .i_tdo            ( ),
+    .i_tdoen_n        ( ),
+    .i_swdo           ( ),
+    .i_swdoen         ( ),
+
+    // IO pads
+    .p1_out_mux       (p1_out_mux),
+    .p1_out_en_mux    (p1_out_en_mux),
+    .P0               ( ), //P0),
+    .P1               ( ), //P1),
+
+    .nTRST            (nTRST),  // Not needed if serial-wire debug is used
+    .TDI              (1'b0),    // Not needed if serial-wire debug is used
+    .SWDIOTMS         ( ), //SWDIOTMS),
+    .SWCLKTCK         ( ), //SWCLKTCK),
+    .TDO              ( )     // Not needed if serial-wire debug is used
+
+  );
+
+endmodule
+
+
+
diff --git a/system/src/verilog/nanosoc_mcu_clkctrl.v b/system/src/nanosoc_chip/control/verilog/nanosoc_clkctrl.v
similarity index 99%
rename from system/src/verilog/nanosoc_mcu_clkctrl.v
rename to system/src/nanosoc_chip/control/verilog/nanosoc_clkctrl.v
index 80be7812559e3186ad7a5d7b20220ae96991adfb..98d947856d6ccd496fad72549370f932f30fed17 100644
--- a/system/src/verilog/nanosoc_mcu_clkctrl.v
+++ b/system/src/nanosoc_chip/control/verilog/nanosoc_clkctrl.v
@@ -37,7 +37,7 @@
 // Note : Most of the clock gating are handled by the example PMU provided
 //        in the Cortex-M0/Cortex-M0+ deliverable.
 
-module nanosoc_mcu_clkctrl #(
+module nanosoc_clkctrl #(
   parameter CLKGATE_PRESENT = 0)
  (
   input  wire       XTAL1,       // Clock source
diff --git a/system/src/verilog/nanosoc_mcu_pin_mux.v b/system/src/nanosoc_chip/control/verilog/nanosoc_pin_mux.v
similarity index 99%
rename from system/src/verilog/nanosoc_mcu_pin_mux.v
rename to system/src/nanosoc_chip/control/verilog/nanosoc_pin_mux.v
index 963807e1f57c6714cfcb567d1b1e06b17cd4d34d..c9e4e970b4d5407667ae8ba761fbc02b7f24d806 100644
--- a/system/src/verilog/nanosoc_mcu_pin_mux.v
+++ b/system/src/nanosoc_chip/control/verilog/nanosoc_pin_mux.v
@@ -36,7 +36,7 @@
 //            microcontroller
 //-----------------------------------------------------------------------------
 //
-module nanosoc_mcu_pin_mux (
+module nanosoc_pin_mux (
   //-------------------------------------------
   // I/O ports
   //-------------------------------------------
diff --git a/system/src/verilog/nanosoc_chip_pads.v b/system/src/nanosoc_chip/pads/glib/verilog/nanosoc_chip_pads.v
similarity index 100%
rename from system/src/verilog/nanosoc_chip_pads.v
rename to system/src/nanosoc_chip/pads/glib/verilog/nanosoc_chip_pads.v
diff --git a/system/src/verilog/nanosoc_cpu.v b/system/src/nanosoc_managers/cpu/verilog/nanosoc_manager_cpu.v
similarity index 60%
rename from system/src/verilog/nanosoc_cpu.v
rename to system/src/nanosoc_managers/cpu/verilog/nanosoc_manager_cpu.v
index 281e242cd09d1aa98c5aef2cf75dd9771af8307d..c51e5c0a81fadce9ba97a9e092b915862f867297 100644
--- a/system/src/verilog/nanosoc_cpu.v
+++ b/system/src/nanosoc_managers/cpu/verilog/nanosoc_manager_cpu.v
@@ -1,5 +1,5 @@
 //-----------------------------------------------------------------------------
-// customised Cortex-M0 'nanosoc' controller
+// NanoSoC Cortex-M0 AHB Manager
 // A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license.
 //
 // Contributors
@@ -35,7 +35,7 @@
 // Abstract : System level design for the example Cortex-M0 system
 //-----------------------------------------------------------------------------
 
-module nanosoc_cpu #(
+module nanosoc_manager_cpu #(
   parameter CLKGATE_PRESENT = 0,
   parameter BE              = 0,   // 1: Big endian 0: little endian
   parameter BKPT            = 4,   // Number of breakpoint comparators
@@ -48,17 +48,16 @@ module nanosoc_cpu #(
   parameter WPT             = 2,   // Number of DWT comparators
   parameter RESET_ALL_REGS  = 0,   // Do not reset all registers
   parameter INCLUDE_JTAG    = 0    // Do not Include JTAG feature
- )
- (
+)(
   input  wire          HCLK,             // (HCLK master)
-  input  wire               FCLK,             // Free running clock
-  input  wire               SCLK,             // System clock
-  input  wire               HRESETn,          // AHB and System reset
-  input  wire               PORESETn,         // Power on reset
-  input  wire               DCLK,             // Debug clock
-  input  wire               DBGRESETn,        // Debug reset
-  input  wire               RSTBYPASS,        // Reset by pass (for testing)
-  input  wire          DFTSE,        // Reset by pass (for testing)
+  input  wire          FCLK,             // Free running clock
+  input  wire          SCLK,             // System clock
+  input  wire          HRESETn,          // AHB and System reset
+  input  wire          PORESETn,         // Power on reset
+  input  wire          DCLK,             // Debug clock
+  input  wire          DBGRESETn,        // Debug reset
+  input  wire          RSTBYPASS,        // Reset by pass (for testing)
+  input  wire          DFTSE,            // Reset by pass (for testing)
 
   // AHB Lite port
   output wire   [31:0] HADDR,            // Address bus
@@ -69,12 +68,9 @@ module nanosoc_cpu #(
   output wire    [3:0] HPROT,            // Protection control
   output wire   [31:0] HWDATA,           // Write data
   output wire          HMASTLOCK,        // Locked Sequence
-//  output wire    [1:0] HAUSER,           // Address USER signals
-//  output wire    [1:0] HWUSER,           // Write-data USER signals
   input  wire   [31:0] HRDATA,           // Read data bus
   input  wire          HREADY,           // HREADY feedback
   input  wire          HRESP,            // Transfer response
-//  input  wire    [1:0] HRUSER,           // Read-data USER signals
 
   // Sideband CPU signalling
   input  wire          NMI,              // Non-Maskable Interrupt request
@@ -132,99 +128,98 @@ module nanosoc_cpu #(
   wire              SHAREABLE;
 
   // Cortex-M0 integration level
-  CORTEXM0INTEGRATION
-            #(.ACG       (CLKGATE_PRESENT), // Architectural clock gating
-              .BE        (BE),              // Big-endian
-              .BKPT      (BKPT),            // Number of breakpoint comparators
-              .DBG       (DBG),             // Debug configuration
-              .JTAGnSW   (INCLUDE_JTAG),    // Debug port interface: JTAGnSW
-              .NUMIRQ    (NUMIRQ),          // Number of Interrupts
-              .RAR       (RESET_ALL_REGS),  // Reset All Registers
-              .SMUL      (SMUL),            // Multiplier configuration
-              .SYST      (SYST),            // SysTick
-              .WIC       (WIC),             // Wake-up interrupt controller support
-              .WICLINES  (WICLINES),        // Supported WIC lines
-              .WPT       (WPT))             // Number of DWT comparators
-
-  u_cortex_m0_integration (
-  // System inputs
-  .FCLK          (FCLK),  // FCLK
-  .SCLK          (SCLK),  // SCLK generated from PMU
-  .HCLK          (HCLK),  // HCLK generated from PMU
-  .DCLK          (DCLK),  // DCLK generated from PMU
-  .PORESETn      (PORESETn),
-  .HRESETn       (HRESETn),
-  .DBGRESETn     (DBGRESETn),
-  .RSTBYPASS     (RSTBYPASS),
-  .SE            (DFTSE),
-
-  // Power management inputs
-  .SLEEPHOLDREQn (SLEEPHOLDREQn),
-  .WICENREQ      (WICENREQ),
-  .CDBGPWRUPACK  (CDBGPWRUPACK),
-
-  // Power management outputs
-  .SLEEPHOLDACKn (SLEEPHOLDACKn),
-  .WICENACK      (WICENACK),
-  .CDBGPWRUPREQ  (CDBGPWRUPREQ),
-
-  .WAKEUP        (WAKEUP),
-  .WICSENSE      (WICSENSE),
-  .GATEHCLK      (GATEHCLK),
-  .SYSRESETREQ   (SYSRESETREQ),
-
-  // System bus
-  .HADDR         (HADDR     ),
-  .HTRANS        (HTRANS    ),
-  .HSIZE         (HSIZE     ),
-  .HBURST        (HBURST    ),
-  .HPROT         (HPROT     ),
-  .HMASTLOCK     (HMASTLOCK ),
-  .HWRITE        (HWRITE    ),
-  .HWDATA        (HWDATA    ),
-  .HRDATA        (HRDATA    ),
-  .HREADY        (HREADY    ),
-  .HRESP         (HRESP     ),
-  .HMASTER       ( ),
-
-  .CODEHINTDE    (CODEHINTDE),
-  .SPECHTRANS    (SPECHTRANS),
-  .CODENSEQ      (CODENSEQ),
-
-  // Interrupts
-  .IRQ           (IRQ[31:0]),
-  .NMI           (NMI),
-  .IRQLATENCY    (8'h00),
-
-  .ECOREVNUM     (28'h0),
-  // Systick
-  .STCLKEN       (STCLKEN),
-  .STCALIB       (STCALIB),
-
-  // Debug - JTAG or Serial wire
-     // inputs
-  .nTRST         (1'b1),
-  .SWDITMS       (SWDI),
-  .SWCLKTCK      (SWCLK),
-  .TDI           (1'b0),
-     // outputs
-  .TDO           ( ),
-  .nTDOEN        ( ),
-  .SWDO          (SWDO),
-  .SWDOEN        (SWDOEN),
-
-  .DBGRESTART    (DBGRESTART),
-  .DBGRESTARTED  (DBGRESTARTED),
-
-  // Event communication
-  .TXEV          (TXEV),
-  .RXEV          (RXEV),
-  .EDBGRQ        (EDBGRQ),
-  // Status output
-  .HALTED        (HALTED),
-  .LOCKUP        (LOCKUP),
-  .SLEEPING      (SLEEPING),
-  .SLEEPDEEP     (SLEEPDEEP)
+  CORTEXM0INTEGRATION #(
+    .ACG       (CLKGATE_PRESENT), // Architectural clock gating
+    .BE        (BE),              // Big-endian
+    .BKPT      (BKPT),            // Number of breakpoint comparators
+    .DBG       (DBG),             // Debug configuration
+    .JTAGnSW   (INCLUDE_JTAG),    // Debug port interface: JTAGnSW
+    .NUMIRQ    (NUMIRQ),          // Number of Interrupts
+    .RAR       (RESET_ALL_REGS),  // Reset All Registers
+    .SMUL      (SMUL),            // Multiplier configuration
+    .SYST      (SYST),            // SysTick
+    .WIC       (WIC),             // Wake-up interrupt controller support
+    .WICLINES  (WICLINES),        // Supported WIC lines
+    .WPT       (WPT)              // Number of DWT comparators
+  ) u_cortex_m0_integration (
+    // System inputs
+    .FCLK          (FCLK),  // FCLK
+    .SCLK          (SCLK),  // SCLK generated from PMU
+    .HCLK          (HCLK),  // HCLK generated from PMU
+    .DCLK          (DCLK),  // DCLK generated from PMU
+    .PORESETn      (PORESETn),
+    .HRESETn       (HRESETn),
+    .DBGRESETn     (DBGRESETn),
+    .RSTBYPASS     (RSTBYPASS),
+    .SE            (DFTSE),
+
+    // Power management inputs
+    .SLEEPHOLDREQn (SLEEPHOLDREQn),
+    .WICENREQ      (WICENREQ),
+    .CDBGPWRUPACK  (CDBGPWRUPACK),
+
+    // Power management outputs
+    .SLEEPHOLDACKn (SLEEPHOLDACKn),
+    .WICENACK      (WICENACK),
+    .CDBGPWRUPREQ  (CDBGPWRUPREQ),
+
+    .WAKEUP        (WAKEUP),
+    .WICSENSE      (WICSENSE),
+    .GATEHCLK      (GATEHCLK),
+    .SYSRESETREQ   (SYSRESETREQ),
+
+    // System bus
+    .HADDR         (HADDR     ),
+    .HTRANS        (HTRANS    ),
+    .HSIZE         (HSIZE     ),
+    .HBURST        (HBURST    ),
+    .HPROT         (HPROT     ),
+    .HMASTLOCK     (HMASTLOCK ),
+    .HWRITE        (HWRITE    ),
+    .HWDATA        (HWDATA    ),
+    .HRDATA        (HRDATA    ),
+    .HREADY        (HREADY    ),
+    .HRESP         (HRESP     ),
+    .HMASTER       ( ),
+
+    .CODEHINTDE    (CODEHINTDE),
+    .SPECHTRANS    (SPECHTRANS),
+    .CODENSEQ      (CODENSEQ),
+
+    // Interrupts
+    .IRQ           (IRQ[31:0]),
+    .NMI           (NMI),
+    .IRQLATENCY    (8'h00),
+
+    .ECOREVNUM     (28'h0),
+    // Systick
+    .STCLKEN       (STCLKEN),
+    .STCALIB       (STCALIB),
+
+    // Debug - JTAG or Serial wire
+      // inputs
+    .nTRST         (1'b1),
+    .SWDITMS       (SWDI),
+    .SWCLKTCK      (SWCLK),
+    .TDI           (1'b0),
+      // outputs
+    .TDO           ( ),
+    .nTDOEN        ( ),
+    .SWDO          (SWDO),
+    .SWDOEN        (SWDOEN),
+
+    .DBGRESTART    (DBGRESTART),
+    .DBGRESTARTED  (DBGRESTARTED),
+
+    // Event communication
+    .TXEV          (TXEV),
+    .RXEV          (RXEV),
+    .EDBGRQ        (EDBGRQ),
+    // Status output
+    .HALTED        (HALTED),
+    .LOCKUP        (LOCKUP),
+    .SLEEPING      (SLEEPING),
+    .SLEEPDEEP     (SLEEPDEEP)
   );
 
   // Unused debug feature
@@ -234,15 +229,15 @@ module nanosoc_cpu #(
   // -------------------------------
   // SysTick signals
   // -------------------------------
-  nanosoc_mcu_stclkctrl
-   #(.DIV_RATIO (18'd01000))
-   u_nanosoc_mcu_stclkctrl (
+  nanosoc_stclkctrl #(
+    .DIV_RATIO (18'd01000)
+  ) u_nanosoc_mcu_stclkctrl (
     .FCLK      (FCLK),
     .SYSRESETn (HRESETn),
 
     .STCLKEN   (STCLKEN),
     .STCALIB   (STCALIB)
-    );
+  );
 
 
 endmodule
diff --git a/system/src/verilog/nanosoc_mcu_stclkctrl.v b/system/src/nanosoc_managers/cpu/verilog/nanosoc_stclkctrl.v
similarity index 90%
rename from system/src/verilog/nanosoc_mcu_stclkctrl.v
rename to system/src/nanosoc_managers/cpu/verilog/nanosoc_stclkctrl.v
index b4ea23cad824aeaa73c5a8b8711e546b5fc9fa10..ca006495ef5441ce0aacfa189471846f316fbebc 100644
--- a/system/src/verilog/nanosoc_mcu_stclkctrl.v
+++ b/system/src/nanosoc_managers/cpu/verilog/nanosoc_stclkctrl.v
@@ -35,19 +35,17 @@
 // Abstract : Simple control for SysTick signals for Cortex-M processor
 //-----------------------------------------------------------------------------
 
-module nanosoc_mcu_stclkctrl #(
+module nanosoc_stclkctrl #(
   // Ratio between FCLK and SysTck reference clock
   parameter DIV_RATIO = 18'd01000,
 
   // Divide by half for each phase
   parameter DIVIDER_RELOAD = (DIV_RATIO>>1)-1
- )
- (
-  input  wire        FCLK,      // Free running clock
-  input  wire        SYSRESETn, // System reset
-
-  output wire        STCLKEN,   // SysTick clock
-  output wire [25:0] STCALIB    // SysTick calibration
+  )(
+    input  wire        FCLK,      // Free running clock
+    input  wire        SYSRESETn, // System reset
+    output wire        STCLKEN,   // SysTick clock
+    output wire [25:0] STCALIB    // SysTick calibration
   );
 
   reg     [17:0] reg_clk_divider;
@@ -58,7 +56,7 @@ module nanosoc_mcu_stclkctrl #(
   assign STCALIB[23:0] = {24{1'b0}}; // 10 ms value  set to 0, indicate this value is not used
 
   // Divider
-  wire [17:0] reg_clk_div_min1 = reg_clk_divider -1;
+  wire [17:0] reg_clk_div_min1 = reg_clk_divider - 1;
   always @(posedge FCLK or negedge SYSRESETn)
   begin
   if (~SYSRESETn)
diff --git a/system/src/nanosoc_managers/socdebug/verilog/nanosoc_manager_socdebug.v b/system/src/nanosoc_managers/socdebug/verilog/nanosoc_manager_socdebug.v
new file mode 100644
index 0000000000000000000000000000000000000000..cd0b5edb871ee655d501bbec1ab90e6b179ba5ad
--- /dev/null
+++ b/system/src/nanosoc_managers/socdebug/verilog/nanosoc_manager_socdebug.v
@@ -0,0 +1,106 @@
+//-----------------------------------------------------------------------------
+// NanoSoC Wrapper for SoCDebug Chip Debug Manager
+// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license.
+//
+// Contributors
+//
+// David Mapstone (d.a.mapstone@soton.ac.uk)
+//
+// Copyright � 2021-3, SoC Labs (www.soclabs.org)
+//-----------------------------------------------------------------------------
+
+module nanosoc_manager_socdebug #(
+    parameter         PROMPT_CHAR   = "]",
+    parameter integer FT1248_WIDTH	= 1, // FTDI Interface 1,2,4 width supported
+    parameter integer FT1248_CLKON	= 0  // FTDI clock always on - else quiet when no access
+)(  
+    // AHB-lite Master Interface - ADP
+    input  wire                     HCLK,
+    input  wire                     HRESETn,
+    output wire              [31:0] HADDR32_o,
+    output wire              [ 2:0] HBURST3_o,
+    output wire                     HMASTLOCK_o,
+    output wire              [ 3:0] HPROT4_o,
+    output wire              [ 2:0] HSIZE3_o,
+    output wire              [ 1:0] HTRANS2_o,
+    output wire              [31:0] HWDATA32_o,
+    output wire                     HWRITE_o,
+    input  wire              [31:0] HRDATA32_i,
+    input  wire                     HREADY_i,
+    input  wire                     HRESP_i,
+    
+    // APB Slave Interface - USRT
+    input  wire                     PCLK,        // Clock
+    input  wire                     PCLKG,       // Gated Clock
+    input  wire                     PRESETn,     // Reset
+
+    input  wire                     PSEL_i,      // Device select
+    input  wire              [11:2] PADDR_i,     // Address
+    input  wire                     PENABLE_i,   // Transfer control
+    input  wire                     PWRITE_i,    // Write control
+    input  wire              [31:0] PWDATA_i,    // Write data
+ 
+    output wire              [31:0] PRDATA_o,    // Read data
+    output wire                     PREADY_o,    // Device ready
+    output wire                     PSLVERR_o,   // Device error response
+    
+    // FT1248 Interace - FT1248
+    output wire                     FT_CLK_O,    // SCLK
+    output wire                     FT_SSN_O,    // SS_N
+    input  wire                     FT_MISO_I,   // MISO
+    output wire  [FT1248_WIDTH-1:0] FT_MIOSIO_O, // MIOSIO tristate output when enabled
+    output wire  [FT1248_WIDTH-1:0] FT_MIOSIO_E, // MIOSIO tristate output enable (active hi)
+    output wire  [FT1248_WIDTH-1:0] FT_MIOSIO_Z, // MIOSIO tristate output enable (active lo)
+    input  wire  [FT1248_WIDTH-1:0] FT_MIOSIO_I, // MIOSIO tristate input
+    input  wire               [7:0] FT_CLKDIV,   // divider prescaler to ensure SCLK <1MHz
+    
+    // GPIO interface
+    output wire               [7:0] GPO8_o,
+    input  wire               [7:0] GPI8_i
+);
+    
+    // Instantiate SoCDebug Controller
+    socdebug_ahb u_socdebug (
+        // AHB-lite Master Interface - ADP
+        .HCLK (HCLK),
+        .HRESETn (HRESETn),
+        .HADDR32_o (HADDR32_o),
+        .HBURST3_o (HBURST3_o),
+        .HMASTLOCK_o (HMASTLOCK_o),
+        .HPROT4_o (HPROT4_o),
+        .HSIZE3_o (HSIZE3_o),
+        .HTRANS2_o (HTRANS2_o),
+        .HWDATA32_o (HWDATA32_o),
+        .HWRITE_o (HWRITE_o),
+        .HRDATA32_i (HRDATA32_i),
+        .HREADY_i (HREADY_i),
+        .HRESP_i (HRESP_i),
+        
+        // APB Slave Interface - USRT
+        .PCLK (PCLK),       
+        .PCLKG (PCLKG),      
+        .PRESETn (PRESETn),    
+        .PSEL_i (PSEL_i),     
+        .PADDR_i (PADDR_i),    
+        .PENABLE_i (PENABLE_i),  
+        .PWRITE_i (PWRITE_i),   
+        .PWDATA_i (PWDATA_i),   
+        .PRDATA_o (PRDATA_o),   
+        .PREADY_o (PREADY_o),   
+        .PSLVERR_o (PSLVERR_o),  
+        
+         // FT1248 Interace - FT1248
+        .FT_CLK_O (FT_CLK_O),   
+        .FT_SSN_O (FT_SSN_O),   
+        .FT_MISO_I (FT_MISO_I),  
+        .FT_MIOSIO_O (FT_MIOSIO_O),
+        .FT_MIOSIO_E (FT_MIOSIO_E),
+        .FT_MIOSIO_Z (FT_MIOSIO_Z),
+        .FT_MIOSIO_I (FT_MIOSIO_I),
+        .FT_CLKDIV (FT_CLKDIV),  
+        
+        // GPIO interface
+        .GPO8_o (GPO8_o),
+        .GPI8_i (GPI8_i)
+    );
+endmodule
\ No newline at end of file
diff --git a/system/src/verilog/nanosoc_ahb_bootrom.v b/system/src/nanosoc_regions/bootrom/verilog/nanosoc_ahb_bootrom.v
similarity index 100%
rename from system/src/verilog/nanosoc_ahb_bootrom.v
rename to system/src/nanosoc_regions/bootrom/verilog/nanosoc_ahb_bootrom.v
diff --git a/system/src/nanosoc_regions/bootrom/verilog/nanosoc_region_bootrom.v b/system/src/nanosoc_regions/bootrom/verilog/nanosoc_region_bootrom.v
new file mode 100644
index 0000000000000000000000000000000000000000..94ce02faf33658abbd0c384f3eee81a6f6448cbe
--- /dev/null
+++ b/system/src/nanosoc_regions/bootrom/verilog/nanosoc_region_bootrom.v
@@ -0,0 +1,54 @@
+//-----------------------------------------------------------------------------
+// Nanosoc Bootrom Region
+// Region Mapped to: 0x10000000-0x1fffffff
+// and Remapped to:  0x00000000-0x0000ffff
+// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license.
+//
+// Contributors
+//
+// David Mapstone (d.a.mapstone@soton.ac.uk)
+//
+// Copyright 2021-3, SoC Labs (www.soclabs.org)
+//-----------------------------------------------------------------------------
+
+module nanosoc_region_bootrom #(
+    parameter    SYS_ADDR_W     = 32,  // System Address Width
+    parameter    SYS_DATA_W     = 32,  // System Data Width
+    parameter    BOOTROM_ADDR_W = 10  // Size of Bootrom (Based on Address Width) - Default 1KB
+  )(
+    input  wire                   HCLK,       // Clock
+    input  wire                   HRESETn,    // Reset
+
+    // AHB connection to Initiator
+    input  wire                   HSEL,
+    input  wire  [SYS_ADDR_W-1:0] HADDR,
+    input  wire             [1:0] HTRANS,
+    input  wire             [2:0] HSIZE,
+    input  wire             [3:0] HPROT,
+    input  wire                   HWRITE,
+    input  wire                   HREADY,
+    input  wire  [SYS_DATA_W-1:0] HWDATA,
+
+    output wire                   HREADYOUT,
+    output wire                   HRESP,
+    output wire  [SYS_DATA_W-1:0] HRDATA
+  );
+
+  nanosoc_ahb_bootrom #(
+    .AW (BOOTROM_ADDR_W)  
+  ) u_ahb_bootloader (
+    .HCLK             (HCLK),
+    .HRESETn          (HRESETn),
+    .HSEL             (HSEL),
+    .HADDR            (HADDR[9:0]),
+    .HTRANS           (HTRANS),
+    .HSIZE            (HSIZE),
+    .HWRITE           (HWRITE),
+    .HWDATA           (HWDATA),
+    .HREADY           (HREADY),
+    .HREADYOUT        (HREADYOUT),
+    .HRDATA           (HRDATA),
+    .HRESP            (HRESP)
+  );
+
+endmodule
diff --git a/system/src/nanosoc_regions/dmem/verilog/nanosoc_region_dmem.v b/system/src/nanosoc_regions/dmem/verilog/nanosoc_region_dmem.v
new file mode 100644
index 0000000000000000000000000000000000000000..95b106e45f50c7252bcb1572c9a440fc110d3b0b
--- /dev/null
+++ b/system/src/nanosoc_regions/dmem/verilog/nanosoc_region_dmem.v
@@ -0,0 +1,87 @@
+//-----------------------------------------------------------------------------
+// Nanosoc CPU Data Memory Region (DMEM)
+// - Region Mapped to: 0x30000000-0x3fffffff
+// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license.
+//
+// Contributors
+//
+// David Mapstone (d.a.mapstone@soton.ac.uk)
+//
+// Copyright 2021-3, SoC Labs (www.soclabs.org)
+//-----------------------------------------------------------------------------
+
+module nanosoc_region_dmem #(
+    parameter    SYS_ADDR_W      = 32, // System Address Width
+    parameter    SYS_DATA_W      = 32, // System Data Width
+    parameter    DMEM_RAM_ADDR_W = 14, // Width of DMEM RAM Address - Default 16KB
+    parameter    DMEM_RAM_DATA_W = 32  // Width of DMEM RAM Data Bus - Default 32 bits
+  )(
+    input  wire                   HCLK,    
+    input  wire                   HRESETn, 
+
+    // AHB connection to Initiator
+    input  wire                   HSEL,
+    input  wire  [SYS_ADDR_W-1:0] HADDR,
+    input  wire             [1:0] HTRANS,
+    input  wire             [2:0] HSIZE,
+    input  wire             [3:0] HPROT,
+    input  wire                   HWRITE,
+    input  wire                   HREADY,
+    input  wire  [SYS_DATA_W-1:0] HWDATA,
+
+    output wire                   HREADYOUT,
+    output wire                   HRESP,
+    output wire  [SYS_DATA_W-1:0] HRDATA
+  );
+    
+    wire  [DMEM_RAM_ADDR_W-3:0] addr_dmem;
+    wire  [DMEM_RAM_DATA_W-1:0] wdata_dmem;
+    wire  [DMEM_RAM_DATA_W-1:0] rdata_dmem;
+    wire                  [3:0] wen_dmem;
+    wire                        cs_dmem;
+
+    // AHB to SRAM bridge
+    cmsdk_ahb_to_sram #(
+        .AW (DMEM_RAM_ADDR_W)
+    ) u_ahb_to_sdmem (
+        // AHB Inputs
+        .HCLK       (HCLK),
+        .HRESETn    (HRESETn),
+        .HSEL       (HSEL_dmem), 
+        .HADDR      (HADDR_dmem [DMEM_RAM_ADDR_W-1:0]),
+        .HTRANS     (HTRANS_dmem),
+        .HSIZE      (HSIZE_dmem),
+        .HWRITE     (HWRITE_dmem),
+        .HWDATA     (HWDATA_dmem),
+        .HREADY     (HREADYMUX_dmem),
+
+        // AHB Outputs
+        .HREADYOUT  (HREADYOUT_dmem),
+        .HRDATA     (HRDATA_dmem),
+        .HRESP      (HRESP_dmem),
+
+        // SRAM input
+        .SRAMRDATA  (rdata_dmem),
+        
+        // SRAM Outputs
+        .SRAMADDR   (addr_dmem),
+        .SRAMWDATA  (wdata_dmem),
+        .SRAMWEN    (wen_dmem),
+        .SRAMCS     (cs_dmem)
+    );
+
+    // SRAM model
+    cmsdk_fpga_sram #(
+        .AW (DMEM_RAM_ADDR_W)
+    ) u_fpga_dmem (
+        // SRAM Inputs
+        .CLK        (HCLK),
+        .ADDR       (addr_dmem),
+        .WDATA      (wdata_dmem),
+        .WREN       (wen_dmem),
+        .CS         (cs_dmem),
+        
+        // SRAM Output
+        .RDATA      (rdata_dmem)
+    );
+endmodule
\ No newline at end of file
diff --git a/system/src/nanosoc_regions/exp/verilog/nanosoc_region_exp.v b/system/src/nanosoc_regions/exp/verilog/nanosoc_region_exp.v
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/system/src/nanosoc_regions/expram_h/verilog/nanosoc_region_expram__h b/system/src/nanosoc_regions/expram_h/verilog/nanosoc_region_expram__h
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/system/src/nanosoc_regions/expram_l/verilog/nanosoc_region_expram_l.v b/system/src/nanosoc_regions/expram_l/verilog/nanosoc_region_expram_l.v
new file mode 100644
index 0000000000000000000000000000000000000000..979b68230f92c22ec91e99db3be23fc1da0c2e62
--- /dev/null
+++ b/system/src/nanosoc_regions/expram_l/verilog/nanosoc_region_expram_l.v
@@ -0,0 +1,89 @@
+//-----------------------------------------------------------------------------
+// Nanosoc Expansion SRAM Low Region (expram_l)
+// - Region Mapped to: 0x30000000-0x3fffffff
+// - Memory Exhibits Wrapping Behaviour
+// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license.
+//
+// Contributors
+//
+// David Mapstone (d.a.mapstone@soton.ac.uk)
+//
+// Copyright 2021-3, SoC Labs (www.soclabs.org)
+//-----------------------------------------------------------------------------
+
+module nanosoc_region_expram_l #(
+        parameter    SYS_ADDR_W          = 32, // System Address Width
+        parameter    SYS_DATA_W          = 32, // System Data Width
+        parameter    EXPRAM_L_RAM_ADDR_W = 14, // Width of RAM Address  - Default 16KB
+        parameter    EXPRAM_L_RAM_DATA_W = 32  // Width of RAM Data Bus - Default 32 bits
+    )(
+        input  wire                   HCLK,    
+        input  wire                   HRESETn, 
+
+        // AHB connection to Initiator
+        input  wire                   HSEL,
+        input  wire  [SYS_ADDR_W-1:0] HADDR,
+        input  wire             [1:0] HTRANS,
+        input  wire             [2:0] HSIZE,
+        input  wire             [3:0] HPROT,
+        input  wire                   HWRITE,
+        input  wire                   HREADY,
+        input  wire  [SYS_DATA_W-1:0] HWDATA,
+
+        output wire                   HREADYOUT,
+        output wire                   HRESP,
+        output wire  [SYS_DATA_W-1:0] HRDATA
+    );
+
+    wire  [EXPRAM_L_RAM_ADDR_W-3:0] addr_expram_l;
+    wire  [EXPRAM_L_RAM_DATA_W-1:0] wdata_expram_l;
+    wire  [EXPRAM_L_RAM_DATA_W-1:0] rdata_expram_l;
+    wire                      [3:0] wen_expram_l;
+    wire                            cs_expram_l;
+    
+    // AHB to SRAM bridge
+    cmsdk_ahb_to_sram #(
+        .AW (EXPRAM_L_RAM_ADDR_W)
+    ) u_ahb_to_sram8 (
+        // AHB Inputs
+        .HCLK       (HCLK),
+        .HRESETn    (HRESETn),
+        .HSEL       (HSEL_expram_l),  
+        .HADDR      (HADDR_expram_l[EXPRAM_L_RAM_ADDR_W-1:0]),
+        .HTRANS     (HTRANS_expram_l),
+        .HSIZE      (HSIZE_expram_l),
+        .HWRITE     (HWRITE_expram_l),
+        .HWDATA     (HWDATA_expram_l),
+        .HREADY     (HREADYMUX_expram_l),
+
+        // AHB Outputs
+        .HREADYOUT  (HREADYOUT_expram_l),
+        .HRDATA     (HRDATA_expram_l),
+        .HRESP      (HRESP_expram_l),
+
+        // SRAM input
+        .SRAMRDATA  (rdata_expram_l),
+        
+        // SRAM Outputs
+        .SRAMADDR   (addr_expram_l),
+        .SRAMWDATA  (wdata_expram_l),
+        .SRAMWEN    (wen_expram_l),
+        .SRAMCS     (cs_expram_l)
+   );
+
+    // SRAM model
+    cmsdk_fpga_sram #(
+        .AW (EXPRAM_L_RAM_ADDR_W)
+    ) u_fpga_expram_l (
+        // SRAM Inputs
+        .CLK        (HCLK),
+        .ADDR       (addr_expram_l),
+        .WDATA      (wdata_expram_l),
+        .WREN       (wen_expram_l),
+        .CS         (cs_expram_l),
+        
+        // SRAM Output
+        .RDATA      (rdata_expram_l)
+    );
+    
+endmodule
\ No newline at end of file
diff --git a/system/src/nanosoc_regions/imem/verilog/nanosoc_region_imem.v b/system/src/nanosoc_regions/imem/verilog/nanosoc_region_imem.v
new file mode 100644
index 0000000000000000000000000000000000000000..11ce6a6125778ed76c800c6630e747d21376a293
--- /dev/null
+++ b/system/src/nanosoc_regions/imem/verilog/nanosoc_region_imem.v
@@ -0,0 +1,91 @@
+//-----------------------------------------------------------------------------
+// Nanosoc CPU Instruction Memory Region (IMEM)
+// - Region Mapped to: 0x20000000-0x2fffffff
+// - Memory Exhibits Wrapping Behaviour
+// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license.
+//
+// Contributors
+//
+// David Mapstone (d.a.mapstone@soton.ac.uk)
+//
+// Copyright 2021-3, SoC Labs (www.soclabs.org)
+//-----------------------------------------------------------------------------
+
+module nanosoc_region_imem #(
+    parameter    SYS_ADDR_W        = 32,         // System Address Width
+    parameter    SYS_DATA_W        = 32,         // System Data Width
+    parameter    IMEM_RAM_ADDR_W   = 14,         // Width of IMEM RAM Address - Default 16KB
+    parameter    IMEM_RAM_DATA_W   = 32,         // Width of IMEM RAM Data Bus - Default 32 bits
+    parameter    IMEM_RAM_FPGA_IMG = "image.hex" // Image to Preload into SRAM
+  )(
+    input  wire                   HCLK,   
+    input  wire                   HRESETn,
+
+    // AHB connection to Initiator
+    input  wire                   HSEL,
+    input  wire  [SYS_ADDR_W-1:0] HADDR,
+    input  wire             [1:0] HTRANS,
+    input  wire             [2:0] HSIZE,
+    input  wire             [3:0] HPROT,
+    input  wire                   HWRITE,
+    input  wire                   HREADY,
+    input  wire  [SYS_DATA_W-1:0] HWDATA,
+
+    output wire                   HREADYOUT,
+    output wire                   HRESP,
+    output wire  [SYS_DATA_W-1:0] HRDATA
+  );
+    
+    wire  [IMEM_RAM_ADDR_W-3:0] addr_imem;
+    wire  [IMEM_RAM_DATA_W-1:0] wdata_imem;
+    wire  [IMEM_RAM_DATA_W-1:0] rdata_imem;
+    wire                  [3:0] wen_imem;
+    wire                        cs_imem;
+
+    // AHB to SRAM bridge
+    cmsdk_ahb_to_sram #(
+        .AW (IMEM_RAM_ADDR_W)
+    ) u_ahb_to_simem (
+        // AHB Inputs
+        .HCLK       (HCLK),
+        .HRESETn    (HRESETn),
+        .HSEL       (HSEL_imem), 
+        .HADDR      (HADDR_imem [IMEM_RAM_ADDR_W-1:0]),
+        .HTRANS     (HTRANS_imem),
+        .HSIZE      (HSIZE_imem),
+        .HWRITE     (HWRITE_imem),
+        .HWDATA     (HWDATA_imem),
+        .HREADY     (HREADYMUX_imem),
+
+        // AHB Outputs
+        .HREADYOUT  (HREADYOUT_imem),
+        .HRDATA     (HRDATA_imem),
+        .HRESP      (HRESP_imem),
+
+        // SRAM input
+        .SRAMRDATA  (rdata_imem),
+        
+        // SRAM Outputs
+        .SRAMADDR   (addr_imem),
+        .SRAMWDATA  (wdata_imem),
+        .SRAMWEN    (wen_imem),
+        .SRAMCS     (cs_imem)
+    );
+
+    // SRAM model
+    cmsdk_fpga_sram #(
+        .AW (IMEM_RAM_ADDR_W),
+        .filename(IMEM_RAM_FPGA_IMG)
+    ) u_fpga_imem (
+        // SRAM Inputs
+        .CLK        (HCLK),
+        .ADDR       (addr_imem),
+        .WDATA      (wdata_imem),
+        .WREN       (wen_imem),
+        .CS         (cs_imem),
+        
+        // SRAM Output
+        .RDATA      (rdata_imem)
+    );
+    
+endmodule
\ No newline at end of file
diff --git a/system/src/verilog/nanosoc_apb_subsystem.v b/system/src/nanosoc_regions/sysio/verilog/nanosoc_apb_subsystem.v
similarity index 100%
rename from system/src/verilog/nanosoc_apb_subsystem.v
rename to system/src/nanosoc_regions/sysio/verilog/nanosoc_apb_subsystem.v
diff --git a/system/src/verilog/nanosoc_sysio.v b/system/src/nanosoc_regions/sysio/verilog/nanosoc_region_sysio.v
similarity index 59%
rename from system/src/verilog/nanosoc_sysio.v
rename to system/src/nanosoc_regions/sysio/verilog/nanosoc_region_sysio.v
index 46395dba5082f22418fd8ace7a261d7cffa68abf..2c484541bf8a348be1c68d136f02bc2cb7aaf09b 100644
--- a/system/src/verilog/nanosoc_sysio.v
+++ b/system/src/nanosoc_regions/sysio/verilog/nanosoc_region_sysio.v
@@ -1,167 +1,150 @@
 //-----------------------------------------------------------------------------
-// customised Cortex-M0 'nanosoc' controller
+// Nanosoc System Peripheral Region (SYSIO)
+// - Region Mapped to: 0x40000000-0x4fffffff
 // A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license.
 //
 // Contributors
 //
-// David Flynn (d.w.flynn@soton.ac.uk)
+// David Mapstone (d.a.mapstone@soton.ac.uk)
+// David Flynn    (d.w.flynn@soton.ac.uk)
 //
-// Copyright � 2021-3, SoC Labs (www.soclabs.org)
+// Copyright 2021-3, SoC Labs (www.soclabs.org)
 //-----------------------------------------------------------------------------
 
-//-----------------------------------------------------------------------------
-// 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 2010-2013 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 : System level design for the example Cortex-M0 system
-//-----------------------------------------------------------------------------
+module nanosoc_region_sysio #(
+    parameter    SYS_ADDR_W=32,  // System Address Width
+    parameter    SYS_DATA_W=32,  // System Data Width
+    parameter    APB_ADDR_W=12,  // APB Peripheral Address Width
+    parameter    APB_DATA_W=32  // APB Peripheral Data Width
+  )(
+    input  wire                   FCLK,             // Free-running system clock
+    input  wire                   PORESETn,         // Power-On-Reset reset (active-low)
+    input  wire                   TESTMODE,         // Reset bypass in scan test
+    
+    // AHB interface
+    input  wire                   HCLK,             // AHB clock
+    input  wire                   HRESETn,          // AHB reset (active-low)
+    input  wire                   HSEL,             // AHB region select
+    input  wire  [SYS_ADDR_W-1:0] HADDR,            // AHB address
+    input  wire            [ 2:0] HBURST,           // AHB burst
+    input  wire                   HMASTLOCK,        // AHB lock
+    input  wire            [ 3:0] HPROT,            // AHB prot
+    input  wire            [ 2:0] HSIZE,            // AHB size
+    input  wire            [ 1:0] HTRANS,           // AHB transfer
+    input  wire  [SYS_DATA_W-1:0] HWDATA,           // AHB write data
+    input  wire                   HWRITE,           // AHB write
+    input  wire                   HREADY,           // AHB ready
+    output  wire [SYS_DATA_W-1:0] HRDATA,           // AHB read-data
+    output  wire                  HRESP,            // AHB response
+    output  wire                  HREADYOUT,        // AHB ready out
+    
+    // APB clocking control
+    input  wire                   PCLK,             // Peripheral clock
+    input  wire                   PCLKG,            // Gated Peripheral bus clock
+    input  wire                   PRESETn,          // Peripheral system and APB reset
+    input  wire                   PCLKEN,           // Clock divide control for AHB to APB bridge
+    
+    // APB external Slave Interface
+    output wire                   exp12_psel,
+    output wire                   exp13_psel,
+    output wire                   exp14_psel,
+    output wire                   exp15_psel,
+    output wire                   exp_penable,
+    output wire                   exp_pwrite,
+    output wire  [APB_ADDR_W-1:0] exp_paddr,
+    output wire  [APB_DATA_W-1:0] exp_pwdata,
+    input  wire  [APB_DATA_W-1:0] exp12_prdata,
+    input  wire                   exp12_pready,
+    input  wire                   exp12_pslverr,
+    input  wire  [APB_DATA_W-1:0] exp13_prdata,
+    input  wire                   exp13_pready,
+    input  wire                   exp13_pslverr,
+    input  wire  [APB_DATA_W-1:0] exp14_prdata,
+    input  wire                   exp14_pready,
+    input  wire                   exp14_pslverr,
+    input  wire  [APB_DATA_W-1:0] exp15_prdata,
+    input  wire                   exp15_pready,
+    input  wire                   exp15_pslverr,
+
+    // CPU sideband signalling
+    output wire                 SYS_NMI,          // watchdog_interrupt;
+    output wire         [31:0]  SYS_APB_IRQ,      // apbsubsys_interrupt;
+    output wire         [15:0]  SYS_GPIO0_IRQ,    // GPIO 0 irqs
+    output wire         [15:0]  SYS_GPIO1_IRQ,    // GPIO 0 irqs
+    
+    // CPU power/reset control
+    output wire                 REMAP_CTRL,       // REMAP control bit
+    output wire                 APBACTIVE,        // APB bus active (for clock gating of PCLKG)
+    output wire                 SYSRESETREQ,      // Processor control - system reset request
+    output wire                 WDOGRESETREQ,     // Watchdog reset request
+    input  wire                 LOCKUP,           // Processor status - Locked up
+    output wire                 LOCKUPRESET,      // System Controller cfg - reset if lockup
+    output wire                 PMUENABLE,        // System Controller cfg - Enable PMU
+
+    // IO signalling
+    input  wire                 uart0_rxd,        // Uart 0 receive data
+    output wire                 uart0_txd,        // Uart 0 transmit data
+    output wire                 uart0_txen,       // Uart 0 transmit data enable
+    input  wire                 uart1_rxd,        // Uart 1 receive data
+    output wire                 uart1_txd,        // Uart 1 transmit data
+    output wire                 uart1_txen,       // Uart 1 transmit data enable
+    input  wire                 uart2_rxd,        // Uart 2 receive data
+    output wire                 uart2_txd,        // Uart 2 transmit data
+    output wire                 uart2_txen,       // Uart 2 transmit data enable
+    input  wire                 timer0_extin,     // Timer 0 external input
+    input  wire                 timer1_extin,     // Timer 1 external input
+
+    // GPIO
+    input  wire          [15:0] p0_in,            // GPIO 0 inputs
+    output wire          [15:0] p0_out,           // GPIO 0 outputs
+    output wire          [15:0] p0_outen,         // GPIO 0 output enables
+    output wire          [15:0] p0_altfunc,       // GPIO 0 alternate function (pin mux)
+    input  wire          [15:0] p1_in,            // GPIO 1 inputs
+    output wire          [15:0] p1_out,           // GPIO 1 outputs
+    output wire          [15:0] p1_outen,         // GPIO 1 output enables
+    output wire          [15:0] p1_altfunc        // GPIO 1 alternate function (pin mux)
+  );
 
-module nanosoc_sysio
-(
-  input  wire         FCLK,             // Free-running system clock
-  input  wire         PORESETn,         // Power-On-Reset reset (active-low)
-  input  wire         TESTMODE,         // Reset bypass in scan test
-// AHB interface
-  input  wire         HCLK,             // AHB clock
-  input  wire         HRESETn,          // AHB reset (active-low)
-  input  wire         HSEL,             // AHB region select
-  input  wire  [31:0] HADDR,            // AHB address
-  input  wire  [ 2:0] HBURST,           // AHB burst
-  input  wire         HMASTLOCK,        // AHB lock
-  input  wire  [ 3:0] HPROT,            // AHB prot
-  input  wire  [ 2:0] HSIZE,            // AHB size
-  input  wire  [ 1:0] HTRANS,           // AHB transfer
-  input  wire  [31:0] HWDATA,           // AHB write data
-  input  wire         HWRITE,           // AHB write
-  input  wire         HREADY,           // AHB ready
-  output  wire [31:0] HRDATA,           // AHB read-data
-  output  wire        HRESP,            // AHB response
-  output  wire        HREADYOUT,        // AHB ready out
-  // APB clocking control
-  input  wire         PCLK,             // Peripheral clock
-  input  wire         PCLKG,            // Gated Peripheral bus clock
-  input  wire         PRESETn,          // Peripheral system and APB reset
-  input  wire         PCLKEN,           // Clock divide control for AHB to APB bridge
-  // APB external Slave Interface
-  output wire         exp12_psel,
-  output wire         exp13_psel,
-  output wire         exp14_psel,
-  output wire         exp15_psel,
-  output wire         exp_penable,
-  output wire         exp_pwrite,
-  output wire  [11:0] exp_paddr,
-  output wire  [31:0] exp_pwdata,
-  input  wire  [31:0] exp12_prdata,
-  input  wire         exp12_pready,
-  input  wire         exp12_pslverr,
-  input  wire  [31:0] exp13_prdata,
-  input  wire         exp13_pready,
-  input  wire         exp13_pslverr,
-  input  wire  [31:0] exp14_prdata,
-  input  wire         exp14_pready,
-  input  wire         exp14_pslverr,
-  input  wire  [31:0] exp15_prdata,
-  input  wire         exp15_pready,
-  input  wire         exp15_pslverr,
-
-  // CPU sideband signalling
-  output wire         SYS_NMI,          // watchdog_interrupt;
-  output wire [31:0]  SYS_APB_IRQ,      // apbsubsys_interrupt;
-  output wire [15:0]  SYS_GPIO0_IRQ,    // GPIO 0 irqs
-  output wire [15:0]  SYS_GPIO1_IRQ,    // GPIO 0 irqs
-  
-  // CPU power/reset control
-  output wire         REMAP_CTRL,       // REMAP control bit
-  output wire         APBACTIVE,        // APB bus active (for clock gating of PCLKG)
-  output wire         SYSRESETREQ,      // Processor control - system reset request
-  output wire         WDOGRESETREQ,     // Watchdog reset request
-  input  wire         LOCKUP,           // Processor status - Locked up
-  output wire         LOCKUPRESET,      // System Controller cfg - reset if lockup
-  output wire         PMUENABLE,        // System Controller cfg - Enable PMU
-
-  // IO signalling
-  input  wire         uart0_rxd,        // Uart 0 receive data
-  output wire         uart0_txd,        // Uart 0 transmit data
-  output wire         uart0_txen,       // Uart 0 transmit data enable
-  input  wire         uart1_rxd,        // Uart 1 receive data
-  output wire         uart1_txd,        // Uart 1 transmit data
-  output wire         uart1_txen,       // Uart 1 transmit data enable
-  input  wire         uart2_rxd,        // Uart 2 receive data
-  output wire         uart2_txd,        // Uart 2 transmit data
-  output wire         uart2_txen,       // Uart 2 transmit data enable
-  input  wire         timer0_extin,     // Timer 0 external input
-  input  wire         timer1_extin,     // Timer 1 external input
-
-  // GPIO
-  input  wire  [15:0] p0_in,            // GPIO 0 inputs
-  output wire  [15:0] p0_out,           // GPIO 0 outputs
-  output wire  [15:0] p0_outen,         // GPIO 0 output enables
-  output wire  [15:0] p0_altfunc,       // GPIO 0 alternate function (pin mux)
-  input  wire  [15:0] p1_in,            // GPIO 1 inputs
-  output wire  [15:0] p1_out,           // GPIO 1 outputs
-  output wire  [15:0] p1_outen,         // GPIO 1 output enables
-  output wire  [15:0] p1_altfunc       // GPIO 1 alternate function (pin mux)
-);
-
-
-  localparam BASEADDR_GPIO0  = 32'h4001_0000; // GPIO0 peripheral base address
-  localparam BASEADDR_GPIO1  = 32'h4001_1000; // GPIO1 peripheral base address
+
+  localparam BASEADDR_GPIO0       = 32'h4001_0000; // GPIO0 peripheral base address
+  localparam BASEADDR_GPIO1       = 32'h4001_1000; // GPIO1 peripheral base address
   localparam BASEADDR_SYSROMTABLE = 32'hf000_0000;
-  localparam BE              = 0;
+  localparam BE                   = 0;
   
    // ------------------------------------------------------------
    // Local wires
    // ------------------------------------------------------------
 
-  wire              defslv_hsel;   // AHB default slave signals
-  wire              defslv_hreadyout;
-  wire     [31:0]   defslv_hrdata;
-  wire              defslv_hresp;
+  wire                        defslv_hsel;   // AHB default slave signals
+  wire                        defslv_hreadyout;
+  wire     [SYS_DATA_W-1:0]   defslv_hrdata;
+  wire                        defslv_hresp;
 
-  wire              apbsys_hsel;  // APB subsystem AHB interface signals
-  wire              apbsys_hreadyout;
-  wire     [31:0]   apbsys_hrdata;
-  wire              apbsys_hresp;
+  wire                        apbsys_hsel;  // APB subsystem AHB interface signals
+  wire                        apbsys_hreadyout;
+  wire     [SYS_DATA_W-1:0]   apbsys_hrdata;
+  wire                        apbsys_hresp;
 
-  wire              gpio0_hsel;   // AHB GPIO bus interface signals
-  wire              gpio0_hreadyout;
-  wire     [31:0]   gpio0_hrdata;
-  wire              gpio0_hresp;
+  wire                        gpio0_hsel;   // AHB GPIO bus interface signals
+  wire                        gpio0_hreadyout;
+  wire     [SYS_DATA_W-1:0]   gpio0_hrdata;
+  wire                        gpio0_hresp;
 
-  wire              gpio1_hsel;   // AHB GPIO bus interface signals
-  wire              gpio1_hreadyout;
-  wire     [31:0]   gpio1_hrdata;
-  wire              gpio1_hresp;
+  wire                        gpio1_hsel;   // AHB GPIO bus interface signals
+  wire                        gpio1_hreadyout;
+  wire     [SYS_DATA_W-1:0]   gpio1_hrdata;
+  wire                        gpio1_hresp;
 
-  wire              sysctrl_hsel;  // System control bus interface signals
-  wire              sysctrl_hreadyout;
-  wire     [31:0]   sysctrl_hrdata;
-  wire              sysctrl_hresp;
+  wire                        sysctrl_hsel;  // System control bus interface signals
+  wire                        sysctrl_hreadyout;
+  wire     [SYS_DATA_W-1:0]   sysctrl_hrdata;
+  wire                        sysctrl_hresp;
 
   // System ROM Table
-  wire              sysrom_hsel;      // AHB to System ROM Table - select
-  wire              sysrom_hreadyout; 
-  wire     [31:0]   sysrom_hrdata;
-  wire              sysrom_hresp;
+  wire                        sysrom_hsel;      // AHB to System ROM Table - select
+  wire                        sysrom_hreadyout; 
+  wire     [SYS_DATA_W-1:0]   sysrom_hrdata;
+  wire                        sysrom_hresp;
 
 
   // AHB address decode
@@ -169,8 +152,7 @@ module nanosoc_sysio
      .BASEADDR_GPIO0       (BASEADDR_GPIO0),
      .BASEADDR_GPIO1       (BASEADDR_GPIO1),
      .BASEADDR_SYSROMTABLE (BASEADDR_SYSROMTABLE)
-    )
-    u_addr_decode (
+  ) u_addr_decode (
     // System Address
     .hsel         (HSEL),
     .haddr        (HADDR),
@@ -195,8 +177,7 @@ module nanosoc_sysio
     .PORT8_ENABLE  (0),
     .PORT9_ENABLE  (0),
     .DW            (32)
-    )
-    u_ahb_slave_mux_sys_bus (
+  ) u_ahb_slave_mux_sys_bus (
     .HCLK         (HCLK),
     .HRESETn      (HRESETn),
     .HREADY       (HREADY),
@@ -297,9 +278,9 @@ module nanosoc_sysio
   // Peripherals
   // -------------------------------
 
-  nanosoc_mcu_sysctrl #(.BE (BE))
-    u_nanosoc_mcu_sysctrl
-  (
+  nanosoc_mcu_sysctrl #(
+    .BE (BE)
+  ) u_nanosoc_mcu_sysctrl (
    // AHB Inputs
     .HCLK         (HCLK),
     .HRESETn      (HRESETn),
@@ -359,7 +340,7 @@ module nanosoc_sysio
     .PORTFUNC     (p0_altfunc), // Alternate function control
 
     .GPIOINT      (SYS_GPIO0_IRQ[15:0]),  // Interrupt outputs
-    .COMBINT      ( )
+    .COMBINT      ()
   );
 
 
@@ -367,8 +348,7 @@ module nanosoc_sysio
     .ALTERNATE_FUNC_MASK     (16'h002A), // pin muxing for Port #1
     .ALTERNATE_FUNC_DEFAULT  (16'h0000), // All pins default to GPIO
     .BE                      (BE)
-    )
-    u_ahb_gpio_1  (
+  ) u_ahb_gpio_1 (
    // AHB Inputs
     .HCLK         (HCLK),
     .HRESETn      (HRESETn),
@@ -412,8 +392,7 @@ module nanosoc_sysio
     .INCLUDE_APB_UART2       (1),  // Include simple UART #2.
     .INCLUDE_APB_WATCHDOG    (1),  // Include APB watchdog module
     .BE                      (BE)
-     )
-  u_nanosoc_apb_subsystem(
+  ) u_nanosoc_apb_subsystem (
 
   // AHB interface for AHB to APB bridge
     .HCLK          (HCLK),
diff --git a/system/src/verilog/nanosoc_mcu_sysctrl.v b/system/src/nanosoc_regions/sysio/verilog/nanosoc_sysctrl.v
similarity index 99%
rename from system/src/verilog/nanosoc_mcu_sysctrl.v
rename to system/src/nanosoc_regions/sysio/verilog/nanosoc_sysctrl.v
index cfdf5d14ea1b10be9e4a49d55d64a9aa4aa9d01a..7ce66cb889d7e3e2a31582c64a8097082d0814e1 100644
--- a/system/src/verilog/nanosoc_mcu_sysctrl.v
+++ b/system/src/nanosoc_regions/sysio/verilog/nanosoc_sysctrl.v
@@ -52,7 +52,7 @@
 //
 //-------------------------------------
 
-module nanosoc_mcu_sysctrl #(
+module nanosoc_sysctrl #(
   parameter  BE = 0            // By default use little endian
 
   )
diff --git a/system/src/verilog/nanosoc_sys_ahb_decode.v b/system/src/nanosoc_regions/sysio/verilog/nanosoc_sysio_decode.v
similarity index 87%
rename from system/src/verilog/nanosoc_sys_ahb_decode.v
rename to system/src/nanosoc_regions/sysio/verilog/nanosoc_sysio_decode.v
index 15d6d07ced7a86532c57de25f370183d21234143..36e86a9a6412a9c760b4f8eb4b3f2fea29e1d34c 100644
--- a/system/src/verilog/nanosoc_sys_ahb_decode.v
+++ b/system/src/nanosoc_regions/sysio/verilog/nanosoc_sysio_decode.v
@@ -1,5 +1,5 @@
 //-----------------------------------------------------------------------------
-// NanoSoC AHB decoder adapted from Arm CMSDK AHB decoder
+// NanoSoC AHB decoder for System Peripheral Space adapted from Arm CMSDK AHB decoder
 // A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license.
 //
 // Contributors
@@ -38,34 +38,31 @@
 //-----------------------------------------------------------------------------
 //
 
-module nanosoc_sys_ahb_decode #(
+module nanosoc_sysio_decode #(
+  parameter SYS_ADDR_W           = 32,
   // GPIO0 peripheral base address
   parameter BASEADDR_GPIO0       = 32'h4001_0000,
   // GPIO1 peripheral base address
   parameter BASEADDR_GPIO1       = 32'h4001_1000,
   // GPIO1 peripheral base address
   parameter BASEADDR_SYSCTRL     = 32'h4001_f000,
-
   // Location of the System ROM Table.
   parameter BASEADDR_SYSROMTABLE = 32'hf000_0000
- )
- (
+ )(
     // System Address
-    input wire              hsel,
-    input wire [31:0]       haddr,
+    input wire                  hsel,
+    input wire [SYS_ADDR_W-1:0] haddr,
 
     // Peripheral Selection
-    output wire             apbsys_hsel,
-    output wire             gpio0_hsel,
-    output wire             gpio1_hsel,
-    output wire             sysctrl_hsel,
-    output wire             sysrom_hsel,
+    output wire                 apbsys_hsel,
+    output wire                 gpio0_hsel,
+    output wire                 gpio1_hsel,
+    output wire                 sysctrl_hsel,
+    output wire                 sysrom_hsel,
 
     // Default slave
-    output wire             defslv_hsel
-    );
-
-
+    output wire                 defslv_hsel
+  );
 
   // AHB address decode
   // 0x40000000 - 0x4000FFFF : APB subsystem
diff --git a/system/src/verilog/nanosoc_ahb_cs_rom_table.v b/system/src/nanosoc_regions/systable/verilog/nanosoc_ahb_cs_rom_table.v
similarity index 100%
rename from system/src/verilog/nanosoc_ahb_cs_rom_table.v
rename to system/src/nanosoc_regions/systable/verilog/nanosoc_ahb_cs_rom_table.v
diff --git a/system/src/nanosoc_regions/systable/verilog/nanosoc_region_systable.v b/system/src/nanosoc_regions/systable/verilog/nanosoc_region_systable.v
new file mode 100644
index 0000000000000000000000000000000000000000..4c41134b52e55d3ff1ad81017cf7966c7d11a133
--- /dev/null
+++ b/system/src/nanosoc_regions/systable/verilog/nanosoc_region_systable.v
@@ -0,0 +1,71 @@
+//-----------------------------------------------------------------------------
+// Nanosoc System ROM Table Region (SYSTABLE)
+// - Region Mapped to: 0xF0000000-0xF0003FFF
+// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license.
+//
+// Contributors
+//
+// David Mapstone (d.a.mapstone@soton.ac.uk)
+// David Flynn    (d.w.flynn@soton.ac.uk)
+//
+// Copyright 2021-3, SoC Labs (www.soclabs.org)
+//-----------------------------------------------------------------------------
+
+module nanosoc_region_systable #(
+        parameter    SYS_ADDR_W    = 32,           // System Address Width
+        parameter    SYS_DATA_W    = 32,           // System Data Width
+        parameter    SYSTABLE_BASE = 32'hf000_0000 // Base Address for System ROM Table
+    )(
+        input  wire                   HCLK,       // Clock
+        input  wire                   HRESETn,    // Reset
+
+        // AHB connection to Initiator
+        input  wire                     HSEL,             // AHB region select
+        input  wire  [SYS_ADDR_W-1:0]   HADDR,            // AHB address
+        input  wire            [ 2:0]   HBURST,           // AHB burst
+        input  wire                     HMASTLOCK,        // AHB lock
+        input  wire            [ 3:0]   HPROT,            // AHB prot
+        input  wire            [ 2:0]   HSIZE,            // AHB size
+        input  wire            [ 1:0]   HTRANS,           // AHB transfer
+        input  wire  [SYS_DATA_W-1:0]   HWDATA,           // AHB write data
+        input  wire                     HWRITE,           // AHB write
+        input  wire                     HREADY,           // AHB ready
+        output  wire [SYS_DATA_W-1:0]   HRDATA,           // AHB read-data
+        output  wire                    HRESP,            // AHB response
+        output  wire                    HREADYOUT         // AHB ready out
+    );
+
+    // -------------------------------
+    // System ROM Table
+    // -------------------------------
+    nanosoc_ahb_cs_rom_table #(
+        .BASE              (SYSTABLE_BASE),
+        // Entry 0 = Cortex-M0 Processor
+        .ENTRY0BASEADDR    (32'hE00FF000),
+        .ENTRY0PRESENT     (1'b1),
+        // Entry 1 = CoreSight MTB-M0
+        .ENTRY1BASEADDR    (32'hF0200000),
+        .ENTRY1PRESENT     (0)
+    ) u_system_rom_table (
+        // ECO Revision
+        .ECOREVNUM                         (4'h0),
+        
+        //Inputs
+        .HCLK                              (HCLK),
+        .HSEL                              (HSEL),
+        .HADDR                             (HADDR),
+        .HBURST                            (HBURST),
+        .HMASTLOCK                         (HMASTLOCK),
+        .HPROT                             (HPROT),
+        .HSIZE                             (HSIZE),
+        .HTRANS                            (HTRANS),
+        .HWDATA                            (HWDATA),
+        .HWRITE                            (HWRITE),
+        .HREADY                            (HREADY),
+        
+        //Outputs
+        .HRDATA                            (HRDATA),
+        .HREADYOUT                         (HREADYOUT),
+        .HRESP                             (HRESP)
+    );
+endmodule
\ No newline at end of file
diff --git a/system/src/nanosoc_sys/verilog/nanosoc_sys.v b/system/src/nanosoc_sys/verilog/nanosoc_sys.v
new file mode 100644
index 0000000000000000000000000000000000000000..9c4d9f6024bd02263a9ae7b3fda348fb8688fdab
--- /dev/null
+++ b/system/src/nanosoc_sys/verilog/nanosoc_sys.v
@@ -0,0 +1,2 @@
+module nanosoc_sys (
+    
diff --git a/system/src/verilog/nanosoc_apb_usrt.v b/system/src/verilog/nanosoc_apb_usrt.v
deleted file mode 100644
index 8df136a6aaa944ef5f3b5dc0c5e1d94586117960..0000000000000000000000000000000000000000
--- a/system/src/verilog/nanosoc_apb_usrt.v
+++ /dev/null
@@ -1,1159 +0,0 @@
-//-----------------------------------------------------------------------------
-// NanoSoC APB USRT adapted from Arm CMSDK APB UART
-// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license.
-//
-// Contributors
-//
-// David Flynn (d.w.flynn@soton.ac.uk)
-//
-// Copyright � 2021-3, SoC Labs (www.soclabs.org)
-//-----------------------------------------------------------------------------
-
-//-----------------------------------------------------------------------------
-// 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 2010-2011 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 : Simple APB UART
-//-----------------------------------------------------------------------------
-//-------------------------------------
-// Programmer's model
-// 0x00 R     RXD[7:0]    Received Data
-//      W     TXD[7:0]    Transmit data
-// 0x04 RW    STAT[3:0]
-//              [3] RX buffer overrun (write 1 to clear)
-//              [2] TX buffer overrun (write 1 to clear)
-//              [1] RX buffer full (Read only)
-//              [0] TX buffer full (Read only)
-// 0x08 RW    CTRL[3:0]   TxIntEn, RxIntEn, TxEn, RxEn
-//              [6] High speed test mode Enable
-//              [5] RX overrun interrupt enable
-//              [4] TX overrun interrupt enable
-//              [3] RX Interrupt Enable
-//              [2] TX Interrupt Enable
-//              [1] RX Enable
-//              [0] TX Enable
-// 0x0C R/Wc  intr_status/INTCLEAR
-//              [3] RX overrun interrupt
-//              [2] TX overrun interrupt
-//              [1] RX interrupt
-//              [0] TX interrupt
-// 0x10 RW    BAUDDIV[19:0] Baud divider
-//            (minimum value is 16)
-// 0x3E0 - 0x3FC  ID registers
-//-------------------------------------
-
-module nanosoc_apb_usrt (
-// --------------------------------------------------------------------------
-// Port Definitions
-// --------------------------------------------------------------------------
-  input  wire        PCLK,     // Clock
-  input  wire        PCLKG,    // Gated Clock
-  input  wire        PRESETn,  // Reset
-
-  input  wire        PSEL,     // Device select
-  input  wire [11:2] PADDR,    // Address
-  input  wire        PENABLE,  // Transfer control
-  input  wire        PWRITE,   // Write control
-  input  wire [31:0] PWDATA,   // Write data
-
-  input  wire [3:0]  ECOREVNUM,// Engineering-change-order revision bits
-
-  output wire [31:0] PRDATA,   // Read data
-  output wire        PREADY,   // Device ready
-  output wire        PSLVERR,  // Device error response
-
-  output wire        TX_VALID_o,
-  output wire [7:0]  TX_DATA8_o,
-  input  wire        TX_READY_i,
-
-  input  wire        RX_VALID_i,
-  input  wire [7:0]  RX_DATA8_i,
-  output wire        RX_READY_o,
-
-  output wire        TXINT,    // Transmit Interrupt
-  output wire        RXINT,    // Receive Interrupt
-  output wire        TXOVRINT, // Transmit overrun Interrupt
-  output wire        RXOVRINT, // Receive overrun Interrupt
-  output wire        UARTINT); // Combined interrupt
-
-// Local ID parameters, APB UART part number is 0x821
-localparam  ARM_CMSDK_APB_UART_PID4 = 8'h04;
-localparam  ARM_CMSDK_APB_UART_PID5 = 8'h00;
-localparam  ARM_CMSDK_APB_UART_PID6 = 8'h00;
-localparam  ARM_CMSDK_APB_UART_PID7 = 8'h00;
-localparam  ARM_CMSDK_APB_UART_PID0 = 8'h21;
-localparam  ARM_CMSDK_APB_UART_PID1 = 8'hB8;
-localparam  ARM_CMSDK_APB_UART_PID2 = 8'h1B;
-localparam  ARM_CMSDK_APB_UART_PID3 = 4'h0;
-localparam  ARM_CMSDK_APB_UART_CID0 = 8'h0D;
-localparam  ARM_CMSDK_APB_UART_CID1 = 8'hF0;
-localparam  ARM_CMSDK_APB_UART_CID2 = 8'h05;
-localparam  ARM_CMSDK_APB_UART_CID3 = 8'hB1;
-
-// original external IOs
-wire        RXD = 1'b1; // Serial input
-wire        TXD;      // Transmit data output
-wire        TXEN;     // Transmit enabled
-wire        BAUDTICK; // Baud rate (x16) Tick
-  
-
-  // --------------------------------------------------------------------------
-  // Internal wires
-  // --------------------------------------------------------------------------
-// Signals for read/write controls
-wire          read_enable;
-wire          write_enable;
-wire          write_enable00; // Write enable for data register
-wire          write_enable04; // Write enable for Status register
-wire          write_enable08; // Write enable for control register
-wire          write_enable0c; // Write enable for interrupt status register
-wire          write_enable10; // Write enable for Baud rate divider
-reg     [7:0] read_mux_byte0; // Read data multiplexer for lower 8-bit
-reg     [7:0] read_mux_byte0_reg; // Register read data for lower 8-bit
-wire   [31:0] read_mux_word;  // Read data multiplexer for whole 32-bit
-wire    [3:0] pid3_value;     // constant value for lower 4-bit in perpherial ID3
-
-// Signals for Control registers
-reg     [6:0] reg_ctrl;       // Control register
-reg     [7:0] reg_tx_buf;     // Transmit data buffer
-reg     [7:0] reg_rx_buf;     // Receive data buffer
-reg    [19:0] reg_baud_div;   // Baud rate setting
-
-// Internal signals
-  // Baud rate divider
-reg    [15:0] reg_baud_cntr_i; // baud rate divider counter i (integer)
-wire   [15:0] nxt_baud_cntr_i;
-reg     [3:0] reg_baud_cntr_f; // baud rate divider counter f (fraction)
-wire    [3:0] nxt_baud_cntr_f;
-wire    [3:0] mapped_cntr_f;   // remapped counter f value
-reg           reg_baud_tick;   // Register baud rate tick (16 times of baud rate)
-reg           baud_updated;    // baud rate value has bee updated from APB
-wire          reload_i;        // baud rate divider counter i reload
-wire          reload_f;        // baud rate divider counter f reload
-wire          baud_div_en;     // enable baud rate counter
-
-  // Status
-wire    [3:0] uart_status;     // UART status
-reg           reg_rx_overrun;  // Receive overrun status register
-wire          rx_overrun;      // Receive overrun detection
-reg           reg_tx_overrun;  // Transmit overrun status register
-wire          tx_overrun;      // Transmit overrun detection
-wire          nxt_rx_overrun;  // next state for reg_rx_overrun
-wire          nxt_tx_overrun;  // next state for reg_tx_overrun
-  // Interrupts
-reg           reg_txintr;      // Transmit interrupt register
-reg           reg_rxintr;      // Receive interrupt register
-wire          tx_overflow_intr;// Transmit overrun/overflow interrupt
-wire          rx_overflow_intr;// Receive overrun/overflow interrupt
-wire    [3:0] intr_state;      // UART interrupt status
-wire    [1:0] intr_stat_set;   // Set TX/RX interrupt
-wire    [1:0] intr_stat_clear; // Clear TX/RX interrupt
-
-  // transmit
-reg     [3:0] tx_state;    // Transmit FSM state
-reg     [4:0] nxt_tx_state;
-wire          tx_state_update;
-wire          tx_state_inc; // Bit pulse
-reg     [3:0] tx_tick_cnt;  // Transmit Tick counter
-wire    [4:0] nxt_tx_tick_cnt;
-reg     [7:0] tx_shift_buf;      // Transmit shift register
-wire    [7:0] nxt_tx_shift_buf;  // next state    for tx_shift_buf
-wire          tx_buf_ctrl_shift; // shift control for tx_shift_buf
-wire          tx_buf_ctrl_load;  // load  control for tx_shift_buf
-reg           tx_buf_full;  // TX Buffer full
-reg           reg_txd;      // Tx Data
-wire          nxt_txd;      // next state of reg_txd
-wire          update_reg_txd; // update reg_txd
-wire          tx_buf_clear; // Clear buffer full status when data is load into TX shift register
-
-  // Receive data sync and filter
-reg           rxd_sync_1;  // Double flip-flop syncrhoniser
-reg           rxd_sync_2;  // Double flip-flop syncrhoniser
-reg     [2:0] rxd_lpf;     // Averaging Low Pass Filter
-wire    [2:0] nxt_rxd_lpf;
-wire          rx_shift_in; // Shift Register Input
-
-  // Receiver
-reg     [3:0] rx_state;   // Receiver FSM state
-reg     [4:0] nxt_rx_state;
-wire          rx_state_update;
-reg     [3:0] rx_tick_cnt; // Receiver Tick counter
-wire    [4:0] nxt_rx_tick_cnt;
-wire          update_rx_tick_cnt;
-wire          rx_state_inc;// Bit pulse
-reg     [6:0] rx_shift_buf;// Receiver shift data register
-wire    [6:0] nxt_rx_shift_buf;
-reg           rx_buf_full;  // Receive buffer full status
-wire          nxt_rx_buf_full;
-wire          rxbuf_sample; // Sample received data into receive data buffer
-wire          rx_data_read; // Receive data buffer read by APB interface
-wire    [7:0] nxt_rx_buf;
-
-// Start of main code
-// Read and write control signals
-assign  read_enable  = PSEL & (~PWRITE); // assert for whole APB read transfer
-assign  write_enable = PSEL & (~PENABLE) & PWRITE; // assert for 1st cycle of write transfer
-assign  write_enable00 = write_enable & (PADDR[11:2] == 10'h000);
-assign  write_enable04 = write_enable & (PADDR[11:2] == 10'h001);
-assign  write_enable08 = write_enable & (PADDR[11:2] == 10'h002);
-assign  write_enable0c = write_enable & (PADDR[11:2] == 10'h003);
-assign  write_enable10 = write_enable & (PADDR[11:2] == 10'h004);
-
-// Write operations
-  // Transmit data register
-  always @(posedge PCLKG or negedge PRESETn)
-  begin
-    if (~PRESETn)
-        reg_tx_buf <= {8{1'b0}};
-    else if (write_enable00)
-      reg_tx_buf <= PWDATA[7:0];
-  end
-
-  assign TX_DATA8_o = reg_tx_buf[7:0];
-  
-  // Status register overrun registers
-  assign nxt_rx_overrun = (reg_rx_overrun & (~((write_enable04|write_enable0c) & PWDATA[3]))) | rx_overrun;
-  assign nxt_tx_overrun = (reg_tx_overrun & (~((write_enable04|write_enable0c) & PWDATA[2]))) | tx_overrun;
-
-  // RX OverRun status
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      reg_rx_overrun <= 1'b0;
-    else if (rx_overrun | write_enable04 | write_enable0c)
-      reg_rx_overrun <= nxt_rx_overrun;
-  end
-
-  // TX OverRun status
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      reg_tx_overrun <= 1'b0;
-    else if (tx_overrun | write_enable04 | write_enable0c)
-      reg_tx_overrun <= nxt_tx_overrun;
-  end
-
-  // Control register
-  always @(posedge PCLKG or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      reg_ctrl <= {7{1'b0}};
-    else if (write_enable08)
-      reg_ctrl <= PWDATA[6:0];
-  end
-
-  // Baud rate divider - integer
-  always @(posedge PCLKG or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      reg_baud_div <= {20{1'b0}};
-    else if (write_enable10)
-      reg_baud_div <= PWDATA[19:0];
-  end
-
-// Read operation
-  assign uart_status = {reg_rx_overrun, reg_tx_overrun, rx_buf_full, tx_buf_full};
-
-  assign pid3_value  = ARM_CMSDK_APB_UART_PID3;
-
-  // First level of read mux
- always @(PADDR or reg_rx_buf or uart_status or reg_ctrl or intr_state or reg_baud_div
-   or ECOREVNUM or pid3_value)
-  begin
-   if (PADDR[11:5] == 7'h00) begin
-     case (PADDR[4:2])
-     3'h0: read_mux_byte0 =  reg_rx_buf;
-     3'h1: read_mux_byte0 =  {{4{1'b0}},uart_status};
-     3'h2: read_mux_byte0 =  {{1{1'b0}},reg_ctrl};
-     3'h3: read_mux_byte0 =  {{4{1'b0}},intr_state};
-     3'h4: read_mux_byte0 =  reg_baud_div[7:0];
-     3'h5, 3'h6, 3'h7: read_mux_byte0 =   {8{1'b0}};     //default read out value
-     default:  read_mux_byte0 =   {8{1'bx}};// x propogation
-     endcase
-   end
-   else if (PADDR[11:6] == 6'h3F) begin
-     case  (PADDR[5:2])
-       4'h0, 4'h1,4'h2,4'h3: read_mux_byte0 =   {8{1'b0}}; //default read out value
-   // ID register - constant values
-       4'h4: read_mux_byte0 = ARM_CMSDK_APB_UART_PID4; // 0xFD0 : PID 4
-       4'h5: read_mux_byte0 = ARM_CMSDK_APB_UART_PID5; // 0xFD4 : PID 5
-       4'h6: read_mux_byte0 = ARM_CMSDK_APB_UART_PID6; // 0xFD8 : PID 6
-       4'h7: read_mux_byte0 = ARM_CMSDK_APB_UART_PID7; // 0xFDC : PID 7
-       4'h8: read_mux_byte0 = ARM_CMSDK_APB_UART_PID0; // 0xFE0 : PID 0  APB UART part number[7:0]
-       4'h9: read_mux_byte0 = ARM_CMSDK_APB_UART_PID1; // 0xFE0 : PID 1 [7:4] jep106_id_3_0. [3:0] part number [11:8]
-       4'hA: read_mux_byte0 = ARM_CMSDK_APB_UART_PID2; // 0xFE0 : PID 2 [7:4] revision, [3] jedec_used. [2:0] jep106_id_6_4
-       4'hB: read_mux_byte0 = {ECOREVNUM[3:0],pid3_value[3:0]};
-                                                       // 0xFE0 : PID 3 [7:4] ECO revision, [3:0] modification number
-       4'hC: read_mux_byte0 = ARM_CMSDK_APB_UART_CID0; // 0xFF0 : CID 0
-       4'hD: read_mux_byte0 = ARM_CMSDK_APB_UART_CID1; // 0xFF4 : CID 1 PrimeCell class
-       4'hE: read_mux_byte0 = ARM_CMSDK_APB_UART_CID2; // 0xFF8 : CID 2
-       4'hF: read_mux_byte0 = ARM_CMSDK_APB_UART_CID3; // 0xFFC : CID 3
-       default : read_mux_byte0 = {8{1'bx}}; // x propogation
-      endcase
-    end
-    else begin
-       read_mux_byte0 =   {8{1'b0}};     //default read out value
-    end
-  end
-
-
-
-  // Register read data
-  always @(posedge PCLKG or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      read_mux_byte0_reg      <= {8{1'b0}};
-    else if (read_enable)
-      read_mux_byte0_reg      <= read_mux_byte0;
-  end
-
-  // Second level of read mux
-  assign read_mux_word[ 7: 0] = read_mux_byte0_reg;
-  assign read_mux_word[19: 8] = (PADDR[11:2]==10'h004) ? reg_baud_div[19:8] : {12{1'b0}};
-  assign read_mux_word[31:20] = {12{1'b0}};
-
-
-  // Output read data to APB
-  assign PRDATA[31: 0] = (read_enable) ? read_mux_word : {32{1'b0}};
-  assign PREADY  = 1'b1; // Always ready
-  assign PSLVERR = 1'b0; // Always okay
-
-// --------------------------------------------
-// Baud rate generator
-  // Baud rate generator enable
-  assign baud_div_en    = (reg_ctrl[1:0] != 2'b00);
-  assign mapped_cntr_f  = {reg_baud_cntr_f[0],reg_baud_cntr_f[1],
-                           reg_baud_cntr_f[2],reg_baud_cntr_f[3]};
-  // Reload Integer divider
-  // when UART enabled and (reg_baud_cntr_f < reg_baud_div[3:0])
-  // then count to 1, or
-  // when UART enabled then count to 0
-  assign reload_i      = (baud_div_en &
-         (((mapped_cntr_f >= reg_baud_div[3:0]) &
-         (reg_baud_cntr_i[15:1] == {15{1'b0}})) |
-         (reg_baud_cntr_i[15:0] == {16{1'b0}})));
-
-  // Next state for Baud rate divider
-  assign nxt_baud_cntr_i = (baud_updated | reload_i) ? reg_baud_div[19:4] :
-                           (reg_baud_cntr_i - 16'h0001);
-  // Update at reload or decrement
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      reg_baud_cntr_i   <= {16{1'b0}};
-    else if (baud_updated | baud_div_en)
-      reg_baud_cntr_i   <= nxt_baud_cntr_i;
-  end
-
-  // Reload fraction divider
-  assign reload_f      = baud_div_en & (reg_baud_cntr_f==4'h0) &
-                        reload_i;
-  // Next state for fraction part of Baud rate divider
-  assign nxt_baud_cntr_f =
-                        (reload_f|baud_updated) ? 4'hF :
-                        (reg_baud_cntr_f - 4'h1);
-
-  // Update at reload or decrement
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      reg_baud_cntr_f   <= {4{1'b0}};
-    else if (baud_updated | reload_f | reload_i)
-      reg_baud_cntr_f   <= nxt_baud_cntr_f;
-  end
-
-  // Generate control signal to update baud rate counters
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      baud_updated    <= 1'b0;
-    else if (write_enable10 | baud_updated)
-      // Baud rate updated - to load new value to counters
-      baud_updated    <= write_enable10;
-  end
-
-  // Generate Tick signal for external logic
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      reg_baud_tick    <= 1'b0;
-    else if (reload_i | reg_baud_tick)
-      reg_baud_tick    <= reload_i;
-  end
-
-  // Connect to external
-  assign BAUDTICK = reg_baud_tick;
-
-// --------------------------------------------
-// Transmit
-
-  // Buffer full status
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      tx_buf_full     <= 1'b0;
-    else if (write_enable00) // | tx_buf_clear)
-      tx_buf_full     <= write_enable00;
-    else if (tx_buf_full & TX_READY_i) // AXI stream ack
-      tx_buf_full <= 0;
-  end
-
-  assign TX_VALID_o = tx_buf_full;
-
-  // Increment TickCounter
-  assign nxt_tx_tick_cnt = ((tx_state==4'h1) & reg_baud_tick) ? {5{1'b0}} :
-                        tx_tick_cnt + {{3{1'b0}},reg_baud_tick};
-
-  // Registering TickCounter
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      tx_tick_cnt     <= {4{1'b0}};
-    else if (reg_baud_tick)
-      tx_tick_cnt     <= nxt_tx_tick_cnt[3:0];
-  end
-
-  // Increment state (except Idle(0) and Wait for Tick(1))
-  assign tx_state_inc   = (((&tx_tick_cnt)|(tx_state==4'h1)) & reg_baud_tick)|reg_ctrl[6];
-          // state increment every cycle of high speed test mode is enabled
-  // Clear buffer full status when data is load into shift register
-  assign tx_buf_clear   = ((tx_state==4'h0) & tx_buf_full) |
-                        ((tx_state==4'hB) & tx_buf_full & tx_state_inc);
-
-  // tx_state machine
-  // 0 = Idle, 1 =  Wait for Tick,
-  // 2 = Start bit, 3 = D0 .... 10 = D7
-  // 11 = Stop bit
-  always @(tx_state or tx_buf_full or tx_state_inc or reg_ctrl)
-  begin
-  case (tx_state)
-    0: begin
-       nxt_tx_state = (tx_buf_full & reg_ctrl[0]) ? 5'h01 : 5'h00;  // New data is written to buffer
-       end
-    1,                         // State 1   : Wait for next Tick
-    2,3,4,5,6,7,8,9,10: begin  // State 2-10: Start bit, D0 - D7
-       nxt_tx_state = tx_state + {3'b000,tx_state_inc};
-       end
-    11: begin // Stop bit , goto next start bit or Idle
-       nxt_tx_state = (tx_state_inc) ? ( tx_buf_full ? 5'h02:5'h00) : {1'b0, tx_state};
-       end
-    default:
-       nxt_tx_state = {5{1'bx}};
-  endcase
-  end
-
-  assign tx_state_update = tx_state_inc | ((tx_state==4'h0) & tx_buf_full & reg_ctrl[0]) | (tx_state>4'd11);
-
-  // Registering outputs
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      tx_state        <= {4{1'b0}};
-    else if (tx_state_update)
-      tx_state        <= nxt_tx_state[3:0];
-  end
-
-  // Load/shift TX register
-  assign tx_buf_ctrl_load  = (((tx_state==4'h0) & tx_buf_full) |
-                              ((tx_state==4'hB) & tx_buf_full & tx_state_inc));
-  assign tx_buf_ctrl_shift =  ((tx_state>4'h2) & tx_state_inc);
-
-  assign nxt_tx_shift_buf = tx_buf_ctrl_load ? reg_tx_buf[7:0] : {1'b1,tx_shift_buf[7:1]};
-
-  // Registering TX shift register
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      tx_shift_buf    <= {8{1'b0}};
-    else if (tx_buf_ctrl_shift | tx_buf_ctrl_load)
-      tx_shift_buf    <= nxt_tx_shift_buf;
-  end
-
-  // Data output
-  assign nxt_txd = (tx_state==4'h2) ? 1'b0 :
-                   (tx_state>4'h2) ? tx_shift_buf[0] : 1'b1;
-
-  assign update_reg_txd = (nxt_txd != reg_txd);
-
-  // Registering outputs
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      reg_txd         <= 1'b1;
-    else if (update_reg_txd)
-      reg_txd         <= nxt_txd;
-  end
-
-  // Generate TX overrun error status
-  assign tx_overrun = tx_buf_full & (~tx_buf_clear) & write_enable00;
-
-  // Connect to external
-  assign TXD  = reg_txd;
-  assign TXEN = reg_ctrl[0];
-
-// --------------------------------------------
-// Receive synchronizer and low pass filter
-
-  // Doubling Flip-flop synxt_rx_tick_cntnchroniser
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      begin
-      rxd_sync_1 <= 1'b1;
-      rxd_sync_2 <= 1'b1;
-      end
-    else if (reg_ctrl[1]) // Turn off synchronizer if receive is not enabled
-      begin
-      rxd_sync_1 <= RXD;
-      rxd_sync_2 <= rxd_sync_1;
-      end
-  end
-
-  // Averaging low pass filter
-  assign nxt_rxd_lpf = {rxd_lpf[1:0], rxd_sync_2};
-  // Registering stage for low pass filter
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      rxd_lpf <= 3'b111;
-    else if (reg_baud_tick)
-      rxd_lpf <= nxt_rxd_lpf;
-  end
-
-  // Averaging values
-  assign rx_shift_in = (rxd_lpf[1] & rxd_lpf[0]) |
-                       (rxd_lpf[1] & rxd_lpf[2]) |
-                       (rxd_lpf[0] & rxd_lpf[2]);
-
-// --------------------------------------------
-// Receive
-
-  // Increment TickCounter
-  assign nxt_rx_tick_cnt = ((rx_state==4'h0) & (~rx_shift_in)) ? 5'h08 :
-                        rx_tick_cnt + {{3{1'b0}},reg_baud_tick};
-
-  assign update_rx_tick_cnt = ((rx_state==4'h0) & (~rx_shift_in)) | reg_baud_tick;
-
-  // Registering other register
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      rx_tick_cnt    <= {4{1'b0}};
-    else if (update_rx_tick_cnt)
-      rx_tick_cnt    <= nxt_rx_tick_cnt[3:0];
-  end
-
-  // Increment state
-  assign rx_state_inc   = ((&rx_tick_cnt) & reg_baud_tick);
-  // Buffer full status
-  assign nxt_rx_buf_full = rxbuf_sample | (rx_buf_full & (~rx_data_read));
-
-  // Sample shift register when D7 is sampled
-///  assign rxbuf_sample  = ((rx_state==4'h9) & rx_state_inc);
-  assign rxbuf_sample  = RX_VALID_i & !rx_buf_full;
-
-  // Reading receive buffer (Set at 1st cycle of APB transfer
-  // because read mux is registered before output)
-  assign rx_data_read   = (PSEL & (~PENABLE) & (PADDR[11:2]==10'h000) & (~PWRITE));
-  // Generate RX overrun error status
-  assign rx_overrun = rx_buf_full & rxbuf_sample & (~rx_data_read);
-
-  // rx_state machine
-  // 0 = Idle, 1 =  Start of Start bit detected
-  // 2 = Sample Start bit, 3 = D0 .... 10 = D7
-  // 11 = Stop bit
-  // 11, 12, 13, 14, 15: illegal/unused states
-  always @(rx_state or rx_shift_in or rx_state_inc or reg_ctrl)
-  begin
-  case (rx_state)
-    0: begin
-       nxt_rx_state = ((~rx_shift_in) & reg_ctrl[1]) ? 5'h01 : 5'h00;  // Wait for Start bit
-       end
-    1,                      // State 1  : Wait for middle of start bit
-    2,3,4,5,6,7,8,9: begin  // State 2-9: D0 - D7
-       nxt_rx_state = rx_state + {3'b000,rx_state_inc};
-       end
-    10: begin // Stop bit , goto back to Idle
-       nxt_rx_state = (rx_state_inc) ? 5'h00 : 5'h0A;
-       end
-    default:
-       nxt_rx_state = {5{1'bx}};
-  endcase
-  end
-
-  assign rx_state_update = rx_state_inc |  ((~rx_shift_in) & reg_ctrl[1]);
-
-  // Registering rx_state
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      rx_state       <= {4{1'b0}};
-    else if (rx_state_update)
-      rx_state       <= nxt_rx_state[3:0];
-  end
-
-  // Buffer full status
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      rx_buf_full     <= 1'b0;
-    else if (rxbuf_sample | rx_data_read)
-      rx_buf_full     <= nxt_rx_buf_full;
-  end
-
-  // Sample receive buffer
-///  assign nxt_rx_buf     = {rx_shift_in, rx_shift_buf};
-  assign nxt_rx_buf     = RX_DATA8_i[7:0];
-  
-  // Registering receive data buffer
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      reg_rx_buf      <= {8{1'b0}};
-    else if  (rxbuf_sample)
-      reg_rx_buf      <= nxt_rx_buf;
-  end
-
-  // Shift register
-  assign nxt_rx_shift_buf= {rx_shift_in, rx_shift_buf[6:1]};
-  // Registering shift buffer
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      rx_shift_buf    <= {7{1'b0}};
-    else if (rx_state_inc)
-      rx_shift_buf    <= nxt_rx_shift_buf;
-  end
-
-
-
-// --------------------------------------------
-// Interrupts
-  // Set by event
-  assign intr_stat_set[1] = reg_ctrl[3] & rxbuf_sample; // A new receive data is sampled
-  assign intr_stat_set[0] = reg_ctrl[2] & reg_ctrl[0] & tx_buf_full & tx_buf_clear;
-                            // Falling edge of buffer full
-  // Clear by write to IntClear register
-  assign intr_stat_clear[1:0] = {2{write_enable0c}} & PWDATA[1:0];
-
-  // Registering outputs
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      reg_txintr    <= 1'b0;
-    else if (intr_stat_set[0] | intr_stat_clear[0])
-      reg_txintr    <= intr_stat_set[0];
-  end
-
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      reg_rxintr    <= 1'b0;
-    else if (intr_stat_set[1] | intr_stat_clear[1])
-      reg_rxintr    <= intr_stat_set[1];
-  end
-
-  assign rx_overflow_intr = reg_rx_overrun & reg_ctrl[5];
-  assign tx_overflow_intr = reg_tx_overrun & reg_ctrl[4];
-
-  // Interrupt status for read back
-  assign intr_state = {rx_overflow_intr, tx_overflow_intr, reg_rxintr, reg_txintr};
-
-  // Connect to external
-  assign TXINT    = reg_txintr;
-  assign RXINT    = reg_rxintr;
-  assign TXOVRINT = tx_overflow_intr;
-  assign RXOVRINT = rx_overflow_intr;
-  assign UARTINT  = reg_txintr | reg_rxintr | tx_overflow_intr | rx_overflow_intr;
-
-
-`ifdef ARM_APB_ASSERT_ON
-   // ------------------------------------------------------------
-   // Assertions
-   // ------------------------------------------------------------
-`include "std_ovl_defines.h"
-
-   // Prepare signals for OVL checking
-   reg [15:0] ovl_last_reg_baud_cntr_i;
-   reg  [3:0] ovl_last_reg_baud_cntr_f;
-   reg        ovl_last_baud_div_en;
-   reg        ovl_last_baud_updated;
-   always @(posedge PCLK or negedge PRESETn)
-   begin
-     if (~PRESETn)
-       begin
-       ovl_last_reg_baud_cntr_i <= {16{1'b0}};
-       ovl_last_reg_baud_cntr_f <= {4{1'b0}};
-       ovl_last_baud_div_en     <= 1'b0;
-       ovl_last_baud_updated    <= 1'b0;
-       end
-     else
-       begin
-       ovl_last_reg_baud_cntr_i <= reg_baud_cntr_i;
-       ovl_last_reg_baud_cntr_f <= reg_baud_cntr_f;
-       ovl_last_baud_div_en     <= baud_div_en;
-       ovl_last_baud_updated    <= baud_updated;
-       end
-   end
-
-   reg        ovl_reg_hs_test_mode_triggered; // Indicate if HighSpeed testmode has been activated
-   wire       ovl_nxt_hs_test_mode_triggered;
-   reg  [7:0] ovl_reg_tx_tick_count;  // For measuring width of TX state
-   wire [7:0] ovl_nxt_tx_tick_count;
-   reg  [7:0] ovl_reg_rx_tick_count;  // For measuring width of RX state
-   wire [7:0] ovl_nxt_rx_tick_count;
-   reg  [3:0] ovl_reg_last_tx_state;  // last state
-   reg  [3:0] ovl_reg_last_rx_state;
-   reg  [6:0] ovl_last_reg_ctrl;
-
-   // Clear test mode indicator each time state is changed, set to 1 if high speed test mode is
-   // enabled
-   assign ovl_nxt_hs_test_mode_triggered =
-     (tx_state!=ovl_reg_last_tx_state) ? reg_ctrl[6]: (reg_ctrl[6] | ovl_reg_hs_test_mode_triggered);
-
-   // Counter clear at each state change, increasement at each reg_baud_tick
-   assign ovl_nxt_tx_tick_count = (tx_state!=ovl_reg_last_tx_state) ? (8'h00) :
-     (ovl_reg_tx_tick_count + {{7{1'b0}}, reg_baud_tick});
-
-   // Counter clear at each state change, increasement at each reg_baud_tick
-   assign ovl_nxt_rx_tick_count = (rx_state!=ovl_reg_last_rx_state) ? (8'h00) :
-     (ovl_reg_rx_tick_count + {{7{1'b0}}, reg_baud_tick});
-
-   always@(posedge PCLK or negedge PRESETn)
-     begin
-     if (~PRESETn)
-       begin
-       ovl_reg_hs_test_mode_triggered <= 1'b0;
-       ovl_reg_last_tx_state          <= 4'h0;
-       ovl_reg_last_rx_state          <= 4'h0;
-       ovl_reg_tx_tick_count          <= 8'h00;
-       ovl_reg_rx_tick_count          <= 8'h00;
-       ovl_last_reg_ctrl              <= 7'h00;
-       end
-     else
-       begin
-       ovl_reg_hs_test_mode_triggered <= ovl_nxt_hs_test_mode_triggered;
-       ovl_reg_last_tx_state          <= tx_state;
-       ovl_reg_last_rx_state          <= rx_state;
-       ovl_reg_tx_tick_count          <= ovl_nxt_tx_tick_count;
-       ovl_reg_rx_tick_count          <= ovl_nxt_rx_tick_count;
-       ovl_last_reg_ctrl              <= reg_ctrl;
-       end
-     end
-
-   // Signals for checking clearing of interrupts
-   reg          ovl_last_txint;
-   reg          ovl_last_rxint;
-   reg          ovl_last_psel;
-   reg          ovl_last_penable;
-   reg          ovl_last_pwrite;
-   reg  [31:0]  ovl_last_pwdata;
-   reg  [11:2]  ovl_last_paddr;
-   reg          ovl_last_rx_buf_full;
-   reg          ovl_last_tx_shift_buf_0;
-
-
-   always@(posedge PCLK or negedge PRESETn)
-     begin
-     if (~PRESETn)
-       begin
-       ovl_last_txint   <= 1'b0;
-       ovl_last_rxint   <= 1'b0;
-       ovl_last_psel    <= 1'b0;
-       ovl_last_penable <= 1'b0;
-       ovl_last_pwrite  <= 1'b0;
-       ovl_last_paddr   <= {10{1'b0}};
-       ovl_last_pwdata  <= {32{1'b0}};
-       ovl_last_rx_buf_full  <= 1'b0;
-       ovl_last_tx_shift_buf_0 <= 1'b0;
-       end
-     else
-       begin
-       ovl_last_txint   <= TXINT;
-       ovl_last_rxint   <= RXINT;
-       ovl_last_psel    <= PSEL;
-       ovl_last_penable <= PENABLE;
-       ovl_last_pwrite  <= PWRITE;
-       ovl_last_paddr   <= PADDR;
-       ovl_last_pwdata  <= PWDATA;
-       ovl_last_rx_buf_full  <= rx_buf_full;
-       ovl_last_tx_shift_buf_0 <= tx_shift_buf[0];
-       end
-     end
-
-   // Ensure rx_state must not be 11, 12, 13, 14, 15
-   assert_never
-     #(`OVL_ERROR,`OVL_ASSERT,
-       "rx_state in illegal state")
-   u_ovl_rx_state_illegal
-     (.clk(PCLK), .reset_n(PRESETn),
-      .test_expr((rx_state==4'hB)|(rx_state==4'hC)|(rx_state==4'hD)|
-      (rx_state==4'hE)|(rx_state==4'hF)));
-
-   // Ensure tx_state must not be 12, 13, 14, 15
-   assert_never
-     #(`OVL_ERROR,`OVL_ASSERT,
-       "tx_state in illegal state")
-   u_ovl_tx_state_illegal
-     (.clk(PCLK), .reset_n(PRESETn),
-      .test_expr((tx_state==4'hC)|(tx_state==4'hD)|
-      (tx_state==4'hE)|(tx_state==4'hF)));
-
-   // Ensure reg_baud_cntr_i change only if UART is enabled
-   // or if write to baud rate divider
-   assert_implication
-     #(`OVL_ERROR,`OVL_ASSERT,
-       "Unexpected baud rate divider change")
-   u_ovl_reg_baud_cntr_i_change
-     (.clk(PCLK), .reset_n(PRESETn),
-      .antecedent_expr(ovl_last_reg_baud_cntr_i!=reg_baud_cntr_i),
-      .consequent_expr(ovl_last_baud_div_en | ovl_last_baud_updated )
-      );
-
-   // Ensure reg_baud_div[19:4] >= reg_baud_cntr_i unless reg_baud_div just been programmed
-   assert_implication
-     #(`OVL_ERROR,`OVL_ASSERT,
-       "Unexpected baud rate divided change")
-   u_ovl_reg_baud_cntr_i_range
-     (.clk(PCLK), .reset_n(PRESETn),
-      .antecedent_expr(reg_baud_cntr_i>reg_baud_div[19:4]),
-      .consequent_expr(baud_updated)
-      );
-
-   // Ensure reg_baud_cntr_f change only if UART is enabled
-   // or if write to baud rate divider
-   assert_implication
-     #(`OVL_ERROR,`OVL_ASSERT,
-       "Unexpected baud rate divider change")
-   u_ovl_reg_baud_cntr_f_change
-     (.clk(PCLK), .reset_n(PRESETn),
-      .antecedent_expr(ovl_last_reg_baud_cntr_f!=reg_baud_cntr_f),
-      .consequent_expr(ovl_last_baud_div_en | ovl_last_baud_updated )
-      );
-
-   // Ensure tx_buf_full is set to 1 after write to TX buffer (PADDR[11:2]==0)
-   assert_next
-     #(`OVL_ERROR, 1,1,0, `OVL_ASSERT,
-      "tx_buf_full should be asserted after write to TX buffer")
-   u_ovl_tx_buf_full
-    (.clk(PCLK),  .reset_n(PRESETn),
-     .start_event (PSEL & (~PENABLE) & PWRITE & (PADDR[11:2] == 10'h000)),
-     .test_expr   (tx_buf_full)
-     );
-
-   // If last tx_state=0 (idle) or 1 (wait for tick), TXD = 1.
-   assert_next
-     #(`OVL_ERROR, 1,1,0, `OVL_ASSERT,
-      "TXD should be 1 when idle or just before data transmission")
-   u_ovl_txd_state_0_1
-    (.clk(PCLK),  .reset_n(PRESETn),
-     .start_event ((tx_state==4'd0)|(tx_state==4'd1)),
-     .test_expr   (TXD==1'b1)
-     );
-
-   // If last tx_state=2 (start bit), TXD = 0.
-   assert_next
-     #(`OVL_ERROR, 1,1,0, `OVL_ASSERT,
-      "TXD should be 0 when output start bit")
-   u_ovl_txd_state_2
-    (.clk(PCLK),  .reset_n(PRESETn),
-     .start_event (tx_state==4'd2),
-     .test_expr   (TXD==1'b0)
-     );
-
-   // If last tx_state=3-10 (D0 to D7), TXD = anything (tx_shift_buf[0]).
-   assert_next
-     #(`OVL_ERROR, 1,1,0, `OVL_ASSERT,
-      "TXD should be same as first bit of shift register during transfer")
-   u_ovl_txd_state_3_to_10
-    (.clk(PCLK),  .reset_n(PRESETn),
-     .start_event ((tx_state>4'd2) & (tx_state<4'd11)),
-     .test_expr   (TXD==ovl_last_tx_shift_buf_0)
-     );
-
-   // If last tx_state=11 (stop bit), TXD = 1.
-   assert_next
-     #(`OVL_ERROR, 1,1,0, `OVL_ASSERT,
-      "TXD should be 1 when output stop bit")
-   u_ovl_txd_state_11
-    (.clk(PCLK),  .reset_n(PRESETn),
-     .start_event (tx_state==4'd11),
-     .test_expr   (TXD==1'b1)
-     );
-
-   // Duration of tx_state in 2 to 11 must have 16 reg_baud_tick
-   // (unless high speed test mode has been active)
-   assert_implication
-     #(`OVL_ERROR,`OVL_ASSERT,
-     "Duration of tx_state when in state 2 to state 11 should have 16 ticks")
-   u_ovl_width_of_tx_state
-     (.clk(PCLK), .reset_n(PRESETn),
-      .antecedent_expr((tx_state!=ovl_reg_last_tx_state) &      // at state change
-       (ovl_reg_last_tx_state>4'd1)&(ovl_reg_last_tx_state<4'd12) & // from state 2 to 11
-       (ovl_reg_hs_test_mode_triggered==1'b0)), // high speed test mode not triggered
-      .consequent_expr((ovl_reg_tx_tick_count==8'd15) | (ovl_reg_tx_tick_count==8'd16))
-        // count from 0 to 15 (16 ticks)
-     );
-
-
-   // In high speed test mode, tx_state must change if it is in range of 2 to 11
-   assert_next
-     #(`OVL_ERROR, 1,1,0, `OVL_ASSERT,
-       "Duration of tx_state should be 1 cycle if high speed test mode is enabled")
-   u_ovl_width_of_tx_state_in_high_speed_test_mode
-     (.clk(PCLK), .reset_n(PRESETn),
-      .start_event((tx_state>4'd1)&(tx_state<4'd12) & reg_ctrl[6]),
-      .test_expr  (tx_state != ovl_reg_last_tx_state)
-      );
-
-   // Duration of rx_state in 1 must have 8 reg_baud_tick
-   assert_implication
-     #(`OVL_ERROR,`OVL_ASSERT,
-     "Duration of rx_state when state 1 should have 8 ticks")
-   u_ovl_width_of_rx_state_1
-     (.clk(PCLK), .reset_n(PRESETn),
-      .antecedent_expr((rx_state!=ovl_reg_last_rx_state) & // at state change
-       (ovl_reg_last_rx_state==4'd1)), // last state was state 1
-      .consequent_expr((ovl_reg_rx_tick_count==8'd7)|(ovl_reg_rx_tick_count==8'd8))
-        // count from 0 to 7 (8 ticks)
-     );
-
-   // Duration of rx_state in 2 to 10 must have 16 reg_baud_tick
-   assert_implication
-     #(`OVL_ERROR,`OVL_ASSERT,
-     "Duration of rx_state when in state 2 to state 10 should have 16 ticks")
-   u_ovl_width_of_rx_state_data
-     (.clk(PCLK), .reset_n(PRESETn),
-      .antecedent_expr((rx_state!=ovl_reg_last_rx_state) &    // at state change
-       (ovl_reg_last_rx_state>4'd1)&(ovl_reg_last_rx_state<4'd11)),  // from state 2 to 9
-      .consequent_expr((ovl_reg_rx_tick_count==8'd15)|(ovl_reg_rx_tick_count==8'd16))
-         // count from 0 to 15 (16 ticks)
-     );
-
-   // UARTINT must be 0 if TXINT, RXINT, TXOVRINT and RXOVRINT are all 0
-   assert_implication
-     #(`OVL_ERROR,`OVL_ASSERT,
-     "UARTINT must be 0 if TXINT, RXINT, TXOVRINT and RXOVRINT are all 0")
-   u_ovl_uartint_mismatch
-     (.clk(PCLK), .reset_n(PRESETn),
-      .antecedent_expr((TXINT | RXINT | TXOVRINT | RXOVRINT) == 1'b0), // No interrupt
-      .consequent_expr(UARTINT==1'b0) // Combined interrupt = 0
-     );
-
-    // TXINT should be asserted when TX interrupt enabled and transmit buffer is available
-    assert_next
-    #(`OVL_ERROR, 1,1,0, `OVL_ASSERT,
-    "TXINT should be triggered when enabled")
-    u_ovl_txint_enable
-      (.clk(PCLK ), .reset_n (PRESETn),
-     .start_event (reg_ctrl[0] & reg_ctrl[2] & tx_buf_full & tx_buf_clear),
-     .test_expr   (TXINT == 1'b1)
-     );
-
-   // There should be no rising edge of TXINT if transmit is disabled or transmit interrupt is disabled
-    assert_next
-    #(`OVL_ERROR, 1,1,0, `OVL_ASSERT,
-    "TXINT should not be triggered when disabled")
-    u_ovl_txint_disable
-      (.clk(PCLK ), .reset_n (PRESETn),
-     .start_event (((reg_ctrl[0]==1'b0) | (reg_ctrl[2]==1'b0)) & (TXINT == 1'b0)),
-     .test_expr   (TXINT == 1'b0)
-     );
-
-   // if TXINT falling edge, there must has been a write to INTCLEAR register with bit[0]=1
-   assert_implication
-     #(`OVL_ERROR,`OVL_ASSERT,
-     "When there is a falling edge of TXINT, there must has been a write to INTCLEAR")
-   u_ovl_txint_clear
-     (.clk(PCLK), .reset_n(PRESETn),
-      .antecedent_expr(ovl_last_txint & (~TXINT)), // Falling edge of TXINT
-      .consequent_expr(ovl_last_psel & ovl_last_pwrite &
-      (ovl_last_paddr==10'h003) & (ovl_last_pwdata[0]) ) // There must has been a write to INTCLEAR
-     );
-
-    // RXINT should be asserted when RX interrupt enabled and a new data is received
-    assert_next
-    #(`OVL_ERROR, 1,1,0, `OVL_ASSERT,
-    "RXINT should be triggered when enabled")
-    u_ovl_rxint_enable
-      (.clk(PCLK ), .reset_n (PRESETn),
-     .start_event (reg_ctrl[3] & (rx_state==9) & (nxt_rx_state==10)),
-     .test_expr   (RXINT == 1'b1)
-     );
-
-   // There should be no rising edge of RXINT if receive interrupt is disabled
-    assert_next
-    #(`OVL_ERROR, 1,1,0, `OVL_ASSERT,
-    "RXINT should not be triggered when disabled")
-    u_ovl_rxint_disable
-      (.clk(PCLK ), .reset_n (PRESETn),
-     .start_event ((reg_ctrl[3]==1'b0) & (RXINT == 1'b0)),
-     .test_expr   (RXINT == 1'b0)
-     );
-
-   // if RXINT falling edge, there must has been a write to INTCLEAR register with bit[1]=1
-   assert_implication
-     #(`OVL_ERROR,`OVL_ASSERT,
-     "When there is a falling edge of RXINT, there must has been a write to INTCLEAR")
-   u_ovl_rxint_clear
-     (.clk(PCLK), .reset_n(PRESETn),
-      .antecedent_expr(ovl_last_rxint & (~RXINT)), // Falling edge of TXINT
-      .consequent_expr(ovl_last_psel & ovl_last_pwrite &
-      (ovl_last_paddr==10'h003) & (ovl_last_pwdata[1]) ) // There must has been a write to INTCLEAR
-     );
-
-   // rx_buf_full should rise if rx_state change from 9 to 10
-    assert_next
-    #(`OVL_ERROR, 1,1,0, `OVL_ASSERT,
-    "rx_buf_full should be asserted when a new character is received")
-    u_ovl_rx_buf_full
-      (.clk(PCLK ), .reset_n (PRESETn),
-     .start_event ((rx_state==9) & (nxt_rx_state==10)),
-     .test_expr   (rx_buf_full == 1'b1)
-     );
-
-   // if rx_buf_full falling edge, there must has been a read to the receive buffer
-   assert_implication
-     #(`OVL_ERROR,`OVL_ASSERT,
-     "When there is a falling edge of RXINT, there must has been a read to receive buffer")
-   u_ovl_rx_buf_full_clear
-     (.clk(PCLK), .reset_n(PRESETn),
-      .antecedent_expr((~rx_buf_full) & ovl_last_rx_buf_full), // Falling edge of rx_buf_full
-      .consequent_expr(ovl_last_psel & (~ovl_last_pwrite) &
-      (ovl_last_paddr==10'h000)  ) // There must has been a read to rx data
-     );
-
-   // TXOVRINT must be 0 if reg_ctrl[4]=0
-   assert_implication
-     #(`OVL_ERROR,`OVL_ASSERT,
-     "When there is a falling edge of RXINT, there must has been a write to INTCLEAR")
-   u_ovl_txovrint_disable
-     (.clk(PCLK), .reset_n(PRESETn),
-      .antecedent_expr(~reg_ctrl[4]),
-      .consequent_expr(~TXOVRINT)
-     );
-
-   // RXOVRINT must be 0 if reg_ctrl[5]=0
-   assert_implication
-     #(`OVL_ERROR,`OVL_ASSERT,
-     "When there is a falling edge of RXINT, there must has been a write to INTCLEAR")
-   u_ovl_rxovrint_disable
-     (.clk(PCLK), .reset_n(PRESETn),
-      .antecedent_expr(~reg_ctrl[5]),
-      .consequent_expr(~RXOVRINT)
-     );
-
-   // if a write take place to TX data buffer and tx_buf_full was 1, reg_tx_overrun will be set
-    assert_next
-    #(`OVL_ERROR, 1,1,0, `OVL_ASSERT,
-    "tx buffer overrun should be asserted when a new character is write to buffer and buffer is already full")
-    u_ovl_tx_buffer_overrun
-      (.clk(PCLK ), .reset_n (PRESETn),
-     .start_event (write_enable00 & tx_buf_full & (~tx_buf_clear)),
-     .test_expr   (reg_tx_overrun == 1'b1)
-     );
-
-   // if rx_buf_full is high and rx_state change from 9 to 10, reg_rx_overrun will be set
-    assert_next
-    #(`OVL_ERROR, 1,1,0, `OVL_ASSERT,
-    "rx buffer overrun should be asserted when a new character is received and rx buffer is already full")
-    u_ovl_rx_buffer_overrun
-      (.clk(PCLK ), .reset_n (PRESETn),
-     .start_event (rx_buf_full & (~rx_data_read) & (rx_state==9) & (nxt_rx_state==10)),
-     .test_expr   (reg_rx_overrun == 1'b1)
-     );
-
-   // if write to INTCLEAR  with bit[2]=1, reg_tx_overrun will be cleared,
-    // Cannot have new overrun at the same time because the APB can only do onething at a time
-    assert_next
-    #(`OVL_ERROR, 1,1,0, `OVL_ASSERT,
-    "tx buffer overrun should be clear when write to INTCLEAR")
-    u_ovl_tx_buffer_overrun_clear_a
-      (.clk(PCLK ), .reset_n (PRESETn),
-     .start_event (write_enable0c & (PWDATA[2])),
-     .test_expr   (reg_tx_overrun==1'b0)
-     );
-
-   // if write to STATUS  with bit[2]=1, reg_tx_overrun will be cleared,
-    // Cannot have new overrun at the same time because the APB can only do onething at a time
-    assert_next
-    #(`OVL_ERROR, 1,1,0, `OVL_ASSERT,
-    "tx buffer overrun should be clear when write to INTCLEAR")
-    u_ovl_tx_buffer_overrun_clear_b
-      (.clk(PCLK ), .reset_n (PRESETn),
-     .start_event (write_enable04 & (PWDATA[2])),
-     .test_expr   (reg_tx_overrun==1'b0)
-     );
-
-   // if write to INTCLEAR  with bit[3]=1, reg_rx_overrun will be cleared, unless a new overrun take place
-    assert_next
-    #(`OVL_ERROR, 1,1,0, `OVL_ASSERT,
-    "rx buffer overrun should be clear when write to INTCLEAR, unless new overrun")
-    u_ovl_rx_buffer_overrun_clear_a
-      (.clk(PCLK ), .reset_n (PRESETn),
-     .start_event (write_enable0c & (PWDATA[3]) & (~(rx_buf_full & (rx_state==9) & (nxt_rx_state==10)))),
-     .test_expr   (reg_rx_overrun==1'b0)
-     );
-
-   // If rx buffer is not full, it cannot have new overrun
-    assert_next
-    #(`OVL_ERROR, 1,1,0, `OVL_ASSERT,
-    "rx buffer overrun should be clear when write to INTCLEAR, unless new overrun")
-    u_ovl_rx_buffer_overrun_when_empty
-      (.clk(PCLK ), .reset_n (PRESETn),
-     .start_event ((~rx_buf_full) & (reg_rx_overrun==1'b0)),
-     .test_expr   (reg_rx_overrun==1'b0)
-     );
-
-
-   // Reading of reg_baud_div (worth checking due to two stage read mux)
-    assert_next
-    #(`OVL_ERROR, 1, 1, 0, `OVL_ASSERT,
-    "Reading of baud rate divider value")
-    u_ovl_read_baud_rate_divide_cfg
-      (.clk(PCLK ), .reset_n (PRESETn),
-     .start_event   (PSEL & (~PENABLE) & (~PWRITE) & (PADDR[11:2]==10'h004)),
-     .test_expr     (PRDATA=={{12{1'b0}}, reg_baud_div})
-     );
-
-   // Recommended Baud Rate divider value is at least 16
-   assert_never
-     #(`OVL_ERROR,`OVL_ASSERT,
-       "UART enabled with baud rate less than 16")
-   u_ovl_baud_rate_divider_illegal
-     (.clk(PCLK), .reset_n(PRESETn),
-      .test_expr(((reg_ctrl[0]) & (reg_ctrl[6]==1'b0) & (reg_baud_div[19:4]=={16{1'b0}}) ) |
-                 ((reg_ctrl[1]) &                       (reg_baud_div[19:4]=={16{1'b0}}) ) )
-      );
-
-   // Test mode never changes from hi-speed to normal speed unless TX is idle
-   assert_never
-     #(`OVL_ERROR,`OVL_ASSERT,
-       "High speed test mode has been changed when TX was not idle")
-   u_ovl_change_speed_tx_illegal
-     (.clk(PCLK), .reset_n(PRESETn),
-      .test_expr((tx_state != 4'd00) & (reg_ctrl[6] != ovl_last_reg_ctrl[6]))
-      );
-
-`endif
-
-endmodule
diff --git a/system/test_io/verilog/axi_stream_io_v1_0.v b/system/test_io/verilog/axi_stream_io_v1_0.v
deleted file mode 100755
index 0c52be8420c4f63ab7eab0db84cc185a5073bcc6..0000000000000000000000000000000000000000
--- a/system/test_io/verilog/axi_stream_io_v1_0.v
+++ /dev/null
@@ -1,114 +0,0 @@
-
-`timescale 1 ns / 1 ps
-
-	module axi_stream_io_v1_0 #
-	(
-		// Users to add parameters here
-
-		// User parameters ends
-		// Do not modify the parameters beyond this line
-
-
-		// Parameters of Axi Slave Bus Interface axi
-		parameter integer C_axi_DATA_WIDTH	= 32,
-		parameter integer C_axi_ADDR_WIDTH	= 4,
-
-		// Parameters of Axi Master Bus Interface tx
-		parameter integer C_tx_TDATA_WIDTH	= 8,
-		parameter integer C_tx_START_COUNT	= 3,
-
-		// Parameters of Axi Slave Bus Interface rx
-		parameter integer C_rx_TDATA_WIDTH	= 8
-	)
-	(
-		// Users to add ports here
-
-		// User ports ends
-		// Do not modify the ports beyond this line
-
-
-		// Ports of Axi Slave Bus Interface axi
-		input wire  axi_aclk,
-		input wire  axi_aresetn,
-		input wire [C_axi_ADDR_WIDTH-1 : 0] axi_awaddr,
-		input wire [2 : 0] axi_awprot,
-		input wire  axi_awvalid,
-		output wire  axi_awready,
-		input wire [C_axi_DATA_WIDTH-1 : 0] axi_wdata,
-		input wire [(C_axi_DATA_WIDTH/8)-1 : 0] axi_wstrb,
-		input wire  axi_wvalid,
-		output wire  axi_wready,
-		output wire [1 : 0] axi_bresp,
-		output wire  axi_bvalid,
-		input wire  axi_bready,
-		input wire [C_axi_ADDR_WIDTH-1 : 0] axi_araddr,
-		input wire [2 : 0] axi_arprot,
-		input wire  axi_arvalid,
-		output wire  axi_arready,
-		output wire [C_axi_DATA_WIDTH-1 : 0] axi_rdata,
-		output wire [1 : 0] axi_rresp,
-		output wire  axi_rvalid,
-		input wire  axi_rready,
-
-        output wire interrupt,
-		// Ports of Axi Master Bus Interface tx
-		output wire  tx_tvalid,
-		output wire [C_tx_TDATA_WIDTH-1 : 0] tx_tdata,
-		output wire [(C_tx_TDATA_WIDTH/8)-1 : 0] tx_tstrb,
-		output wire  tx_tlast,
-		input wire  tx_tready,
-
-		// Ports of Axi Slave Bus Interface rx
-		output wire  rx_tready,
-		input wire [C_rx_TDATA_WIDTH-1 : 0] rx_tdata,
-		input wire [(C_rx_TDATA_WIDTH/8)-1 : 0] rx_tstrb,
-		input wire  rx_tlast,
-		input wire  rx_tvalid
-	);
-// Instantiation of Axi Bus Interface axi
-	iostream_v1_0_axi # ( 
-		.C_S_AXI_DATA_WIDTH(C_axi_DATA_WIDTH),
-		.C_S_AXI_ADDR_WIDTH(C_axi_ADDR_WIDTH)
-	) iostream_v1_0_axi_inst (
-		.S_AXI_ACLK(axi_aclk),
-		.S_AXI_ARESETN(axi_aresetn),
-		.tx_tvalid(tx_tvalid),
-		.tx_tdata(tx_tdata),
-//		output wire [0 : 0] tx_tstrb,
-//		output wire  tx_tlast,
-		.tx_tready(tx_tready),
-		.rx_tvalid(rx_tvalid),
-		.rx_tdata(rx_tdata),
-//		input wire [0 : 0] tx_tstrb,
-//		input wire  tx_tlast,
-		.tx_tready(rx_tready),
-		.interrupt(interrupt),
-		.S_AXI_AWADDR(axi_awaddr),
-		.S_AXI_AWPROT(axi_awprot),
-		.S_AXI_AWVALID(axi_awvalid),
-		.S_AXI_AWREADY(axi_awready),
-		.S_AXI_WDATA(axi_wdata),
-		.S_AXI_WSTRB(axi_wstrb),
-		.S_AXI_WVALID(axi_wvalid),
-		.S_AXI_WREADY(axi_wready),
-		.S_AXI_BRESP(axi_bresp),
-		.S_AXI_BVALID(axi_bvalid),
-		.S_AXI_BREADY(axi_bready),
-		.S_AXI_ARADDR(axi_araddr),
-		.S_AXI_ARPROT(axi_arprot),
-		.S_AXI_ARVALID(axi_arvalid),
-		.S_AXI_ARREADY(axi_arready),
-		.S_AXI_RDATA(axi_rdata),
-		.S_AXI_RRESP(axi_rresp),
-		.S_AXI_RVALID(axi_rvalid),
-		.S_AXI_RREADY(axi_rready)
-	);
-
-assign tx_tstrb[0:0] = tx_tvalid;
-assign tx_tlast      = 1'b0;
-
-	// Add user logic here
-
-	// User logic ends
-
-	endmodule
diff --git a/system/test_io/verilog/axi_stream_io_v1_0_axi_s.v b/system/test_io/verilog/axi_stream_io_v1_0_axi_s.v
deleted file mode 100755
index 303780efefce184c1f353751c71280794b5348bd..0000000000000000000000000000000000000000
--- a/system/test_io/verilog/axi_stream_io_v1_0_axi_s.v
+++ /dev/null
@@ -1,424 +0,0 @@
-
-`timescale 1 ns / 1 ps
-
-	module axi_stream_io_v1_0_axi_s #
-	(
-		// Users to add parameters here
-
-		// User parameters ends
-		// Do not modify the parameters beyond this line
-
-		// Width of S_AXI data bus
-		parameter integer C_S_AXI_DATA_WIDTH	= 32,
-		// Width of S_AXI address bus
-		parameter integer C_S_AXI_ADDR_WIDTH	= 4
-	)
-	(
-		// Users to add ports here
-		output wire interrupt,
-		
-		// Ports of Axi Master Bus Interface tx
-//		input wire  tx_aclk,
-//		input wire  tx_aresetn,
-		output wire  tx_tvalid,
-		output wire [7 : 0] tx_tdata,
-//		output wire [0 : 0] tx_tstrb,
-//		output wire  tx_tlast,
-		input wire  tx_tready,
-
-		// Ports of Axi Slave Bus Interface rx
-//		input wire  rx_aclk,
-//		input wire  rx_aresetn,
-		output wire  rx_tready,
-		input wire [7 : 0] rx_tdata,
-//		input wire [0 : 0] rx_tstrb,
-//		input wire  rx_tlast,
-		input wire  rx_tvalid,
-
-		// User ports ends
-		// Do not modify the ports beyond this line
-
-		// Global Clock Signal
-		input wire  S_AXI_ACLK,
-		// Global Reset Signal. This Signal is Active LOW
-		input wire  S_AXI_ARESETN,
-		// Write address (issued by master, acceped by Slave)
-		input wire [C_S_AXI_ADDR_WIDTH-1 : 0] S_AXI_AWADDR,
-		// Write channel Protection type. This signal indicates the
-    		// privilege and security level of the transaction, and whether
-    		// the transaction is a data access or an instruction access.
-		input wire [2 : 0] S_AXI_AWPROT,
-		// Write address valid. This signal indicates that the master signaling
-    		// valid write address and control information.
-		input wire  S_AXI_AWVALID,
-		// Write address ready. This signal indicates that the slave is ready
-    		// to accept an address and associated control signals.
-		output wire  S_AXI_AWREADY,
-		// Write data (issued by master, acceped by Slave) 
-		input wire [C_S_AXI_DATA_WIDTH-1 : 0] S_AXI_WDATA,
-		// Write strobes. This signal indicates which byte lanes hold
-    		// valid data. There is one write strobe bit for each eight
-    		// bits of the write data bus.    
-		input wire [(C_S_AXI_DATA_WIDTH/8)-1 : 0] S_AXI_WSTRB,
-		// Write valid. This signal indicates that valid write
-    		// data and strobes are available.
-		input wire  S_AXI_WVALID,
-		// Write ready. This signal indicates that the slave
-    		// can accept the write data.
-		output wire  S_AXI_WREADY,
-		// Write response. This signal indicates the status
-    		// of the write transaction.
-		output wire [1 : 0] S_AXI_BRESP,
-		// Write response valid. This signal indicates that the channel
-    		// is signaling a valid write response.
-		output wire  S_AXI_BVALID,
-		// Response ready. This signal indicates that the master
-    		// can accept a write response.
-		input wire  S_AXI_BREADY,
-		// Read address (issued by master, acceped by Slave)
-		input wire [C_S_AXI_ADDR_WIDTH-1 : 0] S_AXI_ARADDR,
-		// Protection type. This signal indicates the privilege
-    		// and security level of the transaction, and whether the
-    		// transaction is a data access or an instruction access.
-		input wire [2 : 0] S_AXI_ARPROT,
-		// Read address valid. This signal indicates that the channel
-    		// is signaling valid read address and control information.
-		input wire  S_AXI_ARVALID,
-		// Read address ready. This signal indicates that the slave is
-    		// ready to accept an address and associated control signals.
-		output wire  S_AXI_ARREADY,
-		// Read data (issued by slave)
-		output wire [C_S_AXI_DATA_WIDTH-1 : 0] S_AXI_RDATA,
-		// Read response. This signal indicates the status of the
-    		// read transfer.
-		output wire [1 : 0] S_AXI_RRESP,
-		// Read valid. This signal indicates that the channel is
-    		// signaling the required read data.
-		output wire  S_AXI_RVALID,
-		// Read ready. This signal indicates that the master can
-    		// accept the read data and response information.
-		input wire  S_AXI_RREADY
-	);
-
-	// AXI4LITE signals
-	reg [C_S_AXI_ADDR_WIDTH-1 : 0] 	axi_awaddr;
-	reg  	axi_awready;
-	reg  	axi_wready;
-	reg [1 : 0] 	axi_bresp;
-	reg  	axi_bvalid;
-	reg [C_S_AXI_ADDR_WIDTH-1 : 0] 	axi_araddr;
-	reg  	axi_arready;
-	reg [C_S_AXI_DATA_WIDTH-1 : 0] 	axi_rdata;
-	reg [1 : 0] 	axi_rresp;
-	reg  	axi_rvalid;
-
-	// Example-specific design signals
-	// local parameter for addressing 32 bit / 64 bit C_S_AXI_DATA_WIDTH
-	// ADDR_LSB is used for addressing 32/64 bit registers/memories
-	// ADDR_LSB = 2 for 32 bits (n downto 2)
-	// ADDR_LSB = 3 for 64 bits (n downto 3)
-	localparam integer ADDR_LSB = (C_S_AXI_DATA_WIDTH/32) + 1;
-	localparam integer OPT_MEM_ADDR_BITS = 1;
-
-	//----------------------------------------------
-	//-- Signals for user logic register space example
-	//------------------------------------------------
-	//-- Number of Slave Registers 4
-	reg [8:0]	tx_reg; // TX data
-	reg [8:0]	rx_reg; // RX data
-	reg [7:0]	ctrl_reg; // ctrl
-	wire	 slv_reg_rden;
-	wire	 slv_reg_wren;
-	reg [7:0]	 reg_data_out;
-	integer	 byte_index;
-	reg	 aw_en;
-	
-	wire	tx_req = tx_reg[8];  // request to transmit
-	wire	tx_ack = tx_tready;    // acknowledge when stream ready
-    wire	tx_rdy = !tx_reg[8];
-	wire	rx_req = rx_tvalid;    // request to receive
-	wire	rx_ack = !rx_reg[8];
-    wire    rx_rdy = rx_reg[8];
-    
-	//assign	rx_reg[7:0] <= rx_tdata;
-
-	// I/O Connections assignments
-
-    assign interrupt = ctrl_reg[4] & (!tx_req | rx_req);
-	
-    // TX stream interface
-	assign	tx_tdata = tx_reg[7:0];
-	assign  tx_tvalid = tx_req;
-
-	// RX stream interface
-	assign  rx_tready = rx_ack;
-    
-	//AXI Slave
-	assign S_AXI_AWREADY	= axi_awready;
-	assign S_AXI_WREADY	= axi_wready;
-	assign S_AXI_BRESP	= axi_bresp;
-	assign S_AXI_BVALID	= axi_bvalid;
-	assign S_AXI_ARREADY	= axi_arready;
-	assign S_AXI_RDATA	= axi_rdata;
-	assign S_AXI_RRESP	= axi_rresp;
-	assign S_AXI_RVALID	= axi_rvalid;
-	// Implement axi_awready generation
-	// axi_awready is asserted for one S_AXI_ACLK clock cycle when both
-	// S_AXI_AWVALID and S_AXI_WVALID are asserted. axi_awready is
-	// de-asserted when reset is low.
-
-	always @( posedge S_AXI_ACLK )
-	begin
-	  if ( S_AXI_ARESETN == 1'b0 )
-	    begin
-	      axi_awready <= 1'b0;
-	      aw_en <= 1'b1;
-	    end 
-	  else
-	    begin    
-	      if (~axi_awready && S_AXI_AWVALID && S_AXI_WVALID && aw_en)
-	        begin
-	          // slave is ready to accept write address when 
-	          // there is a valid write address and write data
-	          // on the write address and data bus. This design 
-	          // expects no outstanding transactions. 
-	          axi_awready <= 1'b1;
-	          aw_en <= 1'b0;
-	        end
-	        else if (S_AXI_BREADY && axi_bvalid)
-	            begin
-	              aw_en <= 1'b1;
-	              axi_awready <= 1'b0;
-	            end
-	      else           
-	        begin
-	          axi_awready <= 1'b0;
-	        end
-	    end 
-	end       
-
-	// Implement axi_awaddr latching
-	// This process is used to latch the address when both 
-	// S_AXI_AWVALID and S_AXI_WVALID are valid. 
-
-	always @( posedge S_AXI_ACLK )
-	begin
-	  if ( S_AXI_ARESETN == 1'b0 )
-	    begin
-	      axi_awaddr <= 0;
-	    end 
-	  else
-	    begin    
-	      if (~axi_awready && S_AXI_AWVALID && S_AXI_WVALID && aw_en)
-	        begin
-	          // Write Address latching 
-	          axi_awaddr <= S_AXI_AWADDR;
-	        end
-	    end 
-	end       
-
-	// Implement axi_wready generation
-	// axi_wready is asserted for one S_AXI_ACLK clock cycle when both
-	// S_AXI_AWVALID and S_AXI_WVALID are asserted. axi_wready is 
-	// de-asserted when reset is low. 
-
-	always @( posedge S_AXI_ACLK )
-	begin
-	  if ( S_AXI_ARESETN == 1'b0 )
-	    begin
-	      axi_wready <= 1'b0;
-	    end 
-	  else
-	    begin    
-	      if (~axi_wready && S_AXI_WVALID && S_AXI_AWVALID && aw_en )
-	        begin
-	          // slave is ready to accept write data when 
-	          // there is a valid write address and write data
-	          // on the write address and data bus. This design 
-	          // expects no outstanding transactions. 
-	          axi_wready <= 1'b1;
-	        end
-	      else
-	        begin
-	          axi_wready <= 1'b0;
-	        end
-	    end 
-	end       
-
-	// Implement memory mapped register select and write logic generation
-	// The write data is accepted and written to memory mapped registers when
-	// axi_awready, S_AXI_WVALID, axi_wready and S_AXI_WVALID are asserted. Write strobes are used to
-	// select byte enables of slave registers while writing.
-	// These registers are cleared when reset (active low) is applied.
-	// Slave register write enable is asserted when valid address and data are available
-	// and the slave is ready to accept the write address and write data.
-	assign slv_reg_wren = axi_wready && S_AXI_WVALID && axi_awready && S_AXI_AWVALID;
-
-	always @( posedge S_AXI_ACLK )
-	begin
-	  if ( S_AXI_ARESETN == 1'b0 )
-		rx_reg <= 0;
-      else if ((ctrl_reg[1] == 1'b1))
-        rx_reg <= 0;
-	  else if (slv_reg_wren && (axi_awaddr[ADDR_LSB+OPT_MEM_ADDR_BITS:ADDR_LSB] == 2'h0))
-		rx_reg[8:0] <= {1'b1, S_AXI_WDATA[7:0]};
-	  else if (slv_reg_rden && (axi_araddr[ADDR_LSB+OPT_MEM_ADDR_BITS:ADDR_LSB] == 2'h0))
-		rx_reg[8] <= 1'b0;
-      else if (rx_req & rx_ack) // check precedence (rx_req)
-		rx_reg[8:0] <= {1'b1, rx_tdata[7:0]};
-	end    
-
-	always @( posedge S_AXI_ACLK )
-	begin
-	  if ( S_AXI_ARESETN == 1'b0 )
-		tx_reg <= 0;
-      else if ((ctrl_reg[0] == 1'b1))
-        tx_reg <= 0;
-	  else if (slv_reg_wren && (axi_awaddr[ADDR_LSB+OPT_MEM_ADDR_BITS:ADDR_LSB] == 2'h1))
-		tx_reg[8:0] <= {1'b1, S_AXI_WDATA[7:0]};
-      else if (tx_req & tx_ack)
-		tx_reg[8] <= 1'b0;
-	end    
-
-	always @( posedge S_AXI_ACLK )
-	begin
-	  if ( S_AXI_ARESETN == 1'b0 )
-		ctrl_reg <= 8'b00000100;
-	  else if (slv_reg_wren && (axi_awaddr[ADDR_LSB+OPT_MEM_ADDR_BITS:ADDR_LSB] == 2'h3))
-		ctrl_reg[7:0] <= S_AXI_WDATA[7:0];
-	end    
-
-	// Implement write response logic generation
-	// The write response and response valid signals are asserted by the slave 
-	// when axi_wready, S_AXI_WVALID, axi_wready and S_AXI_WVALID are asserted.  
-	// This marks the acceptance of address and indicates the status of 
-	// write transaction.
-
-	always @( posedge S_AXI_ACLK )
-	begin
-	  if ( S_AXI_ARESETN == 1'b0 )
-	    begin
-	      axi_bvalid  <= 0;
-	      axi_bresp   <= 2'b0;
-	    end 
-	  else
-	    begin    
-	      if (axi_awready && S_AXI_AWVALID && ~axi_bvalid && axi_wready && S_AXI_WVALID)
-	        begin
-	          // indicates a valid write response is available
-	          axi_bvalid <= 1'b1;
-	          axi_bresp  <= 2'b0; // 'OKAY' response 
-	        end                   // work error responses in future
-	      else
-	        begin
-	          if (S_AXI_BREADY && axi_bvalid) 
-	            //check if bready is asserted while bvalid is high) 
-	            //(there is a possibility that bready is always asserted high)   
-	            begin
-	              axi_bvalid <= 1'b0; 
-	            end  
-	        end
-	    end
-	end   
-
-	// Implement axi_arready generation
-	// axi_arready is asserted for one S_AXI_ACLK clock cycle when
-	// S_AXI_ARVALID is asserted. axi_awready is 
-	// de-asserted when reset (active low) is asserted. 
-	// The read address is also latched when S_AXI_ARVALID is 
-	// asserted. axi_araddr is reset to zero on reset assertion.
-
-	always @( posedge S_AXI_ACLK )
-	begin
-	  if ( S_AXI_ARESETN == 1'b0 )
-	    begin
-	      axi_arready <= 1'b0;
-	      axi_araddr  <= 32'b0;
-	    end 
-	  else
-	    begin    
-	      if (~axi_arready && S_AXI_ARVALID)
-	        begin
-	          // indicates that the slave has acceped the valid read address
-	          axi_arready <= 1'b1;
-	          // Read address latching
-	          axi_araddr  <= S_AXI_ARADDR;
-	        end
-	      else
-	        begin
-	          axi_arready <= 1'b0;
-	        end
-	    end 
-	end       
-
-	// Implement axi_arvalid generation
-	// axi_rvalid is asserted for one S_AXI_ACLK clock cycle when both 
-	// S_AXI_ARVALID and axi_arready are asserted. The slave registers 
-	// data are available on the axi_rdata bus at this instance. The 
-	// assertion of axi_rvalid marks the validity of read data on the 
-	// bus and axi_rresp indicates the status of read transaction.axi_rvalid 
-	// is deasserted on reset (active low). axi_rresp and axi_rdata are 
-	// cleared to zero on reset (active low).  
-	always @( posedge S_AXI_ACLK )
-	begin
-	  if ( S_AXI_ARESETN == 1'b0 )
-	    begin
-	      axi_rvalid <= 0;
-	      axi_rresp  <= 0;
-	    end
-	  else
-	    begin    
-	      if (axi_arready && S_AXI_ARVALID && ~axi_rvalid)
-	        begin
-	          // Valid read data is available at the read data bus
-	          axi_rvalid <= 1'b1;
-	          axi_rresp  <= 2'b0; // 'OKAY' response
-	        end   
-	      else if (axi_rvalid && S_AXI_RREADY)
-	        begin
-	          // Read data is accepted by the master
-	          axi_rvalid <= 1'b0;
-	        end                
-	    end
-	end    
-
-	// Implement memory mapped register select and read logic generation
-	// Slave register read enable is asserted when valid address is available
-	// and the slave is ready to accept the read address.
-	assign slv_reg_rden = axi_arready & S_AXI_ARVALID & ~axi_rvalid;
-	always @(*)
-	begin
-	      // Address decoding for reading registers
-	      case ( axi_araddr[ADDR_LSB+OPT_MEM_ADDR_BITS:ADDR_LSB] )
-	        2'h0   : reg_data_out <= rx_reg[7:0];
-	        2'h1   : reg_data_out <= tx_reg[7:0];
-	        2'h2   : reg_data_out <= {3'b000, ctrl_reg[4], !tx_rdy, tx_rdy, rx_rdy, rx_rdy};
-	        2'h3   : reg_data_out <= ctrl_reg;
-	        default : reg_data_out <= 0;
-	      endcase
-	end
-
-	// Output register or memory read data
-	always @( posedge S_AXI_ACLK )
-	begin
-	  if ( S_AXI_ARESETN == 1'b0 )
-	    begin
-	      axi_rdata  <= 0;
-	    end 
-	  else
-	    begin    
-	      // When there is a valid read address (S_AXI_ARVALID) with 
-	      // acceptance of read address by the slave (axi_arready), 
-	      // output the read dada 
-	      if (slv_reg_rden)
-	        begin
-	          axi_rdata <= {24'h000000, reg_data_out};     // register read data
-	        end   
-	    end
-	end    
-
-	// Add user logic here
-
-	// User logic ends
-
-	endmodule
diff --git a/system/test_io/verilog/nanosoc_adp_control_v1_0.v b/system/test_io/verilog/nanosoc_adp_control_v1_0.v
deleted file mode 100755
index 81a3da2304f66717dcaf31307999ebde7bdda120..0000000000000000000000000000000000000000
--- a/system/test_io/verilog/nanosoc_adp_control_v1_0.v
+++ /dev/null
@@ -1,103 +0,0 @@
-//-----------------------------------------------------------------------------
-// top-level soclabs ASCII Debug Protocol controller
-// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license.
-//
-// Contributors
-//
-// David Flynn (d.w.flynn@soton.ac.uk)
-//
-// Copyright � 2021-2, SoC Labs (www.soclabs.org)
-//-----------------------------------------------------------------------------
-
-
-	module nanosoc_adp_control_v1_0 #
-	(
-		// Users to add parameters here
-    parameter PROMPT_CHAR          = "]"
-
-		// User parameters ends
-		// Do not modify the parameters beyond this line
-
-	)
-	(
-		// Users to add ports here
-
-		// User ports ends
-		// Do not modify the ports beyond this line
-
-		// Ports of Axi Slave Bus Interface com_rx
-		input wire  ahb_hclk,
-		input wire  ahb_hresetn,
-		
-		output wire com_rx_tready,
-		input wire [7 : 0] com_rx_tdata,
-		input wire  com_rx_tvalid,
-
-		// Ports of Axi Master Bus Interface com_tx
-		output wire  com_tx_tvalid,
-		output wire [7 : 0] com_tx_tdata,
-		input wire  com_tx_tready,
-
-		// Ports of Axi Slave Bus Interface stdio_rx
-		output wire  stdio_rx_tready,
-		input wire [7 : 0] stdio_rx_tdata,
-		input wire  stdio_rx_tvalid,
-
-		// Ports of Axi Master Bus Interface stdio_tx
-		output wire  stdio_tx_tvalid,
-		output wire [7 : 0] stdio_tx_tdata,
-		input wire  stdio_tx_tready,
-
-		output wire [7 : 0]    gpo8,
-		input  wire [7 : 0]    gpi8,
-		
-        output wire [31:0]     ahb_haddr    ,
-        output wire [ 2:0]     ahb_hburst   ,
-        output wire            ahb_hmastlock,
-        output wire [ 3:0]     ahb_hprot    ,
-        output wire [ 2:0]     ahb_hsize    ,
-        output wire [ 1:0]     ahb_htrans   ,
-        output wire [31:0]     ahb_hwdata   ,
-        output wire            ahb_hwrite   ,
-        input  wire  [31:0]    ahb_hrdata   ,
-        input  wire            ahb_hready   ,
-        input  wire            ahb_hresp    
-	);
-
-	// Add user logic here
-
-nanosoc_adp_manager
-   #(.PROMPT_CHAR     (PROMPT_CHAR))
- u_adp_manager(
-  .HCLK        (ahb_hclk      ),
-  .HRESETn     (ahb_hresetn   ),
-  .HADDR32_o   (ahb_haddr     ),
-  .HBURST3_o   (ahb_hburst    ),
-  .HMASTLOCK_o (ahb_hmastlock ),
-  .HPROT4_o    (ahb_hprot     ),
-  .HSIZE3_o    (ahb_hsize     ),
-  .HTRANS2_o   (ahb_htrans    ),
-  .HWDATA32_o  (ahb_hwdata    ),
-  .HWRITE_o    (ahb_hwrite    ),
-  .HRDATA32_i  (ahb_hrdata    ),
-  .HREADY_i    (ahb_hready    ),
-  .HRESP_i     (ahb_hresp     ),
-  .GPO8_o      (gpo8          ),
-  .GPI8_i      (gpi8          ),
-  .COMRX_TREADY_o(com_rx_tready),
-  .COMRX_TDATA_i(com_rx_tdata),
-  .COMRX_TVALID_i(com_rx_tvalid),
-  .STDRX_TREADY_o(stdio_rx_tready),
-  .STDRX_TDATA_i(stdio_rx_tdata),
-  .STDRX_TVALID_i(stdio_rx_tvalid),
-  .COMTX_TVALID_o(com_tx_tvalid),
-  .COMTX_TDATA_o(com_tx_tdata),
-  .COMTX_TREADY_i(com_tx_tready),
-  .STDTX_TVALID_o(stdio_tx_tvalid),
-  .STDTX_TDATA_o(stdio_tx_tdata),
-  .STDTX_TREADY_i(stdio_tx_tready)
-
-  );
-
-
-endmodule
diff --git a/system/test_io/verilog/nanosoc_adp_manager.v b/system/test_io/verilog/nanosoc_adp_manager.v
deleted file mode 100755
index cf6c0d850b0f50781599a489030b5b37761179e1..0000000000000000000000000000000000000000
--- a/system/test_io/verilog/nanosoc_adp_manager.v
+++ /dev/null
@@ -1,778 +0,0 @@
-//-----------------------------------------------------------------------------
-// SoCLabs ASCII Debug Protocol controller
-// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license.
-//
-// Contributors
-//
-// David Flynn (d.w.flynn@soton.ac.uk)
-//
-// Copyright (C) 2021-3, SoC Labs (www.soclabs.org)
-//-----------------------------------------------------------------------------
-
-
-//`define ADPBASIC 1
-
-`define ADPFSMDESIGN 1
-
-module nanosoc_adp_manager // AHB initiator interface
-   #(parameter PROMPT_CHAR          = "]"
-    )
-            ( input  wire                  HCLK,
-              input  wire                  HRESETn,
-              output wire        [31:0]    HADDR32_o,
-              output wire        [ 2:0]    HBURST3_o,
-              output wire                  HMASTLOCK_o,
-              output wire        [ 3:0]    HPROT4_o,
-              output wire        [ 2:0]    HSIZE3_o,
-              output wire        [ 1:0]    HTRANS2_o,
-              output wire        [31:0]    HWDATA32_o,
-              output wire                  HWRITE_o,
-              input  wire         [31:0]   HRDATA32_i,
-              input  wire                  HREADY_i,
-              input  wire                  HRESP_i,
-// COMIO interface
-    output wire [ 7:0] GPO8_o,
-    input  wire [ 7:0] GPI8_i,
-    input  wire [ 7:0] COMRX_TDATA_i,
-    input  wire        COMRX_TVALID_i,
-    output wire        COMRX_TREADY_o,
-    output wire [ 7:0] COMTX_TDATA_o,
-    output wire        COMTX_TVALID_o,
-    input  wire        COMTX_TREADY_i,
-// STDIO interface
-    input  wire [ 7:0] STDRX_TDATA_i,
-    input  wire        STDRX_TVALID_i,
-    output wire        STDRX_TREADY_o,
-    output wire [ 7:0] STDTX_TDATA_o,
-    output wire        STDTX_TVALID_o,
-    input  wire        STDTX_TREADY_i
-);
-
-wire COM_RXE_i = !COMRX_TVALID_i;
-wire COM_TXF_i = !COMTX_TREADY_i;
-
-//wire adp_rx_req = COMRX_TVALID_i & COMRX_TREADY_o;
-//wire std_rx_req = STDRX_TVALID_i & STDRX_TREADY_o;
-
-
-wire STD_TXF_i = !STDTX_TREADY_i;
-wire STD_RXE_i = !STDRX_TVALID_i;
-
-`ifdef ADPBASIC
-  localparam BANNERHEX = 32'h50c1ab01;
-`else
-  localparam BANNERHEX = 32'h50c1ab04;
-`endif
-
-localparam CMD_bad = 4'b0000;
-localparam CMD_A   = 4'b0001;  // set Address
-localparam CMD_C   = 4'b0010;  // Control
-localparam CMD_R   = 4'b0011;  // Read word, addr++
-localparam CMD_S   = 4'b0100;  // Status/STDIN
-localparam CMD_W   = 4'b0101;  // Write word, addr++
-localparam CMD_X   = 4'b0110;  // eXit
-`ifndef ADPBASIC
-localparam CMD_F   = 4'b1000;  // Fill (wordocunt) from addr++
-localparam CMD_M   = 4'b1001;  // set read Mask
-localparam CMD_P   = 4'b1010;  // Poll hardware  (count)
-localparam CMD_U   = 4'b1011;  // (Binary) Upload (wordocunt) from addr++
-localparam CMD_V   = 4'b1100;  // match Value
-`endif
-
-
-function FNvalid_adp_entry; // Escape char
-input [7:0] char8;
-  FNvalid_adp_entry = (char8[7:0] ==  8'h1b);
-endfunction
-
-function [3:0] FNvalid_cmd;
-input [7:0] char8;
-case (char8[7:0])
-"A": FNvalid_cmd = CMD_A;
-"a": FNvalid_cmd = CMD_A;
-"C": FNvalid_cmd = CMD_C;
-"c": FNvalid_cmd = CMD_C;
-"R": FNvalid_cmd = CMD_R;
-"r": FNvalid_cmd = CMD_R;
-"S": FNvalid_cmd = CMD_S;
-"s": FNvalid_cmd = CMD_S;
-"W": FNvalid_cmd = CMD_W;
-"w": FNvalid_cmd = CMD_W;
-"X": FNvalid_cmd = CMD_X;
-"x": FNvalid_cmd = CMD_X;
-`ifndef ADPBASIC
-"F": FNvalid_cmd = CMD_F;
-"f": FNvalid_cmd = CMD_F;
-"M": FNvalid_cmd = CMD_M;
-"m": FNvalid_cmd = CMD_M;
-"P": FNvalid_cmd = CMD_P;
-"p": FNvalid_cmd = CMD_P;
-"U": FNvalid_cmd = CMD_U;
-"u": FNvalid_cmd = CMD_U;
-"V": FNvalid_cmd = CMD_V;
-"v": FNvalid_cmd = CMD_V;
-`endif
-default:
-      FNvalid_cmd = 0;
-endcase
-endfunction
-
-function FNvalid_space; // space or tab char
-input [7:0] char8;
-  FNvalid_space = ((char8[7:0] == 8'h20) || (char8[7:0] == 8'h09));
-endfunction
-
-function FNnull; // space or tab char
-input [7:0] char8;
-  FNnull = (char8[7:0] == 8'h00);
-endfunction
-
-function FNexit; // EOF
-input [7:0] char8;
-  FNexit = ((char8[7:0] == 8'h04) || (char8[7:0] == 8'h00));
-endfunction
-
-function FNvalid_EOL; // CR or LF
-input [7:0] char8;
-  FNvalid_EOL = ((char8[7:0] == 8'h0a) || (char8[7:0] == 8'h0d));
-endfunction
-
-function FNuppercase;
-input [7:0] char8;
-  FNuppercase = (char8[6]) ? (char8 & 8'h5f) : (char8);
-endfunction
-
-
-function [2:0] FNsize_inc;
-// top 2 bits encode 01 (byte), 10 (halfword), 11 (word) 00 - no parameter
-input [2:0] cnt8;
-case (cnt8[2:0])
-3'b000: FNsize_inc = 3'b010;
-3'b010: FNsize_inc = 3'b011;
-3'b011: FNsize_inc = 3'b100;
-3'b100: FNsize_inc = 3'b101;
-default:
-  FNsize_inc = 3'b111;
-endcase
-endfunction
-
-function [1:0] FNparam2size;
-// top 2 bits encode 01 (byte), 10 (halfword), 11 (word) 00 - no parameter
-input [1:0] parm2;
-case (parm2[1:0])
-2'b01: FNparam2size = 2'b00; // 8-bit
-2'b10: FNparam2size = 2'b01; // 16-bit
-2'b11: FNparam2size = 2'b10; // 32-bit
-default:
-  FNparam2size = 2'b10;// default to 32-bit
-endcase
-endfunction
-
-function [34:0] FNBuild_size3_param32_hexdigit;
-input [34:0] param32;
-input [7:0] char8;
-case (char8[7:0])
-"\t":FNBuild_size3_param32_hexdigit = 35'b0; // tab starts new (zeroed) param32
-" ": FNBuild_size3_param32_hexdigit = 35'b0; // space starts new (zeroed) param32
-"x": FNBuild_size3_param32_hexdigit = 35'b0; // hex prefix starts new (zeroed) param32
-"X": FNBuild_size3_param32_hexdigit = 35'b0; // hex prefix starts new (zeroed) param32
-"0": FNBuild_size3_param32_hexdigit = {FNsize_inc(param32[34:32]),param32[27:0],4'b0000};
-"1": FNBuild_size3_param32_hexdigit = {FNsize_inc(param32[34:32]),param32[27:0],4'b0001};
-"2": FNBuild_size3_param32_hexdigit = {FNsize_inc(param32[34:32]),param32[27:0],4'b0010};
-"3": FNBuild_size3_param32_hexdigit = {FNsize_inc(param32[34:32]),param32[27:0],4'b0011};
-"4": FNBuild_size3_param32_hexdigit = {FNsize_inc(param32[34:32]),param32[27:0],4'b0100};
-"5": FNBuild_size3_param32_hexdigit = {FNsize_inc(param32[34:32]),param32[27:0],4'b0101};
-"6": FNBuild_size3_param32_hexdigit = {FNsize_inc(param32[34:32]),param32[27:0],4'b0110};
-"7": FNBuild_size3_param32_hexdigit = {FNsize_inc(param32[34:32]),param32[27:0],4'b0111};
-"8": FNBuild_size3_param32_hexdigit = {FNsize_inc(param32[34:32]),param32[27:0],4'b1000};
-"9": FNBuild_size3_param32_hexdigit = {FNsize_inc(param32[34:32]),param32[27:0],4'b1001};
-"A": FNBuild_size3_param32_hexdigit = {FNsize_inc(param32[34:32]),param32[27:0],4'b1010};
-"B": FNBuild_size3_param32_hexdigit = {FNsize_inc(param32[34:32]),param32[27:0],4'b1011};
-"C": FNBuild_size3_param32_hexdigit = {FNsize_inc(param32[34:32]),param32[27:0],4'b1100};
-"D": FNBuild_size3_param32_hexdigit = {FNsize_inc(param32[34:32]),param32[27:0],4'b1101};
-"E": FNBuild_size3_param32_hexdigit = {FNsize_inc(param32[34:32]),param32[27:0],4'b1110};
-"F": FNBuild_size3_param32_hexdigit = {FNsize_inc(param32[34:32]),param32[27:0],4'b1111};
-"a": FNBuild_size3_param32_hexdigit = {FNsize_inc(param32[34:32]),param32[27:0],4'b1010};
-"b": FNBuild_size3_param32_hexdigit = {FNsize_inc(param32[34:32]),param32[27:0],4'b1011};
-"c": FNBuild_size3_param32_hexdigit = {FNsize_inc(param32[34:32]),param32[27:0],4'b1100};
-"d": FNBuild_size3_param32_hexdigit = {FNsize_inc(param32[34:32]),param32[27:0],4'b1101};
-"e": FNBuild_size3_param32_hexdigit = {FNsize_inc(param32[34:32]),param32[27:0],4'b1110};
-"f": FNBuild_size3_param32_hexdigit = {FNsize_inc(param32[34:32]),param32[27:0],4'b1111};
-default: FNBuild_size3_param32_hexdigit = param32; // EOL etc returns param32 unchanged
-endcase
-endfunction
-
-
-function [7:0] FNmap_hex_digit;
-input [3:0] nibble;
-case (nibble[3:0])
-4'b0000: FNmap_hex_digit = "0";
-4'b0001: FNmap_hex_digit = "1";
-4'b0010: FNmap_hex_digit = "2";
-4'b0011: FNmap_hex_digit = "3";
-4'b0100: FNmap_hex_digit = "4";
-4'b0101: FNmap_hex_digit = "5";
-4'b0110: FNmap_hex_digit = "6";
-4'b0111: FNmap_hex_digit = "7";
-4'b1000: FNmap_hex_digit = "8";
-4'b1001: FNmap_hex_digit = "9";
-4'b1010: FNmap_hex_digit = "a";
-4'b1011: FNmap_hex_digit = "b";
-4'b1100: FNmap_hex_digit = "c";
-4'b1101: FNmap_hex_digit = "d";
-4'b1110: FNmap_hex_digit = "e";
-4'b1111: FNmap_hex_digit = "f";
-default: FNmap_hex_digit = "0";
-endcase
-endfunction
-
-// as per Vivado synthesis mapping
-`ifdef ADPFSMDESIGN
-localparam   ADP_WRITEHEX = 6'b000000 ;
-localparam  ADP_WRITEHEXS = 6'b000001 ;
-localparam  ADP_WRITEHEX9 = 6'b000010 ;
-localparam  ADP_WRITEHEX8 = 6'b000011 ;
-localparam  ADP_WRITEHEX7 = 6'b000100 ;
-localparam  ADP_WRITEHEX6 = 6'b000101 ;
-localparam  ADP_WRITEHEX5 = 6'b000110 ;
-localparam  ADP_WRITEHEX4 = 6'b000111 ;
-localparam  ADP_WRITEHEX3 = 6'b001000 ;
-localparam  ADP_WRITEHEX2 = 6'b001001 ;
-localparam  ADP_WRITEHEX1 = 6'b001010 ;
-localparam  ADP_WRITEHEX0 = 6'b001011 ;
-localparam    ADP_LINEACK = 6'b001100 ;
-localparam   ADP_LINEACK2 = 6'b001101 ;
-localparam     ADP_PROMPT = 6'b001110 ;
-localparam      ADP_IOCHK = 6'b001111 ;
-localparam     ADP_STDOUT = 6'b010000 ;
-localparam    ADP_STDOUT1 = 6'b010001 ;
-localparam    ADP_STDOUT2 = 6'b010010 ;
-localparam    ADP_STDOUT3 = 6'b010011 ;
-localparam      ADP_RXCMD = 6'b010100 ;
-localparam    ADP_RXPARAM = 6'b010101 ;
-localparam     ADP_ACTION = 6'b010110 ;
-localparam     ADP_SYSCTL = 6'b010111 ;
-localparam       ADP_READ = 6'b011000 ;
-localparam     ADP_SYSCHK = 6'b011001 ;
-localparam      ADP_STDIN = 6'b011010 ;
-localparam      ADP_WRITE = 6'b011011 ;
-localparam       ADP_EXIT = 6'b011100 ;
-localparam      STD_IOCHK = 6'b011101 ;
-localparam       STD_RXD1 = 6'b011110 ;
-localparam       STD_RXD2 = 6'b011111 ;
-localparam       STD_TXD1 = 6'b100000 ;
-localparam       STD_TXD2 = 6'b100001 ;
-localparam      ADP_UCTRL = 6'b100010 ;
-localparam     ADP_UREADB = 6'b100011 ;
-localparam     ADP_UWRITE = 6'b100100 ;
-localparam       ADP_POLL = 6'b100101 ;
-localparam      ADP_POLL1 = 6'b100110 ;
-localparam      ADP_POLL2 = 6'b100111 ;
-localparam      ADP_FCTRL = 6'b101000 ;
-localparam     ADP_FWRITE = 6'b101001 ;
-localparam    ADP_ECHOCMD = 6'b101010 ;
-localparam    ADP_ECHOBUS = 6'b101011 ;
-localparam    ADP_UNKNOWN = 6'b101100 ;
-reg  [5:0] adp_state   ;
-`else
-// one-hot encoded explicitly
-localparam   ADP_WRITEHEX = 45'b000000000000000000000000000000000000000000001 ; // = 6'b000000 ;
-localparam  ADP_WRITEHEXS = 45'b000000000000000000000000000000000000000000010 ; // = 6'b000001 ;
-localparam  ADP_WRITEHEX9 = 45'b000000000000000000000000000000000000000000100 ; // = 6'b000010 ;
-localparam  ADP_WRITEHEX8 = 45'b000000000000000000000000000000000000000001000 ; // = 6'b000011 ;
-localparam  ADP_WRITEHEX7 = 45'b000000000000000000000000000000000000000010000 ; // = 6'b000100 ;
-localparam  ADP_WRITEHEX6 = 45'b000000000000000000000000000000000000000100000 ; // = 6'b000101 ;
-localparam  ADP_WRITEHEX5 = 45'b000000000000000000000000000000000000001000000 ; // = 6'b000110 ;
-localparam  ADP_WRITEHEX4 = 45'b000000000000000000000000000000000000010000000 ; // = 6'b000111 ;
-localparam  ADP_WRITEHEX3 = 45'b000000000000000000000000000000000000100000000 ; // = 6'b001000 ;
-localparam  ADP_WRITEHEX2 = 45'b000000000000000000000000000000000001000000000 ; // = 6'b001001 ;
-localparam  ADP_WRITEHEX1 = 45'b000000000000000000000000000000000010000000000 ; // = 6'b001010 ;
-localparam  ADP_WRITEHEX0 = 45'b000000000000000000000000000000000100000000000 ; // = 6'b001011 ;
-localparam    ADP_LINEACK = 45'b000000000000000000000000000000001000000000000 ; // = 6'b001100 ;
-localparam   ADP_LINEACK2 = 45'b000000000000000000000000000000010000000000000 ; // = 6'b001101 ;
-localparam     ADP_PROMPT = 45'b000000000000000000000000000000100000000000000 ; // = 6'b001110 ;
-localparam      ADP_IOCHK = 45'b000000000000000000000000000001000000000000000 ; // = 6'b001111 ;
-localparam     ADP_STDOUT = 45'b000000000000000000000000000010000000000000000 ; // = 6'b010000 ;
-localparam    ADP_STDOUT1 = 45'b000000000000000000000000000100000000000000000 ; // = 6'b010001 ;
-localparam    ADP_STDOUT2 = 45'b000000000000000000000000001000000000000000000 ; // = 6'b010010 ;
-localparam    ADP_STDOUT3 = 45'b000000000000000000000000010000000000000000000 ; // = 6'b010011 ;
-localparam      ADP_RXCMD = 45'b000000000000000000000000100000000000000000000 ; // = 6'b010100 ;
-localparam    ADP_RXPARAM = 45'b000000000000000000000001000000000000000000000 ; // = 6'b010101 ;
-localparam     ADP_ACTION = 45'b000000000000000000000010000000000000000000000 ; // = 6'b010110 ;
-localparam     ADP_SYSCTL = 45'b000000000000000000000100000000000000000000000 ; // = 6'b010111 ;
-localparam       ADP_READ = 45'b000000000000000000001000000000000000000000000 ; // = 6'b011000 ;
-localparam     ADP_SYSCHK = 45'b000000000000000000010000000000000000000000000 ; // = 6'b011001 ;
-localparam      ADP_STDIN = 45'b000000000000000000100000000000000000000000000 ; // = 6'b011010 ;
-localparam      ADP_WRITE = 45'b000000000000000001000000000000000000000000000 ; // = 6'b011011 ;
-localparam       ADP_EXIT = 45'b000000000000000010000000000000000000000000000 ; // = 6'b011100 ;
-localparam      STD_IOCHK = 45'b000000000000000100000000000000000000000000000 ; // = 6'b011101 ;
-localparam       STD_RXD1 = 45'b000000000000001000000000000000000000000000000 ; // = 6'b011110 ;
-localparam       STD_RXD2 = 45'b000000000000010000000000000000000000000000000 ; // = 6'b011111 ;
-localparam       STD_TXD1 = 45'b000000000000100000000000000000000000000000000 ; // = 6'b100000 ;
-localparam       STD_TXD2 = 45'b000000000001000000000000000000000000000000000 ; // = 6'b100001 ;
-localparam      ADP_UCTRL = 45'b000000000010000000000000000000000000000000000 ; // = 6'b100010 ;
-localparam     ADP_UREADB = 45'b000000000100000000000000000000000000000000000 ; // = 6'b100011 ;
-localparam     ADP_UWRITE = 45'b000000001000000000000000000000000000000000000 ; // = 6'b100100 ;
-localparam       ADP_POLL = 45'b000000010000000000000000000000000000000000000 ; // = 6'b100101 ;
-localparam      ADP_POLL1 = 45'b000000100000000000000000000000000000000000000 ; // = 6'b100110 ;
-localparam      ADP_POLL2 = 45'b000001000000000000000000000000000000000000000 ; // = 6'b100111 ;
-localparam      ADP_FCTRL = 45'b000010000000000000000000000000000000000000000 ; // = 6'b101000 ;
-localparam     ADP_FWRITE = 45'b000100000000000000000000000000000000000000000 ; // = 6'b101001 ;
-localparam    ADP_ECHOCMD = 45'b001000000000000000000000000000000000000000000 ; // = 6'b101010 ;
-localparam    ADP_ECHOBUS = 45'b010000000000000000000000000000000000000000000 ; // = 6'b101011 ;
-localparam    ADP_UNKNOWN = 45'b100000000000000000000000000000000000000000000 ; // = 6'b101100 ;
-reg [44:0] adp_state   ;
-`endif
-
-reg [31:0] adp_bus_data;
-reg        banner      ;
-reg        com_tx_req  ;
-reg  [7:0] com_tx_byte ;
-reg        com_rx_ack  ;
-reg        std_tx_req  ;
-reg [ 7:0] std_tx_byte;
-reg        std_rx_ack  ;
-reg        adp_bus_req ;
-reg        adp_bus_write ;
-reg        adp_bus_err ;
-reg  [7:0] adp_cmd     ;
-reg  [7:0] adp_cmdwid  ;
-reg [34:0] adp_param   ;
-reg [31:0] adp_addr    ;
-reg  [1:0] adp_size    ;
-reg        adp_addr_inc;
-reg [31:0] adp_sys     ;
-
-assign GPO8_o = adp_sys[7:0];
-
-// ADP RX stream
-wire        com_rx_req = COMRX_TVALID_i;
-wire [ 7:0] com_rx_byte = COMRX_TDATA_i;
-assign      COMRX_TREADY_o = com_rx_ack;
-// ADP TX stream
-wire        com_tx_ack = COMTX_TREADY_i;
-assign      COMTX_TDATA_o = com_tx_byte;
-assign      COMTX_TVALID_o = com_tx_req;
-// STD RX stream (from STDOUT)
-wire        std_rx_req  = STDRX_TVALID_i;
-wire [ 7:0] std_rx_byte = STDRX_TDATA_i;
-assign      STDRX_TREADY_o = std_rx_ack;
-// STD TX stream (to STDIN)
-wire         std_tx_ack = STDTX_TREADY_i;
-assign       STDTX_TDATA_o = std_tx_byte;
-assign       STDTX_TVALID_o = std_tx_req;
-
-//AMBA AHB master as "stream" interface
-reg        ahb_dphase;
-wire       ahb_aphase = adp_bus_req & !ahb_dphase;
-wire       adp_bus_ack = ahb_dphase & HREADY_i;
-// control pipe
-always @(posedge HCLK or negedge HRESETn)
-  if(!HRESETn)
-    ahb_dphase    <= 0;
-  else if (HREADY_i)
-    ahb_dphase    <= (ahb_aphase);
-
-wire [1:0] byteaddr;
-
-assign byteaddr =  (adp_size[1]) ? 2'b00 :  (adp_size[0]) ? {adp_addr[1], 1'b0} : adp_addr[1:0];
-
-assign HADDR32_o[31:2] =  adp_addr[31:2];
-assign HADDR32_o[ 1:0] =  byteaddr[1:0];
-assign HBURST3_o     =  3'b001; // "INCR" burst signalled whenever transfer;
-assign HMASTLOCK_o   =  1'b0;
-assign HPROT4_o[3:0] = {1'b0, 1'b0, 1'b1, 1'b1};
-assign HSIZE3_o[2:0] = {1'b0, adp_size};
-assign HTRANS2_o     = {ahb_aphase,1'b0}; // non-seq
-assign HWDATA32_o    =  (adp_size[1]) ? adp_bus_data
-                                     : (adp_size[0]) ? {2{adp_bus_data[15:0]}}
-                                     : {4{adp_bus_data[7:0]}} ;
-assign HWRITE_o      =  adp_bus_write;
-
-
-`ifndef ADPBASIC
-reg  [34:0] adp_val;
-reg  [31:0] adp_mask;
-reg  [31:0] adp_poll;
-reg  [31:0] adp_count;
-reg         adp_count_dec ;
-wire        adp_delay_done;
-wire        poll2_loop_next;
-`endif
-
-// ADP_control flags in the 'C' control field
-wire        adp_disable;
-wire        adp_stdin_wait;
-
-// commnon interface handshake terms
-wire com_rx_done   = COMRX_TVALID_i & COMRX_TREADY_o;
-wire com_tx_done   = COMTX_TVALID_o & COMTX_TREADY_i;
-wire std_rx_done   = STDRX_TVALID_i & STDRX_TREADY_o;
-wire std_tx_done   = STDTX_TVALID_o & STDTX_TREADY_i;
-wire adp_bus_done  = (adp_bus_req & adp_bus_ack);
-
-// common task to set up for next state
-task ADP_LINEACK_next; // prepare newline TX (and cancel any startup banner)
-//  begin com_tx_req <= 1; com_tx_byte <= 8'h0A; banner <= 0; adp_state <= ADP_LINEACK; end
-  begin com_tx_req <= 1; com_tx_byte <= 8'h0A; adp_state <= ADP_LINEACK; end
-endtask
-task ADP_PROMPT_next; // prepare prompt TX
-  begin com_tx_req <= 1; com_tx_byte <= PROMPT_CHAR; adp_state <= ADP_PROMPT; end
-endtask
-task ADP_BUSWRITEINC_next; // prepare bus write and addr++ on completion
-  begin adp_bus_req <=1; adp_bus_write <=1; adp_addr_inc <=1; end
-endtask
-task ADP_BUSREADINC_next; // prepare bus read and addr++ on completion
-  begin adp_bus_req <=1; adp_bus_write <=0; adp_addr_inc <=1; end
-endtask
-
-task ADP_hexdigit_next; // output nibble
-input [3:0] nibble;
-  begin com_tx_req <= 1; com_tx_byte <= FNmap_hex_digit(nibble[3:0]); end
-endtask
-task ADP_txchar_next; // output char
-input [7:0] octet;
-  begin com_tx_req<= 1; com_tx_byte <= octet; end
-endtask
-
-task com_rx_nxt; com_rx_ack <=1; endtask
-
-function FNcount_down_zero_next; // param about to be zero
-input [31:0] counter;
-  FNcount_down_zero_next = !(|counter[31:1]);
-endfunction
-
-always @(posedge HCLK or negedge HRESETn)
-  if(!HRESETn) begin
-      adp_state    <= ADP_WRITEHEX ;
-      adp_bus_data <= BANNERHEX;
-      banner       <= 1; // start-up HEX message
-      com_tx_req   <= 0; // default no TX req
-      com_rx_ack   <= 0; // default no RX ack
-      std_tx_req   <= 0; // default no TX req
-      std_rx_ack   <= 0; // default no RX ack
-      adp_bus_req  <= 0; // default no bus transaction
-      adp_bus_err  <= 0; // default no bus error
-      adp_cmd      <= 0;
-      adp_param    <= 0;
-      adp_size     <= 2'b10; // default to 32-bit word size
-      adp_addr     <= 0;
-      adp_addr_inc <= 0;
-      adp_bus_write<= 0;
-`ifndef ADPBASIC
-      adp_count    <= 0;
-      adp_count_dec<= 0;
-      adp_val      <= 0;
-      adp_mask     <= 0;
-      adp_sys      <= 0;
-`endif
-  end else begin // default states
-      adp_state    <= adp_state; // default to hold current state
-      com_tx_req   <= 0; // default no TX req
-      com_rx_ack   <= 0; // default no RX ack
-      std_tx_req   <= 0; // default no TX req
-      std_rx_ack   <= 0; // default no RX ack
-      adp_bus_req  <= 0; // default no bus transaction
-      adp_addr     <= (adp_addr_inc & adp_bus_done) ? adp_addr + (1 << adp_size) : adp_addr; // address++
-      adp_addr_inc <= 0;
-`ifndef ADPBASIC
-      adp_count    <= (adp_count_dec & adp_bus_done & |adp_count) ? adp_count - 1 : adp_count; // param--
-      adp_count_dec<= 0;
-`endif
-    case (adp_state)
-// >>>>>>>>>>>>>>>> STDIO BYPASS >>>>>>>>>>>>>>>>>>>>>>
-       STD_IOCHK:  // check for commsrx or STDOUT and not busy service, else loop back
-         if (com_rx_req) begin com_rx_ack <= 1; adp_state <= STD_RXD1; end // input char pending for STDIN
-//         else if (com_tx_ack & std_rx_req) begin std_rx_ack <= 1; adp_state <= STD_TXD1; end // STDOUT char pending and not busy
-         else if (std_rx_req) begin std_rx_ack <= 1; adp_state <= STD_TXD1; end // STDOUT char pending
-       STD_TXD1:  // get STD out char
-         if (std_rx_done)
-           begin com_tx_byte <= std_rx_byte; com_tx_req <= 1; adp_state <= STD_TXD2; end
-         else std_rx_ack <= 1; // extend
-       STD_TXD2:  // output char to ADP channel
-         if (com_tx_done) begin adp_state <= STD_IOCHK; end
-         else com_tx_req <= 1;  // extend
-       STD_RXD1:  // read rx char and check for ADP entry else STDIN **
-         if (com_rx_done) begin
-           if (FNvalid_adp_entry(com_rx_byte))
-             begin ADP_txchar_next(8'h0A); adp_state <= ADP_LINEACK; end // ADP prompt
-           else if (std_tx_ack)
-             begin std_tx_byte <= com_rx_byte; std_tx_req <= 1; adp_state <= STD_RXD2; end
-           else adp_state <= STD_IOCHK; // otherwise discard STDIN char and process OP data if blocked
-         end else com_rx_ack <= 1;  // extend
-       STD_RXD2:  // get STD in char
-         if (std_tx_done) begin adp_state <= STD_IOCHK; end
-         else std_tx_req <= 1; // extend
-
-// >>>>>>>>>>>>>>>> ADP Monitor >>>>>>>>>>>>>>>>>>>>>>
-       ADP_PROMPT:  // transition after reset deassertion
-         if (com_tx_done) begin adp_state <= ADP_IOCHK; end
-         else com_tx_req <= 1;  // extend
-
-       ADP_IOCHK:  // check for commsrx or STDOUT and not busy service, else loop back
-         if (std_rx_req) begin com_tx_byte <= "<"; com_tx_req <= 1; adp_state <= ADP_STDOUT; end
-         else if (com_rx_req) begin com_rx_ack <= 1; adp_state <= ADP_RXCMD; end
-
-// >>>>>>>>>>>>>>>> ADP <STDOUT> >>>>>>>>>>>>>>>>>>>>>>
-       ADP_STDOUT:  // output "<"
-         if (com_tx_done) begin std_rx_ack <= 1; adp_state <= ADP_STDOUT1; end
-         else com_tx_req <= 1; // extend stream request if not ready
-       ADP_STDOUT1:  // get STD out char
-         if (std_rx_done) begin com_tx_byte <= std_rx_byte; com_tx_req <= 1; adp_state <= ADP_STDOUT2; end
-         else std_rx_ack <= 1; // else extend
-       ADP_STDOUT2:  // output char
-         if (com_tx_done) begin com_tx_byte <= ">"; com_tx_req <= 1; adp_state <= ADP_STDOUT3; end
-         else com_tx_req <= 1;  // else extend
-       ADP_STDOUT3:  // output ">"
-         if (com_tx_done) begin if (com_rx_req) begin com_rx_ack <= 1; adp_state <= ADP_RXCMD; end else adp_state <= ADP_IOCHK; end
-         else com_tx_req <= 1; // else extend
-
-// >>>>>>>>>>>>>>>> ADP COMMAND PARSING >>>>>>>>>>>>>>>>>>>>>>
-       ADP_RXCMD:  // read and save ADP command
-         if (com_rx_done) begin
-           if (FNexit(com_rx_byte)) adp_state <= STD_IOCHK; // immediate exit
-           else if (FNvalid_space(com_rx_byte)) com_rx_ack <= 1; // retry for a command
-           else if (FNvalid_EOL(com_rx_byte)) begin adp_cmd <= "?"; adp_state <= ADP_LINEACK; end // no command, skip param
-           else begin adp_cmd <= com_rx_byte; adp_param <= 35'h0_00000000; com_rx_ack <= 1; adp_state <= ADP_RXPARAM; end // get optional parameter
-         end
-         else com_rx_ack <= 1; // extend stream request if not ready
-       ADP_RXPARAM:  // read and build hex parameter
-         if (com_rx_done) begin  // RX byte
-           if (FNexit(com_rx_byte)) adp_state <= STD_IOCHK; // exit
-           else if (FNvalid_EOL(com_rx_byte))
-`ifndef ADPBASIC
-            begin adp_count <= adp_param[31:0]; adp_state <= ADP_ACTION;
-                  adp_size  <= FNparam2size(adp_param[34:33]); end // parameter complete on EOL
-`else
-            begin adp_state <= ADP_ACTION;
-                  adp_size  <= FNparam2size(adp_param[34:33]); end // parameter complete on EOL
-`endif
-           else
-             begin adp_param <= FNBuild_size3_param32_hexdigit(adp_param[34:0], com_rx_byte); com_rx_ack <= 1; end // build parameter
-           end
-         else com_rx_ack <= 1;
-
-       ADP_ACTION:  // parse command and action with parameter
-         if (FNexit(com_rx_byte))
-           adp_state <= STD_IOCHK;
-         else if (FNvalid_cmd(adp_cmd) == CMD_A)
-           begin if (|adp_param[34:32]) adp_addr <= adp_param[31:0]; else adp_param <= {3'b111, adp_addr} ;
-             adp_state <= ADP_ECHOCMD; end
-         else if (FNvalid_cmd(adp_cmd) == CMD_C) begin
-           if (|adp_param[34:32] == 1'b0) // report GPO
-             begin adp_state <= ADP_SYSCTL; end
-           else if (adp_param[31:8] == 1) // clear selected bits in GPO
-             begin adp_sys[7:0] <= adp_sys[7:0] & ~adp_param[7:0]; adp_state <= ADP_SYSCTL; end
-           else if (adp_param[31:8] == 2) // set selected bits in GPO
-             begin adp_sys[7:0] <= adp_sys[7:0] | adp_param[7:0]; adp_state <= ADP_SYSCTL; end
-           else if (adp_param[31:8] == 3) // overwrite bits in GPO
-             begin adp_sys[7:0] <= adp_param[7:0]; adp_state <= ADP_SYSCTL; end
-           else // 4 etc, report GPO
-             begin adp_state <= ADP_SYSCTL; end
-           end
-         else if (FNvalid_cmd(adp_cmd) == CMD_R)
-           begin adp_size <= FNparam2size(adp_param[34:33]); ADP_BUSREADINC_next; adp_state <= ADP_READ;
-`ifndef ADPBASIC
-             adp_count_dec <= 1'b1; // optional loop param
-`endif
-           end // no param required
-         else if (FNvalid_cmd(adp_cmd) == CMD_S)
-           begin adp_state <= ADP_SYSCHK; end
-         else if (FNvalid_cmd(adp_cmd) == CMD_W)
-           begin adp_size <= FNparam2size(adp_param[34:33]); adp_bus_data <= adp_param[31:0]; ADP_BUSWRITEINC_next; adp_state <= ADP_WRITE; end
-         else if (FNvalid_cmd(adp_cmd) == CMD_X)
-           begin com_tx_byte <= 8'h0a; com_tx_req <= 1; adp_state <= ADP_EXIT; end
-`ifndef ADPBASIC
-         else if (FNvalid_cmd(adp_cmd) == CMD_U)
-           if (FNcount_down_zero_next(adp_param[31:0])) adp_state <= ADP_ECHOCMD; else adp_state <= ADP_UCTRL; // non-zero count
-         else if (FNvalid_cmd(adp_cmd) == CMD_M)
-           begin if (|adp_param[34:32]) adp_mask <= adp_param[31:0]; else adp_param <= {3'b111,adp_mask};
-             adp_state <= ADP_ECHOCMD; end
-         else if (FNvalid_cmd(adp_cmd) == CMD_P)
-           if (FNcount_down_zero_next(adp_param[31:0])) adp_state <= ADP_ECHOCMD; else adp_state <= ADP_POLL; // non-zero count
-         else if (FNvalid_cmd(adp_cmd) == CMD_V)
-           begin if (|adp_param[34:32]) begin adp_size <= FNparam2size(adp_param[34:33]); adp_val <= adp_param[34:0]; end
-                 else adp_param <= adp_val;
-             adp_state <= ADP_ECHOCMD; end
-         else if (FNvalid_cmd(adp_cmd) == CMD_F)
-           if (FNcount_down_zero_next(adp_param[31:0])) adp_state <= ADP_ECHOCMD; else adp_state <= ADP_FCTRL; // non-zero count
-`endif
-         else
-           begin ADP_txchar_next("?"); adp_state <= ADP_UNKNOWN; end // unrecognised/invald
-
-// >>>>>>>>>>>>>>>> ADP BUS WRITE and READ >>>>>>>>>>>>>>>>>>>>>>
-
-       ADP_WRITE:  // perform bus write at current address pointer (and auto increment)
-         if (adp_bus_done) begin adp_state <= ADP_ECHOCMD; adp_bus_err <= HRESP_i; end
-         else begin ADP_BUSWRITEINC_next; end // extend request
-
-       ADP_READ:  // perform bus read at current adp address (and auto increment)  - and report in hex
-         if (adp_bus_done) begin adp_bus_data <= (byteaddr[1:0] == 2'b01) ? {HRDATA32_i[ 7: 0],HRDATA32_i[31: 8]} 
-                                               : (byteaddr[1:0] == 2'b10) ? {HRDATA32_i[15: 0],HRDATA32_i[31:16]} 
-                                               : (byteaddr[1:0] == 2'b11) ? {HRDATA32_i[23: 0],HRDATA32_i[31:24]}
-                                               : HRDATA32_i;
-                                 adp_bus_err <= HRESP_i; ADP_txchar_next("R"); adp_state <= ADP_ECHOBUS;
-                           end
-         else begin
-             ADP_BUSREADINC_next;
-`ifndef ADPBASIC
-           adp_count_dec<= 1'b1;
-`endif
-         end // extend request
-
-`ifndef ADPBASIC
-
-// >>>>>>>>>>>>>>>> ADP BINARY UPLOAD >>>>>>>>>>>>>>>>>>>>>>
-       ADP_UCTRL:  // set control value
-         begin com_rx_ack <= 1; adp_size = 2'b00; adp_state <= ADP_UREADB; end  // read next byte
-       ADP_UREADB: // read raw binary byte
-         if (com_rx_done)
-           begin adp_bus_data[31:0] <= {4{com_rx_byte}}; ADP_BUSWRITEINC_next; adp_count_dec <= 1; adp_state <= ADP_UWRITE; end
-         else com_rx_ack <= 1;  // extend stream request if not ready
-       ADP_UWRITE:  // Write word to Addr++
-         if (adp_bus_done) begin // auto address++, count--
-           if (FNcount_down_zero_next(adp_count)) adp_state <= ADP_ECHOCMD; else begin adp_state <= ADP_UREADB; adp_bus_err <= adp_bus_err | HRESP_i; end
-         end else begin  ADP_BUSWRITEINC_next; adp_count_dec <= 1; end // extend request
-
-// >>>>>>>>>>>>>>>> ADP BUS READ LOOP >>>>>>>>>>>>>>>>>>>>>>
-       ADP_POLL:  // set poll value
-         begin adp_bus_req <= 1; adp_bus_write <= 0; adp_state <= ADP_POLL1; end
-       ADP_POLL1:  // wait for read data, no addr++
-         if (adp_bus_done) begin adp_bus_data <= HRDATA32_i; adp_count_dec <=1; adp_state <= ADP_POLL2; adp_bus_err <= adp_bus_err | HRESP_i; end
-         else begin adp_bus_req <= 1; adp_count_dec <=1; end
-       ADP_POLL2:
-         if (FNcount_down_zero_next(adp_count)) begin adp_state <= ADP_ECHOCMD; adp_bus_err <= 1'b1; end // timeout
-         else if (((adp_bus_data  & adp_mask) ^ adp_val[31:0]) == 0) begin adp_state <= ADP_ECHOCMD; adp_param <= {1'b0, (adp_param[31:0] - adp_count)}; end // exact match
-         else adp_state <= ADP_POLL;
-
-// >>>>>>>>>>>>>>>> ADP (ZERO) FILL MEMORY >>>>>>>>>>>>>>>>>>>>>>
-       ADP_FCTRL:  // set control value
-           begin adp_size <= FNparam2size(adp_val[34:33]); adp_bus_data <= adp_val[31:0]; ADP_BUSWRITEINC_next; adp_count_dec <= 1; adp_state <= ADP_FWRITE; end
-       ADP_FWRITE:  // Write word to Addr++
-         if (adp_bus_done) begin // auto address++, count--
-           if (FNcount_down_zero_next(adp_count)) adp_state <= ADP_ECHOCMD; else begin adp_state <= ADP_FCTRL;  adp_bus_err <= adp_bus_err | HRESP_i; end
-         end else begin  ADP_BUSWRITEINC_next; adp_count_dec <= 1; end // extend request
-`endif
-
-        // >>>>>>>>>>>>>>>> ADP MISC >>>>>>>>>>>>>>>>>>>>>>
-
-       ADP_UNKNOWN:  // output "?"
-         if (com_tx_done) begin ADP_LINEACK_next; end
-         else com_tx_req <= 1;  // extend stream request if not ready
-
-       ADP_EXIT:  // exit ADP mode
-         if (com_tx_done) adp_state <= STD_IOCHK;
-         else com_tx_req <= 1;  // extend stream request if not ready
-
-       ADP_SYSCHK:  // check STDIN fifo
-         begin // no upper flags so STDIN char
-           if (std_tx_ack) begin std_tx_req <=1; std_tx_byte <= adp_param[7:0]; adp_state <= ADP_STDIN; end
-           else begin adp_bus_err <= 1'b1; adp_state <= ADP_ECHOCMD; end // signal error then echo comand
-         end
-       ADP_STDIN:  // push char into STDIN
-         if (std_tx_done) begin adp_bus_data <= {24'b0,adp_param[7:0]}; ADP_txchar_next("S"); adp_state <= ADP_ECHOBUS;  end
-         else std_tx_req <= 1; // extend
-
-       ADP_SYSCTL:  // read current status - and report in hex
-         begin adp_bus_data <= {GPI8_i[7:0],adp_sys[7:0],adp_param[15:0]}; ADP_txchar_next("C"); adp_state <= ADP_ECHOBUS;  end
-
-       ADP_ECHOCMD:  // output command and (param) data
-         begin ADP_txchar_next(adp_cmd & 8'h5f); adp_bus_data <= adp_param[31:0]; adp_state <= ADP_ECHOBUS; end // output command char
-       ADP_ECHOBUS:  // output command space and (bus) data
-         if (com_tx_done) begin adp_state <= ADP_WRITEHEXS; ADP_txchar_next(adp_bus_err ? "!" : " "); end // output space char, or "!" on bus error
-         else com_tx_req <= 1;  // extend
-
-       ADP_WRITEHEX:  // output hex word with prefix
-         begin adp_state <= ADP_WRITEHEXS; ADP_txchar_next(adp_bus_err ? "!" : " "); end // output space char, or "!" on bus error
-
-       ADP_WRITEHEXS:
-         if (com_tx_done) begin adp_state <= ADP_WRITEHEX9; ADP_txchar_next("0"); end // output "0" hex prefix
-         else com_tx_req <= 1;  // extend
-       ADP_WRITEHEX9:
-         if (com_tx_done & adp_size[1]) begin adp_state <= ADP_WRITEHEX8; ADP_txchar_next("x"); end // output "x" hex prefix
-         else if (com_tx_done & adp_size[0]) begin adp_state <= ADP_WRITEHEX4; ADP_txchar_next("x"); end // output "x" hex prefix
-         else if (com_tx_done) begin adp_state <= ADP_WRITEHEX2; ADP_txchar_next("x"); end // output "x" hex prefix
-         else com_tx_req <= 1;  // extend
-       ADP_WRITEHEX8:
-         if (com_tx_done) begin adp_state <= ADP_WRITEHEX7; ADP_hexdigit_next(adp_bus_data[31:28]); end // hex nibble 7
-         else com_tx_req <= 1;  // extend
-       ADP_WRITEHEX7:  // output hex nibble 7
-         if (com_tx_done) begin adp_state <= ADP_WRITEHEX6; ADP_hexdigit_next(adp_bus_data[27:24]); end // hex nibble 6
-         else com_tx_req <= 1;  // extend
-       ADP_WRITEHEX6:  // output hex nibble 6
-         if (com_tx_done) begin adp_state <= ADP_WRITEHEX5; ADP_hexdigit_next(adp_bus_data[23:20]); end // hex nibble 5
-         else com_tx_req <= 1;  // extend
-       ADP_WRITEHEX5:  // output hex nibble 5
-         if (com_tx_done) begin adp_state <= ADP_WRITEHEX4; ADP_hexdigit_next(adp_bus_data[19:16]); end // hex nibble 4
-         else com_tx_req <= 1;  // extend
-       ADP_WRITEHEX4:  // output hex nibble 4
-         if (com_tx_done) begin adp_state <= ADP_WRITEHEX3; ADP_hexdigit_next(adp_bus_data[15:12]); end // hex nibble 3
-         else com_tx_req <= 1;  // extend
-       ADP_WRITEHEX3:  // output hex nibble 3
-         if (com_tx_done) begin adp_state <= ADP_WRITEHEX2; ADP_hexdigit_next(adp_bus_data[11: 8]); end // hex nibble 2
-         else com_tx_req <= 1;  // extend
-       ADP_WRITEHEX2:  // output hex nibble 2
-         if (com_tx_done) begin adp_state <= ADP_WRITEHEX1; ADP_hexdigit_next(adp_bus_data[ 7: 4]); end // hex nibble 1
-         else com_tx_req <= 1;  // extend
-       ADP_WRITEHEX1:  // output hex nibble 1
-         if (com_tx_done) begin adp_state <= ADP_WRITEHEX0; ADP_hexdigit_next(adp_bus_data[ 3: 0]); end // hex nibble 0
-         else com_tx_req <= 1;  // extend
-       ADP_WRITEHEX0:  // output hex nibble 0 (if not startup banner then scan to end of line before lineack
-         if (com_tx_done) begin
-           adp_bus_err <= 1'b0; // clear sticky bus error flag
-           if (banner) begin ADP_LINEACK_next; end
-           else begin ADP_txchar_next(8'h0A); com_tx_req <= 1; adp_state <= ADP_LINEACK; end // newline and prompt
-         end else com_tx_req <= 1;  // extend
-
-       ADP_LINEACK:  // write EOLN
-         if (com_tx_done) begin
-           begin ADP_txchar_next(8'h0D); adp_state <= ADP_LINEACK2; end
-         end else com_tx_req <= 1;  // extend
-       ADP_LINEACK2: // CR
-         if (com_tx_done) begin
-           if (banner) begin banner <= 0; adp_state <= STD_IOCHK; end
-`ifndef ADPBASIC
-           else if ((FNvalid_cmd(adp_cmd) == CMD_R) & |adp_count) //// non-zero count
-             begin ADP_BUSREADINC_next; adp_count_dec <= 1'b1; adp_state <= ADP_READ; end //
-`endif
-           else begin ADP_txchar_next(PROMPT_CHAR); adp_state <= ADP_PROMPT; end
-         end else com_tx_req <= 1;  // extend
-      default:
-        begin ADP_txchar_next("#"); adp_state <= ADP_UNKNOWN; end // default error
-    endcase
-  end
-
-endmodule
-
-////AHBLITE_ADPMASTER instancing
-//adp_manager
-//   #(.PROMPT_CHAR     ("]"))
-// ADPmanager(
-//  .HCLK        (ahb_hclk      ),
-//  .HRESETn     (ahb_hrestn    ),
-//  .HADDR32_o   (ahb_haddr     ),
-//  .HBURST3_o   (ahb_hburst    ),
-//  .HMASTLOCK_o (ahb_hmastlock ),
-//  .HPROT4_o    (ahb_hprot     ),
-//  .HSIZE3_o    (ahb_hsize     ),
-//  .HTRANS2_o   (ahb_htrans    ),
-//  .HWDATA32_o  (ahb_hwdata    ),
-//  .HWRITE_o    (ahb_hwrite    ),
-//  .HRDATA32_i  (ahb_hrdata    ),
-//  .HREADY_i    (ahb_hready    ),
-//  .HRESP_i     (ahb_hresp     ),
-//  .GPO8_o      (gpio8         ),
-//  .GPI8_i      (gpio8         ),
-//  .COMRX_TREADY_o(com_rx_tready),
-//  .COMRX_TDATA_i(com_rx_tdata),
-//  .COMRX_TVALID_i(com_rx_tvalid),
-//  .STDRX_TREADY_o(std_rx_tready),
-//  .STDRX_TDATA_i(std_rx_tdata),
-//  .STDRX_TVALID_i(std_rx_tvalid),
-//  .COMTX_TVALID_o(com_tx_tvalid),
-//  .COMTX_TDATA_o(com_tx_tdata),
-//  .COMTX_TREADY_i(com_tx_tready),
-//  .STDTX_TVALID_o(std_tx_tvalid),
-//  .STDTX_TDATA_o(std_tx_tdata),
-//  .STDTX_TREADY_i(std_tx_tready)
-//  );
diff --git a/system/test_io/verilog/nanosoc_ft1248_stream_io_v1_0.v b/system/test_io/verilog/nanosoc_ft1248_stream_io_v1_0.v
deleted file mode 100755
index 21b14bc7923dcadcbd85c628c777319e1f831a66..0000000000000000000000000000000000000000
--- a/system/test_io/verilog/nanosoc_ft1248_stream_io_v1_0.v
+++ /dev/null
@@ -1,305 +0,0 @@
-//-----------------------------------------------------------------------------
-// soclabs on-chip AXI stream to FTDI FT1248 controller
-// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license.
-//
-// Contributors
-//
-// David Flynn (d.w.flynn@soton.ac.uk)
-//
-// Copyright � 2022, SoC Labs (www.soclabs.org)
-//-----------------------------------------------------------------------------
-
-module nanosoc_ft1248_stream_io_v1_0 #
-	(
-		// Users to add parameters here
-		// FTDI Interface 1,2,4 width supported
-		parameter integer FT1248_WIDTH	= 1,
-		// FTDI clock always on - else quiet when no access
-		parameter integer FT1248_CLKON	= 1
-
-		// User parameters ends
-		// Do not modify the parameters beyond this line
-
-		// Parameters of Axi Stream Master Bus Interface TXD
-		// Parameters of Axi Stream Slave Bus Interface RXD
-	)
-	(
-		// IO pad interface - to FT232R configured in 1/2/4/8 mode
-        output wire  ft_clk_o,         // SCLK
-        output wire  ft_ssn_o,         // SS_N
-        input  wire  ft_miso_i,          // MISO
-        output wire [FT1248_WIDTH-1:0] ft_miosio_o,   // MIOSIO tristate output when enabled
-        output wire [FT1248_WIDTH-1:0] ft_miosio_e,    // MIOSIO tristate output enable (active hi)
-        output wire [FT1248_WIDTH-1:0] ft_miosio_z,   // MIOSIO tristate output enable (active lo)
-        input  wire [FT1248_WIDTH-1:0] ft_miosio_i,    // MIOSIO tristate input
-        
-        input  wire [7:0] ft_clkdiv,    // divider prescaler to ensure SCLK <1MHz
-        
-		// User ports ends
-		// Do not modify the ports beyond this line
-
-        // initially clocked from aclk
-        // asynch 
-		input  wire  clk,
-		input  wire  resetn,
-
-		// Ports of Axi Master Bus Interface TXD
-		output wire  txd_tvalid,
-		output wire [7 : 0] txd_tdata,
-		output wire  txd_tlast,
-		input  wire  txd_tready,
-
-		// Ports of Axi Slave Bus Interface RXD
-		output wire  rxd_tready,
-		input  wire [7 : 0] rxd_tdata,
-		input  wire  rxd_tlast,
-		input  wire  rxd_tvalid
-	);
-
-	//----------------------------------------------
-	//-- State Machine encoding
-	//----------------------------------------------
-
-// Explicit FSM state bit assignment
-//  bit [0] SCLK
-//  bit [1] MIO_OE
-//  bit [2] CMD/W
-//  bit [3] DAT/R
-//  bit [4] SSEL
-
-localparam FT_0_IDLE       = 5'b00000;
-localparam FT_1_IDLE       = 5'b00001;
-localparam FT_ZCMD_CLKLO   = 5'b10100;
-localparam FT_CMD_CLKHI    = 5'b10111;
-localparam FT_CMD_CLKLO    = 5'b10110;
-localparam FT_ZBT_CLKHI    = 5'b10001;
-localparam FT_ZBT_CLKLO    = 5'b10000;
-localparam FT_WD_CLKHI     = 5'b11111;
-localparam FT_WD_CLKLO     = 5'b11110;
-localparam FT_ZWD_CLKLO    = 5'b11100;
-localparam FT_RD_CLKHI     = 5'b11001;
-localparam FT_RD_CLKLO     = 5'b11000;
-
-reg [4:0] ft_state;
-// 9- bit shift register to support 8-bit data + 1 sequence control flag
-// write data uses bits[7:0], with bit[8] set to flag length for serialized transfers
-// read  data uses bits[8:1], with bit[0] set to flag continuation for serialized transfers
-reg [8:0] ft_reg;
-
-	//----------------------------------------------
-	//-- IO PAD control, parameterized on WIDTH param
-	//----------------------------------------------
-	
-wire bwid8 = (FT1248_WIDTH==8);
-wire bwid4 = (FT1248_WIDTH==4);
-wire bwid2 = (FT1248_WIDTH==2);
-wire bwid1 = (FT1248_WIDTH==1);
-
-wire [7:0] ft_rdmasked;
-
-generate if (FT1248_WIDTH == 8) begin
-assign ft_rdmasked[7:1] =  ft_miosio_i[7:1];
-assign ft_miosio_o[7:1] =  ft_reg[7:1];
-assign ft_miosio_e[7:1]  =  {7{ft_state[1]}};
-assign ft_miosio_z[7:1] = ~{7{ft_state[1]}};
-end 
-endgenerate
-
-generate if (FT1248_WIDTH == 4) begin
-assign ft_rdmasked[7:1] =  {4'b1111, ft_miosio_i[3:1]};
-assign ft_miosio_o[3:1] =  ft_reg[3:1];
-assign ft_miosio_e[3:1]  =  {3{ft_state[1]}};
-assign ft_miosio_z[3:1] = ~{3{ft_state[1]}};
-end
-endgenerate
-
-generate if (FT1248_WIDTH == 2) begin
-assign ft_rdmasked[7:1] =  {6'b111111, ft_miosio_i[1]};
-assign ft_miosio_o[1] =  ft_reg[1];
-assign ft_miosio_e[1]  =  ft_state[1];
-assign ft_miosio_z[1] = ~ft_state[1];
-end
-endgenerate
-
-generate if (FT1248_WIDTH == 1)
-assign ft_rdmasked[7:1] =  7'b1111111;
-endgenerate
-
-assign ft_rdmasked[0] = ft_miosio_i[0];
-assign ft_miosio_o[0] =  ft_reg[0];
-assign ft_miosio_e[0]  =  ft_state[1];
-assign ft_miosio_z[0] = ~ft_state[1];
-
-assign ft_clk_o =  ft_state[0];
-assign ft_ssn_o = !ft_state[4];
-
-// diagnostic decodes
-//wire   ft_cmd = !ft_state[3] &  ft_state[2];
-//wire   ft_dwr =  ft_state[3] &  ft_state[2];
-//wire   ft_drd =  ft_state[3] & !ft_state[2];
-
-
-	//----------------------------------------------
-	//-- Internal clock prescaler
-	//----------------------------------------------
-
-	// clock prescaler, ft_clken enables serial IO engine clocking
-	reg [7:0] ft_clkcnt_r;
-	reg       ft_clken;
-
-	always @(posedge clk or negedge resetn )
-	begin
-	  if (!resetn) begin
-	    ft_clkcnt_r <= 0;
-	    ft_clken    <= 0;
-	    end
-	  else begin
-	    ft_clken    <= (ft_clkcnt_r == ft_clkdiv);
-	    ft_clkcnt_r <= (ft_clkcnt_r == ft_clkdiv) ? 0 : (ft_clkcnt_r +1);
-	    end
-	 end
-
-	//----------------------------------------------
-	//-- Internal "synchronizers" (dual stage)
-	//----------------------------------------------
-	// synchronizers for channel ready flags when idle
-	// (treat these signals as synchronous during transfer sequencing)
-	reg ft_miso_i_sync;
-	reg ft_miosio_i0_sync;
-	reg ft_miso_i_sync_1;
-	reg ft_miosio_i0_sync_1;
-
-	always @(posedge clk or negedge resetn )
-	begin
-	  if (!resetn) begin
-	    ft_miso_i_sync_1   <= 1;
-	    ft_miosio_i0_sync_1 <= 1;
-	    ft_miso_i_sync     <= 1;
-	    ft_miosio_i0_sync   <= 1;
-	    end
-	  else begin
-	    ft_miso_i_sync_1   <= ft_miso_i;
-	    ft_miosio_i0_sync_1 <= ft_miosio_i[0];
-	    ft_miso_i_sync     <= ft_miso_i_sync_1;
-	    ft_miosio_i0_sync   <= ft_miosio_i0_sync_1;
-	    end
-	 end
-
-	//----------------------------------------------
-	//-- AXI Stream interface handshakes
-	//----------------------------------------------
-
-reg ft_txf;  // FTDI Transmit channel Full
-reg ft_rxe;  // FTDO Receive channel Empty
-reg ft_wcyc; // read access committed
-reg ft_nak;  // check for NAK terminate
-
-// TX stream delivers valid FT1248 read data transfer
-// 8-bit write port with extra top-bit used as valid qualifer
-reg [8:0] txdata;
-assign txd_tdata = txdata[7:0];
-assign txd_tvalid = txdata[8];
-
-// activate if RX channel data and the stream buffer is not full
-wire ft_rxreq = !ft_rxe & !txdata[8];
-
-
-// RX stream handshakes on valid FT1248 write data transfer
-reg       rxdone;
-reg       rxrdy;
-assign    rxd_tready = rxdone;
-
-// activate if TX channel not full and and the stream buffer data valid
-wire ft_txreq = !ft_txf & rxd_tvalid; // & !rxdone; // FTDI TX data ready and rxstream ready
-
-// FTDI1248 commands
-wire [3:0] wcmd = 4'b0000; // write request
-wire [3:0] rcmd = 4'b0001; // read  request
-wire [3:0] fcmd = 4'b0100; // write flush request
-//wire [3:0] rcmd = 4'b1000; // read  request BE bit-pattern
-//wire [3:0] fcmd = 4'b0010; // write flush request BE bit-pattern
-// and full FT1248 command bit patterns (using top-bits for shift sequencing)
-wire [8:0] wcmdpatt = {2'b11, wcmd[0], wcmd[1], 1'b0, wcmd[2], 1'b0, 1'b0, wcmd[3]};
-wire [8:0] rcmdpatt = {2'b11, rcmd[0], rcmd[1], 1'b0, rcmd[2], 1'b0, 1'b0, rcmd[3]};
-
-reg ssn_del;
-always @(posedge clk or negedge resetn)
-  if (!resetn)
-    ssn_del  <= 1'b1;
-  else if (ft_clken)
-      ssn_del  <= ft_ssn_o;
-wire ssn_start = ft_ssn_o & ssn_del;
-
-// FTDI1248 state machine
-
-always @(posedge clk or negedge resetn)
-  if (!resetn) begin
-    ft_state <= FT_0_IDLE;
-    ft_reg   <= 0;
-    txdata   <= 0;
-    rxdone   <= 0;
-    ft_wcyc  <= 0;
-    ft_txf   <= 1; // ftdi channel  TXE# ('1' full)
-    ft_rxe   <= 1; // ftdi channel  RXF# ('1' empty)
-    ft_nak   <= 0;
-    end
-  else begin
-    ft_txf <= (ft_state==FT_0_IDLE) ? (ft_miosio_i[0] | ft_miosio_i0_sync) : 1'b1; //ft_txf & !( ft_wcyc &(ft_state==FT_ZBT_CLKHI) & ft_miso_i);
-    ft_rxe <= (ft_state==FT_0_IDLE) ? (ft_miso_i | ft_miso_i_sync)  : 1'b1; //ft_rxe & !(!ft_wcyc & (ft_state==FT_ZBT_CLKHI) & ft_miso_i);
-    txdata[8] <= txdata[8] & !txd_tready; // tx_valid handshake
-    rxdone   <= (ft_clken & (ft_state==FT_ZWD_CLKLO) & !ft_nak) | (rxdone & !rxd_tvalid); // hold until acknowledged
-    if (ft_clken)
-      case (ft_state)
-      FT_0_IDLE: begin // RX req priority
-        if (ssn_start & ft_rxreq) begin ft_reg <= rcmdpatt; ft_state <= FT_ZCMD_CLKLO; end
-        else if (ssn_start & ft_txreq) begin ft_reg <= wcmdpatt; ft_state <= FT_ZCMD_CLKLO; ft_wcyc <= 1; end
-        else ft_state <= (!ft_txf | !ft_rxe | (FT1248_CLKON!=0)) ? FT_1_IDLE : FT_0_IDLE;
-        end
-      FT_1_IDLE:
-        ft_state <= FT_0_IDLE;
-      FT_ZCMD_CLKLO:
-        ft_state <= FT_CMD_CLKHI;
-      FT_CMD_CLKHI:
-        ft_state <= FT_CMD_CLKLO;
-      FT_CMD_CLKLO: // 2, 4 or 7 shifts
-        if      (bwid8) begin ft_reg <= FT_ZBT_CLKHI; end 
-        else if (bwid4) begin ft_reg <= {4'b0000,ft_reg[8:4]}; ft_state <= (|ft_reg[8:5]) ? FT_CMD_CLKHI : FT_ZBT_CLKHI; end 
-        else if (bwid2) begin ft_reg <= {  2'b00,ft_reg[8:2]}; ft_state <= (|ft_reg[8:3]) ? FT_CMD_CLKHI : FT_ZBT_CLKHI; end 
-        else            begin ft_reg <= {   1'b0,ft_reg[8:1]}; ft_state <= (|ft_reg[8:3]) ? FT_CMD_CLKHI : FT_ZBT_CLKHI; end 
-      FT_ZBT_CLKHI:
-        ft_state <= FT_ZBT_CLKLO;
-      FT_ZBT_CLKLO:
-        if    (ft_wcyc) begin ft_reg <= {1'b1,rxd_tdata}; ft_state <= FT_WD_CLKHI; end
-        else            begin ft_reg <=  9'b011111111;    ft_state <= FT_RD_CLKHI; end
-      FT_WD_CLKHI:
-        if (ft_miso_i & ft_reg[8]) begin ft_nak <= 1'b1; ft_state <= FT_ZWD_CLKLO; end // NAK terminate on first cycle
-        else if (bwid8) ft_state <=  (ft_reg[8])   ? FT_WD_CLKLO : FT_ZWD_CLKLO; // special case repeat on write data
-        else if (bwid4) ft_state <= (|ft_reg[8:5]) ? FT_WD_CLKLO : FT_ZWD_CLKLO; 
-        else if (bwid2) ft_state <= (|ft_reg[8:3]) ? FT_WD_CLKLO : FT_ZWD_CLKLO; 
-        else            ft_state <= (|ft_reg[8:2]) ? FT_WD_CLKLO : FT_ZWD_CLKLO; 
-      FT_WD_CLKLO:
-        if      (bwid8) begin ft_reg <= {   1'b0,ft_reg[7:0]}; ft_state <= FT_WD_CLKHI; end // clear top flag
-        else if (bwid4) begin ft_reg <= {4'b0000,ft_reg[8:4]}; ft_state <= FT_WD_CLKHI; end // shift 4 bits right
-        else if (bwid2) begin ft_reg <= {  2'b00,ft_reg[8:2]}; ft_state <= FT_WD_CLKHI; end // shift 2 bits right
-        else            begin ft_reg <= {   1'b0,ft_reg[8:1]}; ft_state <= FT_WD_CLKHI; end // shift 1 bit right
-      FT_ZWD_CLKLO:
-        if (ft_nak) begin ft_nak<= 1'b0; ft_state <= FT_0_IDLE;  ft_wcyc <= 1'b0; end // terminate without TX handshake
-        else begin ft_state <= FT_0_IDLE;  ft_wcyc <= 1'b0; end
-      FT_RD_CLKHI: // capture iodata pins end of CLKHI phase
-        if (ft_miso_i & (&ft_reg[7:0])) begin ft_nak <= 1'b1; ft_state <= FT_RD_CLKLO; end // NAK terminate on first cycle
-        else if (bwid8) begin ft_reg <= (ft_reg[0]) ? {ft_rdmasked[7:0],1'b1} : {ft_reg[8:1],1'b0}; ft_state <= FT_RD_CLKLO; end // 8-bit read twice
-        else if (bwid4) begin ft_reg <= {ft_rdmasked[3:0],ft_reg[8:4]}; ft_state <= FT_RD_CLKLO; end 
-        else if (bwid2) begin ft_reg <= {ft_rdmasked[1:0],ft_reg[8:2]}; ft_state <= FT_RD_CLKLO; end 
-        else            begin ft_reg <= {ft_rdmasked[  0],ft_reg[8:1]}; ft_state <= FT_RD_CLKLO; end 
-      FT_RD_CLKLO:
-        if (ft_nak) begin ft_nak<= 1'b0; ft_state <= FT_0_IDLE; txdata <= 9'b0; end // terminate without TX handshake
-        else if (ft_reg[0]) begin ft_state <= FT_RD_CLKHI; ft_reg[0] <= !(bwid8); end // loop until all 8 bits shifted in (or 8-bit read repeated)
-        else begin ft_state <= FT_0_IDLE; txdata <= {1'b1,ft_reg[8:1]}; end
-      default:
-        ft_state <= FT_0_IDLE;
-      endcase
-    end
-	
-	// User logic ends
-
-endmodule
diff --git a/system/test_io/verilog/nanosoc_ft1248x1_adpio.v b/system/test_io/verilog/nanosoc_ft1248x1_adpio.v
deleted file mode 100644
index 766afa1a5eb3c024a8739625711fd9300455444f..0000000000000000000000000000000000000000
--- a/system/test_io/verilog/nanosoc_ft1248x1_adpio.v
+++ /dev/null
@@ -1,157 +0,0 @@
-//-----------------------------------------------------------------------------
-// NanoSoC FT1248 ADP UART file logging
-// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license.
-//
-// Contributors
-//
-// David Flynn (d.w.flynn@soton.ac.uk)
-//
-// Copyright � 2022, SoC Labs (www.soclabs.org)
-//-----------------------------------------------------------------------------
-
-//-----------------------------------------------------------------------------
-// Abstract : FT1248 1-bit data off-chip interface (emulate FT232H device)
-// and allows cmsdk_uart_capture testbench models to log ADP ip, op streams
-//-----------------------------------------------------------------------------
-
-
-module nanosoc_ft1248x1_adpio
-  #(parameter ADPFILENAME = "adp.cmd",
-    parameter VERBOSE = 0)
-  (
-  input  wire  ft_clk_i,         // SCLK
-  input  wire  ft_ssn_i,         // SS_N
-  output wire  ft_miso_o,        // MISO
-  inout  wire  ft_miosio_io,     // MIOSIO tristate output when enabled
-
-  output wire       FTDI_CLK2UART_o, // Clock (baud rate)
-  output wire       FTDI_OP2UART_o, // Received data to UART capture
-  output wire       FTDI_IP2UART_o  // Transmitted data to UART capture
-  );
-
-
- //----------------------------------------------
- //-- File I/O
- //----------------------------------------------
-
-
-   integer        fdcmd;       // channel descriptor for cmd file input
-   integer        ch;
-`define EOF -1
-
-   reg       ft_rxreq;
-   wire      ft_rxack;
-   reg [7:0] ft_adpbyte;
-   
-   initial
-     begin
-       ft_rxreq <= 0;
-       $timeformat(-9, 0, " ns", 14);
-       fdcmd= $fopen(ADPFILENAME,"r");
-       if (fdcmd == 0)
-          $write("** FT1248x1 : no command file **\n");
-       else begin
-         ch =  $fgetc(fdcmd);
-         while (ch != `EOF) begin
-           ft_adpbyte <= (ch & 8'hff);
-           ft_rxreq <= 1'b1;
-           while (ft_ssn_i == 1'b0)
-             @(posedge ft_ssn_i);
-           @(posedge ft_rxack);
-           ft_rxreq <=0;
-           @(negedge ft_rxack);
-           ch =  $fgetc(fdcmd);
-         end
-       end
-       $fclose(fdcmd);
-       ft_rxreq <= 0;
-     end
-     
-
-//----------------------------------------------
-//-- State Machine
-//----------------------------------------------
-
-wire ft_miosio_i;
-wire ft_miosio_o;
-wire ft_miosio_z;
-
-// tri-state pad control for MIOSIO
-assign ft_miosio_io = (ft_miosio_z) ? 1'bz : ft_miosio_o;
-// add notinal delay on inout to ensure last "half-bit" on FT1248TXD is sampled before tri-stated
-assign #1 ft_miosio_i  = ft_miosio_io;
-
-reg [4:0] ft_state; // 17-state for bit-serial
-wire [5:0] ft_nextstate = ft_state + 5'b00001;
-
-always @(posedge ft_clk_i or posedge ft_ssn_i)
-  if (ft_ssn_i)
-    ft_state <= 5'b11111;
-  else // loop if multi-data
-//    ft_state <= (ft_state == 5'b01111) ? 5'b01000 : ft_nextstate;
-    ft_state <= ft_nextstate;
-
-// 16: bus turnaround (or bit[5])
-// 0 for CMD3
-// 3 for CMD2
-// 5 for CMD1
-// 6 for CMD0
-// 7 for cmd turnaround
-// 8 for data bit0
-// 9 for data bit1
-// 10 for data bit2
-// 11 for data bit3
-// 12 for data bit4
-// 13 for data bit5
-// 14 for data bit6
-// 15 for data bit7
-
-// ft_miso_o reflects RXE when deselected
-assign ft_miso_o = (ft_ssn_i) ? !ft_rxreq : (ft_state == 5'b00111);
-
-// capture CMD on falling edge of clock (mid-data)
-// - valid sample ready after 7th edge (ready RX or TX data phase functionality)
-reg [7:0] ft_cmd;
-always @(negedge ft_clk_i or posedge ft_ssn_i)
-  if (ft_ssn_i)
-    ft_cmd <= 8'b00000001;
-  else // shift in data
-    ft_cmd <= (!ft_state[3] & !ft_nextstate[3]) ? {ft_cmd[6:0],ft_miosio_i} : ft_cmd;
-
-wire ft_cmd_valid = ft_cmd[7];
-wire ft_cmd_rxd =  ft_cmd[7] & !ft_cmd[6] & !ft_cmd[3] & !ft_cmd[1] &  ft_cmd[0];
-wire ft_cmd_txd =  ft_cmd[7] & !ft_cmd[6] & !ft_cmd[3] & !ft_cmd[1] & !ft_cmd[0];
-
-// tristate enable for miosio (deselected status or serialized data for read command)
-wire ft_miosio_e = ft_ssn_i | (ft_cmd_rxd & !ft_state[4] & ft_state[3]);
-assign ft_miosio_z = !ft_miosio_e;
-
-// serial data formatted with start bit for UART capture (on rising uart-clock)
-assign   FTDI_CLK2UART_o = !ft_clk_i;
-// suitable for CMSDK UART capture IO
-// inject a start bit low else mark high
-assign FTDI_OP2UART_o = (ft_cmd_txd & (ft_state[4:3]) == 2'b01) ? ft_miosio_i : !(ft_cmd_txd & (ft_state == 5'b00111)); 
-assign FTDI_IP2UART_o = (ft_cmd_rxd & (ft_state[4:3]) == 2'b01) ? ft_miosio_io : !(ft_cmd_rxd & (ft_state == 5'b00111));
-
-// capture RXD on falling edge of clock
-reg [8:0] ft_rxd;
-always @(negedge ft_clk_i or posedge ft_ssn_i)
-  if (ft_ssn_i)
-    ft_rxd <= 9'b111111111;
-  else if (ft_cmd_txd & !(ft_miosio_i & (&ft_rxd[8:0])))  //only on valid start-bit
-    ft_rxd <= {ft_miosio_i, ft_rxd[8:1]};
-
-// shift TXD on rising edge of clock
-reg [8:0] ft_txd;
-always @(posedge ft_clk_i or posedge ft_ssn_i)
-  if (ft_ssn_i)
-    ft_txd <= {1'b1,ft_adpbyte};
-  else if (ft_rxreq & ft_cmd_rxd & (ft_state[4:3] == 2'b01))  //valid TX shift
-    ft_txd <= {1'b0,ft_txd[8:1]};
-
-assign ft_rxack = (ft_cmd_rxd & (ft_state==5'b01111));
-  
-// ft_miso_o reflects TXF when deselected (never full for simulation output)
-assign ft_miosio_o =  (ft_ssn_i) ? 1'b0 : ft_txd[0];
-
-endmodule