logic to wire conversion
diff --git a/verilog/rtl/sram/sram_wb_wrapper.sv b/verilog/rtl/sram/sram_wb_wrapper.sv
index 58ec2d3..a1104c3 100644
--- a/verilog/rtl/sram/sram_wb_wrapper.sv
+++ b/verilog/rtl/sram/sram_wb_wrapper.sv
@@ -34,23 +34,23 @@
     input   logic                       wb_we_i,   // write
     input   logic [SRAM_DATA_WD-1:0]    wb_dat_i,  // data output
     input   logic [SRAM_DATA_WD/8-1:0]  wb_sel_i,  // byte enable
-    output  logic [SRAM_DATA_WD-1:0]    wb_dat_o,  // data input
+    output  wire  [SRAM_DATA_WD-1:0]    wb_dat_o,  // data input
     output  logic                       wb_ack_o   // acknowlegement
 );
 
 // Port A
-logic                      sram_clk_a;
-logic                      sram_csb_a;
-logic [SRAM_ADDR_WD-1:0]   sram_addr_a;
-logic [SRAM_DATA_WD-1:0]   sram_dout_a;
+wire                      sram_clk_a;
+wire                      sram_csb_a;
+wire [SRAM_ADDR_WD-1:0]   sram_addr_a;
+wire [SRAM_DATA_WD-1:0]   sram_dout_a;
 
 // Port B
-logic                      sram_clk_b;
-logic                      sram_csb_b;
-logic                      sram_web_b;
-logic [SRAM_DATA_WD/8-1:0] sram_mask_b;
-logic [SRAM_ADDR_WD-1:0]   sram_addr_b;
-logic [SRAM_DATA_WD-1:0]   sram_din_b;
+wire                      sram_clk_b;
+wire                      sram_csb_b;
+wire                      sram_web_b;
+wire [SRAM_DATA_WD/8-1:0] sram_mask_b;
+wire [SRAM_ADDR_WD-1:0]   sram_addr_b;
+wire [SRAM_DATA_WD-1:0]   sram_din_b;
 
 // Memory Write Port
 assign sram_clk_b  = wb_clk_i;
@@ -88,7 +88,8 @@
 );
 
 // Generate once cycle delayed ACK to get the data from SRAM
-always_ff @(posedge wb_clk_i) begin
+always @(posedge wb_clk_i) 
+begin
     if ( rst_n == 1'b0 )
     begin
         wb_ack_o <= 'h0;
diff --git a/verilog/rtl/wb_interconnect/wb_interconnect.sv b/verilog/rtl/wb_interconnect/wb_interconnect.sv
index 4631887..72d6f89 100644
--- a/verilog/rtl/wb_interconnect/wb_interconnect.sv
+++ b/verilog/rtl/wb_interconnect/wb_interconnect.sv
@@ -39,89 +39,76 @@
     input   logic          m0_wb_we_i,
     input   logic          m0_wb_cyc_i,
     input   logic          m0_wb_stb_i,
-    output  logic [31:0]   m0_wb_dat_o,
-    output  logic	       m0_wb_ack_o,
-    output  logic	       m0_wb_err_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,
     input	logic 	       s0_wb_ack_i,
-    output	logic [31:0]   s0_wb_dat_o,
-    output	logic [7:0]	   s0_wb_adr_o,
-    output	logic [3:0]	   s0_wb_sel_o,
-    output	logic 	       s0_wb_we_o,
-    output	logic 	       s0_wb_cyc_o,
-    output	logic 	       s0_wb_stb_o,
+    output	wire  [31:0]   s0_wb_dat_o,
+    output	wire  [8:0]	   s0_wb_adr_o,
+    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,
 
     // Slave 1 Interface
     input	logic [31:0]   s1_wb_dat_i,
     input	logic 	       s1_wb_ack_i,
-    output	logic [31:0]   s1_wb_dat_o,
-    output	logic [10:0]   s1_wb_adr_o,
-    output	logic [3:0]	   s1_wb_sel_o,
-    output	logic 	       s1_wb_we_o,
-    output	logic 	       s1_wb_cyc_o,
-    output	logic 	       s1_wb_stb_o,
+    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,
 
     // Slave 2 Interface
     input	logic [31:0]   s2_wb_dat_i,
     input	logic 	       s2_wb_ack_i,
-    output	logic [31:0]   s2_wb_dat_o,
-    output	logic [10:0]   s2_wb_adr_o,
-    output	logic [3:0]    s2_wb_sel_o,
-    output	logic 	       s2_wb_we_o,
-    output	logic 	       s2_wb_cyc_o,
-    output	logic 	       s2_wb_stb_o,
+    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,
 
     // Slave 3 Interface
     input	logic [31:0]   s3_wb_dat_i,
     input	logic 	       s3_wb_ack_i,
-    output	logic [31:0]   s3_wb_dat_o,
-    output	logic [10:0]   s3_wb_adr_o,
-    output	logic [3:0]    s3_wb_sel_o,
-    output	logic 	       s3_wb_we_o,
-    output	logic 	       s3_wb_cyc_o,
-    output	logic 	       s3_wb_stb_o
+    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
 );
 
