Verification clean-up, working wb_host test case
diff --git a/Makefile b/Makefile
index 188e997..dc3de7c 100644
--- a/Makefile
+++ b/Makefile
@@ -17,6 +17,7 @@
 CARAVEL_ROOT?=$(PWD)/caravel
 PRECHECK_ROOT?=${HOME}/mpw_precheck
 SIM ?= RTL
+DUMP ?= OFF
 
 # Install lite version of caravel, (1): caravel-lite, (0): caravel
 CARAVEL_LITE?=1
@@ -43,24 +44,24 @@
 .PHONY: verify
 verify:
 	cd ./verilog/dv/ && \
-	export SIM=${SIM} && \
+	export SIM=${SIM} DUMP=${DUMP} && \
 		$(MAKE) -j$(THREADS)
 
 # Install DV setup
 .PHONY: simenv
 simenv:
-	docker pull efabless/dv_setup:latest
+	docker pull dineshannayya/dv_setup:latest
 
 PATTERNS=$(shell cd verilog/dv && find * -maxdepth 0 -type d)
 DV_PATTERNS = $(foreach dv, $(PATTERNS), verify-$(dv))
 TARGET_PATH=$(shell pwd)
-VERIFY_COMMAND="cd ${TARGET_PATH}/verilog/dv/$* && export SIM=${SIM} && make"
+VERIFY_COMMAND="cd ${TARGET_PATH}/verilog/dv/$* && export SIM=${SIM} DUMP=${DUMP} && make"
 $(DV_PATTERNS): verify-% : ./verilog/dv/% 
 	docker run -v ${TARGET_PATH}:${TARGET_PATH} -v ${PDK_ROOT}:${PDK_ROOT} \
                 -v ${CARAVEL_ROOT}:${CARAVEL_ROOT} \
                 -e TARGET_PATH=${TARGET_PATH} -e PDK_ROOT=${PDK_ROOT} \
                 -e CARAVEL_ROOT=${CARAVEL_ROOT} \
-                -u $(id -u $$USER):$(id -g $$USER) efabless/dv_setup:latest \
+                -u $(id -u $$USER):$(id -g $$USER) dineshannayya/dv_setup:latest \
                 sh -c $(VERIFY_COMMAND)
 				
 # Openlane Makefile Targets
