diff --git a/flist/project/top_FPGA.flist b/flist/project/top_FPGA.flist
new file mode 100644
index 0000000000000000000000000000000000000000..f06d6c0134bec62763309c110a35af7a51fe5f0b
--- /dev/null
+++ b/flist/project/top_FPGA.flist
@@ -0,0 +1,35 @@
+//-----------------------------------------------------------------------------
+// Project Top-level Filelist System Filelist
+// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license.
+//
+// Contributors
+//
+// David Mapstone (d.a.mapstone@soton.ac.uk)
+//
+// Copyright � 2021-3, SoC Labs (www.soclabs.org)
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+// Abstract : Verilog Command File for Top-level Accelerator System
+//-----------------------------------------------------------------------------
+
+// DESIGN_TOP nanosoc_chip
+
+// ============= Verilog library extensions ===========
++libext+.v+.vlib
+
+
+// =============    System Filelist      =========================
+// - Defines RTL
++incdir+$(SOCLABS_PROJECT_DIR)/system/src/defines
+
+-f $(SOCLABS_PROJECT_DIR)/flist/project/system.flist
+
+// =============    Arm-IP Specific Filelists      =========================
+// - MegaSoC Chip IP
+-f $(SOCLABS_MEGASOC_TECH_DIR)/flist/megasoc_tech_BEHAV.flist
+
+$(SOCLABS_PROJECT_DIR)/megasoc_chip/chip/logical/megasoc_chip.v
+
+$(SOCLABS_PROJECT_DIR)/megasoc_system/logical/megasoc_system.v
+
+
diff --git a/flows/makefile.fpga b/flows/makefile.fpga
index cdb86c1d8d62ee253e692a379e0266fe1f2c11da..18ff3d22ba4e17e28d17fc3f9b32b241826ef388 100644
--- a/flows/makefile.fpga
+++ b/flows/makefile.fpga
@@ -51,7 +51,7 @@ PINMAP_FILE           ?= $(TARGET_DIR)/fpga_pinmap.xdc
 flist_tcl_megasoc: 
 	@mkdir -p $(TCL_FLIST_DIR)
 	@(cd $(TCL_FLIST_DIR); \
-	$(SOCLABS_SOCTOOLS_FLOW_DIR)/bin/filelist_compile.py -t -f $(DESIGN_VC) -o $(TCL_OUTPUT_FILELIST) -i $(FLIST_INCLUDES) -r $(IMP_MEGASOC_DIR)/src ;)
+	$(SOCLABS_SOCTOOLS_FLOW_DIR)/bin/filelist_compile.py -t -f $(FPGA_DESIGN_VC) -o $(TCL_OUTPUT_FILELIST) -i $(FLIST_INCLUDES) -r $(IMP_MEGASOC_DIR)/src ;)
 
 
 # Environment Variables for Packaging NanoSoC
diff --git a/flows/makefile.software b/flows/makefile.software
index 14599b68ce5252d0c4d99ea71a404ad634b52cd6..6a1f9a2b55ec07118fff6930693b9bc4c47506ee 100644
--- a/flows/makefile.software
+++ b/flows/makefile.software
@@ -24,7 +24,7 @@ SW_MAKE_OPTIONS = CPU_PRODUCT=CORTEX_M0 TOOL_CHAIN=$(TOOL_CHAIN)
 # Bootrom Parameters:
 # Boot Loader image
 BOOTLOADER        ?= bootloader
-BOOTROM_ADDRW     ?= 8
+BOOTROM_ADDRW     ?= 14
 BOOTROM_HEX       ?= $(SOCLABS_MEGASOC_TECH_DIR)/software/src/bootloader/$(BOOTLOADER).hex
 BOOTROM_BUILD_DIR ?= $(SOCLABS_PROJECT_DIR)/system/src/bootrom
 
@@ -38,7 +38,7 @@ code : testcode bootrom
 # Compile bootloader
 # Note : The use of ls after compile allows the computing server to sync up
 bootrom:
