diff --git a/system/src/nanosoc_ahb_busmatrix/bin/BuildBusMatrix.pl b/system/src/nanosoc_ahb_busmatrix/bin/BuildBusMatrix.pl
deleted file mode 100755
index 73aa34ef8177a83f40949159df991f6f5ed51fe6..0000000000000000000000000000000000000000
--- a/system/src/nanosoc_ahb_busmatrix/bin/BuildBusMatrix.pl
+++ /dev/null
@@ -1,2975 +0,0 @@
-eval "exec perl -w -S $0 $@" # -*- Perl -*-
-  if ($running_under_some_sh);
-  undef ($running_under_some_sh);
-
-################################################################################
-# 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.
-#
-################################################################################
-# Version and Release Control Information:
-#
-#      File Name           : $RCSfile: BuildBusMatrix.pl,v $
-#
-#      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             : Builds particular configurations of the AHB BusMatrix
-#
-################################################################################
-# Usage:
-#    Builds an AHB Bus Matrix component with a given number of input ports,
-#    a given number of output ports, a particular arbitration scheme and ARM
-#    processor interface.
-#
-# Notes: This version of the script uses an interface information hash with
-#         the following structure:
-#
-#         my %InterfaceInfo = (
-#                               SLAVES  => {
-#                                 SI<n> => {
-#                                   NAME => '@name',
-#                                   CONNECTIONS => [ @MI<n> ... ],
-#                                   ADDRESS_MAP => {
-#                                     NORMAL => [ <address_info> ... ],
-#                                     REMAP => [ <remap_info> ... ]
-#                                   }
-#                                 }
-#                               },
-#
-#                               MASTERS => {
-#                                 MI<n> => {
-#                                   NAME        => '@name',
-#                                   CONNECTIONS => [ @SI<n> ... ]
-#                                 }
-#                               }
-#                             );
-#
-# Options: See the ShowHelp() function.
-#
-################################################################################
-
-# ------------------------------------------------------------------------------
-#   Load PERL libraries
-# ------------------------------------------------------------------------------
-
-use strict;
-use warnings;
-use Getopt::Long;
-
-use lib 'bin/lib';                     # Collapse namespace 'lib::'
-use xmlparser;                         # Load the XML parser module
-
-use Data::Dumper;
-use Storable 'dclone';
-use File::Spec;
-
-# ------------------------------------------------------------------------------
-#   Declare global variables
-# ------------------------------------------------------------------------------
-
-# General script variables
-my $Debug         = 0;
-my $RenderDebug   = 0;
-my $Errors        = 0;
-my $HdlType       = 'verilog';
-my $HdlExt        = '.v';
-my $Connections   = '';
-my $Sparse        = 0;
-my $DefaultSlave  = 'cmsdk_ahb_bm_default_slave';
-
-# Parameter legal ranges
-my $MinSlaveIF    = 1;
-my $MaxSlaveIF    = 16;
-my $MinMasterIF   = 1;
-my $MaxMasterIF   = 16;
-my $DataWidths    = '32|64';
-my $MinNameLength = 1;
-my $MaxNameLength = 128;
-my $MinUserWidth  = 0;
-my $MaxUserWidth  = 32;
-my $MinAddrWidth  = 32;
-my $MaxAddrWidth  = 64;
-
-# Interface ID tags (updated later)
-my $IdWidthMI = 4;
-my $IdWidthSI = 4;
-
-# Interface information hash
-my %InterfaceInfo = ();
-
-# A processed version needed for the differences in IPXact
-my %InterfaceInfoIPXact = ();
-
-# Remap state information hash
-my %RemapStates = ();
-
-# Address space information hash
-my %AddressSpace = ();
-
-# Get the run date and correct offset
-my ( $Sec, $Min, $Hour, $Mday, $Mon, $Year ) = localtime(time); $Year+=1900; $Mon++;
-
-# Filename variables
-my %FileList = ();
-my ($Scriptname) = $0 =~ /([\w\.]+)$/;
-
-# Hash for search and replacement of macros
-my %Macro = ();
-
-# Hash for processing text sections
-my %Section = ();
-
-# Arrays of instance names
-my @MatrixDecodeNames = ();
-my @OutputArbNames    = ();
-my @OutputStageNames  = ();
-
-# Hash for remapping information
-my %RemapInfo = ();
-
-# Hash array of name aliases
-my %NameAliases = ();
-
-# IP-XACT component name - default value is set later
-my $ComponentName = '';
-
-
-# ------------------------------------------------------------------------------
-#   Check for pre-requisites
-# ------------------------------------------------------------------------------
-
-# Check for the supported OS platform(s)
-unless ( $^O =~ /(solaris|linux)\b/ ) {
-  die "Error: This script does not support the '$^0' OS!\n\n";
-}
-
-# Check for the required version of PERL
-unless ( $] >= 5.005 ) {
-  die "Error: This script requires PERL version >= 5.005!\n\n";
-}
-
-# Check system clock for inappropriate roll-back - the date is used
-#  in the copyright field of file headers
-unless ( $Year >= 2013 ) {
-  warn "Warning: The system clock is incorrectly set to '$Year'!\n";
-  $Year = 2013;
-}
-
-
-# ------------------------------------------------------------------------------
-#   Parse the command line
-# ------------------------------------------------------------------------------
-
-# Default values for command-line options
-my $SlaveInterfaces      = 1;
-my $MasterInterfaces     = 1;
-my $Connectivity         = 'full';
-my $ArbiterType          = 'fixed';
-my $ArchitectureType     = 'ahb2';
-my $XmlConfigFile        = '';
-my $RoutingDataWidth     = 32;
-my $RoutingAddressWidth  = 32;
-my $UserSignalWidth      = 0;
-my $OutputArbName        = 'cmsdk_ahb_bm_output_arb';
-my $OutputStageName      = 'cmsdk_ahb_bm_output_stage';
-my $MatrixDecodeName     = 'cmsdk_ahb_bm_decode';
-my $InputStageName       = 'cmsdk_ahb_bm_input_stage';
-my $BusMatrixName        = '';                  # Default value is set later
-my $Help                 = 0;
-my $Verbose              = 0;
-my $SourceDir            = "./$HdlType/src";
-my $TargetDir            = "./$HdlType/built";
-my $IPXactSourceDir      = "./ipxact/src";
-my $IPXactTargetDir      = "./ipxact/built";
-my $XmlDir               = './xml';
-my $Overwrite            = 0;
-my $Timescales           = 0;
-my $NoTimescales         = 0;
-my $XmlTimescales        = 0;
-my $CheckMode            = 0;
-my $IPXact               = 0;
-
-
-# Display usage message if requested
-if ( grep(/^-?-help$/, @ARGV) ) { ShowHelp(); }
-
-# Get command line arguments
-GetOptions( 'inports=i'      => \$SlaveInterfaces,
-            'outports=i'     => \$MasterInterfaces,
-            'connectivity=s' => \$Connectivity,
-            'arb=s'          => \$ArbiterType,
-            'arch=s'         => \$ArchitectureType,
-            'cfg=s'          => \$XmlConfigFile,
-            'datawidth=i'    => \$RoutingDataWidth,
-            'addrwidth=i'    => \$RoutingAddressWidth,
-            'userwidth=i'    => \$UserSignalWidth,
-            'outputarb=s'    => \$OutputArbName,
-            'outputstage=s'  => \$OutputStageName,
-            'matrixdecode=s' => \$MatrixDecodeName,
-            'inputstage=s'   => \$InputStageName,
-            'busmatrix=s'    => \$BusMatrixName,
-            'verbose'        => \$Verbose,
-            'srcdir=s'       => \$SourceDir,
-            'tgtdir=s'       => \$TargetDir,
-            'ipxactsrcdir=s' => \$IPXactSourceDir,
-            'ipxacttgtdir=s' => \$IPXactTargetDir,
-            'xmldir=s'       => \$XmlDir,
-            'overwrite'      => \$Overwrite,
-            'timescales'     => \$Timescales, 'notimescales'   => \$NoTimescales,
-            'check'          => \$CheckMode,
-            'ipxact'         => \$IPXact,
-            'debug'          => \$Debug,
-            'renderdebug'    => \$RenderDebug,
-          );
-
-if ( $Timescales and $NoTimescales ) {
-  die "Error: Can't use --timescales and --notimescales at the same time\n";
-}
-
-# Display script header when in verbose mode
-if ( $Verbose ) {
-  printf "\n==============================================================\n" .
-         "=  The confidential and proprietary information contained in this file may\n" .
-         "=  only be used by a person authorised under and to the extent permitted\n" .
-         "=  by a subsisting licensing agreement from Arm Limited or its affiliates.\n" .
-         "= \n" .
-         "=    (C) COPYRIGHT 2001-2013,2017 Arm Limited or its affiliates.\n" .
-         "=        ALL RIGHTS RESERVED\n" .
-         "= \n" .
-         "=  This entire notice must be reproduced on all copies of this file\n" .
-         "=  and copies of this file may only be made by a person if such person is\n" .
-         "=  permitted to do so under the terms of a subsisting license agreement\n" .
-         "=  from Arm Limited or its affiliates.\n" .
-         "=\n" .
-         "= $Scriptname\n" .
-         "=\n" .
-         "= Run Date : %02d/%02d/%04d %02d:%02d:%02d" .
-         "\n==============================================================\n\n",
-         $Mday, $Mon, $Year, $Hour, $Min, $Sec;
-}
-
-
-# ------------------------------------------------------------------------------
-#   Parse the configuration file if specified, or initialise by elaborating
-#    the '-connectivity' command-line argument and calculating an address map
-# ------------------------------------------------------------------------------
-
-if ( $XmlConfigFile ne '' ) {
-  # Conditionally prepend the XML directory path to the filename
-  if ( $XmlConfigFile !~ /^$XmlDir/ ) { $XmlConfigFile = "$XmlDir/$XmlConfigFile"; }
-  $XmlConfigFile = TidyPath($XmlConfigFile);
-
-  # Configure and run the XML parser
-  ProcessXmlConfigFile();
-} else {
-  # Translate into internal form, the design specified on the command line
-  InitialiseInterfaceInfo();
-}
-
-  # Do some preprocessing for IPXact generation
-  if ($IPXact) {
-     ProcessDataForIPXact();
-  }
-
-# Set the default top-level name if required
-if ( $BusMatrixName eq '' ) {
-  $BusMatrixName = sprintf( "cmsdk_ahb_busmatrix%dx%d%s%dd%da%du", $SlaveInterfaces,
-                     $MasterInterfaces, substr($ArbiterType, 0, 1),
-                     $RoutingDataWidth, $RoutingAddressWidth, $UserSignalWidth );
-}
-
-# Set the default IP-XACT component name if required
-if ( $ComponentName eq '' ) { $ComponentName = $BusMatrixName . "_lite"; }
-
-
-# ------------------------------------------------------------------------------
-#   Validate the parameters and abort if necessary
-# ------------------------------------------------------------------------------
-
-ValidateParameters();
-if ( $Errors ) { die "\nBuild not started because of parameter errors!\n\n"; }
-
-
-# ------------------------------------------------------------------------------
-#   Determine calculated parameters
-# ------------------------------------------------------------------------------
-
-SelectParameters();
-
-
-# ------------------------------------------------------------------------------
-#   Display settings when in verbose mode
-# ------------------------------------------------------------------------------
-
-my $XmlTimescales_interpreted = ($XmlTimescales eq 'yes' || $XmlTimescales eq 'no') ? $XmlTimescales
-                                                                                   : "no ($XmlTimescales)";
-
-if ( $Verbose ) {
-  printf "Script accepted the following parameters:\n\n" .
-         "%s - Top-level name          : '$BusMatrixName'\n" .
-         " - Slave interfaces        : $SlaveInterfaces\n" .
-         " - Master interfaces       : $MasterInterfaces\n" .
-         " - Architecture type       : '$ArchitectureType'\n" .
-         " - Arbitration scheme      : '$ArbiterType'\n" .
-         " - Address map             : %s\n" .
-         " - Connectivity mapping    : %s\n" .
-         " - Connectivity type       : %s\n" .
-         " - Routing data width      : $RoutingDataWidth\n" .
-         " - Routing address width   : $RoutingAddressWidth\n" .
-         " - User signal width       : $UserSignalWidth\n" .
-         " - Timescales              : ". ($Timescales ? "yes" :
-                                                         $NoTimescales ? "no" :
-                                                                         '') .
-                                       ( $XmlTimescales ? $Timescales || $NoTimescales ? " - overriding $XmlTimescales_interpreted setting from XML"
-                                                                                       : "$XmlTimescales_interpreted (from XML)"
-                                                         : '' ) .
-                                       ( ! ($XmlTimescales || $Timescales || $NoTimescales) ? 'yes (default)' : '') . "\n" .
-         " - Configuration directory : '$TargetDir'\n" .
-         " - Source directory        : '$SourceDir'\n" .
-         ($IPXact ?
-         " - IPXact target directory : '$IPXactTargetDir'\n" .
-         " - IPXact source directory : '$IPXactSourceDir'\n" : "") .
-         " - Overwrite mode          : %s\n\n",
-         ( $XmlConfigFile ne '' ) ? " - Configuration file      : '$XmlConfigFile'\n" : '',
-         ( $XmlConfigFile ne '' ) ? 'user defined' : 'calculated',
-         ( $Connectivity ne 'full' ) ? $Connections : 'automatic',
-         ( $Sparse ) ? 'sparse' : 'full',
-         ( $Overwrite ) ? 'enabled' : 'disabled';
-}
-
-
-# ------------------------------------------------------------------------------
-#   Expand template macros if not in check mode
-# ------------------------------------------------------------------------------
-
-unless ( $CheckMode ) { CreateBusMatrix(); }
-
-
-################################################################################
-### Subroutines and Functions ##################################################
-################################################################################
-
-# ------------------------------------------------------------------------------
-#   SelectParameters - Selects the corresponding parameter set according to
-#                       the fundamental specification
-# ------------------------------------------------------------------------------
-sub SelectParameters {
-
-  # Local variable(s)
-  my $Instance     = '';
-  my $Index        = 0;
-  my $Interface    = '';
-  my %Arbiter      = ( fixed => 'cmsdk_ahb_bm_fixed_arb', round => 'cmsdk_ahb_bm_round_arb', burst => 'cmsdk_ahb_bm_burst_arb' );
-  my $ArbType      = '';
-  my $OutType      = '';
-  my $BstrbWidth   = $RoutingDataWidth / 8;
-  my $MakefileName = 'makefile';
-  my $MkfileName   = 'cmsdk_ahb_busmatrix.mk';
-  my $IPXactFile_AHB2      = 'cmsdk_ahb_busmatrix_ipxact.xml';
-  my $IPXactFile_AHBLite   = 'cmsdk_ahb_busmatrix_lite_ipxact.xml';
-  my $Mappings     = $Connections;
-  my $Packing      = ' ' x 14;
-  my $Unmapping    = '';
-  my $RemapBit     = 0;
-  my $OpenBr       = '';
-  my $CloseBr      = '';
-  my @RemapBits    = ();
-
-  # Determine the connectivity type
-  $Sparse = IsSparse();
-
-  # Determine the slave interface ID width
-  $IdWidthSI = NumberOfDigits($SlaveInterfaces - 1, 2);
-
-  # Determine the master interface ID width, including an MSbit for
-  #  selecting the default slave
-  $IdWidthMI = NumberOfDigits($MasterInterfaces - 1, 2) + 1;
-
-  # Format the mappings
-  $Mappings =~ s/\n/\n\/\//g;
-
-  # Determine single entity filenames
-  #$FileList{$MkfileName} = $MkfileName;     # Note:Generation of ADK makefile is not required in BP210
-  #$FileList{$MakefileName} = $MakefileName; # Note:Generation of ADK makefile is not required in BP210
-  if ( $IPXact ) { $FileList{$ComponentName . '.xml'}      = $IPXactFile_AHBLite;  # Component already contains the -lite suffix or other name
-                   $FileList{$BusMatrixName . '.xml'}      = $IPXactFile_AHB2; }
-  $DefaultSlave = $BusMatrixName . '_default_slave';
-  $FileList{$BusMatrixName . $HdlExt} = 'cmsdk_ahb_busmatrix' . $HdlExt;
-  $FileList{$ComponentName . $HdlExt} = 'cmsdk_ahb_busmatrix_lite' . $HdlExt;
-  $FileList{$InputStageName . $HdlExt} = 'cmsdk_ahb_bm_input_stage' . $HdlExt;
-  $FileList{$DefaultSlave . $HdlExt} = 'cmsdk_ahb_bm_default_slave' . $HdlExt;
-
-  # Generate filenames and macro names for each instance of bm_decode
-  #  and process any REMAP declarations accordingly
-  $Section{'remap_used'} = '0';
-  $Section{'no_remap_used'} = '1';
-  for ( $Index = 0; $Index < $SlaveInterfaces; $Index++ ) {
-    $Interface = 'SI' . $Index;
-
-    $Instance = $MatrixDecodeName . $InterfaceInfo{SLAVES}{$Interface}{NAME};
-    $FileList{$Instance . $HdlExt} = 'cmsdk_ahb_bm_decode' . $HdlExt;
-    push @MatrixDecodeNames, $Instance;
-
-    $RemapInfo{$Interface}{REMAP_BITS} = [];
-    $RemapInfo{$Interface}{REMAP_WIDTH} = 0;
-    $RemapInfo{$Interface}{REMAP_MAPPING} = {};
-    @RemapBits = ();
-    for ( $RemapBit = 0; $RemapBit < 4; $RemapBit++ ) {
-      if ( ( grep /:remap$RemapBit:/,
-             @{ $InterfaceInfo{SLAVES}{$Interface}{ADDRESS_MAP}{REMAP} } ) ||
-           ( grep /:.*(del|_|,|\s)$RemapBit(_|,|\s|:|$)/,
-             @{ $InterfaceInfoIPXact{SLAVES}{$Interface}{ADDRESS_MAP}{NORMAL} } ) ) {
-        push @RemapBits, "REMAP[$RemapBit]";
-        push @{ $RemapInfo{$Interface}{REMAP_BITS} }, $RemapBit;
-        $RemapInfo{$Interface}{REMAP_MAPPING}{$RemapBit} = $RemapInfo{$Interface}{REMAP_WIDTH};
-        $RemapInfo{$Interface}{REMAP_WIDTH}++;
-        $Section{'remap_used'} = '1';
-        $Section{'no_remap_used'} = '0';
-      }
-    }
-    $OpenBr = ( $RemapInfo{$Interface}{REMAP_WIDTH} > 1 ) ? '{ ' : '';
-    $CloseBr = ( $RemapInfo{$Interface}{REMAP_WIDTH} > 1 ) ? ' }' : '';
-    $RemapInfo{$Interface}{REMAP_PORT} = $OpenBr . join( ', ', reverse @RemapBits ) . $CloseBr;
-  }
-
-  print "RemapInfo:\n" if $Debug;
-  print Dumper(\%RemapInfo) if $Debug;
-
-
-  # Determine names for the output_arb and output_stage instances
-  if ( $Sparse ) {
-
-    # Generate filenames and macro names for each instance of output_stage and
-    #  output_arb modules
-    for ( $Index = 0; $Index < $MasterInterfaces; $Index++ ) {
-      $Interface = 'MI' . $Index;
-
-      # If the current output stage has only one connection, then override
-      #  the template selection for the arbiter type and output stage
-      $ArbType = $Arbiter{$ArbiterType}; $OutType = 'cmsdk_ahb_bm_output_stage';
-      unless ( @{ $InterfaceInfo{MASTERS}{$Interface}{CONNECTIONS} } > 1 ) {
-        $ArbType = 'cmsdk_ahb_bm_single_arb'; $OutType = 'cmsdk_ahb_bm_single_output_stage';
-      }
-
-      $Instance = $OutputArbName . $InterfaceInfo{MASTERS}{$Interface}{NAME};
-      $FileList{$Instance . $HdlExt} = $ArbType . $HdlExt;
-      push @OutputArbNames, $Instance;
-      $Instance = $OutputStageName . $InterfaceInfo{MASTERS}{$Interface}{NAME};
-      $FileList{$Instance . $HdlExt} = $OutType . $HdlExt;
-      push @OutputStageNames, $Instance;
-
-    }
-
-  } else {
-
-    # The same output_stage and output_arb modules are used in a fully connected
-    #  bus matrix
-    $FileList{$OutputArbName . $HdlExt} = $Arbiter{$ArbiterType} . ${HdlExt};
-    push @OutputArbNames, $OutputArbName;
-    $FileList{$OutputStageName . $HdlExt} = 'cmsdk_ahb_bm_output_stage' . ${HdlExt};
-    push @OutputStageNames, $OutputStageName;
-
-    # Initialise particular static instance names
-    $Macro{'output_arb_name'} = $OutputArbName;
-    $Macro{'output_stage_name'} = $OutputStageName;
-    $Macro{'output_stage_name_lc'} = lc($Macro{'output_stage_name'});
-
-  }
-
-  # Conditionally initialise the macro and section control hashes
-
-  # Determine architecture options
-  if ( $ArchitectureType =~ /^(v6|excl)$/ ){
-    $Section{'excl'}         = 1;
-    $Macro{'prot'}           = 5;
-    $Macro{'prot_v'}         = 6;
-    $Macro{'resp'}           = 2;
-    $Macro{'resp_v'}         = 3;
-    $Macro{'bin_resp_xfail'} = '100';
-  } else {
-    $Section{'excl'}         = 0;
-    $Macro{'prot'}           = 3;
-    $Macro{'prot_v'}         = 4;
-    $Macro{'resp'}           = 1;
-    $Macro{'resp_v'}         = 2;
-    $Macro{'bin_resp_xfail'} = 'xx';
-  }
-
-  # Determine response encoding
-  $Macro{'bin_resp_okay'}  = substr( '000', -$Macro{'resp_v'}, $Macro{'resp_v'} );
-  $Macro{'bin_resp_error'} = substr( '001', -$Macro{'resp_v'}, $Macro{'resp_v'} );
-  $Macro{'bin_resp_retry'} = substr( '010', -$Macro{'resp_v'}, $Macro{'resp_v'} );
-  $Macro{'bin_resp_split'} = substr( '011', -$Macro{'resp_v'}, $Macro{'resp_v'} );
-
-  # Determine HUNALIGN support and xUSER width
-  $Section{'unalign'} = ( $ArchitectureType =~ /^(v6|unalign)$/ ) ? 1 : 0;
-  $Section{'user'}    = ( $UserSignalWidth > 0 ) ? 1 : 0;
-
-  # Bus width fields
-  $Macro{'data'}    = $RoutingDataWidth - 1;
-  $Macro{'data_v'}  = $RoutingDataWidth;
-  $Macro{'addr'}    = $RoutingAddressWidth - 1;
-  $Macro{'addr_v'}  = $RoutingAddressWidth;
-  $Macro{'user'}    = $UserSignalWidth - 1;
-  $Macro{'user_v'}  = $UserSignalWidth;
-  $Macro{'bstrb'}   = $BstrbWidth - 1;
-  $Macro{'bstrb_v'} = $BstrbWidth;
-
-  $Macro{'address_space_range'} = $RoutingAddressWidth >= 40 ? (2**($RoutingAddressWidth-40) )."T" :
-                                  $RoutingAddressWidth >= 30 ? (2**($RoutingAddressWidth-30) )."G" :
-                                  $RoutingAddressWidth >= 20 ? (2**($RoutingAddressWidth-20) )."M" :
-                                  $RoutingAddressWidth >= 10 ? (2**($RoutingAddressWidth-10) )."K" :
-                                                                2**$RoutingAddressWidth ;    # P and E not supported by IP-XACT standard
-
-  $Macro{'verilog_to_ipxact_path'} = File::Spec->abs2rel("$TargetDir/$BusMatrixName","$IPXactTargetDir/$BusMatrixName");
-
-  # Interface ID-width fields
-  $Macro{'idw_si'}   = $IdWidthSI - 1;
-  $Macro{'idw_si_v'} = $IdWidthSI;
-  $Macro{'idw_mi'}   = $IdWidthMI - 1;
-  $Macro{'idw_mi_v'} = $IdWidthMI;
-
-  # Determine default slave selection encoding (can be up to 5 bits)
-  $Macro{'dsid_bin'} = substr('10000', 0, $IdWidthMI);
-
-  # Determine a list of sub-module names
-  $Macro{'other_module_names'} = $DefaultSlave . " \\\n$Packing" .
-                                 $InputStageName . " \\\n$Packing" .
-                                 join( " \\\n$Packing", @MatrixDecodeNames ) .
-                                 " \\\n$Packing" .
-                                 join( " \\\n$Packing", @OutputArbNames ) .
-                                 " \\\n$Packing" .
-                                 join( " \\\n$Packing", @OutputStageNames );
-
-  # Initialise the static instance names
-  $Macro{'bus_matrix_name'} = $BusMatrixName;
-  $Macro{'input_stage_name'} = $InputStageName;
-  $Macro{'output_arb_stemname'} = $OutputArbName;
-  $Macro{'output_stage_stemname'} = $OutputStageName;
-  $Macro{'matrix_decode_stemname'} = $MatrixDecodeName;
-  $Macro{'component_name'} = $ComponentName;
-
-  # Miscellaneous fields
-  $Macro{'copyright_year'} = $Year;
-  $Macro{'timescale_directive'} = ( $NoTimescales || ( ($XmlTimescales eq 'no') && !$Timescales )) ? '' : "\n`timescale 1ns/1ps\n"; # On by default on CMSDK
-  $Macro{'arbiter_type'} = $ArbiterType;
-  $Macro{'architecture_type'} = $ArchitectureType;
-  $Macro{'total_si'} = $SlaveInterfaces;
-  $Macro{'total_mi'} = $MasterInterfaces;
-  $Macro{'connectivity'} = ( $Sparse ) ? 'sparse' : 'full';
-  $Macro{'mappings'} = ( $Sparse ) ? $Mappings :
-    sprintf("S<0..%d> -> M<0..%d>", $SlaveInterfaces - 1, $MasterInterfaces - 1);
-
-}
-
-
-# ------------------------------------------------------------------------------
-#   CreateBusMatrix - Creates a version of the Bus Matrix using the currently
-#                      selected parameter set
-# ------------------------------------------------------------------------------
-sub CreateBusMatrix {
-
-  # Local variable(s)
-  my $VariantDir          = "$TargetDir/$BusMatrixName";
-  my $IPXactVariantDir    = "$IPXactTargetDir/$BusMatrixName";
-  my @ExistingFiles       = glob( "$VariantDir/*" );
-  my @NewFiles            = keys( %FileList );
-  my $File                = '';
-
-  # Determine target preparation
-  if ( -e $VariantDir ) {
-    # Delete files when in overwrite mode, otherwise display an error
-    if ( $Overwrite ) {
-      foreach $File ( @ExistingFiles ) {
-        print "Deleting the '$File' file...\n" if ( $Verbose );
-        unlink $File or die "Error: Could not delete the file!\n\n";
-      }
-      print "\n" if ( @ExistingFiles and $Verbose );
-    } else {
-      die "Error: This variant of the bus matrix already exists!\n\n";
-    }
-  } else {
-    # Create the output directory for this Bus Matrix variant
-    mkdir $VariantDir or
-     die "Error: Could not create the output directory '$VariantDir'!\n\n";
-  }
-
-  if ($IPXact) {
-    @ExistingFiles       = glob( "$IPXactVariantDir/*" );
-    # Determine ipxact target preparation
-    if ( -e $IPXactVariantDir ) {
-      # Delete files when in overwrite mode, otherwise display an error
-      if ( $Overwrite ) {
-        foreach $File ( @ExistingFiles ) {
-          print "Deleting the '$File' file...\n" if ( $Verbose );
-          unlink $File or die "Error: Could not delete the file!\n\n";
-        }
-        print "\n" if ( @ExistingFiles and $Verbose );
-      } else {
-        die "Error: IPXact directory for this variant of the bus matrix already exists!\n\n";
-      }
-    } else {
-      # Create the output directory for this Bus Matrix variant
-      mkdir $IPXactVariantDir or
-       die "Error: Could not create the output directory '$IPXactVariantDir'!\n\n";
-    }
-  }
-
-  # Process all required files
-  print "Creating the bus matrix variant...\n\n" if ( $Verbose );
-  foreach $File ( @NewFiles ) {
-    print " - Rendering '$File'\n" if ( $Verbose );
-    if ($FileList{$File} =~ /.*ipxact\.xml$/) {
-       RenderFile( "$IPXactSourceDir/$FileList{$File}", "$IPXactVariantDir/$File" );
-    } else{
-       RenderFile( "$SourceDir/$FileList{$File}", "$VariantDir/$File" );
-    }
-  }
-
-  print "\nDone!\n\n" if ( $Verbose );
-
-}
-
-
-# ------------------------------------------------------------------------------
-#   RenderFile - Processes nested sections embedded hierarchically within the
-#                 specified template file, and expands macros accordingly. The
-#                 variables '$SlaveIF' and '$MasterIF' have a reserved use
-#                 depending upon the template being rendered. The variables may
-#                 be assigned values from 'in' or 'out' sections, or assigned
-#                 to a value extracted from a port-specific target filename. In
-#                 all other cases, these variables just retain their values
-# ------------------------------------------------------------------------------
-sub RenderFile {
-
-  # Passed parameter 1 is the template filename
-  my $TemplateFile = shift;
-  # Passed parameter 2 is the rendered output filename
-  my $RenderedFile = shift;
-
-  # Local variable(s)
-  my $TextLine     = '';
-  my $Field        = '';
-  my $Type         = '';
-  my $Level        = 0;
-  my $LineNum      = 0;
-  my $StartName    = '';
-  my $EndName      = '';
-  my @Section      = ( { LINE => 0, PTR => 0, NAME => '', COPIES => 0, COUNT => 0, EN => 1 } );
-  my ($SourceFile) = $TemplateFile =~ /([\w\.]+)$/;
-  my $RefId        = 0;
-  my $Interface    = '';
-  my $SlaveIF      = '';
-  my $MasterIF     = '';
-  my @MIRegions    = ();
-  my @FoundRegions = ();
-  my $Decodings    = 0;
-  my $Region       = 0;
-  my $AddrLo       = '';
-  my $AddrHi       = '';
-  my $Remapping    = '';
-  my $Unmapping    = '';
-  my $RemapBit     = 0;
-  my $Bit          = 0;
-  my $RemapState   = 0;
-  my @ActiveRemap  = ();
-  my $GotFirst     = 0;
-  my $Arbiters     = 'cmsdk_ahb_bm_burst_arb|cmsdk_ahb_bm_fixed_arb|cmsdk_ahb_bm_round_arb|cmsdk_ahb_bm_single_arb';
-  my @PortIds      = ();
-  my $TotalIds     = 0;
-  my @IPXactFiles  = ( $ComponentName, $BusMatrixName, $DefaultSlave, $InputStageName,
-                       @MatrixDecodeNames, @OutputArbNames, @OutputStageNames );
-  my %RemapTypes   = ( none => 'Static', alias => 'Alias', move => 'Unmoved' );
-  my $Debug        = $RenderDebug;
-  my @i_remapstate = ();
-
-
-  # Open the template file for reading
-  open( IN, "<$TemplateFile")
-    or die "Cannot open input file '$TemplateFile'!\n\n";
-
-  # Open the output file for writing the rendered text
-  open( OUT, ">$RenderedFile" )
-    or die "Cannot open output file '$RenderedFile'!\n\n";
-
-  # For the bm_decode template only, initialise specific macros and variables
-  if ( $TemplateFile =~ /cmsdk_ahb_bm_decode$HdlExt$/ ) {
-
-    # Set the current instance name for search and replacement, and also extract
-    #  the slave interface number for reference use
-    if ( ($SlaveIF) = $RenderedFile =~ /$MatrixDecodeName(\w+)$HdlExt$/ ) {
-      $Macro{'matrix_decode_name'} = $MatrixDecodeName . $SlaveIF;
-      $Macro{'matrix_decode_name_lc'} = lc($Macro{'matrix_decode_name'});
-      $SlaveIF = $NameAliases{$SlaveIF} if ( $XmlConfigFile ne '' );
-    }
-
-    # Initialise macros for search and replace, then determine if the map or
-    #  remap section is to be processed
-    $Section{'remap'} = 0;
-    $Macro{'idw_remap'} = '';
-    $Macro{'idw_remap_v'} = '';
-    $Macro{'bin_remapstate'} = '';
-    $Macro{'remapping_vector'} = '';
-    $Macro{'region_type'} = '';
-    if ( $RemapInfo{$SlaveIF}{REMAP_WIDTH} > 0 ) {
-      $Section{'remap'} = 1;
-      $Macro{'idw_remap'} = $RemapInfo{$SlaveIF}{REMAP_WIDTH} - 1;
-      $Macro{'address_map'} = '';
-      $Macro{'mdelse'} = '';
-      $Macro{'mem_lo'} = '';
-      $Macro{'mem_hi'} = '';
-      $Macro{'remapping_vector'} = $RemapInfo{$SlaveIF}{REMAP_PORT};
-    }
-    $Section{'map'} = ( $Section{'remap'} ) ? 0 : 1;
-
-  }
-
-  $Macro{'remap_name'} = '';
-  $Macro{'top_remap_bit'} = '';
-  $Macro{'top_remap_bitvalue'} = '';
-
-  # For a sparse bus matrix only, and concerning the output_arb or output_stage
-  #  only, set the current instance names for search and replacement. Also
-  #  extract the master interface number for reference use
-  if ( $Sparse ) {
-    if ( $TemplateFile =~ /($Arbiters)$HdlExt$/ ) {
-      if ( ($MasterIF) = $RenderedFile =~ /$OutputArbName(\w+)$HdlExt$/ ) {
-        $Macro{'output_arb_name'} = $OutputArbName . $MasterIF;
-        $MasterIF = $NameAliases{$MasterIF} if ( $XmlConfigFile ne '' );
-      }
-    } elsif ( $TemplateFile =~ /cmsdk_ahb_bm(_single)?_output_stage$HdlExt$/ ) {
-      if ( ($MasterIF) = $RenderedFile =~ /$OutputStageName(\w+)$HdlExt$/ ) {
-        $Macro{'output_stage_name'} = $OutputStageName . $MasterIF;
-        $Macro{'output_stage_name_lc'} = lc($Macro{'output_stage_name'});
-        $MasterIF = $NameAliases{$MasterIF} if ( $XmlConfigFile ne '' );
-        $MasterIF =~ /([0-9]+)$/;
-        $Macro{'output_arb_name'} = $OutputArbNames[$1];
-      }
-    }
-  }
-
-  # Convert default slave name
-  $Macro{'default_slave_name'} = $DefaultSlave;
-
-  # Process each line of the template file
-  while ( $TextLine = <IN> ) {
-
-    # Increment the source file line number
-    $LineNum++;
-
-    # Display each line of the template when in debug mode
-    print "$LineNum:" . $TextLine if ( $Debug );
-
-    # Expand any macro found in the line
-    unless ( $TextLine !~ /<<[^<>]+>>/ ) {
-
-      # Search for all replaceable macros within the line
-      while ( ($Field, $Type) = $TextLine =~ /(<<(\w+)>>)/gc ) {
-        if ( exists $Macro{$Type} ) {
-          $TextLine =~ s/$Field/$Macro{$Type}/;
-          # Display replacement token name when in debug mode
-          print "Replaced '$Field' on line $LineNum of '$SourceFile' with '$Macro{$Type}'...\n" if ( $Debug );
-        } else {
-          warn "Warning: Unidentified field '$Field' on line $LineNum of '$SourceFile'...\n";
-        }
-      }
-
-      # Extract sections and store the current file pointer position
-      if ( ($StartName) = $TextLine =~ /<<\s+start\s+(.+)\s+>>/ ) {
-
-        # Store the information onto the section stack
-        $Section[++$Level] = {
-                               LINE   => $LineNum,
-                               PTR    => tell(IN),
-                               NAME   => $StartName,
-                               COPIES => 0,
-                               COUNT  => 0,
-                               EN     => 1
-                             };
-
-        # Display section start name when in debug mode
-        print "Found start section $Level '$StartName'\n" if ( $Debug );
-
-        # Exclude child sections if the parent section was excluded, otherwise
-        #  conditionally process specificaly named sections of the template
-        if ( $Section[$Level - 1]{EN} == 0 ) {
-
-          $Section[$Level]{EN} = 0;
-
-        } elsif ( $StartName eq 'unalign' ) {  # Optional section
-
-          $Section[$Level]{EN} = ( $Section{'unalign'} ) ? -1 : 0;
-
-        } elsif ( $StartName eq 'excl' ) {  # Optional section
-
-          $Section[$Level]{EN} = ( $Section{'excl'} ) ? -1 : 0;
-
-        } elsif ( $StartName eq 'user' ) {  # Optional section
-
-          $Section[$Level]{EN} = ( $Section{'user'} ) ? -1 : 0;
-
-        } elsif ( $StartName eq 'map' ) {  # Optional section
-
-          $Section[$Level]{EN} = ( $Section{'map'} ) ? -1 : 0;
-
-        } elsif ( $StartName eq 'remap' ) {  # Optional section
-
-          $Section[$Level]{EN} = ( $Section{'remap'} ) ? -1 : 0;
-
-        } elsif ( $StartName eq 'vendor_extension' ) {  # Optional section
-
-          # This is a dummy section to reset NoMoreIPXactInSections
-          $Section[$Level]{EN} = 0;
-
-        } elsif ( $StartName eq 'topfile' ) {
-
-            if ($TemplateFile =~ /.*lite_ipxact\.xml$/) { # Lite has the component/wrapper as top, the other has the AHB2 main top
-               $Section[$Level]{EN} = ( $Macro{'filename'} eq $ComponentName ) ? -1 : 0;
-            } else {
-               $Section[$Level]{EN} = ( $Macro{'filename'} eq $BusMatrixName ) ? -1 : 0;
-            }
-
-        } elsif ( $StartName eq 'connection' ) {  # Optional section
-
-          # Determine template specific settings
-          if ( ($TemplateFile =~ /(cmsdk_ahb_busmatrix|$Arbiters|cmsdk_ahb_bm(_single)?_output_stage)$HdlExt$/) or
-               ($TemplateFile =~ /.*ipxact\.xml$/) ){
-            $SlaveIF = 'SI' . $Macro{'in'};
-          }
-          $Interface = ( $TemplateFile =~ /($Arbiters|cmsdk_ahb_bm(_single)?_output_stage)$HdlExt$/ ) ?
-            $MasterIF : 'MI' . $Macro{'out'};
-
-          # For sparse bus matrix only, check for at least one connection
-          $Section[$Level]{EN} = ( grep /^$Interface$/,
-            @{ $InterfaceInfo{SLAVES}{$SlaveIF}{CONNECTIONS} } or !$Sparse ) ? -1 : 0;
-
-          # Indicate the first connection for the round_arb template
-          if ( $TemplateFile =~ /cmsdk_ahb_bm_round_arb$HdlExt$/ and $Section[$Level]{EN} ) {
-            $GotFirst = 1;
-          }
-
-        } elsif ( $StartName eq 'in' ) {  # Common macro
-
-          # Set the number of times this section will be repeated
-          $Section[$Level]{COPIES} = $SlaveInterfaces - 1;
-          $Section[$Level]{EN} = -1;
-
-          # Set the current slave interface number and macros
-          $Macro{'in'} = $Section[$Level]{COUNT};
-          $Interface = 'SI' . $Section[$Level]{COUNT};
-          $Macro{'si_name'} = $InterfaceInfo{SLAVES}{$Interface}{NAME};
-          $SlaveIF = $Interface;
-
-          # Determine template specific settings
-          if ( $TemplateFile =~ /($Arbiters|cmsdk_ahb_bm(_single)?_output_stage)$HdlExt$/ ) {
-            $Macro{'bin_in'} = ToBinary($Section[$Level]{COUNT}, $IdWidthSI);
-            $Macro{'rrelse'} = '';  # Used in round_arb only
-            $GotFirst = 0;
-          } elsif ( $TemplateFile =~ /cmsdk_ahb_busmatrix$HdlExt$/ ) {
-            # Determine if the remap section should be processed
-            $Section{'remap'} = 0;
-            $Macro{'remapping_vector'} = '';
-            if ( $RemapInfo{$Interface}{REMAP_WIDTH} > 0 ) {
-              $Section{'remap'} = 1;
-              $Macro{'remapping_vector'} = $RemapInfo{$Interface}{REMAP_PORT};
-            }
-            $Macro{'matrix_decode_name'} = $MatrixDecodeNames[$Section[$Level]{COUNT}];
-            $Macro{'matrix_decode_name_lc'} = lc($Macro{'matrix_decode_name'});
-          }
-
-        } elsif ( $StartName eq 'out' ) {  # Common macro
-
-          # Set the number of times this section will be repeated
-          $Section[$Level]{COPIES} = $MasterInterfaces - 1;
-          $Section[$Level]{EN} = -1;
-
-          # Set the current master interface number and macros
-          $Macro{'out'} = $Section[$Level]{COUNT};
-          $Interface = 'MI' . $Section[$Level]{COUNT};
-          $Macro{'mi_name'} = $InterfaceInfo{MASTERS}{$Interface}{NAME};
-          $Macro{'mi_name_lc'} = lc($Macro{'mi_name'});
-
-          # Determine template specific settings
-          if ( $TemplateFile =~ /cmsdk_ahb_bm_decode$HdlExt$/ ) {
-            $Macro{'bin_out'} = ToBinary($Section[$Level]{COUNT}, $IdWidthMI - 1);
-          } elsif ( $TemplateFile =~ /cmsdk_ahb_busmatrix$HdlExt$/ and $Sparse ) {
-            $Macro{'output_stage_name'} = $OutputStageNames[$Section[$Level]{COUNT}];
-            $Macro{'output_stage_name_lc'} = lc($Macro{'output_stage_name'});
-          }
-
-        } elsif ( $StartName eq 'rrin' ) {  # Used in round_arb and output_stage
-
-          # Determine the port ID enumeration and the total number
-          if ( $Sparse ) {
-            @PortIds = @{ $InterfaceInfo{MASTERS}{$MasterIF}{CONNECTIONS} };
-            @PortIds = grep s/^SI//, @PortIds; # Remove all 'SI' prefixes
-          } else {
-            @PortIds = ( 0..$SlaveInterfaces-1 );
-          }
-          $TotalIds = scalar @PortIds;
-
-          # Set the number of times this section will be repeated, and determine
-          #  the slave interface ID macros for the round_arb template
-          $Section[$Level]{COPIES} = $TotalIds - 1;
-          $Section[$Level]{EN} = -1;
-          $Macro{'rrin'} = $PortIds[$Section[$Level]{COUNT}];
-          $Macro{'bin_rrin'} = ToBinary($PortIds[$Section[$Level]{COUNT}], $IdWidthSI);
-
-        } elsif ( $StartName eq 'rridx' ) {  # Used in round_arb only
-
-          # Set the number of times this section will be repeated, and determine
-          #  the slave interface ID macros for the round_arb template
-          $Section[$Level]{COPIES} = $TotalIds - 2;
-          $Section[$Level]{EN} = -1;
-          $Macro{'rrelse'} = '';
-          $RefId = ($Section[$Level - 1]{COUNT} + 1) % $TotalIds;
-          $Macro{'rridx'} = $PortIds[$RefId];
-          $Macro{'bin_rridx'} = ToBinary($PortIds[$RefId], $IdWidthSI);
-
-        } elsif ( $StartName eq 'addr_map' ) {  # Used in bm_decode only
-
-          # For the current remapping state and master interface, determine which
-          #  address regions are visible
-          @MIRegions = grep /^$Interface:/,
-            @{ $InterfaceInfo{SLAVES}{$SlaveIF}{ADDRESS_MAP}{NORMAL} };
-
-          if ( $RemapState > 0 ) {  # Only when remapping is asserted non-zero
-
-            # Translate the active remapping bits into a regexp filter
-            @ActiveRemap = ();
-            for ($Bit = 0; $Bit < $RemapInfo{$SlaveIF}{REMAP_WIDTH}; $Bit++) {
-              if ( ($RemapState >> $Bit) & 0x01 ) {
-                push @ActiveRemap, @{ $RemapInfo{$SlaveIF}{REMAP_BITS} }[$Bit];
-              }
-            }
-            $RemapBit = join( '|', @ActiveRemap );
-
-            # Determine if there are activated remap regions, and if so, delete
-            #  normal but movable address map regions
-            if ( grep /^$Interface:remap($RemapBit):/,
-                   @{ $InterfaceInfo{SLAVES}{$SlaveIF}{ADDRESS_MAP}{REMAP} } ) {
-              @MIRegions = grep !/^.*:move:/,
-                @MIRegions;
-
-            }
-
-          }
-          $Region = 0;
-
-          # Initialise macros in preparation for search and replace
-          $Macro{'mdelse'} = '';
-          $Macro{'address_map'} = '';
-          $Macro{'mem_lo'} = '';
-          $Macro{'mem_hi'} = '';
-
-          # Include this section if a mapping exists
-          $Section[$Level]{EN} = ( @MIRegions > 0 ) ? -1 : 0;
-
-        } elsif ( $StartName eq 'addr_map_ipxact' ) {
-
-          # All normal (non-remap) regions
-          @MIRegions = @{ $InterfaceInfoIPXact{SLAVES}{$SlaveIF}{ADDRESS_MAP}{NORMAL} };
-
-          # Initialise macros in preparation for search and replace
-          $Macro{'address_map'} = '';
-          $Macro{'mem_lo'} = '';
-          $Macro{'mem_hi'} = '';
-
-          # Include this section if a mapping exists
-          $Section[$Level]{EN} = ( @MIRegions > 0 ) ? -1 : 0;
-
-        } elsif ( $StartName eq 'segments' ) {
-
-          $Section[$Level]{COPIES} = scalar @{$AddressSpace{$Interface}} - 1;
-          $Section[$Level]{EN} = -1;
-
-          $Macro{'segment_name'} = '0x'.$AddressSpace{$Interface}[$Section[$Level]{COUNT}][0]."_".'0x'.$AddressSpace{$Interface}[$Section[$Level]{COUNT}][1];
-          $Macro{'segment_offset'} = '0x'.$AddressSpace{$Interface}[$Section[$Level]{COUNT}][0];
-          $Macro{'segment_range'} = '0x' . HexAdd(  '0'. HexSubstract($AddressSpace{$Interface}[$Section[$Level]{COUNT}][1],
-                                                                      $AddressSpace{$Interface}[$Section[$Level]{COUNT}][0]) , 1 );
-
-        } elsif ( $StartName eq 'addr_remap_and_normal_all_this_remap' ) {
-
-          @MIRegions = ();
-
-          # All remap regions
-          my @allRegions = @{ $InterfaceInfoIPXact{SLAVES}{$SlaveIF}{ADDRESS_MAP}{REMAP} };
-          push (@allRegions, @{ $InterfaceInfoIPXact{SLAVES}{$SlaveIF}{ADDRESS_MAP}{NORMAL} });
-          foreach my $address_region ( @allRegions ) {
-
-            ($MasterIF, $Remapping, $AddrLo, $AddrHi, $Unmapping) = split(/:/,$address_region);
-
-            # get canonical name for remap state
-            my @bits = GetRemapBits ($Remapping, $Unmapping);
-            my $i_remap_name = join( '_' , @bits );
-            # Change ! to n
-            $i_remap_name =~ s/!/n/g ;
-
-            if ($Macro{'remap_name'} eq "remap_".$i_remap_name) {
-               push (@MIRegions,$address_region);
-            }
-          }
-
-          # Initialise macros in preparation for search and replace
-          $Macro{'address_map'} = '';
-          $Macro{'mem_lo'} = '';
-          $Macro{'mem_hi'} = '';
-
-          # Include this section if a mapping exists
-          $Section[$Level]{EN} = ( @MIRegions > 0 ) ? -1 : 0;
-
-        } elsif ( $StartName =~ /^(addr|remap)_region$/ ) {  # Used bm_decode and Spirit file only
-          #  Do not add an else if it is the first address/remap region
-          $Macro{'mdelse'} = ( $Decodings > 0 ) ? 'else ' : '';
-
-          # Conditionally reference the first address/remap region and extract its info
-          if ( @MIRegions > 0 ) {
-            # Set the number of copies
-            $Section[$Level]{COPIES} = scalar @MIRegions - 1;
-
-            ($MasterIF, $Remapping, $AddrLo, $AddrHi) = split(/:/, $MIRegions[$Region]);
-            $Macro{'address_block_name'} = 'Default';
-            $Macro{'address_block_remap'} = ($Remapping eq "move") ? 'TRUE' : 'FALSE';
-            $Macro{'base_address'} = "0x$AddrLo";
-            $Macro{'address_range'} = '0x' . HexSubstract($AddrHi, $AddrLo);
-            $Macro{'address_map'} = "0x$AddrLo-0x$AddrHi";
-            $Macro{'mem_lo'} = ToDecodeAddr($AddrLo);
-            $Macro{'mem_hi'} = ToDecodeAddr($AddrHi);
-
-            # Determine template specific settings
-            if ( $TemplateFile =~ /cmsdk_ahb_bm_decode$HdlExt$/ ) {
-              $Macro{'remapping_bit'} = '';
-              if ( $StartName eq 'remap_region' ) {
-                $Macro{'remapping_bit'} = substr($Remapping, 5, 1);
-                $Macro{'out'} = substr($MasterIF, 2);
-                $Macro{'bin_out'} = ToBinary( substr($MasterIF, 2), $IdWidthMI - 1);
-              } else {
-                $Macro{'region_type'} = $RemapTypes{$Remapping};
-              }
-            }
-            $Decodings++;
-          }
-          $Section[$Level]{EN} = -1;
-
-        } elsif ( $StartName =~ /^(addr|remap)_region_ipxact$/ ) {  # Used bm_decode and IPXACT file only
-
-          # Conditionally reference the first address/remap region and extract its info
-          if ( @MIRegions > 0 ) {
-
-            # Set the number of copies
-            $Section[$Level]{COPIES} = scalar @MIRegions - 1;
-            $Section[$Level]{EN} = -1;
-
-
-            ($MasterIF, $Remapping, $AddrLo, $AddrHi, $Unmapping) = split(/:/, $MIRegions[$Section[$Level]{COUNT}]);
-            $Macro{'address_block_name'} = 'Default';
-            $Macro{'address_block_remap'} = ($Remapping eq "move") ? 'TRUE' : 'FALSE';
-            $Macro{'base_address'} = "0x$AddrLo";
-            $Macro{'end_address'} = "0x$AddrHi";
-            $Macro{'address_range'} = '0x' . HexSubstract($AddrHi, HexSubstract($AddrLo,1));
-            $Macro{'address_map'} = "0x$AddrLo-0x$AddrHi";
-            $Macro{'mem_lo'} = ToDecodeAddr($AddrLo);
-            $Macro{'mem_hi'} = ToDecodeAddr($AddrHi);
-            $Macro{'out'} = substr($MasterIF, 2);
-            $Macro{'bin_out'} = ToBinary( substr($MasterIF, 2), $IdWidthMI - 1);
-            $Macro{'mi_name'} = $InterfaceInfo{MASTERS}{$MasterIF}{NAME};
-            $Macro{'mi_name_lc'} = lc($Macro{'mi_name'});
-
-            my @bits = GetRemapBits ($Remapping, $Unmapping);
-
-            my $remap_name = join( '_' , @bits );
-            # Change ! to n
-            $remap_name =~ s/!/n/g ;
-            $Macro{'remap_name'} = "remap_".$remap_name;
-
-            my $bit;
-            $Macro{'active_cond'} = '';
-
-            foreach $bit (@bits) {
-              if (substr($bit,0,1) eq '!') {
-                $Macro{'active_cond'} .= "\n" . ' 'x25 . ' & !remapping_dec['.$RemapInfo{$SlaveIF}{REMAP_MAPPING}{substr($bit,1)} .']';
-              } else {
-                $Macro{'active_cond'} .= "\n" . ' 'x25 . ' &  remapping_dec['.$RemapInfo{$SlaveIF}{REMAP_MAPPING}{$bit} .']';
-              }
-            }
-            $Macro{'remapping_bit'} = $remap_name;
-
-            $Section{'remap_static'} = @bits ? 0 : 1;
-            $Section{'remap_conditional'} = @bits ? 1 : 0;
-
-            if (@bits) {
-              if ( substr($Remapping,0,5) eq 'remap' ) {
-                $Macro{'region_type'} = "Remapped region, active when REMAP bitcombination is " . $remap_name;
-                $Macro{'region_type_sanitized'} = "Remapped_" . $remap_name;
-              } else {
-                $Macro{'region_type'} = "Removable region, active only when REMAP bitcombination is " . $remap_name;
-                $Macro{'region_type_sanitized'} = "Removable_" . $remap_name;
-              }
-            } else {
-              $Macro{'region_type'} = "Static";
-              $Macro{'region_type_sanitized'} = $Macro{'region_type'};
-            }
-
-          }
-
-        } elsif ( $StartName eq 'ipxact_remap_region' ) {  # Used in IPXact file only
-
-          # Get the remap regions for the current master interface
-          @MIRegions = grep /^$MasterIF:/,
-            @{ $InterfaceInfo{SLAVES}{$SlaveIF}{ADDRESS_MAP}{REMAP} };
-
-          if ( @MIRegions > 0 ) {
-            $Section[$Level]{COPIES} = scalar @MIRegions - 1;
-            ($MasterIF, $Remapping, $AddrLo, $AddrHi) = split(/:/, $MIRegions[$Region]);
-            $Remapping =~ /([0-9])$/; $Remapping = $1;
-            $Macro{'address_block_name'} = 'Remap-Pin' . $Remapping;
-            $Macro{'base_address'} = "0x$AddrLo";
-            $Macro{'address_range'} = '0x' . HexSubstract($AddrHi, $AddrLo);
-            $Macro{'mem_lo'} = ToDecodeAddr($AddrLo);
-            $Macro{'mem_hi'} = ToDecodeAddr($AddrHi);
-          }
-          $Section[$Level]{EN} = ( $Macro{'base_address'} eq '' ) ? 0 : -1;
-
-        } elsif ( $StartName eq 'remap_state' ) {  # Used in bm_decode only
-
-          # Initialise macros in preparation for search and replace
-          $Macro{'address_map'} = '';
-          $Macro{'mem_lo'} = '';
-          $Macro{'mem_hi'} = '';
-          $Macro{'remapping_bit'} = '';
-          $Macro{'idw_remap_v'} = $RemapInfo{$SlaveIF}{REMAP_WIDTH};
-          $Macro{'bin_remapstate'} = ToBinary(0, $RemapInfo{$SlaveIF}{REMAP_WIDTH});
-
-          # Initialise variables used in remap processing and calculate the required
-          #  number of section copies
-          $RemapState = 0;
-          $Decodings = 0;
-          $Section[$Level]{COPIES} = (2 ** $RemapInfo{$SlaveIF}{REMAP_WIDTH}) - 1;
-          $Section[$Level]{EN} = -1;
-
-        } elsif ( $StartName eq 'remap_state_ipxact' ) {  # Used in ipxact only
-
-          @i_remapstate = keys( %RemapStates );
-          #$Macro{'remapping_bit'} = '';
-          #$Macro{'idw_remap_v'} = $RemapInfo{$SlaveIF}{REMAP_WIDTH};
-
-          # Initialise variables used in remap processing and calculate the required
-          #  number of section copies
-
-          $Section[$Level]{COPIES} = scalar @i_remapstate -1;
-          $Section[$Level]{EN} = ($Section{'remap_used'} > 0) ? -1 : 0;
-
-          $RemapState = $Section[$Level]{COUNT};
-
-          $Macro{'remap_name'} = $i_remapstate[$RemapState];
-          print "Processing remap state: $Macro{'remap_name'}\n" if ( $Debug );
-
-        } elsif ( $StartName eq 'remap_bit' ) {  # Used in bm_decode only
-
-          # Set the number of copies
-          $Section[$Level]{COPIES} = $RemapInfo{$SlaveIF}{REMAP_WIDTH} - 1;
-          $Section[$Level]{EN} = -1;
-          $Bit = 0;
-
-        } elsif ( $StartName eq 'remap_bit_ipxact' ) {  # Used in bm_decode only
-
-          # Set the number of copies
-          $Section[$Level]{COPIES} = scalar @{$RemapStates{$i_remapstate[$RemapState]}} -1;
-          $Section[$Level]{EN} = -1;
-          $Bit = 0;
-
-          my $r_bit = @{$RemapStates{$i_remapstate[$RemapState]}}[$Section[$Level]{COUNT}];
-
-          if (substr($r_bit,0,1) eq '!') {
-            $Macro{'top_remap_bit'} = substr($r_bit,1);
-            $Macro{'top_remap_bitvalue'} = 0;
-          } else {
-            $Macro{'top_remap_bit'} = $r_bit;
-            $Macro{'top_remap_bitvalue'} = 1;
-          }
-
-        } elsif ( $StartName eq 'addr_remap' ) {  # Used in bm_decode only
-
-          # For the current remapping state, determine which remap regions are
-          #  active per master interface
-          @MIRegions = ();
-          $Region = 0;
-          if ( ($RemapState >> $Bit) & 0x01 ) {
-            $RemapBit = @{ $RemapInfo{$SlaveIF}{REMAP_BITS} }[$Bit];
-            @MIRegions = grep /:remap$RemapBit:/,
-              @{ $InterfaceInfo{SLAVES}{$SlaveIF}{ADDRESS_MAP}{REMAP} };
-          }
-
-          # Initialise macros in preparation for search and replace
-          $Macro{'mdelse'} = '';
-          $Macro{'address_map'} = '';
-          $Macro{'mem_lo'} = '';
-          $Macro{'mem_hi'} = '';
-
-          # Include this section if a mapping exists
-          $Section[$Level]{EN} = ( @MIRegions > 0 ) ? -1 : 0;
-
-        } elsif ( $StartName eq 'file' ) {  # Used in ipxact file only
-
-          $Macro{'filename'} = $IPXactFiles[0];
-          $Section[$Level]{COPIES} = scalar @IPXactFiles - 1;
-          $Section[$Level]{EN} = -1;
-
-          if ($TemplateFile =~ /.*lite_ipxact\.xml$/) {# Remove the wrapper from non-lite
-             #
-          } else {
-             # Don't include the lite wrapper in the AHB2 ipxact
-             if ( $Macro{'filename'} eq $ComponentName ) {
-                $Macro{'filename'} = $IPXactFiles[1];
-                ++$Section[$Level]{COUNT};
-             }
-          }
-
-        } elsif ( exists $Section{$StartName} ) {  # Optional section
-
-           $Section[$Level]{EN} = ( $Section{$StartName} ) ? -1 : 0;
-
-
-        }
-
-        # Display the number of section copies when in debug mode
-        print "Section copies: $Section[$Level]{COPIES}\n" if ( $Debug );
-
-      } elsif ( ($EndName) = $TextLine =~ /<<\s+end\s+(.+)\s+>>/ ) {
-
-        # Display section end name when in debug mode
-        print "Found end section $Level '$EndName'\n" if ( $Debug );
-
-        # Check for matching section markers
-        unless ( $EndName eq $Section[$Level]{NAME} ) {
-          die "Error: Unexpected section end on line $LineNum of '$SourceFile'...\n\n";
-        }
-
-        # Determine if the section is to be repeated
-        if ( $Section[$Level]{COUNT} < $Section[$Level]{COPIES} ) {
-
-          # Adjust input file pointer and line number
-          seek( IN, $Section[$Level]{PTR}, 0 );
-          $LineNum = $Section[$Level]{LINE};
-
-          # Update macro settings as necessary
-          if ( $EndName eq 'in' ) {
-
-            $Macro{'in'} = ++$Section[$Level]{COUNT};
-            $Interface = 'SI' . $Section[$Level]{COUNT};
-            $Macro{'si_name'} = $InterfaceInfo{SLAVES}{$Interface}{NAME};
-            $SlaveIF = $Interface;
-
-            # Determine template specific settings
-            if ( $TemplateFile =~ /($Arbiters|cmsdk_ahb_bm(_single)?_output_stage)$HdlExt$/ ) {
-              $Macro{'bin_in'} = ToBinary($Section[$Level]{COUNT}, $IdWidthSI);
-              if ( $GotFirst ) { $Macro{'rrelse'} = 'else '; }
-            } elsif ( $TemplateFile =~ /cmsdk_ahb_busmatrix$HdlExt$/ ) {
-              # Determine if the remap section should be processed
-              $Section{'remap'} = 0;
-              $Macro{'remapping_vector'} = '';
-              if ( $RemapInfo{$Interface}{REMAP_WIDTH} > 0 ) {
-                $Section{'remap'} = 1;
-                $Macro{'remapping_vector'} = $RemapInfo{$Interface}{REMAP_PORT};
-              }
-              $Macro{'matrix_decode_name'} = $MatrixDecodeNames[$Section[$Level]{COUNT}];
-              $Macro{'matrix_decode_name_lc'} = lc($Macro{'matrix_decode_name'});
-            }
-
-          } elsif ( $EndName eq 'out' ) {
-
-            $Macro{'out'} = ++$Section[$Level]{COUNT};
-            $Interface = 'MI' . $Section[$Level]{COUNT};
-            $Macro{'mi_name'} = $InterfaceInfo{MASTERS}{$Interface}{NAME};
-            $Macro{'mi_name_lc'} = lc($Macro{'mi_name'});
-
-            # Determine template specific settings
-            if ( $TemplateFile =~ /cmsdk_ahb_bm_decode$HdlExt$/ ) {
-              $Macro{'bin_out'} = ToBinary($Section[$Level]{COUNT}, $IdWidthMI - 1);
-            } elsif ( $TemplateFile =~ /cmsdk_ahb_busmatrix$HdlExt$/ and $Sparse ) {
-              $Macro{'output_stage_name'} = $OutputStageNames[$Section[$Level]{COUNT}];
-              $Macro{'output_stage_name_lc'} = lc($Macro{'output_stage_name'});
-            }
-
-          } elsif ( $EndName eq 'rrin' ) {
-
-            $Macro{'rrin'} = $PortIds[ ++$Section[$Level]{COUNT} ];
-            $Macro{'bin_rrin'} = ToBinary($PortIds[$Section[$Level]{COUNT}], $IdWidthSI);
-
-          } elsif ( $EndName eq 'rridx' ) {
-
-            $Section[$Level]{COUNT}++;
-            $Macro{'rrelse'} = 'else ';
-
-            # Determine next round robin port
-            $RefId = ++$RefId % $TotalIds;
-            $Macro{'rridx'} = $PortIds[$RefId];
-            $Macro{'bin_rridx'} = ToBinary($PortIds[$RefId], $IdWidthSI);
-
-          } elsif ( $EndName eq 'remap_state' ) {
-
-            $Macro{'bin_remapstate'} = ToBinary(++$Section[$Level]{COUNT},
-                                                 $RemapInfo{$SlaveIF}{REMAP_WIDTH});
-            $Decodings = 0;
-            $RemapState++;
-
-          } elsif ( $EndName eq 'remap_state_ipxact' ) {
-
-            $Section[$Level]{COUNT}++;
-
-            $RemapState = $Section[$Level]{COUNT};
-
-            $Macro{'remap_name'} = $i_remapstate[$RemapState];
-            print "Processing remap state: $Macro{'remap_name'}\n" if ( $Debug );
-
-          } elsif ( $EndName eq 'remap_bit' ) {
-
-            $Section[$Level]{COUNT}++;
-            $Bit++;
-
-          } elsif ( $EndName eq 'remap_bit_ipxact' ) {
-
-            $Bit++;
-
-            $Section[$Level]{COUNT}++;
-
-            my $r_bit = @{$RemapStates{$i_remapstate[$RemapState]}}[$Section[$Level]{COUNT}];
-
-            if (substr($r_bit,0,1) eq '!') {
-              $Macro{'top_remap_bit'} = substr($r_bit,1);
-              $Macro{'top_remap_bitvalue'} = 0;
-            } else {
-              $Macro{'top_remap_bit'} = $r_bit;
-              $Macro{'top_remap_bitvalue'} = 1;
-            }
-
-          } elsif ( $EndName eq 'segments' ) {
-
-            $Section[$Level]{COUNT}++;
-
-            $Macro{'segment_name'} = '0x'.$AddressSpace{$Interface}[$Section[$Level]{COUNT}][0]."_".'0x'.$AddressSpace{$Interface}[$Section[$Level]{COUNT}][1];
-            $Macro{'segment_offset'} = '0x'.$AddressSpace{$Interface}[$Section[$Level]{COUNT}][0];
-            $Macro{'segment_range'} = '0x' . HexAdd(  '0'. HexSubstract($AddressSpace{$Interface}[$Section[$Level]{COUNT}][1],
-                                                                        $AddressSpace{$Interface}[$Section[$Level]{COUNT}][0]) , 1 );
-
-          } elsif ( $EndName eq 'addr_remap_and_normal_all_this_remap' ) {
-
-            # Empty
-
-          } elsif ( $EndName =~ /^(addr|remap)_region$/ ) {
-
-            $Section[$Level]{COUNT}++;
-
-            # Conditionally reference the subsequent address/remap region
-            if ( @MIRegions > 0 ) {
-              $Macro{'mdelse'} = ( $Decodings > 0 ) ? 'else ' : '';
-
-              ($MasterIF, $Remapping, $AddrLo, $AddrHi) = split(/:/, $MIRegions[++$Region]);
-              $Macro{'address_block_name'} = 'Default';
-              $Macro{'address_block_remap'} = ($Remapping eq "move") ? 'TRUE' : 'FALSE';
-              $Macro{'base_address'} = "0x$AddrLo";
-              $Macro{'address_range'} = '0x' . HexSubstract($AddrHi, $AddrLo);
-              $Macro{'address_map'} = "0x$AddrLo-0x$AddrHi";
-              $Macro{'mem_lo'} = ToDecodeAddr($AddrLo);
-              $Macro{'mem_hi'} = ToDecodeAddr($AddrHi);
-
-              # Determine template specific settings
-              if ( $TemplateFile =~ /cmsdk_ahb_bm_decode$HdlExt$/ ) {
-                $Macro{'remapping_bit'} = '';
-                if ( $EndName eq 'remap_region' ) {
-                  $Macro{'remapping_bit'} = substr($Remapping, 5, 1);
-                  $Macro{'out'} = substr($MasterIF, 2);
-                  $Macro{'bin_out'} = ToBinary( substr($MasterIF, 2), $IdWidthMI - 1);
-                } else {
-                  $Macro{'region_type'} = $RemapTypes{$Remapping};
-                }
-              }
-              $Decodings++;
-            }
-
-        } elsif ( $EndName =~ /^(addr|remap)_region_ipxact$/ ) {  # Used bm_decode and IPXACT file only
-
-          $Section[$Level]{COUNT}++;
-
-          # Conditionally reference the first address/remap region and extract its info
-          if ( @MIRegions > 0 ) {
-
-            ($MasterIF, $Remapping, $AddrLo, $AddrHi, $Unmapping) = split(/:/, $MIRegions[$Section[$Level]{COUNT}]);
-            $Macro{'address_block_name'} = 'Default';
-            $Macro{'address_block_remap'} = ($Remapping eq "move") ? 'TRUE' : 'FALSE';
-            $Macro{'base_address'} = "0x$AddrLo";
-            $Macro{'end_address'} = "0x$AddrHi";
-            $Macro{'address_range'} = '0x' . HexSubstract($AddrHi, HexSubstract($AddrLo,1));
-            $Macro{'address_map'} = "0x$AddrLo-0x$AddrHi";
-            $Macro{'mem_lo'} = ToDecodeAddr($AddrLo);
-            $Macro{'mem_hi'} = ToDecodeAddr($AddrHi);
-            $Macro{'out'} = substr($MasterIF, 2);
-            $Macro{'bin_out'} = ToBinary( substr($MasterIF, 2), $IdWidthMI - 1);
-            $Macro{'mi_name'} = $InterfaceInfo{MASTERS}{$MasterIF}{NAME};
-            $Macro{'mi_name_lc'} = lc($Macro{'mi_name'});
-
-            $Section{'remapped'} = ($Remapping =~ /^(move|remap).*/) ? 1 : 0;
-            $Section{'not_remapped'} = !$Section{'remapped'};
-
-            my @bits = GetRemapBits ($Remapping, $Unmapping);
-
-            my $remap_name = join( '_' , @bits );
-            # Change ! to n
-            $remap_name =~ s/!/n/g ;
-            $Macro{'remap_name'} = "remap_".$remap_name;
-
-            my $bit;
-            $Macro{'active_cond'} = '';
-
-            foreach $bit (@bits) {
-              if (substr($bit,0,1) eq '!') {
-                $Macro{'active_cond'} .= "\n" . ' 'x25 . ' & !remapping_dec['.$RemapInfo{$SlaveIF}{REMAP_MAPPING}{substr($bit,1)} .']';
-              } else {
-                $Macro{'active_cond'} .= "\n" . ' 'x25 . ' &  remapping_dec['.$RemapInfo{$SlaveIF}{REMAP_MAPPING}{$bit} .']';
-              }
-            }
-            $Macro{'remapping_bit'} = $remap_name;
-
-            $Section{'remap_static'} = @bits ? 0 : 1;
-            $Section{'remap_conditional'} = @bits ? 1 : 0;
-
-            if (@bits) {
-              if ( substr($Remapping,0,5) eq 'remap' ) {
-                $Macro{'region_type'} = "Remapped region, active when REMAP bitcombination is " . $remap_name;
-                $Macro{'region_type_sanitized'} = "Remapped_" . $remap_name;
-              } else {
-                $Macro{'region_type'} = "Removable region, active only when REMAP bitcombination is " . $remap_name;
-                $Macro{'region_type_sanitized'} = "Removable_" . $remap_name;
-              }
-            } else {
-              $Macro{'region_type'} = "Static";
-              $Macro{'region_type_sanitized'} = $Macro{'region_type'};
-            }
-
-          }
-
-          } elsif ( $EndName eq 'ipxact_remap_region' ) {
-
-             $Section[$Level]{COUNT}++;
-
-             if ( @MIRegions > 0 ) {
-               ($MasterIF, $Remapping, $AddrLo, $AddrHi) = split(/:/, $MIRegions[++$Region]);
-               $Remapping =~ /([0-9])$/; $Remapping = $1;
-               $Macro{'address_block_name'} = 'Remap-Pin' . $Remapping;
-               $Macro{'base_address'} = "0x$AddrLo";
-               $Macro{'address_range'} = '0x' . HexSubstract($AddrHi, $AddrLo);
-               $Macro{'mem_lo'} = ToDecodeAddr($AddrLo);
-               $Macro{'mem_hi'} = ToDecodeAddr($AddrHi);
-             }
-
-          } elsif ( $EndName eq 'file' ) {  # Used in ipxact file only
-
-
-            if ($TemplateFile =~ /.*lite_ipxact\.xml$/) { # Remove the wrapper from non-lite
-               #
-            } else {
-               if ( $Macro{'filename'} eq $ComponentName ) {
-                  ++$Section[$Level]{COUNT};
-               }
-            }
-
-            $Macro{'filename'} = $IPXactFiles[++$Section[$Level]{COUNT}];
-
-          }
-
-          # Display pointer adjustment when in debug mode
-          printf ("Reversing back to line %d...\n", $LineNum + 1) if ( $Debug );
-
-        } elsif ( $Level > 0 )  {
-          $Level--;
-        }
-
-        # Do not include this line in the output
-        unless ($Section[$Level]{EN} == 0) { $Section[$Level]{EN} = -1; }
-
-      }
-
-    }
-
-    # Write the line(s) to the rendered output file when (delay) enabled
-    if ( $Section[$Level]{EN} ) {
-      print OUT $TextLine if ( $Section[$Level]{EN} > 0 );
-      $Section[$Level]{EN} = 1;
-    }
-
-  }
-
-  # Close the template file and rendered output file
-  close(IN);
-  close(OUT);
-
-  # If still inside a nested section, there were too few end macros
-  unless ( $Level == 0 ) {
-    die "Error: Section '$Section[$Level]{NAME}' expected in '$SourceFile'!\n\n";
-  }
-
-}
-
-
-# ------------------------------------------------------------------------------
-#   IsSparse - Determines the connectivity completeness
-# ------------------------------------------------------------------------------
-sub IsSparse {
-
-  # Local variable(s)
-  my $SlaveIF   = '';
-  my @SlaveIFs  = keys( %{ $InterfaceInfo{SLAVES} } );
-  my @MasterIFs = keys( %{ $InterfaceInfo{MASTERS} } );
-  my $Mappings  = '';
-  my $Result    = 0;
-
-  # Check each mapping
-  foreach $SlaveIF ( @SlaveIFs ) {
-    $Mappings = join( '|', @{ $InterfaceInfo{SLAVES}{$SlaveIF}{CONNECTIONS} } );
-    if ( grep $_ !~ /^($Mappings)$/, @MasterIFs ) { $Result = 1; last; }
-  }
-
-  return ($Result);
-}
-
-
-# ------------------------------------------------------------------------------
-#   HexSubstract - Does argument1 - argument2 substraction in hex.
-#                  Assumes argument1 >= argument2
-# ------------------------------------------------------------------------------
-sub HexSubstract {
-
-  # Passed parameter 1 is the LHS hexadecimal operand value
-  my $Value1 = shift;
-  # Passed parameter 2 is the RHS hexadecimal operand value
-  my $Value2 = shift;
-
-  # Local variable(s)
-  my $Len1   = length($Value1);
-  my $Len2   = length($Value2);
-  my $Index  = 0;
-  my $Char1  = '';
-  my $Char2  = '';
-  my $Borrow = 0;
-  my $Result = '';
-
-  # Append zeros to the 2nd operand
-  if ( $Len1 > $Len2 ) { $Value2 = '0' x ($Len1 - $Len2) . $Value2; }
-
-   # Substract using strings instead of conversion to decimal to support 64 bit numbers
-   for ( $Index = 1; $Index <= $Len1; $Index++ ) {
-     $Char1 = hex substr($Value1, $Len1 - $Index, 1);
-     $Char2 = hex substr($Value2, $Len1 - $Index, 1);
-     if ( $Char1 < ($Char2 + $Borrow) ) {
-       $Char1 = $Char1 + 16;
-       $Result = sprintf("%1x", $Char1 - $Char2 - $Borrow) . $Result;
-       $Borrow = 1;
-     } else {
-       $Result = sprintf("%1x", $Char1 - $Char2 - $Borrow) . $Result;
-       $Borrow = 0;
-     }
-   }
-
-   return ($Result);
-}
-
-
-# ------------------------------------------------------------------------------
-#   HexAdd - Does argument1 + argument2 substraction in hex.
-# ------------------------------------------------------------------------------
-sub HexAdd {
-
-  # Passed parameter 1 is the LHS hexadecimal operand value
-  my $Value1 = shift;
-  # Passed parameter 2 is the RHS hexadecimal operand value
-  my $Value2 = shift;
-
-  # Local variable(s)
-  my $Len1   = length($Value1);
-  my $Len2   = length($Value2);
-  my $Index  = 0;
-  my $Char1  = '';
-  my $Char2  = '';
-  my $Carry  = 0;
-  my $Result = '';
-
-  # Append zeros to the 2nd operand
-  if ( $Len1 > $Len2 ) { $Value2 = '0' x ($Len1 - $Len2) . $Value2; }
-
-   # Substract using strings instead of conversion to decimal to support 64 bit numbers
-   for ( $Index = 1; $Index <= $Len1; $Index++ ) {
-     $Char1 = hex substr($Value1, $Len1 - $Index, 1);
-     $Char2 = hex substr($Value2, $Len1 - $Index, 1);
-     if ( $Char1 +$Char2 + $Carry > 15) {
-       $Result = sprintf("%1x", $Char1 + $Char2 + $Carry - 16) . $Result;
-       $Carry = 1;
-     } else {
-       $Result = sprintf("%1x", $Char1 + $Char2 + $Carry) . $Result;
-       $Carry = 0;
-     }
-   }
-
-   return ($Result);
-}
-
-
-# ------------------------------------------------------------------------------
-#   RoundPowerOfTwo - Finds the minimum binary quantum for the specified
-#                      integer value
-# ------------------------------------------------------------------------------
-sub RoundPowerOfTwo {
-
-  # Passed parameter 1 is the integer value
-  my $Value = shift;
-
-  # Local variable(s)
-  my $Result     = 0;
-  my $ShiftCount = 0;
-
-  # Determine the number of available regions
-  while ( $Value > $Result ) { $Result = 1 << $ShiftCount++; }
-
-  return ($Result);
-}
-
-
-# ------------------------------------------------------------------------------
-#   NumberOfDigits - Calculates the number of digits required to describe
-#                     the specified integer value in the specified base
-# ------------------------------------------------------------------------------
-sub NumberOfDigits {
-
-  # Passed parameter 1 is the integer value
-  my $Value = shift;
-  # Passed parameter 2 is the base
-  my $Base = shift;
-
-  # Local variable(s)
-  my $Result  = 1;
-  my $XToTheY = 0;
-
-  # Determine the number of digits for values greater than the radix
-  unless ( $Base < 2 or $Value < $Base ) {
-    while ( $Value > $XToTheY ) { $XToTheY = $Base ** $Result++; }
-    if ( $Value != $XToTheY ) { $Result--; }
-  }
-
-  return ( $Result );
-}
-
-
-# ------------------------------------------------------------------------------
-#   NumberOfHexChars - Calculates the number of hexadecimal characters
-#                       required to describe the specified number of bits
-# ------------------------------------------------------------------------------
-sub NumberOfHexChars {
-
-  # Passed parameter 1 is the integer value
-  my $Value = shift;
-
-  # Local variable(s)
-  my $Result   = $Value / 4.0;
-  my $Integer  = int($Result);
-  my $Fraction = $Result - $Integer;
-
-  # Determine the number of digits
-  $Result = ($Fraction > 0) ? $Integer + 1 : $Integer;
-
-  return ( $Result );
-}
-
-
-# ------------------------------------------------------------------------------
-#   ToBinary - Converts the specified integer into an n-bit binary string
-# ------------------------------------------------------------------------------
-sub ToBinary {
-
-  # Passed parameter 1 is the integer value
-  my $Value = shift;
-  # Passed parameter 2 is the binary string length
-  my $Length = shift;
-
-  # Local variable(s)
-  my $Format = "%0${Length}b";
-  my $Result = ( $Value =~ /^\d+$/ ) ? sprintf($Format, $Value) : '';
-
-  return ( substr($Result, -$Length, $Length) );
-}
-
-
-# ------------------------------------------------------------------------------
-#   ToDecodeAddr - Shifts the specified n-bit address to the correct alignment
-#                   for the Matrix Decoder because HADDR[9:0] is not decoded
-# ------------------------------------------------------------------------------
-sub ToDecodeAddr {
-
-  # Passed parameter 1 is the address value
-  my $FullAddr = shift;
-
-  # Local variable(s)
-  my $AddrBits = $RoutingAddressWidth - 10;
-  my $HexChars = NumberOfHexChars($AddrBits);
-  my $Length   = length($FullAddr);
-  my $BinAddr  = sprintf( "%032b%032b", hex substr($FullAddr, 0, $Length - 8),
-                                        hex substr($FullAddr, $Length - 8) );
-  my $Result    = '';
-
-  # Right-shift the binary string to remove the non-decoded bits, and repack
-  #  it into 32-bit chunks for reformatting into a hexadecimal representation
-  $BinAddr = '0' x 10 . substr($BinAddr, 0, -10);
-  $Result  = sprintf( "%08lx%08lx",
-               unpack( 'N', pack('B32', substr($BinAddr, 0, 32)) ),
-               unpack( 'N', pack('B32', substr($BinAddr, 32)) ) );
-
-  return ( sprintf("%d'h%s", $AddrBits, substr($Result, 16 - $HexChars)) );
-}
-
-
-# ------------------------------------------------------------------------------
-#   UnsignedFloatToHex - Converts the specified float value into a hex string
-# ------------------------------------------------------------------------------
-sub UnsignedFloatToHex {
-
-  # Passed parameter 1 is the float value
-  my $Value = shift;
-
-  # Local variable(s)
-  my $HexDigits = NumberOfDigits($Value, 16);
-  my $Divisor   = 16 ** ($HexDigits - 1);
-  my $Dividend  = 0;
-  my $Result    = '';
-
-  # Determine number sequence
-  while ( length($Result) < $HexDigits ) {
-    $Dividend = int( $Value / $Divisor );
-    if ( $Dividend > 0 ) {
-      $Result = $Result . substr('0123456789abcdef', $Dividend, 1);
-      $Value -= ($Divisor * $Dividend);
-    } else {
-      $Result = $Result . '0';
-    }
-    $Divisor /= 16;
-  }
-
-  return ($Result);
-}
-
-
-# ------------------------------------------------------------------------------
-#   IsGtOrEq - Operator '>=' test for up to 64-bit hexadecimal numbers
-# ------------------------------------------------------------------------------
-sub IsGtOrEq {
-
-  # Passed parameter 1 is the LHS value
-  my $OperandLHS = shift;
-  # Passed parameter 2 is the RHS value
-  my $OperandRHS = shift;
-
-  # Local variable(s)
-  my $LengthLHS = length($OperandLHS);
-  my @LHS       = ( hex substr($OperandLHS, 0, $LengthLHS - 8),
-                    hex substr($OperandLHS, $LengthLHS - 8) );
-  my $LengthRHS = length($OperandRHS);
-  my @RHS       = ( hex substr($OperandRHS, 0, $LengthRHS - 8),
-                    hex substr($OperandRHS, $LengthRHS - 8) );
-  my $Result = ( $LHS[0] > $RHS[0] or
-                 ($LHS[0] == $RHS[0] and $LHS[1] >= $RHS[1]) ) ? 1 : 0;
-
-  return ($Result);
-}
-
-
-# ------------------------------------------------------------------------------
-#   IsLtOrEq - Operator '<=' test for up to 64-bit hexadecimal numbers
-# ------------------------------------------------------------------------------
-sub IsLtOrEq {
-
-  # Passed parameter 1 is the LHS value
-  my $OperandLHS = shift;
-  # Passed parameter 2 is the RHS value
-  my $OperandRHS = shift;
-
-  # Local variable(s)
-  my $LengthLHS = length($OperandLHS);
-  my @LHS       = ( hex substr($OperandLHS, 0, $LengthLHS - 8),
-                    hex substr($OperandLHS, $LengthLHS - 8) );
-  my $LengthRHS = length($OperandRHS);
-  my @RHS       = ( hex substr($OperandRHS, 0, $LengthRHS - 8),
-                    hex substr($OperandRHS, $LengthRHS - 8) );
-  my $Result = ( $LHS[0] < $RHS[0] or
-                 ($LHS[0] == $RHS[0] and $LHS[1] <= $RHS[1]) ) ? 1 : 0;
-
-  return ($Result);
-}
-
-
-# ------------------------------------------------------------------------------
-#   IsGt - Operator '>' test for up to 64-bit hexadecimal numbers
-# ------------------------------------------------------------------------------
-sub IsGt {
-
-  # Passed parameter 1 is the LHS value
-  my $OperandLHS = shift;
-  # Passed parameter 2 is the RHS value
-  my $OperandRHS = shift;
-
-  # Local variable(s)
-  my $LengthLHS = length($OperandLHS);
-  my @LHS       = ( hex substr($OperandLHS, 0, $LengthLHS - 8),
-                    hex substr($OperandLHS, $LengthLHS - 8) );
-  my $LengthRHS = length($OperandRHS);
-  my @RHS       = ( hex substr($OperandRHS, 0, $LengthRHS - 8),
-                    hex substr($OperandRHS, $LengthRHS - 8) );
-  my $Result = ( $LHS[0] > $RHS[0] or
-                 ($LHS[0] == $RHS[0] and $LHS[1] > $RHS[1]) ) ? 1 : 0;
-
-  return ($Result);
-}
-
-
-# ------------------------------------------------------------------------------
-#   IsLt - Operator '<' test for up to 64-bit hexadecimal numbers
-# ------------------------------------------------------------------------------
-sub IsLt {
-
-  # Passed parameter 1 is the LHS value
-  my $OperandLHS = shift;
-  # Passed parameter 2 is the RHS value
-  my $OperandRHS = shift;
-
-  # Local variable(s)
-  my $LengthLHS = length($OperandLHS);
-  my @LHS       = ( hex substr($OperandLHS, 0, $LengthLHS - 8),
-                    hex substr($OperandLHS, $LengthLHS - 8) );
-  my $LengthRHS = length($OperandRHS);
-  my @RHS       = ( hex substr($OperandRHS, 0, $LengthRHS - 8),
-                    hex substr($OperandRHS, $LengthRHS - 8) );
-  my $Result = ( $LHS[0] < $RHS[0] or
-                 ($LHS[0] == $RHS[0] and $LHS[1] < $RHS[1]) ) ? 1 : 0;
-
-  return ($Result);
-}
-
-# ------------------------------------------------------------------------------
-#   IsEq - Operator '=' test for up to 64-bit hexadecimal numbers
-# ------------------------------------------------------------------------------
-sub IsEq {
-
-  # Passed parameter 1 is the LHS value
-  my $OperandLHS = shift;
-  # Passed parameter 2 is the RHS value
-  my $OperandRHS = shift;
-
-  # Local variable(s)
-  my $LengthLHS = length($OperandLHS);
-  my @LHS       = ( hex substr($OperandLHS, 0, $LengthLHS - 8),
-                    hex substr($OperandLHS, $LengthLHS - 8) );
-  my $LengthRHS = length($OperandRHS);
-  my @RHS       = ( hex substr($OperandRHS, 0, $LengthRHS - 8),
-                    hex substr($OperandRHS, $LengthRHS - 8) );
-  my $Result = ($LHS[0] == $RHS[0] and $LHS[1] == $RHS[1]) ? 1 : 0;
-
-  return ($Result);
-}
-
-
-# ------------------------------------------------------------------------------
-#   TidyPath - Removes double and trailing slash characters from filename paths
-# ------------------------------------------------------------------------------
-sub TidyPath {
-
-  # Passed parameter 1 is the filepath string
-  my $Filepath = shift;
-
-  $Filepath =~ s/(\/\/|\\)/\//g; $Filepath =~ s/\/$//;
-
-  return ($Filepath);
-}
-
-
-# ------------------------------------------------------------------------------
-#   GetRemapBits - Takes the Remapping and Unmapping (if exists) of an
-#     address_region or remap_region and returns a sorted list of the bits
-#     when the region is enabled. Returns an empty list if the region is always
-#     enabled. Negative bits are marked with an exclamation mark
-#   example:
-#      a remap region that is activated by bit 3
-#      but is eclipsed when bit 1 is active will return:
-#     [
-#       '!1',
-#       '3'
-#     ],
-# ------------------------------------------------------------------------------
-sub GetRemapBits {
-  my $Remapping = shift;
-  my $Unmapping = shift;
-  my @bits = ();
-  my @c_bits = ();
-  my $r_bit;
-  if (substr($Remapping,0,3) eq "del") {
-     @c_bits = split ( /,| |_/,substr($Remapping,3)) ;
-     foreach $r_bit (@c_bits) {
-        if (!($r_bit eq '')) { # need to ignore leading empty characters generated by a leading separator
-          push @bits, '!'.$r_bit;
-        }
-     }
-  }
-  if (substr($Remapping,0,5) eq "remap") {
-     @c_bits = split ( /,| |_/,substr($Remapping,5)) ;
-     foreach $r_bit (@c_bits) {
-        if (!($r_bit eq '')) { # need to ignore leading empty characters generated by a leading separator
-          push @bits, $r_bit;
-        }
-     }
-  }
-  if ($Unmapping) {
-     @c_bits = split ( /,| |_/,substr($Unmapping,5)) ;
-     foreach $r_bit (@c_bits) {
-        if (!($r_bit eq '')) { # need to ignore leading empty characters generated by a leading separator
-          push @bits, '!'.$r_bit;
-        }
-     }
-  }
-
-  # Sort bits in order, so they are easier to match
-  @bits = sort {
-        my $c = $a;
-        my $d = $b;
-        if ( substr($a,0,1) eq '!') {
-          $c = substr($a,1)
-        }
-        if ( substr($b,0,1) eq '!') {
-          $d = substr($b,1)
-        }
-
-        $c <=> $d
-      } @bits;
-  return (@bits);
-}
-
-# ------------------------------------------------------------------------------
-#   ValidateParameters - Checks the value of user configurable script parameters
-# ------------------------------------------------------------------------------
-sub ValidateParameters {
-
-  # Local variable(s)
-  my %Names         = (
-                        bus_matrix_name     => \$BusMatrixName,
-                        input_stage_name    => \$InputStageName,
-                        matrix_decode_name  => \$MatrixDecodeName,
-                        output_arbiter_name => \$OutputArbName,
-                        output_stage_name   => \$OutputStageName
-                      );
-  my @NameKeys      = keys( %Names );
-  my $Name          = '';
-  my $NameLength    = 0;
-  my $ShowName      = '';
-  my @OtherNameKeys = ();
-  my $OtherName     = '';
-  my $Type          = '';
-  my @Interfaces    = ();
-  my $Interface     = '';
-
-  # Validate permitted values for the total slave interfaces
-  unless ( $SlaveInterfaces >= $MinSlaveIF and $SlaveInterfaces <= $MaxSlaveIF ) {
-    warn "Error: The number of slave ports must be in the range from $MinSlaveIF to $MaxSlaveIF \n";
-    $Errors++;
-  }
-
-  # Validate permitted values for the total master interfaces
-  unless ( $MasterInterfaces >= $MinMasterIF and $MasterInterfaces <= $MaxMasterIF ) {
-    warn "Error: The number of master ports must be in the range from $MinMasterIF to $MaxMasterIF \n";
-    $Errors++;
-  }
-
-  # Raise a warning about the '1 x n' bus matrix configuration
-  if ( $SlaveInterfaces == 1 ) {
-    warn "Warning: This configuration has one slave port and will use 'single' output\n" .
-         " and arbiter stage(s) only.\n";
-  }
-
-  # Validate permitted values of arbitration scheme
-  unless ( $ArbiterType =~ /^(fixed|round|burst)$/ ) {
-    warn "Error: Invalid type of arbitration-scheme '$ArbiterType'!\n";
-    $Errors++;
-  }
-
-  # Validate permitted values of architecture version
-  unless ( $ArchitectureType =~ /^(ahb2|v6|excl|unalign)$/ ) {
-    warn "Error: Invalid type of architecture '$ArchitectureType'!\n";
-    $Errors++;
-  }
-
-  # Validate permitted values of routing-data width
-  unless ( $RoutingDataWidth =~ /^($DataWidths)$/ ) {
-    warn "Error: Invalid routing-data width '$RoutingDataWidth'!\n";
-    $Errors++;
-  }
-
-  # Validate permitted values of user-signal width
-  if ( $RoutingAddressWidth =~ /[^0-9]/ ) {
-    warn "Error: Invalid routing-address width '$RoutingAddressWidth'!\n";
-    $Errors++;
-  } elsif ( $RoutingAddressWidth < $MinAddrWidth or $RoutingAddressWidth > $MaxAddrWidth ) {
-    warn "Error: Routing-address width must be in the range $MinAddrWidth..$MaxAddrWidth!\n";
-    $Errors++;
-  }
-
-  # Validate permitted values of user-signal width
-  if ( $UserSignalWidth =~ /[^0-9]/ ) {
-    warn "Error: Invalid user-signal width '$UserSignalWidth'!\n";
-    $Errors++;
-  } elsif ( $UserSignalWidth < $MinUserWidth or $UserSignalWidth > $MaxUserWidth ) {
-    warn "Error: User-signal width must be in the range $MinUserWidth..$MaxUserWidth!\n";
-    $Errors++;
-  }
-
-  # Validate permitted values of module names
-  foreach $Name ( @NameKeys ) {
-    $ShowName = $Name; $ShowName =~ s/_/ /g;
-    $NameLength = length( ${ $Names{$Name} } );
-
-    # Check for illegal characters and then check the string length
-    if ( ${ $Names{$Name} } =~ /[^\w]/ ) {
-      warn "Error: The $ShowName contains illegal characters!\n";
-      $Errors++;
-    } elsif ( $NameLength < $MinNameLength or $NameLength > $MaxNameLength ) {
-      warn "Error: The $ShowName is incorrect length ($MinNameLength..$MaxNameLength characters)!\n";
-      $Errors++;
-    }
-
-    # Check for unique name
-    @OtherNameKeys = grep $_ ne $Name , @NameKeys;
-    foreach $OtherName ( @OtherNameKeys ) {
-      if ( ${ $Names{$OtherName} } eq ${ $Names{$Name} } ) {
-        warn "Error: The $ShowName is not assigned a unique value!\n";
-        $Errors++;
-      }
-    }
-  }
-
-  # Check interface information
-  foreach $Type ( ('SLAVES', 'MASTERS') ) {
-
-    @Interfaces = keys( %{ $InterfaceInfo{$Type} } );
-    foreach $Interface ( @Interfaces ) {
-      # Inspect interface names
-      $Name = $InterfaceInfo{$Type}{$Interface}{NAME};
-      if ( $Name =~ /[^\w]/ ) {
-        warn "Error: Interface $Interface name '$Name' contains illegal characters!\n";
-        $Errors++;
-      }
-      if ( length($Name) > $MaxNameLength ) {
-        warn "Error: Interface $Interface name '$Name' is too long ($MaxNameLength" .
-             " characters max)!\n";
-        $Errors++;
-      }
-
-      # Inspect connectivity for isolated nodes resulting from an
-      #  incomplete sparse mapping
-      if ( @{ $InterfaceInfo{$Type}{$Interface}{CONNECTIONS} } == 0 ) {
-        warn "Error: Interface $Interface has no connectivity mapping and is isolated!\n";
-        $Errors++;
-      }
-
-      # If this is a slave, then check its address map
-      if ( $Type eq 'SLAVES' ) { CheckAddressMap($Interface); }
-    }
-
-  }
-
-}
-
-
-# ------------------------------------------------------------------------------
-#   CheckAddressMap - Checks the address map of the specified slave interface
-#                      for tags and overlapping regions
-# ------------------------------------------------------------------------------
-sub CheckAddressMap {
-
-  # Passed parameter 1 is the integer value
-  my $SlaveIF = shift;
-
-  # Local variable(s)
-  my $Class       = '';
-  my $Index       = 0;
-  my $MasterIF    = '';
-  my @MIRegions   = ();
-  my $Region      = '';
-  my $MI          = '';
-  my $Tag         = '';
-  my $RegionHi    = '';
-  my $RegionLo    = '';
-  my $RegionHiLSW = 0;
-  my $RegionLoLSW = 0;
-  my $CheckBound  = '';
-  my $OtherRegion = '';
-  my $OtherMI     = '';
-  my $OtherHi     = '';
-  my $OtherLo     = '';
-  my $OtherTag    = 0;
-  my $Exclusions  = '';
-  my $HexChars    = NumberOfHexChars($RoutingAddressWidth);
-  my %Tags        = ( NORMAL => 'none|move|alias',  REMAP => 'remap[0-3]' );
-  my %TagMessages = ( NORMAL => 'remapping action', REMAP => 'REMAP bit' );
-  my %WarnType    = ( NORMAL => 'address', REMAP => 'remap' );
-
-  # Process each mapping type
-  foreach $Class ( ('REMAP', 'NORMAL') ) {
-
-    # Check the address map for each master interface
-    for ( $Index = 0; $Index < $MasterInterfaces; $Index++ ) {
-      $MasterIF = 'MI' . $Index;
-
-      # Find regions matching the master interface under inspection
-      @MIRegions = grep /^$MasterIF:/, @{ $InterfaceInfo{SLAVES}{$SlaveIF}{ADDRESS_MAP}{$Class} };
-
-      # Determine if this slave interface has connectivity with the master interface
-      if ( grep $_ eq $MasterIF, @{ $InterfaceInfo{SLAVES}{$SlaveIF}{CONNECTIONS} } ) {
-
-        # Check for expected address regions
-        unless ( $Class eq 'REMAP' or @MIRegions > 0 ) {
-          warn "Error: Interface $SlaveIF has no address regions defined for the $MasterIF interface!\n";
-          $Errors++;
-        }
-
-        # Inspect each region mapped to the master interface
-        foreach $Region ( @MIRegions ) {
-
-          # Split the region into its constituent parts
-          ($MI, $Tag, $RegionLo, $RegionHi) = split(/:/, $Region);
-
-          # Extract and remove the expected prefix, then check its type
-          unless ( $Tag =~ /^($Tags{$Class})$/ ) {
-            warn "Error: Interface $SlaveIF address region '$MI: $RegionLo-$RegionHi'" .
-                 " declares\n unsupported $TagMessages{$Class}!\n";
-            $Errors++;
-          }
-
-          # Check that each bound only consists of hexadecimal characters
-          #  and is the expected number of hexadecimal digits
-          foreach $CheckBound ( $RegionLo, $RegionHi ) {
-            if ( length($CheckBound) != $HexChars ) {
-              warn "Error: Interface $SlaveIF address bound '$MI: $CheckBound' is incorrect length should be $HexChars characters!\n";
-              $Errors++;
-            }
-            if ( $CheckBound =~ /[^a-f0-9]+/i ) {
-              warn "Error: Interface $SlaveIF address bound '$MI: $CheckBound' contains illegal characters!\n";
-              $Errors++;
-            }
-          }
-
-          # Check the region syntax
-          if ( IsGtOrEq($RegionLo, $RegionHi) ) {
-            warn "Error: Interface $SlaveIF address region '$MI: $RegionLo-$RegionHi' is invalid!\n";
-            $Errors++;
-          }
-
-          # Check the region size - minimum is 1kBytes
-          $RegionHiLSW = hex substr($RegionHi, length($RegionHi) - 8);
-          $RegionLoLSW = hex substr($RegionLo, length($RegionLo) - 8);
-          if ( abs( $RegionHiLSW - $RegionLoLSW ) < 1023 ) {
-            warn "Error: Interface $SlaveIF address region '$MI: $RegionLo-$RegionHi' is < 1kBytes!\n";
-            $Errors++;
-          }
-
-          # Check alignment of lower address bound
-          if ( ( hex(substr($RegionLo, -3, 3)) & 0x3ff ) != 0x000 ) {
-            warn "Warning: Interface $SlaveIF address bound '$MI: $RegionLo' is misaligned!\n";
-          }
-
-          # Check alignment of upper address bound
-          if ( ( hex(substr($RegionHi, -3, 3)) & 0x3ff ) != 0x3ff ) {
-            warn "Warning: Interface $SlaveIF address bound '$MI: $RegionHi' is misaligned!\n";
-          }
-
-          # Check the current region against all others for illegal overlap
-          foreach $OtherRegion ( @{ $InterfaceInfo{SLAVES}{$SlaveIF}{ADDRESS_MAP}{$Class} } ) {
-
-            # Split the other region into its constituent parts
-            ($OtherMI, $OtherTag, $OtherLo, $OtherHi) = split(/:/, $OtherRegion);
-
-            # Exclude remap regions with different remap bits
-            if ( $Class eq 'REMAP' and $Tag ne $OtherTag ) { next; }
-
-            # Filter out the current region and any previously reported ones
-            unless ( $OtherRegion =~ /^($Region$Exclusions)$/ ) {
-
-              # Check bounds for overlap
-              if ( (IsGtOrEq($OtherLo, $RegionLo) and IsLtOrEq($OtherLo, $RegionHi)) or
-                   (IsGtOrEq($OtherHi, $RegionLo) and IsLtOrEq($OtherHi, $RegionHi)) ) {
-
-                warn "Error: Interface $SlaveIF $WarnType{$Class} region '$OtherMI: $OtherLo-$OtherHi'" .
-                  " overlaps\n with another $WarnType{$Class} region '$MI: $RegionLo-$RegionHi'!\n";
-                $Errors++;
-
-                # Suppress multiple messages that show the same error
-                $Exclusions = $Exclusions . "|$MI:[^:]+:$RegionLo:$RegionHi";
-              }
-
-            }
-          }
-
-        }
-
-      } elsif ( @MIRegions > 0 ) {
-        # This slave interface is not connected to the master interface and
-        #  therefore should not have any address map information
-        warn "Error: Interface $SlaveIF has an address map for $MasterIF interface,\n" .
-             " while not connected!\n";
-        $Errors++;
-      }
-    }
-
-    # Clear the exclusions for checking the next class
-    $Exclusions = '';
-
-  }
-
-}
-
-
-# ------------------------------------------------------------------------------
-#   InitialiseInterfaceInfo - Determines the connectivity mapping and address
-#                              map, assigning values to the global interface
-#                              information hash
-# ------------------------------------------------------------------------------
-sub InitialiseInterfaceInfo {
-
-  # Local variable(s)
-  my $SlaveIF   = '';
-  my $MasterIF  = '';
-  my $Index1      = 0;
-  my $Index2      = 0;
-  my $Regions     = RoundPowerOfTwo($MasterInterfaces);
-  my $RegionSize  = (2 ** $RoutingAddressWidth) / $Regions;
-  my $BaseAddress = 0;
-  my $TopAddress  = 0;
-  my @Mappings    = split(/:\s*/, $Connectivity);
-  my $Mapping     = '';
-  my @Interfaces  = ();
-  my $HexChars    = NumberOfHexChars($RoutingAddressWidth);
-  my $Format      = "%0${HexChars}s";
-
-  # Initialise master interface parameter(s) first to simplify the sequence
-  for ( $Index1 = 0; $Index1 < $MasterInterfaces; $Index1++ ) {
-    $MasterIF = 'MI' . $Index1;
-    $InterfaceInfo{MASTERS}{$MasterIF}{NAME} = $MasterIF;
-    $InterfaceInfo{MASTERS}{$MasterIF}{CONNECTIONS} = [];
-  }
-
-  # Initialise slave interface parameter(s)
-  for ( $Index1 = 0; $Index1 < $SlaveInterfaces; $Index1++ ) {
-    # Initialise slave information container
-    $SlaveIF = 'SI' . $Index1;
-    $InterfaceInfo{SLAVES}{$SlaveIF}{NAME} = $SlaveIF;
-    $InterfaceInfo{SLAVES}{$SlaveIF}{CONNECTIONS} = [];
-    $InterfaceInfo{SLAVES}{$SlaveIF}{ADDRESS_MAP}{NORMAL} = [];
-    $InterfaceInfo{SLAVES}{$SlaveIF}{ADDRESS_MAP}{REMAP} = [];
-
-    # Establish the connectivity
-    if ( $Connectivity ne 'full' ) {
-
-      # Initialise or concatenate the connection description string
-      $Connectivity = 'sparse';
-      $Connections = $Connections . sprintf("%s%s -> ", ($Connections eq '') ?
-        '' : "\n" . ' ' x 29, $InterfaceInfo{SLAVES}{$SlaveIF}{NAME});
-
-      # Search the connectivity string for a mapping from this slave interface
-      foreach $Mapping ( @Mappings ) {
-        if ( $Mapping =~ /^$SlaveIF=MI\{([0-9,]+)\}/) {
-          # Process each master interface in turn, checking for its existence
-          @Interfaces = split(/,\s*/, $1);
-          foreach $MasterIF ( @Interfaces ) {
-            $MasterIF = 'MI' . $MasterIF;
-            if ( exists( $InterfaceInfo{MASTERS}{$MasterIF} ) ) {
-              # Append the details of this sparse connection
-              push @{ $InterfaceInfo{SLAVES}{$SlaveIF}{CONNECTIONS} }, $MasterIF;
-              $Connections = $Connections . "$MasterIF, ";
-            } else {
-              warn "Error: Interface $SlaveIF has an unresolved sparse connection '$MasterIF'!\n";
-              $Errors++;
-            }
-          }
-        }
-      }
-
-    } else {
-      # Full connectivity is default
-      for ( $Index2 = 0; $Index2 < $MasterInterfaces; $Index2++ ) {
-        push @{ $InterfaceInfo{SLAVES}{$SlaveIF}{CONNECTIONS} }, 'MI' . $Index2;
-      }
-    }
-
-    # Determine address map (assume no remap regions)
-    for ( $Index2 = 0; $Index2 < $MasterInterfaces; $Index2++ ) {
-      $MasterIF = 'MI' . $Index2;
-      $BaseAddress = $RegionSize * $Index2;
-      $TopAddress = $BaseAddress + $RegionSize - 1;
-      if ( grep $_ eq $MasterIF, @{ $InterfaceInfo{SLAVES}{$SlaveIF}{CONNECTIONS} } ) {
-        push @{ $InterfaceInfo{SLAVES}{$SlaveIF}{ADDRESS_MAP}{NORMAL} },
-          sprintf("%s:none:$Format:$Format", $MasterIF, UnsignedFloatToHex($BaseAddress),
-            UnsignedFloatToHex($TopAddress));
-      }
-    }
-  }
-
-  # Remove leading whitespace from the connections detail
-  $Connections =~ s/,\s+$//;
-
-  # Determine connectivity information from master interface perspective
-  for ( $Index1 = 0; $Index1 < $MasterInterfaces; $Index1++ ) {
-    $MasterIF = 'MI' . $Index1;
-    for ( $Index2 = 0; $Index2 < $SlaveInterfaces; $Index2++ ) {
-      $SlaveIF = 'SI' . $Index2;
-      if ( grep $_ eq $MasterIF, @{ $InterfaceInfo{SLAVES}{$SlaveIF}{CONNECTIONS} } ) {
-        push @{ $InterfaceInfo{MASTERS}{$MasterIF}{CONNECTIONS} }, $SlaveIF;
-      }
-    }
-  }
-
-}
-
-
-# ------------------------------------------------------------------------------
-#   ProcessXmlConfigFile - Reads the specified XML configuration file and
-#                           assigns values to the global variables including
-#                           the interface information hash
-# ------------------------------------------------------------------------------
-sub ProcessXmlConfigFile {
-
-  # Local variable(s)
-  my @Elements    = ();
-  my $XmlItem     = '';
-  my $XmlElement  = '';
-  my @SlavePorts  = ();
-  my @MasterPorts = ();
-  my $Index1      = 1;
-  my $Index2      = 0;
-  my $SlaveIF     = '';
-  my $MasterIF    = '';
-  my $Name        = '';
-  my $Region      = '';
-
-  # Configure the XML parser
-  ConfigureXmlParser( show_ids => 0, verbose => 0, show_warnings => 0 );
-
-  # Read the specified configuration file
-  RunXmlParser($XmlConfigFile);
-
-  # Display the XML structure when in debug mode
-  if ( $Debug ) { ListXmlHash('ROOT'); }
-
-  # Access mandatory items of information (bus matrix dimensions)
-  @SlavePorts = GetXmlNodeList('//cfgfile/slave_interface');
-  $SlaveInterfaces = scalar @SlavePorts;
-  @MasterPorts = GetXmlNodeList('//cfgfile/master_interface');
-  $MasterInterfaces = scalar @MasterPorts;
-
-  # Access optional items of information
-  @Elements = GetXmlNodeList('/cfgfile');
-  foreach $XmlElement ( @Elements ) {
-    # Assign the extracted value to the appropriate parameter name
-    $XmlItem = GetXmlValue("/cfgfile/$XmlElement");
-    if ( $XmlElement =~ /arbitration_scheme\[1\]$/ ) {
-      $ArbiterType = $XmlItem;
-    } elsif ( $XmlElement =~ /architecture_version\[1\]$/ ) {
-      $ArchitectureType = $XmlItem;
-    } elsif ( $XmlElement =~ /routing_data_width\[1\]$/ ) {
-      $RoutingDataWidth = $XmlItem;
-    } elsif ( $XmlElement =~ /routing_address_width\[1\]$/ ) {
-      $RoutingAddressWidth = $XmlItem;
-    } elsif ( $XmlElement =~ /user_signal_width\[1\]$/ ) {
-      $UserSignalWidth = $XmlItem;
-    } elsif ( $XmlElement =~ /timescales\[1\]$/ ) {
-      $XmlTimescales = $XmlItem;
-    } elsif ( $XmlElement =~ /bus_matrix_name\[1\]$/ ) {
-      $BusMatrixName = $XmlItem;
-    } elsif ( $XmlElement =~ /input_stage_name\[1\]$/ ) {
-      $InputStageName = $XmlItem;
-    } elsif ( $XmlElement =~ /matrix_decode_name\[1\]$/ ) {
-      $MatrixDecodeName = $XmlItem;
-    } elsif ( $XmlElement =~ /output_arbiter_name\[1\]$/ ) {
-      $OutputArbName = $XmlItem;
-    } elsif ( $XmlElement =~ /output_stage_name\[1\]$/ ) {
-      $OutputStageName = $XmlItem;
-    } elsif ( $XmlElement =~ /product_version_info\[1\]$/ ) {
-      $ComponentName = GetXmlValue("/cfgfile/$XmlElement" . '@component_name');
-    } elsif ( $XmlElement !~ /(slave|master)_interface\[\d+\]/ ) {
-      warn "Error: Unknown XML option '$XmlElement'!\n";
-      $Errors++;
-    }
-  }
-
-  # Extract master interface parameter(s) first to simplify the sequence
-  foreach $XmlElement ( @MasterPorts ) {
-
-    # Initialise information container and increment the count
-    $MasterIF = sprintf("MI%d", $Index2++);
-    $Name = GetXmlValue($XmlElement . '@name');
-    $InterfaceInfo{MASTERS}{$MasterIF}{NAME} = $Name;
-    $InterfaceInfo{MASTERS}{$MasterIF}{CONNECTIONS} = [];
-
-    # Add the name to the master alias lookup hash
-    if ( ! exists( $NameAliases{$Name} ) ) {
-      $NameAliases{$Name} = $MasterIF;
-    } else {
-      warn "Error: Interface $MasterIF name '$Name' is not unique!\n";
-      $Errors++;
-    }
-
-  }
-
-  # Extract slave interface parameter(s)
-  foreach $XmlElement ( @SlavePorts ) {
-
-    # Initialise information container
-    $SlaveIF = sprintf("SI%d", $Index1 - 1);
-    $Name = GetXmlValue($XmlElement . '@name');
-    $InterfaceInfo{SLAVES}{$SlaveIF}{NAME} = $Name;
-    $InterfaceInfo{SLAVES}{$SlaveIF}{CONNECTIONS} = [];
-    $InterfaceInfo{SLAVES}{$SlaveIF}{ADDRESS_MAP}{NORMAL} = [];
-    $InterfaceInfo{SLAVES}{$SlaveIF}{ADDRESS_MAP}{REMAP} = [];
-
-    # Add the name to the slave alias lookup hash
-    if ( ! exists( $NameAliases{$Name} ) ) {
-      $NameAliases{$Name} = $SlaveIF;
-    } else {
-      warn "Error: Interface $SlaveIF name '$Name' is not unique!\n";
-      $Errors++;
-    }
-
-    # Extract connectivity information or assign full connectivity as default
-    @Elements = GetXmlNodeList("//cfgfile/slave_interface[$Index1]/sparse_connect");
-    if ( @Elements > 0 ) {
-      # Initialise or concatenate the connection description string
-      $Connectivity = 'sparse';
-      $Connections = $Connections . sprintf("%s%s -> ", ($Connections eq '') ?
-        '' : "\n" . ' ' x 29, $InterfaceInfo{SLAVES}{$SlaveIF}{NAME});
-
-      # Convert the symbolic interface names to the MI<n> notation
-      foreach $XmlItem ( @Elements ) {
-        # Extract sparse connection attribute and check for existence of the
-        #  named interface
-        $MasterIF = GetXmlValue($XmlItem . '@interface');
-        if ( exists( $NameAliases{$MasterIF} ) ) {
-          push @{ $InterfaceInfo{SLAVES}{$SlaveIF}{CONNECTIONS} }, $NameAliases{$MasterIF};
-        } else {
-          warn "Error: Interface '$Name' has an unresolved sparse connection '$MasterIF'!\n";
-          $Errors++;
-        }
-        # Append this sparse connection detail
-        $Connections = $Connections . "$MasterIF, ";
-      }
-
-    } else {
-      # Full connectivity is default
-      for ( $Index2 = 0; $Index2 < $MasterInterfaces; $Index2++ ) {
-        push @{ $InterfaceInfo{SLAVES}{$SlaveIF}{CONNECTIONS} }, 'MI' . $Index2;
-      }
-    }
-
-    # Extract address mapping information
-    @Elements = GetXmlNodeList("//cfgfile/slave_interface[$Index1]/address_region");
-    if ( @Elements > 0 ) {
-      foreach $XmlItem ( @Elements ) {
-        # Determine which master interface this address region is for, and
-        #  check that it exists
-        $MasterIF = GetXmlValue($XmlItem . '@interface');
-        if ( exists( $NameAliases{$MasterIF} ) ) {
-          $Region = sprintf("%s:%s:%s:%s", $NameAliases{$MasterIF},
-                                           GetXmlValue($XmlItem . '@remapping'),
-                                           GetXmlValue($XmlItem . '@mem_lo'),
-                                           GetXmlValue($XmlItem . '@mem_hi'));
-          # Check for duplicated definitions
-          if ( grep $_ eq $Region, @{ $InterfaceInfo{SLAVES}{$SlaveIF}{ADDRESS_MAP}{NORMAL} } ) {
-            warn "Error: Interface '$Name' has duplicated address region for master interface '$MasterIF'\n";
-            $Errors++;
-          } else {
-            push @{ $InterfaceInfo{SLAVES}{$SlaveIF}{ADDRESS_MAP}{NORMAL} }, $Region;
-          }
-
-        } else {
-          warn "Error: Address region maps to unknown master interface '$MasterIF'\n";
-          $Errors++;
-        }
-      }
-    } else {
-      warn "Error: Expecting an address region for interface '$SlaveIF'\n";
-      $Errors++;
-    }
-
-    # Extract the optional remapped address information
-    @Elements = GetXmlNodeList("//cfgfile/slave_interface[$Index1]/remap_region");
-    foreach $XmlItem ( @Elements ) {
-      # Determine which master interface this remap region is for, and
-      #  check that it exists
-      $MasterIF = GetXmlValue($XmlItem . '@interface');
-      if ( exists( $NameAliases{$MasterIF} ) ) {
-        $Region = sprintf("%s:remap%s:%s:%s", $NameAliases{$MasterIF},
-                                              GetXmlValue($XmlItem . '@bit'),
-                                              GetXmlValue($XmlItem . '@mem_lo'),
-                                              GetXmlValue($XmlItem . '@mem_hi'));
-        # Check for duplicated definitions
-        if ( grep $_ eq $Region, @{ $InterfaceInfo{SLAVES}{$SlaveIF}{ADDRESS_MAP}{REMAP} } ) {
-          warn "Error: Interface '$Name' has duplicated remap region for master interface '$MasterIF'\n";
-          $Errors++;
-        } else {
-          push @{ $InterfaceInfo{SLAVES}{$SlaveIF}{ADDRESS_MAP}{REMAP} }, $Region;
-        }
-
-      } else {
-        warn "Error: Remap region maps to unknown master interface '$MasterIF'\n";
-        $Errors++;
-      }
-    }
-
-    # Increment index
-    $Index1++;
-  }
-
-  # Remove leading whitespace from the connections detail
-  $Connections =~ s/,\s+$//;
-
-  # Determine connectivity information from master interface perspective
-  for ( $Index1 = 0; $Index1 < $MasterInterfaces; $Index1++ ) {
-    $MasterIF = 'MI' . $Index1;
-    for ( $Index2 = 0; $Index2 < $SlaveInterfaces; $Index2++ ) {
-      $SlaveIF = 'SI' . $Index2;
-      if ( grep $_ eq $MasterIF, @{ $InterfaceInfo{SLAVES}{$SlaveIF}{CONNECTIONS} } ) {
-        push @{ $InterfaceInfo{MASTERS}{$MasterIF}{CONNECTIONS} }, $SlaveIF;
-      }
-    }
-  }
-
-
-}
-
-sub ProcessDataForIPXact {
-
-  # Work on a copy for IPXact
-  %InterfaceInfoIPXact = %{ dclone \%InterfaceInfo };
-
-  my $SlaveIF     = '';
-  my $MasterIF    = '';
-
-  my @address_regions = ();
-  my $address_region;
-  my $remap_region;
-  my $AddrLo       = '';
-  my $AddrHi       = '';
-  my $Remapping    = '';
-  my $r_MasterIF   = '';
-  my $r_AddrLo     = '';
-  my $r_AddrHi     = '';
-  my $r_Remapping  = '';
-  my $new_Remapping= '';
-  my $split_done   = '';
-  my $r_bit        = '';
-  my $r2_bit       = '';
-  my $Unmapping    = '';
-  my $new_Unmapping= '';
-
-  # Convert move to del
-  foreach $SlaveIF (keys %{$InterfaceInfoIPXact{SLAVES}} ) {
-    @address_regions = @{ $InterfaceInfoIPXact{SLAVES}{$SlaveIF}{ADDRESS_MAP}{NORMAL} };
-    foreach $address_region (@address_regions) {
-      ($MasterIF, $Remapping, $AddrLo, $AddrHi) = split(/:/, $address_region);
-      $new_Remapping = $Remapping;
-      if ($Remapping eq 'move') {
-        foreach $remap_region (@{ $InterfaceInfoIPXact{SLAVES}{$SlaveIF}{ADDRESS_MAP}{REMAP} }) {
-          ($r_MasterIF, $r_Remapping, $r_AddrLo, $r_AddrHi) = split(/:/, $remap_region);
-          $r_bit = substr($r_Remapping, 5);
-          if ($r_MasterIF eq $MasterIF) {
-            if (substr($new_Remapping,0,3) eq "del") {
-              # Check if it's already in the _del_
-              if ($new_Remapping =~ m/.*(del|_|,|\s)$r_bit(_|,|\s|$)/ ) {
-                $new_Remapping = $new_Remapping;
-              } else {
-                $new_Remapping = $new_Remapping . "," . $r_bit;
-              }
-            } else {
-              $new_Remapping = "del" . $r_bit;
-            }
-          }
-        }
-        if ( !($new_Remapping eq $Remapping) ) {
-          $address_region = $MasterIF .":". $new_Remapping .":". $AddrLo .":". $AddrHi;
-          print "Converted " . $MasterIF .":". $Remapping .":". $AddrLo .":". $AddrHi . " to " . $new_Remapping . "\n" if $Debug;
-        }
-      }
-    }
-    @{ $InterfaceInfoIPXact{SLAVES}{$SlaveIF}{ADDRESS_MAP}{NORMAL} } = @address_regions;
-  }
-
-  ############################ ADDRESS REGION ############################
-  # Cut address_regions if remap_regions overlap
-  foreach $SlaveIF (keys %{$InterfaceInfoIPXact{SLAVES}} ) {
-
-     # Cut address_regions
-     @address_regions = @{ $InterfaceInfoIPXact{SLAVES}{$SlaveIF}{ADDRESS_MAP}{NORMAL} };
-     foreach $remap_region (@{ $InterfaceInfoIPXact{SLAVES}{$SlaveIF}{ADDRESS_MAP}{REMAP} }) {
-       ($r_MasterIF, $r_Remapping, $r_AddrLo, $r_AddrHi) = split(/:/, $remap_region);
-       $r_bit = substr($r_Remapping, 5);
-       foreach $address_region (@address_regions) {
-         ($MasterIF, $Remapping, $AddrLo, $AddrHi) = split(/:/, $address_region);
-         # Make new address region remapping type
-         if (substr($Remapping,0,3) eq "del") {
-           # Check if it's already in the _del_
-           if ($Remapping =~ m/.*(del|_|,|\s)$r_bit(_|,|\s|$)/ ) {
-             $new_Remapping = $Remapping;
-           } else {
-             $new_Remapping = $Remapping . "," . $r_bit;
-           }
-         } else {
-           $new_Remapping = "del" . $r_bit;
-         }
-         # Split the address region that is covered by a remap region
-         if ( IsLt( $AddrLo , $r_AddrLo) && IsLt( $r_AddrHi, $AddrHi) ) {
-           $address_region = $MasterIF .":". $new_Remapping .":". $r_AddrLo .":". $r_AddrHi;
-           push (@address_regions, $MasterIF .":". $Remapping .":". $AddrLo .":". HexSubstract($r_AddrLo,1));
-           push (@address_regions, $MasterIF .":". $Remapping .":". HexAdd($r_AddrHi,1) .":". $AddrHi);
-
-           if ($Debug) {
-             print "Splitting for encapsulated  " . $MasterIF .":". $Remapping .":". $AddrLo .":". $AddrHi . "\n";
-             print "  Into                      " . $MasterIF .":". $Remapping .":". $AddrLo .":". HexSubstract($r_AddrLo,1) . "\n";
-             print "  Add                       " . $MasterIF .":". $new_Remapping .":". $r_AddrLo .":". $r_AddrHi . "\n";
-             print "  And                       " . $MasterIF .":". $Remapping .":". HexAdd($r_AddrHi,1) .":". $AddrHi . "\n";
-             if (substr($Remapping,0,3) eq "del") {
-               print "^ (Double Del)\n";
-             }
-             print "---------------------------------------------------------------------\n";
-           }
-           redo;
-         } elsif ( IsLt( $AddrLo , $r_AddrLo) && IsLt( $r_AddrLo , $AddrHi) ) {
-           $address_region = $MasterIF .":". $Remapping .":". $AddrLo .":". HexSubstract($r_AddrLo,1);
-           push (@address_regions, $MasterIF .":". $new_Remapping .":". $r_AddrLo .":". $AddrHi);
-
-           if ($Debug) {
-             print "Splitting low region        " . $MasterIF .":". $Remapping .":". $AddrLo .":". $AddrHi . "\n";
-             print "  Into                      " . $MasterIF .":". $Remapping .":". $AddrLo .":". HexSubstract($r_AddrLo,1) . "\n";
-             print "  And                       " . $MasterIF .":". $new_Remapping .":". $r_AddrLo .":". $AddrHi . "\n";
-             if (substr($Remapping,0,3) eq "del") {
-               print "^ (Double Del)\n";
-             }
-             print "---------------------------------------------------------------------\n";
-           }
-           redo;
-         } elsif ( IsLt( $AddrLo , $r_AddrHi) && IsLt( $r_AddrHi , $AddrHi) ) {
-           $address_region = $MasterIF .":". $new_Remapping .":". $AddrLo .":". $r_AddrHi;
-           push (@address_regions, $MasterIF .":". $Remapping .":". HexAdd($r_AddrHi,1) .":". $AddrHi);
-           if ($Debug) {
-             print "Splitting high region       " . $MasterIF .":". $Remapping .":". $AddrLo .":". $AddrHi . "\n";
-             print "  Into                      " . $MasterIF .":". $new_Remapping .":". $AddrLo .":". $r_AddrHi . "\n";
-             print "  And                       " . $MasterIF .":". $Remapping .":". HexAdd($r_AddrHi,1) .":". $AddrHi . "\n";
-             if (substr($Remapping,0,3) eq "del") {
-               print "^ (Double Del)\n";
-             }
-             print "---------------------------------------------------------------------\n";
-           }
-           redo;
-         } elsif ( IsGtOrEq( $AddrLo , $r_AddrLo) && IsGtOrEq( $r_AddrHi , $AddrHi) && !($new_Remapping eq $Remapping) ) {
-           $address_region = $MasterIF .":". $new_Remapping .":". $AddrLo .":". $AddrHi;
-           if ($Debug) {
-             print "Changed region to deletable " . $MasterIF .":". $Remapping .":". $AddrLo .":". $AddrHi . "\n";
-             print "  Into                      " . $MasterIF .":". $new_Remapping .":". $AddrLo .":". $AddrHi . "\n";
-             if (substr($Remapping,0,3) eq "del") {
-               print "^ (Double Del)\n";
-             }
-             print "---------------------------------------------------------------------\n";
-           }
-
-         }
-       }
-     }
-     @{ $InterfaceInfoIPXact{SLAVES}{$SlaveIF}{ADDRESS_MAP}{NORMAL} } =
-       sort {
-              my @split_a = split /:/, $a;
-              my @split_b = split /:/, $b;
-              my $c;
-              my $d;
-              if ( IsLt($split_a[2],$split_b[2]) ) {
-                $c = 1;
-                $d = 2;
-              } else {
-                $c = 2;
-                $d = 1;
-              }
-              $c <=> $d
-#              (hex $split_a[2]) <=> (hex $split_b[2] )
-            } @address_regions;
-
-     ############################ REMAP ############################
-     # Cut remap_regions
-     @address_regions = @{ $InterfaceInfoIPXact{SLAVES}{$SlaveIF}{ADDRESS_MAP}{REMAP} };  # reusing address_region for remaps
-     foreach $remap_region (@{ $InterfaceInfoIPXact{SLAVES}{$SlaveIF}{ADDRESS_MAP}{REMAP} }) {
-       ($r_MasterIF, $r_Remapping, $r_AddrLo, $r_AddrHi) = split(/:/, $remap_region);
-       $r_bit = substr($r_Remapping, 5);
-       foreach $address_region (@address_regions) {
-         ($MasterIF, $Remapping, $AddrLo, $AddrHi, $Unmapping) = split(/:/, $address_region);
-         $r2_bit = substr($Remapping, 5);
-
-         if ($r_bit<$r2_bit) {
-
-           # If there is already an Unmapping defined
-           if ($Unmapping) {
-             # Check if it's already in the _del_
-             if ($Unmapping =~ m/.*(unmap|_|,|\s)$r_bit(_|,|\s|$)/ ) {
-               $new_Unmapping = $Unmapping;
-             } else {
-               $new_Unmapping = $r_bit < $r2_bit ? $Unmapping . "," . $r_bit : $Unmapping;
-             }
-           } else {
-             $new_Unmapping = "unmap " . $r_bit;
-             $Unmapping = '';
-           }
-           # Lower remap bit has higher priority
-
-           # Split the remap region that is covered by another remap region of higher priority
-           if ( IsLt( $AddrLo , $r_AddrLo) && IsLt( $r_AddrHi, $AddrHi) ) {
-             $address_region = $MasterIF .":". $Remapping .":". $r_AddrLo .":". $r_AddrHi.":".$new_Unmapping;
-             push (@address_regions, $MasterIF .":". $Remapping .":". $AddrLo .":". HexSubstract($r_AddrLo,1).":".$Unmapping);
-             push (@address_regions, $MasterIF .":". $Remapping .":". HexAdd($r_AddrHi,1) .":". $AddrHi.":".$Unmapping);
-             if ($Debug) {
-               print "Splitting remap for encapsulated   " . $MasterIF .":". $Remapping .":". $AddrLo .":". $AddrHi .":".$Unmapping. "\n";
-               print "  Into                             " . $MasterIF .":". $Remapping .":". $AddrLo .":". HexSubstract($r_AddrLo,1) .":".$Unmapping. "\n";
-               print "  Add                              " . $MasterIF .":". $Remapping .":". $r_AddrLo .":". $r_AddrHi . ":".$new_Unmapping . "\n";
-               print "  And                              " . $MasterIF .":". $Remapping .":". HexAdd($r_AddrHi,1) .":". $AddrHi .":".$Unmapping. "\n";
-               print "---------------------------------------------------------------------\n";
-             }
-             redo;
-           } elsif ( IsLt( $AddrLo , $r_AddrLo) && IsLt( $r_AddrLo , $AddrHi) ) {
-             $address_region = $MasterIF .":". $Remapping .":". $AddrLo .":". HexSubstract($r_AddrLo,1).":".$Unmapping;
-             push (@address_regions, $MasterIF .":". $Remapping .":". $r_AddrLo .":". $AddrHi.":".$new_Unmapping);
-             if ($Debug) {
-               print "Splitting low remap region         " . $MasterIF .":". $Remapping .":". $AddrLo .":". $AddrHi .":".$Unmapping. "\n";
-               print "  Into                             " . $MasterIF .":". $Remapping .":". $AddrLo .":". HexSubstract($r_AddrLo,1) .":".$Unmapping. "\n";
-               print "  And                              " . $MasterIF .":". $Remapping .":". $r_AddrLo .":". $AddrHi .":".$new_Unmapping. "\n";
-               print "---------------------------------------------------------------------\n";
-             }
-             redo;
-           } elsif ( IsLt( $AddrLo , $r_AddrHi) && IsLt( $r_AddrHi , $AddrHi) ) {
-             $address_region = $MasterIF .":". $Remapping .":". $AddrLo .":". $r_AddrHi.":".$new_Unmapping;
-             push (@address_regions, $MasterIF .":". $Remapping .":". HexAdd($r_AddrHi,1) .":". $AddrHi.":".$Unmapping);
-             if ($Debug) {
-               print "Splitting high remap region        " . $MasterIF .":". $Remapping .":". $AddrLo .":". $AddrHi .":".$Unmapping. "\n";
-               print "  Into                             " . $MasterIF .":". $Remapping .":". $AddrLo .":". $r_AddrHi .":".$new_Unmapping. "\n";
-               print "  And                              " . $MasterIF .":". $Remapping .":". HexAdd($r_AddrHi,1) .":". $AddrHi .":".$Unmapping. "\n";
-               print "---------------------------------------------------------------------\n";
-             }
-             redo;
-           } elsif ( IsGtOrEq( $AddrLo , $r_AddrLo) && IsGtOrEq( $r_AddrHi , $AddrHi) && !($new_Unmapping eq $Unmapping) ) {
-             $address_region = $MasterIF .":". $Remapping .":". $AddrLo .":". $AddrHi.":".$new_Unmapping;
-             if ($Debug) {
-               print "Changed remap region to unmappable " . $MasterIF .":". $Remapping .":". $AddrLo .":". $AddrHi .":".$Unmapping. "\n";
-               print "  Into                             " . $MasterIF .":". $Remapping .":". $AddrLo .":". $AddrHi .":".$new_Unmapping. "\n";
-               print "---------------------------------------------------------------------\n";
-             }
-
-           }
-         }
-       }
-     }
-     @{ $InterfaceInfoIPXact{SLAVES}{$SlaveIF}{ADDRESS_MAP}{REMAP} } =
-       sort {
-              my @split_a = split /:/, $a;
-              my @split_b = split /:/, $b;
-              my $c;
-              my $d;
-              if ( IsLt($split_a[2],$split_b[2]) ) {
-                $c = 1;
-                $d = 2;
-              } else {
-                $c = 2;
-                $d = 1;
-              }
-              $c <=> $d
-#              (hex $split_a[2]) <=> (hex $split_b[2] )
-            } @address_regions;
-
-
-
-
-    # Sort remap in order of priority
-    @{ $InterfaceInfoIPXact{SLAVES}{$SlaveIF}{ADDRESS_MAP}{REMAP} } =
-      sort {
-             my @split_a = split /:/, $a;
-             my @split_b = split /:/, $b;
-             substr($split_a[1],5) <=> substr($split_b[1],5)
-           } @{ $InterfaceInfoIPXact{SLAVES}{$SlaveIF}{ADDRESS_MAP}{REMAP} };
-
-  }
-
-  # Generate Remapstates
-  my @bits;
-  my @c_bits;
-  my $remap_name;
-  foreach $SlaveIF (keys %{$InterfaceInfoIPXact{SLAVES}} ) {
-     @address_regions = @{ $InterfaceInfoIPXact{SLAVES}{$SlaveIF}{ADDRESS_MAP}{NORMAL} };
-     push (@address_regions, @{ $InterfaceInfoIPXact{SLAVES}{$SlaveIF}{ADDRESS_MAP}{REMAP} });
-     foreach $address_region (@address_regions) {
-        $Unmapping = '';
-        ($MasterIF, $Remapping, $AddrLo, $AddrHi,$Unmapping) = split(/:/, $address_region);
-        @bits = GetRemapBits ($Remapping, $Unmapping);
-        $remap_name = "remap_".join( '_' , @bits );
-        # Change ! to n
-        $remap_name =~ s/!/n/g ;
-
-        # don't put in duplicates
-        if ( @bits && !$RemapStates{$remap_name}) {
-           @{ $RemapStates{$remap_name}} = @bits;
-        }
-     }
-  }
-
-  print "RemapStates:\n" if $Debug;
-  print Dumper(\%RemapStates) if $Debug;
-
-  # Generate AddressSpace regions
-  foreach $SlaveIF (keys %{$InterfaceInfoIPXact{SLAVES}} ) {
-     @address_regions = @{ $InterfaceInfoIPXact{SLAVES}{$SlaveIF}{ADDRESS_MAP}{NORMAL} };
-     push (@address_regions, @{ $InterfaceInfoIPXact{SLAVES}{$SlaveIF}{ADDRESS_MAP}{REMAP} });
-     foreach $address_region (@address_regions) {
-        ($MasterIF, $Remapping, $AddrLo, $AddrHi) = split(/:/, $address_region);
-        if ( !( grep {(@{$_}[0] eq $AddrLo) && (@{$_}[1] eq $AddrHi)} @{ $AddressSpace{$MasterIF} } ) ) {
-           push @{ $AddressSpace{$MasterIF}}, [$AddrLo,$AddrHi];
-        }
-     }
-  }
-
-  # Sort the AddressSpace
-  foreach $MasterIF (keys %AddressSpace) {
-    @{ $AddressSpace{$MasterIF}} = sort {
-              my $c;
-              my $d;
-              if ( IsLt(@{$a}[0],@{$b}[0]) ) {
-                $c = 1;
-                $d = 2;
-              } else {
-                $c = 2;
-                $d = 1;
-              }
-              $c <=> $d
-            } @{ $AddressSpace{$MasterIF}};
-  }
-
-  print "AddressSpace:\n" if $Debug;
-  print Dumper(\%AddressSpace) if $Debug;
-
-  print "InterfaceInfo:\n" if $Debug;
-  print Dumper(\%InterfaceInfo) if $Debug;
-
-  print "InterfaceInfoIPXact:\n" if $Debug;
-  print Dumper(\%InterfaceInfoIPXact) if $Debug;
-
-}
-
-
-# ------------------------------------------------------------------------------
-#   ShowHelp - Displays help dialogue (developer's options are not advertised)
-# ------------------------------------------------------------------------------
-sub ShowHelp {
-
-  # Local variable(s)
-  my $ShowArchitectureOptions = 0;
-
-  printf "%sPurpose:\n" .
-         "   Builds particular configurations of the AHB BusMatrix component.\n\n" .
-         "Usage:\n" .
-         "   Builds an AHB BusMatrix component with a given  number of input\n" .
-         "   ports, a given number of output ports, a particular arbitration\n" .
-         "   scheme and ARM processor interface.\n\n" .
-         "Options:\n" .
-         "   --cfg=FILENAME          Name of an XML configuration file that\n" .
-         "                            defines the bus matrix specification\n" .
-         "                            in place of most command line arguments.\n" .
-         "                            Note that this is the only method to\n" .
-         "                            specify customised address maps.\n".
-         "\n" .
-         "   use these if not using the config file method:\n" .
-         "             --inports=NUM           Number of input (slave) ports ($MinSlaveIF..$MaxSlaveIF).\n" .
-         "             --outports=NUM          Number of output (master) ports ($MinMasterIF..$MaxMasterIF).\n\n" .
-         "             --connectivity='SI0=MI\\{0,1,2}:SI1=MI{3,4,5}'\n\n" .
-
-         "                                     Sparse interconnect declarations. The\n" .
-         "                                      example above means inport 0 connects\n" .
-         "                                      to outports 0, 1 and 2, and inport 1\n" .
-         "                                      connects to outports 3, 4 and 5.\n\n" .
-
-         "             --arb=SCHEME            Arbitration scheme:\n" .
-         "                                      burst - Fixed priority; Master 0 has\n" .
-         "                                               highest priority, does not\n" .
-         "                                               break defined length bursts.\n" .
-         "                                      fixed - Fixed priority; Master 0 has\n" .
-         "                                               highest priority.\n" .
-         "                                      round - Round robin priority; priority\n" .
-         "                                               goes to next available master.\n\n",
-         ( $Verbose ) ? '' : "\n--- $Scriptname ---\n\n";
-
-  # Display option
-  if ( $ShowArchitectureOptions ) {
-    print "          --arch=VER              ARM Processor interface:\n" .
-          "                                   ahb2    - AMBA2.0 interface.\n" .
-          "                                   v6      - All ARM V6 extensions.\n" .
-          "                                   excl    - ARM V6 exclusive access\n" .
-          "                                              extensions only.\n" .
-          "                                   unalign - ARM V6 unaligned and byte-\n" .
-          "                                              strobed access extensions\n" .
-          "                                              only.\n";
-  }
-
-  print "             --datawidth=WIDTH       Width of data bus ($DataWidths).\n" .
-        "             --addrwidth=WIDTH       Width of address bus ($MinAddrWidth..$MaxAddrWidth).\n" .
-        "             --userwidth=WIDTH       Width of user signals ($MinUserWidth..$MaxUserWidth).\n\n" .
-
-        "             --OutputArb=NAME        Name of arbitration component\n" .
-        "                                     (max $MaxNameLength characters).\n" .
-        "             --OutputStage=NAME      Name of output stage component\n" .
-        "                                     (max $MaxNameLength characters).\n" .
-        "             --MatrixDecode=NAME     Name of address decoder component(s)\n" .
-        "                                     (max $MaxNameLength characters).\n" .
-        "             --InputStage=NAME       Name of input stage component\n" .
-        "                                     (max $MaxNameLength characters).\n" .
-        "             --BusMatrix=NAME        Name of top level entity\n" .
-        "                                     (max $MaxNameLength characters).\n\n" .
-
-        "   --ipxact                Alos generates SPIRIT-2009 compatible IPXACT file.\n" .
-        "   --verbose               Prints run information.\n" .
-        "   --help                  Prints this help.\n" .
-        "   --srcdir=DIRNAME        Directory name where source files are\n" .
-        "                            located (defaults to $SourceDir).\n" .
-        "   --tgtdir=DIRNAME        Directory name where RTL files will be\n" .
-        "                            generated (defaults to $TargetDir).\n" .
-        "   --xmldir=DIRNAME        Directory name where XML configuration\n" .
-        "                            files are located (defaults to $XmlDir).\n" .
-        "   --ipxactsrcdir=DIRNAME  Directory name where IPXact source files are\n" .
-        "                            located (defaults to $IPXactSourceDir).\n" .
-        "   --ipxacttgtdir=DIRNAME  Directory name where IPXact files will be\n" .
-        "                            generated (defaults to $IPXactTargetDir).\n" .
-        "   --overwrite             Overwrites existing bus matrix of the\n" .
-        "                            same name.\n" .
-        "   --(no)timescales        Adds or suppressed the '`timescale' directive in the rendered Verilog files.\n" .
-        "   --check                 Disables file generation and just checks the\n" .
-        "                            XML configuration file.\n\n";
-
-  # Abort session with exit code = 0
-  exit (0);
-}
diff --git a/system/src/nanosoc_ahb_busmatrix/bin/lib/xmlparser.pm b/system/src/nanosoc_ahb_busmatrix/bin/lib/xmlparser.pm
deleted file mode 100755
index c8b144c50dc07e9f9bc00eeb2d4d9cc03230c8ae..0000000000000000000000000000000000000000
--- a/system/src/nanosoc_ahb_busmatrix/bin/lib/xmlparser.pm
+++ /dev/null
@@ -1,1393 +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 2006-2011,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.
-#
-# ------------------------------------------------------------------------------
-# Version and Release Control Information:
-#
-#      File Name           : $RCSfile: xmlparser.pm,v $
-#
-#      SVN Information
-#
-#      Checked In          : $Date: 2011-02-21 17:53:53 +0000 (Mon, 21 Feb 2011) $
-#
-#      Revision            : $Revision: 162121 $
-#
-#      Release Information : Cortex-M System Design Kit-r1p1-00rel0
-#
-# ------------------------------------------------------------------------------
-# Purpose        : Parse XML file input and produce equivalent structure
-#                   hash array, which can be accessed via public methods.
-#
-# Requirements   : Perl version 5.005 or later for thread safety
-#
-# Limitations    : See the POD after the __END__ marker in this file. Try:
-#
-#                    pod2text xmlparser.pm | more
-#
-# ------------------------------------------------------------------------------
-
-eval "exec perl -w -S $0 $@" # -*- Perl -*-
-  if ($running_under_some_sh);
-  undef ($running_under_some_sh);
-
-# Declare module name
-package xmlparser;
-
-# Declare import modules and libraries
-require Exporter;
-use strict;
-use vars qw( $VERSION @ISA @EXPORT @EXPORT_OK %XmlNodeTree %XmlNodeTotals );
-
-# Declare public and private entities
-@ISA     = qw( Exporter );
-
-@EXPORT  = qw( ConfigureXmlParser
-               RunXmlParser
-               ListXmlHash
-               ChangeRelativePath
-               GetXmlNodeList
-               GetXmlValue
-               GetXmlName
-               %XmlNodeTotals
-               %XmlNodeTree );
-
-@EXPORT_OK = qw( %XmlNodeTree );
-
-$VERSION = 1.00;
-
-# Dummy 'lock' routine for non-threaded versions of Perl
-BEGIN {
-  if ( $] < 5.005 ) { eval "sub lock {}"; }
-}
-
-# ------------------------------------------------------------------------------
-
-# Script variables
-my $DebugMode      = 0;
-my $RecursionDepth = 0;
-my $RecursionLimit = 25;
-my $ShowIds        = 0;
-my $ShowWarnings   = 1;
-my $Verbose        = 1;
-my $Warnings       = 0;
-
-# Relative access path, serviced by ChangeRelativePath() function
-my $RelativePath = '';
-
-# Node stack
-my @PathStack = ( 'ROOT' );
-my $PathLevel = 0;
-
-# Exportable global data structure and node counters (note that values and
-#  attributes will be added dynamically when the XML file is parsed)
-%XmlNodeTree = ( ROOT => { ITEMS => {ELEMENTS => [], ATTRIBUTES => []} } );
-%XmlNodeTotals = ( TOTAL => 0, ELEMENTS => 0, ATTRIBUTES => 0 );
-
-
-# ------------------------------------------------------------------------------
-#   PUBLIC: RunXmlParser - Extracts the multi-line value and fields
-# ------------------------------------------------------------------------------
-sub RunXmlParser {
-
-  # Passed parameter 1 is the XML filename
-  my $XmlFilename = shift;
-
-  # Local variable(s)
-  my $TextLine         = '';
-  my $LineCount        = 0;
-  my $LeadingSpace     = 0;
-  my $Delimeter        = '';
-  my $Before           = '';
-  my $After            = '';
-  my $Field            = '';
-  my $Residue          = '';
-  my $InContainer      = 0;
-  my $GotHeader        = 0;
-  my $HeaderMisaligned = 0;
-  my $ContainerType    = '';
-  my $Element          = '';
-  my $EmptyElement     = 0;
-  my $InstanceId       = 1;
-  my $Increment        = 1;
-  my $CurrentPath      = 'ROOT';
-  my $ParentPath       = 'ROOT';
-  my $AttributeCount   = 0;
-  my $ParseEnable      = 1;
-  my ($JustFilename)   = $XmlFilename =~ /([^\/]+)$/;
-
-  # Open the input file
-  open (INPUT_FILE, "<$XmlFilename") or
-    ReportError('Cannot open the specified file for reading');
-
-  print "Parsing the '$JustFilename' file...\n" if ( $Verbose );
-
-  # Process each line of the file
-  while ( $TextLine = <INPUT_FILE> ) {
-
-    # Increment line count
-    $LineCount++;
-
-    # Parse the line(s), when enabled
-    while ( $ParseEnable ) {
-
-      # Remove single line comments, leading or end-of-line whitespace,
-      #  carriage returns, newlines and tab characters. Leading whitespace
-      #  is tracked for checking the <?xml ...?> processing instruction
-      $TextLine =~ s/<!--.*-->//g;
-      $LeadingSpace = ( $TextLine =~ s/^\s+// ) ? 1 : 0;
-      $TextLine =~ s/\s*(\r|\n|\t)$//g;
-
-      # Only process lines that are not blank
-      unless ( $TextLine eq '' ) {
-
-        # Display line when in debug mode
-        if ( $DebugMode ) { printf "Line %-03d: '$TextLine'\n", $LineCount; }
-
-        # Reconstruct fields of text (from multiple lines), which are delimited
-        #  by the reserved characters '<' and '>'. Store the extracted tokens
-        #  in the same order as they are processed. A path stack is used to
-        #  determine the name of the current container. All nodes found within
-        #  the scope of the current container are stored in a keyed list (the
-        #  node structure hash array)
-        if ( ($Delimeter) = $TextLine =~ /([<>])/ ) {
-
-          # Store the patterns before and after the delimeter
-          $Before = $`;
-          $After = $';
-
-          # Determine appropriate action for the '<' delimeter
-          if ( $Delimeter eq '<' ) {
-
-            # Terminate reconstruction of a value field?
-            if ( ! $InContainer ) {
-
-              # Terminate the reconstructed value by concatenating the string
-              #  preceding the '<' delimeter and extracting any residual text
-              $Field = $Field . $Before;
-
-              unless ( $Field eq '' ) {
-                # Display the value when in debug mode
-                if ( $DebugMode ) { print "Value of '$Element' = '$Field'\n"; }
-
-                # Check and store the extracted value
-                CheckValue($Field, $LineCount);
-                $XmlNodeTree{$CurrentPath}{VALUE} = $Field;
-
-                # Clear the field ready for a new reconstruction
-                $Field = '';
-              }
-
-              # Change to the 'in-container' state
-              $InContainer = 1;
-            }
-
-            # Initiate reconstruction of a container field?
-            if ( $InContainer ) {
-
-              # Initiate reconstruction of a new container by storing it and
-              #  testing for the closing delimeter. If found, then trim the
-              #  field accordingly and extract any residual text, else pad
-              #  the field to support multi-line reconstruction
-              $Field = $After;
-              if ( $Field =~ s/>(.*)$// ) {
-                $After = $1;
-                $Before = '';
-                $Delimeter = '>';
-              } else {
-                $Field = $Field . ' ';
-              }
-
-              # If '<?xml' is found then check the alignment of the field
-              unless ( $GotHeader ) {
-                if ( $TextLine =~ /<\?xml/ ) {
-                  $HeaderMisaligned = ($LineCount > 1 or $LeadingSpace);
-                }
-              }
-
-            }
-          }
-
-          # Determine appropriate action for the '>' delimeter
-          if ( $Delimeter eq '>' ) {
-
-            # Determine action for this delimeter
-            if ( ! $InContainer ) {
-
-              # Initiate reconstruction of a new value by storing it and
-              #  testing for the opening delimeter. If found, then trim the
-              #  field accordingly and extract any residual text
-              $Field = $After;
-              if ( $Field =~ s/<(.*)$// ) { $Residue = '<' . $1; }
-
-            } else {
-
-              # Terminate the reconstructed container by concatenating the
-              #  remaining portion and smartly formatting the field to simplify
-              #  pattern-matching. Selectively extract and residual text
-              $Field = TidyXmlContainer($Field . $Before, $LineCount);
-              $Residue = ( $After ne '' ) ? '>' . $After : '';
-
-              # Display the container name when in debug mode
-              if ( $DebugMode ) { print "Container: '$Field'\n"; }
-
-              # Ignore blank fields when produced by the removal of
-              #  multi-line comments
-              unless ( $Field eq '' ) {
-
-                # Check the 'wellformedness' of the reconstructed container
-                CheckWellformedXml($Field, $LineCount);
-
-                # Re-initialise the node reference increment
-                $Increment = 1;
-
-                # Determine container type from beginning of the field, and
-                #  apply appropriate syntax checks
-                $ContainerType = substr($Field, 0, 1);
-                if ( $ContainerType eq '?' ) {
-
-                  # Check processing instructions
-                  if ( $Field =~ /^\?xml/ ) {
-                    unless ( $GotHeader ) {
-                      CheckXmlHeader($Field, $HeaderMisaligned);
-                      $GotHeader = 1;
-                    }
-                  } else {
-                    # Anything else is not supported
-                    ReportError("Unsupported XML processing instruction starting on line $LineCount");
-                  }
-
-                } elsif ( $ContainerType eq '!' ) {
-
-                  # Check declarations
-                  CheckDeclaration($Field, $LineCount);
-
-                } elsif ( $ContainerType =~ /[a-z_.\-\/]/i ) {
-
-                  # Check elements
-                  CheckElement($Field, $LineCount);
-
-                  # Determine element sub-type
-                  if ( $ContainerType ne '/' ) {
-
-                    # Extract and remove the element name
-                    $Field =~ s/([a-z0-9_:\.\-]+)\s?//i;
-                    $Element = $1;
-
-                    # Check if this is an empty element
-                    $EmptyElement = ( $Field =~ /\/$/ ) ? 1 : 0;
-
-                    # Determine the parent path and then post-increment the path stack pointer
-                    $ParentPath = DetermineStructPath($PathLevel++);
-
-                    # For this new element, determine its unique current path. If the key is
-                    #  unique, then initialise the item lists in the current node record
-                    $InstanceId = 1;
-                    while ( 1 ) {
-                      $PathStack[$PathLevel] = sprintf("%s[%d]", $Element, $InstanceId++);
-                      $CurrentPath = DetermineStructPath($PathLevel);
-                      unless ( exists($XmlNodeTree{$CurrentPath}) ) {
-                        $XmlNodeTree{$CurrentPath}{ITEMS}{ELEMENTS} = [];
-                        $XmlNodeTree{$CurrentPath}{ITEMS}{ATTRIBUTES} = [];
-                        last;
-                      }
-                    }
-
-                    # Display element name and path information when in debug mode
-                    if ( $DebugMode ) {
-                      printf "Element (%s): '%s'\nPUSH: Appending path: '%s', Parent path: '%s'\n",
-                        $EmptyElement ? 'empty' : 'open', $PathStack[$PathLevel], $CurrentPath, $ParentPath;
-                    }
-
-                    # Update the item list of the parent node record
-                    push ( @{ $XmlNodeTree{$ParentPath}{ITEMS}{ELEMENTS} }, $PathStack[$PathLevel] );
-
-                    # Extract attributes and add the count to the node total
-                    $AttributeCount = ExtractAttributes($Field, $CurrentPath);
-                    $XmlNodeTotals{ATTRIBUTES} += $AttributeCount;
-
-                    # Display number of extracted attributes when in debug mode
-                    if ( $DebugMode ) {
-                      unless ( $AttributeCount == 0 ) {
-                        print "Extracted $AttributeCount attribute(s) from element '$PathStack[$PathLevel]'\n";
-                      }
-                    }
-
-                    # Selectively decrement the path stack pointer and determine paths
-                    if ( $EmptyElement ) {
-                      $CurrentPath = DetermineStructPath(--$PathLevel);
-                      $ParentPath = DetermineStructPath($PathLevel - 1);
-
-                      # Display current and parent paths when in debug mode
-                      if ( $DebugMode ) {
-                        print "POP: Current path: '$CurrentPath', Parent path: '$ParentPath'\n";
-                      }
-                    }
-
-                  } else {
-
-                    # Decrement the node stack pointer and determine the paths
-                    $CurrentPath = DetermineStructPath(--$PathLevel);
-                    $ParentPath  = DetermineStructPath($PathLevel - 1);
-
-                    # Display paths when in debug mode
-                    if ( $DebugMode ) {
-                      print "POP: Current path: '$CurrentPath', Parent path: '$ParentPath'\n";
-                    }
-
-                    # Disable the node reference increment for closed elements
-                    $Increment = 0;
-
-                  }
-
-                } else {
-                  # Any other type of field is not supported
-                  ReportError("Unrecognised or illegal XML field starting on line $LineCount");
-                }
-
-                # Increment the node counts
-                $XmlNodeTotals{ELEMENTS} += $Increment;
-                $XmlNodeTotals{TOTAL}++;
-
-                # Clear the field ready for a new reconstruction and change to
-                #  the 'in-value' state
-                $Field = '';
-                $InContainer = 0;
-              }
-
-            }
-          }
-
-        } else {
-          # Continue to build the field from multiple lines
-          $Field = $Field . $TextLine;
-        }
-
-      }
-
-      # If a second pass is required to process any residual text from the
-      #  first attempt then remain in this loop, else exit the parsing loop
-      if ( $Residue ne '' ) {
-        # Display residual text when in debug mode
-        if ( $DebugMode ) { print "Residue: '$Residue'\n"; }
-        $TextLine = $Residue;
-        $Residue  = '';
-      } else {
-        $ParseEnable = 0;
-      }
-    }
-
-    # Re-enable parsing for a fresh line of text
-    $ParseEnable = 1;
-  }
-
-  # Check that the root node is properly terminated upon the EOF
-  if ( $PathLevel != 0 ) {
-    ReportError('Unexpected end-of-file due to a syntax error');
-  }
-
-  # Close the XML file
-  close (INPUT_FILE);
-
-  # Display node totals when in verbose mode
-  if ( $Verbose ) {
-    printf "Processed %d line(s) with %d warning(s) - extracted %d XML node(s) [%d, @%d]...\n",
-      $LineCount, $Warnings, $XmlNodeTotals{TOTAL},
-      $XmlNodeTotals{ELEMENTS}, $XmlNodeTotals{ATTRIBUTES};
-  }
-}
-
-
-# ------------------------------------------------------------------------------
-#   TidyXmlContainer - Apply intelligent text formatting to the container
-# ------------------------------------------------------------------------------
-sub TidyXmlContainer {
-
-  # Passed parameter 1 is the container
-  my $Container = shift;
-  # Passed parameter 2 is the line number
-  my $LineNumber = shift;
-
-  # Local variable(s)
-  my $Field = '';
-  my $Quote = '';
-  my $Token = '';
-  my $InQuotes = 0;
-
-  # Check for illegal empty container
-  if ( $Container eq '' ) {
-    ReportError("Empty XML field starting on line $LineNumber");
-  }
-
-  # Remove multi-line comments and end-of-field or leading whitespace
-  $Container =~ s/^!--.*--$//;
-  $Container =~ s/^\s*//;
-  $Container =~ s/\s*$//g;
-
-  # If the container is an element with attributes, then process it with
-  #  respect for embedded whitespace within quoted strings
-  $Field = $Container;
-  while ( ($Quote) = $Field =~ /[^=]+=\s*(['"]).*['"]/ ) {
-
-    # Selectively clear the container string for recomposition
-    if ( $InQuotes == 0 ) { $Container = ''; }
-
-    # Extract portions of the container between matching quote characters
-    #  and process whitespace on alternate iterations
-    while ( $Field =~ s/([^$Quote]+)($Quote*)// ) {
-      $Token = $1 . $2;
-      unless ( $InQuotes % 1 ) {
-        $Token =~ s/\s+/ /g;
-        $Token =~ s/\s?=\s?/=/g;
-      }
-      $Container = $Container . $Token;
-      $InQuotes++;
-    }
-
-  }
-
-  return ($Container);
-}
-
-
-# ------------------------------------------------------------------------------
-#   CheckWellformedXml - Check the 'wellformedness' of the container
-# ------------------------------------------------------------------------------
-sub CheckWellformedXml {
-
-  # Passed parameter 1 is the container
-  my $Container = shift;
-  # Passed parameter 2 is the line number
-  my $LineNumber = shift;
-
-  # Local variable(s)
-  my $BadProcInstr    = ( $Container =~ /^\?/ and
-                          $Container !~ /\?$/ ) ? 1 : 0;
-  my $BadDecl         = ( $Container =~ /^\!/ and
-                          $Container =~ /[\!\?\/]$/ ) ? 1 : 0;
-  my $BadOpenElement  = ( $Container =~ /^[a-z_.\-]/i and
-                          $Container !~ /\/?$/ ) ? 1 : 0;
-  my $BadCloseElement = ( $Container =~ /^\// and
-                          $Container =~ /(=|\/$)/ ) ? 1 : 0;
-
-  # Check and display an error if invalid
-  if ( $BadProcInstr or $BadDecl or $BadOpenElement or $BadCloseElement ) {
-    ReportError("XML field starting on line $LineNumber is not well-formed");
-  }
-}
-
-
-# ------------------------------------------------------------------------------
-#   CheckXmlHeader - Validate the <?xml ...?> header container
-# ------------------------------------------------------------------------------
-sub CheckXmlHeader {
-
-  # Passed parameter 1 is the header
-  my $Header = shift;
-  # Passed parameter 2 is the alignment error flag
-  my $Misaligned = shift;
-
-  # Local variable(s)
-  my $XMLVersion  = '1.0 (default)';
-  my $XMLEncoding = 'iso-8859-1 (default)';
-  my $XMLMode     = 'yes (default)';
-
-  # Announce the header check
-  print "Validating XML header...\n" if ( $Verbose );
-
-  # Check the mis-alignment flag
-  if ( $Misaligned ) {
-    ReportError("The '?xml' declaration must start on line 1, column 1");
-  }
-
-  # Check syntax of supported attributes
-  if ( ($Header !~ /^\?xml[\s\?]/) or
-       ($Header !~ /((version|encoding|standalone)=("[^"]+"|'[^']+'))*/) ) {
-    ReportError("Invalid '<?xml ...?>' processing instruction");
-  }
-
-  # Check version, encoding and standalone (mode) attributes
-  if ( $Header =~ /version=("[^"]+"|'[^']+')/ ) {
-    $XMLVersion = $1; $XMLVersion =~ s/["']//g;
-    if ($XMLVersion ne '1.0') {
-      ReportError('Unsupported XML version');
-    }
-  }
-  if ( $Header =~ /encoding=("[^"]+"|'[^']+')/ ) {
-    $XMLEncoding = $1; $XMLEncoding =~ s/["']//g;
-    if ( $XMLEncoding !~ /^(iso\-8859\-1|UTF\-8)$/ ) {
-      ReportError('Unsupported XML encoding');
-    }
-  }
-  if ( $Header =~ /standalone=("[^"]+"|'[^']+')/ ) {
-    $XMLMode = $1; $XMLMode =~ s/["']//g;
-    if ( $XMLMode !~ /(yes|no)\b/ ) {
-      ReportError('Unsupported standalone declaration');
-    }
-  }
-
-  # Display header settings
-  print "XML version '$XMLVersion', encoding '$XMLEncoding', standalone" .
-        " '$XMLMode'...\n" if ( $Verbose );
-}
-
-
-# ------------------------------------------------------------------------------
-#   CheckDeclaration - Validate the <!... > declaration container
-#                      NOTE: This procedure needs further work if required
-# ------------------------------------------------------------------------------
-sub CheckDeclaration {
-
-  # Passed parameter 1 is the container
-  my $Container = shift;
-  # Passed parameter 2 is the line number
-  my $LineNumber = shift;
-
-  # Local variable(s)
-  my $DeclarationType = '';
-
-  # Check and display an error if invalid
-  if ( ($DeclarationType) = $Container !~ /^\!(DOCTYPE|ENTITY)\b/ ) {
-    ReportError("Unrecognised XML declaration starting on line $LineNumber");
-  }
-}
-
-
-# ------------------------------------------------------------------------------
-#   CheckElement - Validate the element container
-# ------------------------------------------------------------------------------
-sub CheckElement {
-
-  # Passed parameter 1 is the container
-  my $Container = shift;
-  # Passed parameter 2 is the line number
-  my $LineNumber = shift;
-
-  # Local variable(s)
-  my $ElementName    = '';
-  my $AttributeName  = '';
-  my $AttributeValue = '';
-  my $StartQuote     = '';
-  my $EndQuote       = '';
-  my $ForbiddenQuote = '';
-  my %Names          = ();
-
-  # Extract and remove the element name, then check it for illegal
-  #  chacters
-  $Container =~ s/^\/?([^\s]+)\s?//;
-  $ElementName = $1;
-  if ( $ElementName =~ /[^a-z0-9_:\.\-]/i ) {
-    ReportError("XML element starting on line $LineNumber has an illegal name");
-  }
-
-  # If defined, check attributes of element fields. Extract, remove
-  #  and test the LHS and RHS fields of '=' assignments in turn
-  while ( $Container =~ s/([^=]+)=(['"])// ) {
-
-    $AttributeName = $1; $StartQuote = $2;
-    $ForbiddenQuote = ($StartQuote eq '"') ? '"' : "'";
-
-    # Check the attribute name for illegal characters
-    if ( $AttributeName =~ /[^a-z0-9_:\.\-]/i ) {
-      ReportError("XML element starting on line $LineNumber has an illegal attribute name");
-    }
-    # Check the attribute name for duplicates and note unique ones
-    if ( exists($Names{$AttributeName}) ) {
-      ReportError("XML element starting on line $LineNumber has a duplicate attribute name");
-    }
-    $Names{$AttributeName} = ''; # Value unimportant for purpose
-
-    # Extract and remove the attribute value, restoring the container
-    #  field appropriately for the next iteration
-    if ( $Container =~ s/([^=]+)// ) {
-      $AttributeValue = $1;
-      $AttributeValue =~ s/(['"])\s?([^'"]*)$//;
-      $EndQuote = $1; $Container = $2 . $Container;
-
-      # Check the attribute value for illegal characters
-      if ( $AttributeValue =~ /[<>$ForbiddenQuote]/ or
-           ($AttributeValue =~ /&/ and
-            $AttributeValue !~ /&(amp|lt|gt|apos|quot|\#[0-9]{3}|\#x[A-Fa-f0-9]{2});/) ) {
-        ReportError("XML element starting on line $LineNumber has an illegal attribute value");
-      }
-      # Check for misquoted attribute value
-      unless ( $StartQuote eq $EndQuote ) {
-        ReportError("XML element starting on line $LineNumber has a misquoted attribute value");
-      }
-    }
-
-  }
-}
-
-
-# ------------------------------------------------------------------------------
-#   CheckValue - Check the XML value field for illegal characters
-# ------------------------------------------------------------------------------
-sub CheckValue {
-
-  # Passed parameter 1 is the value
-  my $Field = shift;
-  # Passed parameter 2 is the line number
-  my $LineNumber = shift;
-
-  # Local variable(s)
-  my $BadLTGT      = ( $Field =~ /[<>]/ ) ? 1 : 0;
-  my $BadAmpersand = ( $Field =~ /&/ and
-                       $Field !~ /&(amp|lt|gt|apos|quot|\#[0-9]{3}|\#x[A-Fa-f0-9]{2});/ ) ? 1 : 0;
-
-  # Check and display an error if invalid
-  if ( $BadLTGT or $BadAmpersand ) {
-    ReportError("XML value field starting on line $LineNumber contains illegal characters");
-  }
-}
-
-
-# ------------------------------------------------------------------------------
-#   ExtractAttributes - Inspect and extract the attributes from elements
-# ------------------------------------------------------------------------------
-sub ExtractAttributes {
-
-  # Passed parameter 1 is the container
-  my $Container = shift;
-  # Passed parameter 2 is the current path
-  my $Path = shift;
-
-  # Local variable(s)
-  my $Attributes = 0;
-  my $AttributeName = '';
-  my $AttributeValue = '';
-
-  # If defined, check attributes of element fields. Extract, remove
-  #  and test the LHS and RHS fields of '=' assignments in turn
-  while ( $Container =~ s/([^=]+)=['"]// ) {
-    # Store the attribute name
-    $AttributeName = $1;
-
-    # Extract and remove the attribute value, restoring the container
-    #  field appropriately for the next iteration
-    if ( $Container =~ s/([^=]+)// ) {
-      $AttributeValue = $1;
-      $AttributeValue =~ s/['"]\s?([^'"]*)$//;
-      $Container = $1 . $Container;
-
-      # Update the item list in the current node record and then save
-      #  both the attribute name and its value
-      push ( @{ $XmlNodeTree{$Path}{ITEMS}{ATTRIBUTES} },  $AttributeName );
-      $XmlNodeTree{$Path}{ATTRIBUTES}{$AttributeName} = $AttributeValue;
-      $Attributes++;
-    }
-  }
-
-  return ($Attributes);
-}
-
-
-# ------------------------------------------------------------------------------
-#   PUBLIC: ListXmlHash - List contents of the structure, using safe recursion
-# ------------------------------------------------------------------------------
-sub ListXmlHash {
-
-  # Passed parameter 1 is the requested node start point
-  my $NodeKey = shift;
-
-  # Local variable(s)
-  my ($NodeName) = $NodeKey =~ /([^{]+)$/;;
-  my @NodeKeys   = @{ $XmlNodeTree{$NodeKey}{ITEMS}{ELEMENTS} };
-  my $NodeValue  = $XmlNodeTree{$NodeKey}{VALUE};
-  my $NodeItem   = '';
-  my @Markup     = ('', '@');
-
-  # Initially display the 'listing structure' message
-  if ( $RecursionDepth == 0 ) { print "Listing the data structure:\n\n"; }
-
-  # Remove the reference number from the node name
-  unless ( $ShowIds ) { $NodeName = GetXmlName($NodeName); }
-
-  # Display the element name and optional value
-  if ( not defined $NodeValue ) {
-    printf " %s- $NodeName\n", ' ' x ($RecursionDepth * 2);
-  } else {
-    printf " %s- $NodeName = '$NodeValue'\n", ' ' x ($RecursionDepth * 2);
-  }
-
-  # Selectively display attributes
-  foreach $NodeItem ( @{ $XmlNodeTree{$NodeKey}{ITEMS}{ATTRIBUTES} } ) {
-    printf "   %s%s$NodeItem %s= '$XmlNodeTree{$NodeKey}{ATTRIBUTES}{$NodeItem}'\n",
-             ' ' x ($RecursionDepth * 2), $Markup[1 - $ShowIds], $Markup[$ShowIds];
-  }
-
-  # List content of the current node by recursion within limits
-  foreach $NodeItem ( @NodeKeys ) {
-    if ( ++$RecursionDepth > $RecursionLimit ) {
-      ReportError("Recursion depth of $RecursionLimit exceeded");
-    } else {
-      # Interrogate the next level of the hierarchy
-      ListXmlHash("$NodeKey}{$NodeItem");
-    }
-    $RecursionDepth--;
-  }
-}
-
-
-# ------------------------------------------------------------------------------
-#   DetermineStructPath - Determine the structure path key
-# ------------------------------------------------------------------------------
-sub DetermineStructPath {
-
-  # Passed parameter 1 is the level
-  my $RequestedLevel = shift;
-
-  # Local variable(s)
-  my $LevelPointer = 0;
-  my $Result       = 'ROOT';
-
-  # Build the path and remove the outermost pair of braces, else return
-  #  the root node
-  if ( $RequestedLevel > 0 ) {
-    $Result = '';
-    while ( $LevelPointer <= $RequestedLevel ) {
-      $Result = $Result . '{' . $PathStack[$LevelPointer++] . '}';
-    }
-    $Result =~ s/(^{|}$)//g;
-  }
-
-  return ($Result);
-}
-
-
-# ------------------------------------------------------------------------------
-#   'TranslateXPath' - Translates the specified XPath into the nearest match
-#                       access key
-# ------------------------------------------------------------------------------
-sub TranslateXPath {
-
-  # Passed parameter 1 is the specified XPath
-  my $Path = shift;
-
-  # Local variable(s)
-  my @XPathTokens  = [];
-  my $Token        = '';
-  my $Key          = '';
-  my $ResolvedPath = 'ROOT';
-
-  if ( $Path =~ s/^\/// ) {
-    # Determine the key lookup for absolute paths
-    @XPathTokens = split('/', $Path);
-    foreach $Token ( @XPathTokens ) {
-      foreach $Key ( @{ $XmlNodeTree{$ResolvedPath}{ITEMS}{ELEMENTS} } ) {
-        if ( $Key eq $Token or $Key =~ /$Token/ ) {
-          $ResolvedPath = $ResolvedPath . '}{' . $Key;
-          last;
-        }
-      }
-    }
-    $Path = $ResolvedPath;
-  } else {
-    ReportError('Unsupported or badly formed XPath');
-  }
-
-  # Display the translated access key when in debug mode
-  if ( $DebugMode ) { print "Key: '$Path'\n"; }
-
-  return ($Path);
-}
-
-
-# ------------------------------------------------------------------------------
-#   PUBLIC: 'GetXmlName' - Returns the XML node name without uniquifier(s)
-# ------------------------------------------------------------------------------
-sub GetXmlName {
-
-  # Passed parameter 1 is the specified XML node
-  my $XmlNode = shift;
-
-  $XmlNode =~ s/\[\d+\]//g;
-
-  return ($XmlNode);
-}
-
-
-# ------------------------------------------------------------------------------
-#   PUBLIC: 'ChangeRelativePath' - Sets and returns the relative path
-# ------------------------------------------------------------------------------
-sub ChangeRelativePath {
-
-  # Passed parameter 1 is the specified path stem
-  $RelativePath = shift;
-
-  return ($RelativePath);
-}
-
-
-# ------------------------------------------------------------------------------
-#   PUBLIC: 'GetXmlNodeList' - Return child node list for the specified parent
-#                               node. Append '@' character to get attributes
-# ------------------------------------------------------------------------------
-sub GetXmlNodeList {
-
-  # Passed parameter 1 is the requested node
-  my $NodeKey = shift;
-
-  # Local variable(s)
-  my $NodeType  = ( $NodeKey =~ s/@// ) ? 'ATTRIBUTES' : 'ELEMENTS';
-  my $ParentKey = '';
-  my $Key       = '';
-  my $MatchNode = '';
-  my @Nodes     = ();
-
-  # Determine nodename search or specific lookup
-  if ( $NodeKey =~ s/^\/\//\// ) {
-
-    # Translate the XPath, then split it into the parent key and search element
-    $ParentKey = TranslateXPath($NodeKey);
-    if ( $ParentKey =~ s/\}\{([a-z0-9\.\-\_]+)\[1\]$// ) { $MatchNode = $1; }
-
-    # Conditionally search for matching keys and store full paths of matches
-    unless ( $MatchNode eq '' or $NodeKey !~ /$MatchNode$/ ) {
-      foreach $Key ( @{ $XmlNodeTree{$ParentKey}{ITEMS}{$NodeType} } ) {
-        if ( $Key =~ /$MatchNode\[\d+\]/ ) { push @Nodes, "$ParentKey}{$Key"; }
-      }
-    }
-
-  } else {  # Specific look-up
-
-    # Conditionally prepend the current relative path
-    unless ( $NodeKey =~ /^ROOT/ ) { $NodeKey = $RelativePath . $NodeKey; }
-
-    # Translate XPaths when specified
-    if ( $NodeKey =~ /\// ) { $NodeKey = TranslateXPath($NodeKey); }
-
-    # Lookup listing node if it exists
-    if ( exists($XmlNodeTree{$NodeKey}{ITEMS}{$NodeType}) ) {
-      @Nodes = @{ $XmlNodeTree{$NodeKey}{ITEMS}{$NodeType} };
-    } elsif ( $ShowWarnings ) {
-      ReportWarning('Unable to get node list due to non-existent access path');
-    }
-
-  }
-
-  # Display a list of nodes when in debug mode
-  if ( $DebugMode ) { foreach $Key ( @Nodes) { print "List node: '$Key'\n"; } }
-
-  return ( @Nodes );
-}
-
-
-# ------------------------------------------------------------------------------
-#   PUBLIC: 'GetXmlValue' - Extract the value of the specified element.
-#                           Prepend '@' character before name to get attributes
-# ------------------------------------------------------------------------------
-sub GetXmlValue {
-
-  # Passed parameter 1 is the requested node start point
-  my $NodeKey = shift;
-
-  # Local variable(s)
-  my $Attribute = ( $NodeKey =~ s/@(.+)$// ) ? $1 : '';
-  my $Value     = '';
-  my $NoValue   = '';
-
-  # Conditionally prepend the current relative path
-  unless ( $NodeKey =~ /^ROOT/ ) { $NodeKey = $RelativePath . $NodeKey; }
-
-  # Translate XPaths when specified
-  if ( $NodeKey =~ /\// ) { $NodeKey = TranslateXPath($NodeKey); }
-
-  # Lookup the value or attribute node if it exists. It must be coded like this
-  #  to avoid non-existent keys from being incorrectly added to the hash as a
-  #  side effect of the 'exists()' function
-  if ( exists($XmlNodeTree{$NodeKey}) ) {
-    # Now check and extract the element or attribute value
-    if ( $Attribute ne '' ) {
-      if ( exists($XmlNodeTree{$NodeKey}{ATTRIBUTES}{$Attribute}) ) {
-        $Value = $XmlNodeTree{$NodeKey}{ATTRIBUTES}{$Attribute};
-        unless ( defined($Value) ) { $Value = $NoValue; }
-      } elsif ( $ShowWarnings ) {
-        ReportWarning('Access attempted to a non-existent attribute name');
-      }
-    } else {
-      $Value = exists( $XmlNodeTree{$NodeKey}{VALUE} ) ?
-                 $XmlNodeTree{$NodeKey}{VALUE} : $NoValue;
-    }
-  } elsif ( $ShowWarnings ) {
-    ReportWarning("Access attempted to a non-existent element '$NodeKey'");
-  }
-
-  # Perform substitution of ampersand fields
-  if ( $Value =~ /&(quot|apos|lt|gt|amp|#x?[A-Fa-f0-9]+);/ ) {
-    $Value =~ s/&quot;/"/g;
-    $Value =~ s/&apos;/'/g;
-    $Value =~ s/&lt;/</g;
-    $Value =~ s/&gt;/>/g;
-    $Value =~ s/&amp;/&/g;
-    $Value =~ s/&#([A-Fa-f0-9]{3});/chr( scalar $1 )/ge;          # Only UTF-8!
-    $Value =~ s/&#x([A-Fa-f0-9]{2});/chr( hex( scalar $1 ) )/ge;  # Only UTF-8!
-  }
-
-  return ( $Value );
-}
-
-
-# ------------------------------------------------------------------------------
-#   PUBLIC: 'ConfigureXmlParser' - Configure aspects of module behaviour
-# ------------------------------------------------------------------------------
-sub ConfigureXmlParser {
-
-  # Passed parameter 1 is the hash array of options
-  my %XmlParserOptions = @_;
-
-  # Local variable(s)
-  my @Keys   = keys( %XmlParserOptions );
-  my $Item   = '';
-  my $Result = 0;
-
-  # Extract values and execute requested actions
-  foreach $Item ( @Keys ) {
-    if ($Item eq 'debug_mode' and $XmlParserOptions{$Item} ) {
-      $DebugMode = 1;
-    } elsif ( $Item eq 'recursion_limit' and $XmlParserOptions{$Item} > 0 ) {
-      $RecursionLimit = $XmlParserOptions{$Item};
-    } elsif ( $Item eq 'reset' and $XmlParserOptions{$Item} ) {
-      %XmlNodeTree = ( ROOT => { ITEMS => {ELEMENTS => [], ATTRIBUTES => []} } );
-      %XmlNodeTotals = ( TOTAL => 0, ELEMENTS => 0, ATTRIBUTES => 0 );
-      @PathStack = ( 'ROOT' );
-      $PathLevel = 0;
-      $RelativePath = '';
-    } elsif ( $Item eq 'show_ids' ) {
-      $ShowIds = ( $XmlParserOptions{$Item} ) ? 1 : 0;
-    } elsif ( $Item eq 'show_warnings' ) {
-      $ShowWarnings = ( ! $XmlParserOptions{$Item} ) ? 0 : 1;
-    } elsif ( $Item eq 'verbose' ) {
-      $Verbose = ( $XmlParserOptions{$Item} ) ? 1 : 0;
-    } else {
-      $Result = 1; # Flag a return code error
-    }
-  }
-  return ( $Result );
-}
-
-
-# ------------------------------------------------------------------------------
-#   ReportError - Reports an error message on STDOUT and forces exit(1)
-# ------------------------------------------------------------------------------
-sub ReportError {
-
-  # Passed parameter 1 is the error message
-  my $ErrorMessage = shift;
-
-  print "ERROR (xmlparser): $ErrorMessage - aborting!\n\n";
-  exit 1;
-}
-
-
-# ------------------------------------------------------------------------------
-#   ReportWarning - Reports a warning message on STDOUT
-# ------------------------------------------------------------------------------
-sub ReportWarning {
-
-  # Passed parameter 1 is the warning message
-  my $WarningMessage = shift;
-
-  print "WARNING (xmlparser): $WarningMessage!\n\n";
-  $Warnings++;
-}
-
-1;
-
-__END__
-
-
-# ------------------------------------------------------------------------------
-#   POD section (formatting is sensitive to blankline whitespace!)
-# ------------------------------------------------------------------------------
-
-=pod
-
-=head1 NAME
-
-xmlparser - Standalone XML parser with hash array output
-
-=head1 SYNOPSIS
-
-Example usage:
-
-  # Reference the module
-  use xmlparser;
-
-  # Configure parser options, parse the file and list its structure
-  ConfigureXmlParser( verbose => 0, reset => 1 );
-  RunXmlParser('my.xml');
-  ListXmlHash('ROOT');
-
-  # Access specific groups of elements
-  my @MyElements = GetXmlNodeList('/myxml/mynames');
-  my $Element    = '';
-  my $Attribute  = '';
-
-  foreach $Element ( @MyElements ) {
-    ChangeRelativePath('/myxml/mynames/');
-    printf "Element '%s'='%s'\n", GetXmlName($Element), GetXmlValue($Element);
-
-    foreach $Attribute ( GetXmlNodeList("\@$Element") ) {
-      ChangeRelativePath("/myxml/mynames/$Element/");
-      printf "Attribute '$Attribute'='%s'\n", GetXmlValue("\@$Attribute");
-    }
-  }
-
-=head1 DESCRIPTION
-
-In the absence of complete documentation, this section contains the
-best source of information.
-
-=head2 DOCUMENTATION
-
-Documentation about this module does not yet exist for developers
-within ARM Limited, but this section will provide essential clues
-to the usage.
-
-=head2 PRINCIPLES
-
-This multi-line parser will extract elements and value text separated
-by <tagged_delimeters>. XML directives and declarations are treated as
-exceptions and these values will not be added to the hash array.
-
-The parsing algorithm alternates between these two states:
-
-=over 3
-
-=item 1.
-
-  Accumulate value fields until detection of '<' character and
-  then change to the 'in-container' state.
-
-=item 2.
-
-  Accumulate element fields until detection of '>' character and
-  then change to the 'in-value' state if an end of element is detected.
-
-=back
-
-Upon successfully identifying the closing brace of an element field,
-a new item is added to the child element list at the current level of
-hierarchy. A new hash key, bearing the element name, is added and
-the new hierarchical path is pushed onto the stack. For hierarchical
-reference, the current path and parent path are updated. Attributes
-are extracted and placed into a separate key-value node, using the
-same principles. The parser changes state to accumulate text fields.
-Upon closure of the element container, i.e. the next opening brace,
-the accumulated text is assigned as the value of the current element.
-Also upon this event, the path stack is popped and hierarchical paths
-are re-evaluated. Every extracted field is checked for legal composition.
-Elements and attributes are checked for wellformedness.
-
-The following example will show the relationship:
-
-B<XML source:>
-
-  <cfgfile>
-    <my_element animal="dog"/>
-    <my_element>
-      cat
-    </my_element>
-  </cfgfile>
-
-B<Storage structure:>
-
-  my %XmlNodeTree = (
-                      ROOT => {
-                        ITEMS => {
-                          ELEMENTS => [ cfgfile[1] ],
-                          ATTRIBUTES => []
-                        }
-                      }
-                      ROOT}{cfgfile[1] => {
-                        ITEMS => {
-                          ELEMENTS => [ my_element[1], my_element[2] ],
-                          ATTRIBUTES => []
-                        }
-                      }
-                      ROOT}{cfgfile[1]}{my_element[1] => {
-                        ITEMS => {
-                          ELEMENTS => [],
-                          ATTRIBUTES => [ animal ]
-                        }
-                        ATTRIBUTES => {
-                          animal => 'dog'
-                        }
-                      }
-                      ROOT}{cfgfile[1]}{my_element[2] => {
-                        ITEMS => {
-                          ELEMENTS => [],
-                          ATTRIBUTES => []
-                        }
-                        VALUE => 'cat'
-                      }
-                    );
-
-B<Extracted structure:>
-
-  - ROOT
-    - cfgfile
-      - my_element
-        @value = 'dog'
-      - my_element = 'cat'
-
-
-Note that data is stored in the hash array using a pseudo hierarchical
-method. This makes it very simple to use grep when needing to find
-specifically named elements.
-
-To interrogate the hash array, it is recommended to use the public
-access functions GetXmlNodes() and GetXmlValue(). These functions will
-translate a basic XPath notation into keys for hash access and perform
-substitution of escaped character sequences.
-
-=head1 FUNCTIONS
-
-Currently, there are only a few public methods available. This section
-describes each one.
-
-=head2 ConfigureXmlParser(<key-value pairs>)
-
-Use this procedure to modify the behaviour of the parser, e.g. to reset
-the hash array. It accepts the following key-value pairs, also shown in
-the above example:
-
-=over 3
-
-=item *
-
-debug_mode => <integer: 0|1> - show debugging information.
-
-=item *
-
-recursion_limit => <integer: 1..n> - for the B<ListXmlHash()> fn.
-
-=item *
-
-reset => <integer: 0|1> - resets the hash and stack.
-
-=item *
-
-verbose => <integer: 0|1> - modifies verbosity, e.g. quiet mode.
-
-=item *
-
-show_ids => <integer: 0|1> - shows actual hash keynames.
-
-=item *
-
-show_warnings => <integer: 0|1> - control reports of warnings.
-
-=back
-
-Further options may be added over time.
-
-=head2 RunXmlParser(<xml_filename>)
-
-Use this procedure to read in the specified XML file. Ensure that
-you reset the hash array before attempting to read another file - see
-B<ConifigureXmlParser()>.
-
-=head2 ListXmlHash(<starting_key>)
-
-Use this procedure to verify the extraction process. All data is
-contained under the B<'ROOT'> node, so this is often the only key
-that you should specify.
-
-=head2 ChangeRelativePath(<xpath or key>)
-
-This function sets the relative path to be prepended to the specified
-argument when calling the B<GetXmlNodeList()> and B<GetXmlValue()>
-public access functions. Building XPaths and keys is more managable
-this way.
-
-=head2 GetXmlNodeList(<xpath or key>)
-
-Use this function to obtain the list of child elements or a list of
-attributes under the specified hierarchical level. By specifying the
-'@' character in the XPath or at the end of the key, you can request
-attributes instead of elements. Access to a non-existent xpath or key
-will return a zero-item list.
-
-=head2 GetXmlValue(<xpath or key>)
-
-Use this function to obtain the value of the element or attribute
-under the specified hierarchical level. By specifying the '@' character
-at the start of the attribute name (i.e. the rightmost item in the
-XPath or key), you can request attributes instead of elements. Access
-to a non-existent xpath or key will return a zero-length string. Access
-to elements or attributes without value will return a zero-length string.
-
-The following 'escaped' characters will be substituted to their
-true ASCII character:
-
-=over 3
-
-=item *
-
-&quot; -> "
-
-=item *
-
-&apos; -> '
-
-=item *
-
-&lt; -> <
-
-=item *
-
-&gt; -> >
-
-=item *
-
-&amp; -> &
-
-=item *
-
-&#x<2_hex_chars>; -> equivalent hexadecimal character
-
-=item *
-
-&#<3_dec_chars>; -> equivalent decimal character
-
-=back
-
-=head2 GetXmlName(<item string>)
-
-Removes the uniquifying index from the hash key item and returns the
-originally named item.
-
-=head2 Direct hash access
-
-Knowing the format of key structure will allow you to perform access
-to the hash array directly. You always need to know something about the
-information structure in order to specify an XPath or key. This is
-true even when letting XSLT do the work!
-
-With reference to the example shown above, to access the 2nd element,
-you would need to recreate this key:
-
-  # Direct access of an element
-  my $Value = $XmlNodeTree{'ROOT}{cfgfile[1]}{my_element[2]'}{VALUE};
-
-  # Direct access of an attribute
-  my $Attribute = $XmlNodeTree{'ROOT}{cfgfile[1]}{my_element[1]'}{ATTRIBUTES}{animal};
-
-
-To access the desired positional element without hardcoding the node
-keys, you could try resolving this through the appropriate ITEMS array
-which records the ordering of all child items at the access level.
-Examples of this are shown below:
-
-  # Set-up
-  use xmlparser;                       # Load the XML parser module
-  use xmlparser qw ( %XmlNodeTree );   # Request direct hash access
-
-  # Indirectly access the 2nd 'my_element' element
-  my $EI = $XmlNodeTree{'ROOT}{cfgfile[1]'}{ITEMS}{ELEMENTS}[1];
-  my $Value = $XmlNodeTree{"ROOT}{cfgfile[1]}{$EI"}{VALUE};
-
-  # Indirectly access the 1st attribute of the 1st element
-  my $EI = $XmlNodeTree{'ROOT}{cfgfile[1]'}{ITEMS}{ELEMENTS}[0];
-  my $AI = $XmlNodeTree{"ROOT}{cfgfile[1]}{$EI"}{ITEMS}{ATTRIBUTES}[0];
-  my $Value = $XmlNodeTree{"ROOT}{cfgfile[1]}{$EI"}{ATTRIBUTES}{$AI};
-
-As will be appreciated, this is quite complicated! Therefore it is
-better to use the public access functions for ease of use. Your choice.
-
-=head1 SUPPORT
-
-The following support issues are noted under this section.
-
-=head2 Regarding XML
-
-This is a lightweight parser, compliant to only a subset of the
-XML 1.0 standard. Namespaces are supported at a basic level, that
-is, the ':' character is permitted in element names. The following
-support issues are defined below:
-
-=over 3
-
-=item 1.
-
-The ENTITY declaration is not fully implemented and there is no
-preprocessor for expanding macros instantiated by the '&MyFile;'
-notation.
-
-=item 2.
-
-The DOCTYPE declaration is not fully implemented and there is no
-support for DTD or XML-Schema. Checks can be performed efficiently
-by writing a customised checking procedure within the PERL domain.
-
-=item 4.
-
-Only the '<?xml ?>' processing instruction is supported as far as
-basic validation.
-
-=item 5.
-
-Only character sets 'iso-8859-1' and 'UTF-8' are accepted in the
-header check.
-
-=item 6.
-
-Elements embedded in the <emphasis>middle</emphasis> of value fields,
-like the 'emphasis' tag you have just read, are not supported. It will
-truncate the text value and prepend the remainder to the value of the
-next element.
-
-=back
-
-=head2 Regarding XPath and XPointer
-
-The XPath facility of the public access functions is only a basic
-provision. It only translates very simple XPaths into access-key
-notation, and it does not support any of the XPath functions. The
-XPointer notation allows indexed dereferencing of specific elements.
-This is sufficient to get the values of elements and attributes.
-Some examples of XPath and XPointer interpretations are shown below:
-
-  '/myxml'    = 'ROOT}{myxml[1]'                         # Absolute
-  '/myxml[1]' = 'ROOT}{myxml[1]'
-
-  'myxml'     = 'myxml[1]'                               # Relative
-  'myxml[2]   = 'myxml[2]'
-
-  '//myxml' = [ 'ROOT}{myxml[1]' 'ROOT}{myxml[2]' ... ]  # Search
-
-Generally speaking, the relationship is to convert '/' characters into
-'}{' brace-pairs, and to assume the first item when resolving non-indexed
-references.
-
-=head1 STATUS
-
-This version (1.00) is the current initial version, dated 11th January 2007.
-
-=head1 SEE ALSO
-
-This is a customised standalone module. There are no references to other
-modules from the developers community. Information for developers may be
-obtained through internal ARM documentation.
-
-=head1 COPYRIGHT
-
-Copyright 2006 ARM Limited. All rights reserved <support@arm.com>
-
-This library is free software; you can redistribute it and/or modify it
-under the same terms as Perl itself. However, because this file is supplied
-to support licenced IP from ARM Limited, please carefully check the terms
-and conditions defined in your legal agreement with ARM Limited.
-
-=cut
diff --git a/system/src/nanosoc_ahb_busmatrix/ipxact/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix.xml b/system/src/nanosoc_ahb_busmatrix/built/ipxact/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix.xml
similarity index 99%
rename from system/src/nanosoc_ahb_busmatrix/ipxact/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix.xml
rename to system/src/nanosoc_ahb_busmatrix/built/ipxact/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix.xml
index 3bc57212d847d7c1420b1fc8a1d6face80bad3f1..828ef10ee21f6c65e05d94bb2190fa6b9c355d37 100644
--- a/system/src/nanosoc_ahb_busmatrix/ipxact/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix.xml
+++ b/system/src/nanosoc_ahb_busmatrix/built/ipxact/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix.xml
@@ -4213,40 +4213,40 @@
          <spirit:displayName/>
          <spirit:description>File list for nanosoc_4x7_AhbMatrix</spirit:description>
          <spirit:file>
-            <spirit:name>../../../verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix.v</spirit:name>
+            <spirit:name>../../verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix.v</spirit:name>
             <spirit:fileType>verilogSource-2001</spirit:fileType>
             <spirit:isIncludeFile spirit:externalDeclarations="true">false</spirit:isIncludeFile>
          </spirit:file>
          <spirit:file>
-            <spirit:name>../../../verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix_default_slave.v</spirit:name>
+            <spirit:name>../../verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix_default_slave.v</spirit:name>
             <spirit:fileType>verilogSource-2001</spirit:fileType>
          </spirit:file>
          <spirit:file>
-            <spirit:name>../../../verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MasterInput.v</spirit:name>
+            <spirit:name>../../verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MasterInput.v</spirit:name>
             <spirit:fileType>verilogSource-2001</spirit:fileType>
          </spirit:file>
          <spirit:file>
-            <spirit:name>../../../verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_adp.v</spirit:name>
+            <spirit:name>../../verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_adp.v</spirit:name>
             <spirit:fileType>verilogSource-2001</spirit:fileType>
          </spirit:file>
          <spirit:file>
-            <spirit:name>../../../verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_dma.v</spirit:name>
+            <spirit:name>../../verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_dma.v</spirit:name>
             <spirit:fileType>verilogSource-2001</spirit:fileType>
          </spirit:file>
          <spirit:file>
-            <spirit:name>../../../verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_dma2.v</spirit:name>
+            <spirit:name>../../verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_dma2.v</spirit:name>
             <spirit:fileType>verilogSource-2001</spirit:fileType>
          </spirit:file>
          <spirit:file>
-            <spirit:name>../../../verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_cpu.v</spirit:name>
+            <spirit:name>../../verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_cpu.v</spirit:name>
             <spirit:fileType>verilogSource-2001</spirit:fileType>
          </spirit:file>
          <spirit:file>
-            <spirit:name>../../../verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_Arbiter.v</spirit:name>
+            <spirit:name>../../verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_Arbiter.v</spirit:name>
             <spirit:fileType>verilogSource-2001</spirit:fileType>
          </spirit:file>
          <spirit:file>
-            <spirit:name>../../../verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_SlaveOutput.v</spirit:name>
+            <spirit:name>../../verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_SlaveOutput.v</spirit:name>
             <spirit:fileType>verilogSource-2001</spirit:fileType>
          </spirit:file>
       </spirit:fileSet>
diff --git a/system/src/nanosoc_ahb_busmatrix/ipxact/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix_lite.xml b/system/src/nanosoc_ahb_busmatrix/built/ipxact/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix_lite.xml
similarity index 99%
rename from system/src/nanosoc_ahb_busmatrix/ipxact/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix_lite.xml
rename to system/src/nanosoc_ahb_busmatrix/built/ipxact/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix_lite.xml
index 2b7fe0d9099e82bd4655e7f6fc5677feacf22c46..a8fbfa85b4f0edb84f76f3f0b0381b1ec4ca7aa2 100644
--- a/system/src/nanosoc_ahb_busmatrix/ipxact/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix_lite.xml
+++ b/system/src/nanosoc_ahb_busmatrix/built/ipxact/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix_lite.xml
@@ -3854,44 +3854,44 @@
          <spirit:displayName/>
          <spirit:description>File list for nanosoc_4x7_AhbMatrix_lite</spirit:description>
          <spirit:file>
-            <spirit:name>../../../verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix_lite.v</spirit:name>
+            <spirit:name>../../verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix_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/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix.v</spirit:name>
+            <spirit:name>../../verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix.v</spirit:name>
             <spirit:fileType>verilogSource-2001</spirit:fileType>
          </spirit:file>
          <spirit:file>
-            <spirit:name>../../../verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix_default_slave.v</spirit:name>
+            <spirit:name>../../verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix_default_slave.v</spirit:name>
             <spirit:fileType>verilogSource-2001</spirit:fileType>
          </spirit:file>
          <spirit:file>
-            <spirit:name>../../../verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MasterInput.v</spirit:name>
+            <spirit:name>../../verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MasterInput.v</spirit:name>
             <spirit:fileType>verilogSource-2001</spirit:fileType>
          </spirit:file>
          <spirit:file>
-            <spirit:name>../../../verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_adp.v</spirit:name>
+            <spirit:name>../../verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_adp.v</spirit:name>
             <spirit:fileType>verilogSource-2001</spirit:fileType>
          </spirit:file>
          <spirit:file>
-            <spirit:name>../../../verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_dma.v</spirit:name>
+            <spirit:name>../../verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_dma.v</spirit:name>
             <spirit:fileType>verilogSource-2001</spirit:fileType>
          </spirit:file>
          <spirit:file>
-            <spirit:name>../../../verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_dma2.v</spirit:name>
+            <spirit:name>../../verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_dma2.v</spirit:name>
             <spirit:fileType>verilogSource-2001</spirit:fileType>
          </spirit:file>
          <spirit:file>
-            <spirit:name>../../../verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_cpu.v</spirit:name>
+            <spirit:name>../../verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_cpu.v</spirit:name>
             <spirit:fileType>verilogSource-2001</spirit:fileType>
          </spirit:file>
          <spirit:file>
-            <spirit:name>../../../verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_Arbiter.v</spirit:name>
+            <spirit:name>../../verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_Arbiter.v</spirit:name>
             <spirit:fileType>verilogSource-2001</spirit:fileType>
          </spirit:file>
          <spirit:file>
-            <spirit:name>../../../verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_SlaveOutput.v</spirit:name>
+            <spirit:name>../../verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_SlaveOutput.v</spirit:name>
             <spirit:fileType>verilogSource-2001</spirit:fileType>
          </spirit:file>
       </spirit:fileSet>
diff --git a/system/src/nanosoc_ahb_busmatrix/built/nanosoc_ahb32_4x7.log b/system/src/nanosoc_ahb_busmatrix/built/nanosoc_ahb32_4x7.log
new file mode 100644
index 0000000000000000000000000000000000000000..2d118f3064f62efc3351a30426d74a527489ad87
--- /dev/null
+++ b/system/src/nanosoc_ahb_busmatrix/built/nanosoc_ahb32_4x7.log
@@ -0,0 +1,74 @@
+
+==============================================================
+=  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:05:36
+==============================================================
+
+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_4x7_AhbMatrix'
+ - 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/built/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/built/ipxact'
+ - IPXact source directory : '/research/AAA/ip_library/latest/Corstone-101/logical/cmsdk_ahb_busmatrix/ipxact/src'
+ - Overwrite mode          : enabled
+
+Deleting the '/home/dam1n19/Design/test1/secworks-sha256-project/nanosoc/system/src/nanosoc_ahb_busmatrix/built/verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix.v' file...
+Deleting the '/home/dam1n19/Design/test1/secworks-sha256-project/nanosoc/system/src/nanosoc_ahb_busmatrix/built/verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix_default_slave.v' file...
+Deleting the '/home/dam1n19/Design/test1/secworks-sha256-project/nanosoc/system/src/nanosoc_ahb_busmatrix/built/verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix_lite.v' file...
+Deleting the '/home/dam1n19/Design/test1/secworks-sha256-project/nanosoc/system/src/nanosoc_ahb_busmatrix/built/verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_Arbiter.v' file...
+Deleting the '/home/dam1n19/Design/test1/secworks-sha256-project/nanosoc/system/src/nanosoc_ahb_busmatrix/built/verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MasterInput.v' file...
+Deleting the '/home/dam1n19/Design/test1/secworks-sha256-project/nanosoc/system/src/nanosoc_ahb_busmatrix/built/verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_adp.v' file...
+Deleting the '/home/dam1n19/Design/test1/secworks-sha256-project/nanosoc/system/src/nanosoc_ahb_busmatrix/built/verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_cpu.v' file...
+Deleting the '/home/dam1n19/Design/test1/secworks-sha256-project/nanosoc/system/src/nanosoc_ahb_busmatrix/built/verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_dma.v' file...
+Deleting the '/home/dam1n19/Design/test1/secworks-sha256-project/nanosoc/system/src/nanosoc_ahb_busmatrix/built/verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_dma2.v' file...
+Deleting the '/home/dam1n19/Design/test1/secworks-sha256-project/nanosoc/system/src/nanosoc_ahb_busmatrix/built/verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_SlaveOutput.v' file...
+
+Deleting the '/home/dam1n19/Design/test1/secworks-sha256-project/nanosoc/system/src/nanosoc_ahb_busmatrix/built/ipxact/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix.xml' file...
+Deleting the '/home/dam1n19/Design/test1/secworks-sha256-project/nanosoc/system/src/nanosoc_ahb_busmatrix/built/ipxact/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix_lite.xml' file...
+
+Creating the bus matrix variant...
+
+ - Rendering 'nanosoc_4x7_AhbMatrix_lite.xml'
+ - Rendering 'nanosoc_4x7_SlaveOutput.v'
+ - Rendering 'nanosoc_4x7_AhbMatrix_default_slave.v'
+ - Rendering 'nanosoc_4x7_AhbMatrix.xml'
+ - Rendering 'nanosoc_4x7_MatrixDecode_cpu.v'
+ - Rendering 'nanosoc_4x7_Arbiter.v'
+ - Rendering 'nanosoc_4x7_AhbMatrix_lite.v'
+ - Rendering 'nanosoc_4x7_AhbMatrix.v'
+ - Rendering 'nanosoc_4x7_MatrixDecode_adp.v'
+ - Rendering 'nanosoc_4x7_MatrixDecode_dma2.v'
+ - Rendering 'nanosoc_4x7_MatrixDecode_dma.v'
+ - Rendering 'nanosoc_4x7_MasterInput.v'
+
+Done!
+
diff --git a/system/src/nanosoc_ahb_busmatrix/verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix.v b/system/src/nanosoc_ahb_busmatrix/built/verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix.v
similarity index 100%
rename from system/src/nanosoc_ahb_busmatrix/verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix.v
rename to system/src/nanosoc_ahb_busmatrix/built/verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix.v
diff --git a/system/src/nanosoc_ahb_busmatrix/verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix_default_slave.v b/system/src/nanosoc_ahb_busmatrix/built/verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix_default_slave.v
similarity index 100%
rename from system/src/nanosoc_ahb_busmatrix/verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix_default_slave.v
rename to system/src/nanosoc_ahb_busmatrix/built/verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix_default_slave.v
diff --git a/system/src/nanosoc_ahb_busmatrix/verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix_lite.v b/system/src/nanosoc_ahb_busmatrix/built/verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix_lite.v
similarity index 100%
rename from system/src/nanosoc_ahb_busmatrix/verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix_lite.v
rename to system/src/nanosoc_ahb_busmatrix/built/verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix_lite.v
diff --git a/system/src/nanosoc_ahb_busmatrix/verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_Arbiter.v b/system/src/nanosoc_ahb_busmatrix/built/verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_Arbiter.v
similarity index 100%
rename from system/src/nanosoc_ahb_busmatrix/verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_Arbiter.v
rename to system/src/nanosoc_ahb_busmatrix/built/verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_Arbiter.v
diff --git a/system/src/nanosoc_ahb_busmatrix/verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MasterInput.v b/system/src/nanosoc_ahb_busmatrix/built/verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MasterInput.v
similarity index 100%
rename from system/src/nanosoc_ahb_busmatrix/verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MasterInput.v
rename to system/src/nanosoc_ahb_busmatrix/built/verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MasterInput.v
diff --git a/system/src/nanosoc_ahb_busmatrix/verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_adp.v b/system/src/nanosoc_ahb_busmatrix/built/verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_adp.v
similarity index 100%
rename from system/src/nanosoc_ahb_busmatrix/verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_adp.v
rename to system/src/nanosoc_ahb_busmatrix/built/verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_adp.v
diff --git a/system/src/nanosoc_ahb_busmatrix/verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_cpu.v b/system/src/nanosoc_ahb_busmatrix/built/verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_cpu.v
similarity index 100%
rename from system/src/nanosoc_ahb_busmatrix/verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_cpu.v
rename to system/src/nanosoc_ahb_busmatrix/built/verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_cpu.v
diff --git a/system/src/nanosoc_ahb_busmatrix/verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_dma.v b/system/src/nanosoc_ahb_busmatrix/built/verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_dma.v
similarity index 100%
rename from system/src/nanosoc_ahb_busmatrix/verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_dma.v
rename to system/src/nanosoc_ahb_busmatrix/built/verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_dma.v
diff --git a/system/src/nanosoc_ahb_busmatrix/verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_dma2.v b/system/src/nanosoc_ahb_busmatrix/built/verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_dma2.v
similarity index 100%
rename from system/src/nanosoc_ahb_busmatrix/verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_dma2.v
rename to system/src/nanosoc_ahb_busmatrix/built/verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_dma2.v
diff --git a/system/src/nanosoc_ahb_busmatrix/verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_SlaveOutput.v b/system/src/nanosoc_ahb_busmatrix/built/verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_SlaveOutput.v
similarity index 100%
rename from system/src/nanosoc_ahb_busmatrix/verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_SlaveOutput.v
rename to system/src/nanosoc_ahb_busmatrix/built/verilog/nanosoc_4x7_AhbMatrix/nanosoc_4x7_SlaveOutput.v
diff --git a/system/src/nanosoc_ahb_busmatrix/ipxact/src/cmsdk_ahb_busmatrix_ipxact.xml b/system/src/nanosoc_ahb_busmatrix/ipxact/src/cmsdk_ahb_busmatrix_ipxact.xml
deleted file mode 100755
index f7280ffe8d3f0d5187368bab6ad257c8a818b10b..0000000000000000000000000000000000000000
--- a/system/src/nanosoc_ahb_busmatrix/ipxact/src/cmsdk_ahb_busmatrix_ipxact.xml
+++ /dev/null
@@ -1,1050 +0,0 @@
-<?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 <<bus_matrix_name>>     -->
-<!--                                                                                -->
-<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    -->
-
-<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><<bus_matrix_name>></spirit:name>
-   <spirit:version>r0p0_0</spirit:version>
-
-   <spirit:busInterfaces>
-
-      <!--Slave interfaces -->
-//---------------------------------------- << start in >> ---------------------------------------
-
-      <spirit:busInterface>
-         <spirit:name>AHBLiteTarget_Slave_<<si_name>></spirit:name>
-         <spirit:description>Slave port <<si_name>></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_<<si_name>>_MM"/>
-//---------------------------------------- << start out >> --------------------------------------
-//------------------------------------- << start connection >> ------------------------------------
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master_<<mi_name>>" spirit:opaque="true"/>
-//------------------------------------- << end connection >> --------------------------------------
-//---------------------------------------- << end out >> ----------------------------------------
-         </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<<si_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HADDR</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HADDR<<si_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HTRANS</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HTRANS<<si_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HWRITE</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HWRITE<<si_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HSIZE</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HSIZE<<si_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HBURST</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HBURST<<si_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HPROT</spirit:name>
-//---------------------------------------- << start excl >> -------------------------------------
-                 <spirit:vector>
-                    <spirit:left>3</spirit:left>
-                    <spirit:right>0</spirit:right>
-                 </spirit:vector>
-//---------------------------------------- << end excl >> -------------------------------------
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HPROT<<si_name>></spirit:name>
-//---------------------------------------- << start excl >> -------------------------------------
-                 <spirit:vector>
-                    <spirit:left>3</spirit:left>
-                    <spirit:right>0</spirit:right>
-                 </spirit:vector>
-//---------------------------------------- << end excl >> -------------------------------------
-               </spirit:physicalPort>
-            </spirit:portMap>
-//---------------------------- << start unalign >> -----------------------------
-
-            <!-- HUNALIGN<<si_name>> unmapped -->
-            <!-- HBSTRB<<si_name>> unmapped -->
-
-//----------------------------- << end unalign >> ------------------------------
-
-            <!-- HMASTER<<si_name>> unmapped -->
-
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HWDATA</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HWDATA<<si_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HMASTLOCK</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HMASTLOCK<<si_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HREADY</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HREADY<<si_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-//---------------------------------------- << start user >> -------------------------------------
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HAUSER</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HAUSER<<si_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HWUSER</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HWUSER<<si_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-//---------------------------------------- << end user >> ---------------------------------------
-
-            <!--  Outputs -->
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HRDATA</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HRDATA<<si_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HREADYOUT</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HREADYOUT<<si_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HRESP</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HRESP<<si_name>></spirit:name>
-                 <spirit:vector>
-                    <spirit:left>0</spirit:left>
-                    <spirit:right>0</spirit:right>
-                 </spirit:vector>
-               </spirit:physicalPort>
-            </spirit:portMap>
-//---------------------------------------- << start user >> -------------------------------------
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HRUSER</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HRUSER<<si_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-//---------------------------------------- << end user >> ---------------------------------------
-         </spirit:portMaps>
-      </spirit:busInterface>
-//----------------------------------------- << end in >> ----------------------------------------
-
-        <!--Master interfaces -->
-//---------------------------------------- << start out >> --------------------------------------
-
-      <spirit:busInterface>
-         <spirit:name>AHBLiteTarget_Master_<<mi_name>></spirit:name>
-         <spirit:description>Master port <<mi_name>></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_<<mi_name>>_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<<mi_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HADDR</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HADDR<<mi_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HTRANS</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HTRANS<<mi_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HWRITE</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HWRITE<<mi_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HSIZE</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HSIZE<<mi_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HBURST</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HBURST<<mi_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HPROT</spirit:name>
-//---------------------------------------- << start excl >> -------------------------------------
-                 <spirit:vector>
-                    <spirit:left>3</spirit:left>
-                    <spirit:right>0</spirit:right>
-                 </spirit:vector>
-//---------------------------------------- << end excl >> -------------------------------------
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HPROT<<mi_name>></spirit:name>
-//---------------------------------------- << start excl >> -------------------------------------
-                 <spirit:vector>
-                    <spirit:left>3</spirit:left>
-                    <spirit:right>0</spirit:right>
-                 </spirit:vector>
-//---------------------------------------- << end excl >> -------------------------------------
-               </spirit:physicalPort>
-            </spirit:portMap>
-//---------------------------- << start unalign >> -----------------------------
-
-            <!-- HUNALIGN<<mi_name>> unmapped -->
-
-            <!-- HBSTRB<<mi_name>> unmapped -->
-
-//----------------------------- << end unalign >> ------------------------------
-
-            <!-- HMASTER<<mi_name>> unmapped -->
-
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HWDATA</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HWDATA<<mi_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HMASTLOCK</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HMASTLOCK<<mi_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HREADY</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HREADYMUX<<mi_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-//---------------------------------------- << start user >> -------------------------------------
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HAUSER</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HAUSER<<mi_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HWUSER</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HWUSER<<mi_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-//---------------------------------------- << end user >> ---------------------------------------
-
-            <!--  Inputs -->
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HRDATA</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HRDATA<<mi_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HREADYOUT</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HREADYOUT<<mi_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HRESP</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HRESP<<mi_name>></spirit:name>
-                 <spirit:vector>
-                    <spirit:left>0</spirit:left>
-                    <spirit:right>0</spirit:right>
-                 </spirit:vector>
-               </spirit:physicalPort>
-            </spirit:portMap>
-//---------------------------------------- << start user >> -------------------------------------
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HRUSER</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HRUSER<<mi_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-//---------------------------------------- << end user >> ---------------------------------------
-         </spirit:portMaps>
-      </spirit:busInterface>
-//---------------------------------------- << end out >> ----------------------------------------
-
-      <!--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>
-//--------------------------------- << start vendor_extension >> ---------------------------------
-//---------------------------------- << end vendor_extension >> ----------------------------------
-
-//---------------------------- << start remap_used >> -------------------------------
-   <spirit:remapStates>
-
-//---------------------------- << start remap_state_ipxact >> -------------------------------
-      <spirit:remapState>
-          <spirit:name><<remap_name>></spirit:name>
-          <spirit:description>Remap state <<remap_name>></spirit:description>
-          <spirit:remapPorts>
-//---------------------------- << start remap_bit_ipxact >> -------------------------------
-             <spirit:remapPort spirit:portNameRef="REMAP" spirit:portIndex="<<top_remap_bit>>"><<top_remap_bitvalue>></spirit:remapPort>
-//---------------------------- << end remap_bit_ipxact >> -------------------------------
-          </spirit:remapPorts>
-      </spirit:remapState>
-//------------------------------ << end remap_state_ipxact >> -------------------------
-
-   </spirit:remapStates>
-
-//----------------------------- << end remap_used >> --------------------------------
-   <spirit:addressSpaces>
-//---------------------------------------- << start out >> ----------------------------------------
-
-     <spirit:addressSpace>
-          <spirit:name>AHBLiteTarget_Master_<<mi_name>>_AS</spirit:name>
-          <spirit:description><<mi_name>> address space</spirit:description>
-          <spirit:range><<address_space_range>></spirit:range>
-          <spirit:width><<data_v>></spirit:width>
-          <spirit:segments>
-//---------------------------------------- << start segments >> ----------------------------------------
-             <spirit:segment>
-                <spirit:name><<mi_name>>_<<segment_name>></spirit:name>
-                <spirit:addressOffset><<segment_offset>></spirit:addressOffset>
-                <spirit:range><<segment_range>></spirit:range>
-             </spirit:segment>
-//---------------------------------------- << end segments >> ----------------------------------------
-          </spirit:segments>
-          <spirit:addressUnitBits>8</spirit:addressUnitBits>
-     </spirit:addressSpace>
-//---------------------------------------- << end out >> ----------------------------------------
-
-   </spirit:addressSpaces>
-
-   <spirit:memoryMaps>
-
-//---------------------------------------- << start in >> ----------------------------------------
-      <spirit:memoryMap>
-         <spirit:name>AHBLiteTarget_Slave_<<si_name>>_MM</spirit:name>
-         <spirit:description><<si_name>> memory map</spirit:description>
-
-//----------------------------- << start addr_map_ipxact >> ---------------------------
-//----------------------------- << start addr_region_ipxact >> ------------------------
-//----------------------------- << start remap_static >> ------------------------
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master_<<mi_name>>"
-                             spirit:segmentRef="<<mi_name>>_<<base_address>>_<<end_address>>">
-            <!-- Address_region <<address_map>> -->
-//---------------------------- << start remap_used >> -------------------------------
-            <spirit:name>AHBLiteTarget_Master_<<mi_name>>_<<base_address>>_0_state_always_SM</spirit:name>
-//---------------------------- << end remap_used >> -------------------------------
-//---------------------------- << start no_remap_used >> -------------------------------
-            <spirit:name>AHBLiteTarget_Master_<<mi_name>>_<<base_address>>_0_state_default_SM</spirit:name>
-//---------------------------- << end no_remap_used >> -------------------------------
-            <spirit:baseAddress><<base_address>></spirit:baseAddress>
-         </spirit:subspaceMap>
-
-//----------------------------- << end remap_static >> ------------------------
-//------------------------------ << end addr_region_ipxact >> -------------------------
-//----------------------------- << end addr_map_ipxact >> -----------------------------
-//---------------------------- << start remap_used >> -------------------------------
-//----------------------------- << start remap_state_ipxact >> -------------------------
-//----------------------------- << start addr_remap_and_normal_all_this_remap >> -------------------------
-         <spirit:memoryRemap spirit:state="<<remap_name>>">
-            <spirit:name>AHBLiteTarget_Slave_<<si_name>>_<<remap_name>>_remap_MM</spirit:name>
-            <spirit:description><<si_name>> <<remap_name>> remap</spirit:description>
-//----------------------------- << start remap_region_ipxact >> -----------------------
-            <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master_<<mi_name>>"
-                                spirit:segmentRef="<<mi_name>>_<<base_address>>_<<end_address>>">
-               <!-- <<region_type>> address_region <<address_map>> -->
-               <spirit:name>AHBLiteTarget_Master_<<mi_name>>_<<base_address>>_0_state_<<remap_name>>_SM</spirit:name>
-               <spirit:baseAddress><<base_address>></spirit:baseAddress>
-            </spirit:subspaceMap>
-//------------------------------ << end remap_region_ipxact >> -------------------------
-         </spirit:memoryRemap>
-
-//----------------------------- << end addr_remap_and_normal_all_this_remap >> ---------------------------
-//----------------------------- << end remap_state_ipxact >> -------------------------
-//---------------------------- << end remap_used >> -------------------------------
-      </spirit:memoryMap>
-
-//----------------------------------------- << end in >> ------------------------------------------
-   </spirit:memoryMaps>
-
-
-   <spirit:model>
-      <spirit:views>
-         <spirit:view>
-            <spirit:name>verilogsource</spirit:name>
-            <spirit:description><<bus_matrix_name>> bus matrix</spirit:description>
-            <spirit:envIdentifier>:*Simulation:</spirit:envIdentifier>
-            <spirit:envIdentifier>:*Synthesis:</spirit:envIdentifier>
-            <spirit:language>verilog</spirit:language>
-            <spirit:modelName><<bus_matrix_name>></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 -->
-
-//----------------------------------------- << start in >> ------------------------------------------
-         <spirit:port>
-            <spirit:name>HSEL<<si_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>in</spirit:direction>
-            </spirit:wire>
-         </spirit:port>
-         <spirit:port>
-            <spirit:name>HADDR<<si_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>in</spirit:direction>
-               <spirit:vector>
-                  <spirit:left><<addr>></spirit:left>
-                  <spirit:right>0</spirit:right>
-               </spirit:vector>
-            </spirit:wire>
-         </spirit:port>
-         <spirit:port>
-            <spirit:name>HTRANS<<si_name>></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<<si_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>in</spirit:direction>
-            </spirit:wire>
-         </spirit:port>
-         <spirit:port>
-            <spirit:name>HSIZE<<si_name>></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<<si_name>></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<<si_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>in</spirit:direction>
-               <spirit:vector>
-                  <spirit:left><<prot>></spirit:left>
-                  <spirit:right>0</spirit:right>
-               </spirit:vector>
-            </spirit:wire>
-         </spirit:port>
-//---------------------------- << start unalign >> -----------------------------
-         <spirit:port>
-            <spirit:name>HUNALIGN<<si_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>in</spirit:direction>
-               <spirit:driver>
-                  <spirit:defaultValue>0</spirit:defaultValue>
-               </spirit:driver>
-            </spirit:wire>
-         </spirit:port>
-         <spirit:port>
-            <spirit:name>HBSTRB<<si_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>in</spirit:direction>
-               <spirit:vector>
-                  <spirit:left><<bstrb>></spirit:left>
-                  <spirit:right>0</spirit:right>
-               </spirit:vector>
-               <spirit:driver>
-                  <spirit:defaultValue>0</spirit:defaultValue>
-               </spirit:driver>
-            </spirit:wire>
-         </spirit:port>
-//----------------------------- << end unalign >> ------------------------------
-         <spirit:port>
-            <spirit:name>HMASTER<<si_name>></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><<in>></spirit:defaultValue>
-               </spirit:driver>
-            </spirit:wire>
-         </spirit:port>
-         <spirit:port>
-            <spirit:name>HWDATA<<si_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>in</spirit:direction>
-               <spirit:vector>
-                  <spirit:left><<data>></spirit:left>
-                  <spirit:right>0</spirit:right>
-               </spirit:vector>
-            </spirit:wire>
-         </spirit:port>
-         <spirit:port>
-            <spirit:name>HMASTLOCK<<si_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>in</spirit:direction>
-            </spirit:wire>
-         </spirit:port>
-         <spirit:port>
-            <spirit:name>HREADY<<si_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>in</spirit:direction>
-            </spirit:wire>
-         </spirit:port>
-
-//---------------------------------------- << start user >> -------------------------------------
-         <spirit:port>
-            <spirit:name>HAUSER<<si_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>in</spirit:direction>
-               <spirit:vector>
-                  <spirit:left><<user>></spirit:left>
-                  <spirit:right>0</spirit:right>
-               </spirit:vector>
-            </spirit:wire>
-         </spirit:port>
-         <spirit:port>
-            <spirit:name>HWUSER<<si_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>in</spirit:direction>
-               <spirit:vector>
-                  <spirit:left><<user>></spirit:left>
-                  <spirit:right>0</spirit:right>
-               </spirit:vector>
-            </spirit:wire>
-         </spirit:port>
-//---------------------------------------- << end user >> ---------------------------------------
-//----------------------------------------- << end in >> ----------------------------------------
-
-         <!-- Input signals of Master interfaces -->
-
-//----------------------------------------- << start out >> ----------------------------------------
-         <spirit:port>
-            <spirit:name>HRDATA<<mi_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>in</spirit:direction>
-               <spirit:vector>
-                  <spirit:left><<data>></spirit:left>
-                  <spirit:right>0</spirit:right>
-               </spirit:vector>
-            </spirit:wire>
-         </spirit:port>
-         <spirit:port>
-            <spirit:name>HREADYOUT<<mi_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>in</spirit:direction>
-            </spirit:wire>
-         </spirit:port>
-         <spirit:port>
-            <spirit:name>HRESP<<mi_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>in</spirit:direction>
-               <spirit:vector>
-                  <spirit:left><<resp>></spirit:left>
-                  <spirit:right>0</spirit:right>
-               </spirit:vector>
-            </spirit:wire>
-         </spirit:port>
-//---------------------------------------- << start user >> -------------------------------------
-         <spirit:port>
-            <spirit:name>HRUSER<<mi_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>in</spirit:direction>
-               <spirit:vector>
-                  <spirit:left><<user>></spirit:left>
-                  <spirit:right>0</spirit:right>
-               </spirit:vector>
-            </spirit:wire>
-         </spirit:port>
-//---------------------------------------- << end user >> ---------------------------------------
-//----------------------------------------- << end out >> ----------------------------------------
-
-         <!-- 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 -->
-
-//---------------------------------------- << start out >> --------------------------------------
-         <spirit:port>
-            <spirit:name>HSEL<<mi_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>out</spirit:direction>
-            </spirit:wire>
-         </spirit:port>
-         <spirit:port>
-            <spirit:name>HADDR<<mi_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>out</spirit:direction>
-               <spirit:vector>
-                  <spirit:left><<addr>></spirit:left>
-                  <spirit:right>0</spirit:right>
-               </spirit:vector>
-            </spirit:wire>
-         </spirit:port>
-         <spirit:port>
-            <spirit:name>HTRANS<<mi_name>></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<<mi_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>out</spirit:direction>
-            </spirit:wire>
-         </spirit:port>
-         <spirit:port>
-            <spirit:name>HSIZE<<mi_name>></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<<mi_name>></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<<mi_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>out</spirit:direction>
-               <spirit:vector>
-                  <spirit:left><<prot>></spirit:left>
-                  <spirit:right>0</spirit:right>
-               </spirit:vector>
-            </spirit:wire>
-         </spirit:port>
-//---------------------------- << start unalign >> -----------------------------
-         <spirit:port>
-            <spirit:name>HUNALIGN<<mi_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>out</spirit:direction>
-            </spirit:wire>
-         </spirit:port>
-         <spirit:port>
-            <spirit:name>HBSTRB<<mi_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>out</spirit:direction>
-               <spirit:vector>
-                  <spirit:left><<bstrb>></spirit:left>
-                  <spirit:right>0</spirit:right>
-               </spirit:vector>
-            </spirit:wire>
-         </spirit:port>
-//----------------------------- << end unalign >> ------------------------------
-         <spirit:port>
-            <spirit:name>HMASTER<<mi_name>></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<<mi_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>out</spirit:direction>
-               <spirit:vector>
-                  <spirit:left><<data>></spirit:left>
-                  <spirit:right>0</spirit:right>
-               </spirit:vector>
-            </spirit:wire>
-          </spirit:port>
-         <spirit:port>
-            <spirit:name>HMASTLOCK<<mi_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>out</spirit:direction>
-            </spirit:wire>
-         </spirit:port>
-         <spirit:port>
-            <spirit:name>HREADYMUX<<mi_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>out</spirit:direction>
-            </spirit:wire>
-         </spirit:port>
-//---------------------------------------- << start user >> -------------------------------------
-         <spirit:port>
-            <spirit:name>HAUSER<<mi_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>out</spirit:direction>
-               <spirit:vector>
-                  <spirit:left><<user>></spirit:left>
-                  <spirit:right>0</spirit:right>
-               </spirit:vector>
-            </spirit:wire>
-         </spirit:port>
-         <spirit:port>
-            <spirit:name>HWUSER<<mi_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>out</spirit:direction>
-               <spirit:vector>
-                  <spirit:left><<user>></spirit:left>
-                  <spirit:right>0</spirit:right>
-               </spirit:vector>
-            </spirit:wire>
-         </spirit:port>
-//---------------------------------------- << end user >> ---------------------------------------
-//---------------------------------------- << end out >> ----------------------------------------
-
-         <!-- Output signals of Slave interfaces -->
-
-//---------------------------------------- << start in >> ----------------------------------------
-         <spirit:port>
-            <spirit:name>HRDATA<<si_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>out</spirit:direction>
-               <spirit:vector>
-                  <spirit:left><<data>></spirit:left>
-                  <spirit:right>0</spirit:right>
-               </spirit:vector>
-            </spirit:wire>
-         </spirit:port>
-         <spirit:port>
-            <spirit:name>HREADYOUT<<si_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>out</spirit:direction>
-            </spirit:wire>
-         </spirit:port>
-         <spirit:port>
-            <spirit:name>HRESP<<si_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>out</spirit:direction>
-               <spirit:vector>
-                  <spirit:left><<resp>></spirit:left>
-                  <spirit:right>0</spirit:right>
-               </spirit:vector>
-            </spirit:wire>
-         </spirit:port>
-//---------------------------------------- << start user >> -------------------------------------
-         <spirit:port>
-            <spirit:name>HRUSER<<si_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>out</spirit:direction>
-               <spirit:vector>
-                  <spirit:left><<user>></spirit:left>
-                  <spirit:right>0</spirit:right>
-               </spirit:vector>
-            </spirit:wire>
-         </spirit:port>
-//---------------------------------------- << end user >> ---------------------------------------
-//---------------------------------------- << end in >> ----------------------------------------
-
-         <!-- 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 <<bus_matrix_name>></spirit:description>
-//-------------------------------------- << start file >> ---------------------------------------
-         <spirit:file>
-            <spirit:name><<verilog_to_ipxact_path>>/<<filename>>.v</spirit:name>
-            <spirit:fileType>verilogSource-2001</spirit:fileType>
-//-------------------------------------- << start topfile >> ---------------------------------------
-            <spirit:isIncludeFile spirit:externalDeclarations="true">false</spirit:isIncludeFile>
-//-------------------------------------- << end topfile >> ---------------------------------------
-         </spirit:file>
-//--------------------------------------- << end file >> ----------------------------------------
-      </spirit:fileSet>
-   </spirit:fileSets>
-
-   <spirit:description><<bus_matrix_name>></spirit:description>
-
-</spirit:component>
diff --git a/system/src/nanosoc_ahb_busmatrix/ipxact/src/cmsdk_ahb_busmatrix_lite_ipxact.xml b/system/src/nanosoc_ahb_busmatrix/ipxact/src/cmsdk_ahb_busmatrix_lite_ipxact.xml
deleted file mode 100755
index 7fe69e421c20e128ad9753d2b9ca4fc6952f0449..0000000000000000000000000000000000000000
--- a/system/src/nanosoc_ahb_busmatrix/ipxact/src/cmsdk_ahb_busmatrix_lite_ipxact.xml
+++ /dev/null
@@ -1,921 +0,0 @@
-<?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 <<component_name>>     -->
-<!--                                                                                -->
-<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    -->
-
-<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><<component_name>></spirit:name>
-   <spirit:version>r0p0_0</spirit:version>
-
-   <spirit:busInterfaces>
-
-      <!--Slave interfaces -->
-//---------------------------------------- << start in >> ---------------------------------------
-
-      <spirit:busInterface>
-         <spirit:name>AHBLiteInitiator_Slave_<<si_name>></spirit:name>
-         <spirit:description>Slave port <<si_name>></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_<<si_name>>_MM"/>
-//---------------------------------------- << start out >> --------------------------------------
-//------------------------------------- << start connection >> ------------------------------------
-            <spirit:bridge spirit:masterRef="AHBLiteTarget_Master_<<mi_name>>" spirit:opaque="true"/>
-//------------------------------------- << end connection >> --------------------------------------
-//---------------------------------------- << end out >> ----------------------------------------
-         </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<<si_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HTRANS</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HTRANS<<si_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HWRITE</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HWRITE<<si_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HSIZE</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HSIZE<<si_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HBURST</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HBURST<<si_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HPROT</spirit:name>
-//---------------------------------------- << start excl >> -------------------------------------
-                 <spirit:vector>
-                    <spirit:left>3</spirit:left>
-                    <spirit:right>0</spirit:right>
-                 </spirit:vector>
-//---------------------------------------- << end excl >> -------------------------------------
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HPROT<<si_name>></spirit:name>
-//---------------------------------------- << start excl >> -------------------------------------
-                 <spirit:vector>
-                    <spirit:left>3</spirit:left>
-                    <spirit:right>0</spirit:right>
-                 </spirit:vector>
-//---------------------------------------- << end excl >> -------------------------------------
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HWDATA</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HWDATA<<si_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HMASTLOCK</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HMASTLOCK<<si_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-//---------------------------------------- << start user >> -------------------------------------
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HAUSER</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HAUSER<<si_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HWUSER</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HWUSER<<si_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-//---------------------------------------- << end user >> ---------------------------------------
-
-            <!--  Outputs -->
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HRDATA</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HRDATA<<si_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HREADY</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HREADY<<si_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HRESP</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HRESP<<si_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-//---------------------------------------- << start user >> -------------------------------------
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HRUSER</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HRUSER<<si_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-//---------------------------------------- << end user >> ---------------------------------------
-         </spirit:portMaps>
-      </spirit:busInterface>
-//----------------------------------------- << end in >> ----------------------------------------
-
-        <!--Master interfaces -->
-//---------------------------------------- << start out >> --------------------------------------
-
-      <spirit:busInterface>
-         <spirit:name>AHBLiteTarget_Master_<<mi_name>></spirit:name>
-         <spirit:description>Master port <<mi_name>></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_<<mi_name>>_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<<mi_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HADDR</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HADDR<<mi_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HTRANS</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HTRANS<<mi_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HWRITE</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HWRITE<<mi_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HSIZE</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HSIZE<<mi_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HBURST</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HBURST<<mi_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HPROT</spirit:name>
-//---------------------------------------- << start excl >> -------------------------------------
-                 <spirit:vector>
-                    <spirit:left>3</spirit:left>
-                    <spirit:right>0</spirit:right>
-                 </spirit:vector>
-//---------------------------------------- << end excl >> -------------------------------------
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HPROT<<mi_name>></spirit:name>
-//---------------------------------------- << start excl >> -------------------------------------
-                 <spirit:vector>
-                    <spirit:left>3</spirit:left>
-                    <spirit:right>0</spirit:right>
-                 </spirit:vector>
-//---------------------------------------- << end excl >> -------------------------------------
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HWDATA</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HWDATA<<mi_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HMASTLOCK</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HMASTLOCK<<mi_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HREADY</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HREADYMUX<<mi_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-//---------------------------------------- << start user >> -------------------------------------
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HAUSER</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HAUSER<<mi_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HWUSER</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HWUSER<<mi_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-//---------------------------------------- << end user >> ---------------------------------------
-
-            <!--  Inputs -->
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HRDATA</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HRDATA<<mi_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HREADYOUT</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HREADYOUT<<mi_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HRESP</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HRESP<<mi_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-//---------------------------------------- << start user >> -------------------------------------
-            <spirit:portMap>
-               <spirit:logicalPort>
-                 <spirit:name>HRUSER</spirit:name>
-               </spirit:logicalPort>
-               <spirit:physicalPort>
-                 <spirit:name>HRUSER<<mi_name>></spirit:name>
-               </spirit:physicalPort>
-            </spirit:portMap>
-//---------------------------------------- << end user >> ---------------------------------------
-         </spirit:portMaps>
-      </spirit:busInterface>
-//---------------------------------------- << end out >> ----------------------------------------
-
-      <!--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>
-//--------------------------------- << start vendor_extension >> ---------------------------------
-//---------------------------------- << end vendor_extension >> ----------------------------------
-
-//---------------------------- << start remap_used >> -------------------------------
-   <spirit:remapStates>
-
-//---------------------------- << start remap_state_ipxact >> -------------------------------
-      <spirit:remapState>
-          <spirit:name><<remap_name>></spirit:name>
-          <spirit:description>Remap state <<remap_name>></spirit:description>
-          <spirit:remapPorts>
-//---------------------------- << start remap_bit_ipxact >> -------------------------------
-             <spirit:remapPort spirit:portNameRef="REMAP" spirit:portIndex="<<top_remap_bit>>"><<top_remap_bitvalue>></spirit:remapPort>
-//---------------------------- << end remap_bit_ipxact >> -------------------------------
-          </spirit:remapPorts>
-      </spirit:remapState>
-//------------------------------ << end remap_state_ipxact >> -------------------------
-
-   </spirit:remapStates>
-
-//----------------------------- << end remap_used >> --------------------------------
-   <spirit:addressSpaces>
-//---------------------------------------- << start out >> ----------------------------------------
-
-     <spirit:addressSpace>
-          <spirit:name>AHBLiteTarget_Master_<<mi_name>>_AS</spirit:name>
-          <spirit:description><<mi_name>> address space</spirit:description>
-          <spirit:range><<address_space_range>></spirit:range>
-          <spirit:width><<data_v>></spirit:width>
-          <spirit:segments>
-//---------------------------------------- << start segments >> ----------------------------------------
-             <spirit:segment>
-                <spirit:name><<mi_name>>_<<segment_name>></spirit:name>
-                <spirit:addressOffset><<segment_offset>></spirit:addressOffset>
-                <spirit:range><<segment_range>></spirit:range>
-             </spirit:segment>
-//---------------------------------------- << end segments >> ----------------------------------------
-          </spirit:segments>
-          <spirit:addressUnitBits>8</spirit:addressUnitBits>
-     </spirit:addressSpace>
-//---------------------------------------- << end out >> ----------------------------------------
-
-   </spirit:addressSpaces>
-
-   <spirit:memoryMaps>
-
-//---------------------------------------- << start in >> ----------------------------------------
-      <spirit:memoryMap>
-         <spirit:name>AHBLiteInitiator_Slave_<<si_name>>_MM</spirit:name>
-         <spirit:description><<si_name>> memory map</spirit:description>
-
-//----------------------------- << start addr_map_ipxact >> ---------------------------
-//----------------------------- << start addr_region_ipxact >> ------------------------
-//----------------------------- << start remap_static >> ------------------------
-         <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master_<<mi_name>>"
-                             spirit:segmentRef="<<mi_name>>_<<base_address>>_<<end_address>>">
-            <!-- Address_region <<address_map>> -->
-//---------------------------- << start remap_used >> -------------------------------
-            <spirit:name>AHBLiteTarget_Master_<<mi_name>>_<<base_address>>_0_state_always_SM</spirit:name>
-//---------------------------- << end remap_used >> -------------------------------
-//---------------------------- << start no_remap_used >> -------------------------------
-            <spirit:name>AHBLiteTarget_Master_<<mi_name>>_<<base_address>>_0_state_default_SM</spirit:name>
-//---------------------------- << end no_remap_used >> -------------------------------
-            <spirit:baseAddress><<base_address>></spirit:baseAddress>
-         </spirit:subspaceMap>
-
-//----------------------------- << end remap_static >> ------------------------
-//------------------------------ << end addr_region_ipxact >> -------------------------
-//----------------------------- << end addr_map_ipxact >> -----------------------------
-//---------------------------- << start remap_used >> -------------------------------
-//----------------------------- << start remap_state_ipxact >> -------------------------
-//----------------------------- << start addr_remap_and_normal_all_this_remap >> -------------------------
-         <spirit:memoryRemap spirit:state="<<remap_name>>">
-            <spirit:name>AHBLiteInitiator_Slave_<<si_name>>_<<remap_name>>_remap_MM</spirit:name>
-            <spirit:description><<si_name>> <<remap_name>> remap</spirit:description>
-//----------------------------- << start remap_region_ipxact >> -----------------------
-            <spirit:subspaceMap spirit:masterRef="AHBLiteTarget_Master_<<mi_name>>"
-                                spirit:segmentRef="<<mi_name>>_<<base_address>>_<<end_address>>">
-               <!-- <<region_type>> address_region <<address_map>> -->
-               <spirit:name>AHBLiteTarget_Master_<<mi_name>>_<<base_address>>_0_state_<<remap_name>>_SM</spirit:name>
-               <spirit:baseAddress><<base_address>></spirit:baseAddress>
-            </spirit:subspaceMap>
-//------------------------------ << end remap_region_ipxact >> -------------------------
-         </spirit:memoryRemap>
-
-//----------------------------- << end addr_remap_and_normal_all_this_remap >> ---------------------------
-//----------------------------- << end remap_state_ipxact >> -------------------------
-//---------------------------- << end remap_used >> -------------------------------
-      </spirit:memoryMap>
-
-//----------------------------------------- << end in >> ------------------------------------------
-   </spirit:memoryMaps>
-
-
-   <spirit:model>
-      <spirit:views>
-         <spirit:view>
-            <spirit:name>verilogsource</spirit:name>
-            <spirit:description><<component_name>> bus matrix</spirit:description>
-            <spirit:envIdentifier>:*Simulation:</spirit:envIdentifier>
-            <spirit:envIdentifier>:*Synthesis:</spirit:envIdentifier>
-            <spirit:language>verilog</spirit:language>
-            <spirit:modelName><<component_name>></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 -->
-
-//----------------------------------------- << start in >> ------------------------------------------
-         <spirit:port>
-            <spirit:name>HADDR<<si_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>in</spirit:direction>
-               <spirit:vector>
-                  <spirit:left><<addr>></spirit:left>
-                  <spirit:right>0</spirit:right>
-               </spirit:vector>
-            </spirit:wire>
-         </spirit:port>
-         <spirit:port>
-            <spirit:name>HTRANS<<si_name>></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<<si_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>in</spirit:direction>
-            </spirit:wire>
-         </spirit:port>
-         <spirit:port>
-            <spirit:name>HSIZE<<si_name>></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<<si_name>></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<<si_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>in</spirit:direction>
-               <spirit:vector>
-                  <spirit:left><<prot>></spirit:left>
-                  <spirit:right>0</spirit:right>
-               </spirit:vector>
-            </spirit:wire>
-         </spirit:port>
-         <spirit:port>
-            <spirit:name>HWDATA<<si_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>in</spirit:direction>
-               <spirit:vector>
-                  <spirit:left><<data>></spirit:left>
-                  <spirit:right>0</spirit:right>
-               </spirit:vector>
-            </spirit:wire>
-         </spirit:port>
-         <spirit:port>
-            <spirit:name>HMASTLOCK<<si_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>in</spirit:direction>
-            </spirit:wire>
-         </spirit:port>
-//---------------------------------------- << start user >> -------------------------------------
-         <spirit:port>
-            <spirit:name>HAUSER<<si_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>in</spirit:direction>
-               <spirit:vector>
-                  <spirit:left><<user>></spirit:left>
-                  <spirit:right>0</spirit:right>
-               </spirit:vector>
-            </spirit:wire>
-         </spirit:port>
-         <spirit:port>
-            <spirit:name>HWUSER<<si_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>in</spirit:direction>
-               <spirit:vector>
-                  <spirit:left><<user>></spirit:left>
-                  <spirit:right>0</spirit:right>
-               </spirit:vector>
-            </spirit:wire>
-         </spirit:port>
-//---------------------------------------- << end user >> ---------------------------------------
-//----------------------------------------- << end in >> ----------------------------------------
-
-         <!-- Input signals of Master interfaces -->
-
-//----------------------------------------- << start out >> ----------------------------------------
-         <spirit:port>
-            <spirit:name>HRDATA<<mi_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>in</spirit:direction>
-               <spirit:vector>
-                  <spirit:left><<data>></spirit:left>
-                  <spirit:right>0</spirit:right>
-               </spirit:vector>
-            </spirit:wire>
-         </spirit:port>
-         <spirit:port>
-            <spirit:name>HREADYOUT<<mi_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>in</spirit:direction>
-            </spirit:wire>
-         </spirit:port>
-         <spirit:port>
-            <spirit:name>HRESP<<mi_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>in</spirit:direction>
-            </spirit:wire>
-         </spirit:port>
-//---------------------------------------- << start user >> -------------------------------------
-         <spirit:port>
-            <spirit:name>HRUSER<<mi_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>in</spirit:direction>
-               <spirit:vector>
-                  <spirit:left><<user>></spirit:left>
-                  <spirit:right>0</spirit:right>
-               </spirit:vector>
-            </spirit:wire>
-         </spirit:port>
-//---------------------------------------- << end user >> ---------------------------------------
-//----------------------------------------- << end out >> ----------------------------------------
-
-         <!-- 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 -->
-
-//---------------------------------------- << start out >> --------------------------------------
-         <spirit:port>
-            <spirit:name>HSEL<<mi_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>out</spirit:direction>
-            </spirit:wire>
-         </spirit:port>
-         <spirit:port>
-            <spirit:name>HADDR<<mi_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>out</spirit:direction>
-               <spirit:vector>
-                  <spirit:left><<addr>></spirit:left>
-                  <spirit:right>0</spirit:right>
-               </spirit:vector>
-            </spirit:wire>
-         </spirit:port>
-         <spirit:port>
-            <spirit:name>HTRANS<<mi_name>></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<<mi_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>out</spirit:direction>
-            </spirit:wire>
-         </spirit:port>
-         <spirit:port>
-            <spirit:name>HSIZE<<mi_name>></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<<mi_name>></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<<mi_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>out</spirit:direction>
-               <spirit:vector>
-                  <spirit:left><<prot>></spirit:left>
-                  <spirit:right>0</spirit:right>
-               </spirit:vector>
-            </spirit:wire>
-         </spirit:port>
-         <spirit:port>
-            <spirit:name>HWDATA<<mi_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>out</spirit:direction>
-               <spirit:vector>
-                  <spirit:left><<data>></spirit:left>
-                  <spirit:right>0</spirit:right>
-               </spirit:vector>
-            </spirit:wire>
-          </spirit:port>
-         <spirit:port>
-            <spirit:name>HMASTLOCK<<mi_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>out</spirit:direction>
-            </spirit:wire>
-         </spirit:port>
-         <spirit:port>
-            <spirit:name>HREADYMUX<<mi_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>out</spirit:direction>
-            </spirit:wire>
-         </spirit:port>
-//---------------------------------------- << start user >> -------------------------------------
-         <spirit:port>
-            <spirit:name>HAUSER<<mi_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>out</spirit:direction>
-               <spirit:vector>
-                  <spirit:left><<user>></spirit:left>
-                  <spirit:right>0</spirit:right>
-               </spirit:vector>
-            </spirit:wire>
-         </spirit:port>
-         <spirit:port>
-            <spirit:name>HWUSER<<mi_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>out</spirit:direction>
-               <spirit:vector>
-                  <spirit:left><<user>></spirit:left>
-                  <spirit:right>0</spirit:right>
-               </spirit:vector>
-            </spirit:wire>
-         </spirit:port>
-//---------------------------------------- << end user >> ---------------------------------------
-//---------------------------------------- << end out >> ----------------------------------------
-
-         <!-- Output signals of Slave interfaces -->
-
-//---------------------------------------- << start in >> ----------------------------------------
-         <spirit:port>
-            <spirit:name>HRDATA<<si_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>out</spirit:direction>
-               <spirit:vector>
-                  <spirit:left><<data>></spirit:left>
-                  <spirit:right>0</spirit:right>
-               </spirit:vector>
-            </spirit:wire>
-         </spirit:port>
-         <spirit:port>
-            <spirit:name>HREADY<<si_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>out</spirit:direction>
-            </spirit:wire>
-         </spirit:port>
-         <spirit:port>
-            <spirit:name>HRESP<<si_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>out</spirit:direction>
-            </spirit:wire>
-         </spirit:port>
-//---------------------------------------- << start user >> -------------------------------------
-         <spirit:port>
-            <spirit:name>HRUSER<<si_name>></spirit:name>
-            <spirit:wire>
-               <spirit:direction>out</spirit:direction>
-               <spirit:vector>
-                  <spirit:left><<user>></spirit:left>
-                  <spirit:right>0</spirit:right>
-               </spirit:vector>
-            </spirit:wire>
-         </spirit:port>
-//---------------------------------------- << end user >> ---------------------------------------
-//---------------------------------------- << end in >> ----------------------------------------
-
-         <!-- 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 <<component_name>></spirit:description>
-//-------------------------------------- << start file >> ---------------------------------------
-         <spirit:file>
-            <spirit:name><<verilog_to_ipxact_path>>/<<filename>>.v</spirit:name>
-            <spirit:fileType>verilogSource-2001</spirit:fileType>
-//-------------------------------------- << start topfile >> ---------------------------------------
-            <spirit:isIncludeFile spirit:externalDeclarations="true">false</spirit:isIncludeFile>
-//-------------------------------------- << end topfile >> ---------------------------------------
-         </spirit:file>
-//--------------------------------------- << end file >> ----------------------------------------
-      </spirit:fileSet>
-   </spirit:fileSets>
-
-   <spirit:description><<component_name>></spirit:description>
-
-</spirit:component>
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 6fa7da13e2dbf7a80fee1529042a063ac5985b6f..0000000000000000000000000000000000000000
--- a/system/src/nanosoc_ahb_busmatrix/logs/nanosoc_ahb32_4x7.log
+++ /dev/null
@@ -1,74 +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 15:40:22
-==============================================================
-
-Script accepted the following parameters:
-
- - Configuration file      : '/home/dam1n19/Design/test1/secworks-sha256-project/nanosoc/systems/nanosoc/src/nanosoc_ahb_busmatrix/xml/nanosoc_ahb32_4x7.xml'
- - Top-level name          : 'nanosoc_4x7_AhbMatrix'
- - 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 : './verilog/built'
- - Source directory        : './verilog/src'
- - IPXact target directory : '/home/dam1n19/Design/test1/secworks-sha256-project/nanosoc/systems/nanosoc/src/nanosoc_ahb_busmatrix/ipxact/built'
- - IPXact source directory : '/home/dam1n19/Design/test1/secworks-sha256-project/nanosoc/systems/nanosoc/src/nanosoc_ahb_busmatrix/ipxact/src'
- - Overwrite mode          : enabled
-
-Deleting the './verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix.v' file...
-Deleting the './verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix_default_slave.v' file...
-Deleting the './verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix_lite.v' file...
-Deleting the './verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_Arbiter.v' file...
-Deleting the './verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MasterInput.v' file...
-Deleting the './verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_adp.v' file...
-Deleting the './verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_cpu.v' file...
-Deleting the './verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_dma.v' file...
-Deleting the './verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_MatrixDecode_dma2.v' file...
-Deleting the './verilog/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_SlaveOutput.v' file...
-
-Deleting the '/home/dam1n19/Design/test1/secworks-sha256-project/nanosoc/systems/nanosoc/src/nanosoc_ahb_busmatrix/ipxact/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix.xml' file...
-Deleting the '/home/dam1n19/Design/test1/secworks-sha256-project/nanosoc/systems/nanosoc/src/nanosoc_ahb_busmatrix/ipxact/built/nanosoc_4x7_AhbMatrix/nanosoc_4x7_AhbMatrix_lite.xml' file...
-
-Creating the bus matrix variant...
-
- - Rendering 'nanosoc_4x7_Arbiter.v'
- - Rendering 'nanosoc_4x7_AhbMatrix_lite.v'
- - Rendering 'nanosoc_4x7_AhbMatrix_lite.xml'
- - Rendering 'nanosoc_4x7_MasterInput.v'
- - Rendering 'nanosoc_4x7_AhbMatrix_default_slave.v'
- - Rendering 'nanosoc_4x7_MatrixDecode_adp.v'
- - Rendering 'nanosoc_4x7_MatrixDecode_cpu.v'
- - Rendering 'nanosoc_4x7_MatrixDecode_dma.v'
- - Rendering 'nanosoc_4x7_AhbMatrix.v'
- - Rendering 'nanosoc_4x7_SlaveOutput.v'
- - Rendering 'nanosoc_4x7_AhbMatrix.xml'
- - Rendering 'nanosoc_4x7_MatrixDecode_dma2.v'
-
-Done!
-
diff --git a/system/src/nanosoc_ahb_busmatrix/makefile b/system/src/nanosoc_ahb_busmatrix/makefile
index 7455cec4c8d8d6971c2c7c63487a9fa20a2e7ba2..003defaa53ee5502e788e8979da2c5b3a0567def 100644
--- a/system/src/nanosoc_ahb_busmatrix/makefile
+++ b/system/src/nanosoc_ahb_busmatrix/makefile
@@ -15,22 +15,34 @@
 MATRIX_NAME ?= nanosoc_ahb32_4x7
 
 # Top-level directory of Bus Matrix
-BUS_MATRIX_DIR  ?= $(NANOSOC_TECH_DIR)/systems/nanosoc/src/nanosoc_ahb_busmatrix
+BUILD_DIR  ?= $(NANOSOC_TECH_DIR)/system/src/nanosoc_ahb_busmatrix
 
 # Directory location of BuildBusMatrix Script
 SOURCE_DIR  = $(ARM_IP_LIBRARY_PATH)/latest/Corstone-101/logical/cmsdk_ahb_busmatrix
 
+# Location of Generation Files
+IPXACT_BUILD_DIR   = $(BUILD_DIR)/built/ipxact
+VERILOG_BUILD_DIR  = $(BUILD_DIR)/built/verilog
+
+# Location of Source Files
+IPXACT_SOURCE_DIR   = $(SOURCE_DIR)/ipxact/src
+VERILOG_SOURCE_DIR  = $(SOURCE_DIR)/verilog/src
+
 # Location of Bus Matrix XML
-XML_DIR     = $(BUS_MATRIX_DIR)/xml
+XML_DIR      = $(BUILD_DIR)/xml
 
 # Location of Generation Logs
-LOGS_DIR     = $(BUS_MATRIX_DIR)/logs
+LOGS_DIR     = $(BUILD_DIR)/built
 
-# Location of IPXACT Generation Files
-IPXACT_DIR   = $(BUS_MATRIX_DIR)/ipxact
+# BuildBusMatrix Script File Options
+XML_OPTIONS     = -xmldir $(XML_DIR) -cfg $(MATRIX_NAME).xml
+VERILOG_OPTIONS = -srcdir=$(VERILOG_SOURCE_DIR) -tgtdir=$(VERILOG_BUILD_DIR)
+IPXACT_OPTIONS  = -ipxact -ipxactsrcdir=$(IPXACT_SOURCE_DIR) -ipxacttgtdir=$(IPXACT_BUILD_DIR)
 
-GEN_OPTIONS  = -notimescales -xmldir $(XML_DIR) -cfg $(MATRIX_NAME).xml -ipxact -ipxactsrcdir=$(IPXACT_DIR)/src -ipxacttgtdir=$(IPXACT_DIR)/built -over -verbose >& $(LOGS_DIR)/$(MATRIX_NAME).log
+GEN_OPTIONS  = -notimescales -over -verbose $(XML_OPTIONS) $(VERILOG_OPTIONS) $(IPXACT_OPTIONS)  >& $(LOGS_DIR)/$(MATRIX_NAME).log
 
 build: 
 	@echo "Generating NanoSoC Bus Matrix"
-	@$(SOURCE_DIR)/bin/BuildBusMatrix.pl $(GEN_OPTIONS)
\ No newline at end of file
+	@mkdir -p $(IPXACT_BUILD_DIR)
+	@mkdir -p $(VERILOG_BUILD_DIR)
+	@cd $(SOURCE_DIR) && bin/BuildBusMatrix.pl $(GEN_OPTIONS)
\ No newline at end of file
diff --git a/system/src/nanosoc_ahb_busmatrix/verilog/src/cmsdk_ahb_bm_burst_arb.v b/system/src/nanosoc_ahb_busmatrix/verilog/src/cmsdk_ahb_bm_burst_arb.v
deleted file mode 100755
index 013fe5916555e5156414246adc72f4a61dbd58eb..0000000000000000000000000000000000000000
--- a/system/src/nanosoc_ahb_busmatrix/verilog/src/cmsdk_ahb_bm_burst_arb.v
+++ /dev/null
@@ -1,327 +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-<<copyright_year>> 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 <<connectivity>> connectivity.
-//
-//-----------------------------------------------------------------------------
-
-<<timescale_directive>>
-
-module <<output_arb_name>> (
-
-    // Common AHB signals
-    HCLK ,
-    HRESETn,
-
-    // Input port request signals
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    req_port<<in>>,
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-
-    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
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    input        req_port<<in>>;     // Port <<in>> request signal
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-    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 [<<idw_si>>: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
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    wire       req_port<<in>>;       // Port <<in>> request signal
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-    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 [<<idw_si>>:0] addr_in_port;     // Address input port
-    reg        no_port;         // No port selected signal
-
-// -----------------------------------------------------------------------------
-// Signal declarations
-// -----------------------------------------------------------------------------
-    reg  [<<idw_si>>:0] addr_in_port_next; // D-input of addr_in_port
-    reg  [<<idw_si>>: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 @ (
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-             req_port<<in>> or
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-             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;
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-      else if ( req_port<<in>> | ( (i_addr_in_port == <<idw_si_v>>'b<<bin_in>>) & HSELM &
-                              (HTRANSM != 2'b00) ) )
-        addr_in_port_next = <<idw_si_v>>'b<<bin_in>>;
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-      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 <= {<<idw_si_v>>{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/src/cmsdk_ahb_bm_decode.v b/system/src/nanosoc_ahb_busmatrix/verilog/src/cmsdk_ahb_bm_decode.v
deleted file mode 100755
index bd24a8dcdf8b8e4ca40d59eac2626b5aa661d858..0000000000000000000000000000000000000000
--- a/system/src/nanosoc_ahb_busmatrix/verilog/src/cmsdk_ahb_bm_decode.v
+++ /dev/null
@@ -1,458 +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-<<copyright_year>> 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 MatrixDecode is used to determine which output
-//                         stage is required for a particular access. Addresses
-//                         that do not map to an Output port are diverted to
-//                         the local default slave.
-//
-//  Notes               : The bus matrix has <<connectivity>> connectivity.
-//
-//-----------------------------------------------------------------------------
-
-<<timescale_directive>>
-
-module <<matrix_decode_name>> (
-
-    // Common AHB signals
-    HCLK,
-    HRESETn,
-
-//---------------------------- << start remap >> -------------------------------
-    // Internal address remapping control
-    remapping_dec,
-
-//----------------------------- << end remap >> --------------------------------
-    // Signals from the Input stage
-    HREADYS,
-    sel_dec,
-    decode_addr_dec,
-    trans_dec,
-
-//----------------------------- << start out >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    // Bus-switch output <<out>>
-    active_dec<<out>>,
-    readyout_dec<<out>>,
-    resp_dec<<out>>,
-    rdata_dec<<out>>,
-//---------------------------- << start user >> --------------------------------
-    ruser_dec<<out>>,
-//----------------------------- << end user >> ---------------------------------
-
-//------------------------------ << end connection >> --------------------------
-//------------------------------ << end out >> ---------------------------------
-    // Output port selection signals
-//----------------------------- << start out >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    sel_dec<<out>>,
-//------------------------------ << end connection >> --------------------------
-//------------------------------ << end out >> ---------------------------------
-
-    // Selected Output port data and control signals
-    active_dec,
-    HREADYOUTS,
-    HRESPS,
-//---------------------------- << start user >> --------------------------------
-    HRUSERS,
-//----------------------------- << end user >> ---------------------------------
-    HRDATAS
-
-    );
-
-
-// -----------------------------------------------------------------------------
-// Input and Output declarations
-// -----------------------------------------------------------------------------
-
-    // Common AHB signals
-    input         HCLK;           // AHB System Clock
-    input         HRESETn;        // AHB System Reset
-
-//---------------------------- << start remap >> -------------------------------
-    // Internal address remapping control
-    input   [<<idw_remap>>:0] remapping_dec;      // Internal remap signal
-
-//----------------------------- << end remap >> --------------------------------
-    // Signals from the Input stage
-    input         HREADYS;        // Transfer done
-    input         sel_dec;            // HSEL input
-    input [<<addr>>:10] decode_addr_dec;     // HADDR decoder input
-    input   [1:0] trans_dec;          // Input port HTRANS signal
-
-//----------------------------- << start out >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    // Bus-switch output MI<<out>>
-    input         active_dec<<out>>;        // Output stage MI<<out>> active_dec signal
-    input         readyout_dec<<out>>;      // HREADYOUT input
-    input   [<<resp>>:0] resp_dec<<out>>;          // HRESP input
-    input  [<<data>>:0] rdata_dec<<out>>;         // HRDATA input
-//---------------------------- << start user >> --------------------------------
-    input  [<<user>>:0] ruser_dec<<out>>;         // HRUSER input
-//----------------------------- << end user >> ---------------------------------
-
-//------------------------------ << end connection >> --------------------------
-//------------------------------ << end out >> ---------------------------------
-    // Output port selection signals
-//----------------------------- << start out >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    output        sel_dec<<out>>;           // HSEL output
-//------------------------------ << end connection >> --------------------------
-//------------------------------ << end out >> ---------------------------------
-
-    // Selected Output port data and control signals
-    output        active_dec;         // Combinatorial active_dec O/P
-    output        HREADYOUTS;     // HREADY feedback output
-    output  [<<resp>>:0] HRESPS;         // Transfer response
-//---------------------------- << start user >> --------------------------------
-    output [<<user>>:0] HRUSERS;        // User read Data
-//----------------------------- << end user >> ---------------------------------
-    output [<<data>>:0] HRDATAS;        // Read Data
-
-
-// -----------------------------------------------------------------------------
-// Wire declarations
-// -----------------------------------------------------------------------------
-
-    // Common AHB signals
-    wire          HCLK;            // AHB System Clock
-    wire          HRESETn;         // AHB System Reset
-//---------------------------- << start remap >> -------------------------------
-    // Internal address remapping control
-    wire    [<<idw_remap>>:0] remapping_dec;       // Internal remap signal
-//----------------------------- << end remap >> --------------------------------
-
-    // Signals from the Input stage
-    wire          HREADYS;         // Transfer done
-    wire          sel_dec;             // HSEL input
-    wire  [<<addr>>:10] decode_addr_dec;      // HADDR input
-    wire    [1:0] trans_dec;           // Input port HTRANS signal
-
-//----------------------------- << start out >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    // Bus-switch output MI<<out>>
-    wire          active_dec<<out>>;         // active_dec signal
-    wire          readyout_dec<<out>>;       // HREADYOUT input
-    wire    [<<resp>>:0] resp_dec<<out>>;           // HRESP input
-    wire   [<<data>>:0] rdata_dec<<out>>;          // HRDATA input
-//---------------------------- << start user >> --------------------------------
-    wire   [<<user>>:0] ruser_dec<<out>>;          // HRUSER input
-//----------------------------- << end user >> ---------------------------------
-    reg           sel_dec<<out>>;            // HSEL output
-
-//------------------------------ << end connection >> --------------------------
-//------------------------------ << end out >> ---------------------------------
-
-// -----------------------------------------------------------------------------
-// Signal declarations
-// -----------------------------------------------------------------------------
-
-    // Selected Output port data and control signals
-    reg           active_dec;          // Combinatorial active_dec O/P signal
-    reg           HREADYOUTS;      // Combinatorial HREADYOUT signal
-    reg     [<<resp>>:0] HRESPS;          // Combinatorial HRESPS signal
-//---------------------------- << start user >> --------------------------------
-    reg    [<<user>>:0] HRUSERS;
-//----------------------------- << end user >> ---------------------------------
-    reg    [<<data>>:0] HRDATAS;         // Read data bus
-
-    reg     [<<idw_mi>>:0] addr_out_port;     // Address output ports
-    reg     [<<idw_mi>>:0] data_out_port;     // Data output ports
-
-    // Default slave signals
-    reg           sel_dft_slv;       // HSEL signal
-    wire          readyout_dft_slv;  // HREADYOUT signal
-    wire    [<<resp>>:0] resp_dft_slv;      // Combinatorial HRESPS signal
-
-
-// -----------------------------------------------------------------------------
-// Beginning of main code
-// -----------------------------------------------------------------------------
-
-//------------------------------------------------------------------------------
-// Default slave (accessed when HADDR is unmapped)
-//------------------------------------------------------------------------------
-
-  <<default_slave_name>> u_<<default_slave_name>> (
-
-    // Common AHB signals
-    .HCLK        (HCLK),
-    .HRESETn     (HRESETn),
-
-    // AHB Control signals
-    .HSEL        (sel_dft_slv),
-    .HTRANS      (trans_dec),
-    .HREADY      (HREADYS),
-    .HREADYOUT   (readyout_dft_slv),
-    .HRESP       (resp_dft_slv)
-
-    );
-
-
-//------------------------------------------------------------------------------
-// Address phase signals
-//------------------------------------------------------------------------------
-
-// The address decode is done in two stages. This is so that the address
-//  decode occurs in only one process, p_addr_out_portComb, and then the select
-//  signal is factored in.
-//
-// Note that the hexadecimal address values are reformatted to align with the
-//  lower bound of decode_addr_dec[<<addr>>:10], which is not a hex character boundary
-
-  always @ (
-//----------------------------- << start map >> --------------------------------
-             decode_addr_dec or data_out_port or trans_dec
-//----------------------------- << end map >> ----------------------------------
-//---------------------------- << start remap >> -------------------------------
-             decode_addr_dec or
-             remapping_dec or data_out_port or trans_dec
-//----------------------------- << end remap >> --------------------------------
-           )
-    begin : p_addr_out_port_comb
-
-      // Only switch if there is an active transfer
-      if (trans_dec != 2'b00)
-      begin
-
-//----------------------------- << start map >> --------------------------------
-//----------------------------- << start out >> --------------------------------
-//----------------------------- << start addr_map >> ---------------------------
-//----------------------------- << start addr_region >> ------------------------
-        // Address region <<address_map>>
-        <<mdelse>>if ((decode_addr_dec >= <<mem_lo>>) & (decode_addr_dec <= <<mem_hi>>))
-          addr_out_port = <<idw_mi_v>>'b0<<bin_out>>;  // Select Output port MI<<out>>
-//------------------------------ << end addr_region >> -------------------------
-
-//----------------------------- << end addr_map >> -----------------------------
-//------------------------------ << end out >> ---------------------------------
-        else
-          addr_out_port = <<idw_mi_v>>'b<<dsid_bin>>;   // Select the default slave
-//----------------------------- << end map >> ----------------------------------
-//---------------------------- << start remap >> -------------------------------
-        case (remapping_dec)  // Composition: <<remapping_vector>>
-//----------------------------- << start remap_state >> ------------------------
-          <<idw_remap_v>>'b<<bin_remapstate>> : begin
-//----------------------------- << start remap_bit >> --------------------------
-//----------------------------- << start addr_remap >> -------------------------
-//----------------------------- << start remap_region >> -----------------------
-            // Remapped address region <<address_map>> due to REMAP[<<remapping_bit>>]
-            <<mdelse>>if ((decode_addr_dec >= <<mem_lo>>) & (decode_addr_dec <= <<mem_hi>>))
-               addr_out_port = <<idw_mi_v>>'b0<<bin_out>>;  // Select Output port MI<<out>>
-
-//------------------------------ << end remap_region >> -------------------------
-//----------------------------- << end addr_remap >> ---------------------------
-//------------------------------ << end remap_bit >> ---------------------------
-//----------------------------- << start out >> --------------------------------
-//----------------------------- << start addr_map >> ---------------------------
-//----------------------------- << start addr_region >> ------------------------
-            // <<region_type>> address region <<address_map>>
-            <<mdelse>>if ((decode_addr_dec >= <<mem_lo>>) & (decode_addr_dec <= <<mem_hi>>))
-               addr_out_port = <<idw_mi_v>>'b0<<bin_out>>;  // Select Output port MI<<out>>
-//------------------------------ << end addr_region >> -------------------------
-
-//----------------------------- << end addr_map >> -----------------------------
-//------------------------------ << end out >> ---------------------------------
-            else
-              addr_out_port = <<idw_mi_v>>'b<<dsid_bin>>;   // Select the default slave
-          end
-
-//------------------------------ << end remap_state >> -------------------------
-          default : addr_out_port = {<<idw_mi_v>>{1'bx}};
-        endcase
-//----------------------------- << end remap >> --------------------------------
-
-      end // if (trans_dec != 2'b00)
-      else
-        addr_out_port = data_out_port;   // Stay on last port if no activity
-
-    end // block: p_addr_out_port_comb
-
-  // Select signal decode
-  always @ (sel_dec or addr_out_port)
-    begin : p_sel_comb
-//----------------------------- << start out >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-      sel_dec<<out>> = 1'b0;
-//------------------------------ << end connection >> --------------------------
-//------------------------------ << end out >> ---------------------------------
-      sel_dft_slv = 1'b0;
-
-      if (sel_dec)
-        case (addr_out_port)
-//----------------------------- << start out >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-          <<idw_mi_v>>'b0<<bin_out>> : sel_dec<<out>> = 1'b1;
-//------------------------------ << end connection >> --------------------------
-//------------------------------ << end out >> ---------------------------------
-          <<idw_mi_v>>'b<<dsid_bin>> : sel_dft_slv = 1'b1;    // Select the default slave
-          default : begin
-//----------------------------- << start out >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-            sel_dec<<out>> = 1'bx;
-//------------------------------ << end connection >> --------------------------
-//------------------------------ << end out >> ---------------------------------
-            sel_dft_slv = 1'bx;
-          end
-        endcase // case(addr_out_port)
-    end // block: p_sel_comb
-
-// The decoder selects the appropriate active_dec signal depending on which
-//  output stage is required for the transfer.
-  always @ (
-//----------------------------- << start out >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-             active_dec<<out>> or
-//------------------------------ << end connection >> --------------------------
-//------------------------------ << end out >> ---------------------------------
-             addr_out_port
-           )
-    begin : p_active_comb
-      case (addr_out_port)
-//----------------------------- << start out >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-        <<idw_mi_v>>'b0<<bin_out>> : active_dec = active_dec<<out>>;
-//------------------------------ << end connection >> --------------------------
-//------------------------------ << end out >> ---------------------------------
-        <<idw_mi_v>>'b<<dsid_bin>> : active_dec = 1'b1;         // Select the default slave
-        default : active_dec = 1'bx;
-      endcase // case(addr_out_port)
-    end // block: p_active_comb
-
-
-//------------------------------------------------------------------------------
-// Data phase signals
-//------------------------------------------------------------------------------
-
-// The data_out_port needs to be updated when HREADY from the input stage is high.
-//  Note: HREADY must be used, not HREADYOUT, because there are occaisions
-//  (namely when the holding register gets loaded) when HREADYOUT may be low
-//  but HREADY is high, and in this case it is important that the data_out_port
-//  gets updated.
-//  When the port is inactive, the default slave is selected to prevent toggling.
-
-  always @ (negedge HRESETn or posedge HCLK)
-    begin : p_data_out_port_seq
-      if (~HRESETn)
-        data_out_port <= <<idw_mi_v>>'b<<dsid_bin>>;
-      else
-        if (HREADYS)
-          if (sel_dec & trans_dec[1])
-            data_out_port <= addr_out_port;
-          else
-            data_out_port <= <<idw_mi_v>>'b<<dsid_bin>>;
-    end // block: p_data_out_port_seq
-
-  // HREADYOUTS output decode
-  always @ (
-             readyout_dft_slv or
-//----------------------------- << start out >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-             readyout_dec<<out>> or
-//------------------------------ << end connection >> --------------------------
-//------------------------------ << end out >> ---------------------------------
-             data_out_port
-           )
-  begin : p_ready_comb
-    case (data_out_port)
-//----------------------------- << start out >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-      <<idw_mi_v>>'b0<<bin_out>> : HREADYOUTS = readyout_dec<<out>>;
-//------------------------------ << end connection >> --------------------------
-//------------------------------ << end out >> ---------------------------------
-      <<idw_mi_v>>'b<<dsid_bin>> : HREADYOUTS = readyout_dft_slv;    // Select the default slave
-      default : HREADYOUTS = 1'bx;
-    endcase // case(data_out_port)
-  end // block: p_ready_comb
-
-  // HRESPS output decode
-  always @ (
-             resp_dft_slv or
-//----------------------------- << start out >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-             resp_dec<<out>> or
-//------------------------------ << end connection >> --------------------------
-//------------------------------ << end out >> ---------------------------------
-             data_out_port
-           )
-  begin : p_resp_comb
-    case (data_out_port)
-//----------------------------- << start out >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-      <<idw_mi_v>>'b0<<bin_out>> : HRESPS = resp_dec<<out>>;
-//------------------------------ << end connection >> --------------------------
-//------------------------------ << end out >> ---------------------------------
-      <<idw_mi_v>>'b<<dsid_bin>> : HRESPS = resp_dft_slv;     // Select the default slave
-      default : HRESPS = {<<resp_v>>{1'bx}};
-    endcase // case (data_out_port)
-  end // block: p_resp_comb
-
-  // HRDATAS output decode
-  always @ (
-//----------------------------- << start out >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-             rdata_dec<<out>> or
-//------------------------------ << end connection >> --------------------------
-//------------------------------ << end out >> ---------------------------------
-             data_out_port
-           )
-  begin : p_rdata_comb
-    case (data_out_port)
-//----------------------------- << start out >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-      <<idw_mi_v>>'b0<<bin_out>> : HRDATAS = rdata_dec<<out>>;
-//------------------------------ << end connection >> --------------------------
-//------------------------------ << end out >> ---------------------------------
-      <<idw_mi_v>>'b<<dsid_bin>> : HRDATAS = {<<data_v>>{1'b0}};   // Select the default slave
-      default : HRDATAS = {<<data_v>>{1'bx}};
-    endcase // case (data_out_port)
-  end // block: p_rdata_comb
-//---------------------------- << start user >> --------------------------------
-
-  // HRUSERS output decode
-  always @ (
-//----------------------------- << start out >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-             ruser_dec<<out>> or
-//------------------------------ << end connection >> --------------------------
-//------------------------------ << end out >> ---------------------------------
-             data_out_port
-           )
-  begin : p_ruser_comb
-    case (data_out_port)
-//----------------------------- << start out >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-      <<idw_mi_v>>'b0<<bin_out>> : HRUSERS = ruser_dec<<out>>;
-//------------------------------ << end connection >> --------------------------
-//------------------------------ << end out >> ---------------------------------
-      <<idw_mi_v>>'b<<dsid_bin>> : HRUSERS = {<<user_v>>{1'b0}};   // Select the default slave
-      default : HRUSERS = {<<user_v>>{1'bx}};
-    endcase // case (data_out_port)
-  end // block: p_ruser_comb
-//----------------------------- << end user >> ---------------------------------
-
-
-endmodule
-
-// --================================= End ===================================--
diff --git a/system/src/nanosoc_ahb_busmatrix/verilog/src/cmsdk_ahb_bm_default_slave.v b/system/src/nanosoc_ahb_busmatrix/verilog/src/cmsdk_ahb_bm_default_slave.v
deleted file mode 100755
index a965f5d89d07c7c502b41fe236737a64aa19588f..0000000000000000000000000000000000000000
--- a/system/src/nanosoc_ahb_busmatrix/verilog/src/cmsdk_ahb_bm_default_slave.v
+++ /dev/null
@@ -1,141 +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-<<copyright_year>> 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            : Default slave used to drive the slave response signals
-//                       when there are no other slaves selected.
-//-----------------------------------------------------------------------------
-
-<<timescale_directive>>
-
-module <<default_slave_name>> (
-
-    // Common AHB signals
-    HCLK,
-    HRESETn,
-
-    // AHB control input signals
-    HSEL,
-    HTRANS,
-    HREADY,
-
-    // AHB control output signals
-    HREADYOUT,
-    HRESP
-
-    );
-
-
-// -----------------------------------------------------------------------------
-// Input and Output declarations
-// -----------------------------------------------------------------------------
-
-    // Common AHB signals
-    input         HCLK;           // AHB System Clock
-    input         HRESETn;        // AHB System Reset
-
-    // AHB control input signals
-    input         HSEL;           // Slave Select
-    input  [1:0]  HTRANS;         // Transfer type
-    input         HREADY;         // Transfer done
-
-    // AHB control output signals
-    output        HREADYOUT;      // HREADY feedback
-    output  [<<resp>>:0] HRESP;          // Transfer response
-
-
-// -----------------------------------------------------------------------------
-// Constant declarations
-// -----------------------------------------------------------------------------
-
-// HRESP transfer response signal encoding
-`define RSP_OKAY    <<resp_v>>'b<<bin_resp_okay>>      // OKAY response
-`define RSP_ERROR   <<resp_v>>'b<<bin_resp_error>>     // ERROR response
-`define RSP_RETRY   <<resp_v>>'b<<bin_resp_retry>>     // RETRY response
-`define RSP_SPLIT   <<resp_v>>'b<<bin_resp_split>>     // SPLIT response
-//----------------------------- << start excl >> -------------------------------
-`define RSP_XFAIL   <<resp_v>>'b<<bin_resp_xfail>>;    // XFAIL response
-//------------------------------ << end excl >> --------------------------------
-
-
-// -----------------------------------------------------------------------------
-// Input and Output declarations
-// -----------------------------------------------------------------------------
-
-    // Common AHB signals
-    wire          HCLK;           // AHB System Clock
-    wire          HRESETn;        // AHB System Reset
-
-    // AHB control input signals
-    wire          HSEL;           // Slave Select
-    wire    [1:0] HTRANS;         // Transfer type
-    wire          HREADY;         // Transfer done
-
-    // AHB control output signals
-    wire          HREADYOUT;      // HREADY feedback
-    wire    [<<resp>>:0] HRESP;          // Transfer response
-
-
-// -----------------------------------------------------------------------------
-// Signal declarations
-// -----------------------------------------------------------------------------
-
-    wire          invalid;    // Set during invalid transfer
-    wire          hready_next; // Controls generation of HREADYOUT output
-    reg           i_hreadyout; // HREADYOUT register
-    wire    [<<resp>>:0] hresp_next;  // Generated response
-    reg     [<<resp>>:0] i_hresp;     // HRESP register
-
-
-// -----------------------------------------------------------------------------
-// Beginning of main code
-// -----------------------------------------------------------------------------
-
-  assign invalid = ( HREADY & HSEL & HTRANS[1] );
-  assign hready_next = i_hreadyout ?  ~invalid : 1'b1 ;
-  assign hresp_next = invalid ? `RSP_ERROR : `RSP_OKAY;
-
-  always @(negedge HRESETn or posedge HCLK)
-    begin : p_resp_seq
-      if (~HRESETn)
-        begin
-          i_hreadyout <= 1'b1;
-          i_hresp     <= `RSP_OKAY;
-        end
-      else
-        begin
-          i_hreadyout <= hready_next;
-
-          if (i_hreadyout)
-            i_hresp <= hresp_next;
-        end
-    end
-
-  // Drive outputs with internal versions
-  assign HREADYOUT = i_hreadyout;
-  assign HRESP     = i_hresp;
-
-
-endmodule
-
-// --================================= End ===================================--
diff --git a/system/src/nanosoc_ahb_busmatrix/verilog/src/cmsdk_ahb_bm_fixed_arb.v b/system/src/nanosoc_ahb_busmatrix/verilog/src/cmsdk_ahb_bm_fixed_arb.v
deleted file mode 100755
index b10b09001def56a643c500d0b8d309ca1507c6dd..0000000000000000000000000000000000000000
--- a/system/src/nanosoc_ahb_busmatrix/verilog/src/cmsdk_ahb_bm_fixed_arb.v
+++ /dev/null
@@ -1,179 +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-<<copyright_year>> 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 <<connectivity>> connectivity.
-//
-//-----------------------------------------------------------------------------
-
-<<timescale_directive>>
-
-module <<output_arb_name>> (
-
-    // Common AHB signals
-    HCLK ,
-    HRESETn,
-
-    // Input port request signals
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    req_port<<in>>,
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-
-    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
-
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    input        req_port<<in>>;     // Port <<in>> request signal
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-
-    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 [<<idw_si>>:0] addr_in_port;   // Port address input
-    output       no_port;       // No port selected signal
-
-
-// -----------------------------------------------------------------------------
-// Wire declarations
-// -----------------------------------------------------------------------------
-    wire       HCLK;           // AHB system clock
-    wire       HRESETn;        // AHB system reset
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    wire       req_port<<in>>;       // Port <<in>> request signal
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-    wire       HREADYM;        // Transfer done
-    wire       HSELM;          // Slave select line
-    wire [1:0] HTRANSM;        // Transfer type
-    wire       HMASTLOCKM;     // Locked transfer
-    wire [<<idw_si>>:0] addr_in_port;     // Port address input
-    reg        no_port;         // No port selected signal
-
-
-// -----------------------------------------------------------------------------
-// Signal declarations
-// -----------------------------------------------------------------------------
-    reg  [<<idw_si>>:0] addr_in_port_next; // D-input of addr_in_port
-    reg  [<<idw_si>>:0] iaddr_in_port;    // Internal version of addr_in_port
-    reg        no_port_next;     // D-input of no_port
-
-
-// -----------------------------------------------------------------------------
-// Beginning of main code
-// -----------------------------------------------------------------------------
-//------------------------------------------------------------------------------
-// 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 where 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 @ (
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-             req_port<<in>> or
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-             HSELM or HTRANSM or HMASTLOCKM or iaddr_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 = iaddr_in_port;
-
-    if (HMASTLOCKM)
-      addr_in_port_next = iaddr_in_port;
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    else if ( req_port<<in>> | ( (iaddr_in_port == <<idw_si_v>>'b<<bin_in>>) & HSELM &
-                            (HTRANSM != 2'b00) ) )
-      addr_in_port_next = <<idw_si_v>>'b<<bin_in>>;
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-    else if (HSELM)
-      addr_in_port_next = iaddr_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;
-        iaddr_in_port <= {<<idw_si_v>>{1'b0}};
-      end
-    else
-      if (HREADYM)
-        begin
-          no_port      <= no_port_next;
-          iaddr_in_port <= addr_in_port_next;
-        end
-  end // block: p_addr_in_port_reg
-
-  // Drive output with internal version
-  assign addr_in_port = iaddr_in_port;
-
-
-endmodule
-
-// --================================= End ===================================--
diff --git a/system/src/nanosoc_ahb_busmatrix/verilog/src/cmsdk_ahb_bm_input_stage.v b/system/src/nanosoc_ahb_busmatrix/verilog/src/cmsdk_ahb_bm_input_stage.v
deleted file mode 100755
index 747c17171283febb6f1e1a64bcb42cabd1ea7ea6..0000000000000000000000000000000000000000
--- a/system/src/nanosoc_ahb_busmatrix/verilog/src/cmsdk_ahb_bm_input_stage.v
+++ /dev/null
@@ -1,544 +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-<<copyright_year>> 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 Input Stage is used to hold a pending transfer
-//                        when the required output stage is not available.
-//---------------------------- << start unalign >> -----------------------------
-//                        Supports ARMv6 AMBA extensions for unaligned access.
-//----------------------------- << end unalign >> ------------------------------
-//----------------------------- << start excl >> -------------------------------
-//                        Supports ARMv6 AMBA extensions for exclusive access.
-//------------------------------ << end excl >> --------------------------------
-//
-//-----------------------------------------------------------------------------
-
-<<timescale_directive>>
-
-module <<input_stage_name>> (
-
-    // Common AHB signals
-    HCLK,
-    HRESETn,
-
-    // Input Port Address/Control Signals
-    HSELS,
-    HADDRS,
-//---------------------------- << start user >> --------------------------------
-    HAUSERS,
-//----------------------------- << end user >> ---------------------------------
-    HTRANSS,
-    HWRITES,
-    HSIZES,
-    HBURSTS,
-    HPROTS,
-//---------------------------- << start unalign >> -----------------------------
-    HUNALIGNS,
-    HBSTRBS,
-//----------------------------- << end unalign >> ------------------------------
-    HMASTERS,
-    HMASTLOCKS,
-    HREADYS,
-
-    // Internal Response
-    active_ip,
-    readyout_ip,
-    resp_ip,
-
-    // Input Port Response
-    HREADYOUTS,
-    HRESPS,
-
-    // Internal Address/Control Signals
-    sel_ip,
-    addr_ip,
-//---------------------------- << start user >> --------------------------------
-    auser_ip,
-//----------------------------- << end user >> ---------------------------------
-    trans_ip,
-    write_ip,
-    size_ip,
-    burst_ip,
-    prot_ip,
-//---------------------------- << start unalign >> -----------------------------
-    unalign_ip,
-    bstrb_ip,
-//----------------------------- << end unalign >> ------------------------------
-    master_ip,
-    mastlock_ip,
-    held_tran_ip
-
-    );
-
-
-// -----------------------------------------------------------------------------
-// Input and Output declarations
-// -----------------------------------------------------------------------------
-
-    input         HCLK;            // AHB System Clock
-    input         HRESETn;         // AHB System Reset
-    input         HSELS;           // Slave Select from AHB
-    input  [<<addr>>:0] HADDRS;          // Address bus from AHB
-//---------------------------- << start user >> --------------------------------
-    input  [<<user>>:0] HAUSERS;         // Additional user adress bus
-//----------------------------- << end user >> ---------------------------------
-    input   [1:0] HTRANSS;         // Transfer type from AHB
-    input         HWRITES;         // Transfer direction from AHB
-    input   [2:0] HSIZES;          // Transfer size from AHB
-    input   [2:0] HBURSTS;         // Burst type from AHB
-    input   [<<prot>>:0] HPROTS;          // Protection control from AHB
-//---------------------------- << start unalign >> -----------------------------
-    input         HUNALIGNS;       // Unalign signal from AHB
-    input   [<<bstrb>>:0] HBSTRBS;         // Active Byte Lane strobes
-//----------------------------- << end unalign >> ------------------------------
-    input   [3:0] HMASTERS;        // Master number from AHB
-    input         HMASTLOCKS;      // Locked Sequence  from AHB
-    input         HREADYS;         // Transfer done from AHB
-    input         active_ip;          // active_ip signal
-    input         readyout_ip;        // HREADYOUT input
-    input   [<<resp>>:0] resp_ip;            // HRESP input
-
-    output        HREADYOUTS;      // HREADY feedback to AHB
-    output  [<<resp>>:0] HRESPS;          // Transfer response to AHB
-    output        sel_ip;             // HSEL output
-    output [<<addr>>:0] addr_ip;            // HADDR output
-//---------------------------- << start user >> --------------------------------
-    output [<<user>>:0] auser_ip;           // HAUSER output
-//----------------------------- << end user >> ---------------------------------
-    output  [1:0] trans_ip;           // HTRANS output
-    output        write_ip;           // HWRITE output
-    output  [2:0] size_ip;            // HSIZE output
-    output  [2:0] burst_ip;           // HBURST output
-    output  [<<prot>>:0] prot_ip;            // HPROT output
-//---------------------------- << start unalign >> -----------------------------
-    output        unalign_ip;         // HUNALIGN output
-    output  [<<bstrb>>:0] bstrb_ip;           // HBSTRB output
-//----------------------------- << end unalign >> ------------------------------
-    output [3:0]  master_ip;          // HMASTER output
-    output        mastlock_ip;        // HMASTLOCK output
-    output        held_tran_ip;        // Holding register active flag
-
-
-// -----------------------------------------------------------------------------
-// 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 BURST
-`define BUR_INCR    3'b001    // Incremental BURSTS
-`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
-
-// HRESP signal encoding
-`define RSP_OKAY    <<resp_v>>'b<<bin_resp_okay>>      // OKAY response
-`define RSP_ERROR   <<resp_v>>'b<<bin_resp_error>>     // ERROR response
-`define RSP_RETRY   <<resp_v>>'b<<bin_resp_retry>>     // RETRY response
-`define RSP_SPLIT   <<resp_v>>'b<<bin_resp_split>>     // SPLIT response
-//----------------------------- << start excl >> -------------------------------
-`define RSP_XFAIL   <<resp_v>>'b<<bin_resp_xfail>>;    // XFAIL response
-//------------------------------ << end excl >> --------------------------------
-
-
-// -----------------------------------------------------------------------------
-// Wire declarations
-// -----------------------------------------------------------------------------
-
-    wire        HCLK;            // AHB System Clock
-    wire        HRESETn;         // AHB System Reset
-    wire        HSELS;           // Slave Select from AHB
-    wire [<<addr>>:0] HADDRS;          // Address bus from AHB
-//---------------------------- << start user >> --------------------------------
-    wire [<<user>>:0] HAUSERS;         // Additional user adress bus
-//----------------------------- << end user >> ---------------------------------
-    wire  [1:0] HTRANSS;         // Transfer type from AHB
-    wire        HWRITES;         // Transfer direction from AHB
-    wire  [2:0] HSIZES;          // Transfer size from AHB
-    wire  [2:0] HBURSTS;         // Burst type from AHB
-    wire  [<<prot>>:0] HPROTS;          // Protection control from AHB
-//---------------------------- << start unalign >> -----------------------------
-    wire        HUNALIGNS;       // Unalign signal from AHB
-    wire  [<<bstrb>>:0] HBSTRBS;         // Active Byte Lane strobes
-//----------------------------- << end unalign >> ------------------------------
-    wire  [3:0] HMASTERS;        // Master number from AHB
-    wire        HMASTLOCKS;      // Locked Sequence  from AHB
-    wire        HREADYS;         // Transfer done from AHB
-    reg         HREADYOUTS;      // HREADY feedback to AHB
-    reg   [<<resp>>:0] HRESPS;          // Transfer response to AHB
-    reg         sel_ip;             // HSEL output
-    reg  [<<addr>>:0] addr_ip;            // HADDR output
-//---------------------------- << start user >> --------------------------------
-    reg  [<<user>>:0] auser_ip;           // HAUSER output
-//----------------------------- << end user >> ---------------------------------
-    wire  [1:0] trans_ip;           // HTRANS output
-    reg         write_ip;           // HWRITE output
-    reg   [2:0] size_ip;            // HSIZE output
-    wire  [2:0] burst_ip;           // HBURST output
-    reg   [<<prot>>:0] prot_ip;            // HPROT output
-//---------------------------- << start unalign >> -----------------------------
-    wire        unalign_ip;         // HUNALIGN output
-    wire  [<<bstrb>>:0] bstrb_ip;           // HBSTRB output
-//----------------------------- << end unalign >> ------------------------------
-    reg   [3:0] master_ip;          // HMASTER output
-    reg         mastlock_ip;        // HMASTLOCK output
-    wire        held_tran_ip;        // Holding register active flag
-    wire        active_ip;          // active_ip signal
-    wire        readyout_ip;        // HREADYOUT input
-    wire  [<<resp>>:0] resp_ip;            // HRESP input
-
-
-// -----------------------------------------------------------------------------
-// Signal declarations
-// -----------------------------------------------------------------------------
-
-    wire        load_reg;             // Holding register load flag
-    wire        pend_tran;            // An active transfer cannot complete
-    reg         pend_tran_reg;         // Registered version of pend_tran
-    wire        addr_valid;           // Indicates address phase of
-                                     // valid transfer
-    reg         data_valid;           // Indicates data phase of
-                                     // valid transfer
-    reg   [1:0] reg_trans;            // Registered HTRANSS
-    reg  [<<addr>>:0] reg_addr;             // Registered HADDRS
-//---------------------------- << start user >> --------------------------------
-    reg  [<<user>>:0] reg_auser;
-//----------------------------- << end user >> ---------------------------------
-    reg         reg_write;            // Registered HWRITES
-    reg   [2:0] reg_size;             // Registered HSIZES
-    reg   [2:0] reg_burst;            // Registered HBURSTS
-    reg   [<<prot>>:0] reg_prot;             // Registered HPROTS
-//---------------------------- << start unalign >> -----------------------------
-    reg         reg_unalign;          // Registered HUNALIGNS
-    reg   [<<bstrb>>:0] reg_bstrb;            // Registered HBSTRBS
-//----------------------------- << end unalign >> ------------------------------
-    reg   [3:0] reg_master;           // Registerd HMASTERS
-    reg         reg_mastlock;         // Registered HMASTLOCKS
-    reg   [1:0] transb;               // HTRANS output used for burst information
-    reg   [1:0] trans_int;            // HTRANS output
-    reg   [2:0] burst_int;            // HBURST output
-    reg   [3:0] offset_addr;          // Address offset for boundary logic
-    reg   [3:0] check_addr;           // Address check for wrapped bursts
-    reg         burst_override;       // Registered burst_override_next
-    wire        burst_override_next;  // Indicates burst has been over-ridden
-    reg         bound;                // Registered version of bound_next
-    wire        bound_next;           // Indicates boundary wrapping
-    wire        bound_en;             // Clock-enable for bound register
-
-
-// -----------------------------------------------------------------------------
-// Beginning of main code
-// -----------------------------------------------------------------------------
-
-// -----------------------------------------------------------------------------
-// Holding Registers
-// -----------------------------------------------------------------------------
-// Each input port has a holding register associated with it and a mux to
-//  select between the register and the direct input path. The control of
-//  the mux is done simply by selecting the holding register when it is loaded
-//  with a pending transfer, otherwise the straight through path is used.
-
-  always @ (negedge HRESETn or posedge HCLK)
-    begin : p_holding_reg_seq1
-      if (~HRESETn)
-        begin
-          reg_trans    <= 2'b00;
-          reg_addr     <= {<<addr_v>>{1'b0}};
-//---------------------------- << start user >> --------------------------------
-          reg_auser    <= {<<user_v>>{1'b0}};
-//----------------------------- << end user >> ---------------------------------
-          reg_write    <= 1'b0 ;
-          reg_size     <= 3'b000;
-          reg_burst    <= 3'b000;
-          reg_prot     <= {<<prot_v>>{1'b0}};
-//---------------------------- << start unalign >> -----------------------------
-          reg_unalign  <= 1'b0;
-          reg_bstrb    <= {<<bstrb_v>>{1'b0}};
-//----------------------------- << end unalign >> ------------------------------
-          reg_master   <= 4'b0000;
-          reg_mastlock <= 1'b0 ;
-        end
-      else
-        if (load_reg)
-          begin
-            reg_trans    <= HTRANSS;
-            reg_addr     <= HADDRS;
-//---------------------------- << start user >> --------------------------------
-            reg_auser    <= HAUSERS;
-//----------------------------- << end user >> ---------------------------------
-            reg_write    <= HWRITES;
-            reg_size     <= HSIZES;
-            reg_burst    <= HBURSTS;
-            reg_prot     <= HPROTS;
-//---------------------------- << start unalign >> -----------------------------
-            reg_unalign  <= HUNALIGNS;
-            reg_bstrb    <= HBSTRBS;
-//----------------------------- << end unalign >> ------------------------------
-            reg_master   <= HMASTERS;
-            reg_mastlock <= HMASTLOCKS;
-          end
-    end
-
-  // addr_valid indicates the address phase of an active (non-BUSY/IDLE)
-  // transfer to this slave port
-  assign addr_valid = ( HSELS & HTRANSS[1] );
-
-  // The holding register is loaded whenever there is a transfer on the input
-  // port which is validated by active HREADYS
-  assign load_reg = ( addr_valid & HREADYS );
-
-  // data_valid register
-  // addr_valid indicates the data phase of an active (non-BUSY/IDLE)
-  // transfer to this slave port. A valid response (HREADY, HRESP) must be
-  // generated
-  always @ (negedge HRESETn or posedge HCLK)
-    begin : p_data_valid
-      if (~HRESETn)
-        data_valid <= 1'b0;
-      else
-       if (HREADYS)
-        data_valid  <= addr_valid;
-    end
-
-// -----------------------------------------------------------------------------
-// Generate HeldTran
-// -----------------------------------------------------------------------------
-// The HeldTran signal is used to indicate when there is an active transfer
-// being presented to the output stage, either passing straight through or from
-// the holding register.
-
-  // pend_tran indicates that an active transfer presented to this
-  // slave cannot complete immediately.  It is always set after the
-  // load_reg signal has been active. When set, it is cleared when the
-  // transfer is being driven onto the selected slave (as indicated by
-  // active_ip being high) and HREADY from the selected slave is high.
-  assign pend_tran = (load_reg & (~active_ip)) ? 1'b1 :
-                    (active_ip & readyout_ip) ? 1'b0 : pend_tran_reg;
-
-  // pend_tran_reg indicates that an active transfer was accepted by the input
-  // stage,but not by the output stage, and so the holding registers should be
-  // used
-  always @ (negedge HRESETn or posedge HCLK)
-    begin : p_pend_tran_reg
-      if (~HRESETn)
-        pend_tran_reg <= 1'b0;
-      else
-        pend_tran_reg <= pend_tran;
-    end
-
-  // held_tran_ip indicates an active transfer, and is held whilst that transfer is
-  // in the holding registers.  It passes to the output stage where it acts as
-  // a request line to the arbitration scheme
-  assign  held_tran_ip  = (load_reg | pend_tran_reg);
-
-  // The output from this stage is selected from the holding register when
-  //  there is a held transfer. Otherwise the direct path is used.
-
-  always @ ( pend_tran_reg or HSELS or HTRANSS or HADDRS or HWRITES or
-             HSIZES or HBURSTS or HPROTS or HMASTERS or HMASTLOCKS or
-//---------------------------- << start user >> --------------------------------
-             HAUSERS or reg_auser or
-//----------------------------- << end user >> ---------------------------------
-             reg_addr or reg_write or reg_size or reg_burst or reg_prot or
-             reg_master or reg_mastlock
-           )
-    begin : p_mux_comb
-      if (~pend_tran_reg)
-        begin
-          sel_ip      = HSELS;
-          trans_int   = HTRANSS;
-          addr_ip     = HADDRS;
-//---------------------------- << start user >> --------------------------------
-          auser_ip    = HAUSERS;
-//----------------------------- << end user >> ---------------------------------
-          write_ip    = HWRITES;
-          size_ip     = HSIZES;
-          burst_int   = HBURSTS;
-          prot_ip     = HPROTS;
-          master_ip   = HMASTERS;
-          mastlock_ip = HMASTLOCKS;
-        end
-      else
-        begin
-          sel_ip      = 1'b1;
-          trans_int   = `TRN_NONSEQ;
-          addr_ip     = reg_addr;
-//---------------------------- << start user >> --------------------------------
-          auser_ip    = reg_auser;
-//----------------------------- << end user >> ---------------------------------
-          write_ip    = reg_write;
-          size_ip     = reg_size;
-          burst_int   = reg_burst;
-          prot_ip     = reg_prot;
-          master_ip   = reg_master;
-          mastlock_ip = reg_mastlock;
-        end
-    end
-
-  // The transb output is used to select the correct Burst value when completing
-  // an interrupted defined-lenght burst.
-
-  always @ (pend_tran_reg or HTRANSS or reg_trans)
-    begin : p_transb_comb
-      if (~pend_tran_reg)
-        transb = HTRANSS;
-      else
-        transb = reg_trans;
-    end // block: p_transb_comb
-
-//---------------------------- << start unalign >> -----------------------------
-  assign unalign_ip = (pend_tran_reg) ? reg_unalign : HUNALIGNS ;
-  assign bstrb_ip   = (pend_tran_reg) ? reg_bstrb : HBSTRBS ;
-//----------------------------- << end unalign >> ------------------------------
-
-  // Convert SEQ->NONSEQ and BUSY->IDLE when an address boundary is crossed
-  // whilst the burst type is being over-ridden, i.e. when completing an
-  // interrupted wrapping burst.
-  assign trans_ip = (burst_override & bound) ? {trans_int[1], 1'b0}
-               : trans_int;
-
-  assign burst_ip = (burst_override & (transb != `TRN_NONSEQ)) ? `BUR_INCR
-               : burst_int;
-
-// -----------------------------------------------------------------------------
-// HREADYOUT Generation
-// -----------------------------------------------------------------------------
-// There are three possible sources for the HREADYOUT signal.
-//  - It is driven LOW when there is a held transfer.
-//  - It is driven HIGH when not Selected or for Idle/Busy transfers.
-//  - At all other times it is driven from the appropriate shared
-//    slave.
-
-  always @ (data_valid or pend_tran_reg or readyout_ip or resp_ip)
-    begin : p_ready_comb
-      if (~data_valid)
-        begin
-          HREADYOUTS = 1'b1;
-          HRESPS     = `RSP_OKAY;
-        end
-      else if (pend_tran_reg)
-        begin
-          HREADYOUTS = 1'b0;
-          HRESPS     = `RSP_OKAY;
-        end
-      else
-        begin
-          HREADYOUTS = readyout_ip;
-          HRESPS     = resp_ip;
-        end
-    end // block: p_ready_comb
-
-// -----------------------------------------------------------------------------
-// Early Burst Termination
-// -----------------------------------------------------------------------------
-// There are times when the output stage will switch to another input port
-//  without allowing the current burst to complete. In these cases the HTRANS
-//  and HBURST signals need to be overriden to ensure that the transfers
-//  reaching the output port meet the AHB specification.
-
-  assign burst_override_next  = ( (HTRANSS == `TRN_NONSEQ) |
-                                (HTRANSS == `TRN_IDLE) ) ? 1'b0
-                              : ( (HTRANSS ==`TRN_SEQ) &
-                                   load_reg &
-                                   (~active_ip) ) ? 1'b1
-                                  : burst_override;
-
-  // burst_override register
-  always @ (negedge HRESETn or posedge HCLK)
-    begin : p_burst_overrideseq
-      if (~HRESETn)
-        burst_override <= 1'b0;
-      else
-        if (HREADYS)
-          burst_override <= burst_override_next;
-    end // block: p_burst_overrideseq
-
-// -----------------------------------------------------------------------------
-// Boundary Checking Logic
-// -----------------------------------------------------------------------------
-  // offset_addr
-  always @ (HADDRS or HSIZES)
-    begin : p_offset_addr_comb
-      case (HSIZES)
-        3'b000 : offset_addr = HADDRS[3:0];
-        3'b001 : offset_addr = HADDRS[4:1];
-        3'b010 : offset_addr = HADDRS[5:2];
-        3'b011 : offset_addr = HADDRS[6:3];
-
-        3'b100, 3'b101, 3'b110, 3'b111 :
-          offset_addr = HADDRS[3:0];      // Sizes >= 128-bits are not supported
-
-        default : offset_addr = 4'bxxxx;
-      endcase
-    end
-
-  // check_addr
-  always @ (offset_addr or HBURSTS)
-    begin : p_check_addr_comb
-      case (HBURSTS)
-        `BUR_WRAP4 : begin
-          check_addr[1:0] = offset_addr[1:0];
-          check_addr[3:2] = 2'b11;
-        end
-
-        `BUR_WRAP8 : begin
-          check_addr[2:0] = offset_addr[2:0];
-          check_addr[3]   = 1'b1;
-        end
-
-        `BUR_WRAP16 :
-          check_addr[3:0] = offset_addr[3:0];
-
-        `BUR_SINGLE, `BUR_INCR, `BUR_INCR4, `BUR_INCR8, `BUR_INCR16 :
-          check_addr[3:0] = 4'b0000;
-
-        default : check_addr[3:0] = 4'bxxxx;
-      endcase
-    end
-
-  assign bound_next = ( check_addr == 4'b1111 );
-
-  assign bound_en = ( HTRANSS[1] & HREADYS );
-
-  // bound register
-  always @ (negedge HRESETn or posedge HCLK)
-    begin : p_bound_seq
-      if (~HRESETn)
-        bound <= 1'b0;
-      else
-        if (bound_en)
-          bound <= bound_next;
-    end
-
-
-endmodule
-
-// --================================= End ===================================--
diff --git a/system/src/nanosoc_ahb_busmatrix/verilog/src/cmsdk_ahb_bm_output_stage.v b/system/src/nanosoc_ahb_busmatrix/verilog/src/cmsdk_ahb_bm_output_stage.v
deleted file mode 100755
index 27920fe250ee30b45338affe370c9ca312ab3047..0000000000000000000000000000000000000000
--- a/system/src/nanosoc_ahb_busmatrix/verilog/src/cmsdk_ahb_bm_output_stage.v
+++ /dev/null
@@ -1,538 +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-<<copyright_year>> 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 <<connectivity>> connectivity,
-//                         and has a <<arbiter_type>> arbiter scheme.
-//
-//-----------------------------------------------------------------------------
-
-<<timescale_directive>>
-
-module <<output_stage_name>> (
-
-    // Common AHB signals
-    HCLK,
-    HRESETn,
-
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    // Port <<in>> Signals
-    sel_op<<in>>,
-    addr_op<<in>>,
-//---------------------------- << start user >> --------------------------------
-    auser_op<<in>>,
-//----------------------------- << end user >> ---------------------------------
-    trans_op<<in>>,
-    write_op<<in>>,
-    size_op<<in>>,
-    burst_op<<in>>,
-    prot_op<<in>>,
-//---------------------------- << start unalign >> -----------------------------
-    unalign_op<<in>>,
-    bstrb_op<<in>>,
-//----------------------------- << end unalign >> ------------------------------
-    master_op<<in>>,
-    mastlock_op<<in>>,
-    wdata_op<<in>>,
-//---------------------------- << start user >> --------------------------------
-    wuser_op<<in>>,
-//----------------------------- << end user >> ---------------------------------
-    held_tran_op<<in>>,
-
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-    // Slave read data and response
-    HREADYOUTM,
-
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    active_op<<in>>,
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-
-    // Slave Address/Control Signals
-    HSELM,
-    HADDRM,
-//---------------------------- << start user >> --------------------------------
-    HAUSERM,
-//----------------------------- << end user >> ---------------------------------
-    HTRANSM,
-    HWRITEM,
-    HSIZEM,
-    HBURSTM,
-    HPROTM,
-//---------------------------- << start unalign >> -----------------------------
-    HUNALIGNM,
-    HBSTRBM,
-//----------------------------- << end unalign >> ------------------------------
-    HMASTERM,
-    HMASTLOCKM,
-    HREADYMUXM,
-//---------------------------- << start user >> --------------------------------
-    HWUSERM,
-//----------------------------- << end user >> ---------------------------------
-    HWDATAM
-
-    );
-
-
-// -----------------------------------------------------------------------------
-// Input and Output declarations
-// -----------------------------------------------------------------------------
-
-    // Common AHB signals
-    input         HCLK;       // AHB system clock
-    input         HRESETn;    // AHB system reset
-
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    // Bus-switch input <<in>>
-    input         sel_op<<in>>;       // Port <<in>> HSEL signal
-    input [<<addr>>:0]  addr_op<<in>>;      // Port <<in>> HADDR signal
-//---------------------------- << start user >> --------------------------------
-    input [<<user>>:0]  auser_op<<in>>;     // Port <<in>> HAUSER signal
-//----------------------------- << end user >> ---------------------------------
-    input  [1:0]  trans_op<<in>>;     // Port <<in>> HTRANS signal
-    input         write_op<<in>>;     // Port <<in>> HWRITE signal
-    input  [2:0]  size_op<<in>>;      // Port <<in>> HSIZE signal
-    input  [2:0]  burst_op<<in>>;     // Port <<in>> HBURST signal
-    input  [<<prot>>:0]  prot_op<<in>>;      // Port <<in>> HPROT signal
-//---------------------------- << start unalign >> -----------------------------
-    input         unalign_op<<in>>;   // Port <<in>> HUNALIGN signal
-    input  [<<bstrb>>:0]  bstrb_op<<in>>;     // Port <<in>> HBSTRB signal
-//----------------------------- << end unalign >> ------------------------------
-    input  [3:0]  master_op<<in>>;    // Port <<in>> HMASTER signal
-    input         mastlock_op<<in>>;  // Port <<in>> HMASTLOCK signal
-    input [<<data>>:0]  wdata_op<<in>>;     // Port <<in>> HWDATA signal
-//---------------------------- << start user >> --------------------------------
-    input [<<user>>:0]  wuser_op<<in>>;     // Port <<in>> HWUSER signal
-//----------------------------- << end user >> ---------------------------------
-    input         held_tran_op<<in>>;  // Port <<in>> HeldTran signal
-
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-    input         HREADYOUTM; // HREADY feedback
-
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    output        active_op<<in>>;    // Port <<in>> Active signal
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-
-    // Slave Address/Control Signals
-    output        HSELM;      // Slave select line
-    output [<<addr>>:0] HADDRM;     // Address
-//---------------------------- << start user >> --------------------------------
-    output [<<user>>:0] HAUSERM;    // User Address bus
-//----------------------------- << end user >> ---------------------------------
-    output  [1:0] HTRANSM;    // Transfer type
-    output        HWRITEM;    // Transfer direction
-    output  [2:0] HSIZEM;     // Transfer size
-    output  [2:0] HBURSTM;    // Burst type
-    output  [<<prot>>:0] HPROTM;     // Protection control
-//---------------------------- << start unalign >> -----------------------------
-    output        HUNALIGNM;  // Unaligned transfer
-    output [<<bstrb>>:0]  HBSTRBM;    // Byte Lane strobe signal
-//----------------------------- << end unalign >> ------------------------------
-    output  [3:0] HMASTERM;   // Master ID
-    output        HMASTLOCKM; // Locked transfer
-    output        HREADYMUXM; // Transfer done
-//---------------------------- << start user >> --------------------------------
-    output [<<user>>:0] HWUSERM;    // User data bus
-//----------------------------- << end user >> ---------------------------------
-    output [<<data>>:0] HWDATAM;    // Write data
-
-
-// -----------------------------------------------------------------------------
-// Wire declarations
-// -----------------------------------------------------------------------------
-    wire        HCLK;       // AHB system clock
-    wire        HRESETn;    // AHB system reset
-
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    // Bus-switch input <<in>>
-    wire        sel_op<<in>>;       // Port <<in>> HSEL signal
-    wire [<<addr>>:0] addr_op<<in>>;      // Port <<in>> HADDR signal
-//---------------------------- << start user >> --------------------------------
-    wire [<<user>>:0] auser_op<<in>>;     // Port <<in>> HAUSER signal
-//----------------------------- << end user >> ---------------------------------
-    wire  [1:0] trans_op<<in>>;     // Port <<in>> HTRANS signal
-    wire        write_op<<in>>;     // Port <<in>> HWRITE signal
-    wire  [2:0] size_op<<in>>;      // Port <<in>> HSIZE signal
-    wire  [2:0] burst_op<<in>>;     // Port <<in>> HBURST signal
-    wire  [<<prot>>:0] prot_op<<in>>;      // Port <<in>> HPROT signal
-//---------------------------- << start unalign >> -----------------------------
-    wire        unalign_op<<in>>;   // Port <<in>> HUNALIGN signal
-    wire  [<<bstrb>>:0] bstrb_op<<in>>;     // Port <<in>> HBSTRB signal
-//----------------------------- << end unalign >> ------------------------------
-    wire  [3:0] master_op<<in>>;    // Port <<in>> HMASTER signal
-    wire        mastlock_op<<in>>;  // Port <<in>> HMASTLOCK signal
-    wire [<<data>>:0] wdata_op<<in>>;     // Port <<in>> HWDATA signal
-//---------------------------- << start user >> --------------------------------
-    wire [<<user>>:0] wuser_op<<in>>;     // Port <<in>> HWUSER signal
-//----------------------------- << end user >> ---------------------------------
-    wire        held_tran_op<<in>>;  // Port <<in>> HeldTran signal
-    reg         active_op<<in>>;    // Port <<in>> Active signal
-
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-    // Slave Address/Control Signals
-    wire        HSELM;      // Slave select line
-    reg  [<<addr>>:0] HADDRM;     // Address
-//---------------------------- << start user >> --------------------------------
-    reg  [<<user>>:0] HAUSERM;    // User Address bus
-//----------------------------- << end user >> ---------------------------------
-    wire  [1:0] HTRANSM;    // Transfer type
-    reg         HWRITEM;    // Transfer direction
-    reg   [2:0] HSIZEM;     // Transfer size
-    wire  [2:0] HBURSTM;    // Burst type
-    reg   [<<prot>>:0] HPROTM;     // Protection control
-//---------------------------- << start unalign >> -----------------------------
-    reg         HUNALIGNM;  // Unaligned transfer
-    reg  [<<bstrb>>:0]  HBSTRBM;    // Byte Lane strobe signal
-//----------------------------- << end unalign >> ------------------------------
-    reg   [3:0] HMASTERM;   // Master ID
-    wire        HMASTLOCKM; // Locked transfer
-    wire        HREADYMUXM; // Transfer done
-//---------------------------- << start user >> --------------------------------
-    reg  [<<user>>:0] HWUSERM;    // User data bus
-//----------------------------- << end user >> ---------------------------------
-    reg  [<<data>>:0] HWDATAM;    // Write data
-    wire        HREADYOUTM; // HREADY feedback
-
-
-// -----------------------------------------------------------------------------
-// Signal declarations
-// -----------------------------------------------------------------------------
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    wire        req_port<<in>>;     // Port <<in>> request signal
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-
-    wire  [<<idw_si>>:0] addr_in_port;   // Address input port
-    reg   [<<idw_si>>: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
-// -----------------------------------------------------------------------------
-
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-  assign req_port<<in>> = held_tran_op<<in>> & sel_op<<in>>;
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-
-  // Arbiter instance for resolving requests to this output stage
-  <<output_arb_name>> u_output_arb (
-
-    .HCLK       (HCLK),
-    .HRESETn    (HRESETn),
-
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    .req_port<<in>>   (req_port<<in>>),
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-
-    .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)
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-      active_op<<in>> = 1'b0;
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-
-      // Decode selection when enabled
-      if (~no_port)
-        case (addr_in_port)
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-          <<idw_si_v>>'b<<bin_in>> : active_op<<in>> = 1'b1;
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-          default : begin
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-            active_op<<in>> = 1'bx;
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-          end
-        endcase // case(addr_in_port)
-    end // block: p_active_comb
-
-
-  //  Address/control output decode
-  always @ (
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-             sel_op<<in>> or addr_op<<in>> or trans_op<<in>> or write_op<<in>> or
-             size_op<<in>> or burst_op<<in>> or prot_op<<in>> or
-//---------------------------- << start unalign >> -----------------------------
-             unalign_op<<in>> or bstrb_op<<in>> or
-//----------------------------- << end unalign >> ------------------------------
-//---------------------------- << start user >> --------------------------------
-             auser_op<<in>> or
-//----------------------------- << end user >> ---------------------------------
-             master_op<<in>> or mastlock_op<<in>> or
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-             addr_in_port or no_port
-           )
-    begin : p_addr_mux
-      // Default values
-      i_hselm     = 1'b0;
-      HADDRM      = {<<addr_v>>{1'b0}};
-//---------------------------- << start user >> --------------------------------
-      HAUSERM     = {<<user_v>>{1'b0}};
-//----------------------------- << end user >> ---------------------------------
-      i_htransm   = 2'b00;
-      HWRITEM     = 1'b0;
-      HSIZEM      = 3'b000;
-      i_hburstm   = 3'b000;
-      HPROTM      = {<<prot_v>>{1'b0}};
-//---------------------------- << start unalign >> -----------------------------
-      HUNALIGNM   = 1'b0;
-      HBSTRBM     = {<<bstrb_v>>{1'b0}};
-//----------------------------- << end unalign >> ------------------------------
-      HMASTERM    = 4'b0000;
-      i_hmastlockm= 1'b0;
-
-      // Decode selection when enabled
-      if (~no_port)
-        case (addr_in_port)
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-          // Bus-switch input <<in>>
-          <<idw_si_v>>'b<<bin_in>> :
-            begin
-              i_hselm     = sel_op<<in>>;
-              HADDRM      = addr_op<<in>>;
-//---------------------------- << start user >> --------------------------------
-              HAUSERM     = auser_op<<in>>;
-//----------------------------- << end user >> ---------------------------------
-              i_htransm   = trans_op<<in>>;
-              HWRITEM     = write_op<<in>>;
-              HSIZEM      = size_op<<in>>;
-              i_hburstm   = burst_op<<in>>;
-              HPROTM      = prot_op<<in>>;
-//---------------------------- << start unalign >> -----------------------------
-              HUNALIGNM   = unalign_op<<in>>;
-              HBSTRBM     = bstrb_op<<in>>;
-//----------------------------- << end unalign >> ------------------------------
-              HMASTERM    = master_op<<in>>;
-              i_hmastlockm= mastlock_op<<in>>;
-            end // case: 4'b<<bin_in>>
-
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-          default :
-            begin
-              i_hselm     = 1'bx;
-              HADDRM      = {<<addr_v>>{1'bx}};
-//---------------------------- << start user >> --------------------------------
-              HAUSERM     = {<<user_v>>{1'bx}};
-//----------------------------- << end user >> ---------------------------------
-              i_htransm   = 2'bxx;
-              HWRITEM     = 1'bx;
-              HSIZEM      = 3'bxxx;
-              i_hburstm   = 3'bxxx;
-              HPROTM      = {<<prot_v>>{1'bx}};
-//---------------------------- << start unalign >> -----------------------------
-              HUNALIGNM   = 1'bx;
-              HBSTRBM     = {<<bstrb_v>>{1'bx}};
-//----------------------------- << end unalign >> ------------------------------
-              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)
-//------------------------------ << start rrin >> ------------------------------
-//------------------------------ << end rrin >> ------------------------------       used to get a valid port number for the reset of data_port
-        data_in_port <= <<idw_si_v>>'b<<bin_rrin>>;
-      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 @ (
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-             wdata_op<<in>> or
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-             data_in_port or wdata_phase
-           )
-    begin : p_data_mux
-      // Default value
-      HWDATAM = {<<data_v>>{1'b0}};
-
-      // If interface active
-      if (wdata_phase)
-        // Decode selection
-        case (data_in_port)
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-          <<idw_si_v>>'b<<bin_in>> : HWDATAM  = wdata_op<<in>>;
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-          default : HWDATAM = {<<data_v>>{1'bx}};
-        endcase // case(data_in_port)
-    end // block: p_data_mux
-
-//---------------------------- << start user >> --------------------------------
-  // HWUSERM output decode
-  always @ (
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-             wuser_op<<in>> or
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-             data_in_port or wdata_phase
-           )
-    begin : p_wuser_mux
-      // Default value
-      HWUSERM  = {<<user_v>>{1'b0}};
-
-      // If interface active
-      if (wdata_phase)
-        // Decode selection
-        case (data_in_port)
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-          <<idw_si_v>>'b<<bin_in>> : HWUSERM  = wuser_op<<in>>;
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-          default : HWUSERM  = {<<user_v>>{1'bx}};
-        endcase // case(data_in_port)
-    end // block: p_wuser_mux
-//----------------------------- << end user >> ---------------------------------
-
-  // ---------------------------------------------------------------------------
-  // 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_ahb_busmatrix/verilog/src/cmsdk_ahb_bm_round_arb.v b/system/src/nanosoc_ahb_busmatrix/verilog/src/cmsdk_ahb_bm_round_arb.v
deleted file mode 100755
index 5108798c5acf8aa82a2fb16f9c85105a98d654f4..0000000000000000000000000000000000000000
--- a/system/src/nanosoc_ahb_busmatrix/verilog/src/cmsdk_ahb_bm_round_arb.v
+++ /dev/null
@@ -1,375 +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-<<copyright_year>> 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 <<connectivity>> connectivity.
-//
-//-----------------------------------------------------------------------------
-
-<<timescale_directive>>
-
-module <<output_arb_name>> (
-
-    // Common AHB signals
-    HCLK ,
-    HRESETn,
-
-    // Input port request signals
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    req_port<<in>>,
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-
-    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
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    input        req_port<<in>>;     // Port <<in>> request signal
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-    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 [<<idw_si>>: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
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    wire       req_port<<in>>;       // Port <<in>> request signal
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-    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 [<<idw_si>>:0] addr_in_port;     // Address input port
-    wire       no_port;        // No port selected signal
-
-
-// -----------------------------------------------------------------------------
-// Signal declarations
-// -----------------------------------------------------------------------------
-    reg  [<<idw_si>>:0] next_addr_in_port; // D-input of addr_in_port
-    reg                 next_no_port;      // D-input of no_port
-    reg  [<<idw_si>>:0] i_addr_in_port;    // Internal version of addr_in_port
-    reg                 i_no_port;         // Internal version of no_port
-
-    // Burst counter logic
-    reg  [3:0] next_burst_remain;    // D-input of reg_burst_remain
-    reg  [3:0] reg_burst_remain;     // Burst counter
-    reg        next_burst_hold;      // D-input of reg_burst_hold
-    reg        reg_burst_hold;       // Burst hold signal
-
-    // INCR burst logic
-    reg  [1:0] reg_early_term_count; // Counts number of INCR bursts terminated
-                                     //  earlier than 4-beats or 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_remain indicates the number of transfers remaining in the
-// current fixed length burst after the current transfer.
-// reg_burst_hold is set when transfers remain in a burst and causes the arbitration
-// to be held in the current cycle
-
-  always @ (HTRANSM or HSELM or HBURSTM or reg_burst_remain or reg_burst_hold or reg_early_term_count)
-    begin : p_next_burst_remain_comb
-      // Force the Burst logic to reset if this port is de-selected.  This would
-      // otherwise cause problems in several situations, e.g.:
-      //   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_remain = 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_remain = 4'd15;
-                next_burst_hold = 1'b1;
-              end // case: BUR_INCR16 | BUR_WRAP16
-
-              `BUR_INCR8, `BUR_WRAP8 : begin
-                next_burst_remain = 4'd7;
-                next_burst_hold = 1'b1;
-              end // case: BUR_INCR8 | BUR_WRAP8
-
-              `BUR_INCR4, `BUR_WRAP4 : begin
-                next_burst_remain = 4'd3;
-                next_burst_hold = 1'b1;
-              end // case: BUR_INCR4 | BUR_WRAP4
-
-              `BUR_INCR : begin
-                    next_burst_remain = 4'd3;
-                    next_burst_hold = 1'b1;
-              end // case: BUR_INCR
-
-              `BUR_SINGLE : begin
-                next_burst_remain = 4'd0;
-                next_burst_hold  = 1'b0;
-              end // case: BUR_SINGLE | BUR_INCR
-
-              default : begin
-                next_burst_remain = 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_remain = 4'd0;
-            end
-
-          end // case: `TRN_NONSEQ
-
-          `TRN_SEQ : begin
-            if (reg_burst_remain == 4'd1) // this was last one remaining
-              begin
-                next_burst_hold = 1'b0;
-                next_burst_remain = 4'd0;
-              end
-            else
-              begin
-                next_burst_hold = reg_burst_hold;
-                if (reg_burst_remain != 4'd0)
-                  next_burst_remain = reg_burst_remain - 4'b1;
-                else
-                  next_burst_remain = 4'd0;
-              end
-          end // case: `TRN_SEQ
-
-          `TRN_BUSY : begin
-            next_burst_remain = reg_burst_remain;
-            next_burst_hold = reg_burst_hold;
-          end // case: `TRN_BUSY
-
-          `TRN_IDLE : begin
-            next_burst_remain = 4'd0;
-            next_burst_hold = 1'b0;
-          end // case: `TRN_IDLE
-
-          default : begin
-            next_burst_remain = 4'bxxxx;
-            next_burst_hold = 1'bx;
-          end // case: default
-
-        endcase // case(HTRANSM)
-    end // block: p_next_burst_remain_comb
-
-
-  // reg_early_term_count counts the number of bursts which have terminated
-  // earlier than the defined arbitration point: this is primarily
-  // intended to detect back-to-back INCR bursts which are less than 4
-  // beats long or early terminated bursts by another interconnect.
-  // If such bursts are not counted then theoretically a
-  // sequence of e.g. 3-beat INCR bursts from a master would lock the
-  // arbitration scheme indefinitely.
-
-  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_remain     <= 4'b0000;
-          reg_burst_hold       <= 1'b0;
-          reg_early_term_count <= 2'b00;
-        end // if (HRESETn == 1'b0)
-      else
-        if (HREADYM)
-          begin
-            reg_burst_remain     <= next_burst_remain;
-            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 round-robin scheme.
-// For example if port 1 is currently in use then the arbiter will first check
-//  if port 2 requires access, then it checks port 3, then port 4 etc. When
-//  port 2 is currently in use it will check port 3 first then port 4 and
-//  all  remaining ports, before finally checking port 1.
-// 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 @ (
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-             req_port<<in>> or
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-             HMASTLOCKM or next_burst_hold or HSELM or i_no_port or i_addr_in_port
-           )
-    begin : p_sel_port_comb
-      // Default values are used for next_no_port and next_addr_in_port
-      next_no_port = 1'b0;
-      next_addr_in_port = i_addr_in_port;
-
-      if ( HMASTLOCKM | next_burst_hold )
-        next_addr_in_port = i_addr_in_port;
-      else if (i_no_port)
-        begin
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-          <<rrelse>>if (req_port<<in>>)
-            next_addr_in_port = <<idw_si_v>>'b<<bin_in>>;
-//------------------------------ << end connection >> --------------------------
-//------------------------------ << end in >> ----------------------------------
-          else
-            next_no_port = 1'b1;
-        end
-      else
-        case (i_addr_in_port)
-//------------------------------ << start rrin >> ------------------------------
-          <<idw_si_v>>'b<<bin_rrin>> : begin
-//------------------------------ << start rridx >> -----------------------------
-            <<rrelse>>if (req_port<<rridx>>)
-              next_addr_in_port = <<idw_si_v>>'b<<bin_rridx>>;
-//------------------------------ << end rridx >> -------------------------------
-            else if (HSELM)
-              next_addr_in_port = <<idw_si_v>>'b<<bin_rrin>>;
-            else
-              next_no_port = 1'b1;
-          end
-
-//------------------------------ << end rrin >> --------------------------------
-          default : begin
-            next_addr_in_port = {<<idw_si_v>>{1'bx}};
-            next_no_port = 1'bx;
-          end
-      endcase
-    end
-
-  // Sequential process
-  always @ (negedge HRESETn or posedge HCLK)
-    begin : p_addr_in_port_reg
-      if (~HRESETn)
-        begin
-          i_no_port      <= 1'b1;
-          i_addr_in_port <= {<<idw_si_v>>{1'b0}};
-        end
-      else
-        if (HREADYM)
-          begin
-            i_no_port      <= next_no_port;
-            i_addr_in_port <= next_addr_in_port;
-          end
-    end
-
-  // Drive outputs with internal versions
-  assign addr_in_port = i_addr_in_port;
-  assign no_port      = i_no_port;
-
-
-endmodule
-
-// --================================= End ===================================--
diff --git a/system/src/nanosoc_ahb_busmatrix/verilog/src/cmsdk_ahb_bm_single_arb.v b/system/src/nanosoc_ahb_busmatrix/verilog/src/cmsdk_ahb_bm_single_arb.v
deleted file mode 100755
index 5719c83b1b2d6ee47cdf1202f1ed421e291327be..0000000000000000000000000000000000000000
--- a/system/src/nanosoc_ahb_busmatrix/verilog/src/cmsdk_ahb_bm_single_arb.v
+++ /dev/null
@@ -1,160 +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-<<copyright_year>> 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 normally used to determine
-//                         which of the input stages will be given access to
-//                         the shared slave. However, for this output port, only
-//                         one sparse connection is declared and arbitration
-//                         is simplified to a 'grant when requested' function.
-//
-//  Notes               : The bus matrix has <<connectivity>> connectivity and the
-//                         <<arbiter_type>> arbiter scheme has been overridden for this
-//                         instance only.
-//
-//-----------------------------------------------------------------------------
-
-<<timescale_directive>>
-
-module <<output_arb_name>> (
-
-    // Common AHB signals
-    HCLK ,
-    HRESETn,
-
-    // Input port request signals
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    req_port<<in>>,
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-
-    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
-
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    input        req_port<<in>>;     // Port <<in>> request signal
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-
-    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 [<<idw_si>>:0] addr_in_port;   // Port address input
-    output       no_port;       // No port selected signal
-
-
-// -----------------------------------------------------------------------------
-// Wire declarations
-// -----------------------------------------------------------------------------
-    wire       HCLK;           // AHB system clock
-    wire       HRESETn;        // AHB system reset
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    wire       req_port<<in>>;       // Port <<in>> request signal
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-    wire       HREADYM;        // Transfer done
-    wire       HSELM;          // Slave select line
-    wire [1:0] HTRANSM;        // Transfer type
-    wire       HMASTLOCKM;     // Locked transfer
-    wire [<<idw_si>>:0] addr_in_port;     // Port address input
-    reg        no_port;         // No port selected signal
-
-
-// -----------------------------------------------------------------------------
-// Signal declarations
-// -----------------------------------------------------------------------------
-    wire [<<idw_si>>:0] addr_in_port_next; // D-input of addr_in_port
-    reg  [<<idw_si>>:0] iaddr_in_port;    // Internal version of addr_in_port
-    wire       no_port_next;     // D-input of no_port
-    wire       request;        // Slave port request
-
-
-// -----------------------------------------------------------------------------
-// Beginning of main code
-// -----------------------------------------------------------------------------
-//------------------------------------------------------------------------------
-// Port Selection
-//------------------------------------------------------------------------------
-// The single output 'arbitration' function looks at the request to use the
-//  output port and grants it appropriately. The input port will remain granted
-//  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 the
-//  input port should be deselected.
-
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-  assign request = req_port<<in>> | ( (iaddr_in_port == <<idw_si_v>>'b<<bin_in>>) & HSELM &
-                                (HTRANSM != 2'b00) );
-
-  assign no_port_next     = ! ( HMASTLOCKM | request | HSELM );
-  assign addr_in_port_next = ( request & !HMASTLOCKM ) ? <<idw_si_v>>'b<<bin_in>> : iaddr_in_port;
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-
-  // Sequential process
-  always @ (negedge HRESETn or posedge HCLK)
-  begin : p_addr_in_port_reg
-    if (~HRESETn)
-      begin
-        no_port      <= 1'b1;
-        iaddr_in_port <= {<<idw_si_v>>{1'b0}};
-      end
-    else
-      if (HREADYM)
-        begin
-          no_port      <= no_port_next;
-          iaddr_in_port <= addr_in_port_next;
-        end
-  end // block: p_addr_in_port_reg
-
-  // Drive output with internal version
-  assign addr_in_port = iaddr_in_port;
-
-
-endmodule
-
-// --================================= End ===================================--
diff --git a/system/src/nanosoc_ahb_busmatrix/verilog/src/cmsdk_ahb_bm_single_output_stage.v b/system/src/nanosoc_ahb_busmatrix/verilog/src/cmsdk_ahb_bm_single_output_stage.v
deleted file mode 100755
index 3aa50647215e1d766c1d17d970fbfd02a5ffd17e..0000000000000000000000000000000000000000
--- a/system/src/nanosoc_ahb_busmatrix/verilog/src/cmsdk_ahb_bm_single_output_stage.v
+++ /dev/null
@@ -1,416 +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-<<copyright_year>> 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. However, for this
-//                         output port, only one sparse connection is declared
-//                         and muxing is simplified.
-//
-//  Notes               : The bus matrix has <<connectivity>> connectivity and the
-//                         standard output stage has been overridden for this
-//                         instance only.
-//
-//-----------------------------------------------------------------------------
-
-<<timescale_directive>>
-
-module <<output_stage_name>> (
-
-    // Common AHB signals
-    HCLK,
-    HRESETn,
-
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    // Port <<in>> Signals
-    sel_op<<in>>,
-    addr_op<<in>>,
-//---------------------------- << start user >> --------------------------------
-    auser_op<<in>>,
-//----------------------------- << end user >> ---------------------------------
-    trans_op<<in>>,
-    write_op<<in>>,
-    size_op<<in>>,
-    burst_op<<in>>,
-    prot_op<<in>>,
-//---------------------------- << start unalign >> -----------------------------
-    unalign_op<<in>>,
-    bstrb_op<<in>>,
-//----------------------------- << end unalign >> ------------------------------
-    master_op<<in>>,
-    mastlock_op<<in>>,
-    wdata_op<<in>>,
-//---------------------------- << start user >> --------------------------------
-    wuser_op<<in>>,
-//----------------------------- << end user >> ---------------------------------
-    held_tran_op<<in>>,
-
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-    // Slave read data and response
-    HREADYOUTM,
-
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    active_op<<in>>,
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-
-    // Slave addr_opess/Control Signals
-    HSELM,
-    HADDRM,
-//---------------------------- << start user >> --------------------------------
-    HAUSERM,
-//----------------------------- << end user >> ---------------------------------
-    HTRANSM,
-    HWRITEM,
-    HSIZEM,
-    HBURSTM,
-    HPROTM,
-//---------------------------- << start unalign >> -----------------------------
-    HUNALIGNM,
-    HBSTRBM,
-//----------------------------- << end unalign >> ------------------------------
-    HMASTERM,
-    HMASTLOCKM,
-    HREADYMUXM,
-//---------------------------- << start user >> --------------------------------
-    HWUSERM,
-//----------------------------- << end user >> ---------------------------------
-    HWDATAM
-
-    );
-
-
-// -----------------------------------------------------------------------------
-// Input and Output declarations
-// -----------------------------------------------------------------------------
-
-    // Common AHB signals
-    input         HCLK;       // AHB system clock
-    input         HRESETn;    // AHB system reset
-
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    // Bus-switch input <<in>>
-    input         sel_op<<in>>;       // Port <<in>> HSEL signal
-    input [<<addr>>:0]  addr_op<<in>>;      // Port <<in>> HADDR signal
-//---------------------------- << start user >> --------------------------------
-    input [<<user>>:0]  auser_op<<in>>;     // Port <<in>> HAUSER signal
-//----------------------------- << end user >> ---------------------------------
-    input  [1:0]  trans_op<<in>>;     // Port <<in>> HTRANS signal
-    input         write_op<<in>>;     // Port <<in>> HWRITE signal
-    input  [2:0]  size_op<<in>>;      // Port <<in>> HSIZE signal
-    input  [2:0]  burst_op<<in>>;     // Port <<in>> HBURST signal
-    input  [<<prot>>:0]  prot_op<<in>>;      // Port <<in>> HPROT signal
-//---------------------------- << start unalign >> -----------------------------
-    input         unalign_op<<in>>;   // Port <<in>> HUNALIGN signal
-    input  [<<bstrb>>:0]  bstrb_op<<in>>;     // Port <<in>> HBSTRB signal
-//----------------------------- << end unalign >> ------------------------------
-    input  [3:0]  master_op<<in>>;    // Port <<in>> HMASTER signal
-    input         mastlock_op<<in>>;  // Port <<in>> HMASTLOCK signal
-    input [<<data>>:0]  wdata_op<<in>>;     // Port <<in>> HWDATA signal
-//---------------------------- << start user >> --------------------------------
-    input [<<user>>:0]  wuser_op<<in>>;     // Port <<in>> HWUSER signal
-//----------------------------- << end user >> ---------------------------------
-    input         held_tran_op<<in>>;  // Port <<in>> held_tran_op signal
-
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-    input         HREADYOUTM; // HREADY feedback
-
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    output        active_op<<in>>;    // Port <<in>> active_op signal
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-
-    // Slave addr_opess/Control Signals
-    output        HSELM;      // Slave select line
-    output [<<addr>>:0] HADDRM;     // addr_opess
-//---------------------------- << start user >> --------------------------------
-    output [<<user>>:0] HAUSERM;    // User addr_opess bus
-//----------------------------- << end user >> ---------------------------------
-    output  [1:0] HTRANSM;    // trans_opfer type
-    output        HWRITEM;    // trans_opfer direction
-    output  [2:0] HSIZEM;     // trans_opfer size
-    output  [2:0] HBURSTM;    // burst_op type
-    output  [<<prot>>:0] HPROTM;     // prot_opection control
-//---------------------------- << start unalign >> -----------------------------
-    output        HUNALIGNM;  // unalign_oped transfer
-    output [<<bstrb>>:0]  HBSTRBM;    // Byte Lane strobe signal
-//----------------------------- << end unalign >> ------------------------------
-    output  [3:0] HMASTERM;   // master_op ID
-    output        HMASTLOCKM; // Locked transfer
-    output        HREADYMUXM; // trans_opfer done
-//---------------------------- << start user >> --------------------------------
-    output [<<user>>:0] HWUSERM;    // User data bus
-//----------------------------- << end user >> ---------------------------------
-    output [<<data>>:0] HWDATAM;    // write_op data
-
-
-// -----------------------------------------------------------------------------
-// Wire declarations
-// -----------------------------------------------------------------------------
-    wire        HCLK;       // AHB system clock
-    wire        HRESETn;    // AHB system reset
-
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    // Bus-switch input <<in>>
-    wire        sel_op<<in>>;       // Port <<in>> HSEL signal
-    wire [<<addr>>:0] addr_op<<in>>;      // Port <<in>> HADDR signal
-//---------------------------- << start user >> --------------------------------
-    wire [<<user>>:0] auser_op<<in>>;     // Port <<in>> HAUSER signal
-//----------------------------- << end user >> ---------------------------------
-    wire  [1:0] trans_op<<in>>;     // Port <<in>> HTRANS signal
-    wire        write_op<<in>>;     // Port <<in>> HWRITE signal
-    wire  [2:0] size_op<<in>>;      // Port <<in>> HSIZE signal
-    wire  [2:0] burst_op<<in>>;     // Port <<in>> HBURST signal
-    wire  [<<prot>>:0] prot_op<<in>>;      // Port <<in>> HPROT signal
-//---------------------------- << start unalign >> -----------------------------
-    wire        unalign_op<<in>>;   // Port <<in>> HUNALIGN signal
-    wire  [<<bstrb>>:0] bstrb_op<<in>>;     // Port <<in>> HBSTRB signal
-//----------------------------- << end unalign >> ------------------------------
-    wire  [3:0] master_op<<in>>;    // Port <<in>> HMASTER signal
-    wire        mastlock_op<<in>>;  // Port <<in>> HMASTLOCK signal
-    wire [<<data>>:0] wdata_op<<in>>;     // Port <<in>> HWDATA signal
-//---------------------------- << start user >> --------------------------------
-    wire [<<user>>:0] wuser_op<<in>>;     // Port <<in>> HWUSER signal
-//----------------------------- << end user >> ---------------------------------
-    wire        held_tran_op<<in>>;  // Port <<in>> held_tran_op signal
-    wire        active_op<<in>>;    // Port <<in>> active_op signal
-
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-    // Slave addr_opess/Control Signals
-    wire        HSELM;      // Slave select line
-    wire [<<addr>>:0] HADDRM;     // addr_opess
-//---------------------------- << start user >> --------------------------------
-    wire [<<user>>:0] HAUSERM;    // User addr_opess bus
-//----------------------------- << end user >> ---------------------------------
-    wire  [1:0] HTRANSM;    // trans_opfer type
-    wire        HWRITEM;    // trans_opfer direction
-    wire  [2:0] HSIZEM;     // trans_opfer size
-    wire  [2:0] HBURSTM;    // burst_op type
-    wire  [<<prot>>:0] HPROTM;     // prot_opection control
-//---------------------------- << start unalign >> -----------------------------
-    wire        HUNALIGNM;  // unalign_oped transfer
-    wire [<<bstrb>>:0]  HBSTRBM;    // Byte Lane strobe signal
-//----------------------------- << end unalign >> ------------------------------
-    wire  [3:0] HMASTERM;   // master_op ID
-    wire        HMASTLOCKM; // Locked transfer
-    wire        HREADYMUXM; // trans_opfer done
-//---------------------------- << start user >> --------------------------------
-    wire [<<user>>:0] HWUSERM;    // User data bus
-//----------------------------- << end user >> ---------------------------------
-    wire [<<data>>:0] HWDATAM;    // write_op data
-    wire        HREADYOUTM; // HREADY feedback
-
-
-// -----------------------------------------------------------------------------
-// Signal declarations
-// -----------------------------------------------------------------------------
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    wire        req_port<<in>>;     // Port <<in>> request signal
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-
-    wire  [<<idw_si>>:0] addr_in_port;   // addr_opess input port
-    reg   [<<idw_si>>: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
-
-    wire        i_hselm;       // Internal HSELM
-    wire  [1:0] i_htransm;     // Internal HTRANSM
-    wire  [2:0] i_hburstm;     // Internal HBURSTM
-    wire        i_hreadymuxm;  // Internal HREADYMUXM
-    wire        i_hmastlockm;  // Internal HMASTLOCKM
-
-
-// -----------------------------------------------------------------------------
-// Beginning of main code
-// -----------------------------------------------------------------------------
-
-// -----------------------------------------------------------------------------
-// Port sel_opection
-// -----------------------------------------------------------------------------
-
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-  assign req_port<<in>> = held_tran_op<<in>> & sel_op<<in>>;
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-
-  // Dummy arbiter instance for granting requests to this output stage
-  <<output_arb_name>> u_output_arb (
-
-    .HCLK       (HCLK),
-    .HRESETn    (HRESETn),
-
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    .req_port<<in>>   (req_port<<in>>),
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-
-    .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_op signal combinatorial decode
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-  assign active_op<<in>> = (addr_in_port == <<idw_si_v>>'b<<bin_in>>) & !no_port;
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-
-  // addr_opess/control output decode
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-  assign i_hselm     = (addr_in_port == <<idw_si_v>>'b<<bin_in>>) & sel_op<<in>> & !no_port;
-  assign HADDRM      = ( (addr_in_port == <<idw_si_v>>'b<<bin_in>>) & !no_port ) ? addr_op<<in>> : {<<addr_v>>{1'b0}};
-//---------------------------- << start user >> --------------------------------
-  assign HAUSERM     = ( (addr_in_port == <<idw_si_v>>'b<<bin_in>>) & !no_port ) ? auser_op<<in>> : {<<user_v>>{1'b0}};
-//----------------------------- << end user >> ---------------------------------
-  assign i_htransm   = ( (addr_in_port == <<idw_si_v>>'b<<bin_in>>) & !no_port ) ? trans_op<<in>> : 2'b00;
-  assign HWRITEM     = (addr_in_port == <<idw_si_v>>'b<<bin_in>>) & write_op<<in>> & !no_port;
-  assign HSIZEM      = ( (addr_in_port == <<idw_si_v>>'b<<bin_in>>) & !no_port ) ? size_op<<in>> : 3'b000;
-  assign i_hburstm    = ( (addr_in_port == <<idw_si_v>>'b<<bin_in>>) & !no_port ) ? burst_op<<in>> : 3'b000;
-  assign HPROTM      = ( (addr_in_port == <<idw_si_v>>'b<<bin_in>>) & !no_port ) ? prot_op<<in>>  : {<<prot_v>>{1'b0}};
-//---------------------------- << start unalign >> -----------------------------
-  assign HUNALIGNM   = (addr_in_port == <<idw_si_v>>'b<<bin_in>>) & unalign_op<<in>> & !no_port;
-  assign HBSTRBM     = ( (addr_in_port == <<idw_si_v>>'b<<bin_in>>) & !no_port ) ? bstrb_op<<in>> : {<<bstrb_v>>{1'b0}};
-//----------------------------- << end unalign >> ------------------------------
-  assign HMASTERM    = ( (addr_in_port == <<idw_si_v>>'b<<bin_in>>) & !no_port ) ? master_op<<in>> : 4'b0000;
-  assign i_hmastlockm = (addr_in_port == <<idw_si_v>>'b<<bin_in>>) & mastlock_op<<in>> & !no_port;
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-
-  // 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 <= {<<idw_si_v>>{1'b0}};
-      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
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-  assign HWDATAM = wdata_phase ? wdata_op<<in>> : {<<data_v>>{1'b0}};
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-
-//---------------------------- << start user >> --------------------------------
-  // HWUSERM output decode
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-  assign HWUSERM = wdata_phase ? wuser_op<<in>> : {<<user_v>>{1'b0}};
-//------------------------------ << end connection >> --------------------------
-//------------------------------- << end in >> ---------------------------------
-//----------------------------- << end user >> ---------------------------------
-
-  // ---------------------------------------------------------------------------
-  // 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_ahb_busmatrix/verilog/src/cmsdk_ahb_busmatrix.v b/system/src/nanosoc_ahb_busmatrix/verilog/src/cmsdk_ahb_busmatrix.v
deleted file mode 100755
index 669eb9a018632b442bb22f67b9d4367d20419708..0000000000000000000000000000000000000000
--- a/system/src/nanosoc_ahb_busmatrix/verilog/src/cmsdk_ahb_busmatrix.v
+++ /dev/null
@@ -1,526 +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-<<copyright_year>> 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            : BusMatrix is the top-level which connects together
-//                        the required Input Stages, MatrixDecodes, Output
-//                        Stages and Output Arbitration blocks.
-//
-//                        Supports the following configured options:
-//
-//                         - Architecture type '<<architecture_type>>',
-//                         - <<total_si>> slave ports (connecting to masters),
-//                         - <<total_mi>> master ports (connecting to slaves),
-//                         - Routing address width of <<addr_v>> bits,
-//                         - Routing data width of <<data_v>> bits,
-//----------------------------- << start user >> -------------------------------
-//                         - xUSER signal width of <<user_v>> bits,
-//------------------------------ << end user >> --------------------------------
-//---------------------------- << start unalign >> -----------------------------
-//                         - ARMv6 AMBA extensions for unaligned access,
-//----------------------------- << end unalign >> ------------------------------
-//----------------------------- << start excl >> -------------------------------
-//                         - ARMv6 AMBA extensions for exclusive access,
-//------------------------------ << end excl >> --------------------------------
-//                         - Arbiter type '<<arbiter_type>>',
-//                         - Connectivity mapping:
-//                             <<mappings>>,
-//                         - Connectivity type '<<connectivity>>'.
-//
-//------------------------------------------------------------------------------
-
-<<timescale_directive>>
-
-module <<bus_matrix_name>> (
-
-    // Common AHB signals
-    HCLK,
-    HRESETn,
-
-    // System address remapping control
-    REMAP,
-
-//------------------------------ << start in >> --------------------------------
-    // Input port SI<<in>> (inputs from master <<in>>)
-    HSEL<<si_name>>,
-    HADDR<<si_name>>,
-    HTRANS<<si_name>>,
-    HWRITE<<si_name>>,
-    HSIZE<<si_name>>,
-    HBURST<<si_name>>,
-    HPROT<<si_name>>,
-//---------------------------- << start unalign >> -----------------------------
-    HUNALIGN<<si_name>>,
-    HBSTRB<<si_name>>,
-//----------------------------- << end unalign >> ------------------------------
-    HMASTER<<si_name>>,
-    HWDATA<<si_name>>,
-    HMASTLOCK<<si_name>>,
-    HREADY<<si_name>>,
-//---------------------------- << start user >> --------------------------------
-    HAUSER<<si_name>>,
-    HWUSER<<si_name>>,
-//----------------------------- << end user >> ---------------------------------
-
-//------------------------------- << end in >> ---------------------------------
-//----------------------------- << start out >> --------------------------------
-    // Output port MI<<out>> (inputs from slave <<out>>)
-    HRDATA<<mi_name>>,
-    HREADYOUT<<mi_name>>,
-    HRESP<<mi_name>>,
-//---------------------------- << start user >> ------------------------------
-    HRUSER<<mi_name>>,
-//----------------------------- << end user >> -------------------------------
-
-//------------------------------ << end out >> ---------------------------------
-    // Scan test dummy signals; not connected until scan insertion
-    SCANENABLE,   // Scan Test Mode Enable
-    SCANINHCLK,   // Scan Chain Input
-
-
-//----------------------------- << start out >> --------------------------------
-    // Output port MI<<out>> (outputs to slave <<out>>)
-    HSEL<<mi_name>>,
-    HADDR<<mi_name>>,
-    HTRANS<<mi_name>>,
-    HWRITE<<mi_name>>,
-    HSIZE<<mi_name>>,
-    HBURST<<mi_name>>,
-    HPROT<<mi_name>>,
-//---------------------------- << start unalign >> -----------------------------
-    HUNALIGN<<mi_name>>,
-    HBSTRB<<mi_name>>,
-//----------------------------- << end unalign >> ------------------------------
-    HMASTER<<mi_name>>,
-    HWDATA<<mi_name>>,
-    HMASTLOCK<<mi_name>>,
-    HREADYMUX<<mi_name>>,
-//---------------------------- << start user >> --------------------------------
-    HAUSER<<mi_name>>,
-    HWUSER<<mi_name>>,
-//----------------------------- << end user >> ---------------------------------
-
-//------------------------------ << end out >> ---------------------------------
-//------------------------------ << start in >> --------------------------------
-    // Input port SI<<in>> (outputs to master <<in>>)
-    HRDATA<<si_name>>,
-    HREADYOUT<<si_name>>,
-    HRESP<<si_name>>,
-//---------------------------- << start user >> ------------------------------
-    HRUSER<<si_name>>,
-//----------------------------- << end user >> -------------------------------
-
-//------------------------------- << end in >> ---------------------------------
-    // 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 remapping control
-    input   [3:0] REMAP;           // REMAP input
-
-//------------------------------ << start in >> --------------------------------
-    // Input port SI<<in>> (inputs from master <<in>>)
-    input         HSEL<<si_name>>;          // Slave Select
-    input  [<<addr>>:0] HADDR<<si_name>>;         // Address bus
-    input   [1:0] HTRANS<<si_name>>;        // Transfer type
-    input         HWRITE<<si_name>>;        // Transfer direction
-    input   [2:0] HSIZE<<si_name>>;         // Transfer size
-    input   [2:0] HBURST<<si_name>>;        // Burst type
-    input   [<<prot>>:0] HPROT<<si_name>>;         // Protection control
-//---------------------------- << start unalign >> -----------------------------
-    input         HUNALIGN<<si_name>>;      // Unalign signal
-    input   [<<bstrb>>:0] HBSTRB<<si_name>>;        // Byte strobes
-//----------------------------- << end unalign >> ------------------------------
-    input   [3:0] HMASTER<<si_name>>;       // Master select
-    input  [<<data>>:0] HWDATA<<si_name>>;        // Write data
-    input         HMASTLOCK<<si_name>>;     // Locked Sequence
-    input         HREADY<<si_name>>;        // Transfer done
-//---------------------------- << start user >> --------------------------------
-    input  [<<user>>:0] HAUSER<<si_name>>;        // Address USER signals
-    input  [<<user>>:0] HWUSER<<si_name>>;        // Write-data USER signals
-//----------------------------- << end user >> ---------------------------------
-
-//------------------------------- << end in >> ---------------------------------
-//----------------------------- << start out >> --------------------------------
-    // Output port MI<<out>> (inputs from slave <<out>>)
-    input  [<<data>>:0] HRDATA<<mi_name>>;        // Read data bus
-    input         HREADYOUT<<mi_name>>;     // HREADY feedback
-    input   [<<resp>>:0] HRESP<<mi_name>>;         // Transfer response
-//---------------------------- << start user >> --------------------------------
-    input  [<<user>>:0] HRUSER<<mi_name>>;        // Read-data USER signals
-//----------------------------- << end user >> ---------------------------------
-
-//------------------------------ << end out >> ---------------------------------
-    // Scan test dummy signals; not connected until scan insertion
-    input         SCANENABLE;      // Scan enable signal
-    input         SCANINHCLK;      // HCLK scan input
-
-
-//----------------------------- << start out >> --------------------------------
-    // Output port MI<<out>> (outputs to slave <<out>>)
-    output        HSEL<<mi_name>>;          // Slave Select
-    output [<<addr>>:0] HADDR<<mi_name>>;         // Address bus
-    output  [1:0] HTRANS<<mi_name>>;        // Transfer type
-    output        HWRITE<<mi_name>>;        // Transfer direction
-    output  [2:0] HSIZE<<mi_name>>;         // Transfer size
-    output  [2:0] HBURST<<mi_name>>;        // Burst type
-    output  [<<prot>>:0] HPROT<<mi_name>>;         // Protection control
-//---------------------------- << start unalign >> -----------------------------
-    output        HUNALIGN<<mi_name>>;      // Unalign signal
-    output  [<<bstrb>>:0] HBSTRB<<mi_name>>;        // Byte strobes
-//----------------------------- << end unalign >> ------------------------------
-    output  [3:0] HMASTER<<mi_name>>;       // Master select
-    output [<<data>>:0] HWDATA<<mi_name>>;        // Write data
-    output        HMASTLOCK<<mi_name>>;     // Locked Sequence
-    output        HREADYMUX<<mi_name>>;     // Transfer done
-//---------------------------- << start user >> --------------------------------
-    output [<<user>>:0] HAUSER<<mi_name>>;        // Address USER signals
-    output [<<user>>:0] HWUSER<<mi_name>>;        // Write-data USER signals
-//----------------------------- << end user >> ---------------------------------
-
-//------------------------------ << end out >> ---------------------------------
-//------------------------------ << start in >> --------------------------------
-    // Input port SI<<in>> (outputs to master <<in>>)
-    output [<<data>>:0] HRDATA<<si_name>>;        // Read data bus
-    output        HREADYOUT<<si_name>>;     // HREADY feedback
-    output  [<<resp>>:0] HRESP<<si_name>>;         // Transfer response
-//---------------------------- << start user >> --------------------------------
-    output [<<user>>:0] HRUSER<<si_name>>;        // Read-data USER signals
-//----------------------------- << end user >> ---------------------------------
-
-//------------------------------- << end in >> ---------------------------------
-    // 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 remapping control
-    wire   [3:0] REMAP;           // REMAP signal
-
-//------------------------------ << start in >> --------------------------------
-    // Input Port SI<<in>>
-    wire         HSEL<<si_name>>;          // Slave Select
-    wire  [<<addr>>:0] HADDR<<si_name>>;         // Address bus
-    wire   [1:0] HTRANS<<si_name>>;        // Transfer type
-    wire         HWRITE<<si_name>>;        // Transfer direction
-    wire   [2:0] HSIZE<<si_name>>;         // Transfer size
-    wire   [2:0] HBURST<<si_name>>;        // Burst type
-    wire   [<<prot>>:0] HPROT<<si_name>>;         // Protection control
-//---------------------------- << start unalign >> -----------------------------
-    wire         HUNALIGN<<si_name>>;      // Unalign signal
-    wire   [<<bstrb>>:0] HBSTRB<<si_name>>;        // Byte strobes
-//----------------------------- << end unalign >> ------------------------------
-    wire   [3:0] HMASTER<<si_name>>;       // Master select
-    wire  [<<data>>:0] HWDATA<<si_name>>;        // Write data
-    wire         HMASTLOCK<<si_name>>;     // Locked Sequence
-    wire         HREADY<<si_name>>;        // Transfer done
-
-    wire  [<<data>>:0] HRDATA<<si_name>>;        // Read data bus
-    wire         HREADYOUT<<si_name>>;     // HREADY feedback
-    wire   [<<resp>>:0] HRESP<<si_name>>;         // Transfer response
-//---------------------------- << start user >> --------------------------------
-    wire  [<<user>>:0] HAUSER<<si_name>>;        // Address USER signals
-    wire  [<<user>>:0] HWUSER<<si_name>>;        // Write-data USER signals
-    wire  [<<user>>:0] HRUSER<<si_name>>;        // Read-data USER signals
-//----------------------------- << end user >> ---------------------------------
-
-//------------------------------- << end in >> ---------------------------------
-//----------------------------- << start out >> --------------------------------
-    // Output Port MI<<out>>
-    wire         HSEL<<mi_name>>;          // Slave Select
-    wire  [<<addr>>:0] HADDR<<mi_name>>;         // Address bus
-    wire   [1:0] HTRANS<<mi_name>>;        // Transfer type
-    wire         HWRITE<<mi_name>>;        // Transfer direction
-    wire   [2:0] HSIZE<<mi_name>>;         // Transfer size
-    wire   [2:0] HBURST<<mi_name>>;        // Burst type
-    wire   [<<prot>>:0] HPROT<<mi_name>>;         // Protection control
-//---------------------------- << start unalign >> -----------------------------
-    wire         HUNALIGN<<mi_name>>;      // Unalign signal
-    wire   [<<bstrb>>:0] HBSTRB<<mi_name>>;        // Byte strobes
-//----------------------------- << end unalign >> ------------------------------
-    wire   [3:0] HMASTER<<mi_name>>;       // Master select
-    wire  [<<data>>:0] HWDATA<<mi_name>>;        // Write data
-    wire         HMASTLOCK<<mi_name>>;     // Locked Sequence
-    wire         HREADYMUX<<mi_name>>;     // Transfer done
-
-    wire  [<<data>>:0] HRDATA<<mi_name>>;        // Read data bus
-    wire         HREADYOUT<<mi_name>>;     // HREADY feedback
-    wire   [<<resp>>:0] HRESP<<mi_name>>;         // Transfer response
-//---------------------------- << start user >> --------------------------------
-    wire  [<<user>>:0] HAUSER<<mi_name>>;        // Address USER signals
-    wire  [<<user>>:0] HWUSER<<mi_name>>;        // Write-data USER signals
-    wire  [<<user>>:0] HRUSER<<mi_name>>;        // Read-data USER signals
-//----------------------------- << end user >> ---------------------------------
-
-//------------------------------ << end out >> ---------------------------------
-
-// -----------------------------------------------------------------------------
-// Signal declarations
-// -----------------------------------------------------------------------------
-//----------------------------- << start in >> ---------------------------------
-
-    // Bus-switch input SI<<in>>
-    wire         i_sel<<in>>;            // HSEL signal
-    wire  [<<addr>>:0] i_addr<<in>>;           // HADDR signal
-    wire   [1:0] i_trans<<in>>;          // HTRANS signal
-    wire         i_write<<in>>;          // HWRITE signal
-    wire   [2:0] i_size<<in>>;           // HSIZE signal
-    wire   [2:0] i_burst<<in>>;          // HBURST signal
-    wire   [<<prot>>:0] i_prot<<in>>;           // HPROTS signal
-//---------------------------- << start unalign >> -----------------------------
-    wire         i_unalign<<in>>;        // HUNALIGN signal
-    wire   [<<bstrb>>:0] i_bstrb<<in>>;          // HBSTRB signal
-//----------------------------- << end unalign >> ------------------------------
-    wire   [3:0] i_master<<in>>;         // HMASTER signal
-    wire         i_mastlock<<in>>;       // HMASTLOCK signal
-    wire         i_active<<in>>;         // Active signal
-    wire         i_held_tran<<in>>;       // HeldTran signal
-    wire         i_readyout<<in>>;       // Readyout signal
-    wire   [<<resp>>:0] i_resp<<in>>;           // Response signal
-//---------------------------- << start user >> --------------------------------
-    wire  [<<user>>:0] i_auser<<in>>;          // HAUSER signal
-//----------------------------- << end user >> ---------------------------------
-//------------------------------ << end in >> ----------------------------------
-
-//----------------------------- << start in >> ---------------------------------
-//----------------------------- << start out >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    // Bus-switch SI<<in>> to MI<<out>> signals
-    wire         i_sel<<in>>to<<out>>;         // Routing selection signal
-    wire         i_active<<in>>to<<out>>;      // Active signal
-
-//------------------------------ << end connection >> --------------------------
-//------------------------------ << end out >> ---------------------------------
-//------------------------------ << end in >> ----------------------------------
-//----------------------------- << start out >> --------------------------------
-    wire         i_hready_mux_<<mi_name_lc>>;    // Internal HREADYMUXM for MI<<out>>
-//------------------------------ << end out >> ---------------------------------
-
-
-// -----------------------------------------------------------------------------
-// Beginning of main code
-// -----------------------------------------------------------------------------
-
-//----------------------------- << start in >> ---------------------------------
-  // Input stage for SI<<in>>
-  <<input_stage_name>> u_<<input_stage_name>>_<<in>> (
-
-    // Common AHB signals
-    .HCLK       (HCLK),
-    .HRESETn    (HRESETn),
-
-    // Input Port Address/Control Signals
-    .HSELS      (HSEL<<si_name>>),
-    .HADDRS     (HADDR<<si_name>>),
-    .HTRANSS    (HTRANS<<si_name>>),
-    .HWRITES    (HWRITE<<si_name>>),
-    .HSIZES     (HSIZE<<si_name>>),
-    .HBURSTS    (HBURST<<si_name>>),
-    .HPROTS     (HPROT<<si_name>>),
-//---------------------------- << start unalign >> -----------------------------
-    .HUNALIGNS  (HUNALIGN<<si_name>>),
-    .HBSTRBS    (HBSTRB<<si_name>>),
-//----------------------------- << end unalign >> ------------------------------
-    .HMASTERS   (HMASTER<<si_name>>),
-    .HMASTLOCKS (HMASTLOCK<<si_name>>),
-    .HREADYS    (HREADY<<si_name>>),
-//---------------------------- << start user >> --------------------------------
-    .HAUSERS    (HAUSER<<si_name>>),
-//----------------------------- << end user >> ---------------------------------
-
-    // Internal Response
-    .active_ip     (i_active<<in>>),
-    .readyout_ip   (i_readyout<<in>>),
-    .resp_ip       (i_resp<<in>>),
-
-    // Input Port Response
-    .HREADYOUTS (HREADYOUT<<si_name>>),
-    .HRESPS     (HRESP<<si_name>>),
-
-    // Internal Address/Control Signals
-    .sel_ip        (i_sel<<in>>),
-    .addr_ip       (i_addr<<in>>),
-//---------------------------- << start user >> --------------------------------
-    .auser_ip      (i_auser<<in>>),
-//----------------------------- << end user >> ---------------------------------
-    .trans_ip      (i_trans<<in>>),
-    .write_ip      (i_write<<in>>),
-    .size_ip       (i_size<<in>>),
-    .burst_ip      (i_burst<<in>>),
-    .prot_ip       (i_prot<<in>>),
-//---------------------------- << start unalign >> -----------------------------
-    .unalign_ip    (i_unalign<<in>>),
-    .bstrb_ip      (i_bstrb<<in>>),
-//----------------------------- << end unalign >> ------------------------------
-    .master_ip     (i_master<<in>>),
-    .mastlock_ip   (i_mastlock<<in>>),
-    .held_tran_ip   (i_held_tran<<in>>)
-
-    );
-
-
-//------------------------------ << end in >> ----------------------------------
-//------------------------------ << start in >> --------------------------------
-  // Matrix decoder for SI<<in>>
-  <<matrix_decode_name>> u_<<matrix_decode_name_lc>> (
-
-    // Common AHB signals
-    .HCLK       (HCLK),
-    .HRESETn    (HRESETn),
-
-//---------------------------- << start remap >> -------------------------------
-    // Internal address remapping control
-    .remapping_dec  ( <<remapping_vector>> ),
-
-//----------------------------- << end remap >> --------------------------------
-    // Signals from Input stage SI<<in>>
-    .HREADYS    (HREADY<<si_name>>),
-    .sel_dec        (i_sel<<in>>),
-    .decode_addr_dec (i_addr<<in>>[<<addr>>:10]),   // HADDR[9:0] is not decoded
-    .trans_dec      (i_trans<<in>>),
-
-//----------------------------- << start out >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    // Control/Response for Output Stage MI<<out>>
-    .active_dec<<out>>    (i_active<<in>>to<<out>>),
-    .readyout_dec<<out>>  (i_hready_mux_<<mi_name_lc>>),
-    .resp_dec<<out>>      (HRESP<<mi_name>>),
-    .rdata_dec<<out>>     (HRDATA<<mi_name>>),
-//---------------------------- << start user >> --------------------------------
-    .ruser_dec<<out>>     (HRUSER<<mi_name>>),
-//----------------------------- << end user >> ---------------------------------
-
-//------------------------------ << end connection >> --------------------------
-//------------------------------ << end out >> ---------------------------------
-//----------------------------- << start out >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    .sel_dec<<out>>       (i_sel<<in>>to<<out>>),
-//------------------------------ << end connection >> --------------------------
-//------------------------------ << end out >> ---------------------------------
-
-    .active_dec     (i_active<<in>>),
-    .HREADYOUTS (i_readyout<<in>>),
-    .HRESPS     (i_resp<<in>>),
-//---------------------------- << start user >> --------------------------------
-    .HRUSERS    (HRUSER<<si_name>>),
-//----------------------------- << end user >> ---------------------------------
-    .HRDATAS    (HRDATA<<si_name>>)
-
-    );
-
-
-//------------------------------ << end in >> ----------------------------------
-//----------------------------- << start out >> --------------------------------
-  // Output stage for MI<<out>>
-  <<output_stage_name>> u_<<output_stage_name_lc>>_<<out>> (
-
-    // Common AHB signals
-    .HCLK       (HCLK),
-    .HRESETn    (HRESETn),
-
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    // Port <<in>> Signals
-    .sel_op<<in>>       (i_sel<<in>>to<<out>>),
-    .addr_op<<in>>      (i_addr<<in>>),
-//---------------------------- << start user >> --------------------------------
-    .auser_op<<in>>     (i_auser<<in>>),
-//----------------------------- << end user >> ---------------------------------
-    .trans_op<<in>>     (i_trans<<in>>),
-    .write_op<<in>>     (i_write<<in>>),
-    .size_op<<in>>      (i_size<<in>>),
-    .burst_op<<in>>     (i_burst<<in>>),
-    .prot_op<<in>>      (i_prot<<in>>),
-//---------------------------- << start unalign >> -----------------------------
-    .unalign_op<<in>>   (i_unalign<<in>>),
-    .bstrb_op<<in>>     (i_bstrb<<in>>),
-//----------------------------- << end unalign >> ------------------------------
-    .master_op<<in>>    (i_master<<in>>),
-    .mastlock_op<<in>>  (i_mastlock<<in>>),
-    .wdata_op<<in>>     (HWDATA<<si_name>>),
-//---------------------------- << start user >> --------------------------------
-    .wuser_op<<in>>     (HWUSER<<si_name>>),
-//----------------------------- << end user >> ---------------------------------
-    .held_tran_op<<in>>  (i_held_tran<<in>>),
-
-//------------------------------ << end connection >> --------------------------
-//------------------------------ << end in >> ----------------------------------
-    // Slave read data and response
-    .HREADYOUTM (HREADYOUT<<mi_name>>),
-
-//------------------------------ << start in >> --------------------------------
-//----------------------------- << start connection >> -------------------------
-    .active_op<<in>>    (i_active<<in>>to<<out>>),
-//------------------------------ << end connection >> --------------------------
-//------------------------------ << end in >> ----------------------------------
-
-    // Slave Address/Control Signals
-    .HSELM      (HSEL<<mi_name>>),
-    .HADDRM     (HADDR<<mi_name>>),
-//---------------------------- << start user >> --------------------------------
-    .HAUSERM    (HAUSER<<mi_name>>),
-//----------------------------- << end user >> ---------------------------------
-    .HTRANSM    (HTRANS<<mi_name>>),
-    .HWRITEM    (HWRITE<<mi_name>>),
-    .HSIZEM     (HSIZE<<mi_name>>),
-    .HBURSTM    (HBURST<<mi_name>>),
-    .HPROTM     (HPROT<<mi_name>>),
-//---------------------------- << start unalign >> -----------------------------
-    .HUNALIGNM  (HUNALIGN<<mi_name>>),
-    .HBSTRBM    (HBSTRB<<mi_name>>),
-//----------------------------- << end unalign >> ------------------------------
-    .HMASTERM   (HMASTER<<mi_name>>),
-    .HMASTLOCKM (HMASTLOCK<<mi_name>>),
-    .HREADYMUXM (i_hready_mux_<<mi_name_lc>>),
-//---------------------------- << start user >> --------------------------------
-    .HWUSERM    (HWUSER<<mi_name>>),
-//----------------------------- << end user >> ---------------------------------
-    .HWDATAM    (HWDATA<<mi_name>>)
-
-    );
-
-  // Drive output with internal version
-  assign HREADYMUX<<mi_name>> = i_hready_mux_<<mi_name_lc>>;
-
-
-//------------------------------ << end out >> ---------------------------------
-endmodule
-
-// --================================= End ===================================--
diff --git a/system/src/nanosoc_ahb_busmatrix/verilog/src/cmsdk_ahb_busmatrix_lite.v b/system/src/nanosoc_ahb_busmatrix/verilog/src/cmsdk_ahb_busmatrix_lite.v
deleted file mode 100755
index 44f8be46c9b3cf4d666fea95ca9f4b3e1202b705..0000000000000000000000000000000000000000
--- a/system/src/nanosoc_ahb_busmatrix/verilog/src/cmsdk_ahb_busmatrix_lite.v
+++ /dev/null
@@ -1,340 +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-<<copyright_year>> 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.
-//
-//-----------------------------------------------------------------------------
-
-<<timescale_directive>>
-
-module <<component_name>> (
-
-    // Common AHB signals
-    HCLK,
-    HRESETn,
-
-    // System Address Remap control
-    REMAP,
-
-//------------------------------ << start in >> --------------------------------
-    // Input port SI<<in>> (inputs from master <<in>>)
-    HADDR<<si_name>>,
-    HTRANS<<si_name>>,
-    HWRITE<<si_name>>,
-    HSIZE<<si_name>>,
-    HBURST<<si_name>>,
-    HPROT<<si_name>>,
-    HWDATA<<si_name>>,
-    HMASTLOCK<<si_name>>,
-//---------------------------- << start user >> --------------------------------
-    HAUSER<<si_name>>,
-    HWUSER<<si_name>>,
-//----------------------------- << end user >> ---------------------------------
-
-//------------------------------- << end in >> ---------------------------------
-//----------------------------- << start out >> --------------------------------
-    // Output port MI<<out>> (inputs from slave <<out>>)
-    HRDATA<<mi_name>>,
-    HREADYOUT<<mi_name>>,
-    HRESP<<mi_name>>,
-//---------------------------- << start user >> ------------------------------
-    HRUSER<<mi_name>>,
-//----------------------------- << end user >> -------------------------------
-
-//------------------------------ << end out >> ---------------------------------
-    // Scan test dummy signals; not connected until scan insertion
-    SCANENABLE,   // Scan Test Mode Enable
-    SCANINHCLK,   // Scan Chain Input
-
-
-//----------------------------- << start out >> --------------------------------
-    // Output port MI<<out>> (outputs to slave <<out>>)
-    HSEL<<mi_name>>,
-    HADDR<<mi_name>>,
-    HTRANS<<mi_name>>,
-    HWRITE<<mi_name>>,
-    HSIZE<<mi_name>>,
-    HBURST<<mi_name>>,
-    HPROT<<mi_name>>,
-    HWDATA<<mi_name>>,
-    HMASTLOCK<<mi_name>>,
-    HREADYMUX<<mi_name>>,
-//---------------------------- << start user >> --------------------------------
-    HAUSER<<mi_name>>,
-    HWUSER<<mi_name>>,
-//----------------------------- << end user >> ---------------------------------
-
-//------------------------------ << end out >> ---------------------------------
-//------------------------------ << start in >> --------------------------------
-    // Input port SI<<in>> (outputs to master <<in>>)
-    HRDATA<<si_name>>,
-    HREADY<<si_name>>,
-    HRESP<<si_name>>,
-//---------------------------- << start user >> ------------------------------
-    HRUSER<<si_name>>,
-//----------------------------- << end user >> -------------------------------
-
-//------------------------------- << end in >> ---------------------------------
-    // 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
-
-//------------------------------ << start in >> --------------------------------
-    // Input port SI<<in>> (inputs from master <<in>>)
-    input  [<<addr>>:0] HADDR<<si_name>>;         // Address bus
-    input   [1:0] HTRANS<<si_name>>;        // Transfer type
-    input         HWRITE<<si_name>>;        // Transfer direction
-    input   [2:0] HSIZE<<si_name>>;         // Transfer size
-    input   [2:0] HBURST<<si_name>>;        // Burst type
-    input   [<<prot>>:0] HPROT<<si_name>>;         // Protection control
-    input  [<<data>>:0] HWDATA<<si_name>>;        // Write data
-    input         HMASTLOCK<<si_name>>;     // Locked Sequence
-//---------------------------- << start user >> --------------------------------
-    input  [<<user>>:0] HAUSER<<si_name>>;        // Address USER signals
-    input  [<<user>>:0] HWUSER<<si_name>>;        // Write-data USER signals
-//----------------------------- << end user >> ---------------------------------
-
-//------------------------------- << end in >> ---------------------------------
-//----------------------------- << start out >> --------------------------------
-    // Output port MI<<out>> (inputs from slave <<out>>)
-    input  [<<data>>:0] HRDATA<<mi_name>>;        // Read data bus
-    input         HREADYOUT<<mi_name>>;     // HREADY feedback
-    input         HRESP<<mi_name>>;         // Transfer response
-//---------------------------- << start user >> --------------------------------
-    input  [<<user>>:0] HRUSER<<mi_name>>;        // Read-data USER signals
-//----------------------------- << end user >> ---------------------------------
-
-//------------------------------ << end out >> ---------------------------------
-    // Scan test dummy signals; not connected until scan insertion
-    input         SCANENABLE;      // Scan enable signal
-    input         SCANINHCLK;      // HCLK scan input
-
-
-//----------------------------- << start out >> --------------------------------
-    // Output port MI<<out>> (outputs to slave <<out>>)
-    output        HSEL<<mi_name>>;          // Slave Select
-    output [<<addr>>:0] HADDR<<mi_name>>;         // Address bus
-    output  [1:0] HTRANS<<mi_name>>;        // Transfer type
-    output        HWRITE<<mi_name>>;        // Transfer direction
-    output  [2:0] HSIZE<<mi_name>>;         // Transfer size
-    output  [2:0] HBURST<<mi_name>>;        // Burst type
-    output  [<<prot>>:0] HPROT<<mi_name>>;         // Protection control
-    output [<<data>>:0] HWDATA<<mi_name>>;        // Write data
-    output        HMASTLOCK<<mi_name>>;     // Locked Sequence
-    output        HREADYMUX<<mi_name>>;     // Transfer done
-//---------------------------- << start user >> --------------------------------
-    output [<<user>>:0] HAUSER<<mi_name>>;        // Address USER signals
-    output [<<user>>:0] HWUSER<<mi_name>>;        // Write-data USER signals
-//----------------------------- << end user >> ---------------------------------
-
-//------------------------------ << end out >> ---------------------------------
-//------------------------------ << start in >> --------------------------------
-    // Input port SI<<in>> (outputs to master <<in>>)
-    output [<<data>>:0] HRDATA<<si_name>>;        // Read data bus
-    output        HREADY<<si_name>>;     // HREADY feedback
-    output        HRESP<<si_name>>;         // Transfer response
-//---------------------------- << start user >> --------------------------------
-    output [<<user>>:0] HRUSER<<si_name>>;        // Read-data USER signals
-//----------------------------- << end user >> ---------------------------------
-
-//------------------------------- << end in >> ---------------------------------
-    // 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
-
-//------------------------------ << start in >> --------------------------------
-    // Input Port SI<<in>>
-    wire  [<<addr>>:0] HADDR<<si_name>>;         // Address bus
-    wire   [1:0] HTRANS<<si_name>>;        // Transfer type
-    wire         HWRITE<<si_name>>;        // Transfer direction
-    wire   [2:0] HSIZE<<si_name>>;         // Transfer size
-    wire   [2:0] HBURST<<si_name>>;        // Burst type
-    wire   [<<prot>>:0] HPROT<<si_name>>;         // Protection control
-    wire  [<<data>>:0] HWDATA<<si_name>>;        // Write data
-    wire         HMASTLOCK<<si_name>>;     // Locked Sequence
-
-    wire  [<<data>>:0] HRDATA<<si_name>>;        // Read data bus
-    wire         HREADY<<si_name>>;     // HREADY feedback
-    wire         HRESP<<si_name>>;         // Transfer response
-//---------------------------- << start user >> --------------------------------
-    wire  [<<user>>:0] HAUSER<<si_name>>;        // Address USER signals
-    wire  [<<user>>:0] HWUSER<<si_name>>;        // Write-data USER signals
-    wire  [<<user>>:0] HRUSER<<si_name>>;        // Read-data USER signals
-//----------------------------- << end user >> ---------------------------------
-
-//------------------------------- << end in >> ---------------------------------
-//----------------------------- << start out >> --------------------------------
-    // Output Port MI<<out>>
-    wire         HSEL<<mi_name>>;          // Slave Select
-    wire  [<<addr>>:0] HADDR<<mi_name>>;         // Address bus
-    wire   [1:0] HTRANS<<mi_name>>;        // Transfer type
-    wire         HWRITE<<mi_name>>;        // Transfer direction
-    wire   [2:0] HSIZE<<mi_name>>;         // Transfer size
-    wire   [2:0] HBURST<<mi_name>>;        // Burst type
-    wire   [<<prot>>:0] HPROT<<mi_name>>;         // Protection control
-    wire  [<<data>>:0] HWDATA<<mi_name>>;        // Write data
-    wire         HMASTLOCK<<mi_name>>;     // Locked Sequence
-    wire         HREADYMUX<<mi_name>>;     // Transfer done
-
-    wire  [<<data>>:0] HRDATA<<mi_name>>;        // Read data bus
-    wire         HREADYOUT<<mi_name>>;     // HREADY feedback
-    wire         HRESP<<mi_name>>;         // Transfer response
-//---------------------------- << start user >> --------------------------------
-    wire  [<<user>>:0] HAUSER<<mi_name>>;        // Address USER signals
-    wire  [<<user>>:0] HWUSER<<mi_name>>;        // Write-data USER signals
-    wire  [<<user>>:0] HRUSER<<mi_name>>;        // Read-data USER signals
-//----------------------------- << end user >> ---------------------------------
-
-//------------------------------ << end out >> ---------------------------------
-
-// -----------------------------------------------------------------------------
-// Signal declarations
-// -----------------------------------------------------------------------------
-    wire   [3:0] tie_hi_4;
-    wire         tie_hi;
-    wire         tie_low;
-//------------------------------ << start in >> --------------------------------
-    wire   [<<resp>>:0] i_hresp<<si_name>>;
-//------------------------------- << end in >> ---------------------------------
-
-//----------------------------- << start out >> --------------------------------
-    wire   [3:0]        i_hmaster<<mi_name>>;
-    wire   [<<resp>>:0] i_hresp<<mi_name>>;
-//------------------------------ << end out >> ---------------------------------
-
-// -----------------------------------------------------------------------------
-// Beginning of main code
-// -----------------------------------------------------------------------------
-
-    assign tie_hi   = 1'b1;
-    assign tie_hi_4 = 4'b1111;
-    assign tie_low  = 1'b0;
-
-//------------------------------ << start in >> --------------------------------
-
-    assign HRESP<<si_name>>  = i_hresp<<si_name>>[0];
-//------------------------------- << end in >> ---------------------------------
-
-//----------------------------- << start out >> --------------------------------
-    assign i_hresp<<mi_name>> = {{<<resp>>{tie_low}}, HRESP<<mi_name>>};
-//------------------------------ << end out >> ---------------------------------
-
-// BusMatrix instance
-  <<bus_matrix_name>> u<<bus_matrix_name>> (
-    .HCLK       (HCLK),
-    .HRESETn    (HRESETn),
-    .REMAP      (REMAP),
-
-//------------------------------ << start in >> --------------------------------
-    // Input port SI<<in>> signals
-    .HSEL<<si_name>>       (tie_hi),
-    .HADDR<<si_name>>      (HADDR<<si_name>>),
-    .HTRANS<<si_name>>     (HTRANS<<si_name>>),
-    .HWRITE<<si_name>>     (HWRITE<<si_name>>),
-    .HSIZE<<si_name>>      (HSIZE<<si_name>>),
-    .HBURST<<si_name>>     (HBURST<<si_name>>),
-    .HPROT<<si_name>>      (HPROT<<si_name>>),
-//---------------------------- << start unalign >> -----------------------------
-    .HUNALIGN<<si_name>>   (tie_low),
-    .HBSTRB<<si_name>>     ({(<<bstrb>>+1){tie_low}}),
-//----------------------------- << end unalign >> ------------------------------
-    .HWDATA<<si_name>>     (HWDATA<<si_name>>),
-    .HMASTLOCK<<si_name>>  (HMASTLOCK<<si_name>>),
-    .HMASTER<<si_name>>    (tie_hi_4),
-    .HREADY<<si_name>>     (HREADY<<si_name>>),
-//---------------------------- << start user >> --------------------------------
-    .HAUSER<<si_name>>     (HAUSER<<si_name>>),
-    .HWUSER<<si_name>>     (HWUSER<<si_name>>),
-//----------------------------- << end user >> ---------------------------------
-    .HRDATA<<si_name>>     (HRDATA<<si_name>>),
-    .HREADYOUT<<si_name>>  (HREADY<<si_name>>),
-    .HRESP<<si_name>>      (i_hresp<<si_name>>),
-//---------------------------- << start user >> ------------------------------
-    .HRUSER<<si_name>>     (HRUSER<<si_name>>),
-//----------------------------- << end user >> -------------------------------
-
-//------------------------------- << end in >> ---------------------------------
-
-//----------------------------- << start out >> --------------------------------
-    // Output port MI<<out>> signals
-    .HSEL<<mi_name>>       (HSEL<<mi_name>>),
-    .HADDR<<mi_name>>      (HADDR<<mi_name>>),
-    .HTRANS<<mi_name>>     (HTRANS<<mi_name>>),
-    .HWRITE<<mi_name>>     (HWRITE<<mi_name>>),
-    .HSIZE<<mi_name>>      (HSIZE<<mi_name>>),
-    .HBURST<<mi_name>>     (HBURST<<mi_name>>),
-    .HPROT<<mi_name>>      (HPROT<<mi_name>>),
-//---------------------------- << start unalign >> -----------------------------
-    .HUNALIGN<<mi_name>>   ( /* open */ ),
-    .HBSTRB<<mi_name>>     ( /* open */ ),
-//----------------------------- << end unalign >> ------------------------------
-    .HWDATA<<mi_name>>     (HWDATA<<mi_name>>),
-    .HMASTER<<mi_name>>    (i_hmaster<<mi_name>>),
-    .HMASTLOCK<<mi_name>>  (HMASTLOCK<<mi_name>>),
-    .HREADYMUX<<mi_name>>  (HREADYMUX<<mi_name>>),
-//---------------------------- << start user >> --------------------------------
-    .HAUSER<<mi_name>>     (HAUSER<<mi_name>>),
-    .HWUSER<<mi_name>>     (HWUSER<<mi_name>>),
-//----------------------------- << end user >> ---------------------------------
-    .HRDATA<<mi_name>>     (HRDATA<<mi_name>>),
-    .HREADYOUT<<mi_name>>  (HREADYOUT<<mi_name>>),
-    .HRESP<<mi_name>>      (i_hresp<<mi_name>>),
-//---------------------------- << start user >> ------------------------------
-    .HRUSER<<mi_name>>     (HRUSER<<mi_name>>),
-//----------------------------- << end user >> -------------------------------
-
-//------------------------------ << end out >> ---------------------------------
-
-    // Scan test dummy signals; not connected until scan insertion
-    .SCANENABLE            (SCANENABLE),
-    .SCANINHCLK            (SCANINHCLK),
-    .SCANOUTHCLK           (SCANOUTHCLK)
-  );
-
-
-endmodule