diff --git a/def/mbist.def.gz b/def/mbist.def.gz
index 76cf96b..e442a67 100644
--- a/def/mbist.def.gz
+++ b/def/mbist.def.gz
Binary files differ
diff --git a/def/user_project_wrapper.def.gz b/def/user_project_wrapper.def.gz
index 8703c84..9766e91 100644
--- a/def/user_project_wrapper.def.gz
+++ b/def/user_project_wrapper.def.gz
Binary files differ
diff --git a/def/wb_host.def.gz b/def/wb_host.def.gz
index 4eb38bb..159a6e2 100644
--- a/def/wb_host.def.gz
+++ b/def/wb_host.def.gz
Binary files differ
diff --git a/gds/mbist.gds.gz b/gds/mbist.gds.gz
index 57bfd86..8286713 100644
--- a/gds/mbist.gds.gz
+++ b/gds/mbist.gds.gz
Binary files differ
diff --git a/gds/sky130_sram_2kbyte_1rw1r_32x512_8.gds.gz b/gds/sky130_sram_2kbyte_1rw1r_32x512_8.gds.gz
index 7819f03..d5f9d3b 100644
--- a/gds/sky130_sram_2kbyte_1rw1r_32x512_8.gds.gz
+++ b/gds/sky130_sram_2kbyte_1rw1r_32x512_8.gds.gz
Binary files differ
diff --git a/gds/user_project_wrapper.gds.gz b/gds/user_project_wrapper.gds.gz
index 1099c35..d9de5b6 100644
--- a/gds/user_project_wrapper.gds.gz
+++ b/gds/user_project_wrapper.gds.gz
Binary files differ
diff --git a/gds/wb_host.gds.gz b/gds/wb_host.gds.gz
index d681d62..24de17f 100644
--- a/gds/wb_host.gds.gz
+++ b/gds/wb_host.gds.gz
Binary files differ
diff --git a/lef/mbist.lef.gz b/lef/mbist.lef.gz
index f28df15..35dcfab 100644
--- a/lef/mbist.lef.gz
+++ b/lef/mbist.lef.gz
Binary files differ
diff --git a/lef/sky130_sram_2kbyte_1rw1r_32x512_8.lef.gz b/lef/sky130_sram_2kbyte_1rw1r_32x512_8.lef.gz
index a39a655..4febd54 100644
--- a/lef/sky130_sram_2kbyte_1rw1r_32x512_8.lef.gz
+++ b/lef/sky130_sram_2kbyte_1rw1r_32x512_8.lef.gz
Binary files differ
diff --git a/lef/user_project_wrapper.lef.gz b/lef/user_project_wrapper.lef.gz
index 69bddbd..a496dba 100644
--- a/lef/user_project_wrapper.lef.gz
+++ b/lef/user_project_wrapper.lef.gz
Binary files differ
diff --git a/lef/wb_host.lef.gz b/lef/wb_host.lef.gz
index 89badd0..5223cf5 100644
--- a/lef/wb_host.lef.gz
+++ b/lef/wb_host.lef.gz
Binary files differ
diff --git a/mag/mbist.mag.gz b/mag/mbist.mag.gz
index 27ab11c..5e4729f 100644
--- a/mag/mbist.mag.gz
+++ b/mag/mbist.mag.gz
Binary files differ
diff --git a/mag/user_project_wrapper.mag.gz b/mag/user_project_wrapper.mag.gz
index ba056d6..b1d4fb4 100644
--- a/mag/user_project_wrapper.mag.gz
+++ b/mag/user_project_wrapper.mag.gz
Binary files differ
diff --git a/mag/wb_host.mag.gz b/mag/wb_host.mag.gz
index 27a7c65..c617bb6 100644
--- a/mag/wb_host.mag.gz
+++ b/mag/wb_host.mag.gz
Binary files differ
diff --git a/maglef/mbist.mag.gz b/maglef/mbist.mag.gz
index 06b6444..ffea4a6 100644
--- a/maglef/mbist.mag.gz
+++ b/maglef/mbist.mag.gz
Binary files differ
diff --git a/maglef/user_project_wrapper.mag.gz b/maglef/user_project_wrapper.mag.gz
index f7df319..1aa2498 100644
--- a/maglef/user_project_wrapper.mag.gz
+++ b/maglef/user_project_wrapper.mag.gz
Binary files differ
diff --git a/maglef/wb_host.mag.gz b/maglef/wb_host.mag.gz
index c3b932e..9b4e887 100644
--- a/maglef/wb_host.mag.gz
+++ b/maglef/wb_host.mag.gz
Binary files differ
diff --git a/spi/lvs/mbist.spice.gz b/spi/lvs/mbist.spice.gz
index 561430c..14bd882 100644
--- a/spi/lvs/mbist.spice.gz
+++ b/spi/lvs/mbist.spice.gz
Binary files differ
diff --git a/spi/lvs/user_project_wrapper.spice.gz b/spi/lvs/user_project_wrapper.spice.gz
index 71fb8bc..807e705 100644
--- a/spi/lvs/user_project_wrapper.spice.gz
+++ b/spi/lvs/user_project_wrapper.spice.gz
Binary files differ
diff --git a/spi/lvs/wb_host.spice.gz b/spi/lvs/wb_host.spice.gz
index e20ec9a..11379ae 100644
--- a/spi/lvs/wb_host.spice.gz
+++ b/spi/lvs/wb_host.spice.gz
Binary files differ
diff --git a/verilog/dv/wb_port/Makefile b/verilog/dv/wb_port/Makefile
index 1c784c6..b4fc80d 100644
--- a/verilog/dv/wb_port/Makefile
+++ b/verilog/dv/wb_port/Makefile
@@ -29,14 +29,17 @@
 UPRJ_VERILOG_PATH ?= ../../../verilog
 UPRJ_RTL_PATH = $(UPRJ_VERILOG_PATH)/rtl
 UPRJ_BEHAVIOURAL_MODELS = ../
+UPRJ_INCLUDE_PATH1 = $(UPRJ_RTL_PATH)/mbist/include
 
 ## RISCV GCC 
 GCC_PATH?=/ef/apps/bin
 GCC_PREFIX?=riscv32-unknown-elf
+GCC64_PREFIX?=riscv64-unknown-elf
 
 ## Simulation mode: RTL/GL
 SIM_DEFINES = -DFUNCTIONAL -DSIM
 SIM?=RTL
+DUMP?=OFF
 
 .SUFFIXES:
 
@@ -46,12 +49,23 @@
 
 hex:  ${PATTERN:=.hex}
 
+vvp:  ${PATTERN:=.vvp}
+
 %.vvp: %_tb.v %.hex
 ifeq ($(SIM),RTL)
-	iverilog $(SIM_DEFINES) -I $(PDK_PATH) \
+   ifeq ($(DUMP),OFF)
+	iverilog -g2005-sv $(SIM_DEFINES) -I $(PDK_PATH) \
 	-I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) \
 	-I $(UPRJ_BEHAVIOURAL_MODELS)    -I $(UPRJ_RTL_PATH) \
+	-I $(UPRJ_INCLUDE_PATH1) \
 	$< -o $@ 
+    else 
+	iverilog -g2005-sv -DWFDUMP $(SIM_DEFINES) -I $(PDK_PATH) \
+	-I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) \
+	-I $(UPRJ_BEHAVIOURAL_MODELS)    -I $(UPRJ_RTL_PATH) \
+	-I $(UPRJ_INCLUDE_PATH1) \
+	$< -o $@
+   endif 
 else  
 	iverilog $(SIM_DEFINES) -DGL -I $(PDK_PATH) \
 	-I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) -I $(CARAVEL_VERILOG_PATH) \