-	@cd $(TESTCODES_DIR)/$(BOOTLOADER) ;\
+	@(cd $(TESTCODES_DIR)/$(BOOTLOADER) ;\
 	echo CD $(TESTCODES_DIR)/$(BOOTLOADER) ;\
 	$(MAKE) boot_build $(SW_MAKE_OPTIONS) ;\
 	echo Bootrom Compile done ;\
@@ -52,9 +52,14 @@ bootrom:
 	if [ ! -e  $(TESTCODES_DIR)/../build/$(BOOTLOADER)/bootloader.hex ] ; then \
 		echo Problem reading hex file ;\
 		exit 1; \
-	else \
-		cp $(TESTCODES_DIR)/../build/$(BOOTLOADER)/bootloader.hex $(SIM_DIR)/bootloader.hex ;\
+	# else \
+	# 	cp $(TESTCODES_DIR)/../build/$(BOOTLOADER)/bootloader.hex $(SIM_DIR)/bootloader.hex ;\
 	fi ;\
+	mkdir -p $(BOOTROM_BUILD_DIR)/verilog/ ;\
+	mkdir -p $(BOOTROM_BUILD_DIR)/bintxt/ ;\
+	python3 bootrom_gen.py -a $(BOOTROM_ADDRW) -i $(TESTCODES_DIR)/../build/$(BOOTLOADER)/bootloader.hex/SEC_ROM_BOOT_IMG -v $(BOOTROM_BUILD_DIR)/verilog/bootrom.v -b $(BOOTROM_BUILD_DIR)/bintxt/bootrom.bintxt )
+	mkdir -p $(SIM_TOP_DIR)/bootloader
+
 
 # Compile test code
 # Note : The use of ls after compile allows the computing server to sync up
diff --git a/fpga/makefile.targets b/fpga/makefile.targets
index 99d49becaf7995e4ddf3c5320bf3af62ee914ab0..192afed24a66915c09bccaccda6e6b922fc2bc22 100644
--- a/fpga/makefile.targets
+++ b/fpga/makefile.targets
@@ -14,12 +14,12 @@ ifeq ($(FPGA),mps3)
 	XILINX_PART  := xcku115-flvb1760-1-c
 	BOARD_NAME   := arm_mps3
 	PLATFORM     := bare
-else ifeq ($(FPGA),zcu104)
-	XILINX_PART  := xczu7ev-ffvc1156-2-e
-	BOARD_NAME   := pynq_zcu104
-	PLATFORM     := pynq
-else # Default to MPS3
-	XILINX_PART  := xcku115-flvb1760-1-c
-	BOARD_NAME   := arm_mps3
+else ifeq ($(FPGA),haps_sx)
+	XILINX_PART  := xcvu19p-fsva3824-2-e
+	BOARD_NAME   := haps_sx
+	PLATFORM     := bare
+else # Default to HAPS
+	XILINX_PART  := xcvu19p-fsva3824-2-e
+	BOARD_NAME   := haps_sx
 	PLATFORM     := bare
 endif
diff --git a/fpga/targets/arm_mps3/fpga_timing.xdc b/fpga/targets/arm_mps3/fpga_timing.xdc
index 23677a726e5026e2ad86b27165879129dad79b4a..32592c5ee7d77fa2e46021860dce94182b47191d 100644
--- a/fpga/targets/arm_mps3/fpga_timing.xdc
+++ b/fpga/targets/arm_mps3/fpga_timing.xdc
@@ -4,8 +4,8 @@
 ##                                                                              ##
 ##################################################################################
 
