diff --git a/Cortex-M0/soclabs_demo/software/cmsis/Device/ARM/CMSDK_CM0/Include/CMSDK_CM0.h b/Cortex-M0/soclabs_demo/software/cmsis/Device/ARM/CMSDK_CM0/Include/CMSDK_CM0.h
index 6744488b6e677d1b585b2f506b6332ff58806d22..ed3df93e7cfe6df1066b78dbc93af48b4006c44a 100644
--- a/Cortex-M0/soclabs_demo/software/cmsis/Device/ARM/CMSDK_CM0/Include/CMSDK_CM0.h
+++ b/Cortex-M0/soclabs_demo/software/cmsis/Device/ARM/CMSDK_CM0/Include/CMSDK_CM0.h
@@ -1268,7 +1268,8 @@ __IO    uint32_t  MODECTRL;
 #define CMSDK_DUALTIMER_2_BASE  (CMSDK_DUALTIMER_BASE + 0x20UL)
 #define CMSDK_UART0_BASE        (CMSDK_APB_BASE + 0x4000UL)
 #define CMSDK_UART1_BASE        (CMSDK_APB_BASE + 0x5000UL)
-#define CMSDK_UART2_BASE        (CMSDK_APB_BASE + 0xE000UL) //0x6000UL)
+#define CMSDK_UART2_BASE        (CMSDK_APB_BASE + 0x6000UL)
+#define CMSDK_USRT2_BASE        (CMSDK_APB_BASE + 0xE000UL) //0x6000UL)
 #define CMSDK_WATCHDOG_BASE     (CMSDK_APB_BASE + 0x8000UL)
 #define CMSDK_PL230_BASE        (CMSDK_APB_BASE + 0xF000UL)
 
@@ -1290,6 +1291,7 @@ __IO    uint32_t  MODECTRL;
 #define CMSDK_UART0             ((CMSDK_UART_TypeDef   *) CMSDK_UART0_BASE   )
 #define CMSDK_UART1             ((CMSDK_UART_TypeDef   *) CMSDK_UART1_BASE   )
 #define CMSDK_UART2             ((CMSDK_UART_TypeDef   *) CMSDK_UART2_BASE   )
+#define CMSDK_USRT2             ((CMSDK_UART_TypeDef   *) CMSDK_USRT2_BASE   )
 #define CMSDK_TIMER0            ((CMSDK_TIMER_TypeDef  *) CMSDK_TIMER0_BASE  )
 #define CMSDK_TIMER1            ((CMSDK_TIMER_TypeDef  *) CMSDK_TIMER1_BASE  )
 #define CMSDK_DUALTIMER         ((CMSDK_DUALTIMER_BOTH_TypeDef  *) CMSDK_DUALTIMER_BASE )
diff --git a/Cortex-M0/soclabs_demo/software/common/bootloader/bootloader.c b/Cortex-M0/soclabs_demo/software/common/bootloader/bootloader.c
index 12b2a64a87d96032eed0ccb5d557ab4c58f09fd4..22c16f20f951a7dd94e74f1bfb3aa64c6402cc9f 100644
--- a/Cortex-M0/soclabs_demo/software/common/bootloader/bootloader.c
+++ b/Cortex-M0/soclabs_demo/software/common/bootloader/bootloader.c
@@ -46,8 +46,9 @@ void UartStdOutInit(void)
 {
 //  CMSDK_UART2->BAUDDIV = 16;
 //  CMSDK_UART2->CTRL    = 0x41; // High speed test mode, TX only
-  CMSDK_UART2->BAUDDIV = 208; //(1MHz/9600)
+  CMSDK_UART2->BAUDDIV = 2080; //(20MHz/9600)
   CMSDK_UART2->CTRL    = 0x01; //TX only, standard UART
+  CMSDK_USRT2->CTRL    = 0x01; //TX only, FT1248 USRT
   CMSDK_GPIO1->ALTFUNCSET = (1<<5);
   return;
 }
@@ -56,6 +57,8 @@ unsigned char UartPutc(unsigned char my_ch)
 {
   while ((CMSDK_UART2->STATE & 1)); // Wait if Transmit Holding register is full
   CMSDK_UART2->DATA = my_ch; // write to transmit holding register
+  while ((CMSDK_USRT2->STATE & 1)); // Wait if Transmit Holding register is full
+  CMSDK_USRT2->DATA = my_ch; // write to transmit holding register
   return (my_ch);
 }
 // Uart string output
@@ -103,7 +106,7 @@ void FlashLoader(void)
     Likely that the user is trying to run bootloader as a test,
      which is not what this program is for.
     */
-    UartPuts("- Error: REMAP is already clear\n");
+    UartPuts("- Error: REMAP cleared\n");
     UartPutc(0x4); // Terminate simulation
     while (1);
     }
diff --git a/Cortex-M0/soclabs_demo/software/common/retarget/uart_stdout.c b/Cortex-M0/soclabs_demo/software/common/retarget/uart_stdout.c
index 7259de0717338e9951bcdddb3a85677b4c2c8945..a962275f4b817ed533bdb1348ea12be27e0ce18f 100644
--- a/Cortex-M0/soclabs_demo/software/common/retarget/uart_stdout.c
+++ b/Cortex-M0/soclabs_demo/software/common/retarget/uart_stdout.c
@@ -47,8 +47,10 @@ void UartStdOutInit(void)
 {
 //  CMSDK_UART2->BAUDDIV = 16;
 //  CMSDK_UART2->CTRL    = 0x41; // High speed test mode, TX only
-  CMSDK_UART2->BAUDDIV = 208; //(1MHz/9600)
+  CMSDK_UART2->BAUDDIV = 2080; //(1MHz/9600)
   CMSDK_UART2->CTRL    = 0x01; //TX only, standard UART
+  CMSDK_USRT2->BAUDDIV = 2080; //(1MHz/9600)
+  CMSDK_USRT2->CTRL    = 0x01; //TX only, standard UART
   CMSDK_GPIO1->ALTFUNCSET = (1<<5);
   return;
 }
@@ -57,6 +59,8 @@ unsigned char UartPutc(unsigned char my_ch)
 {
   while ((CMSDK_UART2->STATE & 1)); // Wait if Transmit Holding register is full
   CMSDK_UART2->DATA = my_ch; // write to transmit holding register
+  while ((CMSDK_USRT2->STATE & 1)); // Wait if Transmit Holding register is full
+  CMSDK_USRT2->DATA = my_ch; // write to transmit holding register
   return (my_ch);
 }
 // Get a character
diff --git a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/v2html_doc.tgz b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/v2html_doc.tgz
index aa9c831d92b81ab61e1db1a36126c6a0bea9afac..f6625628cfd01a17995963ee619275639948aa7c 100644
Binary files a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/v2html_doc.tgz and b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/v2html_doc.tgz differ
diff --git a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/verilog/bootrom.v b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/verilog/bootrom.v
index 12e24a8ec494486c19f3115560d1304eb0d073ff..fe575ecfd3416c12b066505a7738e8f42c31c2bd 100644
--- a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/verilog/bootrom.v
+++ b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/verilog/bootrom.v
@@ -5,7 +5,7 @@
 // Contributors
 //
 // David Flynn (d.w.flynn@soton.ac.uk)
