From 5a1f4b462dd547ce59a1e2c396105b95a8410354 Mon Sep 17 00:00:00 2001
From: Daniel Newbrook <dwn1c21@soton.ac.uk>
Date: Fri, 6 Dec 2024 15:58:09 +0000
Subject: [PATCH] Add CMSDK GPIO and update peripheral bus

---
 flist/IP/Corstone101.flist                    |   9 +-
 flist/IP/nic400_megasoc_main.flist            |  30 +-
 flist/megasoc_tech.flist                      |   1 +
 .../megasoc_peripheral_addr_decode.v          |  32 ++
 .../megasoc_peripheral_subsystem.v            | 333 ++++++++++++++++--
 .../top_megasoc_tech/megasoc_tech_wrapper.v   |  83 +++--
 .../nic400_megasoc_main.xml                   | 264 +++++++++++---
 7 files changed, 650 insertions(+), 102 deletions(-)
 create mode 100644 logical/megasoc_subsystems/peripheral_subsystem/megasoc_peripheral_addr_decode.v

diff --git a/flist/IP/Corstone101.flist b/flist/IP/Corstone101.flist
index 224c29c..ca94052 100644
--- a/flist/IP/Corstone101.flist
+++ b/flist/IP/Corstone101.flist
@@ -3,4 +3,11 @@
 $(ARM_IP_LIBRARY_PATH)/latest/Corstone-101/logical/cmsdk_apb_uart/verilog/cmsdk_apb_uart.v
 // $(ARM_IP_LIBRARY_PATH)/latest/Corstone-101/logical/cmsdk_apb_slave_mux/verilog/cmsdk_apb_slave_mux.v
 // $(ARM_IP_LIBRARY_PATH)/latest/Corstone-101/logical/cmsdk_ahb_to_apb/verilog/cmsdk_ahb_to_apb.v
-$(ARM_IP_LIBRARY_PATH)/latest/Corstone-101/logical/cmsdk_apb_timer/verilog/cmsdk_apb_timer.v
\ No newline at end of file
+$(ARM_IP_LIBRARY_PATH)/latest/Corstone-101/logical/cmsdk_apb_timer/verilog/cmsdk_apb_timer.v
+
+$(ARM_IP_LIBRARY_PATH)/latest/Corstone-101/logical/cmsdk_ahb_gpio/verilog/cmsdk_ahb_to_iop.v
+$(ARM_IP_LIBRARY_PATH)/latest/Corstone-101/logical/cmsdk_iop_gpio/verilog/cmsdk_iop_gpio.v
+$(ARM_IP_LIBRARY_PATH)/latest/Corstone-101/logical/cmsdk_ahb_gpio/verilog/cmsdk_ahb_gpio.v
+
+$(ARM_IP_LIBRARY_PATH)/latest/Corstone-101/logical/cmsdk_ahb_slave_mux/verilog/cmsdk_ahb_slave_mux.v
+$(ARM_IP_LIBRARY_PATH)/latest/Corstone-101/logical/cmsdk_ahb_default_slave/verilog/cmsdk_ahb_default_slave.v
\ No newline at end of file
diff --git a/flist/IP/nic400_megasoc_main.flist b/flist/IP/nic400_megasoc_main.flist
index bceb61c..0fa06af 100644
--- a/flist/IP/nic400_megasoc_main.flist
+++ b/flist/IP/nic400_megasoc_main.flist
@@ -22,6 +22,11 @@ $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_m
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/amib_FLASH/verilog/nic400_amib_FLASH_s_gen_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/amib_GIC/verilog/nic400_amib_GIC_chan_slice_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/amib_GIC/verilog/nic400_amib_GIC_megasoc_main.v
+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/amib_PERIPHERAL/verilog/nic400_amib_PERIPHERAL_a_gen_megasoc_main.v
+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/amib_PERIPHERAL/verilog/nic400_amib_PERIPHERAL_ahb_m_megasoc_main.v
+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/amib_PERIPHERAL/verilog/nic400_amib_PERIPHERAL_chan_slice_megasoc_main.v
+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/amib_PERIPHERAL/verilog/nic400_amib_PERIPHERAL_megasoc_main.v
+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/amib_PERIPHERAL/verilog/nic400_amib_PERIPHERAL_s_gen_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/amib_RAM/verilog/nic400_amib_RAM_chan_slice_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/amib_RAM/verilog/nic400_amib_RAM_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/amib_ROM/verilog/nic400_amib_ROM_chan_slice_megasoc_main.v
@@ -52,6 +57,7 @@ $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_m
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_add_arb_ml3_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_add_arb_ml4_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_add_arb_ml5_megasoc_main.v
+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_add_arb_ml6_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_add_sel_ml0_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_add_sel_ml1_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_add_sel_ml2_megasoc_main.v
@@ -59,6 +65,7 @@ $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_m
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_add_sel_ml4_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_add_sel_ml5_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_add_sel_ml6_megasoc_main.v
+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_add_sel_ml7_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_lrg_arb_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_maskcntl_ml0_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_maskcntl_ml1_megasoc_main.v
@@ -67,6 +74,7 @@ $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_m
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_maskcntl_ml4_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_maskcntl_ml5_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_maskcntl_ml6_megasoc_main.v
+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_maskcntl_ml7_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_ml_blayer_0_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_ml_blayer_1_megasoc_main.v
@@ -79,12 +87,13 @@ $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_m
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_ml_mlayer_4_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_ml_mlayer_5_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_ml_mlayer_6_megasoc_main.v
+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_ml_mlayer_7_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_qv_cmp_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_rd_spi_tt_s1_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_rd_st_tt_s0_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_rd_wr_arb_1_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_rd_wr_arb_4_megasoc_main.v
-$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_rd_wr_arb_5_megasoc_main.v
+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_rd_wr_arb_6_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_ret_sel_ml0_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_ret_sel_ml1_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_ret_sel_ml2_megasoc_main.v
@@ -92,6 +101,7 @@ $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_m
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_ret_sel_ml4_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_ret_sel_ml5_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_ret_sel_ml6_megasoc_main.v
+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_ret_sel_ml7_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_wr_sel_ml0_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_wr_sel_ml1_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_wr_sel_ml2_megasoc_main.v
@@ -99,6 +109,7 @@ $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_m
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_wr_sel_ml4_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_wr_sel_ml5_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_wr_sel_ml6_megasoc_main.v
+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_wr_sel_ml7_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_wr_spi_tt_s1_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm0/verilog/nic400_bm0_wr_ss_tt_s0_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/busmatrix_bm1/verilog/nic400_bm1_add_arb_ml0_megasoc_main.v
@@ -181,6 +192,20 @@ $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_m
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/ib_FLASH_ib/verilog/nic400_ib_FLASH_ib_itb_to_axi_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/ib_FLASH_ib/verilog/nic400_ib_FLASH_ib_master_domain_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/ib_FLASH_ib/verilog/nic400_ib_FLASH_ib_slave_domain_megasoc_main.v
+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/ib_PERIPHERAL_ib/verilog/nic400_ib_PERIPHERAL_ib_axi_to_itb_megasoc_main.v
+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/ib_PERIPHERAL_ib/verilog/nic400_ib_PERIPHERAL_ib_chan_slice_megasoc_main.v
+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/ib_PERIPHERAL_ib/verilog/nic400_ib_PERIPHERAL_ib_downsize_itb_addr_fmt_megasoc_main.v
+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/ib_PERIPHERAL_ib/verilog/nic400_ib_PERIPHERAL_ib_downsize_rd_cam_slice_megasoc_main.v
+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/ib_PERIPHERAL_ib/verilog/nic400_ib_PERIPHERAL_ib_downsize_rd_chan_megasoc_main.v
+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/ib_PERIPHERAL_ib/verilog/nic400_ib_PERIPHERAL_ib_downsize_rd_cntrl_megasoc_main.v
+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/ib_PERIPHERAL_ib/verilog/nic400_ib_PERIPHERAL_ib_downsize_resp_cam_slice_megasoc_main.v
+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/ib_PERIPHERAL_ib/verilog/nic400_ib_PERIPHERAL_ib_downsize_wr_cntrl_megasoc_main.v
+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/ib_PERIPHERAL_ib/verilog/nic400_ib_PERIPHERAL_ib_downsize_wr_merge_buffer_megasoc_main.v
+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/ib_PERIPHERAL_ib/verilog/nic400_ib_PERIPHERAL_ib_downsize_wr_mux_megasoc_main.v
+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/ib_PERIPHERAL_ib/verilog/nic400_ib_PERIPHERAL_ib_downsize_wr_resp_block_megasoc_main.v
+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/ib_PERIPHERAL_ib/verilog/nic400_ib_PERIPHERAL_ib_itb_to_axi_megasoc_main.v
+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/ib_PERIPHERAL_ib/verilog/nic400_ib_PERIPHERAL_ib_master_domain_megasoc_main.v
+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/ib_PERIPHERAL_ib/verilog/nic400_ib_PERIPHERAL_ib_slave_domain_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/ib_apb_group0_ib/verilog/nic400_ib_apb_group0_ib_axi_to_itb_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/ib_apb_group0_ib/verilog/nic400_ib_apb_group0_ib_chan_slice_megasoc_main.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/ib_apb_group0_ib/verilog/nic400_ib_apb_group0_ib_downsize_itb_addr_fmt_megasoc_main.v
@@ -248,9 +273,11 @@ $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_m
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/reg_slice/verilog/nic400_wr_reg_slice_megasoc_main.v
 
 
+
 +incdir+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/amib_DRAM/verilog
 +incdir+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/amib_FLASH/verilog
 +incdir+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/amib_GIC/verilog