-create_clock -period 100.000 -name CS_TCK -waveform {0.000 50.000} [get_ports CS_TCK]
-create_clock -period 20.000 -name {OSCCLK[1]} -waveform {0.000 10.000} [get_ports {OSCCLK[1]}]
+create_clock -period 1000.000 -name CS_TCK -waveform {0.000 500.000} [get_ports CS_TCK]
+create_clock -period 200.000 -name {OSCCLK[1]} -waveform {0.000 100.000} [get_ports {OSCCLK[1]}]
 set_input_delay -clock [get_clocks {OSCCLK[1]}] -min -add_delay 11.000 [get_ports {UART_RX_F[*]}]
 set_input_delay -clock [get_clocks {OSCCLK[1]}] -max -add_delay 15.000 [get_ports {UART_RX_F[*]}]
 set_input_delay -clock [get_clocks {OSCCLK[1]}] -min -add_delay 11.000 [get_ports CB_nRST]
diff --git a/fpga/targets/arm_mps3/megasoc_design_wrapper.v b/fpga/targets/arm_mps3/megasoc_design_wrapper.v
index dbcafe44666ca2bfba4a111c729dd3bfcef8f207..fee9c9a2a0025f1beaa6b718882a65bd866c7d45 100644
--- a/fpga/targets/arm_mps3/megasoc_design_wrapper.v
+++ b/fpga/targets/arm_mps3/megasoc_design_wrapper.v
@@ -266,8 +266,6 @@ BUFG uBUFG_SMBM        (.I(SMBM_CLK),     .O(iSMBMCLK));    //Micro SMB
   // Minimum design tie-offs
   assign MMB_IDCLK     = 1'b0;
   assign EMMC_CLK      = 1'b0;
-  assign QSPI_nCS      = 1'b1;
-  assign QSPI_SCLK     = 1'b0;
   assign IOFPGA_SYSWDT = 1'b0;
   assign WDOG_RREQ     = 1'b0;
   assign SMBM_nWAIT    = 1'b1;
