comment unsued, inherent reg struct
diff --git a/verilog/rtl/wb_interconnect/wb_interconnect.sv b/verilog/rtl/wb_interconnect/wb_interconnect.sv
index 72d6f89..426a3e0 100644
--- a/verilog/rtl/wb_interconnect/wb_interconnect.sv
+++ b/verilog/rtl/wb_interconnect/wb_interconnect.sv
@@ -39,9 +39,8 @@
     input   logic          m0_wb_we_i,
     input   logic          m0_wb_cyc_i,
     input   logic          m0_wb_stb_i,
-    output  wire [31:0]    m0_wb_dat_o,
+    output  wire  [31:0]   m0_wb_dat_o,
     output  wire	       m0_wb_ack_o,
-    output  wire	       m0_wb_err_o,
 
     // Slave 0 Interface
     input	logic [31:0]   s0_wb_dat_i,
@@ -51,64 +50,63 @@
     output	wire  [3:0]	   s0_wb_sel_o,
     output	wire  	       s0_wb_we_o,
     output	wire  	       s0_wb_cyc_o,
-    output	wire  	       s0_wb_stb_o,
+    output	wire  	       s0_wb_stb_o
 
     // Slave 1 Interface
-    input	logic [31:0]   s1_wb_dat_i,
-    input	logic 	       s1_wb_ack_i,
-    output	wire  [31:0]   s1_wb_dat_o,
-    output	wire  [10:0]   s1_wb_adr_o,
-    output	wire  [3:0]	   s1_wb_sel_o,
-    output	wire  	       s1_wb_we_o,
-    output	wire  	       s1_wb_cyc_o,
-    output	wire  	       s1_wb_stb_o,
+    // input	logic [31:0]   s1_wb_dat_i,
+    // input	logic 	       s1_wb_ack_i,
+    // output	wire  [31:0]   s1_wb_dat_o,
+    // output	wire  [8:0]    s1_wb_adr_o,
+    // output	wire  [3:0]	   s1_wb_sel_o,
+    // output	wire  	       s1_wb_we_o,
+    // output	wire  	       s1_wb_cyc_o,
+    // output	wire  	       s1_wb_stb_o,
 
     // Slave 2 Interface
-    input	logic [31:0]   s2_wb_dat_i,
-    input	logic 	       s2_wb_ack_i,
-    output	wire  [31:0]   s2_wb_dat_o,
-    output	wire  [10:0]   s2_wb_adr_o,
-    output	wire  [3:0]    s2_wb_sel_o,
-    output	wire  	       s2_wb_we_o,
-    output	wire  	       s2_wb_cyc_o,
-    output	wire  	       s2_wb_stb_o,
+    // input	logic [31:0]   s2_wb_dat_i,
+    // input	logic 	       s2_wb_ack_i,
+    // output	wire  [31:0]   s2_wb_dat_o,
+    // output	wire  [8:0]    s2_wb_adr_o,
+    // output	wire  [3:0]    s2_wb_sel_o,
+    // output	wire  	       s2_wb_we_o,
+    // output	wire  	       s2_wb_cyc_o,
+    // output	wire  	       s2_wb_stb_o,
 
     // Slave 3 Interface
-    input	logic [31:0]   s3_wb_dat_i,
-    input	logic 	       s3_wb_ack_i,
-    output	wire  [31:0]   s3_wb_dat_o,
-    output	wire  [10:0]   s3_wb_adr_o,
-    output	wire  [3:0]    s3_wb_sel_o,
-    output	wire  	       s3_wb_we_o,
-    output	wire  	       s3_wb_cyc_o,
-     output	wire  	       s3_wb_stb_o
+    // input	logic [31:0]   s3_wb_dat_i,
+    // input	logic 	       s3_wb_ack_i,
+    // output	wire  [31:0]   s3_wb_dat_o,
+    // output	wire  [8:0]    s3_wb_adr_o,
+    // output	wire  [3:0]    s3_wb_sel_o,
+    // output	wire  	       s3_wb_we_o,
+    // output	wire  	       s3_wb_cyc_o,
+    // output	wire  	       s3_wb_stb_o
 );
 