-// WishBone Wr Interface
-typedef struct packed {
-    logic [31:0] wb_dat;
-    logic [31:0] wb_adr;
-    logic [3:0]	 wb_sel;
-    logic  	     wb_we;
-    logic  	     wb_cyc;
-    logic  	     wb_stb;
-    logic [1:0]  wb_tid; // target id
-} type_wb_wr_intf;
+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
 
-// WishBone Rd Interface
-typedef struct packed {
-    logic [31:0] wb_dat;
-    logic        wb_ack;
-    logic        wb_err;
-} type_wb_rd_intf;
+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
 
-// Master Write Interface
-type_wb_wr_intf  m0_wb_wr;
-
-// Master Read Interface
-type_wb_rd_intf  m0_wb_rd;
-
-// Slave Write Interface
-type_wb_wr_intf  s0_wb_wr;
-type_wb_wr_intf  s1_wb_wr;
-type_wb_wr_intf  s2_wb_wr;
-type_wb_wr_intf  s3_wb_wr;
-
-// Slave Read Interface
-type_wb_rd_intf  s0_wb_rd;
-type_wb_rd_intf  s1_wb_rd;
-type_wb_rd_intf  s2_wb_rd;
-type_wb_rd_intf  s3_wb_rd;
-
-type_wb_wr_intf  s_bus_wr;  // Multiplexed Master I/F
-type_wb_rd_intf  s_bus_rd;  // Multiplexed Slave I/F
+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;
 
 //-------------------------------------------------------------------
 // EXTERNAL MEMORY MAP
@@ -132,118 +119,68 @@
 // ------------------------------------------------------------------
 wire [1:0] m0_wb_tid_i = m0_wb_adr_i[13:12];
 