++incdir+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/amib_PERIPHERAL/verilog
 +incdir+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/amib_RAM/verilog
 +incdir+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/amib_ROM/verilog
 +incdir+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/amib_apb_group0/verilog
@@ -265,6 +292,7 @@ $(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_m
 +incdir+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/default_slave_ds_7/verilog
 +incdir+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/ib_ADP_ib/verilog
 +incdir+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/ib_FLASH_ib/verilog
++incdir+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/ib_PERIPHERAL_ib/verilog
 +incdir+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/ib_apb_group0_ib/verilog
 +incdir+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/ib_ib3/verilog
 +incdir+$(SOCLABS_MEGASOC_TECH_DIR)/logical/nic400_megasoc_main/logical/nic400_megasoc_main/ib_ib4/verilog
diff --git a/flist/megasoc_tech.flist b/flist/megasoc_tech.flist
index 0e4dbda..6e63914 100644
--- a/flist/megasoc_tech.flist
+++ b/flist/megasoc_tech.flist
@@ -18,6 +18,7 @@ $(SOCLABS_MEGASOC_TECH_DIR)/logical/top_megasoc_tech/megasoc_tech_system_wrapper
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/megasoc_subsystems/megasoc_cpu_subsystem/megasoc_cpu_ss.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/megasoc_subsystems/megasoc_cpu_subsystem/megasoc_irq_sync.v
 
+$(SOCLABS_MEGASOC_TECH_DIR)/logical/megasoc_subsystems/peripheral_subsystem/megasoc_peripheral_addr_decode.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/megasoc_subsystems/peripheral_subsystem/megasoc_peripheral_subsystem.v
 $(SOCLABS_MEGASOC_TECH_DIR)/logical/megasoc_subsystems/peripheral_subsystem/megasoc_peripheral_debug.v
 
diff --git a/logical/megasoc_subsystems/peripheral_subsystem/megasoc_peripheral_addr_decode.v b/logical/megasoc_subsystems/peripheral_subsystem/megasoc_peripheral_addr_decode.v
new file mode 100644
index 0000000..ed6f002
--- /dev/null
+++ b/logical/megasoc_subsystems/peripheral_subsystem/megasoc_peripheral_addr_decode.v
@@ -0,0 +1,32 @@
+
+
+module megasoc_peripheral_addr_decode #(
+    parameter BASEADDR_APBSS    = 32'h4000_0000,
+    parameter BASEADDR_GPIO0    = 32'h4001_0000,
+    parameter BASEADDR_GPIO1    = 32'h4002_0000
+) (
+    // System Address
+    input wire                  hsel,
+    input wire [31:0]           haddr,
+
+    // Peripheral Selection
+    output wire                 apbsys_hsel,
+    output wire                 gpio0_hsel,
+    output wire                 gpio1_hsel,
+
+    // Default slave
+    output wire                 defslv_hsel
+);
+
+assign apbsys_hsel  = hsel & (haddr[31:16]==
+                    BASEADDR_APBSS[31:16]);   // 0x40000000
+assign gpio0_hsel   = hsel & (haddr[31:12]==
+                    BASEADDR_GPIO0[31:12]);   // 0x40010000
+assign gpio1_hsel   = hsel & (haddr[31:12]==
+                    BASEADDR_GPIO1[31:12]);   // 0x40011000
+
+assign defslv_hsel  = ~(apbsys_hsel |
+                        gpio0_hsel   | gpio1_hsel
+                        );
+
+endmodule
\ No newline at end of file
diff --git a/logical/megasoc_subsystems/peripheral_subsystem/megasoc_peripheral_subsystem.v b/logical/megasoc_subsystems/peripheral_subsystem/megasoc_peripheral_subsystem.v
index 21db585..b94e322 100644
--- a/logical/megasoc_subsystems/peripheral_subsystem/megasoc_peripheral_subsystem.v
+++ b/logical/megasoc_subsystems/peripheral_subsystem/megasoc_peripheral_subsystem.v
@@ -18,7 +18,8 @@
 //  cmsdk_apb_timer     (u_apb_timer0)
 //  megasoc_peripheral_debug (u_megasoc_peripheral_debug)
 