@@ -63,15 +77,15 @@
 	vvp $<
 
 %.elf: %.c $(CARAVEL_FIRMWARE_PATH)/sections.lds $(CARAVEL_FIRMWARE_PATH)/start.s check-env
-	${GCC_PATH}/${GCC_PREFIX}-gcc -I $(CARAVEL_PATH) -march=rv32imc -mabi=ilp32 -Wl,-Bstatic,-T,$(CARAVEL_FIRMWARE_PATH)/sections.lds,--strip-debug -ffreestanding -nostdlib -o $@ $(CARAVEL_FIRMWARE_PATH)/start.s $<
+	${GCC64_PREFIX}-gcc -I $(CARAVEL_PATH) -march=rv32imc -mabi=ilp32 -Wl,-Bstatic,-T,$(CARAVEL_FIRMWARE_PATH)/sections.lds,--strip-debug -ffreestanding -nostdlib -o $@ $(CARAVEL_FIRMWARE_PATH)/start.s $<
 
 %.hex: %.elf
-	${GCC_PATH}/${GCC_PREFIX}-objcopy -O verilog $< $@ 
+	${GCC64_PREFIX}-objcopy -O verilog $< $@ 
 	# to fix flash base address
 	sed -i 's/@10000000/@00000000/g' $@
 
 %.bin: %.elf
-	${GCC_PATH}/${GCC_PREFIX}-objcopy -O binary $< /dev/stdout | tail -c +1048577 > $@
+	${GCC64_PREFIX}-objcopy -O binary $< /dev/stdout | tail -c +1048577 > $@
 
 check-env:
 ifndef PDK_ROOT
@@ -80,9 +94,9 @@
 ifeq (,$(wildcard $(PDK_ROOT)/sky130A))
 	$(error $(PDK_ROOT)/sky130A not found, please install pdk before running make)
 endif