-//    Date:    2203311024
+//    Date:    2207011724
 // Copyright (c) 2021-2, SoC Labs (www.soclabs.org)
 //------------------------------------------------------------------------------------
 module bootrom (
@@ -17,9 +17,9 @@ reg [9:2] addr_r;
 always @(posedge CLK) if (EN) addr_r <= ADDR;
 always @(addr_r)  case(addr_r[9:2]) 
      8'h00 : RDATA <= 32'h20000368; // 0x0000
-     8'h01 : RDATA <= 32'h010002dd; // 0x0004
-     8'h02 : RDATA <= 32'h010002e5; // 0x0008
-     8'h03 : RDATA <= 32'h010002e7; // 0x000c
+     8'h01 : RDATA <= 32'h01000329; // 0x0004
+     8'h02 : RDATA <= 32'h01000331; // 0x0008
+     8'h03 : RDATA <= 32'h01000333; // 0x000c
      8'h04 : RDATA <= 32'h00000000; // 0x0010
      8'h05 : RDATA <= 32'h00000000; // 0x0014
      8'h06 : RDATA <= 32'h00000000; // 0x0018
@@ -27,43 +27,43 @@ always @(addr_r)  case(addr_r[9:2])
      8'h08 : RDATA <= 32'h00000000; // 0x0020
      8'h09 : RDATA <= 32'h00000000; // 0x0024
      8'h0a : RDATA <= 32'h00000000; // 0x0028
-     8'h0b : RDATA <= 32'h010002e9; // 0x002c
+     8'h0b : RDATA <= 32'h01000335; // 0x002c
      8'h0c : RDATA <= 32'h00000000; // 0x0030
      8'h0d : RDATA <= 32'h00000000; // 0x0034
-     8'h0e : RDATA <= 32'h010002eb; // 0x0038
-     8'h0f : RDATA <= 32'h010002ed; // 0x003c
-     8'h10 : RDATA <= 32'h010002ef; // 0x0040
-     8'h11 : RDATA <= 32'h010002ef; // 0x0044
-     8'h12 : RDATA <= 32'h010002ef; // 0x0048
-     8'h13 : RDATA <= 32'h010002ef; // 0x004c
-     8'h14 : RDATA <= 32'h010002ef; // 0x0050
-     8'h15 : RDATA <= 32'h010002ef; // 0x0054
-     8'h16 : RDATA <= 32'h010002ef; // 0x0058
-     8'h17 : RDATA <= 32'h010002ef; // 0x005c
-     8'h18 : RDATA <= 32'h010002ef; // 0x0060
-     8'h19 : RDATA <= 32'h010002ef; // 0x0064
-     8'h1a : RDATA <= 32'h010002ef; // 0x0068
+     8'h0e : RDATA <= 32'h01000337; // 0x0038
+     8'h0f : RDATA <= 32'h01000339; // 0x003c
+     8'h10 : RDATA <= 32'h0100033b; // 0x0040
+     8'h11 : RDATA <= 32'h0100033b; // 0x0044
+     8'h12 : RDATA <= 32'h0100033b; // 0x0048
+     8'h13 : RDATA <= 32'h0100033b; // 0x004c
+     8'h14 : RDATA <= 32'h0100033b; // 0x0050
+     8'h15 : RDATA <= 32'h0100033b; // 0x0054
+     8'h16 : RDATA <= 32'h0100033b; // 0x0058
+     8'h17 : RDATA <= 32'h0100033b; // 0x005c
+     8'h18 : RDATA <= 32'h0100033b; // 0x0060
+     8'h19 : RDATA <= 32'h0100033b; // 0x0064
+     8'h1a : RDATA <= 32'h0100033b; // 0x0068
      8'h1b : RDATA <= 32'h00000000; // 0x006c
-     8'h1c : RDATA <= 32'h010002ef; // 0x0070
-     8'h1d : RDATA <= 32'h010002ef; // 0x0074
-     8'h1e : RDATA <= 32'h010002ef; // 0x0078
-     8'h1f : RDATA <= 32'h010002ef; // 0x007c
-     8'h20 : RDATA <= 32'h010002ef; // 0x0080
-     8'h21 : RDATA <= 32'h010002ef; // 0x0084
-     8'h22 : RDATA <= 32'h010002ef; // 0x0088
-     8'h23 : RDATA <= 32'h010002ef; // 0x008c
-     8'h24 : RDATA <= 32'h010002ef; // 0x0090
-     8'h25 : RDATA <= 32'h010002ef; // 0x0094
-     8'h26 : RDATA <= 32'h010002ef; // 0x0098
-     8'h27 : RDATA <= 32'h010002ef; // 0x009c
-     8'h28 : RDATA <= 32'h010002ef; // 0x00a0
-     8'h29 : RDATA <= 32'h010002ef; // 0x00a4
-     8'h2a : RDATA <= 32'h010002ef; // 0x00a8
-     8'h2b : RDATA <= 32'h010002ef; // 0x00ac
-     8'h2c : RDATA <= 32'h010002ef; // 0x00b0
-     8'h2d : RDATA <= 32'h010002ef; // 0x00b4
-     8'h2e : RDATA <= 32'h010002ef; // 0x00b8
-     8'h2f : RDATA <= 32'h010002ef; // 0x00bc
+     8'h1c : RDATA <= 32'h0100033b; // 0x0070
+     8'h1d : RDATA <= 32'h0100033b; // 0x0074
+     8'h1e : RDATA <= 32'h0100033b; // 0x0078
+     8'h1f : RDATA <= 32'h0100033b; // 0x007c
+     8'h20 : RDATA <= 32'h0100033b; // 0x0080
+     8'h21 : RDATA <= 32'h0100033b; // 0x0084
+     8'h22 : RDATA <= 32'h0100033b; // 0x0088
+     8'h23 : RDATA <= 32'h0100033b; // 0x008c
+     8'h24 : RDATA <= 32'h0100033b; // 0x0090
+     8'h25 : RDATA <= 32'h0100033b; // 0x0094
+     8'h26 : RDATA <= 32'h0100033b; // 0x0098
+     8'h27 : RDATA <= 32'h0100033b; // 0x009c
+     8'h28 : RDATA <= 32'h0100033b; // 0x00a0
+     8'h29 : RDATA <= 32'h0100033b; // 0x00a4
+     8'h2a : RDATA <= 32'h0100033b; // 0x00a8
+     8'h2b : RDATA <= 32'h0100033b; // 0x00ac
+     8'h2c : RDATA <= 32'h0100033b; // 0x00b0
+     8'h2d : RDATA <= 32'h0100033b; // 0x00b4
+     8'h2e : RDATA <= 32'h0100033b; // 0x00b8
+     8'h2f : RDATA <= 32'h0100033b; // 0x00bc
      8'h30 : RDATA <= 32'hf802f000; // 0x00c0
      8'h31 : RDATA <= 32'hf83ef000; // 0x00c4
      8'h32 : RDATA <= 32'hc830a00c; // 0x00c8
@@ -79,8 +79,8 @@ always @(addr_r)  case(addr_r[9:2])
      8'h3c : RDATA <= 32'h1afbd000; // 0x00f0
      8'h3d : RDATA <= 32'h46ab46a2; // 0x00f4
      8'h3e : RDATA <= 32'h47184333; // 0x00f8
-     8'h3f : RDATA <= 32'h00000284; // 0x00fc
-     8'h40 : RDATA <= 32'h000002a4; // 0x0100
+     8'h3f : RDATA <= 32'h000002d0; // 0x00fc
+     8'h40 : RDATA <= 32'h000002f0; // 0x0100
      8'h41 : RDATA <= 32'hd3023a10; // 0x0104
      8'h42 : RDATA <= 32'hc178c878; // 0x0108
      8'h43 : RDATA <= 32'h0752d8fa; // 0x010c
@@ -97,177 +97,177 @@ always @(addr_r)  case(addr_r[9:2])
      8'h4e : RDATA <= 32'h4770600b; // 0x0138
      8'h4f : RDATA <= 32'hbd1fb51f; // 0x013c
      8'h50 : RDATA <= 32'hbd10b510; // 0x0140
-     8'h51 : RDATA <= 32'hf8e9f000; // 0x0144
+     8'h51 : RDATA <= 32'hf90ff000; // 0x0144
      8'h52 : RDATA <= 32'hf7ff4611; // 0x0148
      8'h53 : RDATA <= 32'hf000fff7; // 0x014c
-     8'h54 : RDATA <= 32'hf000f84a; // 0x0150
-     8'h55 : RDATA <= 32'hb403f901; // 0x0154
+     8'h54 : RDATA <= 32'hf000f862; // 0x0150
+     8'h55 : RDATA <= 32'hb403f927; // 0x0154
      8'h56 : RDATA <= 32'hfff2f7ff; // 0x0158
      8'h57 : RDATA <= 32'hf000bc03; // 0x015c
-     8'h58 : RDATA <= 32'h0000f907; // 0x0160
+     8'h58 : RDATA <= 32'h0000f92d; // 0x0160
      8'h59 : RDATA <= 32'h68012000; // 0x0164
      8'h5a : RDATA <= 32'h6841468d; // 0x0168
      8'h5b : RDATA <= 32'h00004708; // 0x016c
-     8'h5c : RDATA <= 32'h21d0483c; // 0x0170
-     8'h5d : RDATA <= 32'h21016101; // 0x0174
-     8'h5e : RDATA <= 32'h493b6081; // 0x0178
-     8'h5f : RDATA <= 32'h61882020; // 0x017c
-     8'h60 : RDATA <= 32'h49384770; // 0x0180
-     8'h61 : RDATA <= 32'h07d2684a; // 0x0184
-     8'h62 : RDATA <= 32'h6008d1fc; // 0x0188
-     8'h63 : RDATA <= 32'h49354770; // 0x018c
-     8'h64 : RDATA <= 32'h2b007803; // 0x0190
-     8'h65 : RDATA <= 32'h684ad006; // 0x0194
-     8'h66 : RDATA <= 32'hd1fc07d2; // 0x0198
-     8'h67 : RDATA <= 32'h1c40600b; // 0x019c
-     8'h68 : RDATA <= 32'hd1f52b00; // 0x01a0
-     8'h69 : RDATA <= 32'hb5104770; // 0x01a4
-     8'h6a : RDATA <= 32'h68014830; // 0x01a8
-     8'h6b : RDATA <= 32'hd0082900; // 0x01ac
-     8'h6c : RDATA <= 32'h60012100; // 0x01b0
-     8'h6d : RDATA <= 32'h8f4ff3bf; // 0x01b4
-     8'h6e : RDATA <= 32'h8f6ff3bf; // 0x01b8
-     8'h6f : RDATA <= 32'hffd2f7ff; // 0x01bc
-     8'h70 : RDATA <= 32'h4828bd10; // 0x01c0
-     8'h71 : RDATA <= 32'h781aa32a; // 0x01c4
-     8'h72 : RDATA <= 32'hd0062a00; // 0x01c8
-     8'h73 : RDATA <= 32'h07c96841; // 0x01cc
-     8'h74 : RDATA <= 32'h6002d1fc; // 0x01d0
-     8'h75 : RDATA <= 32'h2a001c5b; // 0x01d4
-     8'h76 : RDATA <= 32'h2104d1f5; // 0x01d8
-     8'h77 : RDATA <= 32'h07d26842; // 0x01dc
-     8'h78 : RDATA <= 32'h6001d1fc; // 0x01e0
-     8'h79 : RDATA <= 32'hb510e7fe; // 0x01e4
-     8'h7a : RDATA <= 32'h21d0481e; // 0x01e8
-     8'h7b : RDATA <= 32'h21016101; // 0x01ec
-     8'h7c : RDATA <= 32'h4a1d6081; // 0x01f0
-     8'h7d : RDATA <= 32'h61912120; // 0x01f4
-     8'h7e : RDATA <= 32'h781aa326; // 0x01f8
-     8'h7f : RDATA <= 32'hd0062a00; // 0x01fc
-     8'h80 : RDATA <= 32'h07c96841; // 0x0200
-     8'h81 : RDATA <= 32'h6002d1fc; // 0x0204
-     8'h82 : RDATA <= 32'h2a001c5b; // 0x0208
-     8'h83 : RDATA <= 32'ha329d1f5; // 0x020c
-     8'h84 : RDATA <= 32'h2a00781a; // 0x0210
-     8'h85 : RDATA <= 32'h6841d006; // 0x0214
-     8'h86 : RDATA <= 32'hd1fc07c9; // 0x0218
-     8'h87 : RDATA <= 32'h1c5b6002; // 0x021c
-     8'h88 : RDATA <= 32'hd1f52a00; // 0x0220
-     8'h89 : RDATA <= 32'h680a4911; // 0x0224
-     8'h8a : RDATA <= 32'hd0092a00; // 0x0228
-     8'h8b : RDATA <= 32'h60082000; // 0x022c
-     8'h8c : RDATA <= 32'h8f4ff3bf; // 0x0230
-     8'h8d : RDATA <= 32'h8f6ff3bf; // 0x0234
-     8'h8e : RDATA <= 32'hff94f7ff; // 0x0238
-     8'h8f : RDATA <= 32'hbd102000; // 0x023c
-     8'h90 : RDATA <= 32'h781aa30b; // 0x0240
-     8'h91 : RDATA <= 32'hd0062a00; // 0x0244
-     8'h92 : RDATA <= 32'h07c96841; // 0x0248
-     8'h93 : RDATA <= 32'h6002d1fc; // 0x024c
-     8'h94 : RDATA <= 32'h2a001c5b; // 0x0250
-     8'h95 : RDATA <= 32'h2204d1f5; // 0x0254
-     8'h96 : RDATA <= 32'h07c96841; // 0x0258
-     8'h97 : RDATA <= 32'h6002d1fc; // 0x025c
-     8'h98 : RDATA <= 32'h0000e7fe; // 0x0260
-     8'h99 : RDATA <= 32'h4000e000; // 0x0264
-     8'h9a : RDATA <= 32'h40011000; // 0x0268
-     8'h9b : RDATA <= 32'h4001f000; // 0x026c
-     8'h9c : RDATA <= 32'h7245202d; // 0x0270
-     8'h9d : RDATA <= 32'h3a726f72; // 0x0274
-     8'h9e : RDATA <= 32'h4d455220; // 0x0278
-     8'h9f : RDATA <= 32'h69205041; // 0x027c
-     8'ha0 : RDATA <= 32'h6c612073; // 0x0280
-     8'ha1 : RDATA <= 32'h64616572; // 0x0284
-     8'ha2 : RDATA <= 32'h6c632079; // 0x0288
-     8'ha3 : RDATA <= 32'h0a726165; // 0x028c
-     8'ha4 : RDATA <= 32'h00000000; // 0x0290
-     8'ha5 : RDATA <= 32'h434f530a; // 0x0294
-     8'ha6 : RDATA <= 32'h5342414c; // 0x0298
-     8'ha7 : RDATA <= 32'h5241203a; // 0x029c
-     8'ha8 : RDATA <= 32'h6f43204d; // 0x02a0
-     8'ha9 : RDATA <= 32'h78657472; // 0x02a4
-     8'haa : RDATA <= 32'h20304d2d; // 0x02a8
-     8'hab : RDATA <= 32'h0a4b4453; // 0x02ac
-     8'hac : RDATA <= 32'h00000000; // 0x02b0
-     8'had : RDATA <= 32'h6c202d20; // 0x02b4
-     8'hae : RDATA <= 32'h2064616f; // 0x02b8
-     8'haf : RDATA <= 32'h73616c66; // 0x02bc
-     8'hb0 : RDATA <= 32'h000a0a68; // 0x02c0
-     8'hb1 : RDATA <= 32'h48034904; // 0x02c4
-     8'hb2 : RDATA <= 32'h47706008; // 0x02c8
-     8'hb3 : RDATA <= 32'h48014902; // 0x02cc
-     8'hb4 : RDATA <= 32'h47706008; // 0x02d0
-     8'hb5 : RDATA <= 32'h05f5e100; // 0x02d4
-     8'hb6 : RDATA <= 32'h20000000; // 0x02d8
-     8'hb7 : RDATA <= 32'h47804807; // 0x02dc
-     8'hb8 : RDATA <= 32'h47004807; // 0x02e0
-     8'hb9 : RDATA <= 32'he7fee7fe; // 0x02e4
-     8'hba : RDATA <= 32'he7fee7fe; // 0x02e8
-     8'hbb : RDATA <= 32'he7fee7fe; // 0x02ec
-     8'hbc : RDATA <= 32'h49054804; // 0x02f0
-     8'hbd : RDATA <= 32'h4b064a05; // 0x02f4
-     8'hbe : RDATA <= 32'h00004770; // 0x02f8
-     8'hbf : RDATA <= 32'h010002cd; // 0x02fc
-     8'hc0 : RDATA <= 32'h010000c1; // 0x0300
-     8'hc1 : RDATA <= 32'h20000068; // 0x0304
-     8'hc2 : RDATA <= 32'h20000368; // 0x0308
-     8'hc3 : RDATA <= 32'h20000168; // 0x030c
-     8'hc4 : RDATA <= 32'h20000168; // 0x0310
-     8'hc5 : RDATA <= 32'h47704770; // 0x0314
-     8'hc6 : RDATA <= 32'h46754770; // 0x0318
-     8'hc7 : RDATA <= 32'hf824f000; // 0x031c
-     8'hc8 : RDATA <= 32'h000546ae; // 0x0320
-     8'hc9 : RDATA <= 32'h46534669; // 0x0324
-     8'hca : RDATA <= 32'h00c008c0; // 0x0328
-     8'hcb : RDATA <= 32'hb0184685; // 0x032c
-     8'hcc : RDATA <= 32'hf7ffb520; // 0x0330
-     8'hcd : RDATA <= 32'hbc60ffdd; // 0x0334
-     8'hce : RDATA <= 32'h08492700; // 0x0338
-     8'hcf : RDATA <= 32'h260046b6; // 0x033c
-     8'hd0 : RDATA <= 32'hc5c0c5c0; // 0x0340
-     8'hd1 : RDATA <= 32'hc5c0c5c0; // 0x0344
-     8'hd2 : RDATA <= 32'hc5c0c5c0; // 0x0348
-     8'hd3 : RDATA <= 32'hc5c0c5c0; // 0x034c
-     8'hd4 : RDATA <= 32'h00493d40; // 0x0350
-     8'hd5 : RDATA <= 32'h4770468d; // 0x0354
-     8'hd6 : RDATA <= 32'h4604b510; // 0x0358
-     8'hd7 : RDATA <= 32'h46c046c0; // 0x035c
-     8'hd8 : RDATA <= 32'hf7ff4620; // 0x0360
-     8'hd9 : RDATA <= 32'hbd10fef8; // 0x0364
-     8'hda : RDATA <= 32'h47704800; // 0x0368
-     8'hdb : RDATA <= 32'h20000004; // 0x036c
-     8'hdc : RDATA <= 32'h20184901; // 0x0370
-     8'hdd : RDATA <= 32'he7febeab; // 0x0374
-     8'hde : RDATA <= 32'h00020026; // 0x0378
-     8'hdf : RDATA <= 32'h00004770; // 0x037c
-     8'he0 : RDATA <= 32'h010003a0; // 0x0380
-     8'he1 : RDATA <= 32'h20000000; // 0x0384
-     8'he2 : RDATA <= 32'h00000004; // 0x0388
-     8'he3 : RDATA <= 32'h01000104; // 0x038c
-     8'he4 : RDATA <= 32'h010003a4; // 0x0390
-     8'he5 : RDATA <= 32'h20000004; // 0x0394
-     8'he6 : RDATA <= 32'h00000364; // 0x0398
-     8'he7 : RDATA <= 32'h01000120; // 0x039c
-     8'he8 : RDATA <= 32'h05f5e100; // 0x03a0
-     8'he9 : RDATA <= 32'h00000000; // 0x03a4
-     8'hea : RDATA <= 32'h00000000; // 0x03a8
-     8'heb : RDATA <= 32'h00000000; // 0x03ac
-     8'hec : RDATA <= 32'h00000000; // 0x03b0
-     8'hed : RDATA <= 32'h00000000; // 0x03b4
-     8'hee : RDATA <= 32'h00000000; // 0x03b8
-     8'hef : RDATA <= 32'h00000000; // 0x03bc
-     8'hf0 : RDATA <= 32'h00000000; // 0x03c0
-     8'hf1 : RDATA <= 32'h00000000; // 0x03c4
-     8'hf2 : RDATA <= 32'h00000000; // 0x03c8
-     8'hf3 : RDATA <= 32'h00000000; // 0x03cc
-     8'hf4 : RDATA <= 32'h00000000; // 0x03d0
-     8'hf5 : RDATA <= 32'h00000000; // 0x03d4
-     8'hf6 : RDATA <= 32'h00000000; // 0x03d8
-     8'hf7 : RDATA <= 32'h00000000; // 0x03dc
-     8'hf8 : RDATA <= 32'h00000000; // 0x03e0
-     8'hf9 : RDATA <= 32'h00000000; // 0x03e4
-     8'hfa : RDATA <= 32'h00000000; // 0x03e8
-     8'hfb : RDATA <= 32'h00000000; // 0x03ec
+     8'h5c : RDATA <= 32'h48512141; // 0x0170
+     8'h5d : RDATA <= 32'h61010149; // 0x0174
+     8'h5e : RDATA <= 32'h60812101; // 0x0178
+     8'h5f : RDATA <= 32'h6081484f; // 0x017c
+     8'h60 : RDATA <= 32'h2020494f; // 0x0180
+     8'h61 : RDATA <= 32'h47706188; // 0x0184
+     8'h62 : RDATA <= 32'h684a494b; // 0x0188
+     8'h63 : RDATA <= 32'hd1fc07d2; // 0x018c
+     8'h64 : RDATA <= 32'h494a6008; // 0x0190
+     8'h65 : RDATA <= 32'h07d2684a; // 0x0194
+     8'h66 : RDATA <= 32'h6008d1fc; // 0x0198
+     8'h67 : RDATA <= 32'hb4104770; // 0x019c
+     8'h68 : RDATA <= 32'h4a464945; // 0x01a0
+     8'h69 : RDATA <= 32'h2c007804; // 0x01a4
+     8'h6a : RDATA <= 32'h684bd00a; // 0x01a8
+     8'h6b : RDATA <= 32'hd1fc07db; // 0x01ac
+     8'h6c : RDATA <= 32'h6853600c; // 0x01b0
+     8'h6d : RDATA <= 32'hd1fc07db; // 0x01b4
+     8'h6e : RDATA <= 32'h1c406014; // 0x01b8
+     8'h6f : RDATA <= 32'hd1f12c00; // 0x01bc
+     8'h70 : RDATA <= 32'h4770bc10; // 0x01c0
+     8'h71 : RDATA <= 32'h483fb510; // 0x01c4
+     8'h72 : RDATA <= 32'h29006801; // 0x01c8
+     8'h73 : RDATA <= 32'h2100d008; // 0x01cc
+     8'h74 : RDATA <= 32'hf3bf6001; // 0x01d0
+     8'h75 : RDATA <= 32'hf3bf8f4f; // 0x01d4
+     8'h76 : RDATA <= 32'hf7ff8f6f; // 0x01d8
+     8'h77 : RDATA <= 32'hbd10ffc3; // 0x01dc
+     8'h78 : RDATA <= 32'h49364835; // 0x01e0
+     8'h79 : RDATA <= 32'h7823a438; // 0x01e4
+     8'h7a : RDATA <= 32'hd00a2b00; // 0x01e8
+     8'h7b : RDATA <= 32'h07d26842; // 0x01ec
+     8'h7c : RDATA <= 32'h6003d1fc; // 0x01f0
+     8'h7d : RDATA <= 32'h07d2684a; // 0x01f4
+     8'h7e : RDATA <= 32'h600bd1fc; // 0x01f8
+     8'h7f : RDATA <= 32'h2b001c64; // 0x01fc
+     8'h80 : RDATA <= 32'h2204d1f1; // 0x0200
+     8'h81 : RDATA <= 32'h07db6843; // 0x0204
+     8'h82 : RDATA <= 32'h6002d1fc; // 0x0208
+     8'h83 : RDATA <= 32'h07c06848; // 0x020c
+     8'h84 : RDATA <= 32'h600ad1fc; // 0x0210
+     8'h85 : RDATA <= 32'hb510e7fe; // 0x0214
+     8'h86 : RDATA <= 32'h48272141; // 0x0218
+     8'h87 : RDATA <= 32'h61010149; // 0x021c
+     8'h88 : RDATA <= 32'h60822201; // 0x0220
+     8'h89 : RDATA <= 32'h608a4925; // 0x0224
+     8'h8a : RDATA <= 32'h22204b25; // 0x0228
+     8'h8b : RDATA <= 32'ha42c619a; // 0x022c
+     8'h8c : RDATA <= 32'h2b007823; // 0x0230
+     8'h8d : RDATA <= 32'h6842d00a; // 0x0234
+     8'h8e : RDATA <= 32'hd1fc07d2; // 0x0238
+     8'h8f : RDATA <= 32'h684a6003; // 0x023c
+     8'h90 : RDATA <= 32'hd1fc07d2; // 0x0240
+     8'h91 : RDATA <= 32'h1c64600b; // 0x0244
+     8'h92 : RDATA <= 32'hd1f12b00; // 0x0248
+     8'h93 : RDATA <= 32'h7823a42c; // 0x024c
+     8'h94 : RDATA <= 32'hd00a2b00; // 0x0250
+     8'h95 : RDATA <= 32'h07d26842; // 0x0254
+     8'h96 : RDATA <= 32'h6003d1fc; // 0x0258
+     8'h97 : RDATA <= 32'h07d2684a; // 0x025c
+     8'h98 : RDATA <= 32'h600bd1fc; // 0x0260
+     8'h99 : RDATA <= 32'h2b001c64; // 0x0264
+     8'h9a : RDATA <= 32'h4a16d1f1; // 0x0268
+     8'h9b : RDATA <= 32'h2b006813; // 0x026c
+     8'h9c : RDATA <= 32'h2000d009; // 0x0270
+     8'h9d : RDATA <= 32'hf3bf6010; // 0x0274
+     8'h9e : RDATA <= 32'hf3bf8f4f; // 0x0278
+     8'h9f : RDATA <= 32'hf7ff8f6f; // 0x027c
+     8'ha0 : RDATA <= 32'h2000ff71; // 0x0280
+     8'ha1 : RDATA <= 32'ha410bd10; // 0x0284
+     8'ha2 : RDATA <= 32'h2b007823; // 0x0288
+     8'ha3 : RDATA <= 32'h6842d00a; // 0x028c
+     8'ha4 : RDATA <= 32'hd1fc07d2; // 0x0290
+     8'ha5 : RDATA <= 32'h684a6003; // 0x0294
+     8'ha6 : RDATA <= 32'hd1fc07d2; // 0x0298
+     8'ha7 : RDATA <= 32'h1c64600b; // 0x029c
+     8'ha8 : RDATA <= 32'hd1f12b00; // 0x02a0
+     8'ha9 : RDATA <= 32'h68432204; // 0x02a4
+     8'haa : RDATA <= 32'hd1fc07db; // 0x02a8
+     8'hab : RDATA <= 32'h68486002; // 0x02ac
+     8'hac : RDATA <= 32'hd1fc07c0; // 0x02b0
+     8'had : RDATA <= 32'he7fe600a; // 0x02b4
+     8'hae : RDATA <= 32'h40006000; // 0x02b8
+     8'haf : RDATA <= 32'h4000e000; // 0x02bc
+     8'hb0 : RDATA <= 32'h40011000; // 0x02c0
+     8'hb1 : RDATA <= 32'h4001f000; // 0x02c4
+     8'hb2 : RDATA <= 32'h7245202d; // 0x02c8
+     8'hb3 : RDATA <= 32'h3a726f72; // 0x02cc
+     8'hb4 : RDATA <= 32'h4d455220; // 0x02d0
+     8'hb5 : RDATA <= 32'h63205041; // 0x02d4
+     8'hb6 : RDATA <= 32'h7261656c; // 0x02d8
+     8'hb7 : RDATA <= 32'h000a6465; // 0x02dc
+     8'hb8 : RDATA <= 32'h434f530a; // 0x02e0
+     8'hb9 : RDATA <= 32'h5342414c; // 0x02e4
+     8'hba : RDATA <= 32'h5241203a; // 0x02e8
+     8'hbb : RDATA <= 32'h6f43204d; // 0x02ec
+     8'hbc : RDATA <= 32'h78657472; // 0x02f0
+     8'hbd : RDATA <= 32'h20304d2d; // 0x02f4
+     8'hbe : RDATA <= 32'h0a4b4453; // 0x02f8
+     8'hbf : RDATA <= 32'h00000000; // 0x02fc
+     8'hc0 : RDATA <= 32'h6c202d20; // 0x0300
+     8'hc1 : RDATA <= 32'h2064616f; // 0x0304
+     8'hc2 : RDATA <= 32'h73616c66; // 0x0308
+     8'hc3 : RDATA <= 32'h000a0a68; // 0x030c
+     8'hc4 : RDATA <= 32'h48034904; // 0x0310
+     8'hc5 : RDATA <= 32'h47706008; // 0x0314
+     8'hc6 : RDATA <= 32'h48014902; // 0x0318
+     8'hc7 : RDATA <= 32'h47706008; // 0x031c
+     8'hc8 : RDATA <= 32'h05f5e100; // 0x0320
+     8'hc9 : RDATA <= 32'h20000000; // 0x0324
+     8'hca : RDATA <= 32'h47804807; // 0x0328
+     8'hcb : RDATA <= 32'h47004807; // 0x032c
+     8'hcc : RDATA <= 32'he7fee7fe; // 0x0330
+     8'hcd : RDATA <= 32'he7fee7fe; // 0x0334
+     8'hce : RDATA <= 32'he7fee7fe; // 0x0338
+     8'hcf : RDATA <= 32'h49054804; // 0x033c
+     8'hd0 : RDATA <= 32'h4b064a05; // 0x0340
+     8'hd1 : RDATA <= 32'h00004770; // 0x0344
+     8'hd2 : RDATA <= 32'h01000319; // 0x0348
+     8'hd3 : RDATA <= 32'h010000c1; // 0x034c
+     8'hd4 : RDATA <= 32'h20000068; // 0x0350
+     8'hd5 : RDATA <= 32'h20000368; // 0x0354
+     8'hd6 : RDATA <= 32'h20000168; // 0x0358
+     8'hd7 : RDATA <= 32'h20000168; // 0x035c
+     8'hd8 : RDATA <= 32'h47704770; // 0x0360
+     8'hd9 : RDATA <= 32'h46754770; // 0x0364
+     8'hda : RDATA <= 32'hf824f000; // 0x0368
+     8'hdb : RDATA <= 32'h000546ae; // 0x036c
+     8'hdc : RDATA <= 32'h46534669; // 0x0370
+     8'hdd : RDATA <= 32'h00c008c0; // 0x0374
+     8'hde : RDATA <= 32'hb0184685; // 0x0378
+     8'hdf : RDATA <= 32'hf7ffb520; // 0x037c
+     8'he0 : RDATA <= 32'hbc60ffdd; // 0x0380
+     8'he1 : RDATA <= 32'h08492700; // 0x0384
+     8'he2 : RDATA <= 32'h260046b6; // 0x0388
+     8'he3 : RDATA <= 32'hc5c0c5c0; // 0x038c
+     8'he4 : RDATA <= 32'hc5c0c5c0; // 0x0390
+     8'he5 : RDATA <= 32'hc5c0c5c0; // 0x0394
+     8'he6 : RDATA <= 32'hc5c0c5c0; // 0x0398
+     8'he7 : RDATA <= 32'h00493d40; // 0x039c
+     8'he8 : RDATA <= 32'h4770468d; // 0x03a0
+     8'he9 : RDATA <= 32'h4604b510; // 0x03a4
+     8'hea : RDATA <= 32'h46c046c0; // 0x03a8
+     8'heb : RDATA <= 32'hf7ff4620; // 0x03ac
+     8'hec : RDATA <= 32'hbd10fed2; // 0x03b0
+     8'hed : RDATA <= 32'h47704800; // 0x03b4
+     8'hee : RDATA <= 32'h20000004; // 0x03b8
+     8'hef : RDATA <= 32'h20184901; // 0x03bc
+     8'hf0 : RDATA <= 32'he7febeab; // 0x03c0
+     8'hf1 : RDATA <= 32'h00020026; // 0x03c4
+     8'hf2 : RDATA <= 32'h00004770; // 0x03c8
+     8'hf3 : RDATA <= 32'h010003ec; // 0x03cc
+     8'hf4 : RDATA <= 32'h20000000; // 0x03d0
+     8'hf5 : RDATA <= 32'h00000004; // 0x03d4
+     8'hf6 : RDATA <= 32'h01000104; // 0x03d8
+     8'hf7 : RDATA <= 32'h010003f0; // 0x03dc
+     8'hf8 : RDATA <= 32'h20000004; // 0x03e0
+     8'hf9 : RDATA <= 32'h00000364; // 0x03e4
+     8'hfa : RDATA <= 32'h01000120; // 0x03e8
+     8'hfb : RDATA <= 32'h05f5e100; // 0x03ec
      8'hfc : RDATA <= 32'h00000000; // 0x03f0
      8'hfd : RDATA <= 32'h00000000; // 0x03f4
      8'hfe : RDATA <= 32'h00000000; // 0x03f8
diff --git a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/verilog/cmsdk_clkreset.v b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/verilog/cmsdk_clkreset.v
index 9f19bd3681787f52617628566cae93e3626d9002..32cbd18d18e2cb5cd5fb18a9befd9709551da76d 100644
--- a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/verilog/cmsdk_clkreset.v
+++ b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/verilog/cmsdk_clkreset.v
@@ -34,12 +34,12 @@ module cmsdk_clkreset(
 
   initial
     begin
-      #10 clock_q <= 1'b1;
+      #40 clock_q <= 1'b1;
       #100 reset_n_q <= 1'b1;
     end
 
   always @(clock_q)
-      #10 clock_q <= ~clock_q;
+      #25 clock_q <= ~clock_q;
 
   assign CLK = clock_q;
   assign NRST = reset_n_q;
diff --git a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/verilog/cmsdk_mcu_chip.v b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/verilog/cmsdk_mcu_chip.v
index 3c84dbdd3fe913696e91afa27ba9e73521924a59..4af8e696780e0214107418a11826090ab920e122 100644
--- a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/verilog/cmsdk_mcu_chip.v
+++ b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/verilog/cmsdk_mcu_chip.v
@@ -6,7 +6,7 @@
 //
 // David Flynn (d.w.flynn@soton.ac.uk)
 //
-// Copyright © 2021-2, SoC Labs (www.soclabs.org)
+// Copyright � 2021-2, SoC Labs (www.soclabs.org)
 //-----------------------------------------------------------------------------
 
 //-----------------------------------------------------------------------------
@@ -97,41 +97,52 @@ module cmsdk_mcu_chip #(
   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,
+  input  wire          xtal_clk_i,
+  output wire          xtal_clk_o,
+  input  wire          nrst_i,
+  input  wire  [15:0]  p0_i, // level-shifted input from pad
+  output wire  [15:0]  p0_o, // output port drive
+  output wire  [15:0]  p0_e, // active high output drive enable (pad tech dependent)
+  output wire  [15:0]  p0_z, // active low output drive enable (pad tech dependent)
+  input  wire  [15:0]  p1_i, // level-shifted input from pad
+  output wire  [15:0]  p1_o, // output port drive
+  output wire  [15:0]  p1_e, // active high output drive enable (pad tech dependent)
+  output wire  [15:0]  p1_z, // active low output drive enable (pad tech dependent)
 
 `ifdef ARM_CMSDK_INCLUDE_JTAG
-  input  wire          nTRST,
-  input  wire          TDI,
-  output wire          TDO,
+  input  wire          ntrst_i,
+  input  wire          tdi_i,
+  output wire          tdo_o,
 `endif
-  inout  wire          SWDIOTMS,
-///  input  wire          SWCLKTCK);
-  inout  wire          SWCLKTCK);
+  input  wire          swdio_i,
+  output wire          swdio_o,
+  output wire          swdio_e,
+  output wire          swdio_z,
+  input  wire          swdclk_i
+  );
 
 
 //------------------------------------