@@ -293,16 +291,30 @@ BUFG uBUFG_SMBM        (.I(SMBM_CLK),     .O(iSMBMCLK));    //Micro SMB
 
     assign CS_TMS = (SWDOEN_0==1'b1) ? SWDO_0 : 1'bz;
     assign SWDITMS_0 = CS_TMS;
+    
+    wire [3:0] QSPI_IO_e;
+    wire [3:0] QSPI_IO_i;
+    wire [3:0] QSPI_IO_o;
+    
+	assign QSPI_D0 = (QSPI_IO_e[0]==1'b1)? QSPI_IO_o[0]:1'bz;
+	assign QSPI_D1 = (QSPI_IO_e[1]==1'b1)? QSPI_IO_o[1]:1'bz;
+	assign QSPI_D2 = (QSPI_IO_e[2]==1'b1)? QSPI_IO_o[2]:1'bz;
+	assign QSPI_D3 = (QSPI_IO_e[3]==1'b1)? QSPI_IO_o[3]:1'bz;
+
+    assign QSPI_IO_i[0] = QSPI_D0;
+    assign QSPI_IO_i[1] = QSPI_D1;
+    assign QSPI_IO_i[2] = QSPI_D2;
+    assign QSPI_IO_i[3] = QSPI_D3;
 
   megasoc_design megasoc_design_i
        (.CLK_IN_0(ACLK),
         .nRESET_0(nRST),
 
-        .QSPI_IO_e_0(),
-        .QSPI_IO_i_0(),
-        .QSPI_IO_o_0(),
-        .QSPI_SCLK_0(),
-        .QSPI_nCS_0(),
+        .QSPI_IO_e_0(QSPI_IO_e),
+        .QSPI_IO_i_0(QSPI_IO_i),
+        .QSPI_IO_o_0(QSPI_IO_o),
+        .QSPI_SCLK_0(QSPI_SCLK),
+        .QSPI_nCS_0(QSPI_nCS),
 
         .UARTRXD_0(1'b0),
         .UARTTXD_0(UART_TX_F[1]),
@@ -311,8 +323,9 @@ BUFG uBUFG_SMBM        (.I(SMBM_CLK),     .O(iSMBMCLK));    //Micro SMB
         .SWDITMS_0(SWDITMS_0),
         .SWDOEN_0(SWDOEN_0),
         .SWDO_0(SWDO_0),
-        .TDI_0(),
-        .TDO_0(),
+        .TDI_0(CS_TDI),
+        .TDO_0(CS_TDO),
         .nTDOEN_0(),
         .nTRST_0(CS_nTRST));
+
 endmodule
diff --git a/fpga/targets/haps_sx/fpga_pinmap.xdc b/fpga/targets/haps_sx/fpga_pinmap.xdc
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/fpga/targets/haps_sx/fpga_timing.xdc b/fpga/targets/haps_sx/fpga_timing.xdc
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/fpga/targets/haps_sx/megasoc_design_wrapper.v b/fpga/targets/haps_sx/megasoc_design_wrapper.v
new file mode 100644
index 0000000000000000000000000000000000000000..e73f2491d9d014a2e29a66fbb4131f7e7d49b0be
--- /dev/null
+++ b/fpga/targets/haps_sx/megasoc_design_wrapper.v
@@ -0,0 +1,77 @@
+//Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
+//Copyright 2022-2024 Advanced Micro Devices, Inc. All Rights Reserved.
+//--------------------------------------------------------------------------------
+//Tool Version: Vivado v.2024.1 (lin64) Build 5076996 Wed May 22 18:36:09 MDT 2024
+//Date        : Fri Nov 15 14:43:17 2024
+//Host        : srv03335 running 64-bit Red Hat Enterprise Linux release 8.10 (Ootpa)
+//Command     : generate_target megasoc_design_wrapper.bd
+//Design      : megasoc_design_wrapper
+//Purpose     : IP block netlist
+//--------------------------------------------------------------------------------
+`timescale 1 ps / 1 ps
+
+module megasoc_design_wrapper
+   (
+	inout wire      	QSPI_D0,
+	inout wire      	QSPI_D1,
+	inout wire      	QSPI_D2,
+	inout wire      	QSPI_D3,
+	output wire     	QSPI_SCLK,
+	output wire     	QSPI_nCS,
+    
+    input  wire         CS_TDI,
+    output wire         CS_TDO,        // SWV     / JTAG TDO
+    inout  wire         CS_TMS,        // SWD I/O / JTAG TMS
+    input  wire         CS_TCK,        // SWD Clk / JTAG TCK
+    input  wire         CS_nSRST,
+    input  wire         CS_nTRST,
+    input  wire         CS_nDET
+
+
+
+   );
+wire SWDITMS_0;
+wire SWDOEN_0;
+wire SWDO_0;
+
+assign CS_TMS = (SWDOEN_0==1'b1) ? SWDO_0 : 1'bz;
+assign SWDITMS_0 = CS_TMS;
+
+wire [3:0] QSPI_IO_e;
+wire [3:0] QSPI_IO_i;
+wire [3:0] QSPI_IO_o;
+
+assign QSPI_D0 = (QSPI_IO_e[0]==1'b1)? QSPI_IO_o[0]:1'bz;
+assign QSPI_D1 = (QSPI_IO_e[1]==1'b1)? QSPI_IO_o[1]:1'bz;
+assign QSPI_D2 = (QSPI_IO_e[2]==1'b1)? QSPI_IO_o[2]:1'bz;
+assign QSPI_D3 = (QSPI_IO_e[3]==1'b1)? QSPI_IO_o[3]:1'bz;
+
+assign QSPI_IO_i[0] = QSPI_D0;
+assign QSPI_IO_i[1] = QSPI_D1;
+assign QSPI_IO_i[2] = QSPI_D2;
+assign QSPI_IO_i[3] = QSPI_D3;
+
+  megasoc_design megasoc_design_i
+       (.CLK_IN_0(CLK_IN_0),
+        .nRESET_0(nRESET_0),
+
+        .QSPI_IO_e_0(QSPI_IO_e),
+        .QSPI_IO_i_0(QSPI_IO_i),
+        .QSPI_IO_o_0(QSPI_IO_o),
+        .QSPI_SCLK_0(QSPI_SCLK),
+        .QSPI_nCS_0(QSPI_nCS),
+
+        .SWCLKTCK_0(CS_TCK),
+        .SWDITMS_0(SWDITMS_0),
+        .SWDOEN_0(SWDOEN_0),
+        .SWDO_0(SWDO_0),
+        .TDI_0(CS_TDI),
+        .TDO_0(CS_TDO),
+
+        .UARTRXD_0(),
+        .UARTTXD_0(),
+        .UARTTXEN_0(),
+
+        .nTDOEN_0(nTDOEN_0),
+        .nTRST_0(CS_nTRST));
+endmodule
diff --git a/megasoc_chip/pads/glib/logical/megasoc_chip_pads.v b/megasoc_chip/pads/glib/logical/megasoc_chip_pads.v
index ccd5c1986245980a316ff050fbef7d2efb6d8f3f..6dd410f1b1f45c2e65842736a235177fc3b424ef 100644
--- a/megasoc_chip/pads/glib/logical/megasoc_chip_pads.v
+++ b/megasoc_chip/pads/glib/logical/megasoc_chip_pads.v
@@ -70,6 +70,7 @@ assign QSPI_IO_i[1] = QSPI_IO[1];
 assign QSPI_IO_i[2] = QSPI_IO[2];
 assign QSPI_IO_i[3] = QSPI_IO[3];
 
+assign REF_CLK_XTAL2 = REF_CLK_XTAL1;
 
 megasoc_chip u_megasoc_chip(
     .CLK_IN(REF_CLK_XTAL1),
@@ -78,7 +79,18 @@ megasoc_chip u_megasoc_chip(
     .QSPI_nCS(QSPI_nCS),
     .QSPI_IO_o(QSPI_IO_o),
     .QSPI_IO_i(QSPI_IO_i),
-    .QSPI_IO_e(QSPI_IO_e)
+    .QSPI_IO_e(QSPI_IO_e),
+    .UARTRXD(),
+    .UARTTXD(),
+    .UARTTXEN(),
+    .nTRST(),
+    .SWCLKTCK(),
+    .SWDITMS(),
+    .TDI(),
+    .TDO(),
+    .nTDOEN(),
+    .SWDO(),
+    .SWDOEN()
 );
 
 
diff --git a/megasoc_tech b/megasoc_tech
index 1e2cc64e3dba67ec4d5f7ddd7f4d4fe0c77fd455..bfadf9d8b82c799bf6e56b3a447d53c9527f9fd7 160000
--- a/megasoc_tech
+++ b/megasoc_tech
@@ -1 +1 @@
-Subproject commit 1e2cc64e3dba67ec4d5f7ddd7f4d4fe0c77fd455
+Subproject commit bfadf9d8b82c799bf6e56b3a447d53c9527f9fd7
diff --git a/verif/testbench/logical/megasoc_tb.sv b/verif/testbench/logical/megasoc_tb.sv
index 2f99bd8a19951469e82b4a1d2d3bd658136f1cd4..cb592f7c076cca95fe52e06f776760d7feaf4dce 100644
--- a/verif/testbench/logical/megasoc_tb.sv
+++ b/verif/testbench/logical/megasoc_tb.sv
@@ -34,7 +34,7 @@ megasoc_clkreset u_megasoc_clkreset(
 `define MEGASOC_SRAM `MEGASOC_TECH_WRAPPER.u_SRAM_wrapper.u_SRAM
 
 initial begin 
-    $readmemh("bootloader.hex", `MEGASOC_ROM.mem, 32'h0000_0000);
+    //$readmemh("bootloader.hex", `MEGASOC_ROM.mem, 32'h0000_0000);
     $readmemh("app_ram.v8-a.hex", `MEGASOC_SRAM.mem, 32'h0000_0000);
     #1 $readmemh("app_flash.v8-a.hex", FLASH.I0.memory);