diff --git a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/verilog/cmsdk_mcu_chip_pads.v b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/verilog/cmsdk_mcu_chip_pads.v
new file mode 100644
index 0000000000000000000000000000000000000000..e9e6cce720b5930d5640c7e630477009d133090e
--- /dev/null
+++ b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/verilog/cmsdk_mcu_chip_pads.v
@@ -0,0 +1,559 @@
+//-----------------------------------------------------------------------------
+// customised top-level example Cortex-M0 controller
+// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license.
+//
+// Contributors
+//
+// David Flynn (d.w.flynn@soton.ac.uk)
+//
+// Copyright © 2021-2, SoC Labs (www.soclabs.org)
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// The confidential and proprietary information contained in this file may
+// only be used by a person authorised under and to the extent permitted
+// by a subsisting licensing agreement from Arm Limited or its affiliates.
+//
+//            (C) COPYRIGHT 2010-2013 Arm Limited or its affiliates.
+//                ALL RIGHTS RESERVED
+//
+// This entire notice must be reproduced on all copies of this file
+// and copies of this file may only be made by a person if such person is
+// permitted to do so under the terms of a subsisting license agreement
+// from Arm Limited or its affiliates.
+//
+//      SVN Information
+//
+//      Checked In          : $Date: 2017-10-10 15:55:38 +0100 (Tue, 10 Oct 2017) $
+//
+//      Revision            : $Revision: 371321 $
+//
+//      Release Information : Cortex-M System Design Kit-r1p1-00rel0
+//
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+// Abstract : Top level for example Cortex-M0/Cortex-M0+ microcontroller
+//-----------------------------------------------------------------------------
+//
+
+`include "cmsdk_mcu_defs.v"
+
+module cmsdk_mcu_chip_pads (
+`ifdef POWER_PINS
+  inout  wire          VDDIO,
+  inout  wire          VSSIO,
+  inout  wire          VDD,
+  inout  wire          VSS,
+`endif
+///  input  wire          XTAL1, // input
+  inout  wire          XTAL1, // input
+  inout  wire          XTAL2, // output
+///  input  wire          NRST,  // active low reset
+  inout  wire          NRST,  // active low reset
+  inout  wire  [15:0]  P0,
+  inout  wire  [15:0]  P1,
+
+`ifdef ARM_CMSDK_INCLUDE_JTAG
+  input  wire          nTRST,
+  input  wire          TDI,
+  output wire          TDO,
+`endif
+  inout  wire          SWDIOTMS,
+///  input  wire          SWCLKTCK);
+  inout  wire          SWCLKTCK);
+
+
+//------------------------------------
+// internal wires
+
+  wire          xtal_clk_i;
+  wire          xtal_clk_o;
+  wire          nrst_i;
+  wire  [15:0]  p0_i; // level-shifted input from pad
+  wire  [15:0]  p0_o; // output port drive
+  wire  [15:0]  p0_e; // active high output drive enable (pad tech dependent)
+  wire  [15:0]  p0_z; // active low output drive enable (pad tech dependent)
+  wire  [15:0]  p1_i; // level-shifted input from pad
+  wire  [15:0]  p1_o; // output port drive
+  wire  [15:0]  p1_e; // active high output drive enable (pad tech dependent)
+  wire  [15:0]  p1_z; // active low output drive enable (pad tech dependent)
+
+`ifdef ARM_CMSDK_INCLUDE_JTAG
+  wire          ntrst_i;
+  wire          tdi_i;
+  wire          tdo_o;
+`endif
+  wire          swdio_i;
+  wire          swdio_o;
+  wire          swdio_e;
+  wire          swdio_z;
+  wire          swdclk_i;
+
+`ifdef ARM_CMSDK_INCLUDE_CLKGATE
+  parameter CLKGATE_PRESENT = 1;
+`else
+  parameter CLKGATE_PRESENT = 0;
+`endif
+  // Big or Little Endian
+  // For the changes in the endianness of the system it should be noted that hex file used
+  // in the instantiation of the cmsdk_debug_tester is also impacted. Therefore the
+  // following changes are enforced:
+  //
+  // BE=0 (LITTLE) -> .ROM_MEMFILE("debugtester_le.hex")
+  //
+  // BE=1 (BIG)    -> .ROM_MEMFILE("debugtester_be.hex")
+  parameter BE              = 0;   // Big or little endian
+
+  parameter BKPT            = 4;   // Number of breakpoint comparators
+  parameter DBG             = 1;   // Debug configuration
+  parameter NUMIRQ          = 32;  // NUM of IRQ
+  parameter SMUL            = 0;   // Multiplier configuration
+  parameter SYST            = 1;   // SysTick
+  parameter WIC             = 1;   // Wake-up interrupt controller support
+  parameter WICLINES        = 34;  // Supported WIC lines
+  parameter WPT             = 2;   // Number of DWT comparators
+  parameter RESET_ALL_REGS  = 0;   // Do not reset all registers
+`ifdef CORTEX_M0PLUS
+  parameter AWIDTH          = 16;  // Micro Trace Buffer SRAM address width:
+                                   //   5 to 32
+  parameter BASEADDR        = 32'hF0000003; // ROM Table Base Address
+`ifdef ARM_CMSDK_INCLUDE_F16
+  parameter HWF             = 1;   // Half-Word Fetching
+`else
+  parameter HWF             = 0;   // Half-Word Fetching
+`endif
+`ifdef ARM_CMSDK_INCLUDE_IOP
+  parameter IOP             = 1;   // IO Port interface selected
+`else
+  parameter IOP             = 0;   // IO Port not selected
+`endif
+  parameter IRQDIS          = 32'h00000000; // Interrupt Disable
+  parameter MPU             = 0;   // 8 Memory Protection Regions
+`ifdef ARM_CMSDK_INCLUDE_MTB
+  parameter MTB             = 1;   // MTB present
+`else
+  parameter MTB             = 0;   // MTB not present
+`endif
+  parameter USER            = 1;   // User/Privilege
+  parameter VTOR            = 1;   // Vector Table Offset support
+`endif
+
+  //-----------------------------------------
+  // Memory options - see cmsdk_mcu_defs.v
+
+  //  This is defined in systems/cortex_m0_mcu/cmsdk_mcu_defs.v
+  //  Based on the definition constants in logical/models/memories/cmsdk_ahb_memory_model_defs.v
+  //  0) AHB_ROM_NONE             - memory not present
+  //  1) AHB_ROM_BEH_MODEL        - behavioral ROM memory
+  //  2) AHB_ROM_FPGA_SRAM_MODEL  - behavioral FPGA SRAM model with SRAM wrapper
+  //  3) AHB_ROM_FLASH32_MODEL    - behavioral 32-bit flash memory
+  parameter BOOT_MEM_TYPE   = `ARM_CMSDK_BOOT_MEM_TYPE;   // Boot loader memory type
+
+  //  This is defined in systems/cortex_m0_mcu/cmsdk_mcu_defs.v
+  //  Based on the definition constants in logical/models/memories/cmsdk_ahb_memory_model_defs.v
+  //  0) AHB_ROM_NONE             - memory not present (Not valid for a Cortex-M0 system)
+  //  1) AHB_ROM_BEH_MODEL        - behavioral ROM memory
+  //  2) AHB_ROM_FPGA_SRAM_MODEL  - behavioral FPGA SRAM model with SRAM wrapper
+  //  3) AHB_ROM_FLASH32_MODEL    - behavioral 32-bit flash memory
+  parameter ROM_MEM_TYPE    = `ARM_CMSDK_ROM_MEM_TYPE;   // ROM memory type
+
+  //  This is defined in systems/cortex_m0_mcu/cmsdk_mcu_defs.v
+  //  Based on the definition constants in logical/models/memories/cmsdk_ahb_memory_model_defs.v
+  //  0) AHB_RAM_NONE             - memory not present (Not valid for a Cortex-M0 system
+  //  1) AHB_RAM_BEH_MODEL        - behavioral RAM memory
+  //  2) AHB_RAM_FPGA_SRAM_MODEL  - behavioral SRAM model with SRAM wrapper
+  //  3) AHB_RAM_EXT_SRAM16_MODEL - for benchmarking using 16-bit external asynchronous SRAM
+  //  4) AHB_RAM_EXT_SRAM8_MODEL  - for benchmarking using 8-bit external asynchronous SRAM
+  parameter RAM_MEM_TYPE    = `ARM_CMSDK_RAM_MEM_TYPE;   // RAM memory type
+
+  //-----------------------------------------
+  // System options
+
+`ifdef ARM_CMSDK_INCLUDE_BITBAND
+  parameter INCLUDE_BITBAND = 1;
+  // Include instantiation of Bit-band wrapper
+  // This option add bit band wrapper to CPU interface
+`else
+  parameter INCLUDE_BITBAND = 0;
+`endif
+
+`ifdef ARM_CMSDK_INCLUDE_DMA
+  parameter INCLUDE_DMA = 1; // Include instantiation of DMA-230
+  // This option also add a number of bus components
+`else
+  parameter INCLUDE_DMA = 0;
+`endif
+
+`ifdef ARM_CMSDK_INCLUDE_JTAG
+  parameter INCLUDE_JTAG = 1;  // Include JTAG feature
+`else
+  parameter INCLUDE_JTAG = 0;  // Do not Include JTAG feature
+`endif
+
+ // --------------------------------------------------------------------------------
+ // Cortex-M0/Cortex-M0+ Microcontroller
+ // --------------------------------------------------------------------------------
+
+  cmsdk_mcu_chip
+//  cmsdk_mcu
+   #(.CLKGATE_PRESENT  (CLKGATE_PRESENT),
+     .BE               (BE),
+     .BKPT             (BKPT),          // Number of breakpoint comparators
+     .DBG              (DBG),           // Debug configuration
+     .NUMIRQ           (NUMIRQ),        // NUMIRQ
+     .SMUL             (SMUL),          // Multiplier configuration
+     .SYST             (SYST),          // SysTick
+     .WIC              (WIC),           // Wake-up interrupt controller support
+     .WICLINES         (WICLINES),      // Supported WIC lines
+`ifdef CORTEX_M0PLUS
+     .AWIDTH           (AWIDTH),        // Micro Trace Buffer SRAM address width
+     .BASEADDR         (BASEADDR),      // ROM Table Base Address
+     .HWF              (HWF),           // Half Word Fetching
+     .IOP              (IOP),           // IO Port interface selected
+     .IRQDIS           (IRQDIS),        // Interrupt Disable
+     .MPU              (MPU),           // Memory Protection support
+     .MTB              (MTB),           // MTB select
+     .USER             (USER),          // User/Privilege
+     .VTOR             (VTOR),          // Vector Table Offset support
+`endif
+     .WPT              (WPT),           // Number of DWT comparators
+     .RESET_ALL_REGS   (RESET_ALL_REGS), // Do not reset all registers
+     .BOOT_MEM_TYPE    (BOOT_MEM_TYPE), // Boot loader memory type
+     .ROM_MEM_TYPE     (ROM_MEM_TYPE),  // ROM memory type
+     .RAM_MEM_TYPE     (RAM_MEM_TYPE),  // RAM loader memory type
+     .INCLUDE_BITBAND  (INCLUDE_BITBAND), // Include bit band wrapper
+     .INCLUDE_DMA      (INCLUDE_DMA),   // Include DMA feature
+     .INCLUDE_JTAG     (INCLUDE_JTAG)   // Include JTAG feature
+   )
+   u_cmsdk_mcu (
+`ifdef POWER_PINS
+  .VDDIO      (VDDIO),
+  .VSSIO      (VSSIO),
+  .VDD        (VDD),
+  .VSS        (VSS),
+`endif
+  .xtal_clk_i(xtal_clk_i),
+  .xtal_clk_o(xtal_clk_o),
+  .nrst_i(nrst_i),
+  .p0_i(p0_i), // level-shifted input from pad
+  .p0_o(p0_o), // output port drive
+  .p0_e(p0_e), // active high output drive enable (pad tech dependent)
+  .p0_z(p0_z), // active low output drive enable (pad tech dependent)
+  .p1_i(p1_i), // level-shifted input from pad
+  .p1_o(p1_o), // output port drive
+  .p1_e(p1_e), // active high output drive enable (pad tech dependent)
+  .p1_z(p1_z), // active low output drive enable (pad tech dependent)
+
+`ifdef ARM_CMSDK_INCLUDE_JTAG
+  .ntrst_i(ntrst_i),
+  .tdi_i(tdi_i),
+  .tdo_o(tdo_o),
+`endif
+  .swdio_i(swdio_i),
+  .swdio_o(swdio_o),
+  .swdio_e(swdio_e),
+  .swdio_z(swdio_z),
+  .swdclk_i(swdclk_i)
+  );
+
+
+//TIE_HI uTIEHI (.tiehi(tiehi));
+ wire tiehi = 1'b1;
+//TIE_LO uTIELO (.tielo(tielo));
+ wire tielo = 1'b0;
+
+ // --------------------------------------------------------------------------------
+ // IO pad (GLIB Generic Library napping)
+ // --------------------------------------------------------------------------------
+
+`ifdef POWER_PINS
+// Pad IO power supplies
+
+PAD_VDDIO uPAD_VDDIO_1(
+   .PAD(VDDIO)
+   );
+
+PAD_VSSIO uPAD_VSSIO_1(
+   .PAD(VSSIO)
+   );
+
+// Core power supplies
+
+PAD_VDDSOC uPAD_VDD_1(
+   .PAD(VDD)
+   );
+
+PAD_VSS uPAD_VSS_1(
+   .PAD(VSS)
+   );
+`endif
+
+// Clock, Reset and Serial Wire Debug ports
+
+PAD_INOUT8MA_NOE uPAD_XTAL_I (
+   .PAD (XTAL1), 
+   .O   (tielo),
+   .I   (xtal_clk_i), 
+   .NOE (tiehi)
+   );
+
+PAD_INOUT8MA_NOE uPAD_XTAL_O (
+   .PAD (XTAL2), 
+   .O   (xtal_clk_o),
+   .I   ( ), 
+   .NOE (tielo)
+   );
+
+PAD_INOUT8MA_NOE uPAD_NRST_I (
+   .PAD (NRST), 
+   .O   (tielo),
+   .I   (nrst_i), 
+   .NOE (tiehi)
+   );
+
+PAD_INOUT8MA_NOE uPAD_SWDIO_I (
+   .PAD (SWDIOTMS), 
+   .O   (swdio_o), 
+   .I   (swdio_i),
+   .NOE (swdio_z)
+   );
+
+PAD_INOUT8MA_NOE uPAD_SWDCLK_I (
+   .PAD (SWCLKTCK), 
+   .O   (tielo), 
+   .I   (swdclk_i),
+   .NOE (tiehi)
+   );
+
+// GPI.I Port 0 x 16
+
+PAD_INOUT8MA_NOE uPAD_P0_00 (
+   .PAD (P0[00]), 
+   .O   (p0_o[00]), 
+   .I   (p0_i[00]),
+   .NOE (p0_z[00])
+   );
+
+PAD_INOUT8MA_NOE uPAD_P0_01 (
+   .PAD (P0[01]), 
+   .O   (p0_o[01]), 
+   .I   (p0_i[01]),
+   .NOE (p0_z[01])
+   );
+  
+PAD_INOUT8MA_NOE uPAD_P0_02 (
+   .PAD (P0[02]), 
+   .O   (p0_o[02]), 
+   .I   (p0_i[02]),
+   .NOE (p0_z[02])
+   );
+
+PAD_INOUT8MA_NOE uPAD_P0_03 (
+   .PAD (P0[03]), 
+   .O   (p0_o[03]), 
+   .I   (p0_i[03]),
+   .NOE (p0_z[03])
+   );
+
+PAD_INOUT8MA_NOE uPAD_P0_04 (
+   .PAD (P0[04]), 
+   .O   (p0_o[04]), 
+   .I   (p0_i[04]),
+   .NOE (p0_z[04])
+   );
+
+PAD_INOUT8MA_NOE uPAD_P0_05 (
+   .PAD (P0[05]), 
+   .O   (p0_o[05]), 
+   .I   (p0_i[05]),
+   .NOE (p0_z[05])
+   );
+  
+PAD_INOUT8MA_NOE uPAD_P0_06 (
+   .PAD (P0[06]), 
+   .O   (p0_o[06]), 
+   .I   (p0_i[06]),
+   .NOE (p0_z[06])
+   );
+
+PAD_INOUT8MA_NOE uPAD_P0_07 (
+   .PAD (P0[07]), 
+   .O   (p0_o[07]), 
+   .I   (p0_i[07]),
+   .NOE (p0_z[07])
+   );
+  
+PAD_INOUT8MA_NOE uPAD_P0_08 (
+   .PAD (P0[08]), 
+   .O   (p0_o[08]), 
+   .I   (p0_i[08]),
+   .NOE (p0_z[08])
+   );
+
+PAD_INOUT8MA_NOE uPAD_P0_09 (
+   .PAD (P0[09]), 
+   .O   (p0_o[09]), 
+   .I   (p0_i[09]),
+   .NOE (p0_z[09])
+   );
+  
+PAD_INOUT8MA_NOE uPAD_P0_10 (
+   .PAD (P0[10]), 
+   .O   (p0_o[10]), 
+   .I   (p0_i[10]),
+   .NOE (p0_z[10])
+   );
+
+PAD_INOUT8MA_NOE uPAD_P0_11 (
+   .PAD (P0[11]), 
+   .O   (p0_o[11]), 
+   .I   (p0_i[11]),
+   .NOE (p0_z[11])
+   );
+  
+PAD_INOUT8MA_NOE uPAD_P0_12 (
+   .PAD (P0[12]), 
+   .O   (p0_o[12]), 
+   .I   (p0_i[12]),
+   .NOE (p0_z[12])
+   );
+
+PAD_INOUT8MA_NOE uPAD_P0_13 (
+   .PAD (P0[13]), 
+   .O   (p0_o[13]), 
+   .I   (p0_i[13]),
+   .NOE (p0_z[13])
+   );
+  
+PAD_INOUT8MA_NOE uPAD_P0_14 (
+   .PAD (P0[14]), 
+   .O   (p0_o[14]), 
+   .I   (p0_i[14]),
+   .NOE (p0_z[14])
+   );
+
+PAD_INOUT8MA_NOE uPAD_P0_15 (
+   .PAD (P0[15]), 
+   .O   (p0_o[15]), 
+   .I   (p0_i[15]),
+   .NOE (p0_z[15])
+   );
+  
+// GPI.I Port 1 x 16
+
+PAD_INOUT8MA_NOE uPAD_P1_00 (
+   .PAD (P1[00]), 
+   .O   (p1_o[00]), 
+   .I   (p1_i[00]),
+   .NOE (p1_z[00])
+   );
+
+PAD_INOUT8MA_NOE uPAD_P1_01 (
+   .PAD (P1[01]), 
+   .O   (p1_o[01]), 
+   .I   (p1_i[01]),
+   .NOE (p1_z[01])
+   );
+  
+PAD_INOUT8MA_NOE uPAD_P1_02 (
+   .PAD (P1[02]), 
+   .O   (p1_o[02]), 
+   .I   (p1_i[02]),
+   .NOE (p1_z[02])
+   );
+
+PAD_INOUT8MA_NOE uPAD_P1_03 (
+   .PAD (P1[03]), 
+   .O   (p1_o[03]), 
+   .I   (p1_i[03]),
+   .NOE (p1_z[03])
+   );
+
+PAD_INOUT8MA_NOE uPAD_P1_04 (
+   .PAD (P1[04]), 
+   .O   (p1_o[04]), 
+   .I   (p1_i[04]),
+   .NOE (p1_z[04])
+   );
+
+PAD_INOUT8MA_NOE uPAD_P1_05 (
+   .PAD (P1[05]), 
+   .O   (p1_o[05]), 
+   .I   (p1_i[05]),
+   .NOE (p1_z[05])
+   );
+  
+PAD_INOUT8MA_NOE uPAD_P1_06 (
+   .PAD (P1[06]), 
+   .O   (p1_o[06]), 
+   .I   (p1_i[06]),
+   .NOE (p1_z[06])
+   );
+
+PAD_INOUT8MA_NOE uPAD_P1_07 (
+   .PAD (P1[07]), 
+   .O   (p1_o[07]), 
+   .I   (p1_i[07]),
+   .NOE (p1_z[07])
+   );
+  
+PAD_INOUT8MA_NOE uPAD_P1_08 (
+   .PAD (P1[08]), 
+   .O   (p1_o[08]), 
+   .I   (p1_i[08]),
+   .NOE (p1_z[08])
+   );
+
+PAD_INOUT8MA_NOE uPAD_P1_09 (
+   .PAD (P1[09]), 
+   .O   (p1_o[09]), 
+   .I   (p1_i[09]),
+   .NOE (p1_z[09])
+   );
+  
+PAD_INOUT8MA_NOE uPAD_P1_10 (
+   .PAD (P1[10]), 
+   .O   (p1_o[10]), 
+   .I   (p1_i[10]),
+   .NOE (p1_z[10])
+   );
+
+PAD_INOUT8MA_NOE uPAD_P1_11 (
+   .PAD (P1[11]), 
+   .O   (p1_o[11]), 
+   .I   (p1_i[11]),
+   .NOE (p1_z[11])
+   );
+  
+PAD_INOUT8MA_NOE uPAD_P1_12 (
+   .PAD (P1[12]), 
+   .O   (p1_o[12]), 
+   .I   (p1_i[12]),
+   .NOE (p1_z[12])
+   );
+
+PAD_INOUT8MA_NOE uPAD_P1_13 (
+   .PAD (P1[13]), 
+   .O   (p1_o[13]), 
+   .I   (p1_i[13]),
+   .NOE (p1_z[13])
+   );
+  
+PAD_INOUT8MA_NOE uPAD_P1_14 (
+   .PAD (P1[14]), 
+   .O   (p1_o[14]), 
+   .I   (p1_i[14]),
+   .NOE (p1_z[14])
+   );
+
+PAD_INOUT8MA_NOE uPAD_P1_15 (
+   .PAD (P1[15]), 
+   .O   (p1_o[15]), 
+   .I   (p1_i[15]),
+   .NOE (p1_z[15])
+   );
+
+endmodule
+
+
+