-ifeq (,$(wildcard $(GCC_PATH)/$(GCC_PREFIX)-gcc ))
-	$(error $(GCC_PATH)/$(GCC_PREFIX)-gcc is not found, please export GCC_PATH and GCC_PREFIX before running make)
-endif
+#ifeq (,$(wildcard $(GCC64_PREFIX)-gcc ))
+#	$(error $(GCC64_PREFIX)-gcc is not found, please export GCC_PATH and GCC_PREFIX before running make)
+#endif
 # check for efabless style installation
 ifeq (,$(wildcard $(PDK_ROOT)/sky130A/libs.ref/*/verilog))
 SIM_DEFINES := ${SIM_DEFINES} -DEF_STYLE
diff --git a/verilog/dv/wb_port/run_iverilog b/verilog/dv/wb_port/run_iverilog
new file mode 100644
index 0000000..6fbe5e5
--- /dev/null
+++ b/verilog/dv/wb_port/run_iverilog
@@ -0,0 +1,6 @@
+iverilog -g2005-sv -DFUNCTIONAL -DSIM -I /home/dinesha/workarea/efabless/MPW-3/pdk/sky130A \
+-I /home/dinesha/workarea/opencore/git/riscduino/caravel/verilog/dv/caravel  \
+-I /home/dinesha/workarea/opencore/git/riscduino/caravel/verilog/rtl \
+-I ../../rtl/mbist/include \
+-I ../    -I ../../../verilog/rtl \
+wb_port_tb.v -o wb_port.vvp
diff --git a/verilog/dv/wb_port/wb_port.c b/verilog/dv/wb_port/wb_port.c
index 425c115..eed8da9 100644
--- a/verilog/dv/wb_port/wb_port.c
+++ b/verilog/dv/wb_port/wb_port.c
@@ -19,17 +19,15 @@
 #include "verilog/dv/caravel/defs.h"
 #include "verilog/dv/caravel/stub.c"
 
-/*
-	Wishbone Test:
-		- Configures MPRJ lower 8-IO pins as outputs
-		- Checks counter value through the wishbone port
-*/
-int i = 0; 
-int clk = 0;
+// User Project Slaves (0x3000_0000)
+#define reg_mprj_slave (*(volatile uint32_t*)0x30000000)
+
+#define reg_mprj_wbhost_reg0 (*(volatile uint32_t*)0x30800000)
 
 void main()
 {
 
+	int bFail = 0;
 	/* 
 	IO Control Registers
 	| DM     | VTRIP | SLOW  | AN_POL | AN_SEL | AN_EN | MOD_SEL | INP_DIS | HOLDH | OEB_N | MGMT_EN |
@@ -80,8 +78,16 @@
     // Flag start of the test
 	reg_mprj_datal = 0xAB600000;
 
-    reg_mprj_slave = 0x00002710;
-    if (reg_mprj_slave == 0x2752) {
+
+    if (reg_mprj_wbhost_reg0 != 0xAABBCCDD) bFail = 1;
+
+    // Write software Write & Read Register
+    reg_mprj_wbhost_reg0  = 0x11223344; 
+
+
+    if (reg_mprj_wbhost_reg0  != 0x11223344) bFail = 1;
+
+    if(bFail == 0) {
         reg_mprj_datal = 0xAB610000;
     } else {
         reg_mprj_datal = 0xAB600000;
diff --git a/verilog/rtl/mbist/include/mbist_def.svh b/verilog/rtl/mbist/include/mbist_def.svh
index 5c8b797..12879e1 100644
--- a/verilog/rtl/mbist/include/mbist_def.svh
+++ b/verilog/rtl/mbist/include/mbist_def.svh
@@ -21,12 +21,12 @@
 
 // BIST ADDRESS CONTRL
 //
-parameter BIST_ADDR_WD    = 10     ;
-parameter BIST_ADDR_START = 10'h000 ; 
-parameter BIST_ADDR_END   = 10'h3FB ;
+//parameter BIST_ADDR_WD    = 9     ;
+//parameter BIST_ADDR_START = 10'h000 ; 
+//parameter BIST_ADDR_END   = 10'h3FB ;
 
 // BIST DATA CONTRL
-parameter BIST_DATA_WD        = 32;
+//parameter BIST_DATA_WD        = 32;
 parameter BIST_DATA_PAT_SIZE  = 8;
 parameter BIST_DATA_PAT_TYPE1 = 64'h5555_5555_5555_5555;
 parameter BIST_DATA_PAT_TYPE2 = 64'h3333_3333_3333_3333;
@@ -55,10 +55,10 @@
 parameter  BIST_OP_SIZE        = 3;
 
 // BIST ADDRESS REPAIR
-parameter  BIST_RAD_WD_I            = BIST_ADDR_WD;
-parameter  BIST_RAD_WD_O            = BIST_ADDR_WD;
+//parameter  BIST_RAD_WD_I            = BIST_ADDR_WD;
+//parameter  BIST_RAD_WD_O            = BIST_ADDR_WD;
 parameter  BIST_ERR_LIMIT           = 4;
 // Make Sure that this address in outside the valid address range
-parameter  BIST_REPAIR_ADDR_START   = 10'h3FC ; 
+//parameter  BIST_REPAIR_ADDR_START   = 10'h3FC ; 
 
 `endif // BIST_DEFINE_SVH
diff --git a/verilog/rtl/mbist/src/mbist_addr_gen.sv b/verilog/rtl/mbist/src/mbist_addr_gen.sv
index a557248..f4570c6 100644
--- a/verilog/rtl/mbist/src/mbist_addr_gen.sv
+++ b/verilog/rtl/mbist/src/mbist_addr_gen.sv
@@ -39,7 +39,14 @@
 
 `include "mbist_def.svh"
 
-module mbist_addr_gen(
+module mbist_addr_gen
+     #(  parameter BIST_ADDR_WD           = 9,
+	 parameter BIST_DATA_WD           = 32,
+	 parameter BIST_ADDR_START        = 9'h000,
+	 parameter BIST_ADDR_END          = 9'h1F8,
+	 parameter BIST_REPAIR_ADDR_START = 9'h1FC,
+	 parameter BIST_RAD_WD_I          = BIST_ADDR_WD,
+	 parameter BIST_RAD_WD_O          = BIST_ADDR_WD) (
 
    output  logic                    last_addr,   //  Last address access
    output  logic [BIST_ADDR_WD-1:0] bist_addr,   //  Bist Address  
diff --git a/verilog/rtl/mbist/src/mbist_data_cmp.sv b/verilog/rtl/mbist/src/mbist_data_cmp.sv
index eebea3a..dc3bbaa 100644
--- a/verilog/rtl/mbist/src/mbist_data_cmp.sv
+++ b/verilog/rtl/mbist/src/mbist_data_cmp.sv
@@ -39,7 +39,15 @@
 `include "mbist_def.svh"
 
 
-module mbist_data_cmp(
+module mbist_data_cmp
+     #(  parameter BIST_ADDR_WD           = 9,
+	 parameter BIST_DATA_WD           = 32,
+	 parameter BIST_ADDR_START        = 9'h000,
+	 parameter BIST_ADDR_END          = 9'h1F8,
+	 parameter BIST_REPAIR_ADDR_START = 9'h1FC,
+	 parameter BIST_RAD_WD_I          = BIST_ADDR_WD,
+	 parameter BIST_RAD_WD_O          = BIST_ADDR_WD) (
+
           output  logic                      error,
 	  output  logic                      error_fix,
 	  output  logic                      correct,
diff --git a/verilog/rtl/mbist/src/mbist_fsm.sv b/verilog/rtl/mbist/src/mbist_fsm.sv
index ac49a81..7d0ae23 100644
--- a/verilog/rtl/mbist/src/mbist_fsm.sv
+++ b/verilog/rtl/mbist/src/mbist_fsm.sv
@@ -37,7 +37,14 @@
 ////          Initial integration                                 ////
 ////                                                              ////
 //////////////////////////////////////////////////////////////////////
-module mbist_fsm (
+module mbist_fsm 
+     #(  parameter BIST_ADDR_WD           = 9,
+	 parameter BIST_DATA_WD           = 32,
+	 parameter BIST_ADDR_START        = 9'h000,
+	 parameter BIST_ADDR_END          = 9'h1F8,
+	 parameter BIST_REPAIR_ADDR_START = 9'h1FC,
+	 parameter BIST_RAD_WD_I          = BIST_ADDR_WD,
+	 parameter BIST_RAD_WD_O          = BIST_ADDR_WD) (
 
 	output logic cmd_phase,    // Command Phase
 	output logic cmp_phase,    // Compare Phase
diff --git a/verilog/rtl/mbist/src/mbist_mux.sv b/verilog/rtl/mbist/src/mbist_mux.sv
index 8ab722d..f210375 100755
--- a/verilog/rtl/mbist/src/mbist_mux.sv
+++ b/verilog/rtl/mbist/src/mbist_mux.sv
@@ -38,7 +38,14 @@
 //////////////////////////////////////////////////////////////////////
 
 `include "mbist_def.svh"
-module   mbist_mux(
+module   mbist_mux
+     #(  parameter BIST_ADDR_WD           = 9,
+	 parameter BIST_DATA_WD           = 32,
+	 parameter BIST_ADDR_START        = 9'h000,
+	 parameter BIST_ADDR_END          = 9'h1F8,
+	 parameter BIST_REPAIR_ADDR_START = 9'h1FC,
+	 parameter BIST_RAD_WD_I          = BIST_ADDR_WD,
+	 parameter BIST_RAD_WD_O          = BIST_ADDR_WD) (
 
       input   logic                      rst_n,
       // MBIST CTRL SIGNAL
diff --git a/verilog/rtl/mbist/src/mbist_op_sel.sv b/verilog/rtl/mbist/src/mbist_op_sel.sv
index 0222d9d..5234801 100644
--- a/verilog/rtl/mbist/src/mbist_op_sel.sv
+++ b/verilog/rtl/mbist/src/mbist_op_sel.sv
@@ -41,7 +41,14 @@
 `include "mbist_def.svh"
 // bist stimulus selection
 
-module mbist_op_sel (
+module mbist_op_sel 
+     #(  parameter BIST_ADDR_WD           = 9,
+	 parameter BIST_DATA_WD           = 32,
+	 parameter BIST_ADDR_START        = 9'h000,
+	 parameter BIST_ADDR_END          = 9'h1F8,
+	 parameter BIST_REPAIR_ADDR_START = 9'h1FC,
+	 parameter BIST_RAD_WD_I          = BIST_ADDR_WD,
+	 parameter BIST_RAD_WD_O          = BIST_ADDR_WD) (
 
         output logic                        op_read       ,  // Opertion Read
 	output logic                        op_write      ,  // Operation Write
diff --git a/verilog/rtl/mbist/src/mbist_pat_sel.sv b/verilog/rtl/mbist/src/mbist_pat_sel.sv
index 6980874..0c56675 100644
--- a/verilog/rtl/mbist/src/mbist_pat_sel.sv
+++ b/verilog/rtl/mbist/src/mbist_pat_sel.sv
@@ -40,7 +40,15 @@
 //-----------------------------------
 // MBIST Data Pattern Selection Logic
 //-----------------------------------
-module mbist_pat_sel (
+module mbist_pat_sel 
+     #(  parameter BIST_ADDR_WD           = 9,
+	 parameter BIST_DATA_WD           = 32,
+	 parameter BIST_ADDR_START        = 9'h000,
+	 parameter BIST_ADDR_END          = 9'h1F8,
+	 parameter BIST_REPAIR_ADDR_START = 9'h1FC,
+	 parameter BIST_RAD_WD_I          = BIST_ADDR_WD,
+	 parameter BIST_RAD_WD_O          = BIST_ADDR_WD) (
+
       output  logic                     pat_last,   // Last pattern
       output  logic [BIST_DATA_WD-1:0]  pat_data,   // pattern data
       output  logic                     sdo,        // scan data output
diff --git a/verilog/rtl/mbist/src/mbist_repair_addr.sv b/verilog/rtl/mbist/src/mbist_repair_addr.sv
index 63e37ee..f6508ac 100644
--- a/verilog/rtl/mbist/src/mbist_repair_addr.sv
+++ b/verilog/rtl/mbist/src/mbist_repair_addr.sv
@@ -42,8 +42,14 @@
 
 `include "mbist_def.svh"
 
-module mbist_repair_addr (
-
+module mbist_repair_addr 
+     #(  parameter BIST_ADDR_WD           = 9,
+	 parameter BIST_DATA_WD           = 32,
+	 parameter BIST_ADDR_START        = 9'h000,
+	 parameter BIST_ADDR_END          = 9'h1F8,
+	 parameter BIST_REPAIR_ADDR_START = 9'h1FC,
+	 parameter BIST_RAD_WD_I          = BIST_ADDR_WD,
+	 parameter BIST_RAD_WD_O          = BIST_ADDR_WD) (
 	
     output logic [BIST_RAD_WD_O-1:0] AddressOut,
     output logic                     Correct,
diff --git a/verilog/rtl/mbist/src/mbist_sti_sel.sv b/verilog/rtl/mbist/src/mbist_sti_sel.sv
index 9443e60..12b069f 100644
--- a/verilog/rtl/mbist/src/mbist_sti_sel.sv
+++ b/verilog/rtl/mbist/src/mbist_sti_sel.sv
@@ -41,7 +41,14 @@
 `include "mbist_def.svh"
 // bist stimulus selection
 
-module mbist_sti_sel (
+module mbist_sti_sel 
+     #(  parameter BIST_ADDR_WD           = 9,
+	 parameter BIST_DATA_WD           = 32,
+	 parameter BIST_ADDR_START        = 9'h000,
+	 parameter BIST_ADDR_END          = 9'h1F8,
+	 parameter BIST_REPAIR_ADDR_START = 9'h1FC,
+	 parameter BIST_RAD_WD_I          = BIST_ADDR_WD,
+	 parameter BIST_RAD_WD_O          = BIST_ADDR_WD) (
 
 	output logic                         sdo           ,  // Scan Data Out
 	output logic                         last_stimulus ,  // last stimulus
diff --git a/verilog/rtl/mbist/src/mbist_top.sv b/verilog/rtl/mbist/src/mbist_top.sv
index f7923a8..7f02c2c 100644
--- a/verilog/rtl/mbist/src/mbist_top.sv
+++ b/verilog/rtl/mbist/src/mbist_top.sv
@@ -39,7 +39,14 @@
 //////////////////////////////////////////////////////////////////////
 
 `include "mbist_def.svh"
-module mbist_top (
+module mbist_top 
+     #(  parameter BIST_ADDR_WD           = 9,
+	 parameter BIST_DATA_WD           = 32,
+	 parameter BIST_ADDR_START        = 9'h000,
+	 parameter BIST_ADDR_END          = 9'h1F8,
+	 parameter BIST_REPAIR_ADDR_START = 9'h1FC,
+	 parameter BIST_RAD_WD_I          = BIST_ADDR_WD,
+	 parameter BIST_RAD_WD_O          = BIST_ADDR_WD) (
 
 	input logic                      bist_clk,
 	input logic                      rst_n,
@@ -134,7 +141,17 @@
 
 // bist main control FSM
 
-mbist_fsm u_fsm (
+mbist_fsm  
+      #(
+	 .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_fsm (
 
 	            .cmd_phase          (cmd_phase           ),
 	            .cmp_phase          (cmp_phase           ),
@@ -158,7 +175,17 @@
 
 
 // bist address generation
-mbist_addr_gen   u_addr_gen(
+mbist_addr_gen   
+      #(
+	 .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_addr_gen(
                     .last_addr          (last_addr          ), 
                     .bist_addr          (bist_addr          ),   
                     .sdo                (bist_addr_sdo      ),         
@@ -175,7 +202,17 @@
 
 
 // BIST current stimulus selection
-mbist_sti_sel u_sti_sel(
+mbist_sti_sel 
+      #(
+	 .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_sti_sel(
 
 	            .sdo                (bist_sti_sdo       ),  
 	            .last_stimulus      (last_sti           ),  
@@ -191,7 +228,17 @@
 
 
 // Bist Operation selection
-mbist_op_sel u_op_sel (
+mbist_op_sel 
+      #(
+	 .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_op_sel (
 
                     .op_read            (op_read            ), 
 	            .op_write           (op_write           ),
@@ -213,7 +260,17 @@
 
 
 
-mbist_pat_sel u_pat_sel (
+mbist_pat_sel 
+      #(
+	 .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_pat_sel (
                     .pat_last           (last_pat           ),
                     .pat_data           (pat_data           ),
                     .sdo                (bist_pat_sdo       ),
@@ -226,7 +283,19 @@
    );
 
 
-mbist_data_cmp  u_cmp (
+mbist_data_cmp  
+      #(
+	 .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_cmp (
                     .error              (bist_error         ),
 		    .error_fix          (bist_error_fix     ),
 		    .error_addr         (bist_error_addr    ),
@@ -241,7 +310,17 @@
 	);
 
 
-mbist_mux  u_mem_sel (
+mbist_mux  
+      #(
+	 .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_mem_sel (
 
                     .rst_n                (rst_n         ),
                     // MBIST CTRL SIGNAL
diff --git a/verilog/rtl/uprj_netlists.v b/verilog/rtl/uprj_netlists.v
index debf315..a92be97 100644
--- a/verilog/rtl/uprj_netlists.v
+++ b/verilog/rtl/uprj_netlists.v
@@ -33,12 +33,15 @@
     `include "mbist/src/mbist_top.sv" 
     `include "mbist/src/mbist_sti_sel.sv" 
     `include "mbist/src/mbist_pat_sel.sv"
-    `include "mbist/src/mbist_mem_sel.sv"
+    `include "mbist/src/mbist_mux.sv"
     `include "mbist/src/mbist_data_cmp.sv"
 
     `include "wb_host/src/wb_host.sv"
     `include "lib/async_fifo.sv"
     `include "lib/async_wb.sv"
     `include "lib/registers.v"
+    `include "lib/clk_ctl.v"
+
+    `include "sram_macros/sky130_sram_2kbyte_1rw1r_32x512_8.v"
 
 `endif
diff --git a/verilog/rtl/user_project_wrapper.v b/verilog/rtl/user_project_wrapper.v
index 7fcda55..6e21693 100644
--- a/verilog/rtl/user_project_wrapper.v
+++ b/verilog/rtl/user_project_wrapper.v
@@ -90,7 +90,7 @@
     output [2:0] user_irq
 );
 
-parameter BIST_ADDR_WD = 10;
+parameter BIST_ADDR_WD = 11;
 parameter BIST_DATA_WD = 32;
 
 
@@ -111,7 +111,7 @@
 // FUNCTIONAL A PORT 
 wire                      func_clk_a;
 wire                      func_cen_a;
-wire  [BIST_ADDR_WD-1:0]  func_addr_a;
+wire  [BIST_ADDR_WD-1:2]  func_addr_a;
 wire  [BIST_DATA_WD-1:0]  func_dout_a;
 
 // Functional B Port
@@ -119,14 +119,14 @@
 wire                      func_cen_b;
 wire                      func_web_b;
 wire [BIST_DATA_WD/8-1:0] func_mask_b;
-wire  [BIST_ADDR_WD-1:0]  func_addr_b;
+wire  [BIST_ADDR_WD-1:2]  func_addr_b;
 wire  [BIST_DATA_WD-1:0]  func_din_b;
 
 
 // towards memory
 // PORT-A
 wire                      mem_clk_a;
-wire   [BIST_ADDR_WD-1:0] mem_addr_a;
+wire   [BIST_ADDR_WD-1:2] mem_addr_a;
 wire                      mem_cen_a;
 wire   [BIST_DATA_WD-1:0] mem_din_b;
 
@@ -135,7 +135,7 @@
 wire                      mem_cen_b;
 wire                      mem_web_b;
 wire [BIST_DATA_WD/8-1:0] mem_mask_b;
-wire [BIST_ADDR_WD-1:0]   mem_addr_b;
+wire [BIST_ADDR_WD-1:2]   mem_addr_b;
 wire [BIST_DATA_WD-1:0]   mem_dout_a;
 
 
@@ -143,11 +143,23 @@
         .user_clock1          (wb_clk_i         ),
         .user_clock2          (user_clock2      ),
 
+    // 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            (                 ),  
         .bist_clk             (bist_clk         ),
         .bist_rst_n           (bist_rst_n       ),
 	.mem_clk_out          (mem_clk_out      ),
 	.mem_clk              (mem_clk_out      ),
-	.wbd_int_rst_n        (wbd_int_rst_n    ),
+	.wbd_int_rst_n        (                 ),
 
 	.bist_en              (bist_en          ),
 	.bist_run             (bist_run         ),
@@ -181,8 +193,13 @@
 
 mbist_top  #(
 	`ifndef SYNTHESIS
-	.BIST_ADDR_WD(9), 
-	.BIST_DATA_WD(32)
+	.BIST_ADDR_WD           (BIST_ADDR_WD-2         ),
+	.BIST_DATA_WD           (BIST_DATA_WD           ),
+	.BIST_ADDR_START        (9'h000                 ),
+	.BIST_ADDR_END          (9'h1F8                 ),
+	.BIST_REPAIR_ADDR_START (9'h1FC                 ),
+	.BIST_RAD_WD_I          (BIST_ADDR_WD-2         ),
+	.BIST_RAD_WD_O          (BIST_ADDR_WD-2         )
         `endif
      ) 
 	     u_mbist (
diff --git a/verilog/rtl/wb_host/src/wb_host.sv b/verilog/rtl/wb_host/src/wb_host.sv
index ab6e248..48a2264 100644
--- a/verilog/rtl/wb_host/src/wb_host.sv
+++ b/verilog/rtl/wb_host/src/wb_host.sv
@@ -104,7 +104,7 @@
       // MEM A PORT 
         output   logic             func_clk_a,
         output   logic             func_cen_a,
-        output   logic  [9:0]      func_addr_a,
+        output   logic  [8:0]      func_addr_a,
         input    logic  [31:0]     func_dout_a,
 
        // Functional B Port
@@ -112,7 +112,7 @@
         output   logic              func_cen_b,
         output   logic              func_web_b,
         output   logic [3:0]        func_mask_b,
-        output   logic  [9:0]       func_addr_b,
+        output   logic  [8:0]       func_addr_b,
         output   logic  [31:0]      func_din_b,
 
 	output   logic  [37:0]      io_out,
@@ -147,6 +147,7 @@
 logic [31:0]        wbm_adr_int;
 logic               wbm_stb_int;
 logic [31:0]        reg_0;  // Software_Reg_0
+logic [31:0]        reg_1;  // Software_Reg_0
 
 logic  [3:0]        cfg_bist_clk_ctrl;
 logic  [3:0]        cfg_mem_clk_ctrl;
@@ -202,10 +203,8 @@
 //-----------------------------------------------------------------------
 // caravel user space is 0x3000_0000 to 0x30FF_FFFF
 // So we have allocated 
+// 0x3000_0000 - 0x307F_7FFF - To SRAM Address Space
 // 0x3080_0000 - 0x3080_00FF - Assigned to WB Host Address Space
-// Since We need more than 16MB Address space to access SDRAM/SPI we have
-// added indirect MSB 8 bit address select option
-// So Address will be {Bank_Sel[7:0], wbm_adr_i[23:0}
 // ---------------------------------------------------------------------
 assign reg_sel       = wb_req & (wbm_adr_i[23] == 1'b1);
 
@@ -242,9 +241,10 @@
 //-------------------------------------
 // Global + Clock Control
 // -------------------------------------
-assign cfg_glb_ctrl         = reg_0[7:0];
-assign cfg_bist_clk_ctrl    = reg_0[11:8];
-assign cfg_mem_clk_ctrl     = reg_0[15:12];
+assign cfg_glb_ctrl         = reg_1[7:0];
+assign cfg_bist_clk_ctrl    = reg_1[11:8];
+assign cfg_mem_clk_ctrl     = reg_1[15:12];
+assign cfg_bank_sel         = reg_1[23:16];
 
 
 // BIST Control
@@ -264,7 +264,7 @@
 
   case (sw_addr [1:0])
     2'b00 :   reg_out [31:0] = reg_0;
-    2'b01 :   reg_out [31:0] = {24'h0,cfg_bank_sel [7:0]};     
+    2'b01 :   reg_out [31:0] = reg_1;
     2'b10 :   reg_out [31:0] = cfg_bist_ctrl [31:0];    
     2'b11 :   reg_out [31:0] = cfg_bist_status [31:0];     
     default : reg_out [31:0] = 'h0;
@@ -272,10 +272,9 @@
 end
 
 
-
-generic_register #(32,0  ) u_glb_ctrl (
-	      .we            ({24{sw_wr_en_0}}   ),		 
-	      .data_in       (wbm_dat_i[23:0]    ),
+generic_register #(32,32'hAABBCCDD  ) u_chip_id (
+	      .we            ({32{sw_wr_en_0}}   ),		 
+	      .data_in       (wbm_dat_i[31:0]    ),
 	      .reset_n       (wbm_rst_n         ),
 	      .clk           (wbm_clk_i         ),
 	      
@@ -283,17 +282,18 @@
 	      .data_out      (reg_0[31:0])
           );
 
-generic_register #(8,8'h10 ) u_bank_sel (
-	      .we            ({8{sw_wr_en_1}}   ),		 
-	      .data_in       (wbm_dat_i[7:0]    ),
+generic_register #(32,32'h100000  ) u_glb_ctrl (
+	      .we            ({32{sw_wr_en_1}}  ),		 
+	      .data_in       (wbm_dat_i[31:0]   ),
 	      .reset_n       (wbm_rst_n         ),
 	      .clk           (wbm_clk_i         ),
 	      
 	      //List of Outs
-	      .data_out      (cfg_bank_sel[7:0] )
+	      .data_out      (reg_1[31:0]       )
           );
 
 
+
 generic_register #(32,0  ) u_clk_ctrl1 (
 	      .we            ({32{sw_wr_en_2}}   ),		 
 	      .data_in       (wbm_dat_i[31:0]    ),
@@ -310,7 +310,7 @@
 
 // Since design need more than 16MB address space, we have implemented
 // indirect access
-assign wbm_adr_int = {cfg_bank_sel[7:0],wbm_adr_i[23:0]};  
+assign wbm_adr_int = {4'b0000,cfg_bank_sel[7:0],wbm_adr_i[19:0]};  
 
 async_wb u_async_wb(
 // Master Port
@@ -346,15 +346,14 @@
 assign func_cen_b     = !wbs_stb_o;
 assign func_web_b     = !wbs_we_o;
 assign func_mask_b    = wbs_sel_o;
-assign func_addr_b    = wbs_adr_o[11:2];
+assign func_addr_b    = wbs_adr_o[10:2];
 assign func_din_b     = wbs_dat_o;
 
 assign func_clk_a     = mem_clk;
 assign func_cen_a     = !(wbs_stb_o == 1'b0 && wbs_we_o == 1'b0);
-assign func_addr_a    = wbs_adr_o[11:2];
+assign func_addr_a    = wbs_adr_o[10:2];
 assign wbs_dat_i      = func_dout_a;
 
-assign wbs_ack_i   = func_cen_a;
 assign wbs_err_i   = 1'b0;
 
 always_ff @(negedge wbs_rst_n or posedge mem_clk) begin