-//----------------------------------------
-// Master Mapping
-// ---------------------------------------
-assign m0_wb_wr.wb_dat = m0_wb_dat_i;
-assign m0_wb_wr.wb_adr = {m0_wb_adr_i[31:2],2'b00};
-assign m0_wb_wr.wb_sel = m0_wb_sel_i;
-assign m0_wb_wr.wb_we  = m0_wb_we_i;
-assign m0_wb_wr.wb_cyc = m0_wb_cyc_i;
-assign m0_wb_wr.wb_stb = m0_wb_stb_i;
-assign m0_wb_wr.wb_tid = m0_wb_tid_i;
-
-assign m0_wb_dat_o = m0_wb_rd.wb_dat;
-assign m0_wb_ack_o = m0_wb_rd.wb_ack;
-assign m0_wb_err_o = m0_wb_rd.wb_err;
+// 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
-// -------------------------------------
-// 2KB SRAM
-assign s0_wb_dat_o = s0_wb_wr.wb_dat;
-assign s0_wb_adr_o = s0_wb_wr.wb_adr[8:0];
-assign s0_wb_sel_o = s0_wb_wr.wb_sel;
-assign s0_wb_we_o  = s0_wb_wr.wb_we;
-assign s0_wb_cyc_o = s0_wb_wr.wb_cyc;
-assign s0_wb_stb_o = s0_wb_wr.wb_stb;
+// ---------------------------------------
+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_rd.wb_dat = s0_wb_dat_i;
-assign s0_wb_rd.wb_ack = s0_wb_ack_i;
-assign s0_wb_rd.wb_err = 1'b0;
+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;
 
-// UART
-assign s1_wb_dat_o = s1_wb_wr.wb_dat;
-assign s1_wb_adr_o = s1_wb_wr.wb_adr[10:0];
-assign s1_wb_sel_o = s1_wb_wr.wb_sel;
-assign s1_wb_we_o  = s1_wb_wr.wb_we;
-assign s1_wb_cyc_o = s1_wb_wr.wb_cyc;
-assign s1_wb_stb_o = s1_wb_wr.wb_stb;
+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_rd.wb_dat = s1_wb_dat_i;
-assign s1_wb_rd.wb_ack = s1_wb_ack_i;
-assign s1_wb_rd.wb_err = 1'b0;
-
-// TRNG
-assign s2_wb_dat_o = s2_wb_wr.wb_dat;
-assign s2_wb_adr_o = s2_wb_wr.wb_adr[10:0];
-assign s2_wb_sel_o = s2_wb_wr.wb_sel;
-assign s2_wb_we_o  = s2_wb_wr.wb_we;
-assign s2_wb_cyc_o = s2_wb_wr.wb_cyc;
-assign s2_wb_stb_o = s2_wb_wr.wb_stb;
-
-assign s2_wb_rd.wb_dat = s2_wb_dat_i;
-assign s2_wb_rd.wb_ack = s2_wb_ack_i;
-assign s2_wb_rd.wb_err = 1'b0;
-
-// SPI
-assign s3_wb_dat_o = s3_wb_wr.wb_dat;
-assign s3_wb_adr_o = s3_wb_wr.wb_adr[10:0];
-assign s3_wb_sel_o = s3_wb_wr.wb_sel;
-assign s3_wb_we_o  = s3_wb_wr.wb_we;
-assign s3_wb_cyc_o = s3_wb_wr.wb_cyc;
-assign s3_wb_stb_o = s3_wb_wr.wb_stb;
-
-assign s3_wb_rd.wb_dat = s3_wb_dat_i;
-assign s3_wb_rd.wb_ack = s3_wb_ack_i;
-assign s3_wb_rd.wb_err = 1'b0;
-
-// Generate Multiplexed Slave Interface based on target Id
-wire [3:0] s_wb_tid = s_bus_wr.wb_tid; // to fix iverilog warning
-
-always_comb begin
-    case(s_wb_tid)
-        2'b00: s_bus_rd = s0_wb_rd;
-        2'b01: s_bus_rd = s1_wb_rd;
-        2'b10: s_bus_rd = s2_wb_rd;
-        2'b11: s_bus_rd = s3_wb_rd;
-    endcase
-end
-
-// Connect Master => Slave
-assign  s0_wb_wr = (s_wb_tid == 2'b00) ? s_bus_wr : 2'b00;
-assign  s1_wb_wr = (s_wb_tid == 2'b01) ? s_bus_wr : 2'b00;
-assign  s2_wb_wr = (s_wb_tid == 2'b10) ? s_bus_wr : 2'b00;
-assign  s3_wb_wr = (s_wb_tid == 2'b11) ? s_bus_wr : 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;
 
 // Stagging FF to break write and read timing path
-wb_stagging u_m_wb_stage(
-    .clk_i            (clk_i),
-    .rst_n            (rst_n),
+wb_signal_reg u_m_wb_stage(
+    .clk_i           (clk_i),
+    .rst_n           (rst_n),
 
     // 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_rd.wb_dat),
-    .m_wb_ack_o      (m0_wb_rd.wb_ack),
-    .m_wb_err_o      (m0_wb_rd.wb_err),
+    .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),
 
     // 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)
+    .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)
 );
 
 endmodule