design clean-up
diff --git a/README.md b/README.md
index 35078b9..3da7c25 100644
--- a/README.md
+++ b/README.md
@@ -5,3 +5,7 @@
 # Reference
 * turbo8051 <https://opencores.org/projects/turbo8051>
 * Julien OURY MPW Project <https://github.com/JulienOury/ChristmasTreeController.git>
+* opengfx430 <https://github.com/olgirard/opengfx430>
+* openMSP430 <https://opencores.org/websvn/filedetails?repname=openmsp430&path=%2Fopenmsp430%2Ftrunk%2Fdoc%2FopenMSP430.pdf>
+* slau049f   <https://www.ti.com/lit/ug/slau049f/slau049f.pdf>
+* LT24 Card <http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=68&No=892&PartNo=2#heading>
diff --git a/verilog/dv/Makefile b/verilog/dv/Makefile
new file mode 100644
index 0000000..dcd4196
--- /dev/null
+++ b/verilog/dv/Makefile
@@ -0,0 +1,47 @@
+# SPDX-FileCopyrightText: 2020 Efabless Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# ---- Test patterns for project striVe ----
+
+.SUFFIXES:
+.SILENT: clean all
+
+PATTERNS = user_mbist_test1
+
+all:  ${PATTERNS}
+	echo "################# RTL Test case Summary #####################" > regression.rpt
+	xterm -e /usr/bin/watch -n 25 /bin/cat regression.rpt & 
+	for i in ${PATTERNS}; do \
+		( cd $$i && make | tee run.rtl.log && grep Monitor run.rtl.log | grep $$i >> ../regression.rpt) ; \
+	done
+	echo "################# GL Test case Summary #####################" >> regression.rpt
+	\rm -rf */*.vvp
+	for i in ${PATTERNS}; do \
+		( cd $$i && make SIM=GL | tee run.gl.log && grep Monitor run.gl.log | grep $$i >> ../regression.rpt) ; \
+	done
+	echo "################# End of Test case Summary #####################" >> regression.rpt
+
+DV_PATTERNS = $(foreach dv, $(PATTERNS), verify-$(dv))
+$(DV_PATTERNS): verify-% : 
+	cd $* && make
+
+clean:  ${PATTERNS}
+	for i in ${PATTERNS}; do \
+		( cd $$i && make clean ) ; \
+	done
+	rm -rf *.log
+	
+.PHONY: clean all
diff --git a/verilog/dv/user_mbist_test1/Makefile b/verilog/dv/user_mbist_test1/Makefile
new file mode 100644
index 0000000..9224b8a
--- /dev/null
+++ b/verilog/dv/user_mbist_test1/Makefile
@@ -0,0 +1,85 @@
+# SPDX-FileCopyrightText: 2020 Efabless Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+
+# ---- Include Partitioned Makefiles ----
+
+CONFIG = caravel_user_project
+ 
+#######################################################################
+## Caravel Verilog for Integration Tests
+#######################################################################
+
+DESIGNS?=../../..
+
+export USER_PROJECT_VERILOG ?=  $(DESIGNS)/verilog
+
+export PDK_PATH ?=  $(PDK_PATH)
+
+## Simulation mode: RTL/GL
+SIM?=RTL
+DUMP?=OFF
+
+### To Enable IVERILOG FST DUMP
+export IVERILOG_DUMPER = fst
+
+
+.SUFFIXES:
+
+PATTERN = user_mbist_test1
+
+all:  ${PATTERN:=.vcd}
+
+
+vvp:  ${PATTERN:=.vvp}
+
+%.vvp: %_tb.v
+ifeq ($(SIM),RTL)
+   ifeq ($(DUMP),OFF)
+	iverilog -g2012 -DFUNCTIONAL -DSIM -I $(PDK_PATH) \
+	-f$(USER_PROJECT_VERILOG)/includes/includes.rtl.$(CONFIG) \
+	-f$(USER_PROJECT_VERILOG)/includes/includes.rtl.lib  \
+	$< -o $@ 
+    else  
+	iverilog -g2012 -DWFDUMP -DFUNCTIONAL -DSIM -I $(PDK_PATH) \
+	-f$(USER_PROJECT_VERILOG)/includes/includes.rtl.$(CONFIG) \
+	-f$(USER_PROJECT_VERILOG)/includes/includes.rtl.lib  \
+	$< -o $@  
+   endif
+else  
+   ifeq ($(DUMP),OFF)
+	iverilog -g2012 -DFUNCTIONAL -DUSE_POWER_PINS -DGL -I $(PDK_PATH) \
+	-f$(USER_PROJECT_VERILOG)/includes/includes.gl.$(CONFIG) \
+	-f$(USER_PROJECT_VERILOG)/includes/includes.gl.lib \
+	$< -o $@ 
+    else  
+	iverilog -g2012 -DWFDUMP -DFUNCTIONAL -DUSE_POWER_PINS -DGL -I $(PDK_PATH) \
+	-f$(USER_PROJECT_VERILOG)/includes/includes.gl.$(CONFIG) \
+	-f$(USER_PROJECT_VERILOG)/includes/includes.gl.lib \
+	$< -o $@  
+   endif
+endif
+
+%.vcd: %.vvp
+	vvp $<  | tee run.rtl.log
+
+
+# ---- Clean ----
+
+clean:
+	rm -f *.elf *.hex *.bin *.vvp *.vcd *.log *.dump
+
+.PHONY: clean hex all
diff --git a/verilog/dv/user_mbist_test1/user_mbist_test1_tb.v b/verilog/dv/user_mbist_test1/user_mbist_test1_tb.v
new file mode 100644
index 0000000..e6c5e53
--- /dev/null
+++ b/verilog/dv/user_mbist_test1/user_mbist_test1_tb.v
@@ -0,0 +1,660 @@
+////////////////////////////////////////////////////////////////////////////
+// SPDX-FileCopyrightText:  2021 , Dinesh Annayya
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// SPDX-License-Identifier: Apache-2.0
+// SPDX-FileContributor: Modified by Dinesh Annayya <dinesha@opencores.org>
+//////////////////////////////////////////////////////////////////////
+////                                                              ////
+////  Standalone User validation Test bench                       ////
+////                                                              ////
+////                                                              ////
+////  Description                                                 ////
+////   This is a standalone test bench to validate the            ////
+////   Digital core MBIST logic through External WB i/F.          ////
+////                                                              ////
+////  To Do:                                                      ////
+////    nothing                                                   ////
+////                                                              ////
+////  Author(s):                                                  ////
+////      - Dinesh Annayya, dinesha@opencores.org                 ////
+////                                                              ////
+////  Revision :                                                  ////
+////    0.1 - 18 Oct 2021, Dinesh A                               ////
+////                                                              ////
+//////////////////////////////////////////////////////////////////////
+
+`default_nettype wire
+
+`timescale 1 ns / 1 ps
+
+`include "./sram_macros/sky130_sram_2kbyte_1rw1r_32x512_8.v"
+`include "user_reg_map.v"
+
+`define NO_SRAM 4  // Number of SRAM connected to MBIST WRAPPER
+`define SRAM_AD 9  // SRAM ADDRESS WIDTH
+
+`define TB_TOP user_mbist_test1_tb
+module `TB_TOP;
+
+	reg clock;
+	reg wb_rst_i;
+	reg power1, power2;
+	reg power3, power4;
+
+        reg        wbd_ext_cyc_i;  // strobe/request
+        reg        wbd_ext_stb_i;  // strobe/request
+        reg [31:0] wbd_ext_adr_i;  // address
+        reg        wbd_ext_we_i;  // write
+        reg [31:0] wbd_ext_dat_i;  // data output
+        reg [3:0]  wbd_ext_sel_i;  // byte enable
+
+        wire [31:0] wbd_ext_dat_o;  // data input
+        wire        wbd_ext_ack_o;  // acknowlegement
+        wire        wbd_ext_err_o;  // error
+
+	// User I/O
+	wire [37:0] io_oeb;
+	wire [37:0] io_out;
+	wire [37:0] io_in;
+
+	wire gpio;
+	wire [37:0] mprj_io;
+	wire [7:0] mprj_io_0;
+	reg        test_fail;
+	reg [31:0] read_data;
+    reg [31:0] writemem [0:511];
+    reg [`SRAM_AD-1:0]  faultaddr [0:7];
+        integer i;
+        event      error_insert;
+
+
+	// External clock is used by default.  Make this artificially fast for the
+	// simulation.  Normally this would be a slow clock and the digital PLL
+	// would be the fast clock.
+
+	always #12.5 clock <= (clock === 1'b0);
+
+	initial begin
+		clock = 0;
+                wbd_ext_cyc_i ='h0;  // strobe/request
+                wbd_ext_stb_i ='h0;  // strobe/request
+                wbd_ext_adr_i ='h0;  // address
+                wbd_ext_we_i  ='h0;  // write
+                wbd_ext_dat_i ='h0;  // data output
+                wbd_ext_sel_i ='h0;  // byte enable
+	end
+
+	`ifdef WFDUMP
+	   initial begin
+	   	$dumpfile("simx.vcd");
+	   	$dumpvars(0, user_mbist_test1_tb);
+	   end
+    `endif
+
+	initial begin
+		wb_rst_i <= 1'b1;
+		#100;
+		wb_rst_i <= 1'b0;	    	// Release reset
+
+		#200; // Wait for reset removal
+	        repeat (10) @(posedge clock);
+		$display("Monitor: Standalone User Test Started");
+
+		test_fail = 0;
+		// Remove Wb Reset
+		wb_user_core_write(`ADDR_SPACE_WBHOST+`WBHOST_GLBL_CFG,'h1);
+        
+
+	    	$display("###################################################");
+	    	$display(" MBIST Test with Without Address Failure");
+	    	$display("###################################################");
+
+		// Check Is there is any BIST Error
+		// [0]   - Bist Done      - 1
+		// [1]   - Bist Error     - 0
+		// [2]   - Bist Correct   - 0
+		// [3]   - Reserved       - 0
+		// [7:4] - Bist Error Cnt - 4'h0
+		insert_fault(0,0,32'h01010101);
+
+          	if(test_fail == 0) begin
+	    	    $display("Monitor: Step-1: BIST Test without any Memory Error insertion test Passed");
+	        end else begin
+	    	    $display("Monitor: Step-1: BIST Test without any Memory Error insertion test Failed");
+		end
+		$dumpon;
+	    	$display("###################################################");
+	    	$display(" MBIST Test with Single Address Failure");
+	    	$display("###################################################");
+		   // Check Is there is any BIST Error
+		   // [0]   - Bist Done      - 1
+		   // [1]   - Bist Error     - 0
+		   // [2]   - Bist Correct   - 1
+		   // [3]   - Reserved       - 0
+		   // [7:4] - Bist Error Cnt - 4'h1
+		   //if(read_data[6:0]  != 7'b0001101) test_fail = 1; // Bist correct = 1 and Bist Err Cnt - 0x1
+		faultaddr[0] = 9'h10;
+		insert_fault(1,1,32'h15151515);
+
+          	if(test_fail == 0) begin
+	    	    $display("Monitor: Step-2: BIST Test with One Memory Error insertion test Passed");
+	        end else begin
+	    	    $display("Monitor: Step-2: BIST Test with One Memory Error insertion test Failed");
+		 end
+	    	$display("###################################################");
+	    	$display("###################################################");
+	    	$display(" MBIST Test with Two Address Failure");
+	    	$display("###################################################");
+		// Check Is there is any BIST Error
+		// [0]   - Bist Done      - 1
+		// [1]   - Bist Error     - 0
+		// [2]   - Bist Correct   - 1
+		// [3]   - Reserved       - 0
+		// [7:4] - Bist Error Cnt - 4'h2
+		//if(read_data[6:0]  != 7'b0010101) test_fail = 1; // Bist correct = 1 and Bist Err Cnt - 0x2
+		faultaddr[0] = 9'h10;
+		faultaddr[1] = 9'h20;
+		insert_fault(2,0,32'h25252525);
+
+          	if(test_fail == 0) begin
+	    	    $display("Monitor: Step-3: BIST Test with Two Memory Error insertion test Passed");
+	        end else begin
+	    	    $display("Monitor: Step-3: BIST Test with Two Memory Error insertion test Failed");
+		 end
+	    	$display("###################################################");
+	    	$display(" MBIST Test with Three Address Failure");
+	    	$display("###################################################");
+
+		// Check Is there is any BIST Error
+		// [0]   - Bist Done      - 1
+		// [1]   - Bist Error     - 0
+		// [2]   - Bist Correct   - 1
+		// [3]   - Reserved       - 0
+		// [7:4] - Bist Error Cnt - 4'h3
+		//if(read_data[6:0]  != 7'b0011101) test_fail = 1; // Bist correct = 1 and Bist Err Cnt - 0x3
+		faultaddr[0] = 9'h10;
+		faultaddr[1] = 9'h20;
+		faultaddr[2] = 9'h30;
+		insert_fault(3,1,32'h35353535);
+
+          	if(test_fail == 0) begin
+	    	    $display("Monitor: Step-4: BIST Test with Three Memory Error insertion test Passed");
+	        end else begin
+	    	    $display("Monitor: Step-4: BIST Test with Three Memory Error insertion test Failed");
+		 end
+	    	$display("###################################################");
+	    	$display(" MBIST Test with Fours Address Failure");
+	    	$display("###################################################");
+		// Check Is there is any BIST Error
+		// [0]   - Bist Done      - 1
+		// [1]   - Bist Error     - 0
+		// [2]   - Bist Correct   - 1
+		// [3]   - Reserved       - 0
+		// [7:4] - Bist Error Cnt - 4'h4
+		//if(read_data[6:0]  != 7'b0100101) test_fail = 1; // Bist correct = 1 and Bist Err Cnt - 0x4
+		faultaddr[0] = 9'h10;
+		faultaddr[1] = 9'h20;
+		faultaddr[2] = 9'h30;
+		faultaddr[3] = 9'h40;
+		insert_fault(4,0,32'h45454545);
+
+          	if(test_fail == 0) begin
+	    	    $display("Monitor: Step-5: BIST Test with Four Memory Error insertion test Passed");
+	        end else begin
+	    	    $display("Monitor: Step-5: BIST Test with Four Memory Error insertion test Failed");
+		end
+
+		$dumpon;
+	    	$display("###################################################");
+	    	$display(" MBIST Test with Fours Address(Continous Starting Addrsess) Failure");
+	    	$display("###################################################");
+		// Check Is there is any BIST Error
+		// [0]   - Bist Done      - 1
+		// [1]   - Bist Error     - 0
+		// [2]   - Bist Correct   - 1
+		// [3]   - Reserved       - 0
+		// [7:4] - Bist Error Cnt - 4'h4
+		//if(read_data[6:0]  != 7'b0100101) test_fail = 1; // Bist correct = 1 and Bist Err Cnt - 0x4
+		faultaddr[0] = 9'h0;
+		faultaddr[1] = 9'h1;
+		faultaddr[2] = 9'h2;
+		faultaddr[3] = 9'h3;
+		insert_fault(4,0,32'h45454545);
+
+          	if(test_fail == 0) begin
+	    	    $display("Monitor: Step-5.2: BIST Test with Four Memory Error insertion test Passed");
+	        end else begin
+	    	    $display("Monitor: Step-5.2: BIST Test with Four Memory Error insertion test Failed");
+		end
+
+	    	$display("###################################################");
+	    	$display(" MBIST Test with Fours Address(Last Addrsess) Failure");
+	    	$display("###################################################");
+		// Check Is there is any BIST Error
+		// [0]   - Bist Done      - 1
+		// [1]   - Bist Error     - 0
+		// [2]   - Bist Correct   - 1
+		// [3]   - Reserved       - 0
+		// [7:4] - Bist Error Cnt - 4'h4
+		//if(read_data[6:0]  != 7'b0100101) test_fail = 1; // Bist correct = 1 and Bist Err Cnt - 0x4
+		faultaddr[0] = 9'hF0;
+		faultaddr[1] = 9'hF1;
+		faultaddr[2] = 9'hF2;
+		faultaddr[3] = 9'hF3;
+		insert_fault(4,0,32'h45454545);
+
+          	if(test_fail == 0) begin
+	    	    $display("Monitor: Step-5.3: BIST Test with Four Memory Error insertion test Passed");
+	        end else begin
+	    	    $display("Monitor: Step-5.3: BIST Test with Four Memory Error insertion test Failed");
+		end
+		$dumpon;
+	    	$display("###################################################");
+	    	$display(" MBIST Test with Five Address Failure");
+	    	$display("###################################################");
+		// Check Is there is any BIST Error
+		// [0]   - Bist Done      - 1
+		// [1]   - Bist Error     - 1
+		// [2]   - Bist Correct   - 1
+		// [3]   - Reserved       - 0
+		// [7:4] - Bist Error Cnt - 4'h4
+		//if(read_data[6:0]  != 7'b0100101) test_fail = 1; // Bist correct = 1 and Bist Err Cnt - 0x4
+		faultaddr[0] = 9'h10;
+		faultaddr[1] = 9'h20;
+		faultaddr[2] = 9'h30;
+		faultaddr[3] = 9'h40;
+		faultaddr[4] = 9'h50;
+		insert_fault(5,1,32'h47474747);
+
+          	if(test_fail == 0) begin
+	    	    $display("Monitor: Step-5: BIST Test with Five Memory Error insertion test Passed");
+	        end else begin
+	    	    $display("Monitor: Step-5: BIST Test with Five Memory Error insertion test Failed");
+		 end
+
+		$dumpon;
+	    	$display("###################################################");
+	    	$display(" MBIST Test with Functional Access, continuation of previous MBIST Signature");
+	    	$display("###################################################");
+		$dumpon;
+		fork
+		begin
+		    // Remove the Bist Enable and Bist Run
+                    wb_user_core_write(`ADDR_SPACE_GLBL+`GLBL_BIST_CTRL2,'h000);
+  
+	            // Fill Random Data	
+		    for (i=0; i< 9'h1FC; i=i+1) begin
+   	                writemem[i] = $random;
+                        wb_user_core_write(`ADDR_SPACE_SRAM0+(i*4),writemem[i]);
+                        wb_user_core_write(`ADDR_SPACE_SRAM1+(i*4),writemem[i]);
+                        wb_user_core_write(`ADDR_SPACE_SRAM2+(i*4),writemem[i]);
+                        wb_user_core_write(`ADDR_SPACE_SRAM3+(i*4),writemem[i]);
+		    end
+		    // Read back data
+		    for (i=0; i< 9'h1FC; i=i+1) begin
+                        wb_user_core_read_check(`ADDR_SPACE_SRAM0+(i*4),read_data,writemem[i],32'hFFFFFFFF);
+                        wb_user_core_read_check(`ADDR_SPACE_SRAM1+(i*4),read_data,writemem[i],32'hFFFFFFFF);
+                        wb_user_core_read_check(`ADDR_SPACE_SRAM2+(i*4),read_data,writemem[i],32'hFFFFFFFF);
+                        wb_user_core_read_check(`ADDR_SPACE_SRAM3+(i*4),read_data,writemem[i],32'hFFFFFFFF);
+		    end
+
+		    // Cross-check Reducency address hold the failure address data
+		    // Is last Error inserted address are 0x10,0x20,0x30,0x40
+		    // So Address 0x1FC = Data[0x10], 0x1FD = Data[0x20]
+		    //    Address 0x1FE = Data[0x30], 0x1FF = Data[0x40]
+		    // Check 2kb SRAM1
+                    wb_user_core_read_check(`ADDR_SPACE_SRAM0 + (9'h1FC *4),read_data,writemem[9'h10],32'hFFFFFFFF);
+                    wb_user_core_read_check(`ADDR_SPACE_SRAM0 + (9'h1FD *4),read_data,writemem[9'h20],32'hFFFFFFFF);
+                    wb_user_core_read_check(`ADDR_SPACE_SRAM0 + (9'h1FE *4),read_data,writemem[9'h30],32'hFFFFFFFF);
+                    wb_user_core_read_check(`ADDR_SPACE_SRAM0 + (9'h1FF *4),read_data,writemem[9'h40],32'hFFFFFFFF);
+
+		    // Check 2kb SRAM2
+                    wb_user_core_read_check(`ADDR_SPACE_SRAM1 + (9'h1FC *4),read_data,writemem[9'h11],32'hFFFFFFFF);
+                    wb_user_core_read_check(`ADDR_SPACE_SRAM1 + (9'h1FD *4),read_data,writemem[9'h21],32'hFFFFFFFF);
+                    wb_user_core_read_check(`ADDR_SPACE_SRAM1 + (9'h1FE *4),read_data,writemem[9'h31],32'hFFFFFFFF);
+                    wb_user_core_read_check(`ADDR_SPACE_SRAM1 + (9'h1FF *4),read_data,writemem[9'h41],32'hFFFFFFFF);
+
+		    // Check 2kb SRAM3
+                    wb_user_core_read_check(`ADDR_SPACE_SRAM2 + (9'h1FC *4),read_data,writemem[9'h12],32'hFFFFFFFF);
+                    wb_user_core_read_check(`ADDR_SPACE_SRAM2 + (9'h1FD *4),read_data,writemem[9'h22],32'hFFFFFFFF);
+                    wb_user_core_read_check(`ADDR_SPACE_SRAM2 + (9'h1FE *4),read_data,writemem[9'h32],32'hFFFFFFFF);
+                    wb_user_core_read_check(`ADDR_SPACE_SRAM2 + (9'h1FF *4),read_data,writemem[9'h42],32'hFFFFFFFF);
+
+		    // Check 2kb SRAM4
+                    wb_user_core_read_check(`ADDR_SPACE_SRAM3 + (9'h1FC *4),read_data,writemem[9'h13],32'hFFFFFFFF);
+                    wb_user_core_read_check(`ADDR_SPACE_SRAM3 + (9'h1FD *4),read_data,writemem[9'h23],32'hFFFFFFFF);
+                    wb_user_core_read_check(`ADDR_SPACE_SRAM3 + (9'h1FE *4),read_data,writemem[9'h33],32'hFFFFFFFF);
+                    wb_user_core_read_check(`ADDR_SPACE_SRAM3 + (9'h1FF *4),read_data,writemem[9'h43],32'hFFFFFFFF);
+
+                end
+                begin
+                   // Loop for BIST TimeOut
+                   repeat (200000) @(posedge clock);
+                		// $display("+1000 cycles");
+                   test_fail = 1;
+                end
+                join_any
+                disable fork; //disable pending fork activity
+          	if(test_fail == 0) begin
+	    	    $display("Monitor: Step-5: BIST Test with Functional access test Passed");
+	        end else begin
+	    	    $display("Monitor: Step-5: BIST Test with Functional access test failed");
+		 end
+
+	    	$display("###################################################");
+	        $finish;
+	end
+
+wire USER_VDD1V8 = 1'b1;
+wire VSS = 1'b0;
+
+
+user_project_wrapper u_top(
+`ifdef USE_POWER_PINS
+    .vccd1(USER_VDD1V8),	// User area 1 1.8V supply
+    .vssd1(VSS),	// User area 1 digital ground
+`endif
+    .wb_clk_i        (clock),  // System clock
+    .user_clock2     (1'b1),  // Real-time clock
+    .wb_rst_i        (wb_rst_i),  // Regular Reset signal
+
+    .wbs_cyc_i   (wbd_ext_cyc_i),  // strobe/request
+    .wbs_stb_i   (wbd_ext_stb_i),  // strobe/request
+    .wbs_adr_i   (wbd_ext_adr_i),  // address
+    .wbs_we_i    (wbd_ext_we_i),  // write
+    .wbs_dat_i   (wbd_ext_dat_i),  // data output
+    .wbs_sel_i   (wbd_ext_sel_i),  // byte enable
+
+    .wbs_dat_o   (wbd_ext_dat_o),  // data input
+    .wbs_ack_o   (wbd_ext_ack_o),  // acknowlegement
+
+ 
+    // Logic Analyzer Signals
+    .la_data_in      ('1) ,
+    .la_data_out     (),
+    .la_oenb         ('0),
+ 
+
+    // IOs
+    .io_in          (io_in)  ,
+    .io_out         (io_out) ,
+    .io_oeb         (io_oeb) ,
+
+    .user_irq       () 
+
+);
+
+`ifndef GL // Drive Power for Hold Fix Buf
+    // All standard cell need power hook-up for functionality work
+    initial begin
+
+
+    end
+`endif    
+
+
+//-------------------------------------
+// Insert user defined number of fault 
+// -----------------------------------
+
+task insert_fault;
+input [3:0]  num_fault;
+input        fault_type; // 0 -> struck at 0 and 1 -> struck at 1
+input [31:0]  mbist_signature;
+reg [31:0] datain;
+reg [`SRAM_AD-1:0]  fail_addr1;
+reg [`SRAM_AD-1:0]  fail_addr2;
+reg [`SRAM_AD-1:0]  fail_addr3;
+reg [`SRAM_AD-1:0]  fail_addr4;
+integer j;
+begin
+   repeat (2) @(posedge clock);
+   // Remove the Bist Enable and Bist Run
+   wb_user_core_write(`ADDR_SPACE_GLBL+`GLBL_BIST_CTRL2,'h000);
+   // Remove WB and BIST RESET
+   wb_user_core_write(`ADDR_SPACE_WBHOST+`WBHOST_GLBL_CFG,'h001);
+   // Set the Bist Enable and Bist Run
+   wb_user_core_write(`ADDR_SPACE_GLBL+`GLBL_BIST_CTRL2,'h00000003);
+   // Remove WB and BIST RESET
+   wb_user_core_write(`ADDR_SPACE_WBHOST+`WBHOST_GLBL_CFG,'h003);
+   fork
+   begin
+      // Check for MBIST Done
+      read_data = 'h0;
+      while (read_data[0] != 1'b1) begin
+         wb_user_core_read(`ADDR_SPACE_GLBL+`GLBL_BIST_STAT,read_data);
+      end
+      // wait for some time for all the BIST to complete
+      repeat (1000) @(posedge clock);
+      // Check Is there is any BIST Error
+      // [0]   - Bist Done      
+      // [1]   - Bist Error     
+      // [2]   - Bist Correct   
+      // [3]   - Reserved
+      // [7:4] - Bist Error Cnt 
+      wb_user_core_read_check(`ADDR_SPACE_GLBL+`GLBL_BIST_STAT,read_data,mbist_signature[31:0],32'hFFFFFFFF);
+   end
+   // Insert  Error Insertion
+   begin
+      while(1) begin
+         repeat (1) @(posedge clock);
+         #1;
+
+         if(u_top.u_sram0_2kb.web0 == 1'b0 && 
+	   ((num_fault > 0 && u_top.u_sram0_2kb.addr0 == faultaddr[0]) ||
+	    (num_fault > 1 && u_top.u_sram0_2kb.addr0 == faultaddr[1]) ||
+	    (num_fault > 2 && u_top.u_sram0_2kb.addr0 == faultaddr[2]) ||
+	    (num_fault > 3 && u_top.u_sram0_2kb.addr0 == faultaddr[3]) ||
+	    (num_fault > 4 && u_top.u_sram0_2kb.addr0 == faultaddr[4]) ||
+	    (num_fault > 5 && u_top.u_sram0_2kb.addr0 == faultaddr[5]) ||
+	    (num_fault > 6 && u_top.u_sram0_2kb.addr0 == faultaddr[6]) ||
+	    (num_fault > 7 && u_top.u_sram0_2kb.addr0 == faultaddr[7])))
+             begin
+	   if(fault_type == 0) // Struck at 0
+	      force u_top.u_sram0_2kb.din0 = u_top.mem0_din_a  & 32'hFFFF_FFFE;
+	   else
+	      force u_top.u_sram0_2kb.din0 = u_top.mem0_din_a | 32'h1;
+   	   -> error_insert;
+         end else begin
+            release u_top.u_sram0_2kb.din0;
+         end
+
+         if(u_top.u_sram1_2kb.web0 == 1'b0 && 
+	   ((num_fault > 0 && u_top.u_sram1_2kb.addr0 == faultaddr[0]+1) ||
+	    (num_fault > 1 && u_top.u_sram1_2kb.addr0 == faultaddr[1]+1) ||
+	    (num_fault > 2 && u_top.u_sram1_2kb.addr0 == faultaddr[2]+1) ||
+	    (num_fault > 3 && u_top.u_sram1_2kb.addr0 == faultaddr[3]+1) ||
+	    (num_fault > 4 && u_top.u_sram1_2kb.addr0 == faultaddr[4]+1) ||
+	    (num_fault > 5 && u_top.u_sram1_2kb.addr0 == faultaddr[5]+1) ||
+	    (num_fault > 6 && u_top.u_sram1_2kb.addr0 == faultaddr[6]+1) ||
+	    (num_fault > 7 && u_top.u_sram1_2kb.addr0 == faultaddr[7]+1)))
+             begin
+	   if(fault_type == 0) // Struck at 0
+	      force u_top.u_sram1_2kb.din0 = u_top.mem1_din_a  & 32'hFFFF_FFFE;
+	   else
+	      force u_top.u_sram1_2kb.din0 = u_top.mem1_din_a | 32'h1;
+   	   -> error_insert;
+         end else begin
+            release u_top.u_sram1_2kb.din0;
+         end
+
+         if(u_top.u_sram2_2kb.web0 == 1'b0 && 
+	   ((num_fault > 0 && u_top.u_sram2_2kb.addr0 == faultaddr[0]+2) ||
+	    (num_fault > 1 && u_top.u_sram2_2kb.addr0 == faultaddr[1]+2) ||
+	    (num_fault > 2 && u_top.u_sram2_2kb.addr0 == faultaddr[2]+2) ||
+	    (num_fault > 3 && u_top.u_sram2_2kb.addr0 == faultaddr[3]+2) ||
+	    (num_fault > 4 && u_top.u_sram2_2kb.addr0 == faultaddr[4]+2) ||
+	    (num_fault > 5 && u_top.u_sram2_2kb.addr0 == faultaddr[5]+2) ||
+	    (num_fault > 6 && u_top.u_sram2_2kb.addr0 == faultaddr[6]+2) ||
+	    (num_fault > 7 && u_top.u_sram2_2kb.addr0 == faultaddr[7]+2)))
+             begin
+	   if(fault_type == 0) // Struck at 0
+	      force u_top.u_sram2_2kb.din0 = u_top.mem2_din_a  & 32'hFFFF_FFFE;
+	   else
+	      force u_top.u_sram2_2kb.din0 = u_top.mem2_din_a | 32'h1;
+   	   -> error_insert;
+         end else begin
+            release u_top.u_sram2_2kb.din0;
+         end
+
+         if(u_top.u_sram3_2kb.web0 == 1'b0 && 
+	   ((num_fault > 0 && u_top.u_sram3_2kb.addr0 == faultaddr[0]+3) ||
+	    (num_fault > 1 && u_top.u_sram3_2kb.addr0 == faultaddr[1]+3) ||
+	    (num_fault > 2 && u_top.u_sram3_2kb.addr0 == faultaddr[2]+3) ||
+	    (num_fault > 3 && u_top.u_sram3_2kb.addr0 == faultaddr[3]+3) ||
+	    (num_fault > 4 && u_top.u_sram3_2kb.addr0 == faultaddr[4]+3) ||
+	    (num_fault > 5 && u_top.u_sram3_2kb.addr0 == faultaddr[5]+3) ||
+	    (num_fault > 6 && u_top.u_sram3_2kb.addr0 == faultaddr[6]+3) ||
+	    (num_fault > 7 && u_top.u_sram3_2kb.addr0 == faultaddr[7]+3)))
+             begin
+	   if(fault_type == 0) // Struck at 0
+	      force u_top.u_sram3_2kb.din0 = u_top.mem3_din_a  & 32'hFFFF_FFFE;
+	   else
+	      force u_top.u_sram3_2kb.din0 = u_top.mem3_din_a | 32'h1;
+   	   -> error_insert;
+         end else begin
+            release u_top.u_sram3_2kb.din0;
+         end
+
+      end
+   end
+   begin
+      // Loop for BIST TimeOut
+      repeat (200000) @(posedge clock);
+   		// $display("+1000 cycles");
+      test_fail = 1;
+   end
+   join_any
+   disable fork; //disable pending fork activity
+
+   // Read Back the Failure Address and cross-check all the 4 MBIST
+   for(j=0; j < `NO_SRAM; j=j+1) begin
+      fail_addr1 = faultaddr[0]+j;
+      fail_addr2 = faultaddr[1]+j;
+      fail_addr3 = faultaddr[2]+j;
+      fail_addr4 = faultaddr[3]+j;
+
+      // Select the Serial SDI/SDO interface
+      wb_user_core_write(`ADDR_SPACE_GLBL+`GLBL_BIST_CTRL1,j); 
+      if(num_fault == 1)
+          wb_user_core_read_check(`ADDR_SPACE_GLBL+`GLBL_BIST_SRLDATA,read_data,{16'h0,7'h0,fail_addr1},32'h0000_FFFF);
+      if(num_fault == 2)
+          wb_user_core_read_check(`ADDR_SPACE_GLBL+`GLBL_BIST_SRLDATA,read_data,{7'h0,fail_addr2,7'h0,fail_addr1},32'hFFFF_FFFF);
+      if(num_fault == 3) begin
+          wb_user_core_read_check(`ADDR_SPACE_GLBL+`GLBL_BIST_SRLDATA,read_data,{7'h0,fail_addr2,7'h0,fail_addr1},32'hFFFF_FFFF);
+          wb_user_core_read_check(`ADDR_SPACE_GLBL+`GLBL_BIST_SRMDATA,read_data,{16'h0,7'h0,fail_addr3},32'h0000_FFFF);
+      end
+      if(num_fault >= 4) begin
+          wb_user_core_read_check(`ADDR_SPACE_GLBL+`GLBL_BIST_SRLDATA,read_data,{7'h0,fail_addr2,7'h0,fail_addr1},32'hFFFF_FFFF);
+          wb_user_core_read_check(`ADDR_SPACE_GLBL+`GLBL_BIST_SRMDATA,read_data,{7'h0,faultaddr[3]+j,7'h0,fail_addr3},32'hFFFF_FFFF);
+      end
+   end
+end
+endtask
+
+
+task wb_user_core_write;
+input [31:0] address;
+input [31:0] data;
+begin
+  repeat (1) @(posedge clock);
+  #1;
+  wbd_ext_adr_i =address;  // address
+  wbd_ext_we_i  ='h1;  // write
+  wbd_ext_dat_i =data;  // data output
+  wbd_ext_sel_i ='hF;  // byte enable
+  wbd_ext_cyc_i ='h1;  // strobe/request
+  wbd_ext_stb_i ='h1;  // strobe/request
+  wait(wbd_ext_ack_o == 1);
+  repeat (1) @(posedge clock);
+  #1;
+  wbd_ext_cyc_i ='h0;  // strobe/request
+  wbd_ext_stb_i ='h0;  // strobe/request
+  wbd_ext_adr_i ='h0;  // address
+  wbd_ext_we_i  ='h0;  // write
+  wbd_ext_dat_i ='h0;  // data output
+  wbd_ext_sel_i ='h0;  // byte enable
+  $display("STATUS: WB USER ACCESS WRITE Address : 0x%x, Data : 0x%x",address,data);
+  repeat (2) @(posedge clock);
+end
+endtask
+
+task  wb_user_core_read;
+input [31:0] address;
+output [31:0] data;
+reg    [31:0] data;
+begin
+  repeat (1) @(posedge clock);
+  #1;
+  wbd_ext_adr_i =address;  // address
+  wbd_ext_we_i  ='h0;  // write
+  wbd_ext_dat_i ='0;  // data output
+  wbd_ext_sel_i ='hF;  // byte enable
+  wbd_ext_cyc_i ='h1;  // strobe/request
+  wbd_ext_stb_i ='h1;  // strobe/request
+  wait(wbd_ext_ack_o == 1);
+  #1;
+  data  = wbd_ext_dat_o;  
+  repeat (1) @(posedge clock);
+  #1;
+  wbd_ext_cyc_i ='h0;  // strobe/request
+  wbd_ext_stb_i ='h0;  // strobe/request
+  wbd_ext_adr_i ='h0;  // address
+  wbd_ext_we_i  ='h0;  // write
+  wbd_ext_dat_i ='h0;  // data output
+  wbd_ext_sel_i ='h0;  // byte enable
+  //$display("STATUS: WB USER ACCESS READ  Address : 0x%x, Data : 0x%x",address,data);
+  repeat (2) @(posedge clock);
+end
+endtask
+
+task  wb_user_core_read_check;
+input [31:0] address;
+output [31:0] data;
+input [31:0] cmp_data;
+input [31:0] cmp_mask;
+reg    [31:0] data;
+begin
+  repeat (1) @(posedge clock);
+  #1;
+  wbd_ext_adr_i =address;  // address
+  wbd_ext_we_i  ='h0;  // write
+  wbd_ext_dat_i ='0;  // data output
+  wbd_ext_sel_i ='hF;  // byte enable
+  wbd_ext_cyc_i ='h1;  // strobe/request
+  wbd_ext_stb_i ='h1;  // strobe/request
+  wait(wbd_ext_ack_o == 1);
+  #1;
+  data  = wbd_ext_dat_o;  
+  repeat (1) @(posedge clock);
+  #1;
+  wbd_ext_cyc_i ='h0;  // strobe/request
+  wbd_ext_stb_i ='h0;  // strobe/request
+  wbd_ext_adr_i ='h0;  // address
+  wbd_ext_we_i  ='h0;  // write
+  wbd_ext_dat_i ='h0;  // data output
+  wbd_ext_sel_i ='h0;  // byte enable
+  if((data & cmp_mask) !== (cmp_data & cmp_mask) ) begin
+     $display("ERROR : WB USER ACCESS READ  Address : 0x%x, Exd: 0x%x Rxd: 0x%x ",address,(cmp_data & cmp_mask),(data & cmp_mask));
+     test_fail = 1;
+  end else begin
+     $display("STATUS: WB USER ACCESS READ  Address : 0x%x, Data : 0x%x",address,(data & cmp_mask));
+  end
+  repeat (2) @(posedge clock);
+end
+endtask
+
+
+endmodule
+`default_nettype wire
diff --git a/verilog/includes/includes.gl.caravel_user_project b/verilog/includes/includes.gl.caravel_user_project
new file mode 100644
index 0000000..1ddeecc
--- /dev/null
+++ b/verilog/includes/includes.gl.caravel_user_project
@@ -0,0 +1,231 @@
+# Caravel user project includes
++define+UNIT_DELAY=#0.2
++incdir+$(USER_PROJECT_VERILOG)/rtl/
++incdir+$(USER_PROJECT_VERILOG)/rtl/i2cm/src/includes
++incdir+$(USER_PROJECT_VERILOG)/rtl/usb1_host/src/includes
++incdir+$(USER_PROJECT_VERILOG)/rtl/yifive/ycr2c/src/includes
++incdir+$(USER_PROJECT_VERILOG)/dv/common/bfm
++incdir+$(USER_PROJECT_VERILOG)/dv/common/model
++incdir+$(USER_PROJECT_VERILOG)/dv/common/agents
+$(USER_PROJECT_VERILOG)/rtl/user_reg_map.v
+
+##################################################
+### USER PROJECT RTL
+##################################################
+#ifdef USER_RTL
+#-v $(USER_PROJECT_VERILOG)/rtl/user_project_wrapper.v
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/top/ycr1_top_wb.sv
+#else
+$(USER_PROJECT_VERILOG)/gl/user_project_wrapper.v
+#endif
+
+##################################################
+### YCR INTERFACE
+##################################################
+#ifdef YCR_INTF_RTL
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/cache/src/core/dcache_top.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/cache/src/core/dcache_tag_fifo.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/cache/src/core/icache_tag_fifo.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/cache/src/core/icache_top.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/cache/src/core/icache_app_fsm.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/lib/ycr_async_wbb.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/top/ycr_dmem_wb.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/top/ycr_intf.sv
+#else
+$(USER_PROJECT_VERILOG)/gl/ycr_intf.v
+#endif
+##################################################
+### YCR INTER CONNECT
+##################################################
+#ifdef YCR_ICONNECT_RTL
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/top/ycr_iconnect.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/top/ycr_cross_bar.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/top/ycr_router.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/top/ycr_dmem_router.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/top/ycr_tcm.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/top/ycr_timer.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/lib/ycr_arb.sv
+#else
+$(USER_PROJECT_VERILOG)/gl/ycr_iconnect.v
+#endif
+
+
+##################################################
+### YCR CORE
+##################################################
+#ifdef YCR_CORE_RTL
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/core/pipeline/ycr_pipe_top.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/core/ycr_core_top.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/core/ycr_dm.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/core/ycr_tapc_synchronizer.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/core/ycr_clk_ctrl.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/core/ycr_scu.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/core/ycr_tapc.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/core/ycr_tapc_shift_reg.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/core/ycr_dmi.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/core/pipeline/ycr_pipe_ifu.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/core/pipeline/ycr_pipe_idu.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/core/pipeline/ycr_pipe_exu.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/core/pipeline/ycr_pipe_mprf.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/core/pipeline/ycr_pipe_csr.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/core/pipeline/ycr_pipe_ialu.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/core/pipeline/ycr_pipe_mul.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/core/pipeline/ycr_pipe_div.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/core/pipeline/ycr_pipe_lsu.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/core/pipeline/ycr_pipe_hdu.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/core/pipeline/ycr_pipe_tdu.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr1c/src/core/pipeline/ycr_ipic.sv
+#else
+$(USER_PROJECT_VERILOG)/gl/ycr_core_top.v
+#endif
+##################################################
+### QSPIM
+##################################################
+#ifdef QSPIM_RTL
+#-v $(USER_PROJECT_VERILOG)/rtl/qspim/src/qspim_top.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/qspim/src/qspim_if.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/qspim/src/qspim_regs.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/qspim/src/qspim_fifo.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/qspim/src/qspim_clkgen.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/qspim/src/qspim_ctrl.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/qspim/src/qspim_rx.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/qspim/src/qspim_tx.sv
+#else
+$(USER_PROJECT_VERILOG)/gl/qspim_top.v
+#endif
+
+
+##################################################
+### WB_HOST
+##################################################
+#ifdef WB_HOST_RTL
+#-v $(USER_PROJECT_VERILOG)/rtl/clk_skew_adjust/src/clk_skew_adjust.v
+#-v $(USER_PROJECT_VERILOG)/rtl/wb_host/src/wb_host.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/wb_host/src/wb_reset_fsm.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/lib/async_fifo.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/lib/async_wb.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/lib/clk_ctl.v
+#-v $(USER_PROJECT_VERILOG)/rtl/lib/ctech_cells.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/lib/registers.v
+#-v $(USER_PROJECT_VERILOG)/rtl/lib/reset_sync.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/lib/async_reg_bus.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/lib/double_sync_low.v
+#-v $(USER_PROJECT_VERILOG)/rtl/lib/clk_div8.v
+#-v $(USER_PROJECT_VERILOG)/rtl/lib/async_fifo_th.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/wb_interconnect/src/wb_arb.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/uart/src/uart_txfsm.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/uart/src/uart_rxfsm.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/uart2wb/src/uart2wb.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/uart2wb/src/uart2_core.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/uart2wb/src/uart_msg_handler.v
+#-v $(USER_PROJECT_VERILOG)/rtl/sspis/src/sspis_top.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/sspis/src/sspis_if.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/sspis/src/spi2wb.sv
+#else
+$(USER_PROJECT_VERILOG)/gl/wb_host.v
+#endif
+
+##################################################
+### PINMUX
+##################################################
+#ifdef PINMUX_RTL
+#-v $(USER_PROJECT_VERILOG)/rtl/pinmux/src/pinmux_top.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/pinmux/src/pinmux.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/pinmux/src/glbl_reg.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/pinmux/src/gpio_top.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/pinmux/src/gpio_intr.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/pinmux/src/gpio_reg.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/pinmux/src/pwm_top.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/pinmux/src/pwm_reg.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/pinmux/src/pwm.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/pinmux/src/timer_top.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/pinmux/src/timer_reg.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/pinmux/src/timer.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/pinmux/src/semaphore_reg.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/pinmux/src/ws281x_top.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/pinmux/src/ws281x_driver.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/pinmux/src/ws281x_reg.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/pinmux/src/strap_ctrl.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/pinmux/src/glbl_rst_reg.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/lib/pulse_gen_type1.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/lib/pulse_gen_type2.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/lib/registers.v
+#-v $(USER_PROJECT_VERILOG)/rtl/lib/ctech_cells.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/lib/reset_sync.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/lib/sync_fifo.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/lib/clk_ctl.v
+#-v $(USER_PROJECT_VERILOG)/rtl/lib/clk_skew_adjust.gv
+#else
+$(USER_PROJECT_VERILOG)/gl/pinmux_top.v
+#endif
+
+##################################################
+### UART
+##################################################
+#ifdef UART_RTL
+#-v $(USER_PROJECT_VERILOG)/rtl/uart/src/uart_core.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/uart/src/uart_cfg.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/i2cm/src/core/i2cm_bit_ctrl.v
+#-v $(USER_PROJECT_VERILOG)/rtl/i2cm/src/core/i2cm_byte_ctrl.v
+#-v $(USER_PROJECT_VERILOG)/rtl/i2cm/src/core/i2cm_top.v
+#-v $(USER_PROJECT_VERILOG)/rtl/usb1_host/src/core/usbh_core.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/usb1_host/src/core/usbh_crc16.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/usb1_host/src/core/usbh_crc5.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/usb1_host/src/core/usbh_fifo.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/usb1_host/src/core/usbh_sie.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/usb1_host/src/phy/usb_fs_phy.v
+#-v $(USER_PROJECT_VERILOG)/rtl/usb1_host/src/phy/usb_transceiver.v
+#-v $(USER_PROJECT_VERILOG)/rtl/usb1_host/src/top/usb1_host.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/sspim/src/sspim_top.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/sspim/src/sspim_ctl.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/sspim/src/sspim_if.sv 
+#-v $(USER_PROJECT_VERILOG)/rtl/sspim/src/sspim_cfg.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/sspim/src/sspim_clkgen.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/uart_i2c_usb_spi/src/uart_i2c_usb_spi.sv
+#else
+$(USER_PROJECT_VERILOG)/gl/uart_i2c_usb_spi_top.v
+#endif
+
+##################################################
+### WISHBONE INTERCONNECT
+##################################################
+#ifdef WB_INTER_RTL
+#-v $(USER_PROJECT_VERILOG)/rtl/wb_interconnect/src/wb_slave_port.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/wb_interconnect/src/wb_interconnect.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/lib/sync_wbb.sv
+#else
+$(USER_PROJECT_VERILOG)/gl/wb_interconnect.v
+#endif
+
+#-v $(USER_PROJECT_VERILOG)/rtl/wb_interconnect/src/wb_arb.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/uart/src/uart_txfsm.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/uart/src/uart_rxfsm.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr2c/src/top/ycr_sram_mux.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr2c/src/core/primitives/ycr_reset_cells.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/yifive/ycr2c/src/top/ycr_req_retiming.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/lib/sync_wbb.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/lib/sync_fifo2.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/lib/async_fifo_th.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/lib/clk_skew_adjust.gv
+#-v $(USER_PROJECT_VERILOG)/rtl/lib/reset_sync.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/lib/ctech_cells.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/lib/async_fifo.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/lib/async_wb.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/lib/async_reg_bus.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/lib/clk_ctl.v
+#-v $(USER_PROJECT_VERILOG)/rtl/lib/registers.v
+#-v $(USER_PROJECT_VERILOG)/rtl/lib/double_sync_low.v
+#-v $(USER_PROJECT_VERILOG)/rtl/lib/pulse_gen_type1.sv
+#-v $(USER_PROJECT_VERILOG)/rtl/lib/pulse_gen_type2.sv
+
+$(USER_PROJECT_VERILOG)/gl/aes_top.v
+$(USER_PROJECT_VERILOG)/gl/fpu_wrapper.v
+$(USER_PROJECT_VERILOG)/gl/bus_rep_south.v
+$(USER_PROJECT_VERILOG)/gl/bus_rep_north.v
+$(USER_PROJECT_VERILOG)/gl/bus_rep_east.v
+$(USER_PROJECT_VERILOG)/gl/bus_rep_west.v
+$(USER_PROJECT_VERILOG)/gl/peri_top.v
+
+-v $(USER_PROJECT_VERILOG)/rtl/dg_pll/src/dg_pll.v
+
+-v $(USER_PROJECT_VERILOG)/rtl/dac/src/dac_top.v
diff --git a/verilog/includes/includes.gl.lib b/verilog/includes/includes.gl.lib
new file mode 100644
index 0000000..a047636
--- /dev/null
+++ b/verilog/includes/includes.gl.lib
@@ -0,0 +1,13 @@
+###########################################################
+# STD CELLS - they need to be below the defines.v files 
+###########################################################
+-v $(PDK_ROOT)/$(PDK)/libs.ref/sky130_fd_io/verilog/sky130_fd_io.v
+-v $(PDK_ROOT)/$(PDK)/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v
+-v $(PDK_ROOT)/$(PDK)/libs.ref/sky130_fd_sc_hd/verilog/primitives.v
+-v $(PDK_ROOT)/$(PDK)/libs.ref/sky130_fd_sc_hd/verilog/sky130_fd_sc_hd.v
+-v $(PDK_ROOT)/$(PDK)/libs.ref/sky130_fd_sc_hvl/verilog/primitives.v
+-v $(PDK_ROOT)/$(PDK)/libs.ref/sky130_fd_sc_hvl/verilog/sky130_fd_sc_hvl.v
+
+#$(USER_PROJECT_VERILOG)/gl/digital_pll.v
+-v $(USER_PROJECT_VERILOG)/rtl/dg_pll/src/digital_pll_controller.v
+-v $(USER_PROJECT_VERILOG)/rtl/dg_pll/src/ring_osc2x13.v
diff --git a/verilog/includes/includes.rtl.caravel_user_project b/verilog/includes/includes.rtl.caravel_user_project
new file mode 100644
index 0000000..2f21e49
--- /dev/null
+++ b/verilog/includes/includes.rtl.caravel_user_project
@@ -0,0 +1,94 @@
+# Caravel user project includes
++incdir+$(USER_PROJECT_VERILOG)/rtl/
++incdir+$(USER_PROJECT_VERILOG)/dv/common/bfm
++incdir+$(USER_PROJECT_VERILOG)/dv/common/model
++incdir+$(USER_PROJECT_VERILOG)/dv/common/agents
+$(USER_PROJECT_VERILOG)/rtl/user_reg_map.v
+
+#MBIST Wrapper
++incdir+$(USER_PROJECT_VERILOG)/rtl/mbist/include/
+$(USER_PROJECT_VERILOG)/rtl/mbist_wrapper/src/mbist_wrapper.sv  
+$(USER_PROJECT_VERILOG)/rtl/mbist_wrapper/src/mbist_wb.sv  
+
+## MBIST CORE
+$(USER_PROJECT_VERILOG)/rtl/mbist/src/top/mbist_top.sv 
+$(USER_PROJECT_VERILOG)/rtl/mbist/src/core/mbist_sti_sel.sv
+$(USER_PROJECT_VERILOG)/rtl/mbist/src/core/mbist_pat_sel.sv
+$(USER_PROJECT_VERILOG)/rtl/mbist/src/core/mbist_op_sel.sv
+$(USER_PROJECT_VERILOG)/rtl/mbist/src/core/mbist_fsm.sv
+$(USER_PROJECT_VERILOG)/rtl/mbist/src/core/mbist_data_cmp.sv
+$(USER_PROJECT_VERILOG)/rtl/mbist/src/core/mbist_repair_addr.sv
+$(USER_PROJECT_VERILOG)/rtl/mbist/src/core/mbist_mux.sv
+$(USER_PROJECT_VERILOG)/rtl/mbist/src/core/mbist_mem_wrapper.sv
+$(USER_PROJECT_VERILOG)/rtl/mbist/src/core/mbist_addr_gen.sv
+
+## WB Inter connect
+$(USER_PROJECT_VERILOG)/rtl/wb_interconnect/src/wb_interconnect.sv
+$(USER_PROJECT_VERILOG)/rtl/wb_interconnect/src/wb_slave_port.sv
+
+## WB HOST
+$(USER_PROJECT_VERILOG)/rtl/wb_host/src/wb_host.sv
+
+## LBIST
+$(USER_PROJECT_VERILOG)/rtl/lbist/src/lbist_top.sv
+$(USER_PROJECT_VERILOG)/rtl/lbist/src/lbist_core.sv
+$(USER_PROJECT_VERILOG)/rtl/lbist/src/lbist_reg.sv
+
+## UART MASTER
+$(USER_PROJECT_VERILOG)/rtl/uart/src/uart_txfsm.sv
+$(USER_PROJECT_VERILOG)/rtl/uart/src/uart_rxfsm.sv
+$(USER_PROJECT_VERILOG)/rtl/uart2wb/src/uart2wb.sv
+$(USER_PROJECT_VERILOG)/rtl/uart2wb/src/uart2_core.sv
+$(USER_PROJECT_VERILOG)/rtl/uart2wb/src/uart_msg_handler.v
+
+
+## Pinmux reg
+$(USER_PROJECT_VERILOG)/rtl/pinmux/src/pinmux_top.sv
+$(USER_PROJECT_VERILOG)/rtl/glbl/src/glbl_cfg.sv
+
+### GMAC Block
+$(USER_PROJECT_VERILOG)/rtl/mac_wrapper/src/mac_wrapper.sv
+$(USER_PROJECT_VERILOG)/rtl/gmac/top/g_mac_top.v
+$(USER_PROJECT_VERILOG)/rtl/gmac/mac/g_rx_top.v
+$(USER_PROJECT_VERILOG)/rtl/gmac/mac/g_deferral_rx.v
+$(USER_PROJECT_VERILOG)/rtl/gmac/mac/g_cfg_mgmt.v
+$(USER_PROJECT_VERILOG)/rtl/gmac/mac/dble_reg.v
+$(USER_PROJECT_VERILOG)/rtl/gmac/mac/s2f_sync.v
+$(USER_PROJECT_VERILOG)/rtl/gmac/mac/g_rx_fsm.v
+$(USER_PROJECT_VERILOG)/rtl/gmac/mac/g_mac_core.v
+$(USER_PROJECT_VERILOG)/rtl/gmac/mac/byte_reg.v
+$(USER_PROJECT_VERILOG)/rtl/gmac/mac/g_tx_top.v
+$(USER_PROJECT_VERILOG)/rtl/gmac/mac/g_tx_fsm.v
+$(USER_PROJECT_VERILOG)/rtl/gmac/mac/g_mii_intf.v
+$(USER_PROJECT_VERILOG)/rtl/gmac/mac/g_md_intf.v
+$(USER_PROJECT_VERILOG)/rtl/gmac/mac/g_deferral.v
+$(USER_PROJECT_VERILOG)/rtl/gmac/ctrl/eth_parser.v
+$(USER_PROJECT_VERILOG)/rtl/gmac/crc32/g_rx_crc32.v
+$(USER_PROJECT_VERILOG)/rtl/gmac/crc32/g_tx_crc32.v
+
+#COMMON FILES
+$(USER_PROJECT_VERILOG)/rtl/lib/clk_skew_adjust.gv 
+$(USER_PROJECT_VERILOG)/rtl/lib/ctech_cells.sv 
+$(USER_PROJECT_VERILOG)/rtl/lib/reset_sync.sv  
+$(USER_PROJECT_VERILOG)/rtl/lib/ser_shift.sv
+$(USER_PROJECT_VERILOG)/rtl/lib/wb_stagging.sv
+$(USER_PROJECT_VERILOG)/rtl/lib/async_fifo.sv
+$(USER_PROJECT_VERILOG)/rtl/lib/async_wb.sv
+$(USER_PROJECT_VERILOG)/rtl/lib/clk_ctl.v
+$(USER_PROJECT_VERILOG)/rtl/lib/registers.v
+$(USER_PROJECT_VERILOG)/rtl/lib/async_reg_bus.sv
+$(USER_PROJECT_VERILOG)/rtl/lib/clk_gate.sv
+$(USER_PROJECT_VERILOG)/rtl/lib/crc_32.sv
+$(USER_PROJECT_VERILOG)/rtl/lib/double_sync_low.v 
+$(USER_PROJECT_VERILOG)/rtl/lib/wb_arb.sv
+$(USER_PROJECT_VERILOG)/rtl/lib/ser_inf_32b.sv
+$(USER_PROJECT_VERILOG)/rtl/lib/ser_rd_inf_64b.sv
+$(USER_PROJECT_VERILOG)/rtl/lib/stat_counter.v
+$(USER_PROJECT_VERILOG)/rtl/lib/toggle_sync.v
+$(USER_PROJECT_VERILOG)/rtl/lib/wb_rd_mem2mem.v
+$(USER_PROJECT_VERILOG)/rtl/lib/wb_wr_mem2mem.v 
+$(USER_PROJECT_VERILOG)/rtl/lib/g_dpath_ctrl.v
+$(USER_PROJECT_VERILOG)/rtl/lib/sync_wbb.sv
+$(USER_PROJECT_VERILOG)/rtl/lib/sync_fifo2.sv
+
+$(USER_PROJECT_VERILOG)/rtl/user_project_wrapper.v
diff --git a/verilog/includes/includes.rtl.lib b/verilog/includes/includes.rtl.lib
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/verilog/includes/includes.rtl.lib
diff --git a/verilog/rtl/digital_core.v b/verilog/rtl/digital_core.v
deleted file mode 100644
index c57d82c..0000000
--- a/verilog/rtl/digital_core.v
+++ /dev/null
@@ -1,738 +0,0 @@
-
-`include "top_defines.v"
-module digital_core  (
-
-             reset_n                ,
-             scan_mode              ,
-             scan_enable             ,
-             fastsim_mode           ,
-             mastermode             ,
-             xtal_clk               ,
-             clkout                 ,
-             reset_out_n            ,
-
-        // Reg Bus Interface Signal
-             ext_reg_cs             ,
-             ext_reg_tid            ,
-             ext_reg_wr             ,
-             ext_reg_addr           ,
-             ext_reg_wdata          ,
-             ext_reg_be             ,
-
-            // Outputs
-             ext_reg_rdata          ,
-             ext_reg_ack            ,
-
-
-          // Line Side Interface TX Path
-             phy_tx_en              ,
-             phy_txd                ,
-             phy_tx_clk             ,
-
-          // Line Side Interface RX Path
-             phy_rx_clk             ,
-             phy_rx_dv              ,
-             phy_rxd                ,
-
-          //MDIO interface
-             mdio_clk               ,
-             mdio_in                ,
-             mdio_out               ,
-             mdio_out_en            ,
-
-
-       // UART Line Interface
-             si                     ,
-             so                     ,
-
-
-             spi_sck                ,
-             spi_so                 ,
-             spi_si                 ,
-             spi_cs_n               ,
-
-
-         // External ROM interface
-             wb_xrom_adr            ,
-             wb_xrom_ack            ,
-             wb_xrom_err            ,
-             wb_xrom_wr             ,
-             wb_xrom_rdata          ,
-             wb_xrom_wdata          ,
-             
-             wb_xrom_stb            ,
-             wb_xrom_cyc            ,
-
-         // External RAM interface
-             wb_xram_adr            ,
-             wb_xram_ack            ,
-             wb_xram_err            ,
-             wb_xram_wr             ,
-             wb_xram_be             ,
-             wb_xram_rdata          ,
-             wb_xram_wdata          ,
-             
-             wb_xram_stb            ,
-             wb_xram_cyc,
-
-             ea_in
-
-
-
-        );
-
-
-//----------------------------------------
-// Global Clock Defination
-//----------------------------------------
-input            reset_n               ; // Active Low Reset           
-input            scan_mode             ; // scan mode
-input            scan_enable           ; // scan enable
-input            fastsim_mode          ; // Fast Sim Mode
-input            mastermode            ; // 1 : Risc master mode
-
-input            xtal_clk              ; // xtal clock 25Mhz
-output           clkout                ; // clock output
-output           reset_out_n           ; // clock output
-
-//---------------------------------
-// Reg Bus Interface Signal
-//---------------------------------
-input            ext_reg_cs            ;
-input            ext_reg_wr            ;
-input [3:0]      ext_reg_tid           ;
-input [14:0]     ext_reg_addr          ;
-input [31:0]     ext_reg_wdata         ;
-input [3:0]      ext_reg_be            ;
-
-// Outputs
-output [31:0]    ext_reg_rdata         ;
-output           ext_reg_ack           ;
-
-//----------------------------------------
-// MAC Line Side Interface TX Path
-//----------------------------------------
-output           phy_tx_en              ; // MAC Tx Enable
-output [7:0]     phy_txd                ; // MAC Tx Data
-input           phy_tx_clk             ; // MAC Tx Clock
-
-//----------------------------------------
-// MAC Line Side Interface RX Path
-//----------------------------------------
-input           phy_rx_clk             ; // MAC Rx Clock
-input           phy_rx_dv              ; // MAC Rx Dv
-input [7:0]     phy_rxd                ; // MAC Rxd
-
-//----------------------------------------
-// MDIO interface
-//----------------------------------------
-output           mdio_clk              ; // MDIO Clock
-input            mdio_in               ; // MDIO Data
-output           mdio_out              ; // MDIO Data
-output           mdio_out_en           ; // MDIO Data
-
-
-//----------------------------------------
-// UART Line Interface
-//----------------------------------------
-input            si                     ; // serial in
-output           so                     ; // serial out
-
-//----------------------------------------
-// SPI Line Interface
-//----------------------------------------
-
-output           spi_sck                ; // clock
-output           spi_so                 ; // data out
-input            spi_si                 ; // data in
-output  [3:0]    spi_cs_n               ; // chip select
-
-//----------------------------------------
-// 8051 core ROM related signals
-//---------------------------------------
-output [15:0]    wb_xrom_adr            ; // instruction address
-input            wb_xrom_ack            ; // instruction acknowlage
-output           wb_xrom_err            ; // instruction error
-output           wb_xrom_wr             ; // instruction error
-input  [31:0]    wb_xrom_rdata          ; // rom data input
-output [31:0]    wb_xrom_wdata          ; // rom data input
-
-output           wb_xrom_stb            ; // instruction strobe
-output           wb_xrom_cyc            ; // instruction cycle
-
-
-//----------------------------------------
-// 8051 core RAM related signals
-//---------------------------------------
-output [15:0]    wb_xram_adr            ; // data-ram address
-input            wb_xram_ack            ; // data-ram acknowlage
-output           wb_xram_err            ; // data-ram error
-output           wb_xram_wr             ; // data-ram error
-output [3:0]     wb_xram_be             ; // Byte enable
-input  [31:0]    wb_xram_rdata          ; // ram data input
-output [31:0]    wb_xram_wdata          ; // ram data input
-
-output           wb_xram_stb            ; // data-ram strobe
-output           wb_xram_cyc            ; // data-ram cycle
-
-
-input            ea_in                  ; // input for external access (ea signal)
-                                          // ea=0 program is in external rom
-                                          // ea=1 program is in internal rom
-//---------------------------------------------
-// 8051 Instruction ROM interface
-//---------------------------------------------
-wire    [15:0]   wbi_risc_adr;
-wire    [31:0]   wbi_risc_rdata;
-
-
-//-----------------------------
-// MAC Related wire Decleration
-//-----------------------------
-wire [8:0]       app_rxfifo_rddata_o    ;
-wire [31:0]      app_rx_desc_data       ;
-wire             mdio_out_en            ;
-wire             mdio_out               ;
-wire             gen_resetn             ;
-
-
-//---------------------------------------------
-// 8051 Instruction RAM interface
-//---------------------------------------------
-wire    [15:0]   wbd_risc_adr           ;
-wire    [7:0]    wbd_risc_rdata         ;
-wire    [7:0]    wbd_risc_wdata         ;
-           
-wire    [14:0]   reg_mac_addr           ;
-wire    [31:0]   reg_mac_wdata          ;
-wire    [3:0]    reg_mac_be             ;
-wire    [31:0]   reg_mac_rdata          ;
-wire             reg_mac_ack            ;
-
-wire    [14:0]   reg_uart_addr          ;
-wire    [31:0]   reg_uart_wdata         ;
-wire    [3:0]    reg_uart_be            ;
-wire    [31:0]   reg_uart_rdata         ;
-wire             reg_uart_ack           ;
-                                          
-wire    [14:0]   reg_spi_addr           ;
-wire    [31:0]   reg_spi_wdata          ;
-wire    [3:0]    reg_spi_be             ;
-wire    [31:0]   reg_spi_rdata          ;
-wire             reg_spi_ack            ;
-
-wire    [3:0]    wb_xrom_be            ;
-wire    [3:0]    wb_xram_be            ;
-
-wire    [7:0]    p0              ;
-wire    [7:0]    p1              ;
-wire    [7:0]    p2              ;
-wire    [7:0]    p3              ;
-
-wire [3:0]       wbgt_taddr      ;
-wire [31:0]      wbgt_din        ;
-wire [31:0]      wbgt_dout       ;
-wire [12:0]      wbgt_addr       ;
-wire [3:0]       wbgt_be         ;
-wire             wbgt_we         ;
-wire             wbgt_ack        ;
-wire             wbgt_stb        ;
-wire             wbgt_cyc        ;
-
-wire [3:0]       wbgr_taddr      ;
-wire [31:0]      wbgr_din        ;
-wire [31:0]      wbgr_dout       ;
-wire [12:0]      wbgr_addr       ;
-wire [3:0]       wbgr_be         ;
-wire             wbgr_we         ;
-wire             wbgr_ack        ;
-wire             wbgr_stb        ;
-wire             wbgr_cyc        ;
-
-wire [8:0]       app_txfifo_wrdata_i;
-wire [15:0]      app_txfifo_addr;
-wire [15:0]      app_rxfifo_addr;
-wire [3:0]       tx_qcnt    ;
-wire [3:0]       rx_qcnt    ;
-
-wire tx_q_empty  = (tx_qcnt == 0);
-wire rx_q_empty  = (rx_qcnt == 0);
-
-wire [31:0] reg_rdata = (reg_mac_ack)  ? reg_mac_rdata :
-                   (reg_uart_ack) ? reg_uart_rdata :
-                   (reg_spi_ack)  ? reg_spi_rdata : 'h0;
-
-wire reg_ack = reg_mac_ack | reg_uart_ack | reg_spi_ack;
-
-
-assign reset_out_n = gen_resetn;
-
-
-assign wb_xram_adr[15]    = 0;
-assign wb_xram_adr[1:0]   = 2'b00;
-assign wb_xrom_adr[15:13] = 0;
-
-wire [9:0] cfg_tx_buf_qbase_addr;
-wire [9:0] cfg_rx_buf_qbase_addr;
-
-// QCounter Inc/dec generation
-
-wire tx_qcnt_inc = (cfg_tx_buf_qbase_addr == wb_xram_adr[15:6]) & wb_xram_stb & wb_xram_wr & wb_xram_ack && (wb_xram_be[3] == 1'b1);
-wire tx_qcnt_dec = (cfg_tx_buf_qbase_addr == wb_xram_adr[15:6]) & wb_xram_stb & !wb_xram_wr & wb_xram_ack && (wb_xram_be[3] == 1'b1);
-wire rx_qcnt_inc = (cfg_rx_buf_qbase_addr == wb_xram_adr[15:6]) & wb_xram_stb & wb_xram_wr & wb_xram_ack && (wb_xram_be[3] == 1'b1);
-wire rx_qcnt_dec = (cfg_rx_buf_qbase_addr == wb_xram_adr[15:6]) & wb_xram_stb & !wb_xram_wr & wb_xram_ack && (wb_xram_be[3] == 1'b1);
-
-assign reg_mac_addr[1:0] = 2'b0;
-assign reg_uart_addr[1:0] = 2'b0;
-assign reg_spi_addr[1:0] = 2'b0;
-//-------------------------------------------
-// clock-gen  instantiation
-//-------------------------------------------
-clkgen u_clkgen (
-               . reset_n                (reset_n               ),
-               . fastsim_mode           (fastsim_mode          ),
-               . mastermode             (mastermode            ),
-               . xtal_clk               (xtal_clk              ),
-               . clkout                 (clkout                ),
-               . gen_resetn             (gen_resetn            ),
-               . risc_reset             (risc_reset            ),
-               . app_clk                (app_clk               ),
-               . uart_ref_clk           (uart_clk_16x          )
-
-              );
-
-//--------------------------------------------------------------
-// Target ID Mapping
-// 4'b0100 -- MAC core
-// 4'b0011 -- UART
-// 4'b0010 -- SPI core
-// 4'b0001 -- External RAM
-// 4'b0000 -- External ROM
-//--------------------------------------------------------------
-
-
-wire [31:0] wb_master2_rdata;
-
-wire [3:0] wb_master2_be = (wbd_risc_adr[1:0] == 2'b00) ? 4'b0001:
-                           (wbd_risc_adr[1:0] == 2'b01) ? 4'b0010:
-                           (wbd_risc_adr[1:0] == 2'b10) ? 4'b0100: 4'b1000;
-
-assign     wbd_risc_rdata = (wbd_risc_adr[1:0] == 2'b00) ? wb_master2_rdata[7:0]:
-                            (wbd_risc_adr[1:0] == 2'b01) ? wb_master2_rdata[15:8]:
-                            (wbd_risc_adr[1:0] == 2'b10) ? wb_master2_rdata[23:16]: 
-                            wb_master2_rdata[31:24];
-
-//------------------------------
-// RISC Data Memory Map
-// 0x0000 to 0x7FFFF  - Data Memory
-// 0x8000 to 0x8FFF   - SPI 
-// 0x9000 to 0x9FFF   - UART
-// 0xA000 to 0xAFFF   - MAC Core
-//-----------------------------
-// 
-wire [3:0] wbd_tar_id     = (wbd_risc_adr[15]    == 1'b0 ) ? 4'b0001 :
-                            (wbd_risc_adr[15:12] == 4'b1000 ) ? 4'b0010 :
-                            (wbd_risc_adr[15:12] == 4'b1001 ) ? 4'b0011 : 4'b0100;
-
-wb_crossbar #(5,5,32,4,13,4) u_wb_crossbar (
-
-              .rst_n                    (gen_resetn           ), 
-              .clk                      (app_clk              ),
-
-
-    // Master Interface Signal
-              .wbd_taddr_master         ({4'b0000,
-                                          wbd_tar_id,
-                                          ext_reg_tid,
-                                          wbgt_taddr,
-                                          wbgr_taddr}),
-              .wbd_din_master           ({32'h0 ,
-                                          {wbd_risc_wdata[7:0],
-                                          wbd_risc_wdata[7:0],
-                                          wbd_risc_wdata[7:0],
-                                          wbd_risc_wdata[7:0]},
-                                          ext_reg_wdata,
-                                          wbgt_din,
-                                          wbgr_din}
-                                         ),
-              .wbd_dout_master          ({wbi_risc_rdata,
-                                          wb_master2_rdata,
-                                          ext_reg_rdata,
-                                          wbgt_dout,
-                                          wbgr_dout}
-                                           ),
-              .wbd_adr_master           ({wbi_risc_adr[12:0],
-                                          wbd_risc_adr[14:2],
-                                          ext_reg_addr[14:2],
-                                          wbgt_addr,
-                                          wbgr_addr}
-                                          ), 
-              .wbd_be_master            ({4'b1111,
-                                          wb_master2_be,
-                                          ext_reg_be,
-                                          wbgt_be,
-                                          wbgr_be}
-                                           ), 
-              .wbd_we_master            ({1'b0,wbd_risc_we,ext_reg_wr,
-                                         wbgt_we,wbgr_we}   ), 
-              .wbd_ack_master           ({wbi_risc_ack,
-                                          wbd_risc_ack,
-                                          ext_reg_ack,
-                                          wbgt_ack,
-                                          wbgr_ack} ),
-              .wbd_stb_master           ({wbi_risc_stb,
-                                          wbd_risc_stb,
-                                          ext_reg_cs,
-                                          wbgt_stb,
-                                          wbgr_stb} ), 
-              .wbd_cyc_master           ({wbi_risc_stb|wbi_risc_ack,
-                                          wbd_risc_stb|wbd_risc_ack,
-                                          ext_reg_cs|ext_reg_ack,
-                                          wbgt_cyc,wbgr_cyc}), 
-              .wbd_err_master           (),
-              .wbd_rty_master           (),
- 
-    // Slave Interface Signal
-              .wbd_din_slave            ({
-                                          reg_mac_wdata,
-                                          reg_uart_wdata,
-                                          reg_spi_wdata,
-                                          wb_xram_wdata,
-                                          wb_xrom_wdata
-                                          }), 
-              .wbd_dout_slave           ({
-                                          reg_mac_rdata,
-                                          reg_uart_rdata,
-                                          reg_spi_rdata,
-                                          {wb_xram_rdata},
-                                          wb_xrom_rdata
-                                         }),
-              .wbd_adr_slave            ({reg_mac_addr[14:2],
-                                          reg_uart_addr[14:2],
-                                          reg_spi_addr[14:2],
-                                          wb_xram_adr[14:2],
-                                          wb_xrom_adr[12:0]}
-                                        ), 
-              .wbd_be_slave             ({reg_mac_be,
-                                          reg_uart_be,
-                                          reg_spi_be,
-                                          wb_xram_be,
-                                          wb_xrom_be}
-                                        ), 
-              .wbd_we_slave             ({reg_mac_wr,
-                                          reg_uart_wr,
-                                          reg_spi_wr,
-                                          wb_xram_wr,
-                                          wb_xrom_wr
-                                          }), 
-              .wbd_ack_slave            ({reg_mac_ack,
-                                          reg_uart_ack,
-                                          reg_spi_ack,
-                                          wb_xram_ack,
-                                          wb_xrom_ack
-                                         }),
-              .wbd_stb_slave            ({reg_mac_cs,
-                                          reg_uart_cs,
-                                          reg_spi_cs,
-                                          wb_xram_stb,
-                                          wb_xrom_stb
-                                         }), 
-              .wbd_cyc_slave            (), 
-              .wbd_err_slave            (),
-              .wbd_rty_slave            ()
-         );
-
-
-//-------------------------------------------
-// GMAC core instantiation
-//-------------------------------------------
-
-g_mac_top u_eth_dut (
-
-          .scan_mode                    (1'b0                  ), 
-          .s_reset_n                    (gen_resetn            ), 
-          .tx_reset_n                   (gen_resetn            ),
-          .rx_reset_n                   (gen_resetn            ),
-          .reset_mdio_clk_n             (gen_resetn            ),
-          .app_reset_n                  (gen_resetn            ),
-
-        // Reg Bus Interface Signal
-          . reg_cs                      (reg_mac_cs            ),
-          . reg_wr                      (reg_mac_wr            ),
-          . reg_addr                    (reg_mac_addr[5:2]     ),
-          . reg_wdata                   (reg_mac_wdata         ),
-          . reg_be                      (reg_mac_be            ),
-
-            // Outputs
-          . reg_rdata                   (reg_mac_rdata         ),
-          . reg_ack                     (reg_mac_ack           ),
-
-
-          .app_clk                      (app_clk               ),
-
-          // Application RX FIFO Interface
-          .app_txfifo_wren_i            (app_txfifo_wren_i   ),
-          .app_txfifo_wrdata_i          (app_txfifo_wrdata_i ),
-          .app_txfifo_addr              (app_txfifo_addr     ),
-          .app_txfifo_full_o            (app_txfifo_full_o   ),
-          .app_txfifo_afull_o           (app_txfifo_afull_o  ),
-          .app_txfifo_space_o           (                    ),
-
-          // Application TX FIFO Interface
-          .app_rxfifo_rden_i            (app_rxfifo_rden_i   ),
-          .app_rxfifo_empty_o           (app_rxfifo_empty_o  ),
-          .app_rxfifo_aempty_o          (app_rxfifo_aempty_o ),
-          .app_rxfifo_cnt_o             (                    ),
-          .app_rxfifo_rdata_o           (app_rxfifo_rddata_o ),
-          .app_rxfifo_addr              (app_rxfifo_addr     ),
-
-          .app_rx_desc_req              (app_rx_desc_req     ),
-          .app_rx_desc_ack              (app_rx_desc_ack     ),
-          .app_rx_desc_discard          (app_rx_desc_discard ),
-          .app_rx_desc_data             (app_rx_desc_data    ),
-
-          // Line Side Interface TX Path
-          .phy_tx_en                    (phy_tx_en           ),
-          .phy_tx_er                    (                    ),
-          .phy_txd                      (phy_txd             ),
-          .phy_tx_clk                   (phy_tx_clk          ),
-
-          // Line Side Interface RX Path
-          .phy_rx_clk                   (phy_rx_clk          ),
-          .phy_rx_er                    (1'b0                ),
-          .phy_rx_dv                    (phy_rx_dv           ),
-          .phy_rxd                      (phy_rxd             ),
-          .phy_crs                      (1'b0                ),
-
-          //MDIO interface
-          .mdio_clk                     (mdio_clk            ),
-          .mdio_in                      (mdio_in             ),
-          .mdio_out_en                  (mdio_out_en         ),
-          .mdio_out                     (mdio_out            ),
-
-          // QCounter
-          .rx_buf_qbase_addr            (cfg_rx_buf_qbase_addr),
-          .tx_buf_qbase_addr            (cfg_tx_buf_qbase_addr),
-
-          .tx_qcnt_inc                  (tx_qcnt_inc),
-          .tx_qcnt_dec                  (tx_qcnt_dec),
-          .rx_qcnt_inc                  (rx_qcnt_inc),
-          .rx_qcnt_dec                  (rx_qcnt_dec),
-          .tx_qcnt                      (tx_qcnt),
-          .rx_qcnt                      (rx_qcnt)
-
-
-       );
-
-
-
-
-
-wb_rd_mem2mem #(.D_WD(32),.BE_WD(4),.ADR_WD(13),.TAR_WD(4)) u_wb_gmac_tx (
-
-          .rst_n               ( gen_resetn         ),
-          .clk                 ( app_clk            ),
-
-    // descriptor handshake
-          .cfg_desc_baddr      (cfg_tx_buf_qbase_addr),
-          .desc_q_empty        (tx_q_empty           ),
-
-    // Master Interface Signal
-          .mem_taddr           ( 4'h1               ),
-          .mem_full            (app_txfifo_full_o   ),
-          .mem_afull           (app_txfifo_afull_o  ),
-          .mem_wr              (app_txfifo_wren_i   ), 
-          .mem_din             (app_txfifo_wrdata_i ),
- 
-    // Slave Interface Signal
-          .wbo_dout            ( wbgt_dout          ),
-          .wbo_taddr           ( wbgt_taddr         ),
-          .wbo_addr            ( wbgt_addr          ),
-          .wbo_be              ( wbgt_be            ),
-          .wbo_we              ( wbgt_we            ),
-          .wbo_ack             ( wbgt_ack           ),
-          .wbo_stb             ( wbgt_stb           ), 
-          .wbo_cyc             ( wbgt_cyc           ), 
-          .wbo_err             ( wbgt_err           ),
-          .wbo_rty             ( wbgt_rty           )
-         );
-
-
-wb_wr_mem2mem #(.D_WD(32),.BE_WD(4),.ADR_WD(13),.TAR_WD(4)) u_wb_gmac_rx(
-
-          .rst_n               ( gen_resetn   ), 
-          .clk                 ( app_clk      ),
-
-
-    // Master Interface Signal
-          .mem_taddr           ( 4'h1                 ),
-          .mem_addr            (app_rxfifo_addr       ),
-          .mem_empty           (app_rxfifo_empty_o    ),
-          .mem_aempty          (app_rxfifo_aempty_o   ),
-          .mem_rd              (app_rxfifo_rden_i     ), 
-          .mem_dout            (app_rxfifo_rddata_o[7:0]),
-          .mem_eop             (app_rxfifo_rddata_o[8]),
- 
-          .cfg_desc_baddr      (cfg_rx_buf_qbase_addr ),
-          .desc_req            (app_rx_desc_req       ),
-          .desc_ack            (app_rx_desc_ack       ),
-          .desc_disccard       (app_rx_desc_discard   ),
-          .desc_data           (app_rx_desc_data      ),
-    // Slave Interface Signal
-          .wbo_din             ( wbgr_din     ), 
-          .wbo_taddr           ( wbgr_taddr   ), 
-          .wbo_addr            ( wbgr_addr    ), 
-          .wbo_be              ( wbgr_be      ), 
-          .wbo_we              ( wbgr_we      ), 
-          .wbo_ack             ( wbgr_ack     ),
-          .wbo_stb             ( wbgr_stb     ), 
-          .wbo_cyc             ( wbgr_cyc     ), 
-          .wbo_err             ( wbgr_err     ),
-          .wbo_rty             ( wbgr_rty     )
-         );
-
-//-------------------------------------
-// UART core instantiation
-//-------------------------------------
-
-uart_core  u_uart_core
-
-     (  
-          . line_reset_n                (gen_resetn            ),
-          . line_clk_16x                (uart_clk_16x          ),
-
-          . app_reset_n                 (gen_resetn            ),
-          . app_clk                     (app_clk               ),
-
-
-        // Reg Bus Interface Signal
-          . reg_cs                      (reg_uart_cs           ),
-          . reg_wr                      (reg_uart_wr           ),
-          . reg_addr                    (reg_uart_addr[5:2]    ),
-          . reg_wdata                   (reg_uart_wdata        ),
-          . reg_be                      (reg_uart_be           ),
-
-            // Outputs
-          . reg_rdata                   (reg_uart_rdata        ),
-          . reg_ack                     (reg_uart_ack          ),
-
-
-
-       // Line Interface
-          . si                          (si                    ),
-          . so                          (so                    )
-
-     );
-
-
-//--------------------------------
-// SPI core instantiation
-//--------------------------------
-
-
-spi_core u_spi_core (
-
-          . clk                         (app_clk               ),
-          . reset_n                     (gen_resetn            ),
-               
-        // Reg Bus Interface Signal
-          . reg_cs                      (reg_spi_cs            ),
-          . reg_wr                      (reg_spi_wr            ),
-          . reg_addr                    (reg_spi_addr[5:2]     ),
-          . reg_wdata                   (reg_spi_wdata         ),
-          . reg_be                      (reg_spi_be            ),
-
-            // Outputs
-          . reg_rdata                   (reg_spi_rdata         ),
-          . reg_ack                     (reg_spi_ack           ),
-
-
-          . sck                         (spi_sck               ),
-          . so                          (spi_so                ),
-          . si                          (spi_si                ),
-          . cs_n                        (spi_cs_n              )
-
-           );
-
-
-
-oc8051_top u_8051_core (
-          . wb_rst_i                    (risc_reset            ), 
-          . wb_clk_i                    (app_clk               ),
-
-//interface to instruction rom
-          . wbi_adr_o                   (wbi_risc_adr          ), 
-          . wbi_dat_i                   (wbi_risc_rdata        ), 
-          . wbi_stb_o                   (wbi_risc_stb          ), 
-          . wbi_ack_i                   (wbi_risc_ack          ), 
-          . wbi_cyc_o                   (wbi_risc_cyc          ), 
-          . wbi_err_i                   (wbi_risc_err          ),
-
-//interface to data ram
-          . wbd_dat_i                   (wbd_risc_rdata        ), 
-          . wbd_dat_o                   (wbd_risc_wdata        ),
-          . wbd_adr_o                   (wbd_risc_adr          ), 
-          . wbd_we_o                    (wbd_risc_we           ), 
-          . wbd_ack_i                   (wbd_risc_ack          ),
-          . wbd_stb_o                   (wbd_risc_stb          ),
-          . wbd_cyc_o                   (wbd_risc_cyc          ),
-          . wbd_err_i                   (wbd_risc_err          ),
-
-// interrupt interface
-          . int0_i                      (                      ), 
-          . int1_i                      (                      ),
-
-
-// port interface
-  `ifdef OC8051_PORTS
-        `ifdef OC8051_PORT0
-          .p0_i                         ( p0                    ),
-          .p0_o                         ( p0                    ),
-        `endif
-
-        `ifdef OC8051_PORT1
-           .p1_i                        ( p1                    ),
-           .p1_o                        ( p1                    ),
-        `endif
-
-        `ifdef OC8051_PORT2
-           .p2_i                        ( p2                    ),
-           .p2_o                        ( p2                    ),
-        `endif
-
-        `ifdef OC8051_PORT3
-           .p3_i                        ( p3                    ),
-           .p3_o                        ( p3                    ),
-        `endif
-  `endif
-
-// serial interface
-        `ifdef OC8051_UART
-           .rxd_i                       (                      ), 
-           .txd_o                       (                      ),
-        `endif
-
-// counter interface
-        `ifdef OC8051_TC01
-           .t0_i                        (                      ), 
-           .t1_i                        (                      ),
-        `endif
-
-        `ifdef OC8051_TC2
-           .t2_i                        (                      ),
-           .t2ex_i                      (                      ),
-        `endif
-
-// BIST
-`ifdef OC8051_BIST
-            .scanb_rst                  (                      ),
-            .scanb_clk                  (                      ),
-            .scanb_si                   (                      ),
-            .scanb_so                   (                      ),
-            .scanb_en                   (                      ),
-`endif
-// external access (active low)
-            .ea_in                      (ea_in                 )
-         );
-
-endmodule
diff --git a/verilog/rtl/glbl/src/glbl_cfg.sv b/verilog/rtl/glbl/src/glbl_cfg.sv
index 6ce06a1..7ac4a7c 100644
--- a/verilog/rtl/glbl/src/glbl_cfg.sv
+++ b/verilog/rtl/glbl/src/glbl_cfg.sv
@@ -64,8 +64,7 @@
 ////                                                              ////
 //////////////////////////////////////////////////////////////////////
 
-module glbl_cfg #(parameter SCW = 8   // SCAN CHAIN WIDTH
-     ) (
+module glbl_cfg (
 
 `ifdef USE_POWER_PINS
     inout vccd1,	// User area 1 1.8V supply
@@ -75,20 +74,6 @@
        input logic             mclk,
        input logic             reset_n,
 
-       // Scan I/F
-       input logic             scan_en,
-       input logic             scan_mode,
-       input logic [SCW-1:0]   scan_si,
-       output logic [SCW-1:0]  scan_so,
-       output logic            scan_en_o,
-       output logic            scan_mode_o,
-
-	// Clock Skew Adjust
-       input   logic           wbd_clk_int      , 
-       input  logic [3:0]      cfg_cska_glbl    ,
-       output  logic           wbd_clk_glbl      , // clock skew adjust for web host
-
-
         // Reg Bus Interface Signal
         input logic             reg_cs,
         input logic             reg_wr,
@@ -100,26 +85,23 @@
         output logic [31:0]     reg_rdata,
         output logic            reg_ack,
 
-	// BIST I/F
-	output logic [7:0]      bist_en,
-	output logic [7:0]      bist_run,
-	output logic [7:0]      bist_load,
+	    // BIST I/F
+	    output logic            bist_en,
+	    output logic            bist_run,
+	    output logic            bist_load,
 
-	output logic [7:0]      bist_sdi,
-	output logic [7:0]      bist_shift,
-	input  logic [7:0]      bist_sdo,
+        output logic [1:0]      bist_serial_sel,
+	    output logic            bist_sdi,
+	    output logic            bist_shift,
+	    input  logic            bist_sdo,
 
-	input logic [7:0]       bist_done,
-	input logic [7:0]       bist_error,
-	input logic [7:0]       bist_correct,
-	input logic [3:0]       bist_error_cnt0,
-	input logic [3:0]       bist_error_cnt1,
-	input logic [3:0]       bist_error_cnt2,
-	input logic [3:0]       bist_error_cnt3,
-	input logic [3:0]       bist_error_cnt4,
-	input logic [3:0]       bist_error_cnt5,
-	input logic [3:0]       bist_error_cnt6,
-	input logic [3:0]       bist_error_cnt7
+	    input logic             bist_done,
+	    input logic [3:0]       bist_error,
+	    input logic [3:0]       bist_correct,
+	    input logic [3:0]       bist_error_cnt0,
+	    input logic [3:0]       bist_error_cnt1,
+	    input logic [3:0]       bist_error_cnt2,
+	    input logic [3:0]       bist_error_cnt3
 
         );
 
@@ -143,7 +125,7 @@
 logic [31:0]    cfg_bist_ctrl_2;    // BIST control
 logic [31:0]    cfg_bist_status_1;  // BIST Status
 logic [31:0]    cfg_bist_status_2;  // BIST Status
-logic [31:0]    serail_dout;      // BIST Serial Signature
+logic [63:0]    serail_dout;      // BIST Serial Signature
 logic [31:0]    reg_9;            // Software_Reg 9
 logic [31:0]    reg_10;           // Software Reg 10
 logic [31:0]    reg_11;           // Software Reg 11
@@ -155,20 +137,6 @@
 //-----------------------------------------------------------------------
 
 
-assign scan_en_o = scan_en;
-assign scan_mode_o = scan_mode;
-
-// wb_host clock skew control
-clk_skew_adjust u_skew_glbl
-       (
-`ifdef USE_POWER_PINS
-               .vccd1      (vccd1                      ),// User area 1 1.8V supply
-               .vssd1      (vssd1                      ),// User area 1 digital ground
-`endif
-	       .clk_in     (wbd_clk_int                ), 
-	       .sel        (cfg_cska_glbl              ), 
-	       .clk_out    (wbd_clk_glbl               ) 
-       );
 
 //-----------------------------------------------------------------------
 // register read enable and write enable decoding logic
@@ -232,7 +200,7 @@
       reg_rdata  <= 'h0;
       reg_ack    <= 1'b0;
    end else if (ser_acc && serial_ack)  begin
-      reg_rdata <= serail_dout ;
+      reg_rdata <= reg_out ;
       reg_ack   <= 1'b1;
    end else if (non_ser_acc && !reg_ack) begin
       reg_rdata <= reg_out ;
@@ -254,8 +222,8 @@
     4'b0100 :   reg_out [31:0] = cfg_bist_status_1 [31:0];     
     4'b0101 :   reg_out [31:0] = cfg_bist_status_2 [31:0];     
     4'b0110 :   reg_out [31:0] = 'h0; // Serial Write Data
-    4'b0111 :   reg_out [31:0] = serail_dout; // This is with  Shift
-    4'b1000 :   reg_out [31:0] = serail_dout; // This is previous Shift 
+    4'b0111 :   reg_out [31:0] = serail_dout[31:0];  // Lower Shift
+    4'b1000 :   reg_out [31:0] = serail_dout[63:32]; // Upper Shift 
     4'b1001 :   reg_out [31:0] = reg_9; // Software Reg1
     4'b1010 :   reg_out [31:0] = reg_10; // Software Reg2
     4'b1011 :   reg_out [31:0] = reg_11; // Software Reg3
@@ -374,42 +342,15 @@
           );
 
 
-wire [3:0] bist_serial_sel  = cfg_bist_ctrl_1[3:0];
+assign bist_serial_sel  = cfg_bist_ctrl_1[1:0];
 //-----------------------------------------------------------------------
 //   reg-3
 //   -----------------------------------------------------------------
 // Bist control
-assign bist_en[0]           = cfg_bist_ctrl_2[0];
-assign bist_run[0]          = cfg_bist_ctrl_2[1];
-assign bist_load[0]         = cfg_bist_ctrl_2[2];
+assign bist_en              = cfg_bist_ctrl_2[0];
+assign bist_run             = cfg_bist_ctrl_2[1];
+assign bist_load            = cfg_bist_ctrl_2[2];
 
-assign bist_en[1]           = cfg_bist_ctrl_2[4];
-assign bist_run[1]          = cfg_bist_ctrl_2[5];
-assign bist_load[1]         = cfg_bist_ctrl_2[6];
-
-assign bist_en[2]           = cfg_bist_ctrl_2[8];
-assign bist_run[2]          = cfg_bist_ctrl_2[9];
-assign bist_load[2]         = cfg_bist_ctrl_2[10];
-
-assign bist_en[3]           = cfg_bist_ctrl_2[12];
-assign bist_run[3]          = cfg_bist_ctrl_2[13];
-assign bist_load[3]         = cfg_bist_ctrl_2[14];
-
-assign bist_en[4]           = cfg_bist_ctrl_2[16];
-assign bist_run[4]          = cfg_bist_ctrl_2[17];
-assign bist_load[4]         = cfg_bist_ctrl_2[18];
-
-assign bist_en[5]           = cfg_bist_ctrl_2[20];
-assign bist_run[5]          = cfg_bist_ctrl_2[21];
-assign bist_load[5]         = cfg_bist_ctrl_2[22];
-
-assign bist_en[6]           = cfg_bist_ctrl_2[24];
-assign bist_run[6]          = cfg_bist_ctrl_2[25];
-assign bist_load[6]         = cfg_bist_ctrl_2[26];
-
-assign bist_en[7]           = cfg_bist_ctrl_2[28];
-assign bist_run[7]          = cfg_bist_ctrl_2[29];
-assign bist_load[7]         = cfg_bist_ctrl_2[30];
 
 
 
@@ -461,15 +402,11 @@
 //   reg-3
 //-----------------------------------------------------------------
 
-assign cfg_bist_status_2 = {  bist_error_cnt7, 1'b0, bist_correct[7], bist_error[7], bist_done[7],
-	                      bist_error_cnt6, 1'b0, bist_correct[6], bist_error[6], bist_done[6],
-	                      bist_error_cnt5, 1'b0, bist_correct[5], bist_error[5], bist_done[5],
-	                      bist_error_cnt4, 1'b0, bist_correct[4], bist_error[4], bist_done[4]
-			   };
-assign cfg_bist_status_1 = {  bist_error_cnt3, 1'b0, bist_correct[3], bist_error[3], bist_done[3],
-	                      bist_error_cnt2, 1'b0, bist_correct[2], bist_error[2], bist_done[2],
-	                      bist_error_cnt1, 1'b0, bist_correct[1], bist_error[1], bist_done[1],
-	                      bist_error_cnt0, 1'b0, bist_correct[0], bist_error[0], bist_done[0]
+assign cfg_bist_status_2 = 'h0;
+assign cfg_bist_status_1 = {  bist_error_cnt3, 1'b0, bist_correct[3], bist_error[3], bist_done,
+	                      bist_error_cnt2, 1'b0, bist_correct[2], bist_error[2], bist_done,
+	                      bist_error_cnt1, 1'b0, bist_correct[1], bist_error[1], bist_done,
+	                      bist_error_cnt0, 1'b0, bist_correct[0], bist_error[0], bist_done
 			   };
 
 //-----------------------------------------------------------------------
@@ -480,34 +417,11 @@
 wire   bist_shift_int;
 wire   bist_sdo_int;
 
-assign bist_sdo_int = (bist_serial_sel == 4'b0000) ? bist_sdo[0] :
-                      (bist_serial_sel == 4'b0001) ? bist_sdo[1] :
-                      (bist_serial_sel == 4'b0010) ? bist_sdo[2] :
-                      (bist_serial_sel == 4'b0011) ? bist_sdo[3] : 
-                      (bist_serial_sel == 4'b0100) ? bist_sdo[4] : 
-                      (bist_serial_sel == 4'b0101) ? bist_sdo[5] : 
-                      (bist_serial_sel == 4'b0110) ? bist_sdo[6] : 
-                      (bist_serial_sel == 4'b0111) ? bist_sdo[7] : 
-		      1'b0;
+assign bist_sdo_int = bist_sdo;
+assign  bist_shift = bist_shift_int ;
+assign  bist_sdi   = 1'b0 ; // Need fix - Dinesh A
 
-assign  bist_shift[0] = (bist_serial_sel == 4'b0000) ? bist_shift_int : 1'b0;
-assign  bist_shift[1] = (bist_serial_sel == 4'b0001) ? bist_shift_int : 1'b0;
-assign  bist_shift[2] = (bist_serial_sel == 4'b0010) ? bist_shift_int : 1'b0;
-assign  bist_shift[3] = (bist_serial_sel == 4'b0011) ? bist_shift_int : 1'b0;
-assign  bist_shift[4] = (bist_serial_sel == 4'b0100) ? bist_shift_int : 1'b0;
-assign  bist_shift[5] = (bist_serial_sel == 4'b0101) ? bist_shift_int : 1'b0;
-assign  bist_shift[6] = (bist_serial_sel == 4'b0110) ? bist_shift_int : 1'b0;
-assign  bist_shift[7] = (bist_serial_sel == 4'b0111) ? bist_shift_int : 1'b0;
-
-assign  bist_sdi[0]   = (bist_serial_sel == 4'b0000) ? bist_sdi_int : 1'b0;
-assign  bist_sdi[1]   = (bist_serial_sel == 4'b0001) ? bist_sdi_int : 1'b0;
-assign  bist_sdi[2]   = (bist_serial_sel == 4'b0010) ? bist_sdi_int : 1'b0;
-assign  bist_sdi[3]   = (bist_serial_sel == 4'b0011) ? bist_sdi_int : 1'b0;
-assign  bist_sdi[4]   = (bist_serial_sel == 4'b0100) ? bist_sdi_int : 1'b0;
-assign  bist_sdi[5]   = (bist_serial_sel == 4'b0101) ? bist_sdi_int : 1'b0;
-assign  bist_sdi[6]   = (bist_serial_sel == 4'b0110) ? bist_sdi_int : 1'b0;
-assign  bist_sdi[7]   = (bist_serial_sel == 4'b0111) ? bist_sdi_int : 1'b0;
-
+/*** Need Fix for Serial Out 
 ser_inf_32b u_ser_intf
        (
 
@@ -515,7 +429,7 @@
        .rst_n       (reset_n),  // Regular Reset signal
        .clk         (mclk),  // System clock
        .reg_wr      (sw_wr_en_6 & wb_req_pedge),  // Write Request
-       .reg_rd      (sw_rd_en_7 & wb_req_pedge),  // Read Request
+       .reg_rd      (1;b0),  // Read Request
        .reg_wdata   (reg_wdata) ,  // data output
        .reg_rdata   (serail_dout),  // data input
        .reg_ack     (serial_ack),  // acknowlegement
@@ -526,7 +440,23 @@
        .sdo         (bist_sdo_int) // Serial SDO
 
     );
+****/
 
+ser_rd_inf_64b u_ser_intf
+       (
+
+    // Master Port
+       .rst_n       (reset_n),  // Regular Reset signal
+       .clk         (mclk),  // System clock
+       .reg_rd      (sw_rd_en_7 & wb_req_pedge),  // Read Request
+       .reg_rdata   (serail_dout),  // data input
+       .reg_ack     (serial_ack),  // acknowlegement
+
+    // Slave Port
+       .shift       (bist_shift_int),  // Shift Signal
+       .sdo         (bist_sdo_int) // Serial SDO
+
+    );
 
 //-----------------------------------------
 // Software Reg-1 : ASCI Representation of LBST = 32'h4C66_8354
diff --git a/verilog/rtl/lib/async_fifo.sv b/verilog/rtl/lib/async_fifo.sv
index fd59cfa..239db2f 100755
--- a/verilog/rtl/lib/async_fifo.sv
+++ b/verilog/rtl/lib/async_fifo.sv
@@ -56,7 +56,12 @@
 *******************************************************************/
 
 //-------------------------------------------
-// async FIFO
+// async_fifo:: async FIFO
+//    Following two ports are newly added
+//        1. At write clock domain:
+//           wr_total_free_space -->  Indicate total free transfer available 
+//        2. At read clock domain:
+//           rd_total_aval       -->  Indicate total no of transfer available
 //-----------------------------------------------
 //`timescale  1ns/1ps
 
@@ -66,11 +71,13 @@
                    wr_data,
                    full,                 // sync'ed to wr_clk
                    afull,                 // sync'ed to wr_clk
+                   wr_total_free_space,
                    rd_clk,
                    rd_reset_n,
                    rd_en,
                    empty,                // sync'ed to rd_clk
                    aempty,                // sync'ed to rd_clk
+                   rd_total_aval,
                    rd_data);
 
    parameter W = 4'd8;
@@ -94,9 +101,13 @@
    input             wr_clk, wr_reset_n, wr_en, rd_clk, rd_reset_n,
                      rd_en;
    output            full, empty;
-   output            afull, aempty;       // about full and about to empty
-
-
+   output            afull, aempty; // about full and about to empty
+   output   [AW:0]   wr_total_free_space; // Total Number of free space aval 
+                                               // w.r.t write clk
+                                               // note: Without accounting byte enables
+   output   [AW:0]   rd_total_aval;       // Total Number of words avaialble 
+                                               // w.r.t rd clock, 
+                                              // note: Without accounting byte enables
    // synopsys translate_off
 
    initial begin
@@ -123,6 +134,11 @@
    assign full_c  = (wr_cnt == FULL_DP) ? 1'b1 : 1'b0;
    assign afull_c = (wr_cnt == FULL_DP-1) ? 1'b1 : 1'b0;
 
+   //--------------------------
+   // Shows total number of words 
+   // of free space available w.r.t write clock
+   //--------------------------- 
+   assign wr_total_free_space = FULL_DP - wr_cnt;
 
    always @(posedge wr_clk or negedge wr_reset_n) begin
 	if (!wr_reset_n) begin
@@ -154,7 +170,7 @@
     end
 
     wire [AW:0] grey_rd_ptr_dly ;
-    assign #1 grey_rd_ptr_dly = grey_rd_ptr;
+    assign  grey_rd_ptr_dly = grey_rd_ptr;
 
     // read pointer synchronizer
     always @(posedge wr_clk or negedge wr_reset_n) begin
@@ -183,6 +199,11 @@
  
    assign empty_c  = (rd_cnt == 0) ? 1'b1 : 1'b0;
    assign aempty_c = (rd_cnt == 1) ? 1'b1 : 1'b0;
+   //--------------------------
+   // Shows total number of words 
+   // space available w.r.t write clock
+   //--------------------------- 
+   assign rd_total_aval = rd_cnt;
 
    always @(posedge rd_clk or negedge rd_reset_n) begin
       if (!rd_reset_n) begin
@@ -218,7 +239,7 @@
    assign rd_data  = (RD_FAST == 1) ? rd_data_c : rd_data_q;
 
     wire [AW:0] grey_wr_ptr_dly ;
-    assign #1 grey_wr_ptr_dly =  grey_wr_ptr;
+    assign  grey_wr_ptr_dly =  grey_wr_ptr;
 
     // write pointer synchronizer
     always @(posedge rd_clk or negedge rd_reset_n) begin
@@ -336,6 +357,49 @@
       $stop;
    end
 end
-// synopsys translate_on
+
+// gray code monitor
+reg [AW:0] last_gwr_ptr;
+always @(posedge wr_clk or negedge wr_reset_n) begin
+   if (!wr_reset_n) begin
+      last_gwr_ptr <= 0;
+   end
+   else if (last_gwr_ptr !== grey_wr_ptr) begin
+      check_ptr_chg(last_gwr_ptr, grey_wr_ptr);
+      last_gwr_ptr <= grey_wr_ptr;
+   end 	
+end
+
+reg [AW:0] last_grd_ptr;
+always @(posedge rd_clk or negedge rd_reset_n) begin
+   if (!rd_reset_n) begin
+     last_grd_ptr <= 0;
+   end
+   else if (last_grd_ptr !== grey_rd_ptr) begin
+      check_ptr_chg(last_grd_ptr, grey_rd_ptr);
+      last_grd_ptr <=grey_rd_ptr;
+   end 	
+end
+
+task check_ptr_chg;
+input [AW:0] last_ptr;
+input [AW:0] cur_ptr;
+integer i;
+integer ptr_diff;
+begin
+   ptr_diff = 0;
+   for (i=0; i<= AW; i=i+ 1'b1) begin
+      if (last_ptr[i] != cur_ptr[i]) begin
+         ptr_diff = ptr_diff + 1'b1;
+      end
+   end
+   if (ptr_diff !== 1) begin
+      $display($time, "%m, ERROR! async fifo ptr has changed more than noe bit, last=%h, cur=%h",
+				last_ptr, cur_ptr);
+      $stop;
+   end
+end
+endtask 	
+   // synopsys translate_on
 
 endmodule
diff --git a/verilog/rtl/lib/ctech_cells.sv b/verilog/rtl/lib/ctech_cells.sv
index 8e3b0de..a9c6693 100644
--- a/verilog/rtl/lib/ctech_cells.sv
+++ b/verilog/rtl/lib/ctech_cells.sv
@@ -1,14 +1,72 @@
 
-module ctech_mux2x1 (
-	input  logic A0,
-	input  logic A1,
+module ctech_mux2x1 #(parameter WB = 1) (
+	input  logic [WB-1:0] A0,
+	input  logic [WB-1:0] A1,
 	input  logic S ,
-	output logic X);
+	output logic [WB-1:0] X);
 
 `ifndef SYNTHESIS
 assign X = (S) ? A1 : A0;
 `else 
-sky130_fd_sc_hd__mux2_8 u_mux (.A0 (A0), .A1 (A1), .S  (S), .X (X));
+    generate
+       if (WB > 1)
+       begin : bus_
+         genvar tcnt;
+         for (tcnt = 0; $unsigned(tcnt) < WB; tcnt=tcnt+1) begin : bit_
+             sky130_fd_sc_hd__mux2_8 u_mux (.A0 (A0[tcnt]), .A1 (A1[tcnt]), .S  (S), .X (X[tcnt]));
+         end
+       end else begin
+          sky130_fd_sc_hd__mux2_8 u_mux (.A0 (A0), .A1 (A1), .S  (S), .X (X));
+       end
+    endgenerate
+`endif
+
+endmodule
+
+module ctech_mux2x1_2 #(parameter WB = 1) (
+	input  logic [WB-1:0] A0,
+	input  logic [WB-1:0] A1,
+	input  logic S ,
+	output logic [WB-1:0] X);
+
+`ifndef SYNTHESIS
+assign X = (S) ? A1 : A0;
+`else 
+    generate
+       if (WB > 1)
+       begin : bus_
+         genvar tcnt;
+         for (tcnt = 0; $unsigned(tcnt) < WB; tcnt=tcnt+1) begin : bit_
+             sky130_fd_sc_hd__mux2_2 u_mux (.A0 (A0[tcnt]), .A1 (A1[tcnt]), .S  (S), .X (X[tcnt]));
+         end
+       end else begin 
+          sky130_fd_sc_hd__mux2_2 u_mux (.A0 (A0), .A1 (A1), .S  (S), .X (X));
+       end
+    endgenerate
+`endif
+
+endmodule
+
+module ctech_mux2x1_4 #(parameter WB = 1) (
+	input  logic [WB-1:0] A0,
+	input  logic [WB-1:0] A1,
+	input  logic S ,
+	output logic [WB-1:0] X);
+
+`ifndef SYNTHESIS
+assign X = (S) ? A1 : A0;
+`else 
+    generate
+       if (WB > 1)
+       begin : bus_
+         genvar tcnt;
+         for (tcnt = 0; $unsigned(tcnt) < WB; tcnt=tcnt+1) begin : bit_
+             sky130_fd_sc_hd__mux2_4 u_mux (.A0 (A0[tcnt]), .A1 (A1[tcnt]), .S  (S), .X (X[tcnt]));
+         end
+       end else begin
+          sky130_fd_sc_hd__mux2_4 u_mux (.A0 (A0), .A1 (A1), .S  (S), .X (X));
+       end
+    endgenerate
 `endif
 
 endmodule
@@ -49,3 +107,35 @@
 
 endmodule
 
+module ctech_delay_clkbuf (
+	input  logic A,
+	output logic X);
+
+wire X1;
+`ifndef SYNTHESIS
+    assign X = A;
+`else
+     sky130_fd_sc_hd__clkbuf_1 u_dly0 (.X(X1),.A(A));
+     sky130_fd_sc_hd__clkbuf_1 u_dly1 (.X(X),.A(X1));
+`endif
+
+endmodule
+
+module ctech_clk_gate (
+	input  logic GATE  ,
+	input  logic CLK   ,
+	output logic GCLK
+     );
+
+`ifndef SYNTHESIS
+   assign GCLK = CLK & GATE;
+`else
+    sky130_fd_sc_hd__dlclkp_2 u_gate(
+                                   .GATE    (GATE     ), 
+                                   .CLK     (CLK      ), 
+                                   .GCLK    (GCLK     )
+                                  );
+`endif
+
+endmodule
+
diff --git a/verilog/rtl/lib/ser_rd_inf_64b.sv b/verilog/rtl/lib/ser_rd_inf_64b.sv
new file mode 100644
index 0000000..317f9e6
--- /dev/null
+++ b/verilog/rtl/lib/ser_rd_inf_64b.sv
@@ -0,0 +1,105 @@
+//////////////////////////////////////////////////////////////////////////////
+// SPDX-FileCopyrightText: 2021 , Dinesh Annayya                          
+// 
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// SPDX-License-Identifier: Apache-2.0
+// SPDX-FileContributor: Created by Dinesh Annayya <dinesha@opencores.org>
+//
+//////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////
+////                                                              ////
+////  ser_rd_inf_64                                                  ////
+////                                                              ////
+////  This file is part of the mbist_ctrl cores project           ////
+////  https://github.com/dineshannayya/mbist_ctrl.git             ////
+////                                                              ////
+////  Description                                                 ////
+////   This block manages the serial to Parallel conversion       ////
+////   This block usefull for Bist SDI/SDO access                 ////
+////   Function:                                                  ////
+////      1. When reg_rd=1, this block set shoft=1 and serial     ////
+////         capture the sdo to reg_rdata for 64 cycles and       ////
+////         asserts Reg Ack                                      ////
+////                                                              ////
+////  To Do:                                                      ////
+////    nothing                                                   ////
+////                                                              ////
+////  Author(s):                                                  ////
+////      - Dinesh Annayya, dinesha@opencores.org                 ////
+////                                                              ////
+////  Revision :                                                  ////
+////    0.0 - 20th Oct 2021, Dinesh A                             ////
+////          Initial integration                                 ////
+////                                                              ////
+//////////////////////////////////////////////////////////////////////
+
+module ser_rd_inf_64b
+       (
+
+    // Master Port
+       input   logic               rst_n       ,  // Regular Reset signal
+       input   logic               clk         ,  // System clock
+       input   logic               reg_rd      ,  // Read Request
+       output  logic [63:0]        reg_rdata   ,  // data input
+       output  logic               reg_ack     ,  // acknowlegement
+
+    // Slave Port
+       output  logic               shift       ,  // Shift Signal
+       input   logic               sdo            // Serial SDO
+
+    );
+
+
+    parameter IDLE = 1'b0;
+    parameter SHIFT_DATA = 1'b1;
+
+    logic        state;
+    logic [6:0]  bit_cnt;
+
+
+always@(negedge rst_n or posedge clk)
+begin
+   if(rst_n == 0) begin
+      state     <= IDLE;
+      reg_rdata <= 'h0;
+      reg_ack   <= 1'b0;
+      bit_cnt   <= 'h0;
+      shift     <= 'b0;
+   end else begin
+       case(state)
+       IDLE: begin
+           reg_ack <= 1'b0;
+           bit_cnt    <= 6'h0;
+           if(reg_rd) begin
+              shift      <= 'b1;
+	          state      <= SHIFT_DATA;
+	       end
+	     end
+        SHIFT_DATA: begin 
+		    reg_rdata  <= {sdo,reg_rdata[63:1]};
+            if(bit_cnt < 63) begin
+		       bit_cnt    <= bit_cnt +1;
+	        end else begin
+               reg_ack <= 1'b1;
+               shift   <= 'b0;
+               state   <= IDLE;
+	        end
+	     end
+       endcase
+   end
+end
+
+
+
+
+endmodule
diff --git a/verilog/rtl/lib/wb_arb.sv b/verilog/rtl/lib/wb_arb.sv
index 0ad8bbf..8f7b4ba 100644
--- a/verilog/rtl/lib/wb_arb.sv
+++ b/verilog/rtl/lib/wb_arb.sv
@@ -68,7 +68,7 @@
 
 input		clk;
 input		rstn;
-input	[2:0]	req;	// Req input
+input	[3:0]	req;	// Req input
 output	[1:0]	gnt; 	// Grant output
 
 ///////////////////////////////////////////////////////////////////////
@@ -78,9 +78,10 @@
 
 
 parameter	[1:0]
-                grant0 = 3'h0,
-                grant1 = 3'h1,
-                grant2 = 3'h2;
+                grant0 = 2'h0,
+                grant1 = 2'h1,
+                grant2 = 2'h2,
+                grant3 = 2'h3;
 
 ///////////////////////////////////////////////////////////////////////
 // Local Registers and Wires
@@ -113,13 +114,15 @@
          grant0:
       	// if this req is dropped or next is asserted, check for other req's
       	if(!req[0] ) begin
-      		if(req[1])	next_state = grant1;
+      		if(req[1])	    next_state = grant1;
       		else if(req[2])	next_state = grant2;
+      		else if(req[3])	next_state = grant3;
       	end
          grant1:
       	// if this req is dropped or next is asserted, check for other req's
       	if(!req[1] ) begin
-      		if(req[2])	next_state = grant2;
+      		if(req[2])	    next_state = grant2;
+      		if(req[3])	    next_state = grant3;
       		else if(req[0])	next_state = grant0;
       	end
          grant2:
@@ -127,6 +130,14 @@
       	if(!req[2] ) begin
       	   if(req[0])	        next_state = grant0;
       	   else if(req[1])	next_state = grant1;
+      	   else if(req[3])	next_state = grant3;
+      	end
+         grant3:
+      	// if this req is dropped or next is asserted, check for other req's
+      	if(!req[3] ) begin
+      	   if(req[0])	        next_state = grant0;
+      	   else if(req[1])	next_state = grant1;
+      	   else if(req[2])	next_state = grant2;
       	end
       endcase
    end
diff --git a/verilog/rtl/lib/wb_stagging.sv b/verilog/rtl/lib/wb_stagging.sv
index 8f54f0f..77e26f4 100644
--- a/verilog/rtl/lib/wb_stagging.sv
+++ b/verilog/rtl/lib/wb_stagging.sv
@@ -76,18 +76,19 @@
 
 module wb_stagging (
          input logic		clk_i, 
-         input logic            rst_n,
+         input logic        rst_n,
+         input logic [3:0]  cfg_slave_id,
          // WishBone Input master I/P
          input   logic	[31:0]	m_wbd_dat_i,
          input   logic  [31:0]	m_wbd_adr_i,
          input   logic  [3:0]	m_wbd_sel_i,
-         input   logic  	m_wbd_we_i,
-         input   logic  	m_wbd_cyc_i,
-         input   logic  	m_wbd_stb_i,
+         input   logic  	    m_wbd_we_i,
+         input   logic  	    m_wbd_cyc_i,
+         input   logic  	    m_wbd_stb_i,
          input   logic  [3:0]	m_wbd_tid_i,
          output  logic	[31:0]	m_wbd_dat_o,
-         output  logic		m_wbd_ack_o,
-         output  logic		m_wbd_err_o,
+         output  logic		    m_wbd_ack_o,
+         output  logic		    m_wbd_err_o,
 
          // Slave Interface
          input	logic [31:0]	s_wbd_dat_i,
@@ -146,7 +147,7 @@
        s_wbd_dat_i_ff <= s_wbd_dat_i;
        s_wbd_ack_i_ff <= s_wbd_ack_i;
        s_wbd_err_i_ff <= s_wbd_err_i;
-       if(m_wbd_stb_i && holding_busy == 0 && m_wbd_ack_o == 0) begin
+       if(m_wbd_tid_i == cfg_slave_id &&  m_wbd_stb_i && holding_busy == 0 && m_wbd_ack_o == 0) begin
           holding_busy   <= 1'b1;
           m_wbd_dat_i_ff <= m_wbd_dat_i;
           m_wbd_adr_i_ff <= m_wbd_adr_i;
diff --git a/verilog/rtl/mac_wrapper/src/mac_wrapper.sv b/verilog/rtl/mac_wrapper/src/mac_wrapper.sv
new file mode 100644
index 0000000..d466634
--- /dev/null
+++ b/verilog/rtl/mac_wrapper/src/mac_wrapper.sv
@@ -0,0 +1,328 @@
+module mac_wrapper (
+
+                   input logic         app_clk        ,
+                   input logic         reset_n        ,
+
+                  // Clock Skew Adjust
+                  input logic [3:0]    cfg_cska_mac,
+                  input logic          wbd_clk_int,
+	              output logic         wbd_clk_skew,
+
+
+                   //-----------------------------------------------------------------------
+                   // Line-Tx Signal
+                   //-----------------------------------------------------------------------
+                   output logic         phy_tx_en      ,
+                   output logic         phy_tx_er      ,
+                   output logic [7:0]   phy_txd        ,
+                   input  logic	        phy_tx_clk     ,
+                   
+                   //-----------------------------------------------------------------------
+                   // Line-Rx Signal
+                   //-----------------------------------------------------------------------
+                   input  logic	        phy_rx_clk     ,
+                   input  logic	        phy_rx_er      ,
+                   input  logic	        phy_rx_dv      ,
+                   input  logic [7:0]   phy_rxd        ,
+                   input  logic	        phy_crs        ,
+                   
+                   
+                   //-----------------------------------------------------------------------
+                   // MDIO Signal
+                   //-----------------------------------------------------------------------
+                   input  logic	       mdio_clk        ,
+                   input  logic        mdio_in         ,
+                   output logic        mdio_out_en     ,
+                   output logic        mdio_out        ,
+
+                   //--------------------------------------------
+                   // GMAC TX WB Master I/F
+                   //--------------------------------------------
+                   input  logic [31:0] wbm_gtx_dat_i   ,
+                   input  logic        wbm_gtx_ack_i   ,
+                   output logic [31:0] wbm_gtx_dat_o   ,
+                   output logic [12:0] wbm_gtx_adr_o   ,
+                   output logic [3:0]  wbm_gtx_sel_o   ,
+                   output logic        wbm_gtx_we_o    ,
+                   output logic        wbm_gtx_stb_o   ,
+                   output logic        wbm_gtx_cyc_o   ,
+                
+                //--------------------------------------------
+                // GMAC RX WB Master I/F
+                //--------------------------------------------
+                   input  logic [31:0]  wbm_grx_dat_i  ,
+                   input  logic         wbm_grx_ack_i  ,
+                   output logic [31:0]  wbm_grx_dat_o  ,
+                   output logic [12:0]  wbm_grx_adr_o  ,
+                   output logic [3:0]   wbm_grx_sel_o  ,
+                   output logic         wbm_grx_we_o   ,
+                   output logic         wbm_grx_stb_o  ,
+                   output logic         wbm_grx_cyc_o  ,
+                
+                //--------------------------------------------
+                // GMAC REG WB SLAVE I/F
+                //--------------------------------------------
+                   output  logic [31:0]  wbs_grg_dat_o  ,
+                   output  logic         wbs_grg_ack_o  ,
+                   input   logic [31:0]  wbs_grg_dat_i  ,
+                   input   logic [12:0]  wbs_grg_adr_i  ,
+                   input   logic [3:0]   wbs_grg_sel_i  ,
+                   input   logic         wbs_grg_we_i   ,
+                   input   logic         wbs_grg_stb_i  ,
+                   input   logic         wbs_grg_cyc_i  ,
+                   
+                  // Q Occupancy
+                   output logic [9:0]   cfg_tx_qbase_addr,
+                   output logic [9:0]   cfg_rx_qbase_addr,
+
+                   input logic           mac_tx_qcnt_inc,
+                   input logic           mac_tx_qcnt_dec,
+                   input logic           mac_rx_qcnt_inc,  
+                   input logic           mac_rx_qcnt_dec       
+
+                );
+
+wire [8:0]               app_txfifo_wrdata_i;
+wire [15:0]              app_txfifo_addr    ;
+wire [15:0]              app_rxfifo_addr    ;
+wire [3:0]               tx_qcnt            ;
+wire [3:0]               rx_qcnt            ;
+
+//-----------------------------
+// MAC Related wire Decleration
+//-----------------------------
+wire [8:0]               app_rxfifo_rddata_o;
+wire [31:0]              app_rx_desc_data   ;
+
+wire tx_q_empty  = (tx_qcnt == 0);
+wire rx_q_empty  = (rx_qcnt == 0);
+
+
+//  clock skew control
+clk_skew_adjust u_skew_mac
+       (
+`ifdef USE_POWER_PINS
+               .vccd1      (vccd1                      ),// User area 1 1.8V supply
+               .vssd1      (vssd1                      ),// User area 1 digital ground
+`endif
+	           .clk_in     (wbd_clk_int                 ), 
+	           .sel        (cfg_cska_mac                ), 
+	           .clk_out    (wbd_clk_skew                ) 
+       );
+
+/****************************
+//---------------------------------------------------------------
+// Mapping the MAC Interface Signal to Caravel I/O
+//---------------------------------------------------------------
+//-----------------------------------------------------------------------
+// Line-Tx Signal
+//-----------------------------------------------------------------------
+logic	      phy_tx_clk     ;
+logic         phy_tx_en      ;
+logic         phy_tx_er      ;
+logic [7:0]   phy_txd        ;
+
+assign io_out[7:0] = phy_txd;
+assign io_out[8]   = phy_tx_en;
+assign io_out[9]   = phy_tx_er;
+assign io_out[10]  = phy_tx_clk;
+assign io_out[11]  = 1'b0; // Reserved
+
+assign io_oeb[11:0] = 'h0; // All are Output
+
+                   
+//-----------------------------------------------------------------------
+// Line-Rx Signal
+//-----------------------------------------------------------------------
+input  logic	        phy_rx_clk     ,
+input  logic	        phy_rx_er      ,
+input  logic	        phy_rx_dv      ,
+input  logic [7:0]      phy_rxd        ,
+input  logic	        phy_crs        ,
+
+assign  phy_rx_dv   = io_in[12];
+assign  phy_rx_er   = io_in[13];
+assign  phy_crs     = io_in[14];
+assign  phy_rx_clk  = io_in[15];
+assign  phy_rxd     = io_in[23:16];
+
+assign io_oeb[23:16] = 12'hFFF; // All are Inputs
+                   
+                   
+//-----------------------------------------------------------------------
+// MDIO Signal
+//-----------------------------------------------------------------------
+logic	        mdio_clk        ;
+logic           mdio_in         ;
+logic           mdio_out_en     ;
+logic           mdio_out        ;
+
+
+assign io_in[24]  = mdio_clk;
+assign io_in[25]  = mdio_in;
+assign io_out[25] = mdio_out;
+assign io_oeb[24] = 1'b1; // mdio clk input
+assign io_oeb[25] = mdio_out_en;
+*******************/
+
+
+
+// QCounter Inc/dec generation
+// Ned to move this logic to wishbone interconnect
+//wire tx_qcnt_inc = (cfg_tx_buf_qbase_addr == wb_xram_adr[15:6]) && wb_xram_stb && wb_xram_wr  && wb_xram_ack && (wb_xram_be[3] == 1'b1);
+//wire tx_qcnt_dec = (cfg_tx_buf_qbase_addr == wb_xram_adr[15:6]) && wb_xram_stb && !wb_xram_wr && wb_xram_ack && (wb_xram_be[3] == 1'b1);
+//wire rx_qcnt_inc = (cfg_rx_buf_qbase_addr == wb_xram_adr[15:6]) && wb_xram_stb && wb_xram_wr  && wb_xram_ack && (wb_xram_be[3] == 1'b1);
+//wire rx_qcnt_dec = (cfg_rx_buf_qbase_addr == wb_xram_adr[15:6]) && wb_xram_stb && !wb_xram_wr && wb_xram_ack && (wb_xram_be[3] == 1'b1);
+
+//-------------------------------------------
+// GMAC core instantiation
+//-------------------------------------------
+
+g_mac_top u_eth_dut (
+
+          .scan_mode                    ( 1'b0               ), 
+          .s_reset_n                    ( reset_n            ), 
+          .tx_reset_n                   ( reset_n            ),
+          .rx_reset_n                   ( reset_n            ),
+          .reset_mdio_clk_n             ( reset_n            ),
+          .app_reset_n                  ( reset_n            ),
+
+        // Reg Bus Interface Signal
+          .reg_cs                       ( wbs_grg_stb_i         ),
+          .reg_wr                       ( wbs_grg_we_i          ),
+          .reg_addr                     ( wbs_grg_adr_i[5:2]    ),
+          .reg_wdata                    ( wbs_grg_dat_i         ),
+          .reg_be                       ( wbs_grg_sel_i         ),
+
+           // Outputs
+          .reg_rdata                    ( wbs_grg_dat_o         ),
+          .reg_ack                      ( wbs_grg_ack_o         ),
+
+
+          .app_clk                      ( app_clk               ),
+
+          // Application RX FIFO Interface
+          .app_txfifo_wren_i            ( app_txfifo_wren_i     ),
+          .app_txfifo_wrdata_i          ( app_txfifo_wrdata_i   ),
+          .app_txfifo_addr              ( app_txfifo_addr       ),
+          .app_txfifo_full_o            ( app_txfifo_full_o     ),
+          .app_txfifo_afull_o           ( app_txfifo_afull_o    ),
+          .app_txfifo_space_o           (                      ),
+
+          // Application TX FIFO Interface
+          .app_rxfifo_rden_i            ( app_rxfifo_rden_i     ),
+          .app_rxfifo_empty_o           ( app_rxfifo_empty_o    ),
+          .app_rxfifo_aempty_o          ( app_rxfifo_aempty_o   ),
+          .app_rxfifo_cnt_o             (                       ),
+          .app_rxfifo_rdata_o           ( app_rxfifo_rddata_o   ),
+          .app_rxfifo_addr              ( app_rxfifo_addr       ),
+
+          .app_rx_desc_req              ( app_rx_desc_req       ),
+          .app_rx_desc_ack              ( app_rx_desc_ack       ),
+          .app_rx_desc_discard          ( app_rx_desc_discard   ),
+          .app_rx_desc_data             ( app_rx_desc_data      ),
+
+          // Line Side Interface TX Path
+          .phy_tx_en                    ( phy_tx_en             ),
+          .phy_tx_er                    ( phy_tx_er             ),
+          .phy_txd                      ( phy_txd               ),
+          .phy_tx_clk                   ( phy_tx_clk            ),
+
+          // Line Side Interface RX Path
+          .phy_rx_clk                   ( phy_rx_clk            ),
+          .phy_rx_er                    ( phy_rx_er             ),
+          .phy_rx_dv                    ( phy_rx_dv             ),
+          .phy_rxd                      ( phy_rxd               ),
+          .phy_crs                      ( phy_crs               ),
+
+          //MDIO interface
+          .mdio_clk                     ( mdio_clk              ),
+          .mdio_in                      ( mdio_in               ),
+          .mdio_out_en                  ( mdio_out_en           ),
+          .mdio_out                     ( mdio_out              ),
+
+          // QCounter
+          .rx_buf_qbase_addr            ( cfg_rx_qbase_addr     ),
+          .tx_buf_qbase_addr            ( cfg_tx_qbase_addr     ),
+
+          .tx_qcnt_inc                  ( mac_tx_qcnt_inc       ),
+          .tx_qcnt_dec                  ( mac_tx_qcnt_dec       ),
+          .rx_qcnt_inc                  ( mac_rx_qcnt_inc       ),
+          .rx_qcnt_dec                  ( mac_rx_qcnt_dec       ),
+          .tx_qcnt                      ( tx_qcnt               ),
+          .rx_qcnt                      ( rx_qcnt               )
+
+
+       );
+
+
+
+//-------------------------------------------------
+// GMAX => MEMORY WRITE
+//-------------------------------------------------
+
+wb_rd_mem2mem #(.D_WD(32),.BE_WD(4),.ADR_WD(13),.TAR_WD(4)) u_wb_gmac_tx (
+
+          .rst_n               ( gen_resetn         ),
+          .clk                 ( app_clk            ),
+
+    // descriptor handshake
+          .cfg_desc_baddr      (cfg_tx_qbase_addr    ),
+          .desc_q_empty        (tx_q_empty           ),
+
+    // Master Interface Signal
+          .mem_taddr           ( 4'h1               ),
+          .mem_full            (app_txfifo_full_o   ),
+          .mem_afull           (app_txfifo_afull_o  ),
+          .mem_wr              (app_txfifo_wren_i   ), 
+          .mem_din             (app_txfifo_wrdata_i ),
+ 
+    // Slave Interface Signal
+          .wbo_dout            ( wbm_gtx_dat_i      ),
+          .wbo_ack             ( wbm_gtx_ack_i      ),
+          .wbo_taddr           (                    ),
+          .wbo_addr            ( wbm_gtx_adr_o      ),
+          .wbo_be              ( wbm_gtx_sel_o      ),
+          .wbo_we              ( wbm_gtx_we_o       ),
+          .wbo_stb             ( wbm_gtx_stb_o      ), 
+          .wbo_cyc             ( wbm_gtx_cyc_o      ), 
+          .wbo_err             (                    ),
+          .wbo_rty             ( 1'b0               )
+         );
+
+
+wb_wr_mem2mem #(.D_WD(32),.BE_WD(4),.ADR_WD(13),.TAR_WD(4)) u_wb_gmac_rx(
+
+          .rst_n               ( reset_n      ), 
+          .clk                 ( app_clk      ),
+
+
+    // Master Interface Signal
+          .mem_taddr           ( 4'h1                 ),
+          .mem_addr            (app_rxfifo_addr       ),
+          .mem_empty           (app_rxfifo_empty_o    ),
+          .mem_aempty          (app_rxfifo_aempty_o   ),
+          .mem_rd              (app_rxfifo_rden_i     ), 
+          .mem_dout            (app_rxfifo_rddata_o[7:0]),
+          .mem_eop             (app_rxfifo_rddata_o[8]),
+ 
+          .cfg_desc_baddr      (cfg_rx_qbase_addr     ),
+          .desc_req            (app_rx_desc_req       ),
+          .desc_ack            (app_rx_desc_ack       ),
+          .desc_disccard       (app_rx_desc_discard   ),
+          .desc_data           (app_rx_desc_data      ),
+    // Slave Interface Signal
+          .wbo_din             ( wbm_grx_dat_o   ), 
+          .wbo_taddr           (                 ), 
+          .wbo_addr            ( wbm_grx_adr_o   ), 
+          .wbo_be              ( wbm_grx_sel_o   ), 
+          .wbo_we              ( wbm_grx_we_o    ), 
+          .wbo_ack             ( wbm_grx_ack_i   ),
+          .wbo_stb             ( wbm_grx_stb_o   ), 
+          .wbo_cyc             ( wbm_grx_cyc_o   ), 
+          .wbo_err             ( wbm_grx_err     ),
+          .wbo_rty             ( 1'b0            )
+         );
+
+
+endmodule
diff --git a/verilog/rtl/mbist/src/core/mbist_mem_wrapper.sv b/verilog/rtl/mbist/src/core/mbist_mem_wrapper.sv
index b631626..8f31671 100644
--- a/verilog/rtl/mbist/src/core/mbist_mem_wrapper.sv
+++ b/verilog/rtl/mbist/src/core/mbist_mem_wrapper.sv
@@ -61,60 +61,42 @@
 ////                                                              ////
 //////////////////////////////////////////////////////////////////////
 module mbist_mem_wrapper #(
+	parameter BIST_NO_SRAM=4,
 	parameter BIST_ADDR_WD=10,
 	parameter BIST_DATA_WD=32) (
 	input   logic                          rst_n           ,
           // WB I/F
+	input   logic [(BIST_NO_SRAM+1)/2-1:0] sram_id         ,
         input   logic                          wb_clk_i        ,  // System clock
-        input   logic                          wb_cyc_i        ,  // strobe/request
-        input   logic                          wb_stb_i        ,  // strobe/request
-        input   logic [BIST_ADDR_WD-1:0]       wb_adr_i        ,  // address
-        input   logic                          wb_we_i         ,  // write
-        input   logic [BIST_DATA_WD-1:0]       wb_dat_i        ,  // data output
-        input   logic [BIST_DATA_WD/8-1:0]     wb_sel_i        ,  // byte enable
-        output  logic [BIST_DATA_WD-1:0]       wb_dat_o        ,  // data input
-        output  logic                          wb_ack_o        ,  // acknowlegement
-        output  logic                          wb_err_o        ,  // error
-      // MEM A PORT 
-        output   logic                         func_clk_a      ,
-        output   logic                         func_cen_a      ,
-        output   logic  [BIST_ADDR_WD-1:0]     func_addr_a     ,
-        input    logic  [BIST_DATA_WD-1:0]     func_dout_a     ,
-
-       // Functional B Port
-        output   logic                         func_clk_b     ,
-        output   logic                         func_cen_b     ,
-        output   logic                         func_web_b     ,
-        output   logic [BIST_DATA_WD/8-1:0]    func_mask_b    ,
-        output   logic  [BIST_ADDR_WD-1:0]     func_addr_b    ,
-        output   logic  [BIST_DATA_WD-1:0]     func_din_b     
+        input   logic [(BIST_NO_SRAM+1)/2-1:0] mem_cs          ,  // Chip Select
+        input   logic                          mem_req         ,  // strobe/request
+        input   logic [BIST_ADDR_WD-1:0]       mem_addr        ,  // address
+        input   logic                          mem_we          ,  // write
+        input   logic [BIST_DATA_WD-1:0]       mem_wdata       ,  // data output
+        input   logic [BIST_DATA_WD/8-1:0]     mem_wmask       ,  // byte enable
+        output  logic [BIST_DATA_WD-1:0]       mem_rdata       ,  // data input
+      // MEM PORT 
+        output   logic                         func_clk        ,
+        output   logic                         func_cen        ,
+        output   logic                         func_web        ,
+        output   logic [BIST_DATA_WD/8-1:0]    func_mask       ,
+        output   logic  [BIST_ADDR_WD-1:0]     func_addr       ,
+        input    logic  [BIST_DATA_WD-1:0]     func_dout       ,
+        output   logic  [BIST_DATA_WD-1:0]     func_din        
 
 );
 
 
 // Memory Write PORT
-assign func_clk_b    = wb_clk_i;
-assign func_cen_b    = !wb_stb_i;
-assign func_web_b    = !wb_we_i;
-assign func_mask_b   = wb_sel_i;
-assign func_addr_b   = wb_adr_i;
-assign func_din_b    = wb_dat_i;
+assign func_clk    = wb_clk_i;
+assign func_cen    = (mem_cs  == sram_id) ? !mem_req : 1'b1;
+assign func_web    = (mem_cs  == sram_id) ? !mem_we   : 1'b1;
+assign func_mask   = mem_wmask;
+assign func_addr   = mem_addr;
+assign func_din    = mem_wdata;
+assign mem_rdata   = func_dout;
 
-assign func_clk_a    = wb_clk_i;
-assign func_cen_a    = (wb_stb_i == 1'b1 && wb_we_i == 1'b0 && wb_ack_o ==0) ? 1'b0 : 1'b1;
-assign func_addr_a   = wb_adr_i;
-assign wb_dat_o      = func_dout_a;
 
-assign wb_err_o      = 1'b0;
-
-// Generate Once cycle delayed ACK to get the data from SRAM
-always_ff @(negedge rst_n or posedge wb_clk_i) begin
-    if ( rst_n == 1'b0 ) begin
-      wb_ack_o<= 'h0;
-   end else begin
-      wb_ack_o <= (wb_stb_i == 1'b1) & (wb_ack_o == 0);
-   end
-end
 
 
 endmodule
diff --git a/verilog/rtl/mbist/src/core/mbist_mux.sv b/verilog/rtl/mbist/src/core/mbist_mux.sv
index c3064f8..77ee052 100755
--- a/verilog/rtl/mbist/src/core/mbist_mux.sv
+++ b/verilog/rtl/mbist/src/core/mbist_mux.sv
@@ -48,7 +48,6 @@
 	 parameter BIST_RAD_WD_O          = BIST_ADDR_WD) (
 
       input   logic                      scan_mode,
-      input   logic                      cfg_mem_lphase,
 
       input   logic                      rst_n,
       // MBIST CTRL SIGNAL
@@ -65,142 +64,69 @@
       input   logic                      bist_shift,
       output  logic                      bist_sdo,
 
-      // FUNCTIONAL CTRL SIGNAL
-      input   logic                      func_clk_a,
-      input   logic                      func_cen_a,
-      input   logic  [BIST_ADDR_WD-1:0]  func_addr_a,
-      // Common for func and Mbist i/f
-      output  logic  [BIST_DATA_WD-1:0]  func_dout_a,
-
-      input   logic                      func_clk_b,
-      input   logic                      func_cen_b,
-      input   logic                      func_web_b,
-      input   logic [BIST_DATA_WD/8-1:0] func_mask_b,
-      input   logic  [BIST_ADDR_WD-1:0]  func_addr_b,
-      input   logic  [BIST_DATA_WD-1:0]  func_din_b,
+      input   logic                      func_clk,
+      input   logic                      func_cen,
+      input   logic                      func_web,
+      input   logic [BIST_DATA_WD/8-1:0] func_mask,
+      input   logic  [BIST_ADDR_WD-1:0]  func_addr,
+      input   logic  [BIST_DATA_WD-1:0]  func_din,
+      output  logic  [BIST_DATA_WD-1:0]  func_dout,
 
 
      // towards memory
-      output logic                       mem_clk_a,
-      output logic                       mem_cen_a,
-      output logic   [BIST_ADDR_WD-1:0]  mem_addr_a,
-      input  logic   [BIST_DATA_WD-1:0]  mem_dout_a,
 
-      output logic                       mem_clk_b,
-      output logic                       mem_cen_b,
-      output logic                       mem_web_b,
-      output logic [BIST_DATA_WD/8-1:0]  mem_mask_b,
-      output logic   [BIST_ADDR_WD-1:0]  mem_addr_b,
-      output logic   [BIST_DATA_WD-1:0]  mem_din_b
+      output logic                       mem_clk,
+      output logic                       mem_cen,
+      output logic                       mem_web,
+      output logic [BIST_DATA_WD/8-1:0]  mem_mask,
+      output logic   [BIST_ADDR_WD-1:0]  mem_addr,
+      output logic   [BIST_DATA_WD-1:0]  mem_din,
+      input  logic   [BIST_DATA_WD-1:0]  mem_dout
     );
 
 
 parameter BIST_MASK_WD = BIST_DATA_WD/8;
 
-wire   [BIST_ADDR_WD-1:0]      addr_a;
-wire   [BIST_ADDR_WD-1:0]      addr_b;
-wire                           mem_clk_a_cts; // used for internal clock tree
-wire                           mem_clk_b_cts; // usef for internal clock tree
+wire   [BIST_ADDR_WD-1:0]      addr;
 
-//----------------------------------------------------------------
-// As there SRAM timing model is not correct. we have created
-// additional position drive data in negedge
-// ----------------------------------------------------------------
 
-logic                       mem_cen_a_int;
-logic   [BIST_ADDR_WD-1:0]  mem_addr_a_int;
 
-logic                       mem_cen_b_int;
-logic                       mem_web_b_int;
-logic [BIST_DATA_WD/8-1:0]  mem_mask_b_int;
-logic   [BIST_ADDR_WD-1:0]  mem_addr_b_int;
-logic   [BIST_DATA_WD-1:0]  mem_din_b_int;
+assign addr   = (bist_en) ? bist_addr   : func_addr;
 
-logic                       mem_cen_a_neg;
-logic   [BIST_ADDR_WD-1:0]  mem_addr_a_neg;
-
-logic                       mem_cen_b_neg;
-logic                       mem_web_b_neg;
-logic [BIST_DATA_WD/8-1:0]  mem_mask_b_neg;
-logic   [BIST_ADDR_WD-1:0]  mem_addr_b_neg;
-logic   [BIST_DATA_WD-1:0]  mem_din_b_neg;
-
-always @(negedge rst_n or negedge mem_clk_a) begin
-   if(rst_n == 0) begin
-      mem_cen_a_neg  <= '0;
-      mem_addr_a_neg <= '0;
-   end else begin
-      mem_cen_a_neg  <= mem_cen_a_int;
-      mem_addr_a_neg <= mem_addr_a_int;
-   end
-end
-
-always @(negedge rst_n or negedge mem_clk_b) begin
-   if(rst_n == 0) begin
-       mem_cen_b_neg   <= '0;
-       mem_web_b_neg   <= '0;
-       mem_mask_b_neg  <= '0;
-       mem_addr_b_neg  <= '0;
-       mem_din_b_neg   <= '0;
-   end else begin
-       mem_cen_b_neg   <= mem_cen_b_int;
-       mem_web_b_neg   <= mem_web_b_int;
-       mem_mask_b_neg  <= mem_mask_b_int;
-       mem_addr_b_neg  <= mem_addr_b_int;
-       mem_din_b_neg   <= mem_din_b_int;
-   end
-end
-
-assign mem_cen_a   = (cfg_mem_lphase == 0) ?  mem_cen_a_int  : mem_cen_a_neg;
-assign mem_addr_a  = (cfg_mem_lphase == 0) ?  mem_addr_a_int : mem_addr_a_neg;
-
-assign mem_cen_b   = (cfg_mem_lphase == 0) ?  mem_cen_b_int  : mem_cen_b_neg;
-assign mem_web_b   = (cfg_mem_lphase == 0) ?  mem_web_b_int  : mem_web_b_neg;
-assign mem_mask_b  = (cfg_mem_lphase == 0) ?  mem_mask_b_int : mem_mask_b_neg;
-assign mem_addr_b  = (cfg_mem_lphase == 0) ?  mem_addr_b_int : mem_addr_b_neg;
-assign mem_din_b   = (cfg_mem_lphase == 0) ?  mem_din_b_int  : mem_din_b_neg;
-
-//-----------------------------------------
-assign addr_a   = (bist_en) ? bist_addr   : func_addr_a;
-assign addr_b   = (bist_en) ? bist_addr   : func_addr_b;
-
-assign mem_cen_a_int    = (bist_en) ? !bist_rd   : func_cen_a;
-assign mem_cen_b_int    = (bist_en) ? !bist_wr   : func_cen_b;
-
-assign mem_web_b_int    = (bist_en) ? !bist_wr   : func_web_b;
-assign mem_mask_b_int   = (bist_en) ? {{BIST_MASK_WD}{1'b1}}       : func_mask_b;
+assign mem_cen    = (bist_en) ? !(bist_rd | bist_wr)   : func_cen;
+assign mem_web    = (bist_en) ? !bist_wr   : func_web;
+assign mem_mask   = (bist_en) ? {{BIST_MASK_WD}{1'b1}} : func_mask;
 
 //assign mem_clk_a    = (bist_en) ? bist_clk   : func_clk_a;
 //assign mem_clk_b    = (bist_en) ? bist_clk   : func_clk_b;
 
-ctech_mux2x1 u_mem_clk_a_sel (.A0 (func_clk_a),.A1 (bist_clk),.S  (bist_en),     .X  (mem_clk_a));
-ctech_mux2x1 u_mem_clk_b_sel (.A0 (func_clk_b),.A1 (bist_clk),.S  (bist_en),     .X  (mem_clk_b));
+ctech_mux2x1 u_mem_clk_sel (.A0 (func_clk),.A1 (bist_clk),.S  (bist_en),     .X  (mem_clk));
 
-ctech_clk_buf u_cts_mem_clk_a (.A (mem_clk_a), . X(mem_clk_a_cts));
-ctech_clk_buf u_cts_mem_clk_b (.A (mem_clk_b), . X(mem_clk_b_cts));
+//ctech_clk_buf u_mem_clk (.A (mem_clk_cts), . X(mem_clk));
 
-assign mem_din_b_int    = (bist_en) ? bist_wdata   : func_din_b;
+assign mem_din    = (bist_en) ? bist_wdata   : func_din;
+
 
 
 // During scan, SRAM data is unknown, feed data in back to avoid unknow
 // propagation
-assign func_dout_a   =  (scan_mode) ?  mem_din_b : mem_dout_a;
+assign func_dout   =  (scan_mode) ?  mem_din : mem_dout;
 
 mbist_repair_addr 
-      #(.BIST_ADDR_WD           (BIST_ADDR_WD),
+   #(.BIST_ADDR_WD           (BIST_ADDR_WD),
 	.BIST_DATA_WD           (BIST_DATA_WD),
 	.BIST_ADDR_START        (BIST_ADDR_START),
 	.BIST_ADDR_END          (BIST_ADDR_END),
 	.BIST_REPAIR_ADDR_START (BIST_REPAIR_ADDR_START),
 	.BIST_RAD_WD_I          (BIST_RAD_WD_I),
 	.BIST_RAD_WD_O          (BIST_RAD_WD_O)) 
-     u_repair_A(
-    .AddressOut    (mem_addr_a_int   ),
+     u_repair(
+    .AddressOut    (mem_addr         ),
     .Correct       (bist_correct     ),
     .sdo           (bist_sdo         ),
 
-    .AddressIn     (addr_a           ),
-    .clk           (mem_clk_a_cts    ),
+    .AddressIn     (addr             ),
+    .clk           (mem_clk          ),
     .rst_n         (rst_n            ),
     .Error         (bist_error       ),
     .ErrorAddr     (bist_error_addr  ),
@@ -208,27 +134,6 @@
     .sdi           (bist_sdi         )
 );
 
-mbist_repair_addr 
-      #(.BIST_ADDR_WD           (BIST_ADDR_WD),
-	.BIST_DATA_WD           (BIST_DATA_WD),
-	.BIST_ADDR_START        (BIST_ADDR_START),
-	.BIST_ADDR_END          (BIST_ADDR_END),
-	.BIST_REPAIR_ADDR_START (BIST_REPAIR_ADDR_START),
-	.BIST_RAD_WD_I          (BIST_RAD_WD_I),
-	.BIST_RAD_WD_O          (BIST_RAD_WD_O)) 
-    u_repair_B(
-    .AddressOut    (mem_addr_b_int  ),
-    .Correct       (                ), // Both Bist Correct are same
-    .sdo           (                ),
-
-    .AddressIn     (addr_b          ),
-    .clk           (mem_clk_b_cts   ),
-    .rst_n         (rst_n           ),
-    .Error         (bist_error      ),
-    .ErrorAddr     (bist_error_addr ),
-    .scan_shift    (1'b0            ), // Both Repair hold same address
-    .sdi           (1'b0            )
-);
 
 
 
diff --git a/verilog/rtl/mbist/src/core/mbist_op_sel.sv b/verilog/rtl/mbist/src/core/mbist_op_sel.sv
index a995b8e..e160346 100644
--- a/verilog/rtl/mbist/src/core/mbist_op_sel.sv
+++ b/verilog/rtl/mbist/src/core/mbist_op_sel.sv
@@ -95,6 +95,9 @@
 assign last_op       = (re_init) ? 1'b0 : op_sel[0];
 
 
+// Need to update the SDI chain here
+assign sdo = sdi;
+
 
 always_comb
 begin
diff --git a/verilog/rtl/mbist/src/core/mbist_repair_addr.sv b/verilog/rtl/mbist/src/core/mbist_repair_addr.sv
index dbeddcd..71ee7ac 100644
--- a/verilog/rtl/mbist/src/core/mbist_repair_addr.sv
+++ b/verilog/rtl/mbist/src/core/mbist_repair_addr.sv
@@ -123,7 +123,9 @@
      shift_cnt   <= '0;
      scan_shift_d <= 1'b0;
    end else begin
-      if(scan_shift && (shift_cnt[7:4] < BIST_ERR_LIMIT)) begin
+      if(!scan_shift) begin
+           shift_cnt <= 'h0;
+      end else if(scan_shift && (shift_cnt[7:4] < BIST_ERR_LIMIT)) begin
          shift_cnt <= shift_cnt+1;
       end
       scan_shift_d <= scan_shift;
diff --git a/verilog/rtl/mbist/src/top/mbist_top.sv b/verilog/rtl/mbist/src/top/mbist_top.sv
index 806ce13..6d02f3d 100644
--- a/verilog/rtl/mbist/src/top/mbist_top.sv
+++ b/verilog/rtl/mbist/src/top/mbist_top.sv
@@ -65,7 +65,7 @@
 
     // Clock Skew Adjust
        input  wire                           wbd_clk_int, 
-       output wire                           wbd_clk_mbist,
+       output wire                           wbd_clk_skew,
        input  wire [3:0]                     cfg_cska_mbist, // clock skew adjust for web host
 
 	input logic                            rst_n,
@@ -76,6 +76,7 @@
 	input wire                            bist_shift,
 	input wire                            bist_load,
 	input wire                            bist_sdi,
+	input wire [1:0]                      bist_serial_sel,
 
 	output wire [3:0]                     bist_error_cnt0,
 	output wire [3:0]                     bist_error_cnt1,
@@ -222,7 +223,7 @@
 
 // Towards MEMORY PORT - A
 assign mem_clk_b   = 'b0;
-assign mem_cen_b   = 'b0;
+assign mem_cen_b   = 'b1;
 assign mem_addr_b0 = 'b0;
 assign mem_addr_b1 = 'b0;
 assign mem_addr_b2 = 'b0;
@@ -248,7 +249,10 @@
 assign bist_ms_sdi[1] = bist_ms_sdo[0];
 assign bist_ms_sdi[2] = bist_ms_sdo[1];
 assign bist_ms_sdi[3] = bist_ms_sdo[2];
-assign bist_sdo = bist_ms_sdo[3];
+assign bist_sdo = (bist_serial_sel == 2'b00) ? bist_ms_sdo[0] :
+                  (bist_serial_sel == 2'b01) ? bist_ms_sdo[1] :
+                  (bist_serial_sel == 2'b10) ? bist_ms_sdo[2] :
+                  (bist_serial_sel == 2'b11) ? bist_ms_sdo[3] : 1'b0;
 
 // Pick the correct read path
 assign mem_rdata = wb_dat[mem_cs];
@@ -273,7 +277,7 @@
 `endif
 	       .clk_in     (wbd_clk_int                ), 
 	       .sel        (cfg_cska_mbist             ), 
-	       .clk_out    (wbd_clk_mbist              ) 
+	       .clk_out    (wbd_clk_skew               ) 
        );
 
 reset_sync   u_reset_sync (
@@ -353,8 +357,8 @@
                     .rst_n              (srst_n             ),       
                     .run                (run_addr           ),         
                     .updown             (op_updown          ),      
-                    .bist_shift         (bist_shift         ),  
-                    .bist_load          (bist_load          ),   
+                    .scan_shift         (bist_shift         ),  
+                    .scan_load          (bist_load          ),   
                     .sdi                (bist_sdi           )
 
 );
@@ -375,7 +379,7 @@
 
 	            .sdo                (bist_sti_sdo       ),  
 	            .last_stimulus      (last_sti           ),  
-                    .stimulus           (stimulus           ),
+                .stimulus           (stimulus           ),
 
 	            .clk                (wb_clk_i           ),  
 	            .rst_n              (srst_n             ),  
@@ -399,7 +403,7 @@
           )
         u_op_sel (
 
-                    .op_read            (op_read               ), 
+                .op_read            (op_read               ), 
 	            .op_write           (op_write              ),
 	            .op_invert          (op_invert             ),
 	            .op_updown          (op_updown             ),
@@ -412,9 +416,9 @@
 	            .rst_n              (srst_n                ),
 	            .scan_shift         (bist_shift            ),
 	            .sdi                (bist_sti_sdo          ),
-		    .re_init            (bist_error_correct_or ),
+		        .re_init            (bist_error_correct_or ),
 	            .run                (run_op                ),
-                    .stimulus           (stimulus              )
+                .stimulus           (stimulus              )
 
     );
 
@@ -520,43 +524,42 @@
           )
        u_mem_sel (
 
-	            .scan_mode            (1'b0                       ),
+	        .scan_mode            (1'b0                       ),
 
-                    .rst_n                (srst_n                     ),
-                    // MBIST CTRL SIGNAL
-                    .bist_en              (bist_en                    ),
-                    .bist_addr            (bist_addr                  ),
-                    .bist_wdata           (bist_wdata                 ),
-                    .bist_clk             (wb_clk2_i                  ),
-                    .bist_wr              (bist_wr                    ),
-                    .bist_rd              (bist_rd                    ),
-                    .bist_error           (bist_error_correct[sram_no]),
-                    .bist_error_addr      (bist_error_addr[sram_no]   ),
-                    .bist_correct         (bist_correct[sram_no]      ),
+            .rst_n                (srst_n                     ),
+            // MBIST CTRL SIGNAL
+            .bist_en              (bist_en                    ),
+            .bist_addr            (bist_addr                  ),
+            .bist_wdata           (bist_wdata                 ),
+            .bist_clk             (wb_clk2_i                  ),
+            .bist_wr              (bist_wr                    ),
+            .bist_rd              (bist_rd                    ),
+            .bist_error           (bist_error_correct[sram_no]),
+            .bist_error_addr      (bist_error_addr[sram_no]   ),
+            .bist_correct         (bist_correct[sram_no]      ),
 		    .bist_sdi             (bist_ms_sdi[sram_no]       ),
-		    .bist_load            (bist_load                  ),
 		    .bist_shift           (bist_shift                 ),
 		    .bist_sdo             (bist_ms_sdo[sram_no]       ),
 
-                    // FUNCTIONAL CTRL SIGNAL
-                    .func_clk             (func_clk[sram_no]          ),
-                    .func_cen             (func_cen[sram_no]          ),
-	            .func_web             (func_web[sram_no]          ),
-	            .func_mask            (func_mask[sram_no]         ),
-                    .func_addr            (func_addr[sram_no]         ),
-                    .func_din             (func_din[sram_no]          ),
-                    .func_dout            (func_dout[sram_no]         ),
+            // FUNCTIONAL CTRL SIGNAL
+            .func_clk             (func_clk[sram_no]          ),
+            .func_cen             (func_cen[sram_no]          ),
+	        .func_web             (func_web[sram_no]          ),
+	        .func_mask            (func_mask[sram_no]         ),
+            .func_addr            (func_addr[sram_no]         ),
+            .func_din             (func_din[sram_no]          ),
+            .func_dout            (func_dout[sram_no]         ),
 
 
-                    // towards memory
-                    // Memory Out Port
-                    .mem_clk             (mem_clk_a[sram_no]          ),
-                    .mem_cen             (mem_cen_a[sram_no]          ),
-                    .mem_web             (mem_web_a[sram_no]          ),
-                    .mem_mask            (mem_mask_a_i[sram_no]       ),
-                    .mem_addr            (mem_addr_a_i[sram_no]       ),
-                    .mem_din             (mem_din_a_i[sram_no]        ),
-                    .mem_dout            (mem_dout_a_i[sram_no]       )
+            // towards memory
+            // Memory Out Port
+            .mem_clk             (mem_clk_a[sram_no]          ),
+            .mem_cen             (mem_cen_a[sram_no]          ),
+            .mem_web             (mem_web_a[sram_no]          ),
+            .mem_mask            (mem_mask_a_i[sram_no]       ),
+            .mem_addr            (mem_addr_a_i[sram_no]       ),
+            .mem_din             (mem_din_a_i[sram_no]        ),
+            .mem_dout            (mem_dout_a_i[sram_no]       )
 
     );
 end
diff --git a/verilog/rtl/mbist_wrapper/src/mbist_wb.sv b/verilog/rtl/mbist_wrapper/src/mbist_wb.sv
index ef989dd..8628ea6 100644
--- a/verilog/rtl/mbist_wrapper/src/mbist_wb.sv
+++ b/verilog/rtl/mbist_wrapper/src/mbist_wb.sv
@@ -37,20 +37,20 @@
 	input  logic                            rst_n,
 
 
-        // WB I/F
-        input   logic                          wb_clk_i,  // System clock
-        input   logic                          wb_stb_i,  // strobe/request
-        input   logic [BIST_ADDR_WD-1:0]       wb_adr_i,  // address
-        input   logic [(BIST_NO_SRAM+1)/2-1:0] wb_cs_i,   // address
-        input   logic                          wb_we_i ,  // write
-        input   logic [BIST_DATA_WD-1:0]       wb_dat_i,  // data output
-        input   logic [BIST_DATA_WD/8-1:0]     wb_sel_i,  // byte enable
-        input   logic [9:0]                    wb_bl_i,   // Burst Length
-        input   logic                          wb_bry_i,  // Burst Ready
-        output  logic [BIST_DATA_WD-1:0]       wb_dat_o,  // data input
-        output  logic                          wb_ack_o,  // acknowlegement
-        output  logic                          wb_lack_o, // acknowlegement
-        output  logic                          wb_err_o,  // error
+    // WB I/F
+    input   logic                          wb_clk_i,  // System clock
+    input   logic                          wb_stb_i,  // strobe/request
+    input   logic [BIST_ADDR_WD-1:0]       wb_adr_i,  // address
+    input   logic [(BIST_NO_SRAM+1)/2-1:0] wb_cs_i,   // address
+    input   logic                          wb_we_i ,  // write
+    input   logic [BIST_DATA_WD-1:0]       wb_dat_i,  // data output
+    input   logic [BIST_DATA_WD/8-1:0]     wb_sel_i,  // byte enable
+    input   logic [9:0]                    wb_bl_i,   // Burst Length
+    input   logic                          wb_bry_i,  // Burst Ready
+    output  logic [BIST_DATA_WD-1:0]       wb_dat_o,  // data input
+    output  logic                          wb_ack_o,  // acknowlegement
+    output  logic                          wb_lack_o, // acknowlegement
+    output  logic                          wb_err_o,  // error
 
 	output  logic                          mem_req,
 	output  logic [(BIST_NO_SRAM+1)/2-1:0] mem_cs,
@@ -86,6 +86,7 @@
        mem_bl_cnt       <= 'h0;
        mem_addr         <= 'h0;
        mem_next_addr    <= 'h0;
+	   wb_ack_o         <=  'b0;
        wb_ack_l         <= 'b0;
        wb_dat_o         <= 'h0;
        mem_req          <= 'b0;
@@ -137,7 +138,7 @@
          end
        READ_ACTION1: begin
 	   mem_addr   <=  mem_addr +1;
-           mem_hval   <= 1'b0;
+       mem_hval   <= 1'b0;
 	   wb_ack_l   <=  'b1;
 	   mem_bl_cnt <=  'h1;
 	   state      <=  READ_ACTION2;
diff --git a/verilog/rtl/mbist_wrapper/src/mbist_wrapper.sv b/verilog/rtl/mbist_wrapper/src/mbist_wrapper.sv
index 07c5ce3..893f9dd 100644
--- a/verilog/rtl/mbist_wrapper/src/mbist_wrapper.sv
+++ b/verilog/rtl/mbist_wrapper/src/mbist_wrapper.sv
@@ -48,8 +48,8 @@
 
 `include "mbist_def.svh"
 module mbist_wrapper
-     #(  
-         parameter BIST_NO_SRAM           = 4,
+     #(  parameter SCW = 8,   // SCAN CHAIN WIDTH
+     parameter BIST_NO_SRAM           = 4,
 	 parameter BIST_ADDR_WD           = 9,
 	 parameter BIST_DATA_WD           = 32,
 	 parameter BIST_ADDR_START        = 9'h000,
@@ -62,86 +62,93 @@
     inout vccd1,	// User area 1 1.8V supply
     inout vssd1,	// User area 1 digital ground
 `endif
+    // Scan I/F
+    input logic                           scan_en           ,
+    input logic                           scan_mode         ,
+    input logic [SCW-1:0]                 scan_si           ,
+    output logic [SCW-1:0]                scan_so           ,
+    output logic                          scan_en_o         ,
+    output logic                          scan_mode_o       ,
 
     // Clock Skew Adjust
-       input  wire                           wbd_clk_int, 
-       output wire                           wbd_clk_mbist,
-       input  wire [3:0]                     cfg_cska_mbist, // clock skew adjust for web host
+    input  wire                           wbd_clk_int       , 
+    output wire                           wbd_clk_skew      ,
+    input  wire [3:0]                     cfg_cska_mbist    , // clock skew adjust for web host
 
-	input logic                            rst_n,
+	input logic                           rst_n                ,
 
 	// MBIST I/F
-	input wire                           bist_en,
-	input wire                            bist_run,
-	input wire                            bist_shift,
-	input wire                            bist_load,
-	input wire                            bist_sdi,
+	input wire                            bist_en              ,
+	input wire                            bist_run             ,
+	input wire                            bist_shift           ,
+	input wire                            bist_load            ,
+	input wire                            bist_sdi             ,
+	input wire   [1:0]                    bist_serial_sel      ,
 
-	output wire [3:0]                     bist_error_cnt0,
-	output wire [3:0]                     bist_error_cnt1,
-	output wire [3:0]                     bist_error_cnt2,
-	output wire [3:0]                     bist_error_cnt3,
-	output wire [BIST_NO_SRAM-1:0]        bist_correct   ,
-	output wire [BIST_NO_SRAM-1:0]        bist_error     ,
-	output wire                           bist_done,
-	output wire                           bist_sdo,
+	output wire [3:0]                     bist_error_cnt0      ,
+	output wire [3:0]                     bist_error_cnt1      ,
+	output wire [3:0]                     bist_error_cnt2      ,
+	output wire [3:0]                     bist_error_cnt3      ,
+	output wire [BIST_NO_SRAM-1:0]        bist_correct         ,
+	output wire [BIST_NO_SRAM-1:0]        bist_error           ,
+	output wire                           bist_done            ,
+	output wire                           bist_sdo             ,
 
 
-        // WB I/F
-        input   wire                          wb_clk_i,  // System clock
-        input   wire                          wb_clk2_i, // System clock2 is no cts
-        input   wire                          wb_stb_i,  // strobe/request
-	input   wire [(BIST_NO_SRAM+1)/2-1:0] wb_cs_i,
-        input   wire [BIST_ADDR_WD-1:0]       wb_adr_i,  // address
-        input   wire                          wb_we_i ,  // write
-        input   wire [BIST_DATA_WD-1:0]       wb_dat_i,  // data output
-        input   wire [BIST_DATA_WD/8-1:0]     wb_sel_i,  // byte enable
-        input   wire [9:0]                    wb_bl_i,   // burst 
-        input   wire                          wb_bry_i,  // burst ready
-        output  wire [BIST_DATA_WD-1:0]       wb_dat_o,  // data input
-        output  wire                          wb_ack_o,  // acknowlegement
-        output  wire                          wb_lack_o, // acknowlegement
-        output  wire                          wb_err_o,  // error
+   // WB I/F
+   input   wire                           wb_clk_i          ,  // System clock
+   input   wire                           wb_clk2_i         , // System clock2 is no cts
+   input   wire                           wb_stb_i          ,  // strobe/request
+   input   wire [(BIST_NO_SRAM+1)/2-1:0]  wb_cs_i           ,
+   input   wire [BIST_ADDR_WD-1:0]        wb_adr_i          ,  // address
+   input   wire                           wb_we_i           ,  // write
+   input   wire [BIST_DATA_WD-1:0]        wb_dat_i          ,  // data output
+   input   wire [BIST_DATA_WD/8-1:0]      wb_sel_i          ,  // byte enable
+   input   wire [9:0]                     wb_bl_i           ,   // burst 
+   input   wire                           wb_bry_i          ,  // burst ready
+   output  wire [BIST_DATA_WD-1:0]        wb_dat_o          ,  // data input
+   output  wire                           wb_ack_o          ,  // acknowlegement
+   output  wire                           wb_lack_o         , // acknowlegement
+   output  wire                           wb_err_o          ,  // error
 
 
-     // towards memory
-     // PORT-A
-        output wire   [BIST_NO_SRAM-1:0]      mem_clk_a,
-        output wire   [BIST_ADDR_WD-1:0]      mem_addr_a0,
-        output wire   [BIST_ADDR_WD-1:0]      mem_addr_a1,
-        output wire   [BIST_ADDR_WD-1:0]      mem_addr_a2,
-        output wire   [BIST_ADDR_WD-1:0]      mem_addr_a3,
-        output wire   [BIST_NO_SRAM-1:0]      mem_cen_a,
-        output wire   [BIST_NO_SRAM-1:0]      mem_web_a,
-        output wire   [BIST_DATA_WD/8-1:0]    mem_mask_a0,
-        output wire   [BIST_DATA_WD/8-1:0]    mem_mask_a1,
-        output wire   [BIST_DATA_WD/8-1:0]    mem_mask_a2,
-        output wire   [BIST_DATA_WD/8-1:0]    mem_mask_a3,
-        output wire   [BIST_DATA_WD-1:0]      mem_din_a0,
-        output wire   [BIST_DATA_WD-1:0]      mem_din_a1,
-        output wire   [BIST_DATA_WD-1:0]      mem_din_a2,
-        output wire   [BIST_DATA_WD-1:0]      mem_din_a3,
+   // towards memory
+   // PORT-A
+   output wire   [BIST_NO_SRAM-1:0]      mem_clk_a          ,
+   output wire   [BIST_ADDR_WD-1:0]      mem_addr_a0        ,
+   output wire   [BIST_ADDR_WD-1:0]      mem_addr_a1        ,
+   output wire   [BIST_ADDR_WD-1:0]      mem_addr_a2        ,
+   output wire   [BIST_ADDR_WD-1:0]      mem_addr_a3        ,
+   output wire   [BIST_NO_SRAM-1:0]      mem_cen_a          ,
+   output wire   [BIST_NO_SRAM-1:0]      mem_web_a          ,
+   output wire   [BIST_DATA_WD/8-1:0]    mem_mask_a0        ,
+   output wire   [BIST_DATA_WD/8-1:0]    mem_mask_a1        ,
+   output wire   [BIST_DATA_WD/8-1:0]    mem_mask_a2        ,
+   output wire   [BIST_DATA_WD/8-1:0]    mem_mask_a3        ,
+   output wire   [BIST_DATA_WD-1:0]      mem_din_a0         ,
+   output wire   [BIST_DATA_WD-1:0]      mem_din_a1         ,
+   output wire   [BIST_DATA_WD-1:0]      mem_din_a2         ,
+   output wire   [BIST_DATA_WD-1:0]      mem_din_a3         ,
 
-        input  wire   [BIST_DATA_WD-1:0]      mem_dout_a0,
-        input  wire   [BIST_DATA_WD-1:0]      mem_dout_a1,
-        input  wire   [BIST_DATA_WD-1:0]      mem_dout_a2,
-        input  wire   [BIST_DATA_WD-1:0]      mem_dout_a3,
+   input  wire   [BIST_DATA_WD-1:0]      mem_dout_a0        ,
+   input  wire   [BIST_DATA_WD-1:0]      mem_dout_a1        ,
+   input  wire   [BIST_DATA_WD-1:0]      mem_dout_a2        ,
+   input  wire   [BIST_DATA_WD-1:0]      mem_dout_a3        ,
 
 
-     // PORT-B
-        output wire [BIST_NO_SRAM-1:0]        mem_clk_b,
-        output wire [BIST_NO_SRAM-1:0]        mem_cen_b,
-        output wire   [BIST_ADDR_WD-1:0]      mem_addr_b0,
-        output wire   [BIST_ADDR_WD-1:0]      mem_addr_b1,
-        output wire   [BIST_ADDR_WD-1:0]      mem_addr_b2,
-        output wire   [BIST_ADDR_WD-1:0]      mem_addr_b3
+   // PORT-B
+   output wire [BIST_NO_SRAM-1:0]        mem_clk_b          ,
+   output wire [BIST_NO_SRAM-1:0]        mem_cen_b          ,
+   output wire   [BIST_ADDR_WD-1:0]      mem_addr_b0        ,
+   output wire   [BIST_ADDR_WD-1:0]      mem_addr_b1        ,
+   output wire   [BIST_ADDR_WD-1:0]      mem_addr_b2        ,
+   output wire   [BIST_ADDR_WD-1:0]      mem_addr_b3
 
 
 
 );
 
 parameter  NO_SRAM_WD = (BIST_NO_SRAM+1)/2;
-parameter     BIST1_ADDR_WD = 11; // 512x32 SRAM
 
 logic                          mem_req;  // strobe/request
 logic [(BIST_NO_SRAM+1)/2-1:0] mem_cs;
@@ -152,129 +159,126 @@
 logic [BIST_DATA_WD-1:0]       mem_rdata;  // data input
 
 
+//Scan FEED Throug
+assign scan_en_o = scan_en;
+assign scan_mode_o = scan_mode;
+
+
 mbist_wb  #(
 	.BIST_NO_SRAM           (4                      ),
-	.BIST_ADDR_WD           (BIST1_ADDR_WD-2        ),
+	.BIST_ADDR_WD           (BIST_ADDR_WD           ),
 	.BIST_DATA_WD           (BIST_DATA_WD           )
      ) 
 	     u_wb (
 
 `ifdef USE_POWER_PINS
-       .vccd1                  (vccd1                     ),// User area 1 1.8V supply
-       .vssd1                  (vssd1                     ),// User area 1 digital ground
+          .vccd1                        (vccd1              ),// User area 1 1.8V supply
+          .vssd1                        (vssd1              ),// User area 1 digital ground
 `endif
 
-	.rst_n                (rst_n                ),
-	// WB I/F
-        .wb_clk_i             (wb_clk_i             ),  
-        .wb_stb_i             (wb_stb_i             ),  
-        .wb_cs_i              (wb_cs_i              ),
-        .wb_adr_i             (wb_adr_i             ),
-        .wb_we_i              (wb_we_i              ),  
-        .wb_dat_i             (wb_dat_i             ),  
-        .wb_sel_i             (wb_sel_i             ),  
-        .wb_bl_i              (wb_bl_i              ),  
-        .wb_bry_i             (wb_bry_i             ),  
-        .wb_dat_o             (wb_dat_o             ),  
-        .wb_ack_o             (wb_ack_o             ),  
-        .wb_lack_o            (wb_lack_o            ),  
-        .wb_err_o             (                     ), 
-
-	.mem_req              (mem_req              ),
-	.mem_cs               (mem_cs               ),
-	.mem_addr             (mem_addr             ),
-	.mem_we               (mem_we               ),
-	.mem_wdata            (mem_wdata            ),
-	.mem_wmask            (mem_wmask            ),
-	.mem_rdata            (mem_rdata            )
-
-	
-
-
+          .rst_n                        (rst_n              ),
+          // WB I/F
+          .wb_clk_i                     (wb_clk_i           ),  
+          .wb_stb_i                     (wb_stb_i           ),  
+          .wb_cs_i                      (wb_cs_i            ),
+          .wb_adr_i                     (wb_adr_i           ),
+          .wb_we_i                      (wb_we_i            ),  
+          .wb_dat_i                     (wb_dat_i           ),  
+          .wb_sel_i                     (wb_sel_i           ),  
+          .wb_bl_i                      (wb_bl_i            ),  
+          .wb_bry_i                     (wb_bry_i           ),  
+          .wb_dat_o                     (wb_dat_o           ),  
+          .wb_ack_o                     (wb_ack_o           ),  
+          .wb_lack_o                    (wb_lack_o          ),  
+          .wb_err_o                     (                   ), 
+	      .mem_req                      (mem_req            ),
+          .mem_cs                       (mem_cs             ),
+          .mem_addr                     (mem_addr           ),
+          .mem_we                       (mem_we             ),
+          .mem_wdata                    (mem_wdata          ),
+          .mem_wmask                    (mem_wmask          ),
+          .mem_rdata                    (mem_rdata          )
+          
 );
 
 
-mbist_top  #(
+mbist_top  # (
 	`ifndef SYNTHESIS
 	.BIST_NO_SRAM           (4                      ),
-	.BIST_ADDR_WD           (BIST1_ADDR_WD-2        ),
+	.BIST_ADDR_WD           (BIST_ADDR_WD           ),
 	.BIST_DATA_WD           (BIST_DATA_WD           ),
 	.BIST_ADDR_START        (9'h000                 ),
 	.BIST_ADDR_END          (9'h1FB                 ),
 	.BIST_REPAIR_ADDR_START (9'h1FC                 ),
-	.BIST_RAD_WD_I          (BIST1_ADDR_WD-2        ),
-	.BIST_RAD_WD_O          (BIST1_ADDR_WD-2        )
+	.BIST_RAD_WD_I          (BIST_ADDR_WD           ),
+	.BIST_RAD_WD_O          (BIST_ADDR_WD           )
         `endif
      ) 
 	     u_mbist (
 
 `ifdef USE_POWER_PINS
-       .vccd1                  (vccd1                     ),// User area 1 1.8V supply
-       .vssd1                  (vssd1                     ),// User area 1 digital ground
+          .vccd1                        (vccd1              ),// User area 1 1.8V supply
+          .vssd1                        (vssd1              ),// User area 1 digital ground
 `endif
+          // Clock Skew adjust
+          .wbd_clk_int                  (wbd_clk_int        ), 
+          .cfg_cska_mbist               (cfg_cska_mbist     ), 
+          .wbd_clk_skew                 (wbd_clk_skew       ),
+	         // WB I/F
+          .wb_clk2_i                    (wb_clk2_i          ),  
+          .wb_clk_i                     (wb_clk_i           ),  
+          .mem_req                      (mem_req            ),  
+          .mem_cs                       (mem_cs             ),
+          .mem_addr                     (mem_addr           ),  
+          .mem_we                       (mem_we             ),  
+          .mem_wdata                    (mem_wdata          ),  
+          .mem_wmask                    (mem_wmask          ),  
+          .mem_rdata                    (mem_rdata          ),  
+	      .rst_n                        (rst_n              ),
 
-     // Clock Skew adjust
-	.wbd_clk_int          (wbd_clk_int          ), 
-	.cfg_cska_mbist       (cfg_cska_mbist       ), 
-	.wbd_clk_mbist        (wbd_clk_mbist        ),
-
-	// WB I/F
-        .wb_clk2_i            (wb_clk2_i            ),  
-        .wb_clk_i             (wb_clk_i             ),  
-        .mem_req              (mem_req              ),  
-	.mem_cs               (mem_cs               ),
-        .mem_addr             (mem_addr             ),  
-        .mem_we               (mem_we               ),  
-        .mem_wdata            (mem_wdata            ),  
-        .mem_wmask            (mem_wmask            ),  
-        .mem_rdata            (mem_rdata            ),  
-
-	.rst_n                (rst_n                ),
-
-	
-	.bist_en              (bist_en              ),
-	.bist_run             (bist_run             ),
-	.bist_shift           (bist_shift           ),
-	.bist_load            (bist_load            ),
-	.bist_sdi             (bist_sdi             ),
-
-	.bist_error_cnt3      (bist_error_cnt3  ),
-	.bist_error_cnt2      (bist_error_cnt2  ),
-	.bist_error_cnt1      (bist_error_cnt1  ),
-	.bist_error_cnt0      (bist_error_cnt0  ),
-	.bist_correct         (bist_correct     ),
-	.bist_error           (bist_error       ),
-	.bist_done            (bist_done        ),
-	.bist_sdo             (bist_sdo         ),
+          .bist_serial_sel              (bist_serial_sel    ), 
+	      .bist_en                      (bist_en            ),
+          .bist_run                     (bist_run           ),
+          .bist_shift                   (bist_shift         ),
+          .bist_load                    (bist_load          ),
+          .bist_sdi                     (bist_sdi           ),
+	      .bist_error_cnt3              (bist_error_cnt3    ),
+          .bist_error_cnt2              (bist_error_cnt2    ),
+          .bist_error_cnt1              (bist_error_cnt1    ),
+          .bist_error_cnt0              (bist_error_cnt0    ),
+          .bist_correct                 (bist_correct       ),
+          .bist_error                   (bist_error         ),
+          .bist_done                    (bist_done          ),
+          .bist_sdo                     (bist_sdo           ),
 
      // towards memory
      // PORT-A
-        .mem_clk_a            (mem_clk_a        ),
-        .mem_addr_a0          (mem_addr_a0      ),
-        .mem_addr_a1          (mem_addr_a1      ),
-        .mem_addr_a2          (mem_addr_a2      ),
-        .mem_addr_a3          (mem_addr_a3      ),
-        .mem_cen_a            (mem_cen_a        ),
-        .mem_web_a            (mem_web_a        ),
-        .mem_mask_a0          (mem_mask_a0      ),
-        .mem_mask_a1          (mem_mask_a1      ),
-        .mem_mask_a2          (mem_mask_a2      ),
-        .mem_mask_a3          (mem_mask_a3      ),
-        .mem_din_a0           (mem_din_a0       ),
-        .mem_din_a1           (mem_din_a1       ),
-        .mem_din_a2           (mem_din_a2       ),
-        .mem_din_a3           (mem_din_a3       ),
-        .mem_dout_a0          (mem_dout_a0      ),
-        .mem_dout_a1          (mem_dout_a1      ),
-        .mem_dout_a2          (mem_dout_a2      ),
-        .mem_dout_a3          (mem_dout_a3      ),
+          .mem_clk_a                    (mem_clk_a          ),
+          .mem_addr_a0                  (mem_addr_a0        ),
+          .mem_addr_a1                  (mem_addr_a1        ),
+          .mem_addr_a2                  (mem_addr_a2        ),
+          .mem_addr_a3                  (mem_addr_a3        ),
+          .mem_cen_a                    (mem_cen_a          ),
+          .mem_web_a                    (mem_web_a          ),
+          .mem_mask_a0                  (mem_mask_a0        ),
+          .mem_mask_a1                  (mem_mask_a1        ),
+          .mem_mask_a2                  (mem_mask_a2        ),
+          .mem_mask_a3                  (mem_mask_a3        ),
+          .mem_din_a0                   (mem_din_a0         ),
+          .mem_din_a1                   (mem_din_a1         ),
+          .mem_din_a2                   (mem_din_a2         ),
+          .mem_din_a3                   (mem_din_a3         ),
+          .mem_dout_a0                  (mem_dout_a0        ),
+          .mem_dout_a1                  (mem_dout_a1        ),
+          .mem_dout_a2                  (mem_dout_a2        ),
+          .mem_dout_a3                  (mem_dout_a3        ),
      // PORT-B
-        .mem_clk_b            (mem_clk_b        ),
-        .mem_cen_b            (mem_cen_b        ),
-        .mem_addr_b0          (mem_addr_b0      ),
-        .mem_addr_b1          (mem_addr_b1      ),
-        .mem_addr_b2          (mem_addr_b2      ),
-        .mem_addr_b3          (mem_addr_b3      )
+          .mem_clk_b                    (mem_clk_b          ),
+          .mem_cen_b                    (mem_cen_b          ),
+          .mem_addr_b0                  (mem_addr_b0        ),
+          .mem_addr_b1                  (mem_addr_b1        ),
+          .mem_addr_b2                  (mem_addr_b2        ),
+          .mem_addr_b3                  (mem_addr_b3        )
 
 
 );
diff --git a/verilog/rtl/pinmux/src/pinmux_top.sv b/verilog/rtl/pinmux/src/pinmux_top.sv
new file mode 100644
index 0000000..f4bae59
--- /dev/null
+++ b/verilog/rtl/pinmux/src/pinmux_top.sv
@@ -0,0 +1,156 @@
+
+
+module pinmux_top #(parameter SCW = 8   // SCAN CHAIN WIDTH
+     ) (
+
+`ifdef USE_POWER_PINS
+    inout vccd1,	// User area 1 1.8V supply
+    inout vssd1,	// User area 1 digital ground
+`endif
+
+       input logic             mclk,
+       input logic             reset_n,
+
+       // Scan I/F
+       input logic             scan_en,
+       input logic             scan_mode,
+       input logic [SCW-1:0]   scan_si,
+       output logic [SCW-1:0]  scan_so,
+       output logic            scan_en_o,
+       output logic            scan_mode_o,
+
+	// Clock Skew Adjust
+       input   logic           wbd_clk_int      , 
+       input  logic [3:0]      cfg_cska_pinmux,
+       output  logic           wbd_clk_skew     , // clock skew adjust for web host
+
+
+        // Reg Bus Interface Signal
+        input logic             reg_cs,
+        input logic             reg_wr,
+        input logic [7:0]       reg_addr,
+        input logic [31:0]      reg_wdata,
+        input logic [3:0]       reg_be,
+
+       // Outputs
+        output logic [31:0]     reg_rdata,
+        output logic            reg_ack,
+
+	// BIST I/F
+	output logic            bist_en,
+	output logic            bist_run,
+	output logic            bist_load,
+
+    output logic [1:0]      bist_serial_sel,
+	output logic            bist_sdi,
+	output logic            bist_shift,
+	input  logic            bist_sdo,
+
+	input logic             bist_done,
+	input logic [3:0]       bist_error,
+	input logic [3:0]       bist_correct,
+	input logic [3:0]       bist_error_cnt0,
+	input logic [3:0]       bist_error_cnt1,
+	input logic [3:0]       bist_error_cnt2,
+	input logic [3:0]       bist_error_cnt3,
+
+
+    //-----------------------------------------------------------------------
+    // MAC-Tx Signal
+    //-----------------------------------------------------------------------
+    input  logic         mac_tx_en      ,
+    input  logic         mac_tx_er      ,
+    input  logic [7:0]   mac_txd        ,
+    output logic	     mac_tx_clk     ,
+                   
+    //-----------------------------------------------------------------------
+    // MAC-Rx Signal
+    //-----------------------------------------------------------------------
+    output  logic	    mac_rx_clk     ,
+    output  logic	    mac_rx_er      ,
+    output  logic	    mac_rx_dv      ,
+    output  logic [7:0] mac_rxd        ,
+    output  logic	    mac_crs        ,
+                   
+                   
+    //-----------------------------------------------------------------------
+    // MDIO Signal
+    //-----------------------------------------------------------------------
+    output  logic	   mdio_clk        ,
+    output  logic      mdio_in         ,
+    input   logic      mdio_out_en     ,
+    input   logic      mdio_out        
+
+
+
+        );
+
+
+//-----------------------------------------------------------------------
+// Main code starts here
+//-----------------------------------------------------------------------
+
+
+assign scan_en_o = scan_en;
+assign scan_mode_o = scan_mode;
+
+
+// wb_host clock skew control
+clk_skew_adjust u_skew_glbl
+       (
+`ifdef USE_POWER_PINS
+               .vccd1      (vccd1                      ),// User area 1 1.8V supply
+               .vssd1      (vssd1                      ),// User area 1 digital ground
+`endif
+	       .clk_in     (wbd_clk_int                ), 
+	       .sel        (cfg_cska_pinmux            ), 
+	       .clk_out    (wbd_clk_skew               ) 
+       );
+
+
+
+glbl_cfg u_glbl(
+`ifdef USE_POWER_PINS
+          .vccd1              (vccd1                ),// User area 1 1.8V supply
+          .vssd1              (vssd1                ),// User area 1 digital ground
+`endif
+
+          .mclk               (mclk                 ),
+          .reset_n            (reset_n              ),
+
+        // Reg Bus Interface Signal
+          .reg_cs             (reg_cs               ),
+          .reg_wr             (reg_wr               ),
+          .reg_addr           (reg_addr             ),
+          .reg_wdata          (reg_wdata            ),
+          .reg_be             (reg_be               ),
+
+       // Outputs
+          .reg_rdata          (reg_rdata            ),
+          .reg_ack            (reg_ack              ),
+
+
+       // BIST I/F
+          .bist_en            (bist_en              ),
+          .bist_run           (bist_run             ),
+          .bist_load          (bist_load            ),
+        
+          .bist_serial_sel    (bist_serial_sel      ),
+          .bist_sdi           (bist_sdi             ),
+          .bist_shift         (bist_shift           ),
+          .bist_sdo           (bist_sdo             ),
+        
+          .bist_done          (bist_done            ),
+          .bist_error         (bist_error           ),
+          .bist_correct       (bist_correct         ),
+          .bist_error_cnt0    (bist_error_cnt0      ),
+          .bist_error_cnt1    (bist_error_cnt1      ),
+          .bist_error_cnt2    (bist_error_cnt2      ),
+          .bist_error_cnt3    (bist_error_cnt3      )
+    );
+
+
+
+
+endmodule
+
diff --git a/verilog/rtl/sram_macros/sky130_sram_2kbyte_1rw1r_32x512_8.v b/verilog/rtl/sram_macros/sky130_sram_2kbyte_1rw1r_32x512_8.v
new file mode 100644
index 0000000..289a770
--- /dev/null
+++ b/verilog/rtl/sram_macros/sky130_sram_2kbyte_1rw1r_32x512_8.v
@@ -0,0 +1,114 @@
+// OpenRAM SRAM model
+// Words: 512
+// Word size: 32
+// Write size: 8
+
+module sky130_sram_2kbyte_1rw1r_32x512_8(
+`ifdef USE_POWER_PINS
+    vccd1,
+    vssd1,
+`endif
+// Port 0: RW
+    clk0,csb0,web0,wmask0,addr0,din0,dout0,
+// Port 1: R
+    clk1,csb1,addr1,dout1
+  );
+
+  parameter NUM_WMASKS = 4 ;
+  parameter DATA_WIDTH = 32 ;
+  parameter ADDR_WIDTH = 9 ;
+  parameter RAM_DEPTH = 1 << ADDR_WIDTH;
+  // FIXME: This delay is arbitrary.
+  parameter DELAY = 3 ;
+  parameter VERBOSE = 0 ; //Set to 0 to only display warnings
+  parameter T_HOLD = 1 ; //Delay to hold dout value after posedge. Value is arbitrary
+
+`ifdef USE_POWER_PINS
+    inout vccd1;
+    inout vssd1;
+`endif
+  input  clk0; // clock
+  input   csb0; // active low chip select
+  input  web0; // active low write control
+  input [NUM_WMASKS-1:0]   wmask0; // write mask
+  input [ADDR_WIDTH-1:0]  addr0;
+  input [DATA_WIDTH-1:0]  din0;
+  output [DATA_WIDTH-1:0] dout0;
+  input  clk1; // clock
+  input   csb1; // active low chip select
+  input [ADDR_WIDTH-1:0]  addr1;
+  output [DATA_WIDTH-1:0] dout1;
+
+  reg  csb0_reg;
+  reg  web0_reg;
+  reg [NUM_WMASKS-1:0]   wmask0_reg;
+  reg [ADDR_WIDTH-1:0]  addr0_reg;
+  reg [DATA_WIDTH-1:0]  din0_reg;
+  reg [DATA_WIDTH-1:0]  dout0;
+
+  // All inputs are registers
+  always @(posedge clk0)
+  begin
+    csb0_reg = csb0;
+    web0_reg = web0;
+    wmask0_reg = wmask0;
+    addr0_reg = addr0;
+    din0_reg = din0;
+    #(T_HOLD) dout0 = 32'bx;
+    if ( !csb0_reg && web0_reg && VERBOSE ) 
+      $display($time," Reading %m addr0=%b dout0=%b",addr0_reg,mem[addr0_reg]);
+    if ( !csb0_reg && !web0_reg && VERBOSE )
+      $display($time," Writing %m addr0=%b din0=%b wmask0=%b",addr0_reg,din0_reg,wmask0_reg);
+  end
+
+  reg  csb1_reg;
+  reg [ADDR_WIDTH-1:0]  addr1_reg;
+  reg [DATA_WIDTH-1:0]  dout1;
+
+  // All inputs are registers
+  always @(posedge clk1)
+  begin
+    csb1_reg = csb1;
+    addr1_reg = addr1;
+    if (!csb0 && !web0 && !csb1 && (addr0 == addr1))
+         $display($time," WARNING: Writing and reading addr0=%b and addr1=%b simultaneously!",addr0,addr1);
+    #(T_HOLD) dout1 = 32'bx;
+    if ( !csb1_reg && VERBOSE ) 
+      $display($time," Reading %m addr1=%b dout1=%b",addr1_reg,mem[addr1_reg]);
+  end
+
+reg [DATA_WIDTH-1:0]    mem [0:RAM_DEPTH-1];
+
+  // Memory Write Block Port 0
+  // Write Operation : When web0 = 0, csb0 = 0
+  always @ (negedge clk0)
+  begin : MEM_WRITE0
+    if ( !csb0_reg && !web0_reg ) begin
+        if (wmask0_reg[0])
+                mem[addr0_reg][7:0] = din0_reg[7:0];
+        if (wmask0_reg[1])
+                mem[addr0_reg][15:8] = din0_reg[15:8];
+        if (wmask0_reg[2])
+                mem[addr0_reg][23:16] = din0_reg[23:16];
+        if (wmask0_reg[3])
+                mem[addr0_reg][31:24] = din0_reg[31:24];
+    end
+  end
+
+  // Memory Read Block Port 0
+  // Read Operation : When web0 = 1, csb0 = 0
+  always @ (negedge clk0)
+  begin : MEM_READ0
+    if (!csb0_reg && web0_reg)
+       dout0 <= #(DELAY) mem[addr0_reg];
+  end
+
+  // Memory Read Block Port 1
+  // Read Operation : When web1 = 1, csb1 = 0
+  always @ (negedge clk1)
+  begin : MEM_READ1
+    if (!csb1_reg)
+       dout1 <= #(DELAY) mem[addr1_reg];
+  end
+
+endmodule
diff --git a/verilog/rtl/user_project_wrapper.v b/verilog/rtl/user_project_wrapper.v
index 62c35bf..50ce3b6 100644
--- a/verilog/rtl/user_project_wrapper.v
+++ b/verilog/rtl/user_project_wrapper.v
@@ -19,65 +19,32 @@
 ////                                                              ////
 ////  Digital core                                                ////
 ////                                                              ////
-////  This file is part of the mbist_ctrl  project                ////
-////  https://github.com/dineshannayya/mbist_ctrl.git             ////
+////  This file is part of the riscduino-pxt  project             ////
+////  https://github.com/dineshannayya/riscduino_pxt1.git         ////
 ////                                                              ////
 ////  Description                                                 ////
 ////      This is digital core and integrate all the main block   ////
 ////      here.                                                   ////
 ////      1. Wishbone Host                                        ////
 ////      2. 4x MBIST Controller                                  ////
-////      3. 2x SRAM 2KB                                          ////
-////      4. 2x SRAM 1KB                                          ////
-////      5. Wishbone Interconnect                                ////
-////      6. Global Register                                      ////
+////      3. 4x SRAM 2KB                                          ////
+////      4. Wishbone Interconnect                                ////
+////      5. Global Register                                      ////
+////      6. GMAC                                                 ////
 ////                                                              ////
 ////  To Do:                                                      ////
 ////    nothing                                                   ////
 ////                                                              ////
 ////  Author(s):                                                  ////
-////      - Dinesh Annayya, dinesha@opencores.org                 ////
+////      - Dinesh Annayya, dinesh.annayya@gmail.com              ////
 ////                                                              ////
 ////  Revision :                                                  ////
-////    0.1 - 13th Oct 2021, Dinesh A                             ////
+////    0.1 - 15th Dec 2022, Dinesh A                             ////
 ////          Initial Version                                     ////
-////    0.2 - 19, Nov 2021, Dinesh A                              ////
-////          Following things are integrated                     ////
-////          2x SRAM 2KB, 2x SRAM 1KB, 4 MBIST ,                 ////
-////          1 Wishbone Interconnect, 1 Global register          ////
-////    0.3 - 20, Nov 2021, Dinesh A                              ////
-////          Following  are integrated                           ////
-////          4x SRAM 2KB, 4x SRAM 1KB, 8 MBIST ,                 ////
-////          1 Wishbone Interconnect, 1 Global register          ////
-////    0.4 - 23 Nov 2021, Dinesh A                               ////
-////          Three Software Register added for signature at glbl ////
-////    1.0 - 01 Dec 2021, Dinesh A -MPW-4                        ////
-////          A. Logic Bist Integrated inside the Wb_host         ////
-////          B. Below Scan chain created                         ////
-////     WB_HOST(LBIST) => GLBL => MBIST5 => MBIST6 => MBIST7     ////
-////     => MBIST8 => WB_INTERCONNECT => MBIST4 => MBIST3 =>      ////
-////     MBIST2 => MBIST1 => WB_HOST(LBIST)                       ////
-////    1.1 - 03 Dec 2021, Dinesh A                               ////
-////         Timing closure clean-up                              ////
-////    1.2 - 10 Dec 2021, Dinesh A                               ////
-////         Full Chip Timing closure wth caravel                 ////
-////    1.3 - 21 Dec 2021, Dinesh A                               ////
-////      A. LBIST bypass added, SCAN can be controlled through   ////
-////            LA ports                                          ////
-////      B. LBIST reset chain check compare bypass added         ////
-////    1.4  Jan 02, 2022, Dinesh A                               ////
-////       1. LA[0] is added as soft reset option at wb_port      ////
-////       2. Uart Master is added at wb_port                     ////
-////    1.5  Feb 18, 2022, Dinesh A                               ////
-////       As SRAM timing model are not accurate, added additionl ////
-////       drive data towards SRAM in negedge phase(cfg_mem_lphase)///
-////    1.6  Mar 16, 2022, Dinesh A                               ////
-////         RTL changes in wb_host to fix caraval wb address     ////
-////         reduction to 0x3000_0000 to 0x300F_FFFF              ////
 //////////////////////////////////////////////////////////////////////
 `default_nettype none
 
-module user_project_wrapper(
+module user_project_wrapper   (
 `ifdef USE_POWER_PINS
     inout vdda1,	// User area 1 3.3V supply
     inout vdda2,	// User area 2 3.3V supply
@@ -89,16 +56,16 @@
     inout vssd2,	// User area 2 digital ground
 `endif
 
-    // Wishbone Slave ports (WB MI A)
-    input wb_clk_i,
-    input wb_rst_i,
-    input wbs_stb_i,
-    input wbs_cyc_i,
-    input wbs_we_i,
-    input [3:0] wbs_sel_i,
-    input [31:0] wbs_dat_i,
-    input [31:0] wbs_adr_i,
-    output wbs_ack_o,
+    // Wishbone Slave ports (WB MI A                        )
+    input         wb_clk_i,
+    input         wb_rst_i,
+    input         wbs_stb_i,
+    input         wbs_cyc_i,
+    input         wbs_we_i,
+    input [3:0]   wbs_sel_i,
+    input [31:0]  wbs_dat_i,
+    input [31:0]  wbs_adr_i,
+    output        wbs_ack_o,
     output [31:0] wbs_dat_o,
 
     // Logic Analyzer Signals
@@ -114,7 +81,7 @@
     // Analog (direct connection to GPIO pad---use with caution)
     // Note that analog I/O is not available on the 7 lowest-numbered
     // GPIO pads, and so the analog_io indexing is offset from the
-    // GPIO indexing by 7 (also upper 2 GPIOs do not have analog_io).
+          // GPIO indexing by (also upper 2 GPIOs do not havanalog_io                                                  )                                              .
     inout [28:0] analog_io,
 
     // Independent clock (on independent integer divider)
@@ -124,390 +91,258 @@
     output [2:0] user_irq
 );
 
-parameter BIST1_ADDR_WD = 11; // 512x32 SRAM
-parameter BIST2_ADDR_WD = 10; // 256x32 SRAM
+parameter BIST_ADDR_WD = 9; // 512x32 SRAM
 parameter BIST_DATA_WD = 32;
 parameter WB_WIDTH = 32; // WB ADDRESS/DARA WIDTH
+parameter BIST_NO_SRAM = 4;
 
 parameter SCW = 8;   // SCAN CHAIN WIDTH
 //---------------------------------------------------------------------
-// WB HOST Interface
+// WB HOST <=> WB Interconnect Interface
 //---------------------------------------------------------------------
-wire                           wbd_int_cyc_i; // strobe/request
-wire                           wbd_int_stb_i; // strobe/request
-wire   [WB_WIDTH-1:0]          wbd_int_adr_i; // address
-wire                           wbd_int_we_i;  // write
-wire   [WB_WIDTH-1:0]          wbd_int_dat_i; // data output
-wire   [3:0]                   wbd_int_sel_i; // byte enable
-wire   [WB_WIDTH-1:0]          wbd_int_dat_o; // data input
-wire                           wbd_int_ack_o; // acknowlegement
-wire                           wbd_int_err_o; // error
+wire                           wbd_int_cyc_i      ; // strobe/request
+wire                           wbd_int_stb_i      ; // strobe/request
+wire   [WB_WIDTH-1:0]          wbd_int_adr_i      ; // address
+wire                           wbd_int_we_i       ;  // write
+wire   [WB_WIDTH-1:0]          wbd_int_dat_i      ; // data output
+wire   [3:0]                   wbd_int_sel_i      ; // byte enable
+wire   [WB_WIDTH-1:0]          wbd_int_dat_o      ; // data input
+wire                           wbd_int_ack_o      ; // acknowlegement
+wire                           wbd_int_err_o      ; // error
 
 //---------------------------------------------------------------------
-//    Global Register Wishbone Interface
+//    Pinmux Register <==> WB Interconnect Interface
 //---------------------------------------------------------------------
-wire                           wbd_glbl_stb_o; // strobe/request
-wire   [7:0]                   wbd_glbl_adr_o; // address
-wire                           wbd_glbl_we_o;  // write
-wire   [WB_WIDTH-1:0]          wbd_glbl_dat_o; // data output
-wire   [3:0]                   wbd_glbl_sel_o; // byte enable
-wire                           wbd_glbl_cyc_o ;
-wire   [WB_WIDTH-1:0]          wbd_glbl_dat_i; // data input
-wire                           wbd_glbl_ack_i; // acknowlegement
-wire                           wbd_glbl_err_i;  // error
+wire                           wbd_pinmux_stb_o     ; // strobe/request
+wire   [7:0]                   wbd_pinmux_adr_o     ; // address
+wire                           wbd_pinmux_we_o      ;  // write
+wire   [WB_WIDTH-1:0]          wbd_pinmux_dat_o     ; // data output
+wire   [3:0]                   wbd_pinmux_sel_o     ; // byte enable
+wire                           wbd_pinmux_cyc_o     ;
+wire   [WB_WIDTH-1:0]          wbd_pinmux_dat_i     ; // data input
+wire                           wbd_pinmux_ack_i     ; // acknowlegement
+wire                           wbd_pinmux_err_i     ;  // error
 
 //---------------------------------------------------------------------
-//  MBIST1  
+//  MBIST  <===> WB Interconnect Interface
 //---------------------------------------------------------------------
-wire                           wbd_mbist1_stb_o; // strobe/request
-wire   [BIST1_ADDR_WD-1:0]     wbd_mbist1_adr_o; // address
-wire                           wbd_mbist1_we_o;  // write
-wire   [WB_WIDTH-1:0]          wbd_mbist1_dat_o; // data output
-wire   [3:0]                   wbd_mbist1_sel_o; // byte enable
-wire                           wbd_mbist1_cyc_o ;
-wire   [WB_WIDTH-1:0]          wbd_mbist1_dat_i; // data input
-wire                           wbd_mbist1_ack_i; // acknowlegement
-wire                           wbd_mbist1_err_i;  // error
-
-//---------------------------------------------------------------------
-//  MBIST2  
-//---------------------------------------------------------------------
-wire                           wbd_mbist2_stb_o; // strobe/request
-wire   [BIST1_ADDR_WD-1:0]     wbd_mbist2_adr_o; // address
-wire                           wbd_mbist2_we_o;  // write
-wire   [WB_WIDTH-1:0]          wbd_mbist2_dat_o; // data output
-wire   [3:0]                   wbd_mbist2_sel_o; // byte enable
-wire                           wbd_mbist2_cyc_o ;
-wire   [WB_WIDTH-1:0]          wbd_mbist2_dat_i; // data input
-wire                           wbd_mbist2_ack_i; // acknowlegement
-wire                           wbd_mbist2_err_i;  // error
-
-//---------------------------------------------------------------------
-//  MBIST3  
-//---------------------------------------------------------------------
-wire                           wbd_mbist3_stb_o; // strobe/request
-wire   [BIST1_ADDR_WD-1:0]     wbd_mbist3_adr_o; // address
-wire                           wbd_mbist3_we_o;  // write
-wire   [WB_WIDTH-1:0]          wbd_mbist3_dat_o; // data output
-wire   [3:0]                   wbd_mbist3_sel_o; // byte enable
-wire                           wbd_mbist3_cyc_o ;
-wire   [WB_WIDTH-1:0]          wbd_mbist3_dat_i; // data input
-wire                           wbd_mbist3_ack_i; // acknowlegement
-wire                           wbd_mbist3_err_i;  // error
-
-//---------------------------------------------------------------------
-//  MBIST4  
-//---------------------------------------------------------------------
-wire                           wbd_mbist4_stb_o; // strobe/request
-wire   [BIST1_ADDR_WD-1:0]     wbd_mbist4_adr_o; // address
-wire                           wbd_mbist4_we_o;  // write
-wire   [WB_WIDTH-1:0]          wbd_mbist4_dat_o; // data output
-wire   [3:0]                   wbd_mbist4_sel_o; // byte enable
-wire                           wbd_mbist4_cyc_o ;
-wire   [WB_WIDTH-1:0]          wbd_mbist4_dat_i; // data input
-wire                           wbd_mbist4_ack_i; // acknowlegement
-wire                           wbd_mbist4_err_i;  // error
-
-//---------------------------------------------------------------------
-//  MBIST5  
-//---------------------------------------------------------------------
-wire                           wbd_mbist5_stb_o; // strobe/request
-wire   [BIST2_ADDR_WD-1:0]     wbd_mbist5_adr_o; // address
-wire                           wbd_mbist5_we_o;  // write
-wire   [WB_WIDTH-1:0]          wbd_mbist5_dat_o; // data output
-wire   [3:0]                   wbd_mbist5_sel_o; // byte enable
-wire                           wbd_mbist5_cyc_o ;
-wire   [WB_WIDTH-1:0]          wbd_mbist5_dat_i; // data input
-wire                           wbd_mbist5_ack_i; // acknowlegement
-wire                           wbd_mbist5_err_i;  // error
-
-//---------------------------------------------------------------------
-//  MBIST6  
-//---------------------------------------------------------------------
-wire                           wbd_mbist6_stb_o; // strobe/request
-wire   [BIST2_ADDR_WD-1:0]     wbd_mbist6_adr_o; // address
-wire                           wbd_mbist6_we_o;  // write
-wire   [WB_WIDTH-1:0]          wbd_mbist6_dat_o; // data output
-wire   [3:0]                   wbd_mbist6_sel_o; // byte enable
-wire                           wbd_mbist6_cyc_o ;
-wire   [WB_WIDTH-1:0]          wbd_mbist6_dat_i; // data input
-wire                           wbd_mbist6_ack_i; // acknowlegement
-wire                           wbd_mbist6_err_i;  // error
-
-//---------------------------------------------------------------------
-//  MBIST7  
-//---------------------------------------------------------------------
-wire                           wbd_mbist7_stb_o; // strobe/request
-wire   [BIST2_ADDR_WD-1:0]     wbd_mbist7_adr_o; // address
-wire                           wbd_mbist7_we_o;  // write
-wire   [WB_WIDTH-1:0]          wbd_mbist7_dat_o; // data output
-wire   [3:0]                   wbd_mbist7_sel_o; // byte enable
-wire                           wbd_mbist7_cyc_o ;
-wire   [WB_WIDTH-1:0]          wbd_mbist7_dat_i; // data input
-wire                           wbd_mbist7_ack_i; // acknowlegement
-wire                           wbd_mbist7_err_i;  // error
-
-//---------------------------------------------------------------------
-//  MBIST8  
-//---------------------------------------------------------------------
-wire                           wbd_mbist8_stb_o; // strobe/request
-wire   [BIST2_ADDR_WD-1:0]     wbd_mbist8_adr_o; // address
-wire                           wbd_mbist8_we_o;  // write
-wire   [WB_WIDTH-1:0]          wbd_mbist8_dat_o; // data output
-wire   [3:0]                   wbd_mbist8_sel_o; // byte enable
-wire                           wbd_mbist8_cyc_o ;
-wire   [WB_WIDTH-1:0]          wbd_mbist8_dat_i; // data input
-wire                           wbd_mbist8_ack_i; // acknowlegement
-wire                           wbd_mbist8_err_i;  // error
+wire                           wbd_mbist_stb_o    ; // strobe/request
+wire   [12:0]                  wbd_mbist_adr_o    ; // address
+wire                           wbd_mbist_we_o     ;  // write
+wire   [WB_WIDTH-1:0]          wbd_mbist_dat_o    ; // data output
+wire   [3:0]                   wbd_mbist_sel_o    ; // byte enable
+wire   [9:0]                   wbd_mbist_bl_o     ; // Burst Length
+wire                           wbd_mbist_bry_o    ; // Burst Ready
+wire                           wbd_mbist_cyc_o    ;
+wire   [WB_WIDTH-1:0]          wbd_mbist_dat_i    ; // data input
+wire                           wbd_mbist_ack_i    ; // acknowlegement
+wire                           wbd_mbist_err_i    ;  // error
 
 
-wire                           wbd_int_rst_n;
-wire                           bist_rst_n;
+//--------------------------------------------
+// GMAC TX WB Master I/F
+//--------------------------------------------
+wire [31:0]                    wbm_gtx_dat_i      ;
+wire                           wbm_gtx_ack_i      ;
+wire [31:0]                    wbm_gtx_dat_o      ;
+wire [12:0]                    wbm_gtx_adr_o      ;
+wire [3:0]                     wbm_gtx_sel_o      ;
+wire                           wbm_gtx_we_o       ;
+wire                           wbm_gtx_stb_o      ;
+wire                           wbm_gtx_cyc_o      ;
+                
+//--------------------------------------------
+// GMAC RX WB Master I/F
+//--------------------------------------------
+wire [31:0]                    wbm_grx_dat_i      ;
+wire                           wbm_grx_ack_i      ;
+wire [31:0]                    wbm_grx_dat_o      ;
+wire [12:0]                    wbm_grx_adr_o      ;
+wire [3:0]                     wbm_grx_sel_o      ;
+wire                           wbm_grx_we_o       ;
+wire                           wbm_grx_stb_o      ;
+wire                           wbm_grx_cyc_o      ;
+                
+//--------------------------------------------
+// GMAC REG WB SLAVE I/F
+//--------------------------------------------
+wire [31:0]                    wbs_grg_dat_o     ;
+wire                           wbs_grg_ack_o     ;
+wire [31:0]                    wbs_grg_dat_i     ;
+wire [12:0]                    wbs_grg_adr_i     ;
+wire [3:0]                     wbs_grg_sel_i     ;
+wire                           wbs_grg_we_i      ;
+wire                           wbs_grg_stb_i     ;
+wire                           wbs_grg_cyc_i     ;
 
+
+//----------------------------------------------------
+
+wire                           wbd_int_rst_n      ;
+wire                           bist_rst_n         ;
+wire                           mac_rst_n          ;
+
+//----------------------------------------------------------------------
 // MBIST I/F
-wire    [7:0]                  bist_en;
-wire    [7:0]                  bist_run;
-wire    [7:0]                  bist_shift;
-wire    [7:0]                  bist_load;
-wire    [7:0]                  bist_sdi;
+//----------------------------------------------------------------------
+wire                           bist_en            ;
+wire                           bist_run           ;
+wire                           bist_shift         ;
+wire                           bist_load          ;
+wire                           bist_sdi           ;
+wire   [1:0]                   bist_serial_sel           ;
 
-wire    [7:0]                  bist_correct;
-wire    [7:0]                  bist_error;
-wire    [7:0]                  bist_done;
-wire    [7:0]                  bist_sdo;
+wire    [3:0]                  bist_correct       ;
+wire    [3:0]                  bist_error         ;
+wire                           bist_done          ;
+wire                           bist_sdo           ;
 
-wire  [3:0]                    bist_error_cnt0;
-wire  [3:0]                    bist_error_cnt1;
-wire  [3:0]                    bist_error_cnt2;
+wire  [3:0]                    bist_error_cnt0    ;
+wire  [3:0]                    bist_error_cnt1    ;
+wire  [3:0]                    bist_error_cnt2    ;
 wire  [3:0]                    bist_error_cnt3;
-wire  [3:0]                    bist_error_cnt4;
-wire  [3:0]                    bist_error_cnt5;
-wire  [3:0]                    bist_error_cnt6;
-wire  [3:0]                    bist_error_cnt7;
 
-// MBIST I/F Buffered
-wire    [7:0]                  bist_en_int;
-wire    [7:0]                  bist_run_int;
-wire    [7:0]                  bist_shift_int;
-wire    [7:0]                  bist_load_int;
-wire    [7:0]                  bist_sdi_int;
+// MBIST I/F Bus Repeater
+wire                           bist_en_rp         ;
+wire                           bist_run_rp        ;
+wire                           bist_shift_rp      ;
+wire                           bist_load_rp       ;
+wire                           bist_sdi_rp        ;
 
-wire    [7:0]                  bist_correct_int;
-wire    [7:0]                  bist_error_int;
-wire    [7:0]                  bist_done_int;
-wire    [7:0]                  bist_sdo_int;
+wire    [3:0]                  bist_correct_rp    ;
+wire    [3:0]                  bist_error_rp      ;
+wire                           bist_done_rp       ;
+wire                           bist_sdo_rp        ;
 
-wire  [3:0]                    bist_error_cnt0_int;
-wire  [3:0]                    bist_error_cnt1_int;
-wire  [3:0]                    bist_error_cnt2_int;
-wire  [3:0]                    bist_error_cnt3_int;
-wire  [3:0]                    bist_error_cnt4_int;
-wire  [3:0]                    bist_error_cnt5_int;
-wire  [3:0]                    bist_error_cnt6_int;
-wire  [3:0]                    bist_error_cnt7_int;
+wire  [3:0]                    bist_error_cnt0_rp ;
+wire  [3:0]                    bist_error_cnt1_rp ;
+wire  [3:0]                    bist_error_cnt2_rp ;
+wire  [3:0]                    bist_error_cnt3_rp ;
 
-// towards memory MBIST1
-// PORT-A
-wire                           mem1_clk_a;
-wire   [BIST1_ADDR_WD-1:2]     mem1_addr_a;
-wire                           mem1_cen_a;
-wire   [BIST_DATA_WD-1:0]      mem1_din_b;
+//-----------------------------------------------------
+// towards MBIST <==> memory 0/1/2/3
+//------------------------------------------------------
+// PORT-A Common Signals
+wire   [BIST_NO_SRAM-1:0]     mem_clk_a          ;
+wire   [BIST_NO_SRAM-1:0]     mem_cen_a          ;
+wire   [BIST_NO_SRAM-1:0]     mem_web_a          ;
 
-// PORT-B
-wire                           mem1_clk_b;
-wire                           mem1_cen_b;
-wire                           mem1_web_b;
-wire [BIST_DATA_WD/8-1:0]      mem1_mask_b;
-wire [BIST1_ADDR_WD-1:2]       mem1_addr_b;
-wire [BIST_DATA_WD-1:0]        mem1_dout_a;
+// MEM0 - PORT-A Signals
+wire   [BIST_ADDR_WD-1:0]     mem0_addr_a         ;
+wire [BIST_DATA_WD/8-1:0]     mem0_mask_a         ;
+wire   [BIST_DATA_WD-1:0]     mem0_din_a          ;
+wire   [BIST_DATA_WD-1:0]     mem0_dout_a         ;
 
-// towards memory MBIST2
-// PORT-A
-wire                           mem2_clk_a;
-wire   [BIST1_ADDR_WD-1:2]     mem2_addr_a;
-wire                           mem2_cen_a;
-wire   [BIST_DATA_WD-1:0]      mem2_din_b;
+// MEM1 - PORT-A Signals
+wire   [BIST_ADDR_WD-1:0]     mem1_addr_a         ;
+wire [BIST_DATA_WD/8-1:0]     mem1_mask_a         ;
+wire   [BIST_DATA_WD-1:0]     mem1_din_a          ;
+wire   [BIST_DATA_WD-1:0]     mem1_dout_a         ;
 
-// PORT-B
-wire                           mem2_clk_b;
-wire                           mem2_cen_b;
-wire                           mem2_web_b;
-wire [BIST_DATA_WD/8-1:0]      mem2_mask_b;
-wire [BIST1_ADDR_WD-1:2]       mem2_addr_b;
-wire [BIST_DATA_WD-1:0]        mem2_dout_a;
+// MEM2 - PORT-A Signals
+wire   [BIST_ADDR_WD-1:0]     mem2_addr_a         ;
+wire [BIST_DATA_WD/8-1:0]     mem2_mask_a         ;
+wire   [BIST_DATA_WD-1:0]     mem2_din_a          ;
+wire   [BIST_DATA_WD-1:0]     mem2_dout_a         ;
 
-// towards memory MBIST3
-// PORT-A
-wire                           mem3_clk_a;
-wire   [BIST1_ADDR_WD-1:2]     mem3_addr_a;
-wire                           mem3_cen_a;
-wire   [BIST_DATA_WD-1:0]      mem3_din_b;
+// MEM3 - PORT-A Signals
+wire   [BIST_ADDR_WD-1:0]     mem3_addr_a         ;
+wire [BIST_DATA_WD/8-1:0]     mem3_mask_a         ;
+wire   [BIST_DATA_WD-1:0]     mem3_din_a          ;
+wire   [BIST_DATA_WD-1:0]     mem3_dout_a         ;
 
-// PORT-B
-wire                           mem3_clk_b;
-wire                           mem3_cen_b;
-wire                           mem3_web_b;
-wire [BIST_DATA_WD/8-1:0]      mem3_mask_b;
-wire [BIST1_ADDR_WD-1:2]       mem3_addr_b;
-wire [BIST_DATA_WD-1:0]        mem3_dout_a;
+// PORT-B Signals
+wire [BIST_NO_SRAM-1:0]        mem_clk_b          ;
+wire [BIST_NO_SRAM-1:0]        mem_cen_b          ;
 
-// towards memory MBIST4
-// PORT-A
-wire                           mem4_clk_a;
-wire   [BIST1_ADDR_WD-1:2]     mem4_addr_a;
-wire                           mem4_cen_a;
-wire   [BIST_DATA_WD-1:0]      mem4_din_b;
+wire [BIST_ADDR_WD-1:0]       mem0_addr_b         ;
+wire [BIST_ADDR_WD-1:0]       mem1_addr_b         ;
+wire [BIST_ADDR_WD-1:0]       mem2_addr_b         ;
+wire [BIST_ADDR_WD-1:0]       mem3_addr_b         ;
 
-// PORT-B
-wire                           mem4_clk_b;
-wire                           mem4_cen_b;
-wire                           mem4_web_b;
-wire [BIST_DATA_WD/8-1:0]      mem4_mask_b;
-wire [BIST1_ADDR_WD-1:2]       mem4_addr_b;
-wire [BIST_DATA_WD-1:0]        mem4_dout_a;
+//----------------------------------------------------
+// Clock & clock skew feed through
+//--------------------------------------------------
+wire                          wbd_clk_pinmux_rp    ;
+wire                          wbd_clk_mbist_rp   ;
+wire                          wbd_clk_mac_rp     ;
 
-// towards memory MBIST5
-// PORT-A
-wire                           mem5_clk_a;
-wire   [BIST2_ADDR_WD-1:2]     mem5_addr_a;
-wire                           mem5_cen_a;
-wire   [BIST_DATA_WD-1:0]      mem5_din_b;
-
-// PORT-B
-wire                           mem5_clk_b;
-wire                           mem5_cen_b;
-wire                           mem5_web_b;
-wire [BIST_DATA_WD/8-1:0]      mem5_mask_b;
-wire [BIST2_ADDR_WD-1:2]       mem5_addr_b;
-wire [BIST_DATA_WD-1:0]        mem5_dout_a;
-
-// towards memory MBIST6
-// PORT-A
-wire                           mem6_clk_a;
-wire   [BIST2_ADDR_WD-1:2]     mem6_addr_a;
-wire                           mem6_cen_a;
-wire   [BIST_DATA_WD-1:0]      mem6_din_b;
-
-// PORT-B
-wire                           mem6_clk_b;
-wire                           mem6_cen_b;
-wire                           mem6_web_b;
-wire [BIST_DATA_WD/8-1:0]      mem6_mask_b;
-wire [BIST2_ADDR_WD-1:2]       mem6_addr_b;
-wire [BIST_DATA_WD-1:0]        mem6_dout_a;
-
-// towards memory MBIST7
-// PORT-A
-wire                           mem7_clk_a;
-wire   [BIST2_ADDR_WD-1:2]     mem7_addr_a;
-wire                           mem7_cen_a;
-wire   [BIST_DATA_WD-1:0]      mem7_din_b;
-
-// PORT-B
-wire                           mem7_clk_b;
-wire                           mem7_cen_b;
-wire                           mem7_web_b;
-wire [BIST_DATA_WD/8-1:0]      mem7_mask_b;
-wire [BIST2_ADDR_WD-1:2]       mem7_addr_b;
-wire [BIST_DATA_WD-1:0]        mem7_dout_a;
-
-// towards memory MBIST8
-// PORT-A
-wire                           mem8_clk_a;
-wire   [BIST2_ADDR_WD-1:2]     mem8_addr_a;
-wire                           mem8_cen_a;
-wire   [BIST_DATA_WD-1:0]      mem8_din_b;
-
-// PORT-B
-wire                           mem8_clk_b;
-wire                           mem8_cen_b;
-wire                           mem8_web_b;
-wire [BIST_DATA_WD/8-1:0]      mem8_mask_b;
-wire [BIST2_ADDR_WD-1:2]       mem8_addr_b;
-wire [BIST_DATA_WD-1:0]        mem8_dout_a;
+wire                          wbd_clk_wi_skew  ;
+wire                          wbd_clk_pinmux_skew  ;
+wire                          wbd_clk_mbist_skew ;
+wire                          wbd_clk_mac_skew ;
 
 wire                          lbist_clk          ;
 wire                          wbd_clk_wh         ;
 wire                          wbd_clk_int        ;
-wire                          wbd_clk_glbl_int   ;
-wire                          wbd_clk_mbist1_int ;
-wire                          wbd_clk_mbist2_int ;
-wire                          wbd_clk_mbist3_int ;
-wire                          wbd_clk_mbist4_int ;
-wire                          wbd_clk_mbist5_int ;
-wire                          wbd_clk_mbist6_int ;
-wire                          wbd_clk_mbist7_int ;
-wire                          wbd_clk_mbist8_int ;
-wire                          wbd_clk_wi         ;
-wire                          wbd_clk_glbl       ; // clock for global reg
-wire                          wbd_clk_mbist1     ; // clock for global reg
-wire                          wbd_clk_mbist2     ; // clock for global reg
-wire                          wbd_clk_mbist3     ; // clock for global reg
-wire                          wbd_clk_mbist4     ; // clock for global reg
-wire                          wbd_clk_mbist5     ; // clock for global reg
-wire                          wbd_clk_mbist6     ; // clock for global reg
-wire                          wbd_clk_mbist7     ; // clock for global reg
-wire                          wbd_clk_mbist8     ; // clock for global reg
-
 wire [31:0]                   cfg_clk_ctrl1      ;
 wire [31:0]                   cfg_clk_ctrl2      ;
 
+//---------------------------------------------------
 // Scan Control Signal
-wire                          scan_clk           ;
-wire                          scan_rst_n         ;
-
-wire                          scan_mode          ;
-wire                          scan_en            ;
-wire [SCW-1:0]                scan_in            ;
-wire [SCW-1:0]                scan_out           ;
-
-wire                          scan_mode_glbl     ;
-wire                          scan_en_glbl       ;
-wire [SCW-1:0]                scan_out_glbl      ;
-
-wire                          scan_mode_wbi     ;
-wire                          scan_en_wbi       ;
-wire [SCW-1:0]                scan_out_wbi      ;
-
-wire                          scan_mode_mbist1  ;
-wire                          scan_en_mbist1    ;
-wire [SCW-1:0]                scan_out_mbist1   ;
-
-wire                          scan_mode_mbist2  ;
-wire                          scan_en_mbist2    ;
-wire [SCW-1:0]                scan_out_mbist2   ;
-
-wire                          scan_mode_mbist3  ;
-wire                          scan_en_mbist3    ;
-wire [SCW-1:0]                scan_out_mbist3   ;
-
-wire                          scan_mode_mbist4  ;
-wire                          scan_en_mbist4    ;
-wire [SCW-1:0]                scan_out_mbist4   ;
-
-wire                          scan_mode_mbist5  ;
-wire                          scan_en_mbist5    ;
-wire [SCW-1:0]                scan_out_mbist5   ;
-
-wire                          scan_mode_mbist6  ;
-wire                          scan_en_mbist6    ;
-wire [SCW-1:0]                scan_out_mbist6   ;
-
-wire                          scan_mode_mbist7  ;
-wire                          scan_en_mbist7    ;
-wire [SCW-1:0]                scan_out_mbist7   ;
-
-wire                          scan_mode_mbist8  ;
-wire                          scan_en_mbist8    ;
-wire [SCW-1:0]                scan_out_mbist8   ;
-
+//---------------------------------------------------
 ////////////////////////////////////////////////////////////
 //  Scan Tree Map
 ///////////////////////////////////////////////////////////
 
-// WB_HOST(LBIST) => GLBL => MBIST5 => MBIST6 => MBIST7 
-// => MBIST8 => WB_INTERCONNECT => MBIST4 => MBIST3 
-// => MBIST2 => MBIST1 => WB_HOST(LBIST) 
+// WB_HOST(LBIST) => GLBL => MBIST => WB_INTERCONNECT => WB_HOST(LBIST) 
+wire                          scan_clk            ; // Scan Clock
+wire                          scan_rst_n          ; // Scan Reset
+
+wire                          scan_mode           ; // Scan Mode
+wire                          scan_en             ; // Scan Enable
+wire [SCW-1:0]                scan_in             ; // Scan Chain-In
+wire [SCW-1:0]                scan_out            ; // Scan Chain Out
+
+wire                          scan_mode_pinmux    ;
+wire                          scan_en_pinmux      ;
+wire [SCW-1:0]                scan_out_pinmux     ;
+
+wire                          scan_mode_wbi       ;
+wire                          scan_en_wbi         ;
+wire [SCW-1:0]                scan_out_wbi        ;
+
+wire                          scan_mode_mbist     ;
+wire                          scan_en_mbist       ;
+wire [SCW-1:0]                scan_out_mbist      ;
+
+//-----------------------------------------------------------------------
+// MAC Line-Tx Signal
+//-----------------------------------------------------------------------
+wire         mac_tx_en      ;
+wire         mac_tx_er      ;
+wire [7:0]   mac_txd        ;
+wire	     mac_tx_clk     ;
+
+//-----------------------------------------------------------------------
+// MAC Line-Rx Signal
+//-----------------------------------------------------------------------
+wire        mac_rx_clk      ;
+wire	    mac_rx_er       ;
+wire	    mac_rx_dv       ;
+wire [7:0]  mac_rxd         ;
+wire	    mac_crs         ;
+
+
+//-----------------------------------------------------------------------
+// MAC MDIO Signal
+//-----------------------------------------------------------------------
+wire	    mdio_clk        ;
+wire        mdio_in         ;
+wire        mdio_out_en     ;
+wire        mdio_out        ;
+
+//--------------------------------------------
+// MAC Q Occupancy
+//--------------------------------------------
+wire [9:0]  mac_tx_qbase_addr;
+wire [9:0]  mac_rx_qbase_addr;
+wire        mac_tx_qcnt_inc;
+wire        mac_tx_qcnt_dec;
+wire        mac_rx_qcnt_inc;  
+wire        mac_rx_qcnt_dec;      
+
+
 
 /////////////////////////////////////////////////////////
 // Clock Skew Ctrl
@@ -515,1290 +350,603 @@
 
 wire [3:0] cfg_cska_wh       = cfg_clk_ctrl1[3:0];
 wire [3:0] cfg_cska_wi       = cfg_clk_ctrl1[7:4];
-wire [3:0] cfg_cska_glbl     = cfg_clk_ctrl1[11:8];
+wire [3:0] cfg_cska_pinmux   = cfg_clk_ctrl1[11:8];
 wire [3:0] cfg_cska_lbist    = cfg_clk_ctrl1[15:12];
+wire [3:0] cfg_cska_mbist    = cfg_clk_ctrl1[19:16];
+wire [3:0] cfg_cska_mac      = cfg_clk_ctrl1[23:20];
 
-wire       cfg_mem_lphase    = cfg_clk_ctrl1[31]; // SRAM data lanuch phase selection
+wire   cfg_mem_lphase        = cfg_clk_ctrl1[31]; // SRAM data lanuch phase selection
 
-wire [3:0] cfg_cska_mbist1   = cfg_clk_ctrl2[3:0];
-wire [3:0] cfg_cska_mbist2   = cfg_clk_ctrl2[7:4];
-wire [3:0] cfg_cska_mbist3   = cfg_clk_ctrl2[11:8];
-wire [3:0] cfg_cska_mbist4   = cfg_clk_ctrl2[15:12];
-wire [3:0] cfg_cska_mbist5   = cfg_clk_ctrl2[19:16];
-wire [3:0] cfg_cska_mbist6   = cfg_clk_ctrl2[23:20];
-wire [3:0] cfg_cska_mbist7   = cfg_clk_ctrl2[27:24];
-wire [3:0] cfg_cska_mbist8   = cfg_clk_ctrl2[31:28];
 
 wb_host 
    #(
      `ifndef SYNTHESIS
-        .SCW(SCW)   // SCAN CHAIN WIDTH
+          .SCW                (SCW                          )   // SCAN CHAIN WIDTH
      `endif
      ) 
   u_wb_host(
 `ifdef USE_POWER_PINS
-         .vccd1         (vccd1                 ),// User area 1 1.8V supply
-         .vssd1         (vssd1                 ),// User area 1 digital ground
+          .vccd1              (vccd1                        ),// User area 1 1.8V supply
+          .vssd1              (vssd1                        ),// User area 1 digital ground
 `endif
-        .user_clock1          (wb_clk_i         ),
-        .user_clock2          (user_clock2      ),
-	.user_irq             (user_irq         ),
+          .user_clock1        (wb_clk_i                     ),
+          .user_clock2        (user_clock2                  ),
+          .user_irq           (user_irq                     ),
 
     // Master Port
-        .wbm_rst_i            (wb_rst_i         ),  
-        .wbm_clk_i            (wb_clk_i         ),  
-        .wbm_cyc_i            (wbs_cyc_i        ),  
-        .wbm_stb_i            (wbs_stb_i        ),  
-        .wbm_adr_i            (wbs_adr_i        ),  
-        .wbm_we_i             (wbs_we_i         ),  
-        .wbm_dat_i            (wbs_dat_i        ),  
-        .wbm_sel_i            (wbs_sel_i        ),  
-        .wbm_dat_o            (wbs_dat_o        ),  
-        .wbm_ack_o            (wbs_ack_o        ),  
-        .wbm_err_o            (                 ),  
+          .wbm_rst_i          (wb_rst_i                     ),  
+          .wbm_clk_i          (wb_clk_i                     ),  
+          .wbm_cyc_i          (wbs_cyc_i                    ),  
+          .wbm_stb_i          (wbs_stb_i                    ),  
+          .wbm_adr_i          (wbs_adr_i                    ),  
+          .wbm_we_i           (wbs_we_i                     ),  
+          .wbm_dat_i          (wbs_dat_i                    ),  
+          .wbm_sel_i          (wbs_sel_i                    ),  
+          .wbm_dat_o          (wbs_dat_o                    ),  
+          .wbm_ack_o          (wbs_ack_o                    ),  
+          .wbm_err_o          (                             ),  
 
     // Clock Skeq Adjust
-        .wbd_clk_int          (wbd_clk_int      ),
-        .wbd_clk_wh           (wbd_clk_wh       ),  
-        .cfg_cska_wh          (cfg_cska_wh      ),
+          .wbd_clk_int        (wbd_clk_int                  ),
+          .wbd_clk_wh         (wbd_clk_wh                   ),  
+          .cfg_cska_wh        (cfg_cska_wh                  ),
 
     // Clock Skeq Adjust
-        .lbist_clk_int        (lbist_clk        ),
-        .lbist_clk_out        (lbist_clk        ),  
-        .cfg_cska_lbist       (cfg_cska_lbist   ),
+          .lbist_clk_int      (lbist_clk                    ),
+          .lbist_clk_out      (lbist_clk                    ),  
+          .cfg_cska_lbist     (cfg_cska_lbist               ),
 
     // Slave Port
-        .wbs_clk_out          (wbd_clk_int      ),
-        .wbs_clk_i            (wbd_clk_wh       ),  
-        .wbs_cyc_o            (wbd_int_cyc_i    ),  
-        .wbs_stb_o            (wbd_int_stb_i    ),  
-        .wbs_adr_o            (wbd_int_adr_i    ),  
-        .wbs_we_o             (wbd_int_we_i     ),  
-        .wbs_dat_o            (wbd_int_dat_i    ),  
-        .wbs_sel_o            (wbd_int_sel_i    ),  
-        .wbs_dat_i            (wbd_int_dat_o    ),  
-        .wbs_ack_i            (wbd_int_ack_o    ),  
-        .wbs_err_i            (wbd_int_err_o    ),  
+          .wbs_clk_out        (wbd_clk_int                  ),
+          .wbs_clk_i          (wbd_clk_wh                   ),  
+          .wbs_cyc_o          (wbd_int_cyc_i                ),  
+          .wbs_stb_o          (wbd_int_stb_i                ),  
+          .wbs_adr_o          (wbd_int_adr_i                ),  
+          .wbs_we_o           (wbd_int_we_i                 ),  
+          .wbs_dat_o          (wbd_int_dat_i                ),  
+          .wbs_sel_o          (wbd_int_sel_i                ),  
+          .wbs_dat_i          (wbd_int_dat_o                ),  
+          .wbs_ack_i          (wbd_int_ack_o                ),  
+          .wbs_err_i          (wbd_int_err_o                ),  
 
-        .cfg_clk_ctrl1        (cfg_clk_ctrl1    ),
-        .cfg_clk_ctrl2        (cfg_clk_ctrl2    ),
+          .cfg_clk_ctrl1      (cfg_clk_ctrl1                ),
+          .cfg_clk_ctrl2      (cfg_clk_ctrl2                ),
 
-        .bist_rst_n           (bist_rst_n       ),
-	.wbd_int_rst_n        (wbd_int_rst_n    ),
+          .mac_rst_n          (mac_rst_n                    ),
+          .bist_rst_n         (bist_rst_n                   ),
+          .wbd_int_rst_n      (wbd_int_rst_n                ),
 
-        .io_in                (io_in[0]         ),
-        .io_out               (io_out           ),
-        .io_oeb               (io_oeb           ),
-        .la_data_in           (la_data_in[35:0] ),
-        .la_data_out          (la_data_out      ),
+          .io_in              (io_in[0]                     ),
+          .io_out             (io_out                       ),
+          .io_oeb             (io_oeb                       ),
+          .la_data_in         (la_data_in[35:0]             ),
+          .la_data_out        (la_data_out                  ),
 
 
 	// Scan Control Signal
-	.scan_clk            (scan_clk          ),
-	.scan_rst_n          (scan_rst_n        ),
-	.scan_mode           (scan_mode         ),
-	.scan_en             (scan_en           ),
-	.scan_in             (scan_in           ),
-	.scan_out            (scan_out_mbist1   )
+          .scan_clk           (scan_clk                     ),
+          .scan_rst_n         (scan_rst_n                   ),
+          .scan_mode          (scan_mode                    ),
+          .scan_en            (scan_en                      ),
+          .scan_in            (scan_in                      ),
+          .scan_out           (scan_out_mbist               )
 
     );
 
 wb_interconnect  #(
 	`ifndef SYNTHESIS
-                 .SCW(SCW),   // SCAN CHAIN WIDTH
-	        .CH_CLK_WD(9),
-	        .CH_DATA_WD(104)
+          .SCW                (SCW                          ),   // SCAN CHAIN WIDTH
+          .CH_CLK_WD          (3                            ),
+          .CH_DATA_WD         (31                           )
         `endif
 	   )
      u_intercon (
 `ifdef USE_POWER_PINS
-         .vccd1         (vccd1                 ),// User area 1 1.8V supply
-         .vssd1         (vssd1                 ),// User area 1 digital ground
+          .vccd1              (vccd1                        ),// User area 1 1.8V supply
+          .vssd1              (vssd1                        ),// User area 1 digital ground
 `endif
        // SCAN I/F
-       .scan_en                (scan_en_mbist8   ),
-       .scan_mode              (scan_mode_mbist8 ),
-       .scan_si                (scan_out_mbist8   ),
+          .scan_en            (scan_en_mbist                ),
+          .scan_mode          (scan_mode_mbist              ),
+          .scan_si            (scan_out_mbist               ),
 
-       .scan_en_o              (scan_en_wbi    ),
-       .scan_mode_o            (scan_mode_wbi  ),
-       .scan_so                (scan_out_wbi   ),
+          .scan_en_o          (scan_en_wbi                  ),
+          .scan_mode_o        (scan_mode_wbi                ),
+          .scan_so            (scan_out_wbi                 ),
      // Clock Skew adjust
-	 .wbd_clk_int   (wbd_clk_int           ), 
-	 .cfg_cska_wi   (cfg_cska_wi           ), 
-	 .wbd_clk_wi    (wbd_clk_wi            ),
+          .wbd_clk_int        (wbd_clk_int                  ), 
+          .cfg_cska_wi        (cfg_cska_wi                  ), 
+          .wbd_clk_skew       (wbd_clk_wi_skew              ),
 
-	 .ch_clk_in     ({
-	                  wbd_clk_int,
-                          wbd_clk_int, 
-                          wbd_clk_int, 
-                          wbd_clk_int, 
-                          wbd_clk_int, 
-                          wbd_clk_int, 
-                          wbd_clk_int, 
-                          wbd_clk_int, 
-                          wbd_clk_int}),
-	 .ch_clk_out    ({
-                         wbd_clk_mbist8_int,  
-                         wbd_clk_mbist7_int,  
-                         wbd_clk_mbist6_int,  
-                         wbd_clk_mbist5_int,  
-                         wbd_clk_mbist4_int,  
-                         wbd_clk_mbist3_int,  
-                         wbd_clk_mbist2_int,  
-                         wbd_clk_mbist1_int, 
-			 wbd_clk_glbl_int
-		         }),
-	 .ch_data_in    ({
-			 bist_error_cnt7,
-			 bist_correct[7],
-			 bist_error[7],
-			 bist_done[7],
-		         bist_sdo[7],
-		         bist_sdi[7],
-		         bist_load[7],
-			 bist_shift[7],
-		         bist_run[7],
-                         bist_en[7],
-			 
-			 bist_error_cnt6,
-			 bist_correct[6],
-			 bist_error[6],
-			 bist_done[6],
-		         bist_sdo[6],
-		         bist_sdi[6],
-		         bist_load[6],
-			 bist_shift[6],
-		         bist_run[6],
-                         bist_en[6],
-			 
-			 bist_error_cnt5,
-			 bist_correct[5],
-			 bist_error[5],
-			 bist_done[5],
-		         bist_sdo[5],
-		         bist_sdi[5],
-		         bist_load[5],
-			 bist_shift[5],
-		         bist_run[5],
-                         bist_en[5],
-			 
-			 bist_error_cnt4,
-			 bist_correct[4],
-			 bist_error[4],
-			 bist_done[4],
-		         bist_sdo[4],
-		         bist_sdi[4],
-		         bist_load[4],
-			 bist_shift[4],
-		         bist_run[4],
-                         bist_en[4],
-			 
+          .ch_clk_in          ({ wbd_clk_int, 
+                                 wbd_clk_int,
+                                 wbd_clk_int}               ),
+          .ch_clk_out         ({
+                                 wbd_clk_mac_rp, 
+                                 wbd_clk_mbist_rp, 
+			                     wbd_clk_pinmux_rp
+		                       }),
+          .ch_data_in ({
+		 
 			 bist_error_cnt3,
 			 bist_correct[3],
 			 bist_error[3],
-			 bist_done[3],
-		         bist_sdo[3],
-		         bist_sdi[3],
-		         bist_load[3],
-			 bist_shift[3],
-		         bist_run[3],
-                         bist_en[3],
 			 
 			 bist_error_cnt2,
 			 bist_correct[2],
 			 bist_error[2],
-			 bist_done[2],
-		         bist_sdo[2],
-		         bist_sdi[2],
-		         bist_load[2],
-			 bist_shift[2],
-		         bist_run[2],
-                         bist_en[2],
 			 
 			 bist_error_cnt1,
 			 bist_correct[1],
 			 bist_error[1],
-			 bist_done[1],
-		         bist_sdo[1],
-		         bist_sdi[1],
-		         bist_load[1],
-			 bist_shift[1],
-		         bist_run[1],
-                         bist_en[1],
 
 			 bist_error_cnt0,
 			 bist_correct[0],
 			 bist_error[0],
-			 bist_done[0],
-		         bist_sdo[0],
-		         bist_sdi[0],
-		         bist_load[0],
-			 bist_shift[0],
-		         bist_run[0],
-                         bist_en[0]
-			 } ),
-	 .ch_data_out   ({
-			 bist_error_cnt7_int,
-			 bist_correct_int[7],
-			 bist_error_int[7],
-			 bist_done_int[7],
-		         bist_sdo_int[7],
-		         bist_sdi_int[7],
-		         bist_load_int[7],
-			 bist_shift_int[7],
-		         bist_run_int[7],
-                         bist_en_int[7],
+			 bist_done,
+		     bist_sdo,
+		     bist_sdi,
+		     bist_load,
+			 bist_shift,
+		     bist_run,
+             bist_en
+			 }),
+          .ch_data_out        ({
 			 
-			 bist_error_cnt6_int,
-			 bist_correct_int[6],
-			 bist_error_int[6],
-			 bist_done_int[6],
-		         bist_sdo_int[6],
-		         bist_sdi_int[6],
-		         bist_load_int[6],
-			 bist_shift_int[6],
-		         bist_run_int[6],
-                         bist_en_int[6],
+			 bist_error_cnt3_rp,
+			 bist_correct_rp[3],
+			 bist_error_rp[3],
 			 
-			 bist_error_cnt5_int,
-			 bist_correct_int[5],
-			 bist_error_int[5],
-			 bist_done_int[5],
-		         bist_sdo_int[5],
-		         bist_sdi_int[5],
-		         bist_load_int[5],
-			 bist_shift_int[5],
-		         bist_run_int[5],
-                         bist_en_int[5],
+			 bist_error_cnt2_rp,
+			 bist_correct_rp[2],
+			 bist_error_rp[2],
 			 
-			 bist_error_cnt4_int,
-			 bist_correct_int[4],
-			 bist_error_int[4],
-			 bist_done_int[4],
-		         bist_sdo_int[4],
-		         bist_sdi_int[4],
-		         bist_load_int[4],
-			 bist_shift_int[4],
-		         bist_run_int[4],
-                         bist_en_int[4],
-			 
-			 bist_error_cnt3_int,
-			 bist_correct_int[3],
-			 bist_error_int[3],
-			 bist_done_int[3],
-		         bist_sdo_int[3],
-		         bist_sdi_int[3],
-		         bist_load_int[3],
-			 bist_shift_int[3],
-		         bist_run_int[3],
-                         bist_en_int[3],
-			 
-			 bist_error_cnt2_int,
-			 bist_correct_int[2],
-			 bist_error_int[2],
-			 bist_done_int[2],
-		         bist_sdo_int[2],
-		         bist_sdi_int[2],
-		         bist_load_int[2],
-			 bist_shift_int[2],
-		         bist_run_int[2],
-                         bist_en_int[2],
-			 
-			 bist_error_cnt1_int,
-			 bist_correct_int[1],
-			 bist_error_int[1],
-			 bist_done_int[1],
-		         bist_sdo_int[1],
-		         bist_sdi_int[1],
-		         bist_load_int[1],
-			 bist_shift_int[1],
-		         bist_run_int[1],
-                         bist_en_int[1],
+			 bist_error_cnt1_rp,
+			 bist_correct_rp[1],
+			 bist_error_rp[1],
 
-			 bist_error_cnt0_int,
-			 bist_correct_int[0],
-			 bist_error_int[0],
-			 bist_done_int[0],
-		         bist_sdo_int[0],
-		         bist_sdi_int[0],
-		         bist_load_int[0],
-			 bist_shift_int[0],
-		         bist_run_int[0],
-                         bist_en_int[0]
-                         }),
+			 bist_error_cnt0_rp,
+			 bist_correct_rp[0],
+			 bist_error_rp[0],
 
-         .clk_i         (wbd_clk_wi            ), 
-         .rst_n         (wbd_int_rst_n         ),
+			 bist_done_rp,
+		     bist_sdo_rp,
+		     bist_sdi_rp,
+		     bist_load_rp,
+			 bist_shift_rp,
+		     bist_run_rp,
+             bist_en_rp
+             }),
+
+          .clk_i              (wbd_clk_wi_skew              ), 
+          .rst_n              (wbd_int_rst_n                ),
 
          // Master 0 Interface
-         .m0_wbd_dat_i  (wbd_int_dat_i         ),
-         .m0_wbd_adr_i  (wbd_int_adr_i         ),
-         .m0_wbd_sel_i  (wbd_int_sel_i         ),
-         .m0_wbd_we_i   (wbd_int_we_i          ),
-         .m0_wbd_cyc_i  (wbd_int_cyc_i         ),
-         .m0_wbd_stb_i  (wbd_int_stb_i         ),
-         .m0_wbd_dat_o  (wbd_int_dat_o         ),
-         .m0_wbd_ack_o  (wbd_int_ack_o         ),
-         .m0_wbd_err_o  (wbd_int_err_o         ),
+          .m0_wbd_dat_i       (wbd_int_dat_i                ),
+          .m0_wbd_adr_i       (wbd_int_adr_i                ),
+          .m0_wbd_sel_i       (wbd_int_sel_i                ),
+          .m0_wbd_we_i        (wbd_int_we_i                 ),
+          .m0_wbd_cyc_i       (wbd_int_cyc_i                ),
+          .m0_wbd_stb_i       (wbd_int_stb_i                ),
+          .m0_wbd_dat_o       (wbd_int_dat_o                ),
+          .m0_wbd_ack_o       (wbd_int_ack_o                ),
+          .m0_wbd_err_o       (wbd_int_err_o                ),
+
+         // Master 1 Interface
+          .m1_wbd_dat_i       (wbm_gtx_dat_o                ),
+          .m1_wbd_adr_i       (wbm_gtx_adr_o                ),
+          .m1_wbd_sel_i       (wbm_gtx_sel_o                ),
+          .m1_wbd_we_i        (wbm_gtx_we_o                 ),
+          .m1_wbd_cyc_i       (wbm_gtx_cyc_o                ),
+          .m1_wbd_stb_i       (wbm_gtx_stb_o                ),
+          .m1_wbd_dat_o       (wbm_gtx_dat_i                ),
+          .m1_wbd_ack_o       (wbm_gtx_ack_i                ),
+          .m1_wbd_err_o       (                             ),
+
+         // Master 2 Interface
+          .m2_wbd_dat_i       (wbm_grx_dat_o                ),
+          .m2_wbd_adr_i       (wbm_grx_adr_o                ),
+          .m2_wbd_sel_i       (wbm_grx_sel_o                ),
+          .m2_wbd_we_i        (wbm_grx_we_o                 ),
+          .m2_wbd_cyc_i       (wbm_grx_cyc_o                ),
+          .m2_wbd_stb_i       (wbm_grx_stb_o                ),
+          .m2_wbd_dat_o       (wbm_grx_dat_i                ),
+          .m2_wbd_ack_o       (wbm_grx_ack_i                ),
+          .m2_wbd_err_o       (                             ),
 
          // Slave 0 Interface
-         // .s0_wbd_err_i  (1'b0           ), - Moved inside IP
-         .s0_wbd_dat_i  (wbd_glbl_dat_i ),
-         .s0_wbd_ack_i  (wbd_glbl_ack_i ),
-         .s0_wbd_dat_o  (wbd_glbl_dat_o ),
-         .s0_wbd_adr_o  (wbd_glbl_adr_o ),
-         .s0_wbd_sel_o  (wbd_glbl_sel_o ),
-         .s0_wbd_we_o   (wbd_glbl_we_o  ),  
-         .s0_wbd_cyc_o  (wbd_glbl_cyc_o ),
-         .s0_wbd_stb_o  (wbd_glbl_stb_o ),
-         
-         // Slave 0 Interface
-         // .s0_wbd_err_i  (1'b0           ), - Moved inside IP
-         .s1_wbd_dat_i  (wbd_mbist1_dat_i ),
-         .s1_wbd_ack_i  (wbd_mbist1_ack_i ),
-         .s1_wbd_dat_o  (wbd_mbist1_dat_o ),
-         .s1_wbd_adr_o  (wbd_mbist1_adr_o ),
-         .s1_wbd_sel_o  (wbd_mbist1_sel_o ),
-         .s1_wbd_we_o   (wbd_mbist1_we_o  ),  
-         .s1_wbd_cyc_o  (wbd_mbist1_cyc_o ),
-         .s1_wbd_stb_o  (wbd_mbist1_stb_o ),
-         
-         // Slave 1 Interface
-         // .s1_wbd_err_i  (1'b0           ), - Moved inside IP
-         .s2_wbd_dat_i  (wbd_mbist2_dat_i ),
-         .s2_wbd_ack_i  (wbd_mbist2_ack_i ),
-         .s2_wbd_dat_o  (wbd_mbist2_dat_o ),
-         .s2_wbd_adr_o  (wbd_mbist2_adr_o ),
-         .s2_wbd_sel_o  (wbd_mbist2_sel_o ),
-         .s2_wbd_we_o   (wbd_mbist2_we_o  ),  
-         .s2_wbd_cyc_o  (wbd_mbist2_cyc_o ),
-         .s2_wbd_stb_o  (wbd_mbist2_stb_o ),
-         
+         // .s0_wbd_err_i     (1'b0                         ), - Moved inside IP
+          .s0_wbd_dat_i       (wbd_pinmux_dat_i               ),
+          .s0_wbd_ack_i       (wbd_pinmux_ack_i               ),
+          .s0_wbd_dat_o       (wbd_pinmux_dat_o               ),
+          .s0_wbd_adr_o       (wbd_pinmux_adr_o               ),
+          .s0_wbd_sel_o       (wbd_pinmux_sel_o               ),
+          .s0_wbd_we_o        (wbd_pinmux_we_o                ),  
+          .s0_wbd_cyc_o       (wbd_pinmux_cyc_o               ),
+          .s0_wbd_stb_o       (wbd_pinmux_stb_o               ),
+
+          // Slave 1 Interface
+          //.s1_wbd_err_i     (1'b0                         ), - Moved inside IP
+          .s1_wbd_dat_i       (wbs_grg_dat_o                ),
+          .s1_wbd_ack_i       (wbs_grg_ack_o                ),
+          .s1_wbd_dat_o       (wbs_grg_dat_i                ),
+          .s1_wbd_adr_o       (wbs_grg_adr_i                ),
+          .s1_wbd_sel_o       (wbs_grg_sel_i                ),
+          .s1_wbd_we_o        (wbs_grg_we_i                 ),  
+          .s1_wbd_cyc_o       (wbs_grg_cyc_i                ),
+          .s1_wbd_stb_o       (wbs_grg_stb_i                ),
+
          // Slave 2 Interface
-         // .s2_wbd_err_i  (1'b0           ), - Moved inside IP
-         .s3_wbd_dat_i  (wbd_mbist3_dat_i ),
-         .s3_wbd_ack_i  (wbd_mbist3_ack_i ),
-         .s3_wbd_dat_o  (wbd_mbist3_dat_o ),
-         .s3_wbd_adr_o  (wbd_mbist3_adr_o ),
-         .s3_wbd_sel_o  (wbd_mbist3_sel_o ),
-         .s3_wbd_we_o   (wbd_mbist3_we_o  ),  
-         .s3_wbd_cyc_o  (wbd_mbist3_cyc_o ),
-         .s3_wbd_stb_o  (wbd_mbist3_stb_o ),
+          //.s2_wbd_err_i     (1'b0                         ), - Moved inside IP
+          .s2_wbd_dat_i       (wbd_mbist_dat_i              ),
+          .s2_wbd_ack_i       (wbd_mbist_ack_i              ),
+          .s2_wbd_dat_o       (wbd_mbist_dat_o              ),
+          .s2_wbd_adr_o       (wbd_mbist_adr_o              ),
+          .s2_wbd_sel_o       (wbd_mbist_sel_o              ),
+          .s2_wbd_bl_o        (wbd_mbist_bl_o               ),
+          .s2_wbd_bry_o       (wbd_mbist_bry_o              ),
+          .s2_wbd_we_o        (wbd_mbist_we_o               ),  
+          .s2_wbd_cyc_o       (wbd_mbist_cyc_o              ),
+          .s2_wbd_stb_o       (wbd_mbist_stb_o              ),
 
-         // Slave 3 Interface
-         // .s3_wbd_err_i  (1'b0           ), - Moved inside IP
-         .s4_wbd_dat_i  (wbd_mbist4_dat_i ),
-         .s4_wbd_ack_i  (wbd_mbist4_ack_i ),
-         .s4_wbd_dat_o  (wbd_mbist4_dat_o ),
-         .s4_wbd_adr_o  (wbd_mbist4_adr_o ),
-         .s4_wbd_sel_o  (wbd_mbist4_sel_o ),
-         .s4_wbd_we_o   (wbd_mbist4_we_o  ),  
-         .s4_wbd_cyc_o  (wbd_mbist4_cyc_o ),
-         .s4_wbd_stb_o  (wbd_mbist4_stb_o ),
 
-         // Slave 4 Interface
-         // .s0_wbd_err_i  (1'b0           ), - Moved inside IP
-         .s5_wbd_dat_i  (wbd_mbist5_dat_i ),
-         .s5_wbd_ack_i  (wbd_mbist5_ack_i ),
-         .s5_wbd_dat_o  (wbd_mbist5_dat_o ),
-         .s5_wbd_adr_o  (wbd_mbist5_adr_o ),
-         .s5_wbd_sel_o  (wbd_mbist5_sel_o ),
-         .s5_wbd_we_o   (wbd_mbist5_we_o  ),  
-         .s5_wbd_cyc_o  (wbd_mbist5_cyc_o ),
-         .s5_wbd_stb_o  (wbd_mbist5_stb_o ),
-         
-         // Slave 5 Interface
-         // .s6_wbd_err_i  (1'b0           ), - Moved inside IP
-         .s6_wbd_dat_i  (wbd_mbist6_dat_i ),
-         .s6_wbd_ack_i  (wbd_mbist6_ack_i ),
-         .s6_wbd_dat_o  (wbd_mbist6_dat_o ),
-         .s6_wbd_adr_o  (wbd_mbist6_adr_o ),
-         .s6_wbd_sel_o  (wbd_mbist6_sel_o ),
-         .s6_wbd_we_o   (wbd_mbist6_we_o  ),  
-         .s6_wbd_cyc_o  (wbd_mbist6_cyc_o ),
-         .s6_wbd_stb_o  (wbd_mbist6_stb_o ),
-         
-         // Slave 6 Interface
-         // .s7_wbd_err_i  (1'b0           ), - Moved inside IP
-         .s7_wbd_dat_i  (wbd_mbist7_dat_i ),
-         .s7_wbd_ack_i  (wbd_mbist7_ack_i ),
-         .s7_wbd_dat_o  (wbd_mbist7_dat_o ),
-         .s7_wbd_adr_o  (wbd_mbist7_adr_o ),
-         .s7_wbd_sel_o  (wbd_mbist7_sel_o ),
-         .s7_wbd_we_o   (wbd_mbist7_we_o  ),  
-         .s7_wbd_cyc_o  (wbd_mbist7_cyc_o ),
-         .s7_wbd_stb_o  (wbd_mbist7_stb_o ),
+          // Q Occupancy
+          .mac_tx_qbase_addr  (mac_tx_qbase_addr            ) ,
+          .mac_rx_qbase_addr  (mac_rx_qbase_addr            ) ,
 
-         // Slave 7 Interface
-         // .s8_wbd_err_i  (1'b0           ), - Moved inside IP
-         .s8_wbd_dat_i  (wbd_mbist8_dat_i ),
-         .s8_wbd_ack_i  (wbd_mbist8_ack_i ),
-         .s8_wbd_dat_o  (wbd_mbist8_dat_o ),
-         .s8_wbd_adr_o  (wbd_mbist8_adr_o ),
-         .s8_wbd_sel_o  (wbd_mbist8_sel_o ),
-         .s8_wbd_we_o   (wbd_mbist8_we_o  ),  
-         .s8_wbd_cyc_o  (wbd_mbist8_cyc_o ),
-         .s8_wbd_stb_o  (wbd_mbist8_stb_o )
+          .mac_tx_qcnt_inc    (mac_tx_qcnt_inc              ),
+          .mac_tx_qcnt_dec    (mac_tx_qcnt_dec              ),
+          .mac_rx_qcnt_inc    (mac_rx_qcnt_inc              ),  
+          .mac_rx_qcnt_dec    (mac_rx_qcnt_dec              )       
 	);
 
 
-glbl_cfg #(
+pinmux_top #(
      `ifndef SYNTHESIS
-        .SCW(SCW)   // SCAN CHAIN WIDTH
+          .SCW                (SCW                          )   // SCAN CHAIN WIDTH
      `endif
-     ) u_glbl(
+     ) u_pinmux(
 `ifdef USE_POWER_PINS
-       .vccd1                  (vccd1                     ),// User area 1 1.8V supply
-       .vssd1                  (vssd1                     ),// User area 1 digital ground
+          .vccd1              (vccd1                        ),// User area 1 1.8V supply
+          .vssd1              (vssd1                        ),// User area 1 digital ground
 `endif
        // SCAN I/F
-       .scan_en                (scan_en                   ),
-       .scan_mode              (scan_mode                 ),
-       .scan_si                (scan_in                   ),
+          .scan_en            (scan_en                      ),
+          .scan_mode          (scan_mode                    ),
+          .scan_si            (scan_in                      ),
 
-       .scan_en_o              (scan_en_glbl              ),
-       .scan_mode_o            (scan_mode_glbl            ),
-       .scan_so                (scan_out_glbl             ),
+          .scan_en_o          (scan_en_pinmux                 ),
+          .scan_mode_o        (scan_mode_pinmux               ),
+          .scan_so            (scan_out_pinmux                ),
 
 
-       .wbd_clk_int            (wbd_clk_glbl_int          ), 
-       .cfg_cska_glbl          (cfg_cska_glbl             ), 
-       .wbd_clk_glbl           (wbd_clk_glbl              ), 
+          .wbd_clk_int        (wbd_clk_pinmux_rp            ), 
+          .cfg_cska_pinmux    (cfg_cska_pinmux              ), 
+          .wbd_clk_skew       (wbd_clk_pinmux_skew          ), 
 
-       .mclk                   (wbd_clk_glbl              ),
-       .reset_n                (wbd_int_rst_n             ),
+          .mclk               (wbd_clk_pinmux_skew          ),
+          .reset_n            (wbd_int_rst_n                ),
 
         // Reg Bus Interface Signal
-       .reg_cs                 (wbd_glbl_stb_o            ),
-       .reg_wr                 (wbd_glbl_we_o             ),
-       .reg_addr               (wbd_glbl_adr_o            ),
-       .reg_wdata              (wbd_glbl_dat_o            ),
-       .reg_be                 (wbd_glbl_sel_o            ),
+          .reg_cs             (wbd_pinmux_stb_o             ),
+          .reg_wr             (wbd_pinmux_we_o              ),
+          .reg_addr           (wbd_pinmux_adr_o             ),
+          .reg_wdata          (wbd_pinmux_dat_o             ),
+          .reg_be             (wbd_pinmux_sel_o             ),
 
        // Outputs
-       .reg_rdata              (wbd_glbl_dat_i            ),
-       .reg_ack                (wbd_glbl_ack_i            ),
+          .reg_rdata          (wbd_pinmux_dat_i             ),
+          .reg_ack            (wbd_pinmux_ack_i             ),
 
 
-	// BIST I/F Outputs
-	.bist_en           (bist_en),
-	.bist_run          (bist_run),
-	.bist_load         (bist_load),
+       // BIST I/F
+          .bist_en            (bist_en                      ),
+          .bist_run           (bist_run                     ),
+          .bist_load          (bist_load                    ),
+        
+          .bist_serial_sel    (bist_serial_sel              ),
+          .bist_sdi           (bist_sdi                     ),
+          .bist_shift         (bist_shift                   ),
+          .bist_sdo           (bist_sdo_rp                  ),
+        
+          .bist_done          (bist_done_rp                 ),
+          .bist_error         (bist_error_rp                ),
+          .bist_correct       (bist_correct_rp              ),
+          .bist_error_cnt0    (bist_error_cnt0_rp           ),
+          .bist_error_cnt1    (bist_error_cnt1_rp           ),
+          .bist_error_cnt2    (bist_error_cnt2_rp           ),
+          .bist_error_cnt3    (bist_error_cnt3_rp           ),
 
-	.bist_sdi          (bist_sdi),
-	.bist_shift        (bist_shift),
-
-	// BIST Inputs
-	.bist_sdo          (bist_sdo_int),
-	.bist_done         (bist_done_int),
-	.bist_error        (bist_error_int),
-	.bist_correct      (bist_correct_int),
-	.bist_error_cnt0   (bist_error_cnt0_int),
-	.bist_error_cnt1   (bist_error_cnt1_int),
-	.bist_error_cnt2   (bist_error_cnt2_int),
-	.bist_error_cnt3   (bist_error_cnt3_int),
-	.bist_error_cnt4   (bist_error_cnt4_int),
-	.bist_error_cnt5   (bist_error_cnt5_int),
-	.bist_error_cnt6   (bist_error_cnt6_int),
-	.bist_error_cnt7   (bist_error_cnt7_int)
-
-        );
+          //-----------------------------------------------------------------------
+          // MAC Line-Tx Signal
+          //-----------------------------------------------------------------------
+          .mac_tx_en          (mac_tx_en                    ),
+          .mac_tx_er          (mac_tx_er                    ),
+          .mac_txd            (mac_txd                      ),
+          .mac_tx_clk         (mac_tx_clk                   ),
+                   
+          //-----------------------------------------------------------------------
+          // MAC Line-Rx Signal
+          //-----------------------------------------------------------------------
+          .mac_rx_clk         (mac_rx_clk                   ),
+          .mac_rx_er          (mac_rx_er                    ),
+          .mac_rx_dv          (mac_rx_dv                    ),
+          .mac_rxd            (mac_rxd                      ),
+          .mac_crs            (mac_crs                      ),
+                   
+                   
+          //-----------------------------------------------------------------------
+          // MAC MDIO Signal
+          //-----------------------------------------------------------------------
+          .mdio_clk           (mdio_clk                     ),
+          .mdio_in            (mdio_in                      ),
+          .mdio_out_en        (mdio_out_en                  ),
+          .mdio_out           (mdio_out                     )
 
 
-//------------- MBIST1 - 512x32             ----
 
-mbist_top1  #(
+    );
+
+//------------- MBIST - 512x32 * 4          ----
+
+wire [1:0] wb_cs_mbist  = wbd_mbist_adr_o[12:11];
+wire [10:2] wb_adr_mbist = wbd_mbist_adr_o[10:2];
+
+mbist_wrapper  #(
 	`ifndef SYNTHESIS
-        .SCW                    (SCW),   // SCAN CHAIN WIDTH
-	.BIST_ADDR_WD           (BIST1_ADDR_WD-2        ),
-	.BIST_DATA_WD           (BIST_DATA_WD           ),
-	.BIST_ADDR_START        (9'h000                 ),
-	.BIST_ADDR_END          (9'h1FB                 ),
-	.BIST_REPAIR_ADDR_START (9'h1FC                 ),
-	.BIST_RAD_WD_I          (BIST1_ADDR_WD-2        ),
-	.BIST_RAD_WD_O          (BIST1_ADDR_WD-2        )
+          .SCW                   (SCW                          ),
+          .BIST_NO_SRAM          (4                            ),
+          .BIST_ADDR_WD          (BIST_ADDR_WD                 ),
+          .BIST_DATA_WD          (BIST_DATA_WD                 ),
+          .BIST_ADDR_START       (9'h000                       ),
+          .BIST_ADDR_END         (9'h1FB                       ),
+          .BIST_REPAIR_ADDR_START(9'h1FC                       ),
+          .BIST_RAD_WD_I         (BIST_ADDR_WD                 ),
+          .BIST_RAD_WD_O         (BIST_ADDR_WD                 )
         `endif
      ) 
-	     u_mbist1 (
-
+	     u_mbist_wrapper (
 `ifdef USE_POWER_PINS
-       .vccd1                  (vccd1                     ),// User area 1 1.8V supply
-       .vssd1                  (vssd1                     ),// User area 1 digital ground
+          .vccd1              (vccd1                        ),// User area 1 1.8V supply
+          .vssd1              (vssd1                        ),// User area 1 digital ground
 `endif
-       // SCAN I/F
-       .scan_en                (scan_en_mbist2    ),
-       .scan_mode              (scan_mode_mbist2  ),
-       .scan_si                (scan_out_mbist2    ),
-
-       .scan_en_o              (scan_en_mbist1    ),
-       .scan_mode_o            (scan_mode_mbist1  ),
-       .scan_so                (scan_out_mbist1   ),
-
-       .cfg_mem_lphase         (cfg_mem_lphase    ),
-
      // Clock Skew adjust
-	.wbd_clk_int          (wbd_clk_mbist1_int), 
-	.cfg_cska_mbist       (cfg_cska_mbist1  ), 
-	.wbd_clk_mbist        (wbd_clk_mbist1   ),
+          .wbd_clk_int        (wbd_clk_mbist_rp             ), 
+          .cfg_cska_mbist     (cfg_cska_mbist               ), 
+          .wbd_clk_skew       (wbd_clk_mbist_skew           ),
 
 	// WB I/F
-        .wb_clk_i             (wbd_clk_mbist1  ),  
-        .wb_cyc_i             (wbd_mbist1_cyc_o),  
-        .wb_stb_i             (wbd_mbist1_stb_o),  
-        .wb_adr_i             (wbd_mbist1_adr_o[BIST1_ADDR_WD-1:2]),  
-        .wb_we_i              (wbd_mbist1_we_o ),  
-        .wb_dat_i             (wbd_mbist1_dat_o),  
-        .wb_sel_i             (wbd_mbist1_sel_o),  
-        .wb_dat_o             (wbd_mbist1_dat_i),  
-        .wb_ack_o             (wbd_mbist1_ack_i),  
-        .wb_err_o             (    ), 
+          .wb_clk2_i          (wbd_clk_mbist_skew           ),  
+          .wb_clk_i           (wbd_clk_mbist_skew           ),  
+          .wb_stb_i           (wbd_mbist_stb_o              ),  
+          .wb_cs_i            (wb_cs_mbist                  ),
+          .wb_adr_i           (wb_adr_mbist                 ),  
+          .wb_we_i            (wbd_mbist_we_o               ),  
+          .wb_dat_i           (wbd_mbist_dat_o              ),  
+          .wb_sel_i           (wbd_mbist_sel_o              ),
+          .wb_bl_i            (wbd_mbist_bl_o               ),
+          .wb_bry_i           (wbd_mbist_bry_o              ),
+          .wb_dat_o           (wbd_mbist_dat_i              ),  
+          .wb_ack_o           (wbd_mbist_ack_i              ),  
+          .wb_err_o           (                             ), 
+          .rst_n              (bist_rst_n                   ),
 
-	.rst_n                (bist_rst_n       ),
-
-	
-	.bist_en              (bist_en_int[0]       ),
-	.bist_run             (bist_run_int[0]      ),
-	.bist_shift           (bist_shift_int[0]    ),
-	.bist_load            (bist_load_int[0]     ),
-	.bist_sdi             (bist_sdi_int[0]      ),
-
-	.bist_error_cnt       (bist_error_cnt0      ),
-	.bist_correct         (bist_correct[0]      ),
-	.bist_error           (bist_error[0]        ),
-	.bist_done            (bist_done[0]         ),
-	.bist_sdo             (bist_sdo[0]          ),
+    // BIST Control Signals	
+          .bist_en            (bist_en_rp                   ),
+          .bist_run           (bist_run_rp                  ),
+          .bist_shift         (bist_shift_rp                ),
+          .bist_load          (bist_load_rp                 ),
+          .bist_sdi           (bist_sdi_rp                  ),
+          .bist_error_cnt3    (bist_error_cnt3              ),
+          .bist_error_cnt2    (bist_error_cnt2              ),
+          .bist_error_cnt1    (bist_error_cnt1              ),
+          .bist_error_cnt0    (bist_error_cnt0              ),
+          .bist_correct       (bist_correct                 ),
+          .bist_error         (bist_error                   ),
+          .bist_done          (bist_done                    ),
+          .bist_sdo           (bist_sdo                     ),
+          .bist_serial_sel    (bist_serial_sel              ),
 
      // towards memory
      // PORT-A
-        .mem_clk_a            (mem1_clk_a        ),
-        .mem_addr_a           (mem1_addr_a       ),
-        .mem_cen_a            (mem1_cen_a        ),
-        .mem_dout_a           (mem1_dout_a       ),
+          .mem_clk_a          (mem_clk_a                    ),
+          .mem_cen_a          (mem_cen_a                    ),
+          .mem_web_a          (mem_web_a                    ),
+
+          .mem_addr_a0        (mem0_addr_a                  ),
+          .mem_mask_a0        (mem0_mask_a                  ),
+          .mem_din_a0         (mem0_din_a                   ),
+          .mem_dout_a0        (mem0_dout_a                  ),
+
+          .mem_addr_a1        (mem1_addr_a                  ),
+          .mem_mask_a1        (mem1_mask_a                  ),
+          .mem_din_a1         (mem1_din_a                   ),
+          .mem_dout_a1        (mem1_dout_a                  ),
+
+          .mem_addr_a2        (mem2_addr_a                  ),
+          .mem_mask_a2        (mem2_mask_a                  ),
+          .mem_din_a2         (mem2_din_a                   ),
+          .mem_dout_a2        (mem2_dout_a                  ),
+
+          .mem_addr_a3        (mem3_addr_a                  ),
+          .mem_mask_a3        (mem3_mask_a                  ),
+          .mem_din_a3         (mem3_din_a                   ),
+          .mem_dout_a3        (mem3_dout_a                  ),
+
      // PORT-B
-        .mem_clk_b            (mem1_clk_b        ),
-        .mem_cen_b            (mem1_cen_b        ),
-        .mem_web_b            (mem1_web_b        ),
-        .mem_mask_b           (mem1_mask_b       ),
-        .mem_addr_b           (mem1_addr_b       ),
-        .mem_din_b            (mem1_din_b        )
+          .mem_clk_b          (mem_clk_b                    ),
+          .mem_cen_b          (mem_cen_b                    ),
 
-
+          .mem_addr_b0        (mem0_addr_b                  ),
+          .mem_addr_b1        (mem1_addr_b                  ),
+          .mem_addr_b2        (mem2_addr_b                  ),
+          .mem_addr_b3        (mem3_addr_b                  )
 );
 
+
+
+sky130_sram_2kbyte_1rw1r_32x512_8 u_sram0_2kb(
+`ifdef USE_POWER_PINS
+          .vccd1              (vccd1                        ),// User area 1 1.8V supply
+          .vssd1              (vssd1                        ),// User area 1 digital ground
+`endif
+// Port 0: RW
+          .clk0               (mem_clk_a[0]                 ),
+          .csb0               (mem_cen_a[0]                 ),
+          .web0               (mem_web_a[0]                 ),
+          .wmask0             (mem0_mask_a                  ),
+          .addr0              (mem0_addr_a                  ),
+          .din0               (mem0_din_a                   ),
+          .dout0              (mem0_dout_a                  ),
+// Port 1: R
+          .clk1               (mem_clk_b[0]                 ),
+          .csb1               (mem_cen_b[0]                 ),
+          .addr1              (mem0_addr_b                  ),
+          .dout1              (                             )
+  );
 sky130_sram_2kbyte_1rw1r_32x512_8 u_sram1_2kb(
 `ifdef USE_POWER_PINS
-    .vccd1 (vccd1),// User area 1 1.8V supply
-    .vssd1 (vssd1),// User area 1 digital ground
+          .vccd1              (vccd1                        ),// User area 1 1.8V supply
+          .vssd1              (vssd1                        ),// User area 1 digital ground
 `endif
 // Port 0: RW
-    .clk0     (mem1_clk_b),
-    .csb0     (mem1_cen_b),
-    .web0     (mem1_web_b),
-    .wmask0   (mem1_mask_b),
-    .addr0    (mem1_addr_b),
-    .din0     (mem1_din_b),
-    .dout0    (),
+          .clk0               (mem_clk_a[1]                 ),
+          .csb0               (mem_cen_a[1]                 ),
+          .web0               (mem_web_a[1]                 ),
+          .wmask0             (mem1_mask_a                  ),
+          .addr0              (mem1_addr_a                  ),
+          .din0               (mem1_din_a                   ),
+          .dout0              (mem1_dout_a                  ),
 // Port 1: R
-    .clk1     (mem1_clk_a),
-    .csb1     (mem1_cen_a),
-    .addr1    (mem1_addr_a),
-    .dout1    (mem1_dout_a)
+          .clk1               (mem_clk_b[1]                 ),
+          .csb1               (mem_cen_b[1]                 ),
+          .addr1              (mem1_addr_b                  ),
+          .dout1              (                             )
   );
-
-//------------- MBIST2 - 512x32             ----
-
-mbist_top1  #(
-	`ifndef SYNTHESIS
-        .SCW                    (SCW),   // SCAN CHAIN WIDTH
-	.BIST_ADDR_WD           (BIST1_ADDR_WD-2        ),
-	.BIST_DATA_WD           (BIST_DATA_WD           ),
-	.BIST_ADDR_START        (9'h000                 ),
-	.BIST_ADDR_END          (9'h1FB                 ),
-	.BIST_REPAIR_ADDR_START (9'h1FC                 ),
-	.BIST_RAD_WD_I          (BIST1_ADDR_WD-2        ),
-	.BIST_RAD_WD_O          (BIST1_ADDR_WD-2        )
-        `endif
-     ) 
-	     u_mbist2 (
-`ifdef USE_POWER_PINS
-       .vccd1                  (vccd1                     ),// User area 1 1.8V supply
-       .vssd1                  (vssd1                     ),// User area 1 digital ground
-`endif
-       // SCAN I/F
-       .scan_en                (scan_en_mbist3    ),
-       .scan_mode              (scan_mode_mbist3  ),
-       .scan_si                (scan_out_mbist3    ),
-
-       .scan_en_o              (scan_en_mbist2    ),
-       .scan_mode_o            (scan_mode_mbist2  ),
-       .scan_so                (scan_out_mbist2   ),
-
-       .cfg_mem_lphase         (cfg_mem_lphase    ),
-
-     // Clock Skew adjust
-	.wbd_clk_int          (wbd_clk_mbist2_int), 
-	.cfg_cska_mbist       (cfg_cska_mbist2  ), 
-	.wbd_clk_mbist        (wbd_clk_mbist2   ),
-
-	// WB I/F
-        .wb_clk_i             (wbd_clk_mbist2  ),  
-        .wb_cyc_i             (wbd_mbist2_cyc_o),  
-        .wb_stb_i             (wbd_mbist2_stb_o),  
-        .wb_adr_i             (wbd_mbist2_adr_o[BIST1_ADDR_WD-1:2]),  
-        .wb_we_i              (wbd_mbist2_we_o ),  
-        .wb_dat_i             (wbd_mbist2_dat_o),  
-        .wb_sel_i             (wbd_mbist2_sel_o),  
-        .wb_dat_o             (wbd_mbist2_dat_i),  
-        .wb_ack_o             (wbd_mbist2_ack_i),  
-        .wb_err_o             (    ), 
-
-	.rst_n                  (bist_rst_n            ),
-
-	
-	.bist_en                (bist_en_int[1]     ),
-	.bist_run               (bist_run_int[1]    ),
-	.bist_shift             (bist_shift_int[1]  ),
-	.bist_load              (bist_load_int[1]   ),
-	.bist_sdi               (bist_sdi_int[1]    ),
-
-	.bist_error_cnt         (bist_error_cnt1    ),
-	.bist_correct           (bist_correct[1]    ),
-	.bist_error             (bist_error[1]      ),
-	.bist_done              (bist_done[1]       ),
-	.bist_sdo               (bist_sdo[1]        ),
-
-     // towards memory
-     // PORT-A
-        .mem_clk_a            (mem2_clk_a        ),
-        .mem_addr_a           (mem2_addr_a       ),
-        .mem_cen_a            (mem2_cen_a        ),
-        .mem_dout_a           (mem2_dout_a       ),
-     // PORT-B
-        .mem_clk_b            (mem2_clk_b        ),
-        .mem_cen_b            (mem2_cen_b        ),
-        .mem_web_b            (mem2_web_b        ),
-        .mem_mask_b           (mem2_mask_b       ),
-        .mem_addr_b           (mem2_addr_b       ),
-        .mem_din_b            (mem2_din_b        )
-
-
-);
-
 sky130_sram_2kbyte_1rw1r_32x512_8 u_sram2_2kb(
 `ifdef USE_POWER_PINS
-    .vccd1 (vccd1),// User area 1 1.8V supply
-    .vssd1 (vssd1),// User area 1 digital ground
+          .vccd1              (vccd1                        ),// User area 1 1.8V supply
+          .vssd1              (vssd1                        ),// User area 1 digital ground
 `endif
 // Port 0: RW
-    .clk0     (mem2_clk_b),
-    .csb0     (mem2_cen_b),
-    .web0     (mem2_web_b),
-    .wmask0   (mem2_mask_b),
-    .addr0    (mem2_addr_b),
-    .din0     (mem2_din_b),
-    .dout0    (),
+          .clk0               (mem_clk_a[2]                 ),
+          .csb0               (mem_cen_a[2]                 ),
+          .web0               (mem_web_a[2]                 ),
+          .wmask0             (mem2_mask_a                  ),
+          .addr0              (mem2_addr_a                  ),
+          .din0               (mem2_din_a                   ),
+          .dout0              (mem2_dout_a                  ),
 // Port 1: R
-    .clk1     (mem2_clk_a),
-    .csb1     (mem2_cen_a),
-    .addr1    (mem2_addr_a),
-    .dout1    (mem2_dout_a)
+          .clk1               (mem_clk_b[2]                 ),
+          .csb1               (mem_cen_b[2]                 ),
+          .addr1              (mem2_addr_b                  ),
+          .dout1              (                             )
   );
-
-//------------- MBIST3 - 512x32             ----
-
-mbist_top1  #(
-	`ifndef SYNTHESIS
-        .SCW                    (SCW),   // SCAN CHAIN WIDTH
-	.BIST_ADDR_WD           (BIST1_ADDR_WD-2        ),
-	.BIST_DATA_WD           (BIST_DATA_WD           ),
-	.BIST_ADDR_START        (9'h000                 ),
-	.BIST_ADDR_END          (9'h1FB                 ),
-	.BIST_REPAIR_ADDR_START (9'h1FC                 ),
-	.BIST_RAD_WD_I          (BIST1_ADDR_WD-2        ),
-	.BIST_RAD_WD_O          (BIST1_ADDR_WD-2        )
-        `endif
-     ) 
-	     u_mbist3 (
-
-`ifdef USE_POWER_PINS
-       .vccd1                  (vccd1                     ),// User area 1 1.8V supply
-       .vssd1                  (vssd1                     ),// User area 1 digital ground
-`endif
-       // SCAN I/F
-       .scan_en                (scan_en_mbist4    ),
-       .scan_mode              (scan_mode_mbist4  ),
-       .scan_si                (scan_out_mbist4    ),
-
-       .scan_en_o              (scan_en_mbist3    ),
-       .scan_mode_o            (scan_mode_mbist3  ),
-       .scan_so                (scan_out_mbist3   ),
-
-       .cfg_mem_lphase         (cfg_mem_lphase    ),
-
-     // Clock Skew adjust
-	.wbd_clk_int          (wbd_clk_mbist3_int      ), 
-	.cfg_cska_mbist       (cfg_cska_mbist3  ), 
-	.wbd_clk_mbist        (wbd_clk_mbist3   ),
-
-	// WB I/F
-        .wb_clk_i             (wbd_clk_mbist3  ),  
-        .wb_cyc_i             (wbd_mbist3_cyc_o),  
-        .wb_stb_i             (wbd_mbist3_stb_o),  
-        .wb_adr_i             (wbd_mbist3_adr_o[BIST1_ADDR_WD-1:2]),  
-        .wb_we_i              (wbd_mbist3_we_o ),  
-        .wb_dat_i             (wbd_mbist3_dat_o),  
-        .wb_sel_i             (wbd_mbist3_sel_o),  
-        .wb_dat_o             (wbd_mbist3_dat_i),  
-        .wb_ack_o             (wbd_mbist3_ack_i),  
-        .wb_err_o             (    ), 
-
-	.rst_n                (bist_rst_n       ),
-
-	
-	.bist_en              (bist_en_int[2]   ),
-	.bist_run             (bist_run_int[2]  ),
-	.bist_shift           (bist_shift_int[2]),
-	.bist_load            (bist_load_int[2] ),
-	.bist_sdi             (bist_sdi_int[2]  ),
-
-	.bist_error_cnt       (bist_error_cnt2  ),
-	.bist_correct         (bist_correct[2]  ),
-	.bist_error           (bist_error[2]    ),
-	.bist_done            (bist_done[2]     ),
-	.bist_sdo             (bist_sdo[2]      ),
-
-     // towards memory
-     // PORT-A
-        .mem_clk_a            (mem3_clk_a        ),
-        .mem_addr_a           (mem3_addr_a       ),
-        .mem_cen_a            (mem3_cen_a        ),
-        .mem_dout_a           (mem3_dout_a       ),
-     // PORT-B
-        .mem_clk_b            (mem3_clk_b        ),
-        .mem_cen_b            (mem3_cen_b        ),
-        .mem_web_b            (mem3_web_b        ),
-        .mem_mask_b           (mem3_mask_b       ),
-        .mem_addr_b           (mem3_addr_b       ),
-        .mem_din_b            (mem3_din_b        )
-
-
-);
-
 sky130_sram_2kbyte_1rw1r_32x512_8 u_sram3_2kb(
 `ifdef USE_POWER_PINS
-    .vccd1 (vccd1),// User area 1 1.8V supply
-    .vssd1 (vssd1),// User area 1 digital ground
+          .vccd1              (vccd1                        ),// User area 1 1.8V supply
+          .vssd1              (vssd1                        ),// User area 1 digital ground
 `endif
 // Port 0: RW
-    .clk0     (mem3_clk_b),
-    .csb0     (mem3_cen_b),
-    .web0     (mem3_web_b),
-    .wmask0   (mem3_mask_b),
-    .addr0    (mem3_addr_b),
-    .din0     (mem3_din_b),
-    .dout0    (),
+          .clk0               (mem_clk_a[3]                 ),
+          .csb0               (mem_cen_a[3]                 ),
+          .web0               (mem_web_a[3]                 ),
+          .wmask0             (mem3_mask_a                  ),
+          .addr0              (mem3_addr_a                  ),
+          .din0               (mem3_din_a                   ),
+          .dout0              (mem3_dout_a                  ),
 // Port 1: R
-    .clk1     (mem3_clk_a),
-    .csb1     (mem3_cen_a),
-    .addr1    (mem3_addr_a),
-    .dout1    (mem3_dout_a)
+          .clk1               (mem_clk_b[3]                 ),
+          .csb1               (mem_cen_b[3]                 ),
+          .addr1              (mem3_addr_b                  ),
+          .dout1              (                             )
   );
 
-//------------- MBIST4 - 512x32             ----
 
-mbist_top1  #(
-	`ifndef SYNTHESIS
-        .SCW                    (SCW),   // SCAN CHAIN WIDTH
-	.BIST_ADDR_WD           (BIST1_ADDR_WD-2        ),
-	.BIST_DATA_WD           (BIST_DATA_WD           ),
-	.BIST_ADDR_START        (9'h000                 ),
-	.BIST_ADDR_END          (9'h1FB                 ),
-	.BIST_REPAIR_ADDR_START (9'h1FC                 ),
-	.BIST_RAD_WD_I          (BIST1_ADDR_WD-2        ),
-	.BIST_RAD_WD_O          (BIST1_ADDR_WD-2        )
-        `endif
-     ) 
-	     u_mbist4 (
-`ifdef USE_POWER_PINS
-       .vccd1                  (vccd1                     ),// User area 1 1.8V supply
-       .vssd1                  (vssd1                     ),// User area 1 digital ground
-`endif
-       // SCAN I/F
-       .scan_en                (scan_en_wbi       ),
-       .scan_mode              (scan_mode_wbi     ),
-       .scan_si                (scan_out_wbi       ),
+mac_wrapper u_mac_wrap(
 
-       .scan_en_o              (scan_en_mbist4    ),
-       .scan_mode_o            (scan_mode_mbist4  ),
-       .scan_so                (scan_out_mbist4   ),
+          .app_clk            (wbd_clk_mac_skew   ),
+          .reset_n            (mac_rst_n          ),
 
-       .cfg_mem_lphase         (cfg_mem_lphase    ),
+    // Clock Skeq Adjust
+          .wbd_clk_int        (wbd_clk_mac_rp     ),
+          .wbd_clk_skew       (wbd_clk_mac_skew   ),  
+          .cfg_cska_mac       (cfg_cska_mac       ),
 
-     // Clock Skew adjust
-	.wbd_clk_int          (wbd_clk_mbist4_int      ), 
-	.cfg_cska_mbist       (cfg_cska_mbist4  ), 
-	.wbd_clk_mbist        (wbd_clk_mbist4   ),
+          //-----------------------------------------------------------------------
+          // MAC Line-Tx Signal
+          //-----------------------------------------------------------------------
+          .phy_tx_en          (mac_tx_en          ),
+          .phy_tx_er          (mac_tx_er          ),
+          .phy_txd            (mac_txd            ),
+          .phy_tx_clk         (mac_tx_clk         ),
+                   
+          //-----------------------------------------------------------------------
+          // MAC Line-Rx Signal
+          //-----------------------------------------------------------------------
+          .phy_rx_clk         (mac_rx_clk         ),
+          .phy_rx_er          (mac_rx_er          ),
+          .phy_rx_dv          (mac_rx_dv          ),
+          .phy_rxd            (mac_rxd            ),
+          .phy_crs            (mac_crs            ),
+                   
+                   
+          //-----------------------------------------------------------------------
+          // MAC MDIO Signal
+          //-----------------------------------------------------------------------
+          .mdio_clk           (mdio_clk           ),
+          .mdio_in            (mdio_in            ),
+          .mdio_out_en        (mdio_out_en        ),
+          .mdio_out           (mdio_out           ),
 
-	// WB I/F
-        .wb_clk_i             (wbd_clk_mbist4  ),  
-        .wb_cyc_i             (wbd_mbist4_cyc_o),  
-        .wb_stb_i             (wbd_mbist4_stb_o),  
-        .wb_adr_i             (wbd_mbist4_adr_o[BIST1_ADDR_WD-1:2]),  
-        .wb_we_i              (wbd_mbist4_we_o ),  
-        .wb_dat_i             (wbd_mbist4_dat_o),  
-        .wb_sel_i             (wbd_mbist4_sel_o),  
-        .wb_dat_o             (wbd_mbist4_dat_i),  
-        .wb_ack_o             (wbd_mbist4_ack_i),  
-        .wb_err_o             (    ), 
+          //--------------------------------------------
+          // GMAC TX WB Master I/F
+          //--------------------------------------------
+          .wbm_gtx_dat_i      (wbm_gtx_dat_i      ),
+          .wbm_gtx_ack_i      (wbm_gtx_ack_i      ),
+          .wbm_gtx_dat_o      (wbm_gtx_dat_o      ),
+          .wbm_gtx_adr_o      (wbm_gtx_adr_o      ),
+          .wbm_gtx_sel_o      (wbm_gtx_sel_o      ),
+          .wbm_gtx_we_o       (wbm_gtx_we_o       ),
+          .wbm_gtx_stb_o      (wbm_gtx_stb_o      ),
+          .wbm_gtx_cyc_o      (wbm_gtx_cyc_o      ),
+                
+          //--------------------------------------------
+          // GMAC RX WB Master I/F
+          //--------------------------------------------
+          .wbm_grx_dat_i      (wbm_grx_dat_i      ),
+          .wbm_grx_ack_i      (wbm_grx_ack_i      ),
+          .wbm_grx_dat_o      (wbm_grx_dat_o      ),
+          .wbm_grx_adr_o      (wbm_grx_adr_o      ),
+          .wbm_grx_sel_o      (wbm_grx_sel_o      ),
+          .wbm_grx_we_o       (wbm_grx_we_o       ),
+          .wbm_grx_stb_o      (wbm_grx_stb_o      ),
+          .wbm_grx_cyc_o      (wbm_grx_cyc_o      ),
+                
+          //--------------------------------------------
+          // GMAC REG WB SLAVE I/F
+          //--------------------------------------------
+          .wbs_grg_dat_o      (wbs_grg_dat_o      ),
+          .wbs_grg_ack_o      (wbs_grg_ack_o      ),
+          .wbs_grg_dat_i      (wbs_grg_dat_i      ),
+          .wbs_grg_adr_i      (wbs_grg_adr_i      ),
+          .wbs_grg_sel_i      (wbs_grg_sel_i      ),
+          .wbs_grg_we_i       (wbs_grg_we_i       ),
+          .wbs_grg_stb_i      (wbs_grg_stb_i      ),
+          .wbs_grg_cyc_i      (wbs_grg_cyc_i      ),
+                   
+          // Q Occupancy
+          .cfg_tx_qbase_addr  (mac_tx_qbase_addr  ) ,
+          .cfg_rx_qbase_addr  (mac_rx_qbase_addr  ) ,
 
-	.rst_n                  (bist_rst_n            ),
+          .mac_tx_qcnt_inc    (mac_tx_qcnt_inc    ),
+          .mac_tx_qcnt_dec    (mac_tx_qcnt_dec    ),
+          .mac_rx_qcnt_inc    (mac_rx_qcnt_inc    ),  
+          .mac_rx_qcnt_dec    (mac_rx_qcnt_dec    )       
 
-	
-	.bist_en                (bist_en_int[3]        ),
-	.bist_run               (bist_run_int[3]       ),
-	.bist_shift             (bist_shift_int[3]     ),
-	.bist_load              (bist_load_int[3]      ),
-	.bist_sdi               (bist_sdi_int[3]       ),
-
-	.bist_error_cnt         (bist_error_cnt3       ),
-	.bist_correct           (bist_correct[3]       ),
-	.bist_error             (bist_error[3]         ),
-	.bist_done              (bist_done[3]          ),
-	.bist_sdo               (bist_sdo[3]           ),
-
-     // towards memory
-     // PORT-A
-        .mem_clk_a            (mem4_clk_a        ),
-        .mem_addr_a           (mem4_addr_a       ),
-        .mem_cen_a            (mem4_cen_a        ),
-        .mem_dout_a           (mem4_dout_a       ),
-     // PORT-B
-        .mem_clk_b            (mem4_clk_b        ),
-        .mem_cen_b            (mem4_cen_b        ),
-        .mem_web_b            (mem4_web_b        ),
-        .mem_mask_b           (mem4_mask_b       ),
-        .mem_addr_b           (mem4_addr_b       ),
-        .mem_din_b            (mem4_din_b        )
+       );
 
 
-);
-
-sky130_sram_2kbyte_1rw1r_32x512_8 u_sram4_2kb(
-`ifdef USE_POWER_PINS
-    .vccd1 (vccd1),// User area 1 1.8V supply
-    .vssd1 (vssd1),// User area 1 digital ground
-`endif
-// Port 0: RW
-    .clk0     (mem4_clk_b),
-    .csb0     (mem4_cen_b),
-    .web0     (mem4_web_b),
-    .wmask0   (mem4_mask_b),
-    .addr0    (mem4_addr_b),
-    .din0     (mem4_din_b),
-    .dout0    (),
-// Port 1: R
-    .clk1     (mem4_clk_a),
-    .csb1     (mem4_cen_a),
-    .addr1    (mem4_addr_a),
-    .dout1    (mem4_dout_a)
-  );
-
-//------------- MBIST5 - 256x32             ----
-
-mbist_top2  #(
-	`ifndef SYNTHESIS
-        .SCW                    (SCW),   // SCAN CHAIN WIDTH
-	.BIST_ADDR_WD           (BIST2_ADDR_WD-2        ),
-	.BIST_DATA_WD           (BIST_DATA_WD           ),
-	.BIST_ADDR_START        (8'h00                  ),
-	.BIST_ADDR_END          (8'hFB                  ),
-	.BIST_REPAIR_ADDR_START (8'hFC                  ),
-	.BIST_RAD_WD_I          (BIST2_ADDR_WD-2        ),
-	.BIST_RAD_WD_O          (BIST2_ADDR_WD-2        )
-        `endif
-     ) 
-	     u_mbist5 (
-`ifdef USE_POWER_PINS
-       .vccd1                  (vccd1                     ),// User area 1 1.8V supply
-       .vssd1                  (vssd1                     ),// User area 1 digital ground
-`endif
-       // SCAN I/F
-       .scan_en                (scan_en_glbl      ),
-       .scan_mode              (scan_mode_glbl    ),
-       .scan_si                (scan_out_glbl      ),
-
-       .scan_en_o              (scan_en_mbist5    ),
-       .scan_mode_o            (scan_mode_mbist5  ),
-       .scan_so                (scan_out_mbist5   ),
-
-       .cfg_mem_lphase         (cfg_mem_lphase    ),
-
-     // Clock Skew adjust
-	.wbd_clk_int          (wbd_clk_mbist5_int      ), 
-	.cfg_cska_mbist       (cfg_cska_mbist5  ), 
-	.wbd_clk_mbist        (wbd_clk_mbist5   ),
-
-	// WB I/F
-        .wb_clk_i             (wbd_clk_mbist5  ),  
-        .wb_cyc_i             (wbd_mbist5_cyc_o),  
-        .wb_stb_i             (wbd_mbist5_stb_o),  
-        .wb_adr_i             (wbd_mbist5_adr_o[BIST2_ADDR_WD-1:2]),  
-        .wb_we_i              (wbd_mbist5_we_o ),  
-        .wb_dat_i             (wbd_mbist5_dat_o),  
-        .wb_sel_i             (wbd_mbist5_sel_o),  
-        .wb_dat_o             (wbd_mbist5_dat_i),  
-        .wb_ack_o             (wbd_mbist5_ack_i),  
-        .wb_err_o             (    ), 
-
-	.rst_n                (bist_rst_n       ),
-
-	
-	.bist_en              (bist_en_int[4]   ),
-	.bist_run             (bist_run_int[4]  ),
-	.bist_shift           (bist_shift_int[4]),
-	.bist_load            (bist_load_int[4] ),
-	.bist_sdi             (bist_sdi_int[4]  ),
-
-	.bist_error_cnt       (bist_error_cnt4  ),
-	.bist_correct         (bist_correct[4]  ),
-	.bist_error           (bist_error[4]    ),
-	.bist_done            (bist_done[4]     ),
-	.bist_sdo             (bist_sdo[4]      ),
-
-
-     // towards memory
-     // PORT-A
-        .mem_clk_a            (mem5_clk_a        ),
-        .mem_addr_a           (mem5_addr_a       ),
-        .mem_cen_a            (mem5_cen_a        ),
-        .mem_dout_a           (mem5_dout_a       ),
-     // PORT-B
-        .mem_clk_b            (mem5_clk_b        ),
-        .mem_cen_b            (mem5_cen_b        ),
-        .mem_web_b            (mem5_web_b        ),
-        .mem_mask_b           (mem5_mask_b       ),
-        .mem_addr_b           (mem5_addr_b       ),
-        .mem_din_b            (mem5_din_b        )
-
-
-);
-
-sky130_sram_1kbyte_1rw1r_32x256_8 u_sram5_1kb(
-`ifdef USE_POWER_PINS
-    .vccd1 (vccd1),// User area 1 1.8V supply
-    .vssd1 (vssd1),// User area 1 digital ground
-`endif
-// Port 0: RW
-    .clk0     (mem5_clk_b),
-    .csb0     (mem5_cen_b),
-    .web0     (mem5_web_b),
-    .wmask0   (mem5_mask_b),
-    .addr0    (mem5_addr_b),
-    .din0     (mem5_din_b),
-    .dout0    (),
-// Port 1: R
-    .clk1     (mem5_clk_a),
-    .csb1     (mem5_cen_a),
-    .addr1    (mem5_addr_a),
-    .dout1    (mem5_dout_a)
-  );
-
-//------------- MBIST6 - 256x32             ----
-
-mbist_top2  #(
-	`ifndef SYNTHESIS
-        .SCW                    (SCW),   // SCAN CHAIN WIDTH
-	.BIST_ADDR_WD           (BIST2_ADDR_WD-2        ),
-	.BIST_DATA_WD           (BIST_DATA_WD           ),
-	.BIST_ADDR_START        (8'h00                  ),
-	.BIST_ADDR_END          (8'hFB                  ),
-	.BIST_REPAIR_ADDR_START (8'hFC                  ),
-	.BIST_RAD_WD_I          (BIST2_ADDR_WD-2        ),
-	.BIST_RAD_WD_O          (BIST2_ADDR_WD-2        )
-        `endif
-     ) 
-	     u_mbist6 (
-`ifdef USE_POWER_PINS
-       .vccd1                  (vccd1                     ),// User area 1 1.8V supply
-       .vssd1                  (vssd1                     ),// User area 1 digital ground
-`endif
-       // SCAN I/F
-       .scan_en                (scan_en_mbist5      ),
-       .scan_mode              (scan_mode_mbist5    ),
-       .scan_si                (scan_out_mbist5      ),
-
-       .scan_en_o              (scan_en_mbist6    ),
-       .scan_mode_o            (scan_mode_mbist6  ),
-       .scan_so                (scan_out_mbist6   ),
-
-       .cfg_mem_lphase         (cfg_mem_lphase    ),
-
-     // Clock Skew adjust
-	.wbd_clk_int          (wbd_clk_mbist6_int      ), 
-	.cfg_cska_mbist       (cfg_cska_mbist6  ), 
-	.wbd_clk_mbist        (wbd_clk_mbist6   ),
-
-	// WB I/F
-        .wb_clk_i             (wbd_clk_mbist6  ),  
-        .wb_cyc_i             (wbd_mbist6_cyc_o),  
-        .wb_stb_i             (wbd_mbist6_stb_o),  
-        .wb_adr_i             (wbd_mbist6_adr_o[BIST2_ADDR_WD-1:2]),  
-        .wb_we_i              (wbd_mbist6_we_o ),  
-        .wb_dat_i             (wbd_mbist6_dat_o),  
-        .wb_sel_i             (wbd_mbist6_sel_o),  
-        .wb_dat_o             (wbd_mbist6_dat_i),  
-        .wb_ack_o             (wbd_mbist6_ack_i),  
-        .wb_err_o             (    ), 
-
-	.rst_n                (bist_rst_n       ),
-
-	
-	.bist_en              (bist_en_int[5]   ),
-	.bist_run             (bist_run_int[5]  ),
-	.bist_shift           (bist_shift_int[5]),
-	.bist_load            (bist_load_int[5] ),
-	.bist_sdi             (bist_sdi_int[5]  ),
-
-	.bist_error_cnt       (bist_error_cnt5  ),
-	.bist_correct         (bist_correct[5]  ),
-	.bist_error           (bist_error[5]    ),
-	.bist_done            (bist_done[5]     ),
-	.bist_sdo             (bist_sdo[5]      ),
-
-     // towards memory
-     // PORT-A
-        .mem_clk_a            (mem6_clk_a        ),
-        .mem_addr_a           (mem6_addr_a       ),
-        .mem_cen_a            (mem6_cen_a        ),
-        .mem_dout_a           (mem6_dout_a       ),
-     // PORT-B
-        .mem_clk_b            (mem6_clk_b        ),
-        .mem_cen_b            (mem6_cen_b        ),
-        .mem_web_b            (mem6_web_b        ),
-        .mem_mask_b           (mem6_mask_b       ),
-        .mem_addr_b           (mem6_addr_b       ),
-        .mem_din_b            (mem6_din_b        )
-
-
-);
-
-sky130_sram_1kbyte_1rw1r_32x256_8 u_sram6_1kb(
-`ifdef USE_POWER_PINS
-    .vccd1 (vccd1),// User area 1 1.8V supply
-    .vssd1 (vssd1),// User area 1 digital ground
-`endif
-// Port 0: RW
-    .clk0     (mem6_clk_b),
-    .csb0     (mem6_cen_b),
-    .web0     (mem6_web_b),
-    .wmask0   (mem6_mask_b),
-    .addr0    (mem6_addr_b),
-    .din0     (mem6_din_b),
-    .dout0    (),
-// Port 1: R
-    .clk1     (mem6_clk_a),
-    .csb1     (mem6_cen_a),
-    .addr1    (mem6_addr_a),
-    .dout1    (mem6_dout_a)
-  );
-//------------- MBIST7 - 256x32             ----
-
-mbist_top2  #(
-	`ifndef SYNTHESIS
-        .SCW                    (SCW),   // SCAN CHAIN WIDTH
-	.BIST_ADDR_WD           (BIST2_ADDR_WD-2        ),
-	.BIST_DATA_WD           (BIST_DATA_WD           ),
-	.BIST_ADDR_START        (8'h00                  ),
-	.BIST_ADDR_END          (8'hFB                  ),
-	.BIST_REPAIR_ADDR_START (8'hFC                  ),
-	.BIST_RAD_WD_I          (BIST2_ADDR_WD-2        ),
-	.BIST_RAD_WD_O          (BIST2_ADDR_WD-2        )
-        `endif
-     ) 
-	     u_mbist7 (
-`ifdef USE_POWER_PINS
-       .vccd1                  (vccd1                     ),// User area 1 1.8V supply
-       .vssd1                  (vssd1                     ),// User area 1 digital ground
-`endif
-       // SCAN I/F
-       .scan_en                (scan_en_mbist6      ),
-       .scan_mode              (scan_mode_mbist6    ),
-       .scan_si                (scan_out_mbist6      ),
-
-       .scan_en_o              (scan_en_mbist7    ),
-       .scan_mode_o            (scan_mode_mbist7  ),
-       .scan_so                (scan_out_mbist7   ),
-
-       .cfg_mem_lphase         (cfg_mem_lphase    ),
-     // Clock Skew adjust
-	.wbd_clk_int          (wbd_clk_mbist7_int      ), 
-	.cfg_cska_mbist       (cfg_cska_mbist7  ), 
-	.wbd_clk_mbist        (wbd_clk_mbist7   ),
-
-	// WB I/F
-        .wb_clk_i             (wbd_clk_mbist7  ),  
-        .wb_cyc_i             (wbd_mbist7_cyc_o),  
-        .wb_stb_i             (wbd_mbist7_stb_o),  
-        .wb_adr_i             (wbd_mbist7_adr_o[BIST2_ADDR_WD-1:2]),  
-        .wb_we_i              (wbd_mbist7_we_o ),  
-        .wb_dat_i             (wbd_mbist7_dat_o),  
-        .wb_sel_i             (wbd_mbist7_sel_o),  
-        .wb_dat_o             (wbd_mbist7_dat_i),  
-        .wb_ack_o             (wbd_mbist7_ack_i),  
-        .wb_err_o             (    ), 
-
-	.rst_n                (bist_rst_n       ),
-
-	
-	.bist_en              (bist_en_int[6]   ),
-	.bist_run             (bist_run_int[6]  ),
-	.bist_shift           (bist_shift_int[6]),
-	.bist_load            (bist_load_int[6] ),
-	.bist_sdi             (bist_sdi_int[6]  ),
-
-	.bist_error_cnt       (bist_error_cnt6  ),
-	.bist_correct         (bist_correct[6]  ),
-	.bist_error           (bist_error[6]    ),
-	.bist_done            (bist_done[6]     ),
-	.bist_sdo             (bist_sdo[6]      ),
-
-
-     // towards memory
-     // PORT-A
-        .mem_clk_a            (mem7_clk_a        ),
-        .mem_addr_a           (mem7_addr_a       ),
-        .mem_cen_a            (mem7_cen_a        ),
-        .mem_dout_a           (mem7_dout_a       ),
-     // PORT-B
-        .mem_clk_b            (mem7_clk_b        ),
-        .mem_cen_b            (mem7_cen_b        ),
-        .mem_web_b            (mem7_web_b        ),
-        .mem_mask_b           (mem7_mask_b       ),
-        .mem_addr_b           (mem7_addr_b       ),
-        .mem_din_b            (mem7_din_b        )
-
-
-);
-
-sky130_sram_1kbyte_1rw1r_32x256_8 u_sram7_1kb(
-`ifdef USE_POWER_PINS
-    .vccd1 (vccd1),// User area 1 1.8V supply
-    .vssd1 (vssd1),// User area 1 digital ground
-`endif
-// Port 0: RW
-    .clk0     (mem7_clk_b),
-    .csb0     (mem7_cen_b),
-    .web0     (mem7_web_b),
-    .wmask0   (mem7_mask_b),
-    .addr0    (mem7_addr_b),
-    .din0     (mem7_din_b),
-    .dout0    (),
-// Port 1: R
-    .clk1     (mem7_clk_a),
-    .csb1     (mem7_cen_a),
-    .addr1    (mem7_addr_a),
-    .dout1    (mem7_dout_a)
-  );
-
-//------------- MBIST6 - 256x32             ----
-
-mbist_top2  #(
-	`ifndef SYNTHESIS
-        .SCW                    (SCW),   // SCAN CHAIN WIDTH
-	.BIST_ADDR_WD           (BIST2_ADDR_WD-2        ),
-	.BIST_DATA_WD           (BIST_DATA_WD           ),
-	.BIST_ADDR_START        (8'h00                  ),
-	.BIST_ADDR_END          (8'hFB                  ),
-	.BIST_REPAIR_ADDR_START (8'hFC                  ),
-	.BIST_RAD_WD_I          (BIST2_ADDR_WD-2        ),
-	.BIST_RAD_WD_O          (BIST2_ADDR_WD-2        )
-        `endif
-     ) 
-	     u_mbist8 (
-`ifdef USE_POWER_PINS
-       .vccd1                  (vccd1                     ),// User area 1 1.8V supply
-       .vssd1                  (vssd1                     ),// User area 1 digital ground
-`endif
-       // SCAN I/F
-       .scan_en                (scan_en_mbist7      ),
-       .scan_mode              (scan_mode_mbist7    ),
-       .scan_si                (scan_out_mbist7      ),
-
-       .scan_en_o              (scan_en_mbist8    ),
-       .scan_mode_o            (scan_mode_mbist8  ),
-       .scan_so                (scan_out_mbist8   ),
-
-       .cfg_mem_lphase         (cfg_mem_lphase    ),
-
-     // Clock Skew adjust
-	.wbd_clk_int          (wbd_clk_mbist8_int), 
-	.cfg_cska_mbist       (cfg_cska_mbist8  ), 
-	.wbd_clk_mbist        (wbd_clk_mbist8   ),
-
-	// WB I/F
-        .wb_clk_i             (wbd_clk_mbist8  ),  
-        .wb_cyc_i             (wbd_mbist8_cyc_o),  
-        .wb_stb_i             (wbd_mbist8_stb_o),  
-        .wb_adr_i             (wbd_mbist8_adr_o[BIST2_ADDR_WD-1:2]),  
-        .wb_we_i              (wbd_mbist8_we_o ),  
-        .wb_dat_i             (wbd_mbist8_dat_o),  
-        .wb_sel_i             (wbd_mbist8_sel_o),  
-        .wb_dat_o             (wbd_mbist8_dat_i),  
-        .wb_ack_o             (wbd_mbist8_ack_i),  
-        .wb_err_o             (    ), 
-
-	.rst_n                (bist_rst_n       ),
-
-	
-	.bist_en              (bist_en_int[7]   ),
-	.bist_run             (bist_run_int[7]  ),
-	.bist_shift           (bist_shift_int[7]),
-	.bist_load            (bist_load_int[7] ),
-	.bist_sdi             (bist_sdi_int[7]  ),
-
-	.bist_error_cnt       (bist_error_cnt7  ),
-	.bist_correct         (bist_correct[7]  ),
-	.bist_error           (bist_error[7]    ),
-	.bist_done            (bist_done[7]     ),
-	.bist_sdo             (bist_sdo[7]      ),
-
-     // towards memory
-     // PORT-A
-        .mem_clk_a            (mem8_clk_a        ),
-        .mem_addr_a           (mem8_addr_a       ),
-        .mem_cen_a            (mem8_cen_a        ),
-        .mem_dout_a           (mem8_dout_a       ),
-     // PORT-B
-        .mem_clk_b            (mem8_clk_b        ),
-        .mem_cen_b            (mem8_cen_b        ),
-        .mem_web_b            (mem8_web_b        ),
-        .mem_mask_b           (mem8_mask_b       ),
-        .mem_addr_b           (mem8_addr_b       ),
-        .mem_din_b            (mem8_din_b        )
-
-
-);
-
-sky130_sram_1kbyte_1rw1r_32x256_8 u_sram8_1kb(
-`ifdef USE_POWER_PINS
-    .vccd1 (vccd1),// User area 1 1.8V supply
-    .vssd1 (vssd1),// User area 1 digital ground
-`endif
-// Port 0: RW
-    .clk0     (mem8_clk_b),
-    .csb0     (mem8_cen_b),
-    .web0     (mem8_web_b),
-    .wmask0   (mem8_mask_b),
-    .addr0    (mem8_addr_b),
-    .din0     (mem8_din_b),
-    .dout0    (),
-// Port 1: R
-    .clk1     (mem8_clk_a),
-    .csb1     (mem8_cen_a),
-    .addr1    (mem8_addr_a),
-    .dout1    (mem8_dout_a)
-  );
 
 endmodule	// user_project_wrapper
 
diff --git a/verilog/rtl/user_reg_map.v b/verilog/rtl/user_reg_map.v
index 0868a11..03b1efc 100644
--- a/verilog/rtl/user_reg_map.v
+++ b/verilog/rtl/user_reg_map.v
@@ -5,22 +5,19 @@
 `define ADDR_SPACE_WBHOST  32'h3008_0000
 `define ADDR_SPACE_LBIST   32'h300C_0000
 `define ADDR_SPACE_GLBL    32'h3000_0000
-`define ADDR_SPACE_MBIST1  32'h3000_1000
-`define ADDR_SPACE_MBIST2  32'h3000_2000
-`define ADDR_SPACE_MBIST3  32'h3000_3000
-`define ADDR_SPACE_MBIST4  32'h3000_4000
-`define ADDR_SPACE_MBIST5  32'h3000_5000
-`define ADDR_SPACE_MBIST6  32'h3000_6000
-`define ADDR_SPACE_MBIST7  32'h3000_7000
-`define ADDR_SPACE_MBIST8  32'h3000_8000
+`define ADDR_SPACE_MAC     32'h3000_1000
+`define ADDR_SPACE_SRAM0   32'h3000_2000
+`define ADDR_SPACE_SRAM1   32'h3000_2800
+`define ADDR_SPACE_SRAM2   32'h3000_3000
+`define ADDR_SPACE_SRAM3   32'h3000_3800
 
 //--------------------------------------------------
 //  WB Host Register
 //--------------------------------------------------
-`define WBHOST_GLBL_CFG           8'h00  // reg_0  - Global Config
-`define WBHOST_BANK_SEL           8'h04  // reg_1  - Bank Select
-`define WBHOST_CLK_CTRL1          8'h08  // reg_2  - Clock Control-1
-`define WBHOST_CLK_CTRL2          8'h0C  // reg_3  - Clock Control-2
+`define WBHOST_GLBL_CFG    8'h00  // reg_0  - Global Config
+`define WBHOST_BANK_SEL    8'h04  // reg_1  - Bank Select
+`define WBHOST_CLK_CTRL1   8'h08  // reg_2  - Clock Control-1
+`define WBHOST_CLK_CTRL2   8'h0C  // reg_3  - Clock Control-2
 
 //--------------------------------------------------
 //  LBIST Register
@@ -33,15 +30,14 @@
 //  GLBL Register
 //-------------------------------------------------
 
-`define GLBL_BIST_CTRL1  'h08    
-`define GLBL_BIST_CTRL2  'h0C
-`define GLBL_BIST_STAT1  'h10
-`define GLBL_BIST_STAT2  'h14
-`define GLBL_BIST_SWDATA 'h18
-`define GLBL_BIST_SRDATA 'h1C
-`define GLBL_BIST_SPDATA 'h20
-`define GLBL_BIST_SOFT1  'h24
-`define GLBL_BIST_SOFT2  'h28
-`define GLBL_BIST_SOFT3  'h2C
+`define GLBL_BIST_CTRL1    'h08    
+`define GLBL_BIST_CTRL2    'h0C
+`define GLBL_BIST_STAT     'h10
+`define GLBL_BIST_SWDATA   'h18
+`define GLBL_BIST_SRLDATA  'h1C
+`define GLBL_BIST_SRMDATA  'h20
+`define GLBL_BIST_SOFT1    'h24
+`define GLBL_BIST_SOFT2    'h28
+`define GLBL_BIST_SOFT3    'h2C
 
 
diff --git a/verilog/rtl/wb_host/src/wb_host.sv b/verilog/rtl/wb_host/src/wb_host.sv
index b9a8749..23591a9 100644
--- a/verilog/rtl/wb_host/src/wb_host.sv
+++ b/verilog/rtl/wb_host/src/wb_host.sv
@@ -88,6 +88,7 @@
 
        output logic                wbd_int_rst_n    ,
        output logic                bist_rst_n       ,
+       output logic                mac_rst_n        ,
 
     // Master Port
        input   logic               wbm_rst_i        ,  // Regular Reset signal
@@ -312,7 +313,7 @@
 wb_arb u_arb(
 	.clk      (wbm_clk_i), 
 	.rstn     (wbm_rst_n), 
-	.req      ({1'b0,wbm_uart_stb_i,(wbm_stb_i & wbm_cyc_i)}), 
+	.req      ({1'b0,1'b0,wbm_uart_stb_i,(wbm_stb_i & wbm_cyc_i)}), 
 	.gnt      (grnt)
         );
 
@@ -341,6 +342,7 @@
 // Reset bypass for scan mode
 ctech_mux2x1 u_wb_rst_scan_sel   (.A0 (cfg_glb_ctrl[0]), .A1 (scan_rst_n), .S  (scan_mode), .X  (wbd_int_rst_n));
 ctech_mux2x1 u_bist_rst_scan_sel (.A0 (cfg_glb_ctrl[1]), .A1 (scan_rst_n), .S  (scan_mode), .X  (bist_rst_n));
+ctech_mux2x1 u_mac_rst_scan_sel (.A0 (cfg_glb_ctrl[2]), .A1 (scan_rst_n), .S  (scan_mode), .X  (mac_rst_n));
 
 // wb_host clock skew control
 clk_skew_adjust u_skew_wh
diff --git a/verilog/rtl/wb_interconnect/src/wb_interconnect.sv b/verilog/rtl/wb_interconnect/src/wb_interconnect.sv
index 18fc86d..9279cc6 100644
--- a/verilog/rtl/wb_interconnect/src/wb_interconnect.sv
+++ b/verilog/rtl/wb_interconnect/src/wb_interconnect.sv
@@ -13,7 +13,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 // SPDX-License-Identifier: Apache-2.0
-// SPDX-FileContributor: Created by Dinesh Annayya <dinesha@opencores.org>
+// SPDX-FileContributor: Created by Dinesh Annayya <dinesh.annayya@gmail.com>
 //
 //////////////////////////////////////////////////////////////////////
 ////                                                              ////
@@ -23,22 +23,30 @@
 ////  https://github.com/dineshannayya/mbist_ctrl.git             ////
 ////                                                              ////
 ////  Description                                                 ////
-////	1. 1 masters and 5 slaves share bus Wishbone connection   ////
+////	1. 1 masters and 2 slaves share bus Wishbone connection   ////
 ////     M0 - WB_PORT                                             ////
+////     M1 - MAC-TX                                              ////
+////     M2 - MAC-RX                                              ////
 ////     S0 - Glbl_Reg                                            ////
-////     S1 - MBIST1                                              ////
-////     S2 - MBIST2                                              ////
-////     S3 - MBIST3                                              ////
-////     S4 - MBIST4                                              ////
+////     S1 - MAC                                                 ////
+////     S2 - MBIST/SRAM BANK                                     ////
+////   Architecturally M0 can communicate to S0/S1/S2             ////
+////      M1/M2 will communicate only S2                          ////
+////   Wishone Interconnect Build with Architecture Advantage to  ////
+////     Avoid Routing conjustion                                 ////
 ////                                                              ////
 ////  To Do:                                                      ////
 ////    nothing                                                   ////
 ////                                                              ////
 ////  Author(s):                                                  ////
-////      - Dinesh Annayya, dinesha@opencores.org                 ////
+////      - Dinesh Annayya, dinesh.annayya@gmail.com              ////
 ////                                                              ////
 ////  Revision :                                                  ////
-////                                                              ////
+////     0.0 - Dec 15, 2022, Dinesh A                             ////
+////           Inital Version                                     ////
+////     0.1 - Dec 17, 2022, Dinesh A                             ////
+////           A. Master Port M1/M2 Added                         ////
+////           B. Slave Port S2 Added                             ////
 //////////////////////////////////////////////////////////////////////
 ////                                                              ////
 //// Copyright (C) 2000 Authors and OPENCORES.ORG                 ////
@@ -74,8 +82,8 @@
 	parameter CH_DATA_WD = 95
         ) (
 `ifdef USE_POWER_PINS
-         input logic            vccd1,    // User area 1 1.8V supply
-         input logic            vssd1,    // User area 1 digital ground
+         input logic             vccd1,    // User area 1 1.8V supply
+         input logic             vssd1,    // User area 1 digital ground
 `endif
          input logic             scan_en,
          input logic             scan_mode,
@@ -85,137 +93,106 @@
          output logic            scan_mode_o,
 
          // Clock Skew Adjust
-         input logic [3:0]      cfg_cska_wi,
-         input logic            wbd_clk_int,
-	 output logic           wbd_clk_wi,
+         input logic [3:0]       cfg_cska_wi,
+         input logic             wbd_clk_int,
+	     output logic            wbd_clk_skew,
 
-	 // Bus repeaters
-	 input [CH_CLK_WD-1:0]  ch_clk_in,
-	 output [CH_CLK_WD-1:0] ch_clk_out,
-	 input [CH_DATA_WD-1:0] ch_data_in,
-	 output [CH_DATA_WD-1:0]ch_data_out,
+	     // Bus repeaters
+	     input [CH_CLK_WD-1:0]   ch_clk_in,
+	     output [CH_CLK_WD-1:0]  ch_clk_out,
+	     input [CH_DATA_WD-1:0]  ch_data_in,
+	     output [CH_DATA_WD-1:0] ch_data_out,
 
-         input logic		clk_i, 
-         input logic            rst_n,
+         input logic		     clk_i, 
+         input logic             rst_n,
          
-         // Master 0 Interface
-         input   logic	[31:0]	m0_wbd_dat_i,
-         input   logic  [31:0]	m0_wbd_adr_i,
-         input   logic  [3:0]	m0_wbd_sel_i,
-         input   logic  	m0_wbd_we_i,
-         input   logic  	m0_wbd_cyc_i,
-         input   logic  	m0_wbd_stb_i,
-         output  logic	[31:0]	m0_wbd_dat_o,
-         output  logic		m0_wbd_ack_o,
-         output  logic		m0_wbd_err_o,
+         // Master 0 Interface - WB-HOST
+         input   logic	[31:0]	 m0_wbd_dat_i,
+         input   logic  [31:0]	 m0_wbd_adr_i,
+         input   logic  [3:0]	 m0_wbd_sel_i,
+         input   logic  	     m0_wbd_we_i,
+         input   logic  	     m0_wbd_cyc_i,
+         input   logic  	     m0_wbd_stb_i,
+         output  logic	[31:0]	 m0_wbd_dat_o,
+         output  logic		     m0_wbd_ack_o,
+         output  logic		     m0_wbd_err_o,
+
+         // Master 1 Interface - MAC-TX
+         input   logic	[31:0]	 m1_wbd_dat_i,
+         input   logic  [12:0]	 m1_wbd_adr_i,
+         input   logic  [3:0]	 m1_wbd_sel_i,
+         input   logic  	     m1_wbd_we_i,
+         input   logic  	     m1_wbd_cyc_i,
+         input   logic  	     m1_wbd_stb_i,
+         output  logic	[31:0]	 m1_wbd_dat_o,
+         output  logic		     m1_wbd_ack_o,
+         output  logic		     m1_wbd_err_o,
          
+         // Master 2 Interface - MAC-TX
+         input   logic	[31:0]	 m2_wbd_dat_i,
+         input   logic  [12:0]	 m2_wbd_adr_i,
+         input   logic  [3:0]	 m2_wbd_sel_i,
+         input   logic  	     m2_wbd_we_i,
+         input   logic  	     m2_wbd_cyc_i,
+         input   logic  	     m2_wbd_stb_i,
+         output  logic	[31:0]	 m2_wbd_dat_o,
+         output  logic		     m2_wbd_ack_o,
+         output  logic		     m2_wbd_err_o,
          
-         // Slave 0 Interface
+         // Slave 0 Interface  - GLOBAL-REG/PINMUX
          input	logic [31:0]	s0_wbd_dat_i,
          input	logic 	        s0_wbd_ack_i,
-         //input	logic 	s0_wbd_err_i, - unused
          output	logic [31:0]	s0_wbd_dat_o,
-         output	logic [7:0]	s0_wbd_adr_o,
-         output	logic [3:0]	s0_wbd_sel_o,
+         output	logic [7:0]	    s0_wbd_adr_o,
+         output	logic [3:0]	    s0_wbd_sel_o,
          output	logic 	        s0_wbd_we_o,
          output	logic 	        s0_wbd_cyc_o,
          output	logic 	        s0_wbd_stb_o,
+         //input	logic 	s0_wbd_err_i, - unused
          
-         // Slave 1 Interface
+         // Slave 1 Interface - MAC
          input	logic [31:0]	s1_wbd_dat_i,
          input	logic 	        s1_wbd_ack_i,
-         // input	logic 	s1_wbd_err_i, - unused
          output	logic [31:0]	s1_wbd_dat_o,
-         output	logic [10:0]	s1_wbd_adr_o,
-         output	logic [3:0]	s1_wbd_sel_o,
+         output	logic [12:0]	s1_wbd_adr_o,
+         output	logic [3:0]	    s1_wbd_sel_o,
          output	logic 	        s1_wbd_we_o,
          output	logic 	        s1_wbd_cyc_o,
          output	logic 	        s1_wbd_stb_o,
-         
-         // Slave 2 Interface
+         // input	logic 	s1_wbd_err_i, - unused
+
+         // Slave 2 Interface - MBIST/SRAM WRAPPER
          input	logic [31:0]	s2_wbd_dat_i,
          input	logic 	        s2_wbd_ack_i,
-         // input	logic 	s2_wbd_err_i, - unused
          output	logic [31:0]	s2_wbd_dat_o,
-         output	logic [10:0]	s2_wbd_adr_o, // glbl reg need only 8 bits
-         output	logic [3:0]	s2_wbd_sel_o,
+         output	logic [12:0]	s2_wbd_adr_o,
+         output	logic [3:0]	    s2_wbd_sel_o,
+         output	logic [9:0]	    s2_wbd_bl_o,
+         output	logic    	    s2_wbd_bry_o,
          output	logic 	        s2_wbd_we_o,
          output	logic 	        s2_wbd_cyc_o,
          output	logic 	        s2_wbd_stb_o,
+      // input	logic 	        s2_wbd_err_i, - unused
 
-         // Slave 3 Interface
-	 // Uart is 8bit interface 
-         input	logic [31:0]	s3_wbd_dat_i,
-         input	logic 	        s3_wbd_ack_i,
-         // input	logic 	s3_wbd_err_i,
-         output	logic [31:0]	s3_wbd_dat_o,
-         output	logic [10:0]	s3_wbd_adr_o, 
-         output	logic [3:0]   	s3_wbd_sel_o,
-         output	logic 	        s3_wbd_we_o,
-         output	logic 	        s3_wbd_cyc_o,
-         output	logic 	        s3_wbd_stb_o,
+         // MAC Q Occupancy computation
+         input logic [9:0]      mac_tx_qbase_addr,
+         input logic [9:0]      mac_rx_qbase_addr,
+         output logic           mac_tx_qcnt_inc,
+         output logic           mac_tx_qcnt_dec,
+         output logic           mac_rx_qcnt_inc,  
+         output logic           mac_rx_qcnt_dec       
+  
 
-         // Slave 4 Interface
-         input	logic [31:0]	s4_wbd_dat_i,
-         input	logic 	        s4_wbd_ack_i,
-         // input	logic 	s4_wbd_err_i,
-         output	logic [31:0]	s4_wbd_dat_o,
-         output	logic [10:0]	s4_wbd_adr_o, 
-         output	logic [3:0]   	s4_wbd_sel_o,
-         output	logic 	        s4_wbd_we_o,
-         output	logic 	        s4_wbd_cyc_o,
-         output	logic 	        s4_wbd_stb_o,
-
-         // Slave 5 Interface
-         input	logic [31:0]	s5_wbd_dat_i,
-         input	logic 	        s5_wbd_ack_i,
-         // input	logic 	s5_wbd_err_i, - unused
-         output	logic [31:0]	s5_wbd_dat_o,
-         output	logic [9:0]	s5_wbd_adr_o,
-         output	logic [3:0]	s5_wbd_sel_o,
-         output	logic 	        s5_wbd_we_o,
-         output	logic 	        s5_wbd_cyc_o,
-         output	logic 	        s5_wbd_stb_o,
-         
-         // Slave 6 Interface
-         input	logic [31:0]	s6_wbd_dat_i,
-         input	logic 	        s6_wbd_ack_i,
-         // input	logic 	s6_wbd_err_i, - unused
-         output	logic [31:0]	s6_wbd_dat_o,
-         output	logic [9:0]	s6_wbd_adr_o, // glbl reg need only 8 bits
-         output	logic [3:0]	s6_wbd_sel_o,
-         output	logic 	        s6_wbd_we_o,
-         output	logic 	        s6_wbd_cyc_o,
-         output	logic 	        s6_wbd_stb_o,
-
-         // Slave 7 Interface
-	 // Uart is 8bit interface 
-         input	logic [31:0]	s7_wbd_dat_i,
-         input	logic 	        s7_wbd_ack_i,
-         // input	logic 	s7_wbd_err_i,
-         output	logic [31:0]	s7_wbd_dat_o,
-         output	logic [9:0]	s7_wbd_adr_o, 
-         output	logic [3:0]   	s7_wbd_sel_o,
-         output	logic 	        s7_wbd_we_o,
-         output	logic 	        s7_wbd_cyc_o,
-         output	logic 	        s7_wbd_stb_o,
-
-         // Slave 8 Interface
-         input	logic [31:0]	s8_wbd_dat_i,
-         input	logic 	        s8_wbd_ack_i,
-         // input	logic 	s8_wbd_err_i,
-         output	logic [31:0]	s8_wbd_dat_o,
-         output	logic [9:0]	s8_wbd_adr_o, 
-         output	logic [3:0]   	s8_wbd_sel_o,
-         output	logic 	        s8_wbd_we_o,
-         output	logic 	        s8_wbd_cyc_o,
-         output	logic 	        s8_wbd_stb_o
-	);
+    );
 
 ////////////////////////////////////////////////////////////////////
 //
 // Type define
 //
+parameter TARGET_NULL    = 4'b0000;
+parameter TARGET_PINMUX  = 4'b0001;
+parameter TARGET_MAC     = 4'b0010;
+parameter TARGET_SRAM    = 4'b0011;
 
 
 // WishBone Wr Interface
@@ -223,6 +200,8 @@
   logic	[31:0]	wbd_dat;
   logic  [31:0]	wbd_adr;
   logic  [3:0]	wbd_sel;
+  logic  [9:0]	wbd_bl;
+  logic  	wbd_bry;
   logic  	wbd_we;
   logic  	wbd_cyc;
   logic  	wbd_stb;
@@ -233,45 +212,39 @@
 typedef struct packed { 
   logic	[31:0]	wbd_dat;
   logic  	wbd_ack;
+  logic  	wbd_lack;
   logic  	wbd_err;
 } type_wb_rd_intf;
 
 
 // Master Write Interface
 type_wb_wr_intf  m0_wb_wr;
+type_wb_wr_intf  m1_wb_wr;
+type_wb_wr_intf  m2_wb_wr;
 
 // Master Read Interface
 type_wb_rd_intf  m0_wb_rd;
+type_wb_rd_intf  m0_s0_wb_rd;
+type_wb_rd_intf  m0_s1_wb_rd;
+type_wb_rd_intf  m0_s2_wb_rd;
+
+type_wb_rd_intf  m1_wb_rd;
+type_wb_rd_intf  m1_s2_wb_rd;
+
+type_wb_rd_intf  m2_wb_rd;
+type_wb_rd_intf  m2_s2_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;
-type_wb_wr_intf  s4_wb_wr;
-type_wb_wr_intf  s5_wb_wr;
-type_wb_wr_intf  s6_wb_wr;
-type_wb_wr_intf  s7_wb_wr;
-type_wb_wr_intf  s8_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_rd_intf  s4_wb_rd;
-type_wb_rd_intf  s5_wb_rd;
-type_wb_rd_intf  s6_wb_rd;
-type_wb_rd_intf  s7_wb_rd;
-type_wb_rd_intf  s8_wb_rd;
 
 
-type_wb_wr_intf  m_bus_wr;  // Multiplexed Master I/F
-type_wb_rd_intf  m_bus_rd;  // Multiplexed Slave I/F
-
-type_wb_wr_intf  s_bus_wr;  // Multiplexed Master I/F
-type_wb_rd_intf  s_bus_rd;  // Multiplexed Slave I/F
-
 // channel repeater
 assign ch_clk_out  = ch_clk_in;
 assign ch_data_out = ch_data_in;
@@ -286,37 +259,50 @@
                .vccd1      (vccd1                      ),// User area 1 1.8V supply
                .vssd1      (vssd1                      ),// User area 1 digital ground
 `endif
-	       .clk_in     (wbd_clk_int                 ), 
-	       .sel        (cfg_cska_wi                 ), 
-	       .clk_out    (wbd_clk_wi                  ) 
+	           .clk_in     (wbd_clk_int                 ), 
+	           .sel        (cfg_cska_wi                 ), 
+	           .clk_out    (wbd_clk_skew                ) 
        );
 
 //-------------------------------------------------------------------
 // EXTERNAL MEMORY MAP
 // 0x0000_0000 to 0x0000_0FFF  - GLBL
-// 0x0000_1000 to 0x0000_1FFF  - MBIST1
-// 0x0000_2000 to 0x0000_2FFF  - MBIST2
-// 0x0000_3000 to 0x0000_3FFF  - MBIST3
-// 0x0000_4000 to 0x0000_4FFF  - MBIST4
-// 0x0000_5000 to 0x0000_5FFF  - MBIST5
-// 0x0000_6000 to 0x0000_6FFF  - MBIST6
-// 0x0000_7000 to 0x0000_7FFF  - MBIST7
-// 0x0000_8000 to 0x0000_8FFF  - MBIST8
+// 0x0000_1000 to 0x0001_0FFF  - MAC
+// 0x0000_2000 to 0x0000_27FF  - SRAM-2KB - 0
+// 0x0000_2800 to 0x0000_2FFF  - SRAM-2KB - 1
+// 0x0000_3000 to 0x0000_37FF  - SRAM-2KB - 2
+// 0x0000_3800 to 0x0000_3FFF  - SRAM-2KB - 3
 // ---------------------------------------------------------------------------
 //
-wire [3:0] m0_wbd_tid_i       = (m0_wbd_adr_i[15:12] == 4'b0000  ) ? 4'b0000 :   // GLBL
-                                (m0_wbd_adr_i[15:12] == 4'b0001  ) ? 4'b0001 :   // MBIST1
-                                (m0_wbd_adr_i[15:12] == 4'b0010  ) ? 4'b0010 :   // MBIST2
-                                (m0_wbd_adr_i[15:12] == 4'b0011  ) ? 4'b0011 :   // MBIST3
-                                (m0_wbd_adr_i[15:12] == 4'b0100  ) ? 4'b0100 :   // MBIST4
-                                (m0_wbd_adr_i[15:12] == 4'b0101  ) ? 4'b0101 :   // MBIST5
-                                (m0_wbd_adr_i[15:12] == 4'b0110  ) ? 4'b0110 :   // MBIST6
-                                (m0_wbd_adr_i[15:12] == 4'b0111  ) ? 4'b0111 :   // MBIST7
-                                (m0_wbd_adr_i[15:12] == 4'b1000  ) ? 4'b1000 :   // MBIST8
-				4'b0000; 
+wire [3:0] m0_wbd_tid_i       = (m0_wbd_adr_i[15:12] == 4'b0000  ) ? TARGET_PINMUX :   // GLBL
+                                (m0_wbd_adr_i[15:12] == 4'b0001  ) ? TARGET_MAC    :   // MAC
+                                (m0_wbd_adr_i[15:13] == 3'b001   ) ? TARGET_SRAM   :   // MBIST WRAPPER
+				                 TARGET_NULL; 
+//-------------------------------------------------------------------
+// EXTERNAL MEMORY MAP
+// 0x0000_0000 to 0x0000_0FFF  - GLBL
+// 0x0000_1000 to 0x0001_0FFF  - MAC
+// 0x0000_2000 to 0x0000_27FF  - SRAM-2KB - 0
+// 0x0000_2800 to 0x0000_2FFF  - SRAM-2KB - 1
+// 0x0000_3000 to 0x0000_37FF  - SRAM-2KB - 2
+// 0x0000_3800 to 0x0000_3FFF  - SRAM-2KB - 3
+// ---------------------------------------------------------------------------
+//
+wire [3:0] m1_wbd_tid_i       = TARGET_SRAM;
 
+//-------------------------------------------------------------------
+// EXTERNAL MEMORY MAP
+// 0x0000_0000 to 0x0000_0FFF  - GLBL
+// 0x0000_1000 to 0x0001_0FFF  - MAC
+// 0x0000_2000 to 0x0000_27FF  - SRAM-2KB - 0
+// 0x0000_2800 to 0x0000_2FFF  - SRAM-2KB - 1
+// 0x0000_3000 to 0x0000_37FF  - SRAM-2KB - 2
+// 0x0000_3800 to 0x0000_3FFF  - SRAM-2KB - 3
+// ---------------------------------------------------------------------------
+//
+wire [3:0] m2_wbd_tid_i       = TARGET_SRAM;
 //----------------------------------------
-// Master Mapping
+// Master Mapping - M0
 // -------------------------------------
 assign m0_wb_wr.wbd_dat = m0_wbd_dat_i;
 assign m0_wb_wr.wbd_adr = {m0_wbd_adr_i[31:2],2'b00};
@@ -326,11 +312,39 @@
 assign m0_wb_wr.wbd_stb = m0_wbd_stb_i;
 assign m0_wb_wr.wbd_tid = m0_wbd_tid_i;
 
-assign m0_wbd_dat_o  =  m0_wb_rd.wbd_dat;
-assign m0_wbd_ack_o  =  m0_wb_rd.wbd_ack;
-assign m0_wbd_err_o  =  m0_wb_rd.wbd_err;
+assign m0_wbd_dat_o     =  m0_wb_rd.wbd_dat;
+assign m0_wbd_ack_o     =  m0_wb_rd.wbd_ack;
+assign m0_wbd_err_o     =  m0_wb_rd.wbd_err;
 
+//----------------------------------------
+// Master Mapping - M1
+// -------------------------------------
+assign m1_wb_wr.wbd_dat = m1_wbd_dat_i;
+assign m1_wb_wr.wbd_adr = {19'h0,m1_wbd_adr_i[12:2],2'b00};
+assign m1_wb_wr.wbd_sel = m1_wbd_sel_i;
+assign m1_wb_wr.wbd_we  = m1_wbd_we_i;
+assign m1_wb_wr.wbd_cyc = m1_wbd_cyc_i;
+assign m1_wb_wr.wbd_stb = m1_wbd_stb_i;
+assign m1_wb_wr.wbd_tid = m1_wbd_tid_i;
 
+assign m1_wbd_dat_o     =  m1_wb_rd.wbd_dat;
+assign m1_wbd_ack_o     =  m1_wb_rd.wbd_ack;
+assign m1_wbd_err_o     =  m1_wb_rd.wbd_err;
+
+//----------------------------------------
+// Master Mapping - M2
+// -------------------------------------
+assign m2_wb_wr.wbd_dat = m2_wbd_dat_i;
+assign m2_wb_wr.wbd_adr = {19'h0,m2_wbd_adr_i[12:2],2'b00};
+assign m2_wb_wr.wbd_sel = m2_wbd_sel_i;
+assign m2_wb_wr.wbd_we  = m2_wbd_we_i;
+assign m2_wb_wr.wbd_cyc = m2_wbd_cyc_i;
+assign m2_wb_wr.wbd_stb = m2_wbd_stb_i;
+assign m2_wb_wr.wbd_tid = m2_wbd_tid_i;
+
+assign m2_wbd_dat_o     =  m2_wb_rd.wbd_dat;
+assign m2_wbd_ack_o     =  m2_wb_rd.wbd_ack;
+assign m2_wbd_err_o     =  m2_wb_rd.wbd_err;
 //----------------------------------------
 // Slave Mapping
 // -------------------------------------
@@ -342,177 +356,187 @@
  assign  s0_wbd_cyc_o =  s0_wb_wr.wbd_cyc ;
  assign  s0_wbd_stb_o =  s0_wb_wr.wbd_stb ;
          
-// 2KB SRAM 
+ assign s0_wb_rd.wbd_dat  = s0_wbd_dat_i ;
+ assign s0_wb_rd.wbd_ack  = s0_wbd_ack_i ;
+ assign s0_wb_rd.wbd_err  = 1'b0; // s0_wbd_err_i ; - unused
+
+//--------------------------------------------
+// MAC
+//--------------------------------------------
  assign  s1_wbd_dat_o =  s1_wb_wr.wbd_dat ;
- assign  s1_wbd_adr_o =  s1_wb_wr.wbd_adr[10:0] ;
+ assign  s1_wbd_adr_o =  s1_wb_wr.wbd_adr[12:0] ;
  assign  s1_wbd_sel_o =  s1_wb_wr.wbd_sel ;
  assign  s1_wbd_we_o  =  s1_wb_wr.wbd_we  ;
  assign  s1_wbd_cyc_o =  s1_wb_wr.wbd_cyc ;
  assign  s1_wbd_stb_o =  s1_wb_wr.wbd_stb ;
                       
- assign  s2_wbd_dat_o =  s2_wb_wr.wbd_dat ;
- assign  s2_wbd_adr_o =  s2_wb_wr.wbd_adr[10:0] ; // Global Reg Need 8 bit
- assign  s2_wbd_sel_o =  s2_wb_wr.wbd_sel ;
- assign  s2_wbd_we_o  =  s2_wb_wr.wbd_we  ;
- assign  s2_wbd_cyc_o =  s2_wb_wr.wbd_cyc ;
- assign  s2_wbd_stb_o =  s2_wb_wr.wbd_stb ;
-
- assign  s3_wbd_dat_o =  s3_wb_wr.wbd_dat;
- assign  s3_wbd_adr_o =  s3_wb_wr.wbd_adr[10:0] ; // Global Reg Need 8 bit
- assign  s3_wbd_sel_o =  s3_wb_wr.wbd_sel;
- assign  s3_wbd_we_o  =  s3_wb_wr.wbd_we  ;
- assign  s3_wbd_cyc_o =  s3_wb_wr.wbd_cyc ;
- assign  s3_wbd_stb_o =  s3_wb_wr.wbd_stb ;
- 
- assign  s4_wbd_dat_o =  s4_wb_wr.wbd_dat ;
- assign  s4_wbd_adr_o =  s4_wb_wr.wbd_adr[10:0] ; // Global Reg Need 8 bit
- assign  s4_wbd_sel_o =  s4_wb_wr.wbd_sel ;
- assign  s4_wbd_we_o  =  s4_wb_wr.wbd_we  ;
- assign  s4_wbd_cyc_o =  s4_wb_wr.wbd_cyc ;
- assign  s4_wbd_stb_o =  s4_wb_wr.wbd_stb ;
-
-// 1KB SRAM 
- assign  s5_wbd_dat_o =  s5_wb_wr.wbd_dat ;
- assign  s5_wbd_adr_o =  s5_wb_wr.wbd_adr[9:0] ;
- assign  s5_wbd_sel_o =  s5_wb_wr.wbd_sel ;
- assign  s5_wbd_we_o  =  s5_wb_wr.wbd_we  ;
- assign  s5_wbd_cyc_o =  s5_wb_wr.wbd_cyc ;
- assign  s5_wbd_stb_o =  s5_wb_wr.wbd_stb ;
-                      
- assign  s6_wbd_dat_o =  s6_wb_wr.wbd_dat ;
- assign  s6_wbd_adr_o =  s6_wb_wr.wbd_adr[9:0] ; // Global Reg Need 8 bit
- assign  s6_wbd_sel_o =  s6_wb_wr.wbd_sel ;
- assign  s6_wbd_we_o  =  s6_wb_wr.wbd_we  ;
- assign  s6_wbd_cyc_o =  s6_wb_wr.wbd_cyc ;
- assign  s6_wbd_stb_o =  s6_wb_wr.wbd_stb ;
-
- assign  s7_wbd_dat_o =  s7_wb_wr.wbd_dat;
- assign  s7_wbd_adr_o =  s7_wb_wr.wbd_adr[9:0] ; // Global Reg Need 8 bit
- assign  s7_wbd_sel_o =  s7_wb_wr.wbd_sel;
- assign  s7_wbd_we_o  =  s7_wb_wr.wbd_we  ;
- assign  s7_wbd_cyc_o =  s7_wb_wr.wbd_cyc ;
- assign  s7_wbd_stb_o =  s7_wb_wr.wbd_stb ;
- 
- assign  s8_wbd_dat_o =  s8_wb_wr.wbd_dat ;
- assign  s8_wbd_adr_o =  s8_wb_wr.wbd_adr[9:0] ; // Global Reg Need 8 bit
- assign  s8_wbd_sel_o =  s8_wb_wr.wbd_sel ;
- assign  s8_wbd_we_o  =  s8_wb_wr.wbd_we  ;
- assign  s8_wbd_cyc_o =  s8_wb_wr.wbd_cyc ;
- assign  s8_wbd_stb_o =  s8_wb_wr.wbd_stb ;
- 
- assign s0_wb_rd.wbd_dat  = s0_wbd_dat_i ;
- assign s0_wb_rd.wbd_ack  = s0_wbd_ack_i ;
- assign s0_wb_rd.wbd_err  = 1'b0; // s0_wbd_err_i ; - unused
- 
  assign s1_wb_rd.wbd_dat  = s1_wbd_dat_i ;
  assign s1_wb_rd.wbd_ack  = s1_wbd_ack_i ;
  assign s1_wb_rd.wbd_err  = 1'b0; // s1_wbd_err_i ; - unused
- 
+
+//---------------------------------------------
+// 2KB * 4 SRAM 
+//---------------------------------------------
+ assign  s2_wbd_dat_o =  s2_wb_wr.wbd_dat ;
+ assign  s2_wbd_adr_o =  s2_wb_wr.wbd_adr[12:0] ;
+ assign  s2_wbd_sel_o =  s2_wb_wr.wbd_sel ;
+ assign  s2_wbd_bl_o  =  'h1 ;
+ assign  s2_wbd_bry_o =  'b1 ;
+ assign  s2_wbd_we_o  =  s2_wb_wr.wbd_we  ;
+ assign  s2_wbd_cyc_o =  s2_wb_wr.wbd_cyc ;
+ assign  s2_wbd_stb_o =  s2_wb_wr.wbd_stb ;
+                      
  assign s2_wb_rd.wbd_dat  = s2_wbd_dat_i ;
  assign s2_wb_rd.wbd_ack  = s2_wbd_ack_i ;
- assign s2_wb_rd.wbd_err  = 1'b0; // s2_wbd_err_i ; - unused
-
- assign s3_wb_rd.wbd_dat  = s3_wbd_dat_i ;
- assign s3_wb_rd.wbd_ack  = s3_wbd_ack_i ;
- assign s3_wb_rd.wbd_err  = 1'b0; // s3_wbd_err_i ; - unused
-
- assign s4_wb_rd.wbd_dat  = s4_wbd_dat_i ;
- assign s4_wb_rd.wbd_ack  = s4_wbd_ack_i ;
- assign s4_wb_rd.wbd_err  = 1'b0; // s4_wbd_err_i ; - unused
+ assign s2_wb_rd.wbd_err  = 1'b0; // s1_wbd_err_i ; - unused
  
- assign s5_wb_rd.wbd_dat  = s5_wbd_dat_i ;
- assign s5_wb_rd.wbd_ack  = s5_wbd_ack_i ;
- assign s5_wb_rd.wbd_err  = 1'b0; // s5_wbd_err_i ; - unused
- 
- assign s6_wb_rd.wbd_dat  = s6_wbd_dat_i ;
- assign s6_wb_rd.wbd_ack  = s6_wbd_ack_i ;
- assign s6_wb_rd.wbd_err  = 1'b0; // s6_wbd_err_i ; - unused
 
- assign s7_wb_rd.wbd_dat  = s7_wbd_dat_i ;
- assign s7_wb_rd.wbd_ack  = s7_wbd_ack_i ;
- assign s7_wb_rd.wbd_err  = 1'b0; // s7_wbd_err_i ; - unused
-
- assign s8_wb_rd.wbd_dat  = s8_wbd_dat_i ;
- assign s8_wb_rd.wbd_ack  = s8_wbd_ack_i ;
- assign s8_wb_rd.wbd_err  = 1'b0; // s8_wbd_err_i ; - unused
-//
-// arbitor removed as only one master
-//
-wire [1:0]  gnt = 2'b0;;
-
-
-// Generate Multiplexed Master Interface based on grant
-always_comb begin
-     case(gnt)
-        2'h0:	   m_bus_wr = m0_wb_wr;
-        default:   m_bus_wr = m0_wb_wr;
-     endcase			
-end
-
-
-// Generate Multiplexed Slave Interface based on target Id
-wire [3:0] s_wbd_tid =  s_bus_wr.wbd_tid; // to fix iverilog warning
-always_comb begin
-     case(s_wbd_tid)
-        4'h0:	   s_bus_rd = s0_wb_rd;
-        4'h1:	   s_bus_rd = s1_wb_rd;
-        4'h2:	   s_bus_rd = s2_wb_rd;
-        4'h3:	   s_bus_rd = s3_wb_rd;
-        4'h4:	   s_bus_rd = s4_wb_rd;
-        4'h5:	   s_bus_rd = s5_wb_rd;
-        4'h6:	   s_bus_rd = s6_wb_rd;
-        4'h7:	   s_bus_rd = s7_wb_rd;
-        4'h8:	   s_bus_rd = s8_wb_rd;
-        default:   s_bus_rd = s0_wb_rd;
-     endcase			
-end
-
-
+//---------------------------------------------
 // Connect Master => Slave
-assign  s0_wb_wr = (s_wbd_tid == 4'b0000) ? s_bus_wr : 'h0;
-assign  s1_wb_wr = (s_wbd_tid == 4'b0001) ? s_bus_wr : 'h0;
-assign  s2_wb_wr = (s_wbd_tid == 4'b0010) ? s_bus_wr : 'h0;
-assign  s3_wb_wr = (s_wbd_tid == 4'b0011) ? s_bus_wr : 'h0;
-assign  s4_wb_wr = (s_wbd_tid == 4'b0100) ? s_bus_wr : 'h0;
-assign  s5_wb_wr = (s_wbd_tid == 4'b0101) ? s_bus_wr : 'h0;
-assign  s6_wb_wr = (s_wbd_tid == 4'b0110) ? s_bus_wr : 'h0;
-assign  s7_wb_wr = (s_wbd_tid == 4'b0111) ? s_bus_wr : 'h0;
-assign  s8_wb_wr = (s_wbd_tid == 4'b1000) ? s_bus_wr : 'h0;
-
 // Connect Slave to Master
-assign  m0_wb_rd = (gnt == 2'b00) ? m_bus_rd : 'h0;
+//---------------------------------------------
+assign  m0_wb_rd = (m0_wbd_tid_i == TARGET_PINMUX) ? m0_s0_wb_rd :
+                   (m0_wbd_tid_i == TARGET_MAC)    ? m0_s1_wb_rd :
+                   (m0_wbd_tid_i == TARGET_SRAM)   ? m0_s2_wb_rd : 'h0;
+
+assign  m1_wb_rd = (m1_wbd_tid_i == TARGET_SRAM) ? m1_s2_wb_rd : 'h0;
+assign  m2_wb_rd = (m2_wbd_tid_i == TARGET_SRAM) ? m2_s2_wb_rd : 'h0;
 
 
+
+// M0 (WB-HOST) only can access S0 (Pinmux/Glbl Reg)
 // Stagging FF to break write and read timing path
-wb_stagging u_m_wb_stage(
-         .clk_i            (clk_i              ), 
-         .rst_n            (rst_n              ),
+wb_stagging u_s0(
+         .clk_i            (clk_i                 ), 
+         .rst_n            (rst_n                 ),
+	     .cfg_slave_id     (TARGET_PINMUX         ),
          // WishBone Input master I/P
-         .m_wbd_dat_i      (m_bus_wr.wbd_dat   ),
-         .m_wbd_adr_i      (m_bus_wr.wbd_adr   ),
-         .m_wbd_sel_i      (m_bus_wr.wbd_sel   ),
-         .m_wbd_we_i       (m_bus_wr.wbd_we    ),
-         .m_wbd_cyc_i      (m_bus_wr.wbd_cyc   ),
-         .m_wbd_stb_i      (m_bus_wr.wbd_stb   ),
-         .m_wbd_tid_i      (m_bus_wr.wbd_tid   ),
-         .m_wbd_dat_o      (m_bus_rd.wbd_dat   ),
-         .m_wbd_ack_o      (m_bus_rd.wbd_ack   ),
-         .m_wbd_err_o      (m_bus_rd.wbd_err   ),
+         .m_wbd_dat_i      (m0_wb_wr.wbd_dat      ),
+         .m_wbd_adr_i      (m0_wb_wr.wbd_adr      ),
+         .m_wbd_sel_i      (m0_wb_wr.wbd_sel      ),
+         .m_wbd_we_i       (m0_wb_wr.wbd_we       ),
+         .m_wbd_cyc_i      (m0_wb_wr.wbd_cyc      ),
+         .m_wbd_stb_i      (m0_wb_wr.wbd_stb      ),
+         .m_wbd_tid_i      (m0_wb_wr.wbd_tid      ),
+         .m_wbd_dat_o      (m0_s0_wb_rd.wbd_dat   ),
+         .m_wbd_ack_o      (m0_s0_wb_rd.wbd_ack   ),
+         .m_wbd_err_o      (m0_s0_wb_rd.wbd_err   ),
 
          // Slave Interface
-         .s_wbd_dat_i      (s_bus_rd.wbd_dat   ),
-         .s_wbd_ack_i      (s_bus_rd.wbd_ack   ),
-         .s_wbd_err_i      (s_bus_rd.wbd_err   ),
-         .s_wbd_dat_o      (s_bus_wr.wbd_dat    ),
-         .s_wbd_adr_o      (s_bus_wr.wbd_adr    ),
-         .s_wbd_sel_o      (s_bus_wr.wbd_sel    ),
-         .s_wbd_we_o       (s_bus_wr.wbd_we     ),
-         .s_wbd_cyc_o      (s_bus_wr.wbd_cyc    ),
-         .s_wbd_stb_o      (s_bus_wr.wbd_stb    ),
-         .s_wbd_tid_o      (s_bus_wr.wbd_tid    )
+         .s_wbd_dat_i      (s0_wb_rd.wbd_dat      ),
+         .s_wbd_ack_i      (s0_wb_rd.wbd_ack      ),
+         .s_wbd_err_i      (s0_wb_rd.wbd_err      ),
+         .s_wbd_dat_o      (s0_wb_wr.wbd_dat      ),
+         .s_wbd_adr_o      (s0_wb_wr.wbd_adr      ),
+         .s_wbd_sel_o      (s0_wb_wr.wbd_sel      ),
+         .s_wbd_we_o       (s0_wb_wr.wbd_we       ),
+         .s_wbd_cyc_o      (s0_wb_wr.wbd_cyc      ),
+         .s_wbd_stb_o      (s0_wb_wr.wbd_stb      ),
+         .s_wbd_tid_o      (s0_wb_wr.wbd_tid      )
 
 );
 
+// M0 (WB-HOST) only can access S1 (MAC)
+// Stagging FF to break write and read timing path
+wb_stagging u_s1(
+         .clk_i            (clk_i                 ), 
+         .rst_n            (rst_n                 ),
+	     .cfg_slave_id     (TARGET_MAC            ),
+         // WishBone Input master I/P
+         .m_wbd_dat_i      (m0_wb_wr.wbd_dat      ),
+         .m_wbd_adr_i      (m0_wb_wr.wbd_adr      ),
+         .m_wbd_sel_i      (m0_wb_wr.wbd_sel      ),
+         .m_wbd_we_i       (m0_wb_wr.wbd_we       ),
+         .m_wbd_cyc_i      (m0_wb_wr.wbd_cyc      ),
+         .m_wbd_stb_i      (m0_wb_wr.wbd_stb      ),
+         .m_wbd_tid_i      (m0_wb_wr.wbd_tid      ),
+         .m_wbd_dat_o      (m0_s1_wb_rd.wbd_dat   ),
+         .m_wbd_ack_o      (m0_s1_wb_rd.wbd_ack   ),
+         .m_wbd_err_o      (m0_s1_wb_rd.wbd_err   ),
+
+         // Slave Interface
+         .s_wbd_dat_i      (s1_wb_rd.wbd_dat   ),
+         .s_wbd_ack_i      (s1_wb_rd.wbd_ack   ),
+         .s_wbd_err_i      (s1_wb_rd.wbd_err   ),
+         .s_wbd_dat_o      (s1_wb_wr.wbd_dat    ),
+         .s_wbd_adr_o      (s1_wb_wr.wbd_adr    ),
+         .s_wbd_sel_o      (s1_wb_wr.wbd_sel    ),
+         .s_wbd_we_o       (s1_wb_wr.wbd_we     ),
+         .s_wbd_cyc_o      (s1_wb_wr.wbd_cyc    ),
+         .s_wbd_stb_o      (s1_wb_wr.wbd_stb    ),
+         .s_wbd_tid_o      (s1_wb_wr.wbd_tid    )
+
+);
+
+// M0 (WB-HOST) M1 (MAC-TX) and M2 (MAC-RX) can access S2 (SRAM/MBIST WRAPPER)
+// Target Port -0
+// QCounter Inc/dec generation
+// Ned to move this logic to wishbone interconnect
+assign mac_tx_qcnt_inc = (mac_tx_qbase_addr == s2_wb_wr.wbd_adr[15:6]) && s2_wb_wr.wbd_stb && s2_wb_wr.wbd_we  && s2_wb_rd.wbd_ack && (s2_wb_wr.wbd_sel[3] == 1'b1);
+assign mac_tx_qcnt_dec = (mac_tx_qbase_addr == s2_wb_wr.wbd_adr[15:6]) && s2_wb_wr.wbd_stb && !s2_wb_wr.wbd_we && s2_wb_rd.wbd_ack && (s2_wb_wr.wbd_sel[3] == 1'b1);
+assign mac_rx_qcnt_inc = (mac_rx_qbase_addr == s2_wb_wr.wbd_adr[15:6]) && s2_wb_wr.wbd_stb && s2_wb_wr.wbd_we  && s2_wb_rd.wbd_ack && (s2_wb_wr.wbd_sel[3] == 1'b1);
+assign mac_rx_qcnt_dec = (mac_rx_qbase_addr == s2_wb_wr.wbd_adr[15:6]) && s2_wb_wr.wbd_stb && !s2_wb_wr.wbd_we && s2_wb_rd.wbd_ack && (s2_wb_wr.wbd_sel[3] == 1'b1);
+
+wb_slave_port  u_s2 (
+
+          .clk_i                   (clk_i                  ), 
+          .rst_n                   (rst_n                  ),
+	      .cfg_slave_id            (TARGET_SRAM            ),
+
+         // Master 0 Interface
+          .m0_wbd_dat_i            (m0_wb_wr.wbd_dat       ),
+          .m0_wbd_adr_i            (m0_wb_wr.wbd_adr       ),
+          .m0_wbd_sel_i            (m0_wb_wr.wbd_sel       ),
+          .m0_wbd_we_i             (m0_wb_wr.wbd_we        ),
+          .m0_wbd_cyc_i            (m0_wb_wr.wbd_cyc       ),
+          .m0_wbd_stb_i            (m0_wb_wr.wbd_stb       ),
+	      .m0_wbd_tid_i            (m0_wb_wr.wbd_tid       ),
+          .m0_wbd_dat_o            (m0_s2_wb_rd.wbd_dat    ),
+          .m0_wbd_ack_o            (m0_s2_wb_rd.wbd_ack    ),
+          .m0_wbd_lack_o           (m0_s2_wb_rd.wbd_lack   ),
+          .m0_wbd_err_o            (m0_s2_wb_rd.wbd_err    ),
+         
+         // Master 1 Interface
+          .m1_wbd_dat_i            (m1_wb_wr.wbd_dat       ),
+          .m1_wbd_adr_i            (m1_wb_wr.wbd_adr       ),
+          .m1_wbd_sel_i            (m1_wb_wr.wbd_sel       ),
+          .m1_wbd_we_i             (m1_wb_wr.wbd_we        ),
+          .m1_wbd_cyc_i            (m1_wb_wr.wbd_cyc       ),
+          .m1_wbd_stb_i            (m1_wb_wr.wbd_stb       ),
+	      .m1_wbd_tid_i            (m1_wb_wr.wbd_tid       ),
+          .m1_wbd_dat_o            (m1_s2_wb_rd.wbd_dat    ),
+          .m1_wbd_ack_o            (m1_s2_wb_rd.wbd_ack    ),
+          .m1_wbd_lack_o           (m1_s2_wb_rd.wbd_lack   ),
+          .m1_wbd_err_o            (m1_s2_wb_rd.wbd_err    ),
+         
+         // Master 2 Interface
+          .m2_wbd_dat_i            (m2_wb_wr.wbd_dat       ),
+          .m2_wbd_adr_i            (m2_wb_wr.wbd_adr       ),
+          .m2_wbd_sel_i            (m2_wb_wr.wbd_sel       ),
+          .m2_wbd_we_i             (m2_wb_wr.wbd_we        ),
+          .m2_wbd_cyc_i            (m2_wb_wr.wbd_cyc       ),
+          .m2_wbd_stb_i            (m2_wb_wr.wbd_stb       ),
+	      .m2_wbd_tid_i            (m2_wb_wr.wbd_tid       ),
+          .m2_wbd_dat_o            (m2_s2_wb_rd.wbd_dat    ),
+          .m2_wbd_ack_o            (m2_s2_wb_rd.wbd_ack    ),
+          .m2_wbd_lack_o           (m2_s2_wb_rd.wbd_lack   ),
+          .m2_wbd_err_o            (m2_s2_wb_rd.wbd_err    ),
+
+        
+         
+         // Slave  Interface
+          .s_wbd_dat_i            (s2_wb_rd.wbd_dat        ),
+          .s_wbd_ack_i            (s2_wb_rd.wbd_ack        ),
+          .s_wbd_lack_i           (s2_wb_rd.wbd_ack        ),
+          .s_wbd_dat_o            (s2_wb_wr.wbd_dat        ),
+          .s_wbd_adr_o            (s2_wb_wr.wbd_adr        ),
+          .s_wbd_sel_o            (s2_wb_wr.wbd_sel        ),
+          .s_wbd_we_o             (s2_wb_wr.wbd_we         ),  
+          .s_wbd_cyc_o            (s2_wb_wr.wbd_cyc        ),
+          .s_wbd_stb_o            (s2_wb_wr.wbd_stb        )
+        
+	);
+
 
 endmodule
 
diff --git a/verilog/rtl/wb_interconnect/src/wb_slave_port.sv b/verilog/rtl/wb_interconnect/src/wb_slave_port.sv
new file mode 100644
index 0000000..6b23e88
--- /dev/null
+++ b/verilog/rtl/wb_interconnect/src/wb_slave_port.sv
@@ -0,0 +1,253 @@
+//////////////////////////////////////////////////////////////////////////////
+// SPDX-FileCopyrightText: 2021 , Dinesh Annayya                          
+// 
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// SPDX-License-Identifier: Apache-2.0
+// SPDX-FileContributor: Created by Dinesh Annayya <dinesha@opencores.org>
+//
+//////////////////////////////////////////////////////////////////////
+////                                                              ////
+////  Wishbone interconnect for slave port                        ////
+////                                                              ////
+////  This file is part of the YIFive cores project               ////
+////  https://github.com/dineshannayya/riscduino.git              ////
+////                                                              ////
+////  Description                                                 ////
+////	1. This block implement simple round robine request       ////
+////                                                              ////
+////  To Do:                                                      ////
+////    nothing                                                   ////
+////                                                              ////
+////  Author(s):                                                  ////
+////      - Dinesh Annayya, dinesha@opencores.org                 ////
+////                                                              ////
+////  Revision :                                                  ////
+////    0.1 - Mar 2, 2022, Dinesh A                               ////
+//////////////////////////////////////////////////////////////////////
+
+
+
+module wb_slave_port  (
+         input logic		clk_i, 
+         input logic            rst_n,
+
+         input logic [3:0]      cfg_slave_id,
+
+         
+         // Master 0 Interface
+         input   logic	[31:0]	m0_wbd_dat_i,
+         input   logic  [31:0]	m0_wbd_adr_i,
+         input   logic  [3:0]	m0_wbd_sel_i,
+         input   logic  	    m0_wbd_we_i,
+         input   logic  	    m0_wbd_cyc_i,
+         input   logic  	    m0_wbd_stb_i,
+         input   logic  [3:0]   m0_wbd_tid_i,
+         output  logic	[31:0]	m0_wbd_dat_o,
+         output  logic		    m0_wbd_ack_o,
+         output  logic		    m0_wbd_lack_o,
+         output  logic		    m0_wbd_err_o,
+         
+         // Master 1 Interface
+         input	logic [31:0]	m1_wbd_dat_i,
+         input	logic [31:0]	m1_wbd_adr_i,
+         input	logic [3:0]	    m1_wbd_sel_i,
+         input	logic 	        m1_wbd_we_i,
+         input	logic 	        m1_wbd_cyc_i,
+         input	logic 	        m1_wbd_stb_i,
+         input  logic [3:0]     m1_wbd_tid_i,
+         output	logic [31:0]	m1_wbd_dat_o,
+         output	logic 	        m1_wbd_ack_o,
+         output	logic 	        m1_wbd_lack_o,
+         output	logic 	        m1_wbd_err_o,
+         
+         // Master 2 Interface
+         input	logic [31:0]	m2_wbd_dat_i,
+         input	logic [31:0]	m2_wbd_adr_i,
+         input	logic [3:0]	    m2_wbd_sel_i,
+         input	logic 	        m2_wbd_we_i,
+         input	logic 	        m2_wbd_cyc_i,
+         input	logic 	        m2_wbd_stb_i,
+         input  logic [3:0]     m2_wbd_tid_i,
+         output	logic [31:0]	m2_wbd_dat_o,
+         output	logic 	        m2_wbd_ack_o,
+         output	logic 	        m2_wbd_lack_o,
+         output	logic 	        m2_wbd_err_o,
+         
+         // Slave 0 Interface
+         input	logic [31:0]	s_wbd_dat_i,
+         input	logic 	        s_wbd_ack_i,
+         input	logic 	        s_wbd_lack_i,
+         output	logic [31:0]	s_wbd_dat_o,
+         output	logic [31:0]	s_wbd_adr_o,
+         output	logic [3:0]	    s_wbd_sel_o,
+         output	logic [9:0]	    s_wbd_bl_o,
+         output	logic 	        s_wbd_bry_o,
+         output	logic 	        s_wbd_we_o,
+         output	logic 	        s_wbd_cyc_o,
+         output	logic 	        s_wbd_stb_o
+
+	);
+
+// WishBone Wr Interface
+typedef struct packed { 
+  logic	[31:0]	wbd_dat;
+  logic  [31:0]	wbd_adr;
+  logic  [3:0]	wbd_sel;
+  logic  [9:0]	wbd_bl;
+  logic  	    wbd_bry;
+  logic  	    wbd_we;
+  logic  	    wbd_cyc;
+  logic  	    wbd_stb;
+  logic [3:0] 	wbd_tid; // target id
+} type_wb_wr_intf;
+
+// WishBone Rd Interface
+typedef struct packed { 
+  logic	[31:0]	wbd_dat;
+  logic  	wbd_ack;
+  logic  	wbd_lack;
+  logic  	wbd_err;
+} type_wb_rd_intf;
+
+
+// Master Write Interface
+type_wb_wr_intf  m0_wb_wr;
+type_wb_wr_intf  m1_wb_wr;
+type_wb_wr_intf  m2_wb_wr;
+
+// Master Read Interface
+type_wb_rd_intf  m0_wb_rd;
+type_wb_rd_intf  m1_wb_rd;
+type_wb_rd_intf  m2_wb_rd;
+
+wire m0_stb_i = (m0_wbd_stb_i & (m0_wbd_tid_i== cfg_slave_id));
+wire m1_stb_i = (m1_wbd_stb_i & (m1_wbd_tid_i== cfg_slave_id));
+wire m2_stb_i = (m2_wbd_stb_i & (m2_wbd_tid_i== cfg_slave_id));
+
+type_wb_wr_intf  m_bus_wr;  // Multiplexed Master I/F
+type_wb_rd_intf  m_bus_rd;  // Multiplexed Slave I/F
+
+//----------------------------------------
+// Master Mapping
+// -------------------------------------
+assign m0_wb_wr.wbd_dat = m0_wbd_dat_i;
+assign m0_wb_wr.wbd_adr = {m0_wbd_adr_i[31:2],2'b00};
+assign m0_wb_wr.wbd_sel = m0_wbd_sel_i;
+assign m0_wb_wr.wbd_bl  = 'h1;
+assign m0_wb_wr.wbd_bry = 'b1;
+assign m0_wb_wr.wbd_we  = m0_wbd_we_i;
+assign m0_wb_wr.wbd_cyc = m0_wbd_cyc_i;
+assign m0_wb_wr.wbd_stb = m0_stb_i;
+assign m0_wb_wr.wbd_tid = m0_wbd_tid_i;
+
+assign m1_wb_wr.wbd_dat = m1_wbd_dat_i;
+assign m1_wb_wr.wbd_adr = {m1_wbd_adr_i[31:2],2'b00};
+assign m1_wb_wr.wbd_sel = m1_wbd_sel_i;
+assign m1_wb_wr.wbd_bl  = 'h1;
+assign m1_wb_wr.wbd_bry = 'b1;
+assign m1_wb_wr.wbd_we  = m1_wbd_we_i;
+assign m1_wb_wr.wbd_cyc = m1_wbd_cyc_i;
+assign m1_wb_wr.wbd_stb = m1_stb_i;
+assign m1_wb_wr.wbd_tid = m1_wbd_tid_i;
+
+assign m2_wb_wr.wbd_dat = m2_wbd_dat_i;
+assign m2_wb_wr.wbd_adr = {m2_wbd_adr_i[31:2],2'b00};
+assign m2_wb_wr.wbd_sel = m2_wbd_sel_i;
+assign m2_wb_wr.wbd_bl  = 'h1;
+assign m2_wb_wr.wbd_bry = 'b1;
+assign m2_wb_wr.wbd_we  = m2_wbd_we_i;
+assign m2_wb_wr.wbd_cyc = m2_wbd_cyc_i;
+assign m2_wb_wr.wbd_stb = m2_stb_i;
+assign m2_wb_wr.wbd_tid = m2_wbd_tid_i;
+
+assign m0_wbd_dat_o  =  m0_wb_rd.wbd_dat;
+assign m0_wbd_ack_o  =  m0_wb_rd.wbd_ack;
+assign m0_wbd_lack_o =  m0_wb_rd.wbd_lack;
+assign m0_wbd_err_o  =  m0_wb_rd.wbd_err;
+
+assign m1_wbd_dat_o  =  m1_wb_rd.wbd_dat;
+assign m1_wbd_ack_o  =  m1_wb_rd.wbd_ack;
+assign m1_wbd_lack_o =  m1_wb_rd.wbd_lack;
+assign m1_wbd_err_o  =  m1_wb_rd.wbd_err;
+
+assign m2_wbd_dat_o  =  m2_wb_rd.wbd_dat;
+assign m2_wbd_ack_o  =  m2_wb_rd.wbd_ack;
+assign m2_wbd_lack_o =  m2_wb_rd.wbd_lack;
+assign m2_wbd_err_o  =  m2_wb_rd.wbd_err;
+
+//
+// arbitor 
+//
+logic [1:0]  gnt;
+wb_arb	u_wb_arb(
+	.clk(clk_i), 
+	.rstn(rst_n),
+	.req({	1'b0,
+	        m2_stb_i & !m2_wbd_lack_o,
+		m1_stb_i & !m1_wbd_lack_o,
+		m0_stb_i & !m0_wbd_lack_o}),
+	.gnt(gnt)
+);
+
+// Generate Multiplexed Master Interface based on grant
+always_comb begin
+     case(gnt)
+        2'h0:	   m_bus_wr = m0_wb_wr;
+        2'h1:	   m_bus_wr = m1_wb_wr;
+        2'h2:	   m_bus_wr = m2_wb_wr;
+        default:   m_bus_wr = m0_wb_wr;
+     endcase			
+end
+
+// Stagging FF to break write and read timing path
+sync_wbb u_sync_wbb(
+         .clk_i            (clk_i               ), 
+         .rst_n            (rst_n               ),
+         // WishBone Input master I/P
+         .wbm_dat_i      (m_bus_wr.wbd_dat    ),
+         .wbm_adr_i      (m_bus_wr.wbd_adr    ),
+         .wbm_sel_i      (m_bus_wr.wbd_sel    ),
+         .wbm_bl_i       (m_bus_wr.wbd_bl     ),
+         .wbm_bry_i      (m_bus_wr.wbd_bry    ),
+         .wbm_we_i       (m_bus_wr.wbd_we     ),
+         .wbm_cyc_i      (m_bus_wr.wbd_cyc    ),
+         .wbm_stb_i      (m_bus_wr.wbd_stb    ),
+         .wbm_tid_i      (m_bus_wr.wbd_tid    ),
+         .wbm_dat_o      (m_bus_rd.wbd_dat    ),
+         .wbm_ack_o      (m_bus_rd.wbd_ack    ),
+         .wbm_lack_o     (m_bus_rd.wbd_lack   ),
+         .wbm_err_o      (m_bus_rd.wbd_err    ),
+
+         // Slave Interface
+         .wbs_dat_i      (s_wbd_dat_i    ),
+         .wbs_ack_i      (s_wbd_ack_i    ),
+         .wbs_lack_i     (s_wbd_lack_i   ),
+         .wbs_err_i      (1'b0           ),
+         .wbs_dat_o      (s_wbd_dat_o    ),
+         .wbs_adr_o      (s_wbd_adr_o    ),
+         .wbs_sel_o      (s_wbd_sel_o    ),
+         .wbs_bl_o       (s_wbd_bl_o     ),
+         .wbs_bry_o      (s_wbd_bry_o    ),
+         .wbs_we_o       (s_wbd_we_o     ),
+         .wbs_cyc_o      (s_wbd_cyc_o    ),
+         .wbs_stb_o      (s_wbd_stb_o    ),
+         .wbs_tid_o      (               )
+
+);
+
+// Connect Slave to Master
+assign  m0_wb_rd = (gnt == 2'b00) ? m_bus_rd : 'h0;
+assign  m1_wb_rd = (gnt == 2'b01) ? m_bus_rd : 'h0;
+assign  m2_wb_rd = (gnt == 2'b10) ? m_bus_rd : 'h0;
+
+endmodule