-module megasoc_peripheral_subsystem(
+module megasoc_peripheral_subsystem #(
+    parameter BE = 0 )(
     input  wire         PCLK,
     input  wire         PRESETn,
     input  wire         HCLK,
@@ -38,15 +39,19 @@ module megasoc_peripheral_subsystem(
     input  wire         HREADY_ADP,
     input  wire         HRESP_ADP,
 
-    // APB bus interface
-    input  wire [31:0]  PADDR,
-    input  wire         PENABLE,  
-    input  wire         PWRITE,   
-    input  wire [31:0]  PWDATA,   
-    input  wire         PSEL,     
-    output wire [31:0]  PRDATA,   
-    output wire         PREADY,   
-    output wire         PSLVERR,  
+    // Peripheral AHB bus interface
+    input  wire         HSEL,
+    input  wire  [31:0] HADDR,
+    input  wire  [1:0]  HTRANS,
+    input  wire         HWRITE,
+    input  wire  [2:0]  HSIZE,
+    input  wire  [2:0]  HBURST,
+    input  wire  [3:0]  HPROT,
+    input  wire  [31:0] HWDATA,
+    input  wire         HREADY,
+    output wire [31:0]  HRDATA,
+    output wire         HREADYOUT,
+    output wire         HRESP,
 
     input  wire         UARTRXD,
     output wire         UARTTXD,
@@ -60,13 +65,57 @@ module megasoc_peripheral_subsystem(
     output wire         FT_MIOSIO_Z, // MIOSIO tristate output enable (active lo)
     input  wire         FT_MIOSIO_I, // MIOSIO tristate input
 
+    input  wire [15:0]  p0_in,
+    output wire [15:0]  p0_out,
+    output wire [15:0]  p0_en,
+    output wire [15:0]  p0_func,
 
-    output wire [5:0]   PERI_IRQS   // Peripheral interrupts to GIC
+    input  wire [15:0]  p1_in,
+    output wire [15:0]  p1_out,
+    output wire [15:0]  p1_en,
+    output wire [15:0]  p1_func,
+
+    output wire [39:0]   PERI_IRQS   // Peripheral interrupts to GIC
 );
 
+// APB bus interface
+wire [15:0] PADDR;
+wire        PENABLE;  
+wire        PWRITE;   
+wire [31:0] PWDATA;   
+wire        PSEL;     
+wire [31:0] PRDATA;   
+wire        PREADY;   
+wire        PSLVERR;  
+wire [3:0]  PSTRB;
+wire [2:0]  PPROT;
+
+
 wire        UARTCLK;
 assign      UARTCLK=PCLK; // TODO generate UARTCLK from elsewhere
 
+// AHB internal wires 
+wire        defslv_hsel;   // AHB default slave signals
+wire        defslv_hreadyout;
+wire [31:0] defslv_hrdata;
+wire        defslv_hresp;
+
+wire        apbsys_hsel;  // APB subsystem AHB interface signals
+wire        apbsys_hreadyout;
+wire [31:0] apbsys_hrdata;
+wire        apbsys_hresp;
+
+wire        gpio0_hsel;   // AHB GPIO bus interface signals
+wire        gpio0_hreadyout;
+wire [31:0] gpio0_hrdata;
+wire        gpio0_hresp;
+
+wire        gpio1_hsel;   // AHB GPIO bus interface signals
+wire        gpio1_hreadyout;
+wire [31:0] gpio1_hrdata;
+wire        gpio1_hresp;
+
+
 // Internal APB signals for UART0
 wire        PSEL_UART0;
 wire        PREADY_UART0;
@@ -85,6 +134,256 @@ wire        PREADY_USRT;
 wire [31:0] PRDATA_USRT;
 wire        PSLVERR_USRT;
 
+// Interrupt Signals 
+wire [15:0] gpio0_int;
+wire        gpio0_comb_int;
+wire [15:0] gpio1_int;
+wire        gpio1_comb_int;
+wire        timer0_int;
+wire        uart0_txint;
+wire        uart0_rxint;
+wire        uart0_txovrint;
+wire        uart0_rxovrint;
+wire        uart0_combined_int;
+
+assign PERI_IRQS[0] = uart0_txint;
+assign PERI_IRQS[1] = uart0_rxint;
+assign PERI_IRQS[2] = uart0_txovrint;
+assign PERI_IRQS[3] = uart0_rxovrint;
+assign PERI_IRQS[4] = uart0_combined_int;
+assign PERI_IRQS[5] = timer0_int;
+assign PERI_IRQS[6] = gpio0_comb_int;
+assign PERI_IRQS[7] = gpio1_comb_int;
+assign PERI_IRQS[23:8] = gpio0_int;
+assign PERI_IRQS[39:24] = gpio1_int;
+
+
+megasoc_peripheral_addr_decode #(
+    .BASEADDR_APBSS(32'h4000_0000),
+    .BASEADDR_GPIO0(32'h4001_0000),
+    .BASEADDR_GPIO1(32'h4002_0000)
+) u_peripheral_addr_decode (
+    .hsel(HSEL),
+    .haddr(HADDR),
+    .apbsys_hsel(apbsys_hsel),
+    .gpio0_hsel(gpio0_hsel),
+    .gpio1_hsel(gpio1_hsel),
+    .defslv_hsel(defslv_hsel)
+);
+
+cmsdk_ahb_slave_mux #(
+    .PORT0_ENABLE  (1), // APB subsystem bridge
+    .PORT1_ENABLE  (1), // GPIO Port 0
+    .PORT2_ENABLE  (1), // GPIO Port 1
+    .PORT3_ENABLE  (0), // SYS control
+    .PORT4_ENABLE  (0), // Default
+    .PORT5_ENABLE  (0), // 
+    .PORT6_ENABLE  (0), // 
+    .PORT7_ENABLE  (0),
+    .PORT8_ENABLE  (0),
+    .PORT9_ENABLE  (0),
+    .DW            (32)  
+) u_ahb_slave_mux_sys_bus (
+    .HCLK         (HCLK),
+    .HRESETn      (HRESETn),
+    .HREADY       (HREADY),
+    .HSEL0        (apbsys_hsel),     // Input Port 0
+    .HREADYOUT0   (apbsys_hreadyout),
+    .HRESP0       (apbsys_hresp),
+    .HRDATA0      (apbsys_hrdata),
+    .HSEL1        (gpio0_hsel),      // Input Port 1
+    .HREADYOUT1   (gpio0_hreadyout),
+    .HRESP1       (gpio0_hresp),
+    .HRDATA1      (gpio0_hrdata),
+    .HSEL2        (gpio1_hsel),      // Input Port 2
+    .HREADYOUT2   (gpio1_hreadyout),
+    .HRESP2       (gpio1_hresp),
+    .HRDATA2      (gpio1_hrdata),
+    .HSEL3        (1'b0),    // Input Port 3
+    .HREADYOUT3   (defslv_hreadyout),
+    .HRESP3       (defslv_hresp),
+    .HRDATA3      (defslv_hrdata),
+    .HSEL4        (defslv_hsel),     // Input Port 4
+    .HREADYOUT4   (defslv_hreadyout),
+    .HRESP4       (defslv_hresp),
+    .HRDATA4      (defslv_hrdata),
+    .HSEL5        (1'b0),     // Input Port 5
+    .HREADYOUT5   (defslv_hreadyout),
+    .HRESP5       (defslv_hresp),
+    .HRDATA5      (defslv_hrdata),
+    .HSEL6        (1'b0),     // Input Port 6
+    .HREADYOUT6   (defslv_hreadyout),
+    .HRESP6       (defslv_hresp),
+    .HRDATA6      (defslv_hrdata),
+    .HSEL7        (1'b0),     // Input Port 7
+    .HREADYOUT7   (defslv_hreadyout),
+    .HRESP7       (defslv_hresp),
+    .HRDATA7      (defslv_hrdata),
+    .HSEL8        (1'b0),     // Input Port 8
+    .HREADYOUT8   (defslv_hreadyout),
+    .HRESP8       (defslv_hresp),
+    .HRDATA8      (defslv_hrdata),
+    .HSEL9        (1'b0),     // Input Port 9
+    .HREADYOUT9   (defslv_hreadyout),
+    .HRESP9       (defslv_hresp),
+    .HRDATA9      (defslv_hrdata),
+
+    .HREADYOUT    (HREADYOUT),   // Outputs
+    .HRESP        (HRESP),
+    .HRDATA       (HRDATA)
+);
+
+// Default slave
+cmsdk_ahb_default_slave u_ahb_default_slave_1 (
+.HCLK         (HCLK),
+.HRESETn      (HRESETn),
+.HSEL         (defslv_hsel),
+.HTRANS       (HTRANS),
+.HREADY       (HREADY),
+.HREADYOUT    (defslv_hreadyout),
+.HRESP        (defslv_hresp)
+);
+assign   defslv_hrdata = 32'hDEADBEEF; // Default slave do not have read data
+
+
+
+cmsdk_ahb_gpio #(
+    .ALTERNATE_FUNC_MASK(16'hFFFF),
+    .ALTERNATE_FUNC_DEFAULT(16'h0000),
+    .BE(0)
+) u_cmsdk_ahb_gpio_0 (
+    .HCLK(HCLK),        
+    .HRESETn(HRESETn),     
+    .FCLK(HCLK),        
+    .HSEL(gpio0_hsel),        
+    .HREADY(HREADY),      
+    .HTRANS(HTRANS),      
+    .HSIZE(HSIZE),       
+    .HWRITE(HWRITE),      
+    .HADDR(HADDR[11:0]),       
+    .HWDATA(HWDATA),     
+    .HREADYOUT(gpio0_hreadyout),       
+    .HRESP(gpio0_hresp),       
+    .HRDATA(gpio0_hrdata),   
+
+    .ECOREVNUM(4'h0),   
+
+    .PORTIN(p0_in),   
+    .PORTOUT(p0_out),     
+    .PORTEN(p0_en),      
+    .PORTFUNC(p0_func),   
+
+    .GPIOINT(gpio0_int),     
+    .COMBINT(gpio0_comb_int)      
+);
+
+cmsdk_ahb_gpio #(
+    .ALTERNATE_FUNC_MASK(16'hFFFF),
+    .ALTERNATE_FUNC_DEFAULT(16'h0000),
+    .BE(0)
+) u_cmsdk_ahb_gpio_1 (
+    .HCLK(HCLK),        
+    .HRESETn(HRESETn),     
+    .FCLK(HCLK),        
+    .HSEL(gpio1_hsel),        
+    .HREADY(HREADY),      
+    .HTRANS(HTRANS),      
+    .HSIZE(HSIZE),       
+    .HWRITE(HWRITE),      
+    .HADDR(HADDR[11:0]),       
+    .HWDATA(HWDATA),     
+    .HREADYOUT(gpio1_hreadyout),       
+    .HRESP(gpio1_hresp),       
+    .HRDATA(gpio1_hrdata),   
+
+    .ECOREVNUM(4'h0),   
+
+    .PORTIN(p1_in),   
+    .PORTOUT(p1_out),     
+    .PORTEN(p1_en),      
+    .PORTFUNC(p1_func),   
+
+    .GPIOINT(gpio1_int),     
+    .COMBINT(gpio1_comb_int)      
+);
+  // endian handling
+  wire             bigendian;
+  assign           bigendian = (BE!=0) ? 1'b1 : 1'b0;
+
+  wire   [31:0]    hwdata_le; // Little endian write data
+  wire   [31:0]    hrdata_le; // Little endian read data
+  wire             reg_be_swap_ctrl_en = HSEL & HTRANS[1] & HREADY & bigendian;
+  reg     [1:0]    reg_be_swap_ctrl; // registered byte swap control
+  wire    [1:0]    nxt_be_swap_ctrl; // next state of byte swap control
+
+  assign nxt_be_swap_ctrl[1] = bigendian & (HSIZE[1:0]==2'b10); // Swap upper and lower half word
+  assign nxt_be_swap_ctrl[0] = bigendian & (HSIZE[1:0]!=2'b00); // Swap byte within hafword
+
+  // Register byte swap control for data phase
+  always @(posedge HCLK or negedge HRESETn)
+    begin
+    if (~HRESETn)
+      reg_be_swap_ctrl <= 2'b00;
+    else if (reg_be_swap_ctrl_en)
+      reg_be_swap_ctrl <= nxt_be_swap_ctrl;
+    end
+
+  // swap byte within half word
+  wire  [31:0] hwdata_mux_1 = (reg_be_swap_ctrl[0] & bigendian) ?
+     {HWDATA[23:16],HWDATA[31:24],HWDATA[7:0],HWDATA[15:8]}:
+     {HWDATA[31:24],HWDATA[23:16],HWDATA[15:8],HWDATA[7:0]};
+  // swap lower and upper half word
+  assign       hwdata_le    = (reg_be_swap_ctrl[1] & bigendian) ?
+     {hwdata_mux_1[15: 0],hwdata_mux_1[31:16]}:
+     {hwdata_mux_1[31:16],hwdata_mux_1[15:0]};
+  // swap byte within half word
+  wire  [31:0] hrdata_mux_1 = (reg_be_swap_ctrl[0] & bigendian) ?
+     {hrdata_le[23:16],hrdata_le[31:24],hrdata_le[ 7:0],hrdata_le[15:8]}:
+     {hrdata_le[31:24],hrdata_le[23:16],hrdata_le[15:8],hrdata_le[7:0]};
+  // swap lower and upper half word
+  assign       apbsys_hrdata       = (reg_be_swap_ctrl[1] & bigendian) ?
+     {hrdata_mux_1[15: 0],hrdata_mux_1[31:16]}:
+     {hrdata_mux_1[31:16],hrdata_mux_1[15:0]};
+
+// AHB to APB bus bridge
+cmsdk_ahb_to_apb #(
+    .ADDRWIDTH      (16),
+    .REGISTER_RDATA (1),
+    .REGISTER_WDATA (0)
+)   u_ahb_to_apb (
+    // AHB side
+    .HCLK     (HCLK),
+    .HRESETn  (HRESETn),
+    .HSEL     (apbsys_hsel),
+    .HADDR    (HADDR[15:0]),
+    .HTRANS   (HTRANS),
+    .HSIZE    (HSIZE),
+    .HPROT    (HPROT),
+    .HWRITE   (HWRITE),
+    .HREADY   (HREADY),
+    .HWDATA   (hwdata_le),
+
+    .HREADYOUT(apbsys_hreadyout), // AHB Outputs
+    .HRDATA   (hrdata_le),
+    .HRESP    (apb_hres),
+
+    .PADDR    (PADDR[15:0]),
+    .PSEL     (PSEL),
+    .PENABLE  (PENABLE),
+    .PSTRB    (PSTRB),
+    .PPROT    (PPROT),
+    .PWRITE   (PWRITE),
+    .PWDATA   (PWDATA),
+
+    .APBACTIVE(APBACTIVE),
+    .PCLKEN   (1'b1),     // APB clock enable signal
+
+    .PRDATA   (PRDATA),
+    .PREADY   (PREADY),
+    .PSLVERR  (PSLVERR)
+);
+
+
 // CMSDK APB Slave Mux (from Corstone 101) 
 cmsdk_apb_slave_mux #(
     .PORT0_ENABLE(1),
@@ -192,11 +491,6 @@ cmsdk_apb_slave_mux #(
     .PSLVERR(PSLVERR)
 );
 
-wire    uart0_txint;
-wire    uart0_rxint;
-wire    uart0_txovrint;
-wire    uart0_rxovrint;
-wire    uart0_combined_int;
 
 cmsdk_apb_uart u_apb_uart_0(
     .PCLK              (PCLK),     // Peripheral clock
@@ -229,13 +523,7 @@ cmsdk_apb_uart u_apb_uart_0(
     .UARTINT           (uart0_combined_int) // Combined Interrupt
 );
 
-assign PERI_IRQS[0] = uart0_txint;
-assign PERI_IRQS[1] = uart0_rxint;
-assign PERI_IRQS[2] = uart0_txovrint;
-assign PERI_IRQS[3] = uart0_rxovrint;
-assign PERI_IRQS[4] = uart0_combined_int;
 
-wire timer0_int;
 
 cmsdk_apb_timer u_apb_timer0(
     .PCLK(PCLK),    // PCLK for timer operation
@@ -254,7 +542,6 @@ cmsdk_apb_timer u_apb_timer0(
     .TIMERINT(timer0_int)
 );
 
-assign PERI_IRQS[5] = timer0_int;
 
 megasoc_peripheral_debug #(
     .FT1248_WIDTH(1)
diff --git a/logical/top_megasoc_tech/megasoc_tech_wrapper.v b/logical/top_megasoc_tech/megasoc_tech_wrapper.v
index 5502956..b5c75ca 100644
--- a/logical/top_megasoc_tech/megasoc_tech_wrapper.v
+++ b/logical/top_megasoc_tech/megasoc_tech_wrapper.v
@@ -193,7 +193,18 @@ module megasoc_tech_wrapper(
     output wire             TDO,
     output wire             nTDOEN,
     output wire             SWDO,
-    output wire             SWDOEN
+    output wire             SWDOEN,
+
+    input  wire [15:0]      P0_IN,
+    output wire [15:0]      P0_OUT,
+    output wire [15:0]      P0_EN,
+    output wire [15:0]      P0_FUNC,
+
+    input  wire [15:0]      P1_IN,
+    output wire [15:0]      P1_OUT,
+    output wire [15:0]      P1_EN,
+    output wire [15:0]      P1_FUNC
+
 );
 
 
@@ -323,14 +334,18 @@ wire                HREADYOUT_FLASH;
 wire                HREADY_FLASH;
 wire                HRESP_FLASH;
 
-wire [31:0]         PADDR_PERIPHERAL;
-wire [31:0]         PWDATA_PERIPHERAL;
-wire                PWRITE_PERIPHERAL;
-wire                PENABLE_PERIPHERAL;
-wire                PSELx_PERIPHERAL;
-wire [31:0]         PRDATA_PERIPHERAL;
-wire                PSLVERR_PERIPHERAL;
-wire                PREADY_PERIPHERAL;
+wire                HSELx_PERIPHERAL;
+wire [31:0]         HADDR_PERIPHERAL;
+wire [1:0]          HTRANS_PERIPHERAL;
+wire                HWRITE_PERIPHERAL;
+wire [2:0]          HSIZE_PERIPHERAL;
+wire [2:0]          HBURST_PERIPHERAL;
+wire [3:0]          HPROT_PERIPHERAL;
+wire [31:0]         HWDATA_PERIPHERAL;
+wire [31:0]         HRDATA_PERIPHERAL;
+wire                HREADYOUT_PERIPHERAL;
+wire                HREADY_PERIPHERAL;
+wire                HRESP_PERIPHERAL;
 
 wire [ID_W-1:0]     AWID_RAM;
 wire [31:0]         AWADDR_RAM;
@@ -649,15 +664,18 @@ nic400_megasoc_main u_nic400_megasoc_main(
     .RVALID_GIC(GIC_RVALID),
     .RREADY_GIC(GIC_RREADY),
 
-    .PADDR_PERIPHERAL(PADDR_PERIPHERAL),
-    .PWDATA_PERIPHERAL(PWDATA_PERIPHERAL),
-    .PWRITE_PERIPHERAL(PWRITE_PERIPHERAL),
-    .PENABLE_PERIPHERAL(PENABLE_PERIPHERAL),
-    .PSELx_PERIPHERAL(PSELx_PERIPHERAL),
-    .PRDATA_PERIPHERAL(PRDATA_PERIPHERAL),
-    .PSLVERR_PERIPHERAL(PSLVERR_PERIPHERAL),
-    .PREADY_PERIPHERAL(PREADY_PERIPHERAL),
-
+    .HSELx_PERIPHERAL(HSELx_PERIPHERAL),
+    .HADDR_PERIPHERAL(HADDR_PERIPHERAL),
+    .HTRANS_PERIPHERAL(HTRANS_PERIPHERAL),
+    .HWRITE_PERIPHERAL(HWRITE_PERIPHERAL),
+    .HSIZE_PERIPHERAL(HSIZE_PERIPHERAL),
+    .HBURST_PERIPHERAL(HBURST_PERIPHERAL),
+    .HPROT_PERIPHERAL(HPROT_PERIPHERAL),
+    .HWDATA_PERIPHERAL(HWDATA_PERIPHERAL),
+    .HRDATA_PERIPHERAL(HRDATA_PERIPHERAL),
+    .HREADYOUT_PERIPHERAL(HREADYOUT_PERIPHERAL),
+    .HREADY_PERIPHERAL(HREADY_PERIPHERAL),
+    .HRESP_PERIPHERAL(HRESP_PERIPHERAL),
 
     .AWID_RAM(AWID_RAM),
     .AWADDR_RAM(AWADDR_RAM),
@@ -1012,14 +1030,18 @@ megasoc_peripheral_subsystem u_megasoc_peripheral_subsystem(
     .HREADY_ADP(HREADY_ADP),
     .HRESP_ADP(HRESP_ADP),
 
-    .PADDR(PADDR_PERIPHERAL),
-    .PENABLE(PENABLE_PERIPHERAL),
-    .PWRITE(PWRITE_PERIPHERAL),
-    .PWDATA(PWDATA_PERIPHERAL),
-    .PSEL(PSELx_PERIPHERAL),
-    .PRDATA(PRDATA_PERIPHERAL),
-    .PREADY(PREADY_PERIPHERAL),
-    .PSLVERR(PSLVERR_PERIPHERAL),
+    .HSEL(HSELx_PERIPHERAL),
+    .HADDR(HADDR_PERIPHERAL),
+    .HTRANS(HTRANS_PERIPHERAL),
+    .HWRITE(HWRITE_PERIPHERAL),
+    .HSIZE(HSIZE_PERIPHERAL),
+    .HBURST(HBURST_PERIPHERAL),
+    .HPROT(HPROT_PERIPHERAL),
+    .HWDATA(HWDATA_PERIPHERAL),
+    .HREADY(HREADY_PERIPHERAL),
+    .HRDATA(HRDATA_PERIPHERAL),
+    .HREADYOUT(HREADYOUT_PERIPHERAL),
+    .HRESP(HRESP_PERIPHERAL),
 
     .UARTRXD(UARTRXD),
     .UARTTXD(UARTTXD),
@@ -1033,6 +1055,15 @@ megasoc_peripheral_subsystem u_megasoc_peripheral_subsystem(
     .FT_MIOSIO_Z(FT_MIOSIO_Z),
     .FT_MIOSIO_I(FT_MIOSIO_I),
 
+    .p0_in(P0_IN),
+    .p0_out(P0_OUT),
+    .p0_en(P0_EN),
+    .p0_func(P0_FUNC),
+    .p1_in(P1_IN),
+    .p1_out(P1_OUT),
+    .p1_en(P1_EN),
+    .p1_func(P1_FUNC),
+
     .PERI_IRQS(PERI_IRQS)
 );
 
diff --git a/socrates/nic400_megasoc_main/nic400_megasoc_main.xml b/socrates/nic400_megasoc_main/nic400_megasoc_main.xml
index 2b5135a..a641a02 100644
--- a/socrates/nic400_megasoc_main/nic400_megasoc_main.xml
+++ b/socrates/nic400_megasoc_main/nic400_megasoc_main.xml
@@ -150,12 +150,16 @@
       </MasterInterface>
       <MasterInterface>
         <Name>PERIPHERAL</Name>
-        <APBMasterProtocol>
+        <AHBLiteTargetMasterProtocol>
           <AddressWidth>32</AddressWidth>
           <DataWidth>32</DataWidth>
-          <TrustZoneMasterAPB>non_secure</TrustZoneMasterAPB>
-          <APBGroupRef>apb_group0</APBGroupRef>
-        </APBMasterProtocol>
+          <ReadIssuing>1</ReadIssuing>
+          <WriteIssuing>1</WriteIssuing>
+          <TotalIssuing>1</TotalIssuing>
+          <TrustZoneMaster>non_secure</TrustZoneMaster>
+          <MultiPorted>false</MultiPorted>
+          <LockSupport>false</LockSupport>
+        </AHBLiteTargetMasterProtocol>
         <GeographicDomainRef>gd0</GeographicDomainRef>
         <ClockRef>clk0</ClockRef>
       </MasterInterface>
@@ -1479,6 +1483,101 @@
         &lt;clock_boundary&gt;none&lt;/clock_boundary&gt;
         &lt;clock_domain_name_master_if&gt;clk0&lt;/clock_domain_name_master_if&gt;
         &lt;clock_domain_name_slave_if&gt;clk0&lt;/clock_domain_name_slave_if&gt;
+        &lt;compress_id def=&quot;true&quot;&gt;false&lt;/compress_id&gt;
+        &lt;dest_type&gt;peripheral&lt;/dest_type&gt;
+        &lt;master_if_addr_width&gt;32&lt;/master_if_addr_width&gt;
+        &lt;master_if_data_width&gt;32&lt;/master_if_data_width&gt;
+        &lt;multi_ported&gt;false&lt;/multi_ported&gt;
+        &lt;multi_region&gt;false&lt;/multi_region&gt;
+        &lt;name&gt;PERIPHERAL&lt;/name&gt;
+        &lt;protocol&gt;ahb_ms&lt;/protocol&gt;
+        &lt;qv_out&gt;false&lt;/qv_out&gt;
+        &lt;reg&gt;
+            &lt;impl&gt;present&lt;/impl&gt;
+            &lt;location&gt;slave_port&lt;/location&gt;
+            &lt;name&gt;aw&lt;/name&gt;
+            &lt;type&gt;rev&lt;/type&gt;
+        &lt;/reg&gt;
+        &lt;reg&gt;
+            &lt;impl&gt;present&lt;/impl&gt;
+            &lt;location&gt;slave_port&lt;/location&gt;
+            &lt;name&gt;ar&lt;/name&gt;
+            &lt;type&gt;rev&lt;/type&gt;
+        &lt;/reg&gt;
+        &lt;reg&gt;
+            &lt;impl def=&quot;true&quot;&gt;absent&lt;/impl&gt;
+            &lt;location&gt;slave_port&lt;/location&gt;
+            &lt;name&gt;r&lt;/name&gt;
+            &lt;type def=&quot;true&quot;&gt;full&lt;/type&gt;
+        &lt;/reg&gt;
+        &lt;reg&gt;
+            &lt;impl def=&quot;true&quot;&gt;absent&lt;/impl&gt;
+            &lt;location&gt;slave_port&lt;/location&gt;
+            &lt;name&gt;w&lt;/name&gt;
+            &lt;type def=&quot;true&quot;&gt;full&lt;/type&gt;
+        &lt;/reg&gt;
+        &lt;reg&gt;
+            &lt;impl def=&quot;true&quot;&gt;absent&lt;/impl&gt;
+            &lt;location&gt;slave_port&lt;/location&gt;
+            &lt;name&gt;b&lt;/name&gt;
+            &lt;type def=&quot;true&quot;&gt;full&lt;/type&gt;
+        &lt;/reg&gt;
+        &lt;reg&gt;
+            &lt;impl def=&quot;true&quot;&gt;absent&lt;/impl&gt;
+            &lt;location&gt;master_port&lt;/location&gt;
+            &lt;name&gt;a&lt;/name&gt;
+            &lt;type def=&quot;true&quot;&gt;full&lt;/type&gt;
+        &lt;/reg&gt;
+        &lt;reg&gt;
+            &lt;impl def=&quot;true&quot;&gt;absent&lt;/impl&gt;
+            &lt;location&gt;master_port&lt;/location&gt;
+            &lt;name&gt;d&lt;/name&gt;
+            &lt;type def=&quot;true&quot;&gt;full&lt;/type&gt;
+        &lt;/reg&gt;
+        &lt;reg&gt;
+            &lt;impl def=&quot;true&quot;&gt;absent&lt;/impl&gt;
+            &lt;location&gt;master_port&lt;/location&gt;
+            &lt;name&gt;w&lt;/name&gt;
+            &lt;type def=&quot;true&quot;&gt;full&lt;/type&gt;
+        &lt;/reg&gt;
+        &lt;reg&gt;
+            &lt;depth def=&quot;true&quot;&gt;2&lt;/depth&gt;
+            &lt;impl def=&quot;true&quot;&gt;absent&lt;/impl&gt;
+            &lt;location&gt;boundary&lt;/location&gt;
+            &lt;name&gt;a&lt;/name&gt;
+            &lt;type&gt;fifo&lt;/type&gt;
+        &lt;/reg&gt;
+        &lt;reg&gt;
+            &lt;depth def=&quot;true&quot;&gt;2&lt;/depth&gt;
+            &lt;impl def=&quot;true&quot;&gt;absent&lt;/impl&gt;
+            &lt;location&gt;boundary&lt;/location&gt;
+            &lt;name&gt;d&lt;/name&gt;
+            &lt;type&gt;fifo&lt;/type&gt;
+        &lt;/reg&gt;
+        &lt;reg&gt;
+            &lt;depth def=&quot;true&quot;&gt;2&lt;/depth&gt;
+            &lt;impl def=&quot;true&quot;&gt;absent&lt;/impl&gt;
+            &lt;location&gt;boundary&lt;/location&gt;
+            &lt;name&gt;w&lt;/name&gt;
+            &lt;type&gt;fifo&lt;/type&gt;
+        &lt;/reg&gt;
+        &lt;slave_if_data_width&gt;64&lt;/slave_if_data_width&gt;
+        &lt;token_prerequest def=&quot;true&quot;&gt;false&lt;/token_prerequest&gt;
+        &lt;token_prerequest_bridge def=&quot;true&quot;&gt;false&lt;/token_prerequest_bridge&gt;
+        &lt;trustzone&gt;nsec&lt;/trustzone&gt;
+        &lt;vn_external&gt;none&lt;/vn_external&gt;
+        &lt;vn_external_bridge&gt;none&lt;/vn_external_bridge&gt;
+        &lt;x&gt;0&lt;/x&gt;
+        &lt;y&gt;80&lt;/y&gt;
+        &lt;master_if_port_name&gt;PERIPHERAL_m&lt;/master_if_port_name&gt;
+        &lt;slave_if_port_name&gt;PERIPHERAL_s&lt;/slave_if_port_name&gt;
+    &lt;/amib&gt;
+    &lt;amib&gt;
+        &lt;apb_config&gt;false&lt;/apb_config&gt;
+        &lt;apb_slave_no&gt;61&lt;/apb_slave_no&gt;
+        &lt;clock_boundary&gt;none&lt;/clock_boundary&gt;
+        &lt;clock_domain_name_master_if&gt;clk0&lt;/clock_domain_name_master_if&gt;
+        &lt;clock_domain_name_slave_if&gt;clk0&lt;/clock_domain_name_slave_if&gt;
         &lt;compress_id&gt;true&lt;/compress_id&gt;
         &lt;dest_type&gt;peripheral&lt;/dest_type&gt;
         &lt;master_if_addr_width&gt;32&lt;/master_if_addr_width&gt;
@@ -1590,13 +1689,13 @@
         &lt;vn_external&gt;none&lt;/vn_external&gt;
         &lt;vn_external_bridge&gt;none&lt;/vn_external_bridge&gt;
         &lt;x&gt;0&lt;/x&gt;
-        &lt;y&gt;80&lt;/y&gt;
+        &lt;y&gt;100&lt;/y&gt;
         &lt;master_if_port_name&gt;DRAM_m&lt;/master_if_port_name&gt;
         &lt;slave_if_port_name&gt;DRAM_s&lt;/slave_if_port_name&gt;
     &lt;/amib&gt;
     &lt;amib&gt;
         &lt;apb_config&gt;false&lt;/apb_config&gt;
-        &lt;apb_slave_no&gt;61&lt;/apb_slave_no&gt;
+        &lt;apb_slave_no&gt;60&lt;/apb_slave_no&gt;
         &lt;clock_boundary&gt;none&lt;/clock_boundary&gt;
         &lt;clock_domain_name_master_if&gt;clk0&lt;/clock_domain_name_master_if&gt;
         &lt;clock_domain_name_slave_if&gt;clk0&lt;/clock_domain_name_slave_if&gt;
@@ -1711,19 +1810,12 @@
         &lt;vn_external&gt;none&lt;/vn_external&gt;
         &lt;vn_external_bridge&gt;none&lt;/vn_external_bridge&gt;
         &lt;x&gt;0&lt;/x&gt;
-        &lt;y&gt;100&lt;/y&gt;
+        &lt;y&gt;120&lt;/y&gt;
         &lt;master_if_port_name&gt;GIC_m&lt;/master_if_port_name&gt;
         &lt;slave_if_port_name&gt;GIC_s&lt;/slave_if_port_name&gt;
     &lt;/amib&gt;
     &lt;amib&gt;
         &lt;apb_config&gt;false&lt;/apb_config&gt;
-        &lt;apb_port&gt;
-            &lt;clock_domain&gt;clk0&lt;/clock_domain&gt;
-            &lt;name&gt;PERIPHERAL&lt;/name&gt;
-            &lt;trustzone&gt;nsec&lt;/trustzone&gt;
-            &lt;x&gt;0&lt;/x&gt;
-            &lt;y&gt;0&lt;/y&gt;
-        &lt;/apb_port&gt;
         &lt;apb_port&gt;
             &lt;clock_domain&gt;clk0&lt;/clock_domain&gt;
             &lt;name&gt;FLASH_CTRL&lt;/name&gt;
@@ -1745,7 +1837,7 @@
             &lt;x&gt;0&lt;/x&gt;
             &lt;y&gt;0&lt;/y&gt;
         &lt;/apb_port&gt;
-        &lt;apb_slave_no&gt;60&lt;/apb_slave_no&gt;
+        &lt;apb_slave_no&gt;59&lt;/apb_slave_no&gt;
         &lt;clock_boundary&gt;none&lt;/clock_boundary&gt;
         &lt;clock_domain_name_master_if&gt;clk0&lt;/clock_domain_name_master_if&gt;
         &lt;clock_domain_name_slave_if&gt;clk0&lt;/clock_domain_name_slave_if&gt;
@@ -1834,15 +1926,15 @@
         &lt;vn_external def=&quot;true&quot;&gt;none&lt;/vn_external&gt;
         &lt;vn_external_bridge def=&quot;true&quot;&gt;none&lt;/vn_external_bridge&gt;
         &lt;x&gt;0&lt;/x&gt;
-        &lt;y&gt;120&lt;/y&gt;
-        &lt;master_if_port_name&gt;PERIPHERAL,FLASH_CTRL,DEBUG,DMA_CTRL&lt;/master_if_port_name&gt;
+        &lt;y&gt;140&lt;/y&gt;
+        &lt;master_if_port_name&gt;FLASH_CTRL,DEBUG,DMA_CTRL&lt;/master_if_port_name&gt;
         &lt;slave_if_port_name&gt;apb_group0_s&lt;/slave_if_port_name&gt;
     &lt;/amib&gt;
     &lt;inter&gt;
         &lt;clock_domain&gt;clk0&lt;/clock_domain&gt;
         &lt;data_width&gt;64&lt;/data_width&gt;
         &lt;expanded&gt;false&lt;/expanded&gt;
-        &lt;height&gt;120&lt;/height&gt;
+        &lt;height&gt;140&lt;/height&gt;
         &lt;impl&gt;mlayer&lt;/impl&gt;
         &lt;master_if&gt;
             &lt;name&gt;axi_m_0&lt;/name&gt;
@@ -1886,6 +1978,12 @@
             &lt;x&gt;0&lt;/x&gt;
             &lt;y&gt;183&lt;/y&gt;
         &lt;/master_if&gt;
+        &lt;master_if&gt;
+            &lt;name&gt;axi_m_7&lt;/name&gt;
+            &lt;post_arb_reg&gt;absent&lt;/post_arb_reg&gt;
+            &lt;x&gt;0&lt;/x&gt;
+            &lt;y&gt;203&lt;/y&gt;
+        &lt;/master_if&gt;
         &lt;name&gt;bm0&lt;/name&gt;
         &lt;protocol&gt;axi4&lt;/protocol&gt;
         &lt;slave_if&gt;
@@ -2098,6 +2196,34 @@
                     &lt;type def=&quot;true&quot;&gt;full&lt;/type&gt;
                 &lt;/reg&gt;
             &lt;/master_if_port&gt;
+            &lt;master_if_port&gt;
+                &lt;name&gt;axi_m_7&lt;/name&gt;
+                &lt;reg&gt;
+                    &lt;impl def=&quot;true&quot;&gt;absent&lt;/impl&gt;
+                    &lt;name&gt;aw&lt;/name&gt;
+                    &lt;type def=&quot;true&quot;&gt;full&lt;/type&gt;
+                &lt;/reg&gt;
+                &lt;reg&gt;
+                    &lt;impl def=&quot;true&quot;&gt;absent&lt;/impl&gt;
+                    &lt;name&gt;ar&lt;/name&gt;
+                    &lt;type def=&quot;true&quot;&gt;full&lt;/type&gt;
+                &lt;/reg&gt;
+                &lt;reg&gt;
+                    &lt;impl def=&quot;true&quot;&gt;absent&lt;/impl&gt;
+                    &lt;name&gt;r&lt;/name&gt;
+                    &lt;type def=&quot;true&quot;&gt;full&lt;/type&gt;
+                &lt;/reg&gt;
+                &lt;reg&gt;
+                    &lt;impl def=&quot;true&quot;&gt;absent&lt;/impl&gt;
+                    &lt;name&gt;w&lt;/name&gt;
+                    &lt;type def=&quot;true&quot;&gt;full&lt;/type&gt;
+                &lt;/reg&gt;
+                &lt;reg&gt;
+                    &lt;impl def=&quot;true&quot;&gt;absent&lt;/impl&gt;
+                    &lt;name&gt;b&lt;/name&gt;
+                    &lt;type def=&quot;true&quot;&gt;full&lt;/type&gt;
+                &lt;/reg&gt;
+            &lt;/master_if_port&gt;
         &lt;/sparse&gt;
         &lt;sparse&gt;
             &lt;cds&gt;slaveperid&lt;/cds&gt;
@@ -2243,12 +2369,40 @@
                     &lt;type def=&quot;true&quot;&gt;full&lt;/type&gt;
                 &lt;/reg&gt;
             &lt;/master_if_port&gt;
+            &lt;master_if_port&gt;
+                &lt;name&gt;axi_m_6&lt;/name&gt;
+                &lt;reg&gt;
+                    &lt;impl def=&quot;true&quot;&gt;absent&lt;/impl&gt;
+                    &lt;name&gt;aw&lt;/name&gt;
+                    &lt;type def=&quot;true&quot;&gt;full&lt;/type&gt;
+                &lt;/reg&gt;
+                &lt;reg&gt;
+                    &lt;impl def=&quot;true&quot;&gt;absent&lt;/impl&gt;
+                    &lt;name&gt;ar&lt;/name&gt;
+                    &lt;type def=&quot;true&quot;&gt;full&lt;/type&gt;
+                &lt;/reg&gt;
+                &lt;reg&gt;
+                    &lt;impl def=&quot;true&quot;&gt;absent&lt;/impl&gt;
+                    &lt;name&gt;r&lt;/name&gt;
+                    &lt;type def=&quot;true&quot;&gt;full&lt;/type&gt;
+                &lt;/reg&gt;
+                &lt;reg&gt;
+                    &lt;impl def=&quot;true&quot;&gt;absent&lt;/impl&gt;
+                    &lt;name&gt;w&lt;/name&gt;
+                    &lt;type def=&quot;true&quot;&gt;full&lt;/type&gt;
+                &lt;/reg&gt;
+                &lt;reg&gt;
+                    &lt;impl def=&quot;true&quot;&gt;absent&lt;/impl&gt;
+                    &lt;name&gt;b&lt;/name&gt;
+                    &lt;type def=&quot;true&quot;&gt;full&lt;/type&gt;
+                &lt;/reg&gt;
+            &lt;/master_if_port&gt;
         &lt;/sparse&gt;
         &lt;type&gt;busmatrix&lt;/type&gt;
         &lt;width&gt;0&lt;/width&gt;
         &lt;x&gt;500&lt;/x&gt;
         &lt;y&gt;45&lt;/y&gt;
-        &lt;master_if_port_name&gt;axi_m_0,axi_m_1,axi_m_2,axi_m_3,axi_m_4,axi_m_5,axi_m_6&lt;/master_if_port_name&gt;
+        &lt;master_if_port_name&gt;axi_m_0,axi_m_1,axi_m_2,axi_m_3,axi_m_4,axi_m_5,axi_m_6,axi_m_7&lt;/master_if_port_name&gt;
         &lt;slave_if_port_name&gt;axi_s_0,axi_s_1&lt;/slave_if_port_name&gt;
     &lt;/inter&gt;
     &lt;inter&gt;
@@ -3043,15 +3197,15 @@
         &lt;awuser&gt;false&lt;/awuser&gt;
         &lt;buser&gt;false&lt;/buser&gt;
         &lt;dest&gt;external&lt;/dest&gt;
-        &lt;dest_port&gt;DRAM&lt;/dest_port&gt;
+        &lt;dest_port&gt;PERIPHERAL&lt;/dest_port&gt;
         &lt;lock&gt;false&lt;/lock&gt;
         &lt;out_reads&gt;1&lt;/out_reads&gt;
         &lt;out_trans&gt;1&lt;/out_trans&gt;
         &lt;out_writes&gt;1&lt;/out_writes&gt;
-        &lt;protocol&gt;axi4&lt;/protocol&gt;
+        &lt;protocol&gt;ahb_ms&lt;/protocol&gt;
         &lt;ruser&gt;false&lt;/ruser&gt;
-        &lt;src&gt;DRAM&lt;/src&gt;
-        &lt;src_port&gt;DRAM_m&lt;/src_port&gt;
+        &lt;src&gt;PERIPHERAL&lt;/src&gt;
+        &lt;src_port&gt;PERIPHERAL_m&lt;/src_port&gt;
         &lt;wuser&gt;false&lt;/wuser&gt;
     &lt;/connect&gt;
     &lt;connect&gt;
@@ -3059,15 +3213,15 @@
         &lt;awuser&gt;false&lt;/awuser&gt;
         &lt;buser&gt;false&lt;/buser&gt;
         &lt;dest&gt;external&lt;/dest&gt;
-        &lt;dest_port&gt;GIC&lt;/dest_port&gt;
+        &lt;dest_port&gt;DRAM&lt;/dest_port&gt;
         &lt;lock&gt;false&lt;/lock&gt;
         &lt;out_reads&gt;1&lt;/out_reads&gt;
         &lt;out_trans&gt;1&lt;/out_trans&gt;
         &lt;out_writes&gt;1&lt;/out_writes&gt;
         &lt;protocol&gt;axi4&lt;/protocol&gt;
         &lt;ruser&gt;false&lt;/ruser&gt;
-        &lt;src&gt;GIC&lt;/src&gt;
-        &lt;src_port&gt;GIC_m&lt;/src_port&gt;
+        &lt;src&gt;DRAM&lt;/src&gt;
+        &lt;src_port&gt;DRAM_m&lt;/src_port&gt;
         &lt;wuser&gt;false&lt;/wuser&gt;
     &lt;/connect&gt;
     &lt;connect&gt;
@@ -3075,15 +3229,15 @@
         &lt;awuser&gt;false&lt;/awuser&gt;
         &lt;buser&gt;false&lt;/buser&gt;
         &lt;dest&gt;external&lt;/dest&gt;
-        &lt;dest_port&gt;PERIPHERAL&lt;/dest_port&gt;
+        &lt;dest_port&gt;GIC&lt;/dest_port&gt;
         &lt;lock&gt;false&lt;/lock&gt;
         &lt;out_reads&gt;1&lt;/out_reads&gt;
         &lt;out_trans&gt;1&lt;/out_trans&gt;
         &lt;out_writes&gt;1&lt;/out_writes&gt;
-        &lt;protocol&gt;apb3&lt;/protocol&gt;
+        &lt;protocol&gt;axi4&lt;/protocol&gt;
         &lt;ruser&gt;false&lt;/ruser&gt;
-        &lt;src&gt;apb_group0&lt;/src&gt;
-        &lt;src_port&gt;PERIPHERAL&lt;/src_port&gt;
+        &lt;src&gt;GIC&lt;/src&gt;
+        &lt;src_port&gt;GIC_m&lt;/src_port&gt;
         &lt;wuser&gt;false&lt;/wuser&gt;
     &lt;/connect&gt;
     &lt;connect&gt;
@@ -3178,6 +3332,17 @@
         &lt;src&gt;bm0&lt;/src&gt;
         &lt;src_port&gt;axi_m_4&lt;/src_port&gt;
     &lt;/connect&gt;
+    &lt;connect&gt;
+        &lt;dest&gt;PERIPHERAL&lt;/dest&gt;
+        &lt;dest_port&gt;PERIPHERAL_s&lt;/dest_port&gt;
+        &lt;lock&gt;false&lt;/lock&gt;
+        &lt;out_reads def=&quot;true&quot;&gt;2&lt;/out_reads&gt;
+        &lt;out_trans def=&quot;true&quot;&gt;4&lt;/out_trans&gt;
+        &lt;out_writes def=&quot;true&quot;&gt;2&lt;/out_writes&gt;
+        &lt;protocol&gt;axi4&lt;/protocol&gt;
+        &lt;src&gt;bm0&lt;/src&gt;
+        &lt;src_port&gt;axi_m_5&lt;/src_port&gt;
+    &lt;/connect&gt;
     &lt;connect&gt;
         &lt;dest&gt;RAM&lt;/dest&gt;
         &lt;dest_port&gt;RAM_s&lt;/dest_port&gt;
@@ -3187,7 +3352,7 @@
         &lt;out_writes&gt;1&lt;/out_writes&gt;
         &lt;protocol&gt;axi4&lt;/protocol&gt;
         &lt;src&gt;bm0&lt;/src&gt;
-        &lt;src_port&gt;axi_m_5&lt;/src_port&gt;
+        &lt;src_port&gt;axi_m_6&lt;/src_port&gt;
     &lt;/connect&gt;
     &lt;connect&gt;
         &lt;dest&gt;GIC&lt;/dest&gt;
@@ -3281,9 +3446,9 @@
         &lt;dest&gt;ib5&lt;/dest&gt;
         &lt;dest_port&gt;ib5_s&lt;/dest_port&gt;
         &lt;lock&gt;false&lt;/lock&gt;
-        &lt;out_reads def=&quot;true&quot;&gt;7&lt;/out_reads&gt;
-        &lt;out_trans&gt;14&lt;/out_trans&gt;
-        &lt;out_writes def=&quot;true&quot;&gt;7&lt;/out_writes&gt;
+        &lt;out_reads def=&quot;true&quot;&gt;9&lt;/out_reads&gt;
+        &lt;out_trans&gt;18&lt;/out_trans&gt;
+        &lt;out_writes def=&quot;true&quot;&gt;9&lt;/out_writes&gt;
         &lt;protocol&gt;axi4&lt;/protocol&gt;
         &lt;src&gt;bm2&lt;/src&gt;
         &lt;src_port&gt;axi_m_1&lt;/src_port&gt;
@@ -3292,9 +3457,9 @@
         &lt;dest&gt;bm0&lt;/dest&gt;
         &lt;dest_port&gt;axi_s_1&lt;/dest_port&gt;
         &lt;lock&gt;false&lt;/lock&gt;
-        &lt;out_reads def=&quot;true&quot;&gt;7&lt;/out_reads&gt;
-        &lt;out_trans&gt;14&lt;/out_trans&gt;
-        &lt;out_writes def=&quot;true&quot;&gt;7&lt;/out_writes&gt;
+        &lt;out_reads def=&quot;true&quot;&gt;9&lt;/out_reads&gt;
+        &lt;out_trans&gt;18&lt;/out_trans&gt;
+        &lt;out_writes def=&quot;true&quot;&gt;9&lt;/out_writes&gt;
         &lt;protocol&gt;axi4&lt;/protocol&gt;
         &lt;src&gt;ib5&lt;/src&gt;
         &lt;src_port&gt;ib5_m&lt;/src_port&gt;
@@ -3308,7 +3473,7 @@
         &lt;out_writes&gt;1&lt;/out_writes&gt;
         &lt;protocol&gt;axi4&lt;/protocol&gt;
         &lt;src&gt;bm0&lt;/src&gt;
-        &lt;src_port&gt;axi_m_6&lt;/src_port&gt;
+        &lt;src_port&gt;axi_m_7&lt;/src_port&gt;
     &lt;/connect&gt;
     &lt;connect&gt;
         &lt;dest&gt;ds_7&lt;/dest&gt;
@@ -3325,16 +3490,15 @@
         &lt;link&gt;
             &lt;slave_if&gt;
                 &lt;name&gt;A53&lt;/name&gt;
-                &lt;master_if&gt;DRAM&lt;/master_if&gt;
-                &lt;master_if&gt;ROM&lt;/master_if&gt;
-                &lt;master_if&gt;PERIPHERAL&lt;parent&gt;apb_group0&lt;/parent&gt;
+                &lt;master_if&gt;FLASH_CTRL&lt;parent&gt;apb_group0&lt;/parent&gt;
                 &lt;/master_if&gt;
+                &lt;master_if&gt;PERIPHERAL&lt;/master_if&gt;
+                &lt;master_if&gt;ROM&lt;/master_if&gt;
                 &lt;master_if&gt;FLASH&lt;/master_if&gt;
                 &lt;master_if&gt;RAM&lt;/master_if&gt;
+                &lt;master_if&gt;DRAM&lt;/master_if&gt;
                 &lt;master_if&gt;GIC&lt;/master_if&gt;
                 &lt;master_if&gt;apb_group0&lt;/master_if&gt;
-                &lt;master_if&gt;FLASH_CTRL&lt;parent&gt;apb_group0&lt;/parent&gt;
-                &lt;/master_if&gt;
                 &lt;master_if&gt;DEBUG&lt;parent&gt;apb_group0&lt;/parent&gt;
                 &lt;/master_if&gt;
                 &lt;master_if&gt;DMA_CTRL&lt;parent&gt;apb_group0&lt;/parent&gt;
@@ -3344,12 +3508,11 @@
         &lt;link&gt;
             &lt;slave_if&gt;
                 &lt;name&gt;DMA350&lt;/name&gt;
-                &lt;master_if&gt;DRAM&lt;/master_if&gt;
+                &lt;master_if&gt;PERIPHERAL&lt;/master_if&gt;
                 &lt;master_if&gt;ROM&lt;/master_if&gt;
-                &lt;master_if&gt;PERIPHERAL&lt;parent&gt;apb_group0&lt;/parent&gt;
-                &lt;/master_if&gt;
                 &lt;master_if&gt;FLASH&lt;/master_if&gt;
                 &lt;master_if&gt;RAM&lt;/master_if&gt;
+                &lt;master_if&gt;DRAM&lt;/master_if&gt;
                 &lt;master_if&gt;apb_group0&lt;/master_if&gt;
                 &lt;master_if&gt;DEBUG&lt;parent&gt;apb_group0&lt;/parent&gt;
                 &lt;/master_if&gt;
@@ -3358,16 +3521,15 @@
         &lt;link&gt;
             &lt;slave_if&gt;
                 &lt;name&gt;ADP&lt;/name&gt;
-                &lt;master_if&gt;DRAM&lt;/master_if&gt;
-                &lt;master_if&gt;ROM&lt;/master_if&gt;
-                &lt;master_if&gt;PERIPHERAL&lt;parent&gt;apb_group0&lt;/parent&gt;
+                &lt;master_if&gt;FLASH_CTRL&lt;parent&gt;apb_group0&lt;/parent&gt;
                 &lt;/master_if&gt;
+                &lt;master_if&gt;PERIPHERAL&lt;/master_if&gt;
+                &lt;master_if&gt;ROM&lt;/master_if&gt;
                 &lt;master_if&gt;FLASH&lt;/master_if&gt;
                 &lt;master_if&gt;RAM&lt;/master_if&gt;
+                &lt;master_if&gt;DRAM&lt;/master_if&gt;
                 &lt;master_if&gt;GIC&lt;/master_if&gt;
                 &lt;master_if&gt;apb_group0&lt;/master_if&gt;
-                &lt;master_if&gt;FLASH_CTRL&lt;parent&gt;apb_group0&lt;/parent&gt;
-                &lt;/master_if&gt;
                 &lt;master_if&gt;DEBUG&lt;parent&gt;apb_group0&lt;/parent&gt;
                 &lt;/master_if&gt;
                 &lt;master_if&gt;DMA_CTRL&lt;parent&gt;apb_group0&lt;/parent&gt;
-- 
GitLab