-wire [31:0] m0_wb_wr_wb_dat = m0_wb_dat_i;
-wire [31:0] m0_wb_wr_wb_adr = {m0_wb_adr_i[31:2],2'b00};
-wire [3:0]	m0_wb_wr_wb_sel = m0_wb_sel_i;
-wire  	    m0_wb_wr_wb_we  = m0_wb_we_i;
-wire  	    m0_wb_wr_wb_cyc = m0_wb_cyc_i;
-wire  	    m0_wb_wr_wb_stb = m0_wb_stb_i;
-wire [1:0]  m0_wb_wr_wb_tid = m0_wb_tid_i; // target id
+logic holding_busy; // Indicate Stagging for Free or not
 
-wire [31:0] s_bus_wr_wb_dat;
-wire [31:0] s_bus_wr_wb_adr;
-wire [3:0]	s_bus_wr_wb_sel;
-wire  	    s_bus_wr_wb_we;
-wire  	    s_bus_wr_wb_cyc;
-wire  	    s_bus_wr_wb_stb;
-wire [1:0]  s_bus_wr_wb_tid; // target id
+logic [31:0] m0_wb_dat_i_reg;
+logic [31:0] m0_wb_adr_reg;
+logic [3:0]	 m0_wb_sel_reg;
+logic  	     m0_wb_we_reg;
+logic  	     m0_wb_cyc_reg;
+logic  	     m0_wb_stb_reg;
+logic [1:0]  m0_wb_tid_reg;
 
-wire [31:0] s_bus_rd_wb_dat = (s_wb_tid == 2'b00) ? s0_wb_dat_i :
-                              (s_wb_tid == 2'b01) ? s1_wb_dat_i :
-                              (s_wb_tid == 2'b10) ? s2_wb_dat_i : 
-                              s3_wb_dat_i;
-wire        s_bus_rd_wb_ack = (s_wb_tid == 2'b00) ? s0_wb_ack_i :
-                              (s_wb_tid == 2'b01) ? s1_wb_ack_i :
-                              (s_wb_tid == 2'b10) ? s2_wb_ack_i : 
-                              s3_wb_ack_i;
-wire        s_bus_rd_wb_err = 1'b0;
+logic [31:0] m0_wb_dat_o_reg;
+logic        m0_wb_ack_reg;
+
+// wire [31:0] s_bus_rd_wb_dat = (m0_wb_adr_i[13:12] == 2'b00) ? s0_wb_dat_i :
+//                               (m0_wb_adr_i[13:12] == 2'b01) ? s1_wb_dat_i :
+//                               (m0_wb_adr_i[13:12] == 2'b10) ? s2_wb_dat_i : 
+//                               s3_wb_dat_i;
+// wire        s_bus_rd_wb_ack = (m0_wb_adr_i[13:12] == 2'b00) ? s0_wb_ack_i :
+//                               (m0_wb_adr_i[13:12] == 2'b01) ? s1_wb_ack_i :
+//                               (m0_wb_adr_i[13:12] == 2'b10) ? s2_wb_ack_i : 
+//                               s3_wb_ack_i;
+
+wire [31:0] s_bus_rd_wb_dat = s0_wb_dat_i;
+wire        s_bus_rd_wb_ack = s0_wb_ack_i;
 
 //-------------------------------------------------------------------
 // EXTERNAL MEMORY MAP
@@ -116,71 +114,91 @@
 // 0x0000_1000 to 0x0000_1FFF  - UART
 // 0x0000_2000 to 0x0000_2FFF  - TRNG
 // 0x0000_3000 to 0x0000_3FFF  - SPI
-// ------------------------------------------------------------------
+//------------------------------------------------------------------
 wire [1:0] m0_wb_tid_i = m0_wb_adr_i[13:12];
 
-// Generate Multiplexed Slave Interface based on target Id
-wire [1:0] s_wb_tid = s_bus_wr_wb_tid; // to fix iverilog warning
-
 //----------------------------------------
 // Slave Mapping
-// ---------------------------------------
-assign s0_wb_dat_o = (s_wb_tid == 2'b00) ? s_bus_wr_wb_dat : 2'b00;
-assign s0_wb_adr_o = (s_wb_tid == 2'b00) ? s_bus_wr_wb_adr : 2'b00;
-assign s0_wb_sel_o = (s_wb_tid == 2'b00) ? s_bus_wr_wb_sel : 2'b00;
-assign s0_wb_we_o  = (s_wb_tid == 2'b00) ? s_bus_wr_wb_we  : 2'b00;
-assign s0_wb_cyc_o = (s_wb_tid == 2'b00) ? s_bus_wr_wb_cyc : 2'b00;
-assign s0_wb_stb_o = (s_wb_tid == 2'b00) ? s_bus_wr_wb_stb : 2'b00;
+//---------------------------------------
+assign s0_wb_dat_o = m0_wb_dat_i_reg;
+assign s0_wb_adr_o = m0_wb_adr_reg[8:0];
+assign s0_wb_sel_o = m0_wb_sel_reg;
+assign s0_wb_we_o  = m0_wb_we_reg;
+assign s0_wb_cyc_o = m0_wb_cyc_reg;
+assign s0_wb_stb_o = m0_wb_stb_reg;
 
-assign s1_wb_dat_o = (s_wb_tid == 2'b01) ? s_bus_wr_wb_dat : 2'b00;
-assign s1_wb_adr_o = (s_wb_tid == 2'b01) ? s_bus_wr_wb_adr : 2'b00;
-assign s1_wb_sel_o = (s_wb_tid == 2'b01) ? s_bus_wr_wb_sel : 2'b00;
-assign s1_wb_we_o  = (s_wb_tid == 2'b01) ? s_bus_wr_wb_we  : 2'b00;
-assign s1_wb_cyc_o = (s_wb_tid == 2'b01) ? s_bus_wr_wb_cyc : 2'b00;
-assign s1_wb_stb_o = (s_wb_tid == 2'b01) ? s_bus_wr_wb_stb : 2'b00;
+// assign s0_wb_dat_o = (m0_wb_tid_reg == 2'b00) ? m0_wb_dat_i_reg : 2'b00;
+// assign s0_wb_adr_o = (m0_wb_tid_reg == 2'b00) ? m0_wb_adr_reg : 2'b00;
+// assign s0_wb_sel_o = (m0_wb_tid_reg == 2'b00) ? m0_wb_sel_reg : 2'b00;
+// assign s0_wb_we_o  = (m0_wb_tid_reg == 2'b00) ? m0_wb_we_reg  : 2'b00;
+// assign s0_wb_cyc_o = (m0_wb_tid_reg == 2'b00) ? m0_wb_cyc_reg : 2'b00;
+// assign s0_wb_stb_o = (m0_wb_tid_reg == 2'b00) ? m0_wb_stb_reg : 2'b00;
 
-assign s2_wb_dat_o = (s_wb_tid == 2'b10) ? s_bus_wr_wb_dat : 2'b00;
-assign s2_wb_adr_o = (s_wb_tid == 2'b10) ? s_bus_wr_wb_adr : 2'b00;
-assign s2_wb_sel_o = (s_wb_tid == 2'b10) ? s_bus_wr_wb_sel : 2'b00;
-assign s2_wb_we_o  = (s_wb_tid == 2'b10) ? s_bus_wr_wb_we  : 2'b00;
-assign s2_wb_cyc_o = (s_wb_tid == 2'b10) ? s_bus_wr_wb_cyc : 2'b00;
-assign s2_wb_stb_o = (s_wb_tid == 2'b10) ? s_bus_wr_wb_stb : 2'b00;
+// assign s1_wb_dat_o = (m0_wb_tid_reg == 2'b01) ? m0_wb_dat_i_reg : 2'b00;
+// assign s1_wb_adr_o = (m0_wb_tid_reg == 2'b01) ? m0_wb_adr_reg : 2'b00;
+// assign s1_wb_sel_o = (m0_wb_tid_reg == 2'b01) ? m0_wb_sel_reg : 2'b00;
+// assign s1_wb_we_o  = (m0_wb_tid_reg == 2'b01) ? m0_wb_we_reg  : 2'b00;
+// assign s1_wb_cyc_o = (m0_wb_tid_reg == 2'b01) ? m0_wb_cyc_reg : 2'b00;
+// assign s1_wb_stb_o = (m0_wb_tid_reg == 2'b01) ? m0_wb_stb_reg : 2'b00;
 
-assign s3_wb_dat_o = (s_wb_tid == 2'b11) ? s_bus_wr_wb_dat : 2'b00;
-assign s3_wb_adr_o = (s_wb_tid == 2'b11) ? s_bus_wr_wb_adr : 2'b00;
-assign s3_wb_sel_o = (s_wb_tid == 2'b11) ? s_bus_wr_wb_sel : 2'b00;
-assign s3_wb_we_o  = (s_wb_tid == 2'b11) ? s_bus_wr_wb_we  : 2'b00;
-assign s3_wb_cyc_o = (s_wb_tid == 2'b11) ? s_bus_wr_wb_cyc : 2'b00;
-assign s3_wb_stb_o = (s_wb_tid == 2'b11) ? s_bus_wr_wb_stb : 2'b00;
+// assign s2_wb_dat_o = (m0_wb_tid_reg == 2'b10) ? m0_wb_dat_i_reg : 2'b00;
+// assign s2_wb_adr_o = (m0_wb_tid_reg == 2'b10) ? m0_wb_adr_reg : 2'b00;
+// assign s2_wb_sel_o = (m0_wb_tid_reg == 2'b10) ? m0_wb_sel_reg : 2'b00;
+// assign s2_wb_we_o  = (m0_wb_tid_reg == 2'b10) ? m0_wb_we_reg  : 2'b00;
+// assign s2_wb_cyc_o = (m0_wb_tid_reg == 2'b10) ? m0_wb_cyc_reg : 2'b00;
+// assign s2_wb_stb_o = (m0_wb_tid_reg == 2'b10) ? m0_wb_stb_reg : 2'b00;
 
-// Stagging FF to break write and read timing path
-wb_signal_reg u_m_wb_stage(
-    .clk_i           (clk_i),
-    .rst_n           (rst_n),
+// assign s3_wb_dat_o = (m0_wb_tid_reg == 2'b11) ? m0_wb_dat_i_reg : 2'b00;
+// assign s3_wb_adr_o = (m0_wb_tid_reg == 2'b11) ? m0_wb_adr_reg : 2'b00;
+// assign s3_wb_sel_o = (m0_wb_tid_reg == 2'b11) ? m0_wb_sel_reg : 2'b00;
+// assign s3_wb_we_o  = (m0_wb_tid_reg == 2'b11) ? m0_wb_we_reg  : 2'b00;
+// assign s3_wb_cyc_o = (m0_wb_tid_reg == 2'b11) ? m0_wb_cyc_reg : 2'b00;
+// assign s3_wb_stb_o = (m0_wb_tid_reg == 2'b11) ? m0_wb_stb_reg : 2'b00;
 
-    // WishBone Input master I/P
-    .m_wb_dat_i      (m0_wb_wr_wb_dat),
-    .m_wb_adr_i      (m0_wb_wr_wb_adr),
-    .m_wb_sel_i      (m0_wb_wr_wb_sel),
-    .m_wb_we_i       (m0_wb_wr_wb_we ),
-    .m_wb_cyc_i      (m0_wb_wr_wb_cyc),
-    .m_wb_stb_i      (m0_wb_wr_wb_stb),
-    .m_wb_tid_i      (m0_wb_wr_wb_tid),
-    .m_wb_dat_o      (m0_wb_dat_o),
-    .m_wb_ack_o      (m0_wb_ack_o),
-    .m_wb_err_o      (m0_wb_err_o),
+assign m0_wb_dat_o = s_bus_rd_wb_dat;
+assign m0_wb_ack_o = s_bus_rd_wb_ack;
 
-    // Slave Interface
-    .s_wb_dat_i      (s_bus_rd_wb_dat),
-    .s_wb_ack_i      (s_bus_rd_wb_ack),
-    .s_wb_err_i      (s_bus_rd_wb_err),
-    .s_wb_dat_o      (s_bus_wr_wb_dat),
-    .s_wb_adr_o      (s_bus_wr_wb_adr),
-    .s_wb_sel_o      (s_bus_wr_wb_sel),
-    .s_wb_we_o       (s_bus_wr_wb_we ),
-    .s_wb_cyc_o      (s_bus_wr_wb_cyc),
-    .s_wb_stb_o      (s_bus_wr_wb_stb),
-    .s_wb_tid_o      (s_bus_wr_wb_tid)
-);
+always @(negedge rst_n or posedge clk_i)
+begin
+    if(rst_n == 1'b0) begin
+        // holding_busy    <= 1'b0;
+        m0_wb_dat_i_reg <= 'h0;
+        m0_wb_adr_reg   <= 'h0;
+        m0_wb_sel_reg   <= 'h0;
+        m0_wb_we_reg    <= 'h0;
+        m0_wb_cyc_reg   <= 'h0;
+        m0_wb_stb_reg   <= 'h0;
+        m0_wb_tid_reg   <= 'h0;
+
+        m0_wb_dat_o_reg <= 'h0;
+        m0_wb_ack_reg   <= 'h0;
+        
+    end else begin
+        m0_wb_dat_i_reg <= 'h0;
+        m0_wb_adr_reg   <= 'h0;
+        m0_wb_sel_reg   <= 'h0;
+        m0_wb_we_reg    <= 'h0;
+        m0_wb_cyc_reg   <= 'h0;
+        m0_wb_stb_reg   <= 'h0;
+        m0_wb_tid_reg   <= 'h0;
+
+        // m0_wb_dat_o_reg <= 'h0;
+        // m0_wb_ack_reg   <= 'h0;
+
+        if(m0_wb_stb_i && m0_wb_cyc_i && s_bus_rd_wb_ack == 0) begin
+            // holding_busy    <= 1'b1;
+            m0_wb_dat_i_reg <= m0_wb_dat_i;
+            m0_wb_adr_reg   <= {m0_wb_adr_i[31:2],2'b00};
+            m0_wb_sel_reg   <= m0_wb_sel_i;
+            m0_wb_we_reg    <= m0_wb_we_i;
+            m0_wb_cyc_reg   <= m0_wb_cyc_i;
+            m0_wb_stb_reg   <= m0_wb_stb_i;
+            m0_wb_tid_reg   <= m0_wb_tid_i;
+
+            // m0_wb_dat_o_reg <= s_bus_rd_wb_dat;
+            // m0_wb_ack_reg   <= s_bus_rd_wb_ack;
+        end 
+    end
+end
 
 endmodule