-// internal wires
+// CMSDK internal wire naming preserved
 
-  wire          xtal_clk_in;
+  wire          xtal_clk_in = xtal_clk_i;
   wire          xtal_clk_out;
-  wire          nrst_in;
-  wire  [15:0]  p0_in;      // level-shifted input from pad
-  wire  [15:0]  p0_out;     // output port drive
-  wire  [15:0]  p0_out_en;  // active high output drive enable (pad tech dependent)
-  wire  [15:0]  p0_out_nen; // active low output drive enable (pad tech dependent)
-  wire  [15:0]  p1_in;      // level-shifted input from pad
-  wire  [15:0]  p1_out;     // output port drive
-  wire  [15:0]  p1_out_en;  // active high output drive enable (pad tech dependent)
-  wire  [15:0]  p1_out_nen; // active low output drive enable (pad tech dependent)
-  wire  [15:0]  p1_out_mux;     // output port drive
-  wire  [15:0]  p1_out_en_mux;  // active high output drive enable (pad tech dependent)
-  wire  [15:0]  p1_out_nen_mux; // active low output drive enable (pad tech dependent)
+  assign        xtal_clk_o = xtal_clk_out;
+  wire          nrst_in = nrst_i;
+  wire  [15:0]  p0_in;             // level-shifted input from pad
+  wire  [15:0]  p0_out;            // output port drive
+  wire  [15:0]  p0_out_en;         // active high output drive enable (pad tech dependent)
+  wire  [15:0]  p0_out_nen;        // active low output drive enable (pad tech dependent)
+
+  wire  [15:0]  p1_in;            // level-shifted input from pad
+  wire  [15:0]  p1_out;           // output port drive
+  wire  [15:0]  p1_out_en;        // active high output drive enable (pad tech dependent)
+  wire  [15:0]  p1_out_nen;       // active low output drive enable (pad tech dependent)
+  wire  [15:0]  p1_in_mux;        // level-shifted input from pad
+  wire  [15:0]  p1_out_mux;       // output port drive
+  wire  [15:0]  p1_out_en_mux;    // active high output drive enable (pad tech dependent)
+  wire  [15:0]  p1_out_nen_mux;   // active low output drive enable (pad tech dependent)
+
 
 `ifdef ARM_CMSDK_INCLUDE_JTAG
   wire          ntrst_in;
@@ -144,408 +155,67 @@ module cmsdk_mcu_chip #(
   wire          swdio_out_nen;
   wire          swdclk_in;
 
-  wire               ft_clk_o  ;
-  wire               ft_ssn_o  ;
-  wire               ft_miso_i;
-  wire               ft_miosio_o;
-  wire               ft_miosio_e;
-  wire               ft_miosio_z;
-  wire               ft_miosio_i;
-
-  wire          ADPRESETREQ;
-  
-/*
-  cmsdk_mcu_core
-   #(.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_core (
-`ifdef POWER_PINS
-  .VDDIO      (VDDIO),
-  .VSSIO      (VSSIO),
-  .VDD        (VDD),
-  .VSS        (VSS),
-`endif
-  .clk        (xtal_clk_in), // primary clock
-  .clk_out    (xtal_clk_out), // inverted clock out
-  .nrst       (nrst_in)     // primary reset (active-low)
-
-  .p0_in      (p0_in     ), // level-shifted input from pad
-  .p0_out     (p0_out    ), // output port drive
-  .p0_out_en  (p0_out_en ), // active high output drive enable (pad tech dependent)
-  .p0_out_nen (p0_out_nen), // active low output drive enable (pad tech dependent)
-
-  .p1_in          (p1_in     ), // level-shifted input from pad
-  .p1_out_mux     (p1_out    ), // output port drive
-  .p1_out_en_mux  (p1_out_en ), // active high output drive enable (pad tech dependent)
-  .p1_out_nen_mux (p1_out_nen), // active low output drive enable (pad tech dependent)
-  
-`ifdef ARM_CMSDK_INCLUDE_JTAG
-  .ntrst      (ntrst_in), // JTAG reset (active-low)
-  .tdi        (tdi_in), // JTAG reset (active-low)
-  .tdo        (tdo_out), // inverted clock out
-`endif
-  .swdio_in   (swdio_in), // Serial Wire Debug IO input
-  .swdio_out  (swdio_out), // Serial Wire Debug IO output
-  .swdio_out_en  (swdio_out_en), // Serial Wire Debug IO output drive enable (active high)
-  .swdio_out_nen (swdio_out_nen), // Serial Wire Debug IO output drive enable (active low)
-  .swdclk     (swdclk_in) // Serial Wire Debug clock input
-  );
-*/
-
-//TIE_HI uTIEHI (.tiehi(tiehi));
- wire tiehi = 1'b1;
-//TIE_LO uTIELO (.tielo(tielo));
- wire tielo = 1'b0;
+  wire          ft_clk_o;
+  wire          ft_ssn_o;
+  wire          ft_miso_i;
+  wire          ft_miosio_o;
+  wire          ft_miosio_e;
+  wire          ft_miosio_z;
+  wire          ft_miosio_i;
 
  // --------------------------------------------------------------------------------
- // IO pad (GLIB Generic Library napping)
+ // Port-0 IO pad driver mapping
  // --------------------------------------------------------------------------------
 
-`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_in), 
-   .NOE (tiehi)
-   );
-
-PAD_INOUT8MA_NOE uPAD_XTAL_O (
-   .PAD (XTAL2), 
-   .O   (xtal_clk_out),
-   .I   ( ), 
-   .NOE (tielo)
-   );
-
-PAD_INOUT8MA_NOE uPAD_NRST_I (
-   .PAD (NRST), 
-   .O   (tielo),
-   .I   (nrst_in), 
-   .NOE (tiehi)
-   );
-
-PAD_INOUT8MA_NOE uPAD_SWDIO_I (
-   .PAD (SWDIOTMS), 
-   .O   (swdio_out), 
-   .I   (swdio_in),
-   .NOE (swdio_out_nen)
-   );
-
-PAD_INOUT8MA_NOE uPAD_SWDCLK_I (
-   .PAD (SWCLKTCK), 
-   .O   (tielo), 
-   .I   (swdclk_in),
-   .NOE (tiehi)
-   );
-
-// GPI.I Port 0 x 16
-
-PAD_INOUT8MA_NOE uPAD_P0_00 (
-   .PAD (P0[00]), 
-   .O   (p0_out[00]), 
-   .I   (p0_in[00]),
-   .NOE (p0_out_nen[00])
-   );
-
-PAD_INOUT8MA_NOE uPAD_P0_01 (
-   .PAD (P0[01]), 
-   .O   (p0_out[01]), 
-   .I   (p0_in[01]),
-   .NOE (p0_out_nen[01])
-   );
-  
-PAD_INOUT8MA_NOE uPAD_P0_02 (
-   .PAD (P0[02]), 
-   .O   (p0_out[02]), 
-   .I   (p0_in[02]),
-   .NOE (p0_out_nen[02])
-   );
-
-PAD_INOUT8MA_NOE uPAD_P0_03 (
-   .PAD (P0[03]), 
-   .O   (p0_out[03]), 
-   .I   (p0_in[03]),
-   .NOE (p0_out_nen[03])
-   );
-
-PAD_INOUT8MA_NOE uPAD_P0_04 (
-   .PAD (P0[04]), 
-   .O   (p0_out[04]), 
-   .I   (p0_in[04]),
-   .NOE (p0_out_nen[04])
-   );
-
-PAD_INOUT8MA_NOE uPAD_P0_05 (
-   .PAD (P0[05]), 
-   .O   (p0_out[05]), 
-   .I   (p0_in[05]),
-   .NOE (p0_out_nen[05])
-   );
-  
-PAD_INOUT8MA_NOE uPAD_P0_06 (
-   .PAD (P0[06]), 
-   .O   (p0_out[06]), 
-   .I   (p0_in[06]),
-   .NOE (p0_out_nen[06])
-   );
-
-PAD_INOUT8MA_NOE uPAD_P0_07 (
-   .PAD (P0[07]), 
-   .O   (p0_out[07]), 
-   .I   (p0_in[07]),
-   .NOE (p0_out_nen[07])
-   );
-  
-PAD_INOUT8MA_NOE uPAD_P0_08 (
-   .PAD (P0[08]), 
-   .O   (p0_out[08]), 
-   .I   (p0_in[08]),
-   .NOE (p0_out_nen[08])
-   );
-
-PAD_INOUT8MA_NOE uPAD_P0_09 (
-   .PAD (P0[09]), 
-   .O   (p0_out[09]), 
-   .I   (p0_in[09]),
-   .NOE (p0_out_nen[09])
-   );
-  
-PAD_INOUT8MA_NOE uPAD_P0_10 (
-   .PAD (P0[10]), 
-   .O   (p0_out[10]), 
-   .I   (p0_in[10]),
-   .NOE (p0_out_nen[10])
-   );
-
-PAD_INOUT8MA_NOE uPAD_P0_11 (
-   .PAD (P0[11]), 
-   .O   (p0_out[11]), 
-   .I   (p0_in[11]),
-   .NOE (p0_out_nen[11])
-   );
-  
-PAD_INOUT8MA_NOE uPAD_P0_12 (
-   .PAD (P0[12]), 
-   .O   (p0_out[12]), 
-   .I   (p0_in[12]),
-   .NOE (p0_out_nen[12])
-   );
-
-PAD_INOUT8MA_NOE uPAD_P0_13 (
-   .PAD (P0[13]), 
-   .O   (p0_out[13]), 
-   .I   (p0_in[13]),
-   .NOE (p0_out_nen[13])
-   );
-  
-PAD_INOUT8MA_NOE uPAD_P0_14 (
-   .PAD (P0[14]), 
-   .O   (p0_out[14]), 
-   .I   (p0_in[14]),
-   .NOE (p0_out_nen[14])
-   );
+  assign        p0_in = p0_i;      // level-shifted input from pad
+  assign        p0_o = p0_out;     // output port drive
+  assign        p0_e = p0_out_en;  // active high output drive enable (pad tech dependent)
+  assign        p0_z = p0_out_nen; // active low output drive enable (pad tech dependent)
 
-PAD_INOUT8MA_NOE uPAD_P0_15 (
-   .PAD (P0[15]), 
-   .O   (p0_out[15]), 
-   .I   (p0_in[15]),
-   .NOE (p0_out_nen[15])
-   );
-  
-// GPI.I Port 1 x 16
-/*
-PAD_INOUT8MA_NOE uPAD_P1_00 (
-   .PAD (P1[00]), 
-   .O   (p1_out_mux[00]), 
-   .I   (p1_in[00]),
-   .NOE (p1_out_nen_mux[00])
-   );
 
-PAD_INOUT8MA_NOE uPAD_P1_01 (
-   .PAD (P1[01]), 
-   .O   (p1_out_mux[01]), 
-   .I   (p1_in[01]),
-   .NOE (p1_out_nen_mux[01])
-   );
-  
-PAD_INOUT8MA_NOE uPAD_P1_02 (
-   .PAD (P1[02]), 
-   .O   (p1_out_mux[02]), 
-   .I   (p1_in[02]),
-   .NOE (p1_out_nen_mux[02])
-   );
-
-PAD_INOUT8MA_NOE uPAD_P1_03 (
-   .PAD (P1[03]), 
-   .O   (p1_out_mux[03]), 
-   .I   (p1_in[03]),
-   .NOE (p1_out_nen_mux[03])
-   );
-*/
-
-PAD_INOUT8MA_NOE uPAD_P1_00 (
-   .PAD (P1[00]), 
-   .O   (1'b0),       //p1_out[00]), 
-   .I   (ft_miso_i), //p1_in[00]),
-   .NOE (1'b1)        //p1_out_nen[00])
-   );
-assign p1_in[00] = ft_miso_i;
-
-PAD_INOUT8MA_NOE uPAD_P1_01 (
-   .PAD (P1[01]), 
-   .O   (ft_clk_o  ), //p1_out[01]), 
-   .I   (p1_in[01]),
-   .NOE (1'b0)        //p1_out_nen[01])
-   );
-  
-PAD_INOUT8MA_NOE uPAD_P1_02 (
-   .PAD (P1[02]), 
-   .O   (ft_miosio_o), //p1_out[02]), 
-   .I   (ft_miosio_i),  //p1_in[02]),
-   .NOE (ft_miosio_z)  //p1_out_nen[02])
-   );
-assign p1_in[02] = ft_miosio_i;
-
-PAD_INOUT8MA_NOE uPAD_P1_03 (
-   .PAD (P1[03]), 
-   .O   (ft_ssn_o), 
-   .I   (p1_in[03]),
-   .NOE (1'b0)
-   );
+ // --------------------------------------------------------------------------------
+ // Port-1 IO pad driver mapping
+ // --------------------------------------------------------------------------------
 
+// modify p1_mux [3:0] for ft1248 interface
+//  assign        p1_in_mux[3:0] = p1_i[3:0]; // IO MUX controlled bidirectionals
+//  assign        p1_o[3:0] = p1_out_mux[3:0];    
+//  assign        p1_e[3:0] = p1_out_en_mux[3:0];
+//  assign        p1_z[3:0] = p1_out_nen_mux[3:0];
+
+  assign        ft_miso_i = p1_i[0]; // FT_MISO INPUT pad configuration
+  assign        p1_in_mux[0] = p1_i[0];
+  assign        p1_o[0] = 1'b0;    
+  assign        p1_e[0] = 1'b0;
+  assign        p1_z[0] = 1'b1;
   
-PAD_INOUT8MA_NOE uPAD_P1_04 (
-   .PAD (P1[04]), 
-   .O   (p1_out_mux[04]), 
-   .I   (p1_in[04]),
-   .NOE (p1_out_nen_mux[04])
-   );
+  assign        p1_in_mux[1] = p1_i[1]; // FT_CLK OUTPUT pad configuration
+  assign        p1_o[1] = ft_clk_o;    
+  assign        p1_e[1] = 1'b1; 
+  assign        p1_z[1] = 1'b0;
 
-PAD_INOUT8MA_NOE uPAD_P1_05 (
-   .PAD (P1[05]), 
-   .O   (p1_out_mux[05]), 
-   .I   (p1_in[05]),
-   .NOE (p1_out_nen_mux[05])
-   );
-  
-PAD_INOUT8MA_NOE uPAD_P1_06 (
-   .PAD (P1[06]), 
-   .O   (p1_out_mux[06]), 
-   .I   (p1_in[06]),
-   .NOE (p1_out_nen_mux[06])
-   );
+  assign        ft_miosio_i = p1_i[2]; // FT_MIOSIO INOUT pad configuration
+  assign        p1_in_mux[2] = p1_i[2];
+  assign        p1_o[2] = ft_miosio_o;    
+  assign        p1_e[2] = ft_miosio_e;
+  assign        p1_z[2] = ft_miosio_z;
 
-PAD_INOUT8MA_NOE uPAD_P1_07 (
-   .PAD (P1[07]), 
-   .O   (p1_out_mux[07]), 
-   .I   (p1_in[07]),
-   .NOE (p1_out_nen_mux[07])
-   );
-  
-PAD_INOUT8MA_NOE uPAD_P1_08 (
-   .PAD (P1[08]), 
-   .O   (p1_out_mux[08]), 
-   .I   (p1_in[08]),
-   .NOE (p1_out_nen_mux[08])
-   );
+  assign        p1_in_mux[3] = p1_i[3]; // FT_SSN OUTPUT pad configuration
+  assign        p1_o[3] = ft_ssn_o;    
+  assign        p1_e[3] = 1'b1; 
+  assign        p1_z[3] = 1'b0;
 
-PAD_INOUT8MA_NOE uPAD_P1_09 (
-   .PAD (P1[09]), 
-   .O   (p1_out_mux[09]), 
-   .I   (p1_in[09]),
-   .NOE (p1_out_nen_mux[09])
-   );
-  
-PAD_INOUT8MA_NOE uPAD_P1_10 (
-   .PAD (P1[10]), 
-   .O   (p1_out_mux[10]), 
-   .I   (p1_in[10]),
-   .NOE (p1_out_nen_mux[10])
-   );
+  assign        p1_in_mux[15:4] = p1_i[15:4]; // IO MUX controlled bidirectionals
+  assign        p1_o[15:4] = p1_out_mux[15:4];    
+  assign        p1_e[15:4] = p1_out_en_mux[15:4];
+  assign        p1_z[15:4] = p1_out_nen_mux[15:4];
 
-PAD_INOUT8MA_NOE uPAD_P1_11 (
-   .PAD (P1[11]), 
-   .O   (p1_out_mux[11]), 
-   .I   (p1_in[11]),
-   .NOE (p1_out_nen_mux[11])
-   );
-  
-PAD_INOUT8MA_NOE uPAD_P1_12 (
-   .PAD (P1[12]), 
-   .O   (p1_out_mux[12]), 
-   .I   (p1_in[12]),
-   .NOE (p1_out_nen_mux[12])
-   );
 
-PAD_INOUT8MA_NOE uPAD_P1_13 (
-   .PAD (P1[13]), 
-   .O   (p1_out_mux[13]), 
-   .I   (p1_in[13]),
-   .NOE (p1_out_nen_mux[13])
-   );
-  
-PAD_INOUT8MA_NOE uPAD_P1_14 (
-   .PAD (P1[14]), 
-   .O   (p1_out_mux[14]), 
-   .I   (p1_in[14]),
-   .NOE (p1_out_nen_mux[14])
-   );
+//TIE_HI uTIEHI (.tiehi(tiehi));
+ wire tiehi = 1'b1;
+//TIE_LO uTIELO (.tielo(tielo));
+ wire tielo = 1'b0;
 
-PAD_INOUT8MA_NOE uPAD_P1_15 (
-   .PAD (P1[15]), 
-   .O   (p1_out_mux[15]), 
-   .I   (p1_in[15]),
-   .NOE (p1_out_nen_mux[15])
-   );
   
 //------------------------------------
 // internal wires
@@ -567,6 +237,9 @@ PAD_INOUT8MA_NOE uPAD_P1_15 (
   wire               PMUENABLE;
   wire               SLEEPDEEP;
 
+  wire               ADPRESETREQ;
+  
+
 
 `ifdef CORTEX_M0DESIGNSTART
   // if using DesignStart CortexM0, remove these signals
diff --git a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/verilog/tb_cmsdk_mcu.v b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/verilog/tb_cmsdk_mcu.v
index f443feb3ab9006f10775cca720d89b81fafebc11..8f2711d363ff2fa69d4f5d37405e5ae62d2e7dc6 100644
--- a/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/verilog/tb_cmsdk_mcu.v
+++ b/Cortex-M0/soclabs_demo/systems/cortex_m0_mcu/verilog/tb_cmsdk_mcu.v
@@ -193,8 +193,7 @@ SROM_Ax32
  // Cortex-M0/Cortex-M0+ Microcontroller
  // --------------------------------------------------------------------------------
 
-  cmsdk_mcu_chip
-//  cmsdk_mcu
+  cmsdk_mcu_chip_pads
    #(.CLKGATE_PRESENT  (CLKGATE_PRESENT),
      .BE               (BE),
      .BKPT             (BKPT),          // Number of breakpoint comparators
@@ -293,7 +292,7 @@ SROM_Ax32
  // --------------------------------------------------------------------------------
 `ifdef ARM_CMSDK_SLOWSPEED_PCLK
   // If PCLK is running at slower speed, the UART output will also be slower
-  assign PCLK = u_cmsdk_mcu.PCLK;
+  assign PCLK = u_cmsdk_mcu.u_cmsdk_mcu.PCLK;
 `else
   assign PCLK = XTAL1;
 `endif
@@ -302,22 +301,22 @@ SROM_Ax32
  // external UART phase lock to (known) baud rate
 
 // seem unable to use the following (due to generate instance naming?)
-//  wire baudx16_clk = u_cmsdk_mcu.u_cmsdk_mcu_system.u_apb_subsystem.u_apb_uart_2.BAUDTICK;
+//  wire baudx16_clk = u_cmsdk_mcu.u_cmsdk_mcu.u_cmsdk_mcu_system.u_apb_subsystem.u_apb_uart_2.BAUDTICK;
 
 // 2000000/208 = 9615 baud (+0.16%)
 // 208 / 16
-`define BAUDPROG 13
+`define BAUDPROG 130
 
- reg [3:0] bauddiv;
- wire    baudclken = (bauddiv == 4'b0000);
+ reg [7:0] bauddiv;
+ wire    baudclken = (bauddiv == 8'b00000000);
 
   always @(negedge NRST or posedge PCLK)
     if (!NRST)
       bauddiv <=0;
     else
-      bauddiv <= (baudclken) ? (`BAUDPROG-1) : (bauddiv -1) ;   // count down of 13
+      bauddiv <= (baudclken) ? (`BAUDPROG-1) : (bauddiv -1) ;   // count down of BAUDPROG
 
-  wire baudx16_clk = bauddiv[3];
+  wire baudx16_clk = bauddiv[7]; //prefer:// !baudclken;
 
   wire UARTXD =  P1[5];
   reg  UARTXD_del;
@@ -424,7 +423,7 @@ wire ft_txd2uart;
 `ifdef CORTEX_M0
 `ifdef USE_TARMAC
 
-`define ARM_CM0IK_PATH u_cmsdk_mcu.u_cmsdk_mcu_system.u_cortex_m0_integration.u_cortexm0
+`define ARM_CM0IK_PATH u_cmsdk_mcu.u_cmsdk_mcu.u_cmsdk_mcu_system.u_cortex_m0_integration.u_cortexm0
 
   CORTEXM0
      #(.ACG(1), .AHBSLV(0), .BE(BE), .BKPT(BKPT),