icache,dcache wishbone burst access cleanup
diff --git a/.gitmodules b/.gitmodules
index a8dbba9..df69a25 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -4,6 +4,6 @@
 [submodule "verilog/rtl/qspim"]
 	path = verilog/rtl/qspim
 	url = https://github.com/dineshannayya/qspim.git
-[submodule "verilog/rtl/yifive/ycr1"]
-	path = verilog/rtl/yifive/ycr1
-	url = https://github.com/dineshannayya/ycr1.git
+[submodule "verilog/rtl/yifive/ycr1c"]
+	path = verilog/rtl/yifive/ycr1c
+	url = https://github.com/dineshannayya/ycr1c.git
diff --git a/verilog/dv/firmware/common.mk b/verilog/dv/firmware/common.mk
index 6075f73..402d346 100644
--- a/verilog/dv/firmware/common.mk
+++ b/verilog/dv/firmware/common.mk
@@ -58,8 +58,8 @@
 $(bld_dir)/%.hex: $(bld_dir)/%.elf
 	$(RISCV_ROM_OBJCOPY) $^ $@
 	$(RISCV_RAM_OBJCOPY) $^ $@.ram
-	#assign 0x0048_0xxx  to 0x0000_0xxx to map to TCM Memory
-	sed -i 's/@00480/@00000/g' $@.ram
+	#assign 0x0800_0xxx  to 0x0000_0xxx to map to TCM Memory
+	sed -i 's/@08000/@00000/g' $@.ram
 
 
 $(bld_dir)/%.dump: $(bld_dir)/%.elf
diff --git a/verilog/dv/firmware/link.ld b/verilog/dv/firmware/link.ld
index 5d75e36..0496122 100644
--- a/verilog/dv/firmware/link.ld
+++ b/verilog/dv/firmware/link.ld
@@ -26,8 +26,8 @@
 
 MEMORY {
   ROM (rxx) : ORIGIN = 0x0, LENGTH = 64K
-  TCM (rwx) : ORIGIN = 0x00480000, LENGTH = 4K
-  RAM (rwx) : ORIGIN = 0x10030000, LENGTH = 8K
+  RAM (rwx) : ORIGIN = 0x08000000, LENGTH = 8K
+  TCM (rwx) : ORIGIN = 0x0C480000, LENGTH = 2K
 }
 
 STACK_SIZE = 1024;
@@ -56,20 +56,20 @@
     *(sc_test_section)
     . = ALIGN(CL_SIZE);
      PROVIDE(__TEXT_END__ = .);
-  } >ROM 
+  } >ROM
 
   /* data segment */
   .data : {
     *(.data .data.*)
     . = ALIGN(CL_SIZE);
-  } >TCM
+  } >RAM
 
   .sdata : {
     __global_pointer$ = . + 0x800;
     *(.srodata.cst16) *(.srodata.cst8) *(.srodata.cst4) *(.srodata.cst2) *(.srodata*)
     *(.sdata .sdata.* .gnu.linkonce.s.*)
     . = ALIGN(CL_SIZE);
-  } >TCM
+  } >RAM
 
   /* thread-local data segment */
   .tdata : {
@@ -78,14 +78,14 @@
     *(.tdata .tdata.*)
     PROVIDE(_tdata_end = .);
     . = ALIGN(CL_SIZE);
-  } >TCM
+  } >RAM
 
   .tbss : {
     PROVIDE(__BSS_START__ = .);
     *(.tbss .tbss.*)
     . = ALIGN(CL_SIZE);
     PROVIDE(_tbss_end = .);
-  } >TCM
+  } >RAM
 
   /* bss segment */
   .sbss : {
diff --git a/verilog/dv/firmware/ycr1_specific.h b/verilog/dv/firmware/ycr1_specific.h
index 0f8d70f..4c8c583 100644
--- a/verilog/dv/firmware/ycr1_specific.h
+++ b/verilog/dv/firmware/ycr1_specific.h
@@ -22,12 +22,12 @@
 #define mcounten        0x7E0
 
 // Memory-mapped registers
-#define mtime_ctrl      0x00490000
-#define mtime_div       0x00490004
-#define mtime           0x00490008
-#define mtimeh          0x0049000C
-#define mtimecmp        0x00490010
-#define mtimecmph       0x00490014
+#define mtime_ctrl      0x0C490000
+#define mtime_div       0x0C490004
+#define mtime           0x0C490008
+#define mtimeh          0x0C49000C
+#define mtimecmp        0x0C490010
+#define mtimecmph       0x0C490014
 
 #define YCR1_MTIME_CTRL_EN          0
 #define YCR1_MTIME_CTRL_CLKSRC      1
diff --git a/verilog/dv/risc_boot/Makefile b/verilog/dv/risc_boot/Makefile
index 5b1146a..c8c838c 100644
--- a/verilog/dv/risc_boot/Makefile
+++ b/verilog/dv/risc_boot/Makefile
@@ -30,7 +30,7 @@
 UPRJ_RTL_PATH = $(UPRJ_VERILOG_PATH)/rtl
 UPRJ_BEHAVIOURAL_MODELS = ../model
 UPRJ_BEHAVIOURAL_AGENTS = ../agents
-UPRJ_INCLUDE_PATH1 = $(UPRJ_RTL_PATH)/yifive/ycr1/src/includes
+UPRJ_INCLUDE_PATH1 = $(UPRJ_RTL_PATH)/yifive/ycr1c/src/includes
 UPRJ_INCLUDE_PATH2 = $(UPRJ_RTL_PATH)/sdram_ctrl/src/defs
 UPRJ_INCLUDE_PATH3 = $(UPRJ_RTL_PATH)/i2cm/src/includes
 UPRJ_INCLUDE_PATH4 = $(UPRJ_RTL_PATH)/usb1_host/src/includes
@@ -59,12 +59,12 @@
 vvp:  ${PATTERN:=.vvp}
 
 %.vvp: %_tb.v %.hex
-	${GCC64_PREFIX}-gcc -O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las  -D__RVC_EXT -static -std=gnu99 -fno-common -fno-builtin-printf -DTCM=1 -Wa,-march=rv32imc -march=rv32imc -mabi=ilp32 -DFLAGS_STR=\""-O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las "\"  -c -I./ -I$(YIFIVE_FIRMWARE_PATH)  user_uart.c -o user_uart.o
-	${GCC64_PREFIX}-gcc -O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las  -D__RVC_EXT -static -std=gnu99 -fno-common -fno-builtin-printf -DTCM=1 -Wa,-march=rv32imc -march=rv32imc -mabi=ilp32 -DFLAGS_STR=\""-O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las "\"  -D__ASSEMBLY__=1 -c -I./ -I$(YIFIVE_FIRMWARE_PATH)  $(YIFIVE_FIRMWARE_PATH)/crt_tcm.S -o crt_tcm.o
-	${GCC64_PREFIX}-gcc -march=rv32imc -mabi=ilp32 -T $(YIFIVE_FIRMWARE_PATH)/link_tcm.ld user_uart.o crt_tcm.o -nostartfiles -nostdlib -lc -lgcc -o user_uart.elf -N
+	${GCC64_PREFIX}-gcc -O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las  -D__RVC_EXT -static -std=gnu99 -fno-common -fno-builtin-printf -DTCM=0 -Wa,-march=rv32imc -march=rv32imc -mabi=ilp32 -DFLAGS_STR=\""-O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las "\"  -c -I./ -I$(YIFIVE_FIRMWARE_PATH)  user_uart.c -o user_uart.o
+	${GCC64_PREFIX}-gcc -O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las  -D__RVC_EXT -static -std=gnu99 -fno-common -fno-builtin-printf -DTCM=0 -Wa,-march=rv32imc -march=rv32imc -mabi=ilp32 -DFLAGS_STR=\""-O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las "\"  -D__ASSEMBLY__=1 -c -I./ -I$(YIFIVE_FIRMWARE_PATH)  $(YIFIVE_FIRMWARE_PATH)/crt.S -o crt.o
+	${GCC64_PREFIX}-gcc -march=rv32imc -mabi=ilp32 -T $(YIFIVE_FIRMWARE_PATH)/link.ld user_uart.o crt.o -nostartfiles -nostdlib -lc -lgcc -o user_uart.elf -N
 	${GCC64_PREFIX}-objcopy -O verilog user_uart.elf user_uart.hex
 	${GCC64_PREFIX}-objdump -D user_uart.elf > user_uart.dump
-	rm crt_tcm.o user_uart.o
+	rm crt.o user_uart.o
 ifeq ($(SIM),RTL)
    ifeq ($(DUMP),OFF)
 	iverilog -g2012 -DFUNCTIONAL -DSIM -I $(PDK_PATH) \
diff --git a/verilog/dv/risc_boot/risc_boot_tb.v b/verilog/dv/risc_boot/risc_boot_tb.v
index 4332e90..fec74e4 100644
--- a/verilog/dv/risc_boot/risc_boot_tb.v
+++ b/verilog/dv/risc_boot/risc_boot_tb.v
@@ -162,7 +162,7 @@
 	      $display("Monitor: Test User Risc Boot Started");
        
 	      // Wait for user risc core to boot up 
-              repeat (25000) @(posedge clock);  
+              repeat (30000) @(posedge clock);  
               tb_uart.uart_init;
               tb_uart.control_setup (uart_data_bit, uart_stop_bits, uart_parity_en, uart_even_odd_parity, 
                                              uart_stick_parity, uart_timeout, uart_divisor);
diff --git a/verilog/dv/riscv_regress/Makefile b/verilog/dv/riscv_regress/Makefile
index 8687043..1703420 100644
--- a/verilog/dv/riscv_regress/Makefile
+++ b/verilog/dv/riscv_regress/Makefile
@@ -2,6 +2,9 @@
 # Makefile for SCR1
 #------------------------------------------------------------------------------
 
+SIM ?= RTL
+DUMP ?= OFF
+
 # PARAMETERS
 
 # CFG = <MAX, BASE, MIN, CUSTOM>
@@ -11,20 +14,20 @@
 export BUS      ?= WB
 
 ifeq ($(CFG), MAX)
-# Predefined configuration SCR1_CFG_RV32IMC_MAX
+# Predefined configuration YCR1_CFG_RV32IMC_MAX
     override ARCH         := IMC
     override VECT_IRQ     := 1
     override IPIC         := 1
     override TCM          := 0
-    override SIM_CFG_DEF  := SCR1_CFG_RV32IMC_MAX
+    override SIM_CFG_DEF  := YCR1_CFG_RV32IMC_MAX
 else
     ifeq ($(CFG), BASE)
-    # Predefined configuration SCR1_CFG_RV32IC_BASE
+    # Predefined configuration YCR1_CFG_RV32IC_BASE
         override ARCH         := IC
         override VECT_IRQ     := 1
         override IPIC         := 1
         override TCM          := 0
-        override SIM_CFG_DEF  := SCR1_CFG_RV32IC_BASE
+        override SIM_CFG_DEF  := YCR1_CFG_RV32IC_BASE
     else
         ifeq ($(CFG), MIN)
         # Predefined configuration SCR1_CFG_RV32EC_MIN
@@ -32,10 +35,10 @@
             override VECT_IRQ     := 0
             override IPIC         := 0
             override TCM          := 0
-            override SIM_CFG_DEF  := SCR1_CFG_RV32EC_MIN
+            override SIM_CFG_DEF  := YCR1_CFG_RV32EC_MIN
         else
         # CUSTOM configuration. Parameters can be overwritten
-            # These options are for compiling tests only. Set the corresponding RTL parameters manually in the file scr1_arch_description.svh.
+            # These options are for compiling tests only. Set the corresponding RTL parameters manually in the file ycr1_arch_description.svh.
             # ARCH = <IMC, IC, IM, I, EMC, EM, EC, E>
             # VECT_IRQ = <0, 1>
             # IPIC = <0, 1>
@@ -44,7 +47,7 @@
             VECT_IRQ  ?= 0
             IPIC      ?= 0
             TCM       ?= 0
-            SIM_CFG_DEF  = SCR1_CFG_$(CFG)
+            SIM_CFG_DEF  = YCR1_CFG_$(CFG)
         endif
     endif
 endif
@@ -83,9 +86,9 @@
 TRACE ?= 0
 
 ifeq ($(TRACE), 1)
-    export SIM_TRACE_DEF = SCR1_TRACE_LOG_EN
+    export SIM_TRACE_DEF = YCR1_TRACE_LOG_EN
 else
-    export SIM_TRACE_DEF = SCR1_TRACE_LOG_DIS
+    export SIM_TRACE_DEF = YCR1_TRACE_LOG_DIS
 endif
 
 
@@ -133,7 +136,7 @@
 UPRJ_GL_PATH = $(UPRJ_VERILOG_PATH)/gl
 UPRJ_BEHAVIOURAL_MODELS = $(root_dir)/../model
 UPRJ_BEHAVIOURAL_AGENTS = $(root_dir)/../agents
-UPRJ_INCLUDE_PATH1 = $(UPRJ_RTL_PATH)/yifive/ycr1/src/includes
+UPRJ_INCLUDE_PATH1 = $(UPRJ_RTL_PATH)/yifive/ycr1c/src/includes
 UPRJ_INCLUDE_PATH2 = $(UPRJ_RTL_PATH)/sdram_ctrl/src/defs
 UPRJ_INCLUDE_PATH3 = $(UPRJ_RTL_PATH)/i2cm/src/includes
 UPRJ_INCLUDE_PATH4 = $(UPRJ_RTL_PATH)/usb1_host/src/includes
@@ -157,9 +160,11 @@
 export CROSS_PREFIX  ?= riscv64-unknown-elf-
 export RISCV_GCC     ?= $(CROSS_PREFIX)gcc
 export RISCV_OBJDUMP ?= $(CROSS_PREFIX)objdump -D
+export RISCV_OBJCOPY ?= $(CROSS_PREFIX)objcopy -O verilog
 export RISCV_ROM_OBJCOPY ?= $(CROSS_PREFIX)objcopy -j .text.init -j .text -j .rodata -j .rodata.str1.4 -O verilog
 #Seperate the RAM content and write out in 32bit Little endian format to load it to TCM Memory
-export RISCV_RAM_OBJCOPY ?= $(CROSS_PREFIX)objcopy -R .text.init -R .text -R .rodata -R .rodata.str1.4 -R .riscv.attributes -R .comment -R .debug_abbrev -R .debug_loc -R .debug_str -O verilog --verilog-data-width=4 --reverse-bytes=4
+#export RISCV_RAM_OBJCOPY ?= $(CROSS_PREFIX)objcopy -R .text.init -R .text -R .rodata -R .rodata.str1.4 -R .riscv.attributes -R .comment -R .debug_abbrev -R .debug_loc -R .debug_str -O verilog --verilog-data-width=4 --reverse-bytes=4
+export RISCV_RAM_OBJCOPY ?= $(CROSS_PREFIX)objcopy -R .text.init -R .text -R .rodata -R .rodata.str1.4 -O verilog
 export RISCV_READELF ?= $(CROSS_PREFIX)readelf -s
 
 ifneq (,$(findstring e,$(ARCH_lowercase)))
@@ -177,11 +182,11 @@
 	TARGETS += riscv_isa
 
 	# Comment this target if you don't want to run the riscv_compliance
-	#TARGETS += riscv_compliance
+	TARGETS += riscv_compliance
 endif
 
 # Comment this target if you don't want to run the isr_sample
-#TARGETS += isr_sample
+TARGETS += isr_sample
 
 # Comment this target if you don't want to run the coremark
 #TARGETS += coremark
@@ -194,7 +199,7 @@
 
 
 # Targets
-.PHONY: tests run_iverilog run_modelsim run_modelsim_wlf run_vcs run_ncsim run_verilator run_verilator_wf run_iverilog_wf
+.PHONY: tests run_iverilog run_iverilog_wf run_modelsim run_modelsim_wlf run_vcs run_ncsim run_verilator run_verilator_wf
 
 default: clean_test_list run_iverilog
 
diff --git a/verilog/dv/riscv_regress/riscv_runtests.sv b/verilog/dv/riscv_regress/riscv_runtests.sv
index 40dc43b..7a398c2 100644
--- a/verilog/dv/riscv_regress/riscv_runtests.sv
+++ b/verilog/dv/riscv_regress/riscv_runtests.sv
@@ -53,7 +53,7 @@
            $display("RISCV-DEBUG => DMEM ADDRESS: %x READ Data : %x Resonse: %x", core2dmem_addr_o_r,`RISC_CORE.dmem2core_rdata_i,`RISC_CORE.dmem2core_resp_i);
  end
 **/
-/**
+/***
   logic [31:0] test_count;
  `define RISC_CORE  u_top.u_riscv_top.i_core_top
  `define RISC_EXU  u_top.u_riscv_top.i_core_top.i_pipe_top.i_pipe_exu
@@ -69,15 +69,21 @@
                test_count <= test_count+1;
 	  end
  end
-**/
+***/
 
-always_ff @(posedge clk) begin
+always @(posedge clk) begin
     bit test_pass;
     int unsigned                            f_test;
+    int unsigned                            f_test_ram;
     if (test_running) begin
         test_pass = 1;
         rst_init <= 1'b0;
-        if ((u_top.u_riscv_top.i_core_top.i_pipe_top.curr_pc == SCR1_SIM_EXIT_ADDR) & ~rst_init & &rst_cnt) begin
+	if(u_top.u_riscv_top.i_core_top.i_pipe_top.i_pipe_exu.pc_curr_ff === 32'hxxxx_xxxx) begin
+	   $display("ERROR: CURRENT PC Counter State is Known");
+	   $finish;
+	end
+        if ((u_top.u_riscv_top.i_core_top.i_pipe_top.i_pipe_exu.exu2pipe_pc_curr_o == YCR1_SIM_EXIT_ADDR) & ~rst_init & &rst_cnt) begin
+
             `ifdef VERILATOR
                 logic [255:0] full_filename;
                 full_filename = test_file;
@@ -87,7 +93,6 @@
             `endif // VERILATOR
 
             if (is_compliance(test_file)) begin
-
                 logic [31:0] tmpv, start, stop, ref_data, test_data;
                 integer fd;
                 `ifdef VERILATOR
@@ -95,6 +100,13 @@
                 `else // VERILATOR
                 string tmpstr;
                 `endif // VERILATOR
+
+	        // Flush the content of dcache for signature validation at app
+	        // memory	
+	        force u_top.u_riscv_top.u_intf.u_dcache.cfg_force_flush = 1'b1;
+	        wait(u_top.u_riscv_top.u_intf.u_dcache.force_flush_done == 1'b1);
+	        release u_top.u_riscv_top.u_intf.u_dcache.cfg_force_flush;
+		$display("STATUS: Checking Complaince Test Status .... ");
                 test_running <= 1'b0;
                 test_pass = 1;
 
@@ -107,6 +119,7 @@
                 end
                 $fwrite(fd, "%s", tmpstr);
                 $fclose(fd);
+
                 $system("sh script.sh");
 
                 fd = $fopen("elfinfo", "r");
@@ -126,11 +139,14 @@
                     stop = tmpv;
                 end
                 $fclose(fd);
+		start = start & 32'h07FF_FFFF;
+	        stop  = stop & 32'h07FF_FFFF;
+		$display("Complaince Signature Start Address: %x End Address:%x",start,stop);
 
-		if((start & 32'h1FFF) > 512)
-			$display("ERROR: Start address is more than 512, Start: %x",start & 32'h1FFF);
-		if((stop & 32'h1FFF) > 512)
-			$display("ERROR: Stop address is more than 512, Start: %x",stop & 32'h1FFF);
+		//if((start & 32'h1FFF) > 512)
+		//	$display("ERROR: Start address is more than 512, Start: %x",start & 32'h1FFF);
+		//if((stop & 32'h1FFF) > 512)
+		//	$display("ERROR: Stop address is more than 512, Start: %x",stop & 32'h1FFF);
 
                 `ifdef SIGNATURE_OUT
 
@@ -140,10 +156,7 @@
 `endif
                     fd = $fopen(tmpstr, "w");
                     while ((start != stop)) begin
-                        test_data[31:24] = u_top.u_tsram0_2kb.mem[(start & 32'h1FFF)+3];
-                        test_data[23:16] = u_top.u_tsram0_2kb.mem[(start & 32'h1FFF)+2];
-                        test_data[15:8]  = u_top.u_tsram0_2kb.mem[(start & 32'h1FFF)+1];
-                        test_data[7:0]   = u_top.u_tsram0_2kb.mem[(start & 32'h1FFF)+0];
+                        test_data = u_top.u_mbist.u_sram0_2kb.mem[(start & 32'h1FFF)];
                         $fwrite(fd, "%x", test_data);
                         $fwrite(fd, "%s", "\n");
                         start += 4;
@@ -167,11 +180,13 @@
 			// other-wise need to switch bank
 			// --------------------------------------------------
 		        //$writememh("sram0_out.hex",u_top.u_tsram0_2kb.mem,0,511);
-                        test_data = u_top.u_tsram0_2kb.mem[((start >> 2) & 32'h1FFF)];
+                        test_data = u_top.u_mbist.u_sram0_2kb.mem[((start >> 2) & 32'h1FFF)];
 			//$display("Compare Addr: %x ref_data : %x, test_data: %x",start,ref_data,test_data);
                         test_pass &= (ref_data == test_data);
 			if(ref_data != test_data)
 			   $display("ERROR: Compare Addr: %x Mem Addr: %x ref_data : %x, test_data: %x",start,start & 32'h1FFF,ref_data,test_data);
+			else
+			   $display("STATUS: Compare Addr: %x Mem Addr: %x ref_data : %x",start,start & 32'h1FFF,ref_data);
                         start += 4;
                     end
                     $fclose(fd);
@@ -217,7 +232,7 @@
             f_test = $fopen(test_file,"r");
             if (f_test != 0) begin
             // Launch new test
-                `ifdef SCR1_TRACE_LOG_EN
+                `ifdef YCR1_TRACE_LOG_EN
                     u_top.u_riscv_top.i_core_top.i_pipe_top.i_tracelog.test_name = test_file;
                 `endif // SCR1_TRACE_LOG_EN
                 //i_memory_tb.test_file = test_file;
diff --git a/verilog/dv/riscv_regress/run_iverilog b/verilog/dv/riscv_regress/run_iverilog
index 8200d99..fbd8e05 100755
--- a/verilog/dv/riscv_regress/run_iverilog
+++ b/verilog/dv/riscv_regress/run_iverilog
@@ -9,9 +9,23 @@
 riscv64-unknown-elf-gcc -o /home/dinesha/workarea/opencore/git/riscduino/verilog/dv/riscv_regress/build/iverilog_WB_MAX_imc_IPIC_1_TCM_1_VIRQ_1_TRACE_0/hello.elf -T /home/dinesha/workarea/opencore/git/riscduino/verilog/dv/riscv_regress/../../../verilog/rtl/syntacore/scr1/sim/tests/common/link_tcm.ld /home/dinesha/workarea/opencore/git/riscduino/verilog/dv/riscv_regress/build/iverilog_WB_MAX_imc_IPIC_1_TCM_1_VIRQ_1_TRACE_0/sc_print.o /home/dinesha/workarea/opencore/git/riscduino/verilog/dv/riscv_regress/build/iverilog_WB_MAX_imc_IPIC_1_TCM_1_VIRQ_1_TRACE_0/hello.o /home/dinesha/workarea/opencore/git/riscduino/verilog/dv/riscv_regress/build/iverilog_WB_MAX_imc_IPIC_1_TCM_1_VIRQ_1_TRACE_0/crt_tcm.o -nostartfiles -nostdlib -lc -lgcc -march=rv32imc -mabi=ilp32
 rm /home/dinesha/workarea/opencore/git/riscduino/verilog/dv/riscv_regress/build/iverilog_WB_MAX_imc_IPIC_1_TCM_1_VIRQ_1_TRACE_0/sc_print.o /home/dinesha/workarea/opencore/git/riscduino/verilog/dv/riscv_regress/build/iverilog_WB_MAX_imc_IPIC_1_TCM_1_VIRQ_1_TRACE_0/crt_tcm.o /home/dinesha/workarea/opencore/git/riscduino/verilog/dv/riscv_regress/build/iverilog_WB_MAX_imc_IPIC_1_TCM_1_VIRQ_1_TRACE_0/hello.o
 
-cd /home/dinesha/workarea/opencore/git/riscduino/verilog/dv/riscv_regress/build/iverilog_WB_MAX_imc_IPIC_1_TCM_1_VIRQ_1_TRACE_0
+cd build/iverilog_WB_MAX_imc_IPIC_1_TCM_1_VIRQ_1_TRACE_0
 
-iverilog -g2005-sv -DFUNCTIONAL -DWFDUMP -DSIM -I /opt/pdk/sky130A -I /home/dinesha/workarea/efabless/MPW-4/caravel/verilog/dv/caravel -I /home/dinesha/workarea/efabless/MPW-4/caravel/verilog/rtl -I /home/dinesha/workarea/opencore/git/riscduino/verilog/dv/riscv_regress/../model    -I /home/dinesha/workarea/opencore/git/riscduino/verilog/dv/riscv_regress/../../../verilog/rtl -I /home/dinesha/workarea/opencore/git/riscduino/verilog/dv/riscv_regress/../../../verilog -I /home/dinesha/workarea/opencore/git/riscduino/verilog/dv/riscv_regress/../agents    -I /home/dinesha/workarea/opencore/git/riscduino/verilog/dv/riscv_regress/../../../verilog/rtl/syntacore/scr1/src/includes    -I /home/dinesha/workarea/opencore/git/riscduino/verilog/dv/riscv_regress/../../../verilog/rtl/sdram_ctrl/src/defs -I /home/dinesha/workarea/opencore/git/riscduino/verilog/dv/riscv_regress/../../../verilog/rtl/i2cm/src/includes -I /home/dinesha/workarea/opencore/git/riscduino/verilog/dv/riscv_regress/../../../verilog/rtl/usb1_host/src/includes -I /home/dinesha/workarea/opencore/git/riscduino/verilog/dv/riscv_regress/../../../verilog/rtl/mbist/include -I /home/dinesha/workarea/opencore/git/riscduino/verilog/dv/riscv_regress ../../user_risc_regress_tb.v -o user_risc_regress_tb.vvp
+iverilog -g2005-sv -DWFDUMP -DFUNCTIONAL -DSIM -I $PDK_ROOT/sky130A \
+-I $CARAVEL_ROOT/verilog/dv/caravel \
+-I $CARAVEL_ROOT/verilog/rtl \
+-I ../../../model    \
+-I ../../../../../verilog/rtl \
+-I ../../../../../verilog \
+-I ../../../agents    \
+-I ../../../../../verilog/rtl/yifive/ycr1c/src/includes \
+-I ../../../../../verilog/rtl/sdram_ctrl/src/defs \
+-I ../../../../../verilog/rtl/i2cm/src/includes \
+-I ../../../../../verilog/rtl/usb1_host/src/includes \
+-I ../../../../../verilog/rtl/mbist/include \
+-I ../.. \
+../../user_risc_regress_tb.v \
+-o user_risc_regress_tb.vvp
 
 iverilog-vpi ../../../vpi/system/system.c
 
diff --git a/verilog/dv/riscv_regress/tests/hello/hello.c b/verilog/dv/riscv_regress/tests/hello/hello.c
index 52cf1bc..af5c6e3 100644
--- a/verilog/dv/riscv_regress/tests/hello/hello.c
+++ b/verilog/dv/riscv_regress/tests/hello/hello.c
@@ -2,6 +2,6 @@
 
 int main()
 {
-    sc_printf("Hello from SCR1!\n");
+    sc_printf("Hello from YCR1!\n");
     return 0;
-}
\ No newline at end of file
+}
diff --git a/verilog/dv/riscv_regress/tests/isr_sample/timer.h b/verilog/dv/riscv_regress/tests/isr_sample/timer.h
index b81bcc8..827b849 100644
--- a/verilog/dv/riscv_regress/tests/isr_sample/timer.h
+++ b/verilog/dv/riscv_regress/tests/isr_sample/timer.h
@@ -4,12 +4,12 @@
 
 
 #define MEM_MTIME_MASK  0xF0000000
-#define MEM_MTIME_CTRL  0x00490000
-#define MEM_MTIME_DIV   0x00490004
-#define MEM_MTIME       0x00490008
-#define MEM_MTIMEH      0x0049000C
-#define MEM_MTIMECMP    0x00490010
-#define MEM_MTIMECMPH   0x00490014
+#define MEM_MTIME_CTRL  0x0C490000
+#define MEM_MTIME_DIV   0x0C490004
+#define MEM_MTIME       0x0C490008
+#define MEM_MTIMEH      0x0C49000C
+#define MEM_MTIMECMP    0x0C490010
+#define MEM_MTIMECMPH   0x0C490014
 
 #define TMP   t0
 #define TMP2  t1
@@ -78,7 +78,7 @@
 .macro _run_timer
     li          TMP, MEM_MTIME_CTRL
     lw          TMP2, 0(TMP)
-    li          TMP3, (1 << SCR1_MTIME_CTRL_EN)
+    li          TMP3, (1 << YCR1_MTIME_CTRL_EN)
     or          TMP2, TMP2, TMP3
     sw          TMP2, 0(TMP)
 .endm
@@ -86,7 +86,7 @@
 .macro _stop_timer
     li          TMP, MEM_MTIME_CTRL
     lw          TMP2, 0(TMP)
-    li          TMP3, (1 << SCR1_MTIME_CTRL_EN)
+    li          TMP3, (1 << YCR1_MTIME_CTRL_EN)
     not         TMP3, TMP3
     and         TMP2, TMP2, TMP3
     sw          TMP2, 0(TMP)
diff --git a/verilog/dv/riscv_regress/tests/riscv_compliance/Makefile b/verilog/dv/riscv_regress/tests/riscv_compliance/Makefile
index e04fc87..98f3d5f 100644
--- a/verilog/dv/riscv_regress/tests/riscv_compliance/Makefile
+++ b/verilog/dv/riscv_regress/tests/riscv_compliance/Makefile
@@ -1,8 +1,6 @@
 ## @file
-## Syntacore SCR* tests
+##  YCR* tests
 ##
-## @copyright 2015-2018 Syntacore. All rights reserved.
-## RISCV-Compliance
 ##
 
 ARCH ?=im
@@ -16,7 +14,7 @@
 
 ifeq (rv32e,$(findstring rv32e,$(ARCH)))
     $(info >>> RV32E - no compliance tests)
-else ## ifdef SCR_BASE_RVE_EXT
+else ## ifdef YCR_BASE_RVE_EXT
   #ifeq (rv32i,$(findstring rv32i,$(ARCH)))
   ifeq ($(ARCH),$(filter $(ARCH),rv32i rv32im rv32imc rv32ic))
     $(info >>> I32 TESTS)
@@ -134,8 +132,8 @@
 $(dst_dir)/compliance_%.hex: $(dst_dir)/compliance_%.elf
 	$(RISCV_ROM_OBJCOPY) $^ $@
 	$(RISCV_RAM_OBJCOPY) $^ $@.ram
-	#assign 0x0048_0xxx  to 0x0000_0xxx to map to TCM Memory
-	sed -i 's/@00480/@00000/g' $@.ram
+	#assign 0x0800_0xxx  to 0x0000_0xxx to map to TCM Memory
+	sed -i 's/@08000/@00000/g' $@.ram
 
 $(bld_dir)/compliance_%.dump: $(dst_dir)/compliance_%.elf
 	$(RISCV_OBJDUMP) -D -w -x -S $^ > $@
diff --git a/verilog/dv/riscv_regress/tests/riscv_isa/Makefile b/verilog/dv/riscv_regress/tests/riscv_isa/Makefile
index a572172..2f0fa3f 100644
--- a/verilog/dv/riscv_regress/tests/riscv_isa/Makefile
+++ b/verilog/dv/riscv_regress/tests/riscv_isa/Makefile
@@ -44,8 +44,8 @@
 $(bld_dir)/%.hex: $(bld_dir)/%.elf
 	$(RISCV_ROM_OBJCOPY) $^ $@
 	$(RISCV_RAM_OBJCOPY) $^ $@.ram
-	#assign 0x0048_0xxx  to 0x0000_0xxx to map to TCM Memory
-	sed -i 's/@00480/@00000/g' $@.ram
+	#assign 0x0800_0xxx  to 0x0000_0xxx to map to TCM Memory
+	sed -i 's/@08000/@00000/g' $@.ram
 
 $(bld_dir)/%.dump: $(bld_dir)/%.elf
 	$(RISCV_OBJDUMP) $^ > $@
diff --git a/verilog/dv/riscv_regress/user_risc_regress_tb.v b/verilog/dv/riscv_regress/user_risc_regress_tb.v
index 1384d19..41f5bb4 100644
--- a/verilog/dv/riscv_regress/user_risc_regress_tb.v
+++ b/verilog/dv/riscv_regress/user_risc_regress_tb.v
@@ -77,6 +77,12 @@
 `include "uprj_netlists.v"
 `include "mt48lc8m8a2.v"
 
+localparam [31:0]      YCR1_SIM_EXIT_ADDR      = 32'h0000_00F8;
+localparam [31:0]      YCR1_SIM_PRINT_ADDR     = 32'hF000_0000;
+localparam [31:0]      YCR1_SIM_EXT_IRQ_ADDR   = 32'hF000_0100;
+localparam [31:0]      YCR1_SIM_SOFT_IRQ_ADDR  = 32'hF000_0200;
+
+
 module user_risc_regress_tb;
 	reg clock;
 	reg wb_rst_i;
@@ -133,7 +139,8 @@
         int unsigned           tests_passed;
         int unsigned           tests_total;
 
-	logic  [31:0]           tem_mem[0:1047];
+	logic  [7:0]           tem_mem[0:4095];
+	logic  [31:0]          mem_data;
 
 
 	//-----------------------------------------------------------------
@@ -180,7 +187,9 @@
 	   	$dumpvars(1, user_risc_regress_tb);
 	   	$dumpvars(1, user_risc_regress_tb.u_top);
 	   	$dumpvars(0, user_risc_regress_tb.u_top.u_riscv_top);
-	   	$dumpvars(0, user_risc_regress_tb.u_top.u_pinmux);
+	   	$dumpvars(0, user_risc_regress_tb.u_top.u_qspi_master);
+	   	$dumpvars(0, user_risc_regress_tb.u_top.u_intercon);
+	   	$dumpvars(0, user_risc_regress_tb.u_top.u_mbist);
 	   end
        `endif
 
@@ -200,17 +209,21 @@
 		// some of the RISCV test need SRAM area for specific
 		// instruction execution like fence
 		$sformat(test_ram_file, "%s.ram",test_file);
-		// Load the RAM content to local temp memory
-                $readmemh(test_ram_file,tem_mem);
 		// Split the Temp memory content to two sram file
                 $readmemh(test_ram_file,tem_mem);
-		$writememh("sram0.hex",tem_mem,0,511);
-                $writememh("sram1.hex",tem_mem,512,1023);
 		// Load the SRAM0/SRAM1 with 2KB data
-                $write("\033[0;34m---Initializing the u_tsram0_2kb Memory with Hexfile: sram0.hex\033[0m\n");
-                $readmemh("sram0.hex",u_top.u_tsram0_2kb.mem);
-                $write("\033[0;34m---Initializing the u_tsram1_2kb Memory with Hexfile: sram1.hex\033[0m\n");
-                $readmemh("sram1.hex",u_top.u_tsram1_2kb.mem);
+                $write("\033[0;34m---Initializing the u_sram0_2kb Memory with Hexfile: %s\033[0m\n",test_ram_file);
+		// Initializing the SRAM
+		for(i = 0 ; i < 2048; i = i +4) begin
+		    mem_data = {tem_mem[i+3],tem_mem[i+2],tem_mem[i+1],tem_mem[i+0]};
+		    //$display("Filling Mem Location : %x with data : %x",i, mem_data);
+		    u_top.u_mbist.u_sram0_2kb.mem[i/4] = mem_data;
+		end
+		for(i = 2048 ; i < 4096; i = i +4) begin
+		  mem_data = {tem_mem[i+3],tem_mem[i+2],tem_mem[i+1],tem_mem[i+0]};
+		  //$display("Filling Mem Location : %x with data : %x",i, mem_data);
+		  u_top.u_mbist.u_sram1_2kb.mem[(2048-i)/4] = mem_data;
+		end
 
 		//for(i =32'h00; i < 32'h100; i = i+1)
                 //    $display("Location: %x, Data: %x", i, u_top.u_tsram0_2kb.mem[i]);
@@ -230,8 +243,10 @@
 
 	        repeat (2) @(posedge clock);
 		#1;
+		// Enable the DCACHE Remap to SRAM region
+		wb_user_core_write('h3080_000C,{4'b0000,4'b1111, 24'h0});
 		// Remove all the reset
-                wb_user_core_write('h3080_0000,'hF);
+                wb_user_core_write('h3080_0000,'h8F);
 
 	end
 
diff --git a/verilog/dv/uart_master/Makefile b/verilog/dv/uart_master/Makefile
index a207608..ec6f963 100644
--- a/verilog/dv/uart_master/Makefile
+++ b/verilog/dv/uart_master/Makefile
@@ -31,7 +31,7 @@
 UPRJ_GL_PATH = $(UPRJ_VERILOG_PATH)/gl
 UPRJ_BEHAVIOURAL_MODELS = ../model
 UPRJ_BEHAVIOURAL_AGENTS = ../agents
-UPRJ_INCLUDE_PATH1 = $(UPRJ_RTL_PATH)/yifive/ycr1/src/includes
+UPRJ_INCLUDE_PATH1 = $(UPRJ_RTL_PATH)/yifive/ycr1c/src/includes
 UPRJ_INCLUDE_PATH2 = $(UPRJ_RTL_PATH)/sdram_ctrl/src/defs
 UPRJ_INCLUDE_PATH3 = $(UPRJ_RTL_PATH)/i2cm/src/includes
 UPRJ_INCLUDE_PATH4 = $(UPRJ_RTL_PATH)/usb1_host/src/includes
diff --git a/verilog/dv/user_basic/Makefile b/verilog/dv/user_basic/Makefile
index 2c0b01f..e1558d4 100644
--- a/verilog/dv/user_basic/Makefile
+++ b/verilog/dv/user_basic/Makefile
@@ -29,7 +29,7 @@
 UPRJ_GL_PATH = $(UPRJ_VERILOG_PATH)/gl
 UPRJ_BEHAVIOURAL_MODELS = ../model
 UPRJ_BEHAVIOURAL_AGENTS = ../agents
-UPRJ_INCLUDE_PATH1 = $(UPRJ_RTL_PATH)/yifive/ycr1/src/includes
+UPRJ_INCLUDE_PATH1 = $(UPRJ_RTL_PATH)/yifive/ycr1c/src/includes
 UPRJ_INCLUDE_PATH2 = $(UPRJ_RTL_PATH)/sdram_ctrl/src/defs
 UPRJ_INCLUDE_PATH3 = $(UPRJ_RTL_PATH)/i2cm/src/includes
 UPRJ_INCLUDE_PATH4 = $(UPRJ_RTL_PATH)/usb1_host/src/includes
diff --git a/verilog/dv/user_i2cm/Makefile b/verilog/dv/user_i2cm/Makefile
index 605c623..5788ed8 100644
--- a/verilog/dv/user_i2cm/Makefile
+++ b/verilog/dv/user_i2cm/Makefile
@@ -29,7 +29,7 @@
 UPRJ_GL_PATH = $(UPRJ_VERILOG_PATH)/gl
 UPRJ_BEHAVIOURAL_MODELS = ../model
 UPRJ_BEHAVIOURAL_AGENTS = ../agents
-UPRJ_INCLUDE_PATH1 = $(UPRJ_RTL_PATH)/yifive/ycr1/src/includes
+UPRJ_INCLUDE_PATH1 = $(UPRJ_RTL_PATH)/yifive/ycr1c/src/includes
 UPRJ_INCLUDE_PATH2 = $(UPRJ_RTL_PATH)/sdram_ctrl/src/defs
 UPRJ_INCLUDE_PATH3 = $(UPRJ_RTL_PATH)/i2cm/src/includes
 UPRJ_INCLUDE_PATH4 = $(UPRJ_RTL_PATH)/usb1_host/src/includes
diff --git a/verilog/dv/user_mbist_test1/Makefile b/verilog/dv/user_mbist_test1/Makefile
index 3263b33..685d6ba 100644
--- a/verilog/dv/user_mbist_test1/Makefile
+++ b/verilog/dv/user_mbist_test1/Makefile
@@ -29,7 +29,7 @@
 UPRJ_GL_PATH = $(UPRJ_VERILOG_PATH)/gl
 UPRJ_BEHAVIOURAL_MODELS = ../model
 UPRJ_BEHAVIOURAL_AGENTS = ../agents
-UPRJ_INCLUDE_PATH1 = $(UPRJ_RTL_PATH)/yifive/ycr1/src/includes
+UPRJ_INCLUDE_PATH1 = $(UPRJ_RTL_PATH)/yifive/ycr1c/src/includes
 UPRJ_INCLUDE_PATH2 = $(UPRJ_RTL_PATH)/sdram_ctrl/src/defs
 UPRJ_INCLUDE_PATH3 = $(UPRJ_RTL_PATH)/i2cm/src/includes
 UPRJ_INCLUDE_PATH4 = $(UPRJ_RTL_PATH)/usb1_host/src/includes
@@ -84,7 +84,7 @@
 endif
 
 %.vcd: %.vvp
-	vvp $<
+	vvp $<  | tee sim_result.log
 
 check-env:
 ifndef PDK_ROOT
diff --git a/verilog/dv/user_mbist_test1/user_mbist_test1_tb.v b/verilog/dv/user_mbist_test1/user_mbist_test1_tb.v
index 9637b3c..076c60a 100644
--- a/verilog/dv/user_mbist_test1/user_mbist_test1_tb.v
+++ b/verilog/dv/user_mbist_test1/user_mbist_test1_tb.v
@@ -635,7 +635,6 @@
 	        end else begin
 	    	    $display("Monitor: Step-6.4: BIST Test with Five Memory Error insertion test Failed");
 		 end
-
 		$dumpon;
 	    	$display("###################################################");
 	    	$display(" MBIST Test with Functional Access, continuation of previous MBIST Signature");
@@ -644,6 +643,8 @@
 		begin
 		    // Remove the Bist Enable and Bist Run
                     wb_user_core_write(`GLBL_BIST_CTRL1,'h000);
+                    // Remove WB and BIST RESET
+                    wb_user_core_write(`WB_GLBL_CTRL,'h081);
   
 	            // Fill Random Data	
 		    for (i=0; i< 9'h1FC; i=i+1) begin
@@ -850,80 +851,80 @@
          repeat (1) @(posedge clock);
          #1;
 
-         if(u_top.u_sram0_2kb.web0 == 1'b0 && 
-	   ((num_fault[0] > 0 && u_top.u_sram0_2kb.addr0 == faultaddr[0]) ||
-	    (num_fault[0] > 1 && u_top.u_sram0_2kb.addr0 == faultaddr[1]) ||
-	    (num_fault[0] > 2 && u_top.u_sram0_2kb.addr0 == faultaddr[2]) ||
-	    (num_fault[0] > 3 && u_top.u_sram0_2kb.addr0 == faultaddr[3]) ||
-	    (num_fault[0] > 4 && u_top.u_sram0_2kb.addr0 == faultaddr[4]) ||
-	    (num_fault[0] > 5 && u_top.u_sram0_2kb.addr0 == faultaddr[5]) ||
-	    (num_fault[0] > 6 && u_top.u_sram0_2kb.addr0 == faultaddr[6]) ||
-	    (num_fault[0] > 7 && u_top.u_sram0_2kb.addr0 == faultaddr[7])))
+         if(u_top.u_mbist.u_sram0_2kb.web0 == 1'b0 && 
+	   ((num_fault[0] > 0 && u_top.u_mbist.u_sram0_2kb.addr0 == faultaddr[0]) ||
+	    (num_fault[0] > 1 && u_top.u_mbist.u_sram0_2kb.addr0 == faultaddr[1]) ||
+	    (num_fault[0] > 2 && u_top.u_mbist.u_sram0_2kb.addr0 == faultaddr[2]) ||
+	    (num_fault[0] > 3 && u_top.u_mbist.u_sram0_2kb.addr0 == faultaddr[3]) ||
+	    (num_fault[0] > 4 && u_top.u_mbist.u_sram0_2kb.addr0 == faultaddr[4]) ||
+	    (num_fault[0] > 5 && u_top.u_mbist.u_sram0_2kb.addr0 == faultaddr[5]) ||
+	    (num_fault[0] > 6 && u_top.u_mbist.u_sram0_2kb.addr0 == faultaddr[6]) ||
+	    (num_fault[0] > 7 && u_top.u_mbist.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;
+	      force u_top.u_mbist.u_sram0_2kb.din0 = u_top.u_mbist.mem0_din_a  & 32'hFFFF_FFFE;
 	   else
-	      force u_top.u_sram0_2kb.din0 = u_top.mem0_din_a | 32'h1;
+	      force u_top.u_mbist.u_sram0_2kb.din0 = u_top.u_mbist.mem0_din_a | 32'h1;
    	   -> error_insert;
          end else begin
-            release u_top.u_sram0_2kb.din0;
+            release u_top.u_mbist.u_sram0_2kb.din0;
          end
 
-         if(u_top.u_sram1_2kb.web0 == 1'b0 && 
-	   ((num_fault[1] > 0 && u_top.u_sram1_2kb.addr0 == faultaddr[0]+1) ||
-	    (num_fault[1] > 1 && u_top.u_sram1_2kb.addr0 == faultaddr[1]+1) ||
-	    (num_fault[1] > 2 && u_top.u_sram1_2kb.addr0 == faultaddr[2]+1) ||
-	    (num_fault[1] > 3 && u_top.u_sram1_2kb.addr0 == faultaddr[3]+1) ||
-	    (num_fault[1] > 4 && u_top.u_sram1_2kb.addr0 == faultaddr[4]+1) ||
-	    (num_fault[1] > 5 && u_top.u_sram1_2kb.addr0 == faultaddr[5]+1) ||
-	    (num_fault[1] > 6 && u_top.u_sram1_2kb.addr0 == faultaddr[6]+1) ||
-	    (num_fault[1] > 7 && u_top.u_sram1_2kb.addr0 == faultaddr[7]+1)))
+         if(u_top.u_mbist.u_sram1_2kb.web0 == 1'b0 && 
+	   ((num_fault[1] > 0 && u_top.u_mbist.u_sram1_2kb.addr0 == faultaddr[0]+1) ||
+	    (num_fault[1] > 1 && u_top.u_mbist.u_sram1_2kb.addr0 == faultaddr[1]+1) ||
+	    (num_fault[1] > 2 && u_top.u_mbist.u_sram1_2kb.addr0 == faultaddr[2]+1) ||
+	    (num_fault[1] > 3 && u_top.u_mbist.u_sram1_2kb.addr0 == faultaddr[3]+1) ||
+	    (num_fault[1] > 4 && u_top.u_mbist.u_sram1_2kb.addr0 == faultaddr[4]+1) ||
+	    (num_fault[1] > 5 && u_top.u_mbist.u_sram1_2kb.addr0 == faultaddr[5]+1) ||
+	    (num_fault[1] > 6 && u_top.u_mbist.u_sram1_2kb.addr0 == faultaddr[6]+1) ||
+	    (num_fault[1] > 7 && u_top.u_mbist.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;
+	      force u_top.u_mbist.u_sram1_2kb.din0 = u_top.u_mbist.mem1_din_a  & 32'hFFFF_FFFE;
 	   else
-	      force u_top.u_sram1_2kb.din0 = u_top.mem1_din_a | 32'h1;
+	      force u_top.u_mbist.u_sram1_2kb.din0 = u_top.u_mbist.mem1_din_a | 32'h1;
    	   -> error_insert;
          end else begin
-            release u_top.u_sram1_2kb.din0;
+            release u_top.u_mbist.u_sram1_2kb.din0;
          end
 
-         if(u_top.u_sram2_2kb.web0 == 1'b0 && 
-	   ((num_fault[2] > 0 && u_top.u_sram2_2kb.addr0 == faultaddr[0]+2) ||
-	    (num_fault[2] > 1 && u_top.u_sram2_2kb.addr0 == faultaddr[1]+2) ||
-	    (num_fault[2] > 2 && u_top.u_sram2_2kb.addr0 == faultaddr[2]+2) ||
-	    (num_fault[2] > 3 && u_top.u_sram2_2kb.addr0 == faultaddr[3]+2) ||
-	    (num_fault[2] > 4 && u_top.u_sram2_2kb.addr0 == faultaddr[4]+2) ||
-	    (num_fault[2] > 5 && u_top.u_sram2_2kb.addr0 == faultaddr[5]+2) ||
-	    (num_fault[2] > 6 && u_top.u_sram2_2kb.addr0 == faultaddr[6]+2) ||
-	    (num_fault[2] > 7 && u_top.u_sram2_2kb.addr0 == faultaddr[7]+2)))
+         if(u_top.u_mbist.u_sram2_2kb.web0 == 1'b0 && 
+	   ((num_fault[2] > 0 && u_top.u_mbist.u_sram2_2kb.addr0 == faultaddr[0]+2) ||
+	    (num_fault[2] > 1 && u_top.u_mbist.u_sram2_2kb.addr0 == faultaddr[1]+2) ||
+	    (num_fault[2] > 2 && u_top.u_mbist.u_sram2_2kb.addr0 == faultaddr[2]+2) ||
+	    (num_fault[2] > 3 && u_top.u_mbist.u_sram2_2kb.addr0 == faultaddr[3]+2) ||
+	    (num_fault[2] > 4 && u_top.u_mbist.u_sram2_2kb.addr0 == faultaddr[4]+2) ||
+	    (num_fault[2] > 5 && u_top.u_mbist.u_sram2_2kb.addr0 == faultaddr[5]+2) ||
+	    (num_fault[2] > 6 && u_top.u_mbist.u_sram2_2kb.addr0 == faultaddr[6]+2) ||
+	    (num_fault[2] > 7 && u_top.u_mbist.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;
+	      force u_top.u_mbist.u_sram2_2kb.din0 = u_top.u_mbist.mem2_din_a  & 32'hFFFF_FFFE;
 	   else
-	      force u_top.u_sram2_2kb.din0 = u_top.mem2_din_a | 32'h1;
+	      force u_top.u_mbist.u_sram2_2kb.din0 = u_top.u_mbist.mem2_din_a | 32'h1;
    	   -> error_insert;
          end else begin
-            release u_top.u_sram2_2kb.din0;
+            release u_top.u_mbist.u_sram2_2kb.din0;
          end
 
-         if(u_top.u_sram3_2kb.web0 == 1'b0 && 
-	   ((num_fault[3] > 0 && u_top.u_sram3_2kb.addr0 == faultaddr[0]+3) ||
-	    (num_fault[3] > 1 && u_top.u_sram3_2kb.addr0 == faultaddr[1]+3) ||
-	    (num_fault[3] > 2 && u_top.u_sram3_2kb.addr0 == faultaddr[2]+3) ||
-	    (num_fault[3] > 3 && u_top.u_sram3_2kb.addr0 == faultaddr[3]+3) ||
-	    (num_fault[3] > 4 && u_top.u_sram3_2kb.addr0 == faultaddr[4]+3) ||
-	    (num_fault[3] > 5 && u_top.u_sram3_2kb.addr0 == faultaddr[5]+3) ||
-	    (num_fault[3] > 6 && u_top.u_sram3_2kb.addr0 == faultaddr[6]+3) ||
-	    (num_fault[3] > 7 && u_top.u_sram3_2kb.addr0 == faultaddr[7]+3)))
+         if(u_top.u_mbist.u_sram3_2kb.web0 == 1'b0 && 
+	   ((num_fault[3] > 0 && u_top.u_mbist.u_sram3_2kb.addr0 == faultaddr[0]+3) ||
+	    (num_fault[3] > 1 && u_top.u_mbist.u_sram3_2kb.addr0 == faultaddr[1]+3) ||
+	    (num_fault[3] > 2 && u_top.u_mbist.u_sram3_2kb.addr0 == faultaddr[2]+3) ||
+	    (num_fault[3] > 3 && u_top.u_mbist.u_sram3_2kb.addr0 == faultaddr[3]+3) ||
+	    (num_fault[3] > 4 && u_top.u_mbist.u_sram3_2kb.addr0 == faultaddr[4]+3) ||
+	    (num_fault[3] > 5 && u_top.u_mbist.u_sram3_2kb.addr0 == faultaddr[5]+3) ||
+	    (num_fault[3] > 6 && u_top.u_mbist.u_sram3_2kb.addr0 == faultaddr[6]+3) ||
+	    (num_fault[3] > 7 && u_top.u_mbist.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;
+	      force u_top.u_mbist.u_sram3_2kb.din0 = u_top.u_mbist.mem3_din_a  & 32'hFFFF_FFFE;
 	   else
-	      force u_top.u_sram3_2kb.din0 = u_top.mem3_din_a | 32'h1;
+	      force u_top.u_mbist.u_sram3_2kb.din0 = u_top.u_mbist.mem3_din_a | 32'h1;
    	   -> error_insert;
          end else begin
-            release u_top.u_sram3_2kb.din0;
+            release u_top.u_mbist.u_sram3_2kb.din0;
          end
 
          //if(u_top.u_sram5_1kb.web0 == 1'b0 && 
diff --git a/verilog/dv/user_risc_boot/Makefile b/verilog/dv/user_risc_boot/Makefile
index 26104a8..1057c10 100644
--- a/verilog/dv/user_risc_boot/Makefile
+++ b/verilog/dv/user_risc_boot/Makefile
@@ -29,7 +29,7 @@
 UPRJ_GL_PATH = $(UPRJ_VERILOG_PATH)/gl
 UPRJ_BEHAVIOURAL_MODELS = ../model
 UPRJ_BEHAVIOURAL_AGENTS = ../agents
-UPRJ_INCLUDE_PATH1 = $(UPRJ_RTL_PATH)/yifive/ycr1/src/includes
+UPRJ_INCLUDE_PATH1 = $(UPRJ_RTL_PATH)/yifive/ycr1c/src/includes
 UPRJ_INCLUDE_PATH2 = $(UPRJ_RTL_PATH)/sdram_ctrl/src/defs
 UPRJ_INCLUDE_PATH3 = $(UPRJ_RTL_PATH)/i2cm/src/includes
 UPRJ_INCLUDE_PATH4 = $(UPRJ_RTL_PATH)/usb1_host/src/includes
@@ -59,12 +59,12 @@
 vvp:  ${PATTERN:=.vvp}
 
 %.vvp: %_tb.v
-	${GCC64_PREFIX}-gcc -O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las  -D__RVC_EXT -static -std=gnu99 -fno-common -fno-builtin-printf -DTCM=1 -Wa,-march=rv32imc -march=rv32imc -mabi=ilp32 -DFLAGS_STR=\""-O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las "\"  -c -I./ -I$(YIFIVE_FIRMWARE_PATH)  user_risc_boot.c -o user_risc_boot.o
-	${GCC64_PREFIX}-gcc -O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las  -D__RVC_EXT -static -std=gnu99 -fno-common -fno-builtin-printf -DTCM=1 -Wa,-march=rv32imc -march=rv32imc -mabi=ilp32 -DFLAGS_STR=\""-O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las "\"  -D__ASSEMBLY__=1 -c -I./ -I$(YIFIVE_FIRMWARE_PATH)  $(YIFIVE_FIRMWARE_PATH)/crt_tcm.S -o crt_tcm.o
-	${GCC64_PREFIX}-gcc -o user_risc_boot.elf -T $(YIFIVE_FIRMWARE_PATH)/link_tcm.ld user_risc_boot.o crt_tcm.o -nostartfiles -nostdlib -lc -lgcc -march=rv32imc -mabi=ilp32 -N
+	${GCC64_PREFIX}-gcc -O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las  -D__RVC_EXT -static -std=gnu99 -fno-common -fno-builtin-printf -DTCM=0 -Wa,-march=rv32imc -march=rv32imc -mabi=ilp32 -DFLAGS_STR=\""-O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las "\"  -c -I./ -I$(YIFIVE_FIRMWARE_PATH)  user_risc_boot.c -o user_risc_boot.o
+	${GCC64_PREFIX}-gcc -O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las  -D__RVC_EXT -static -std=gnu99 -fno-common -fno-builtin-printf -DTCM=0 -Wa,-march=rv32imc -march=rv32imc -mabi=ilp32 -DFLAGS_STR=\""-O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las "\"  -D__ASSEMBLY__=1 -c -I./ -I$(YIFIVE_FIRMWARE_PATH)  $(YIFIVE_FIRMWARE_PATH)/crt.S -o crt.o
+	${GCC64_PREFIX}-gcc -o user_risc_boot.elf -T $(YIFIVE_FIRMWARE_PATH)/link.ld user_risc_boot.o crt.o -nostartfiles -nostdlib -lc -lgcc -march=rv32imc -mabi=ilp32 -N
 	${GCC64_PREFIX}-objcopy -O verilog user_risc_boot.elf user_risc_boot.hex
 	${GCC64_PREFIX}-objdump -D user_risc_boot.elf > user_risc_boot.dump
-	rm crt_tcm.o user_risc_boot.o
+	rm crt.o user_risc_boot.o
 ifeq ($(SIM),RTL)
    ifeq ($(DUMP),OFF)
 	iverilog -g2005-sv -DFUNCTIONAL -DSIM -I $(PDK_PATH) \
diff --git a/verilog/dv/user_risc_soft_boot/Makefile b/verilog/dv/user_risc_soft_boot/Makefile
index 3998666..12f65be 100644
--- a/verilog/dv/user_risc_soft_boot/Makefile
+++ b/verilog/dv/user_risc_soft_boot/Makefile
@@ -29,7 +29,7 @@
 UPRJ_GL_PATH = $(UPRJ_VERILOG_PATH)/gl
 UPRJ_BEHAVIOURAL_MODELS = ../model
 UPRJ_BEHAVIOURAL_AGENTS = ../agents
-UPRJ_INCLUDE_PATH1 = $(UPRJ_RTL_PATH)/yifive/ycr1/src/includes
+UPRJ_INCLUDE_PATH1 = $(UPRJ_RTL_PATH)/yifive/ycr1c/src/includes
 UPRJ_INCLUDE_PATH2 = $(UPRJ_RTL_PATH)/sdram_ctrl/src/defs
 UPRJ_INCLUDE_PATH3 = $(UPRJ_RTL_PATH)/i2cm/src/includes
 UPRJ_INCLUDE_PATH4 = $(UPRJ_RTL_PATH)/usb1_host/src/includes
@@ -59,12 +59,12 @@
 vvp:  ${PATTERN:=.vvp}
 
 %.vvp: %_tb.v
-	${GCC64_PREFIX}-gcc -O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las  -D__RVC_EXT -static -std=gnu99 -fno-common -fno-builtin-printf -DTCM=1 -Wa,-march=rv32imc -march=rv32imc -mabi=ilp32 -DFLAGS_STR=\""-O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las "\"  -c -I./ -I$(YIFIVE_FIRMWARE_PATH)  user_risc_boot.c -o user_risc_boot.o
-	${GCC64_PREFIX}-gcc -O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las  -D__RVC_EXT -static -std=gnu99 -fno-common -fno-builtin-printf -DTCM=1 -Wa,-march=rv32imc -march=rv32imc -mabi=ilp32 -DFLAGS_STR=\""-O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las "\"  -D__ASSEMBLY__=1 -c -I./ -I$(YIFIVE_FIRMWARE_PATH)  $(YIFIVE_FIRMWARE_PATH)/crt_tcm.S -o crt_tcm.o
-	${GCC64_PREFIX}-gcc -o user_risc_boot.elf -T $(YIFIVE_FIRMWARE_PATH)/link_tcm.ld user_risc_boot.o crt_tcm.o -nostartfiles -nostdlib -lc -lgcc -march=rv32imc -mabi=ilp32 -N
+	${GCC64_PREFIX}-gcc -O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las  -D__RVC_EXT -static -std=gnu99 -fno-common -fno-builtin-printf -DTCM=0 -Wa,-march=rv32imc -march=rv32imc -mabi=ilp32 -DFLAGS_STR=\""-O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las "\"  -c -I./ -I$(YIFIVE_FIRMWARE_PATH)  user_risc_boot.c -o user_risc_boot.o
+	${GCC64_PREFIX}-gcc -O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las  -D__RVC_EXT -static -std=gnu99 -fno-common -fno-builtin-printf -DTCM=0 -Wa,-march=rv32imc -march=rv32imc -mabi=ilp32 -DFLAGS_STR=\""-O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las "\"  -D__ASSEMBLY__=1 -c -I./ -I$(YIFIVE_FIRMWARE_PATH)  $(YIFIVE_FIRMWARE_PATH)/crt.S -o crt.o
+	${GCC64_PREFIX}-gcc -o user_risc_boot.elf -T $(YIFIVE_FIRMWARE_PATH)/link.ld user_risc_boot.o crt.o -nostartfiles -nostdlib -lc -lgcc -march=rv32imc -mabi=ilp32 -N
 	${GCC64_PREFIX}-objcopy -O verilog user_risc_boot.elf user_risc_boot.hex
 	${GCC64_PREFIX}-objdump -D user_risc_boot.elf > user_risc_boot.dump
-	rm crt_tcm.o user_risc_boot.o
+	rm crt.o user_risc_boot.o
 ifeq ($(SIM),RTL)
    ifeq ($(DUMP),OFF)
 	iverilog -g2005-sv -DFUNCTIONAL -DSIM -I $(PDK_PATH) \
diff --git a/verilog/dv/user_risc_soft_boot/user_risc_soft_boot_tb.v b/verilog/dv/user_risc_soft_boot/user_risc_soft_boot_tb.v
index dcf85c6..1350b07 100644
--- a/verilog/dv/user_risc_soft_boot/user_risc_soft_boot_tb.v
+++ b/verilog/dv/user_risc_soft_boot/user_risc_soft_boot_tb.v
@@ -136,7 +136,8 @@
 	`ifdef WFDUMP
 	   initial begin
 	   	$dumpfile("simx.vcd");
-	   	$dumpvars(4, user_risc_soft_boot_tb);
+	   	$dumpvars(4, user_risc_soft_boot_tb.u_top);
+	   	//$dumpvars(3, user_risc_soft_boot_tb.u_top.u_riscv_top);
 	   end
        `endif
 
@@ -155,26 +156,26 @@
 		   tem_mem_32b[i] = {tem_mem[(i*4)+3],tem_mem[(i*4)+2],tem_mem[(i*4)+1],tem_mem[(i*4)]};
 
 	        $writememh("sram_bank0.hex",tem_mem_32b,0,511);
-	        $readmemh("sram_bank0.hex",u_top.u_sram0_2kb.mem,0,511);
+	        $readmemh("sram_bank0.hex",u_top.u_mbist.u_sram0_2kb.mem,0,511);
 
 		for(i =512; i < 1023; i = i+1)
 		   tem_mem_32b[i-512] = {tem_mem[(i*4)+3],tem_mem[(i*4)+2],tem_mem[(i*4)+1],tem_mem[(i*4)]};
 
 	        $writememh("sram_bank1.hex",tem_mem_32b,0,511);
-	        $readmemh("sram_bank1.hex",u_top.u_sram1_2kb.mem,0,511);
+	        $readmemh("sram_bank1.hex",u_top.u_mbist.u_sram1_2kb.mem,0,511);
 
 		// Enable the SRAM Remap to boot region
 		wb_user_core_write('h3080_000C,{4'b1111,28'h0});
 	        repeat (2) @(posedge clock);
 		#1;
 		// Remove the reset, mbist, wishbone, riscv
-                wb_user_core_write('h3080_0000,'h83);
+                wb_user_core_write('h3080_0000,'h8F);
 
 
 		// Repeat cycles of 1000 clock edges as needed to complete testbench
-		repeat (10) begin
-			repeat (400) @(posedge clock);
-			// $display("+1000 cycles");
+		repeat (24) begin
+			repeat (500) @(posedge clock);
+			//$display("+500 cycles");
 		end
 
 
diff --git a/verilog/dv/user_spi/Makefile b/verilog/dv/user_spi/Makefile
index 32bbfec..e0934e1 100644
--- a/verilog/dv/user_spi/Makefile
+++ b/verilog/dv/user_spi/Makefile
@@ -29,7 +29,7 @@
 UPRJ_GL_PATH = $(UPRJ_VERILOG_PATH)/gl
 UPRJ_BEHAVIOURAL_MODELS = ../model
 UPRJ_BEHAVIOURAL_AGENTS = ../agents
-UPRJ_INCLUDE_PATH1 = $(UPRJ_RTL_PATH)/yifive/ycr1/src/includes
+UPRJ_INCLUDE_PATH1 = $(UPRJ_RTL_PATH)/yifive/ycr1c/src/includes
 UPRJ_INCLUDE_PATH2 = $(UPRJ_RTL_PATH)/sdram_ctrl/src/defs
 UPRJ_INCLUDE_PATH3 = $(UPRJ_RTL_PATH)/i2cm/src/includes
 UPRJ_INCLUDE_PATH4 = $(UPRJ_RTL_PATH)/usb1_host/src/includes
@@ -54,17 +54,10 @@
 
 all:  ${PATTERN:=.vcd}
 
-hex:  ${PATTERN:=.hex}
 
 vvp:  ${PATTERN:=.vvp}
 
 %.vvp: %_tb.v
-	${GCC64_PREFIX}-gcc -O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las  -D__RVC_EXT -static -std=gnu99 -fno-common -fno-builtin-printf -DTCM=1 -Wa,-march=rv32imc -march=rv32imc -mabi=ilp32 -DFLAGS_STR=\""-O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las "\"  -c -I./ -I$(YIFIVE_FIRMWARE_PATH)  user_risc_boot.c -o user_risc_boot.o
-	${GCC64_PREFIX}-gcc -O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las  -D__RVC_EXT -static -std=gnu99 -fno-common -fno-builtin-printf -DTCM=1 -Wa,-march=rv32imc -march=rv32imc -mabi=ilp32 -DFLAGS_STR=\""-O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las "\"  -D__ASSEMBLY__=1 -c -I./ -I$(YIFIVE_FIRMWARE_PATH)  $(YIFIVE_FIRMWARE_PATH)/crt_tcm.S -o crt_tcm.o
-	${GCC64_PREFIX}-gcc -o user_risc_boot.elf -T $(YIFIVE_FIRMWARE_PATH)/link_tcm.ld user_risc_boot.o crt_tcm.o -nostartfiles -nostdlib -lc -lgcc -march=rv32imc -mabi=ilp32 -N
-	${GCC64_PREFIX}-objcopy -O verilog user_risc_boot.elf user_risc_boot.hex
-	${GCC64_PREFIX}-objdump -D user_risc_boot.elf > user_risc_boot.dump
-	rm crt_tcm.o user_risc_boot.o
 ifeq ($(SIM),RTL)
    ifeq ($(DUMP),OFF)
 	iverilog -g2005-sv -DFUNCTIONAL -DSIM -I $(PDK_PATH) \
@@ -94,18 +87,13 @@
 %.vcd: %.vvp
 	vvp $<
 
-%.elf: %.c $(CARAVEL_FIRMWARE_PATH)/sections.lds $(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: 
 	echo @"This is user boot test, noting to compile the mangment core code"
 
-%.bin: %.elf
-	${GCC64_PREFIX}-objcopy -O binary $< /dev/stdout | tail -c +1048577 > $@
 
 # ---- Clean ----
 
 clean:
-	rm -f *.elf *.hex *.bin *.vvp *.vcd *.log *.dump
+	rm -f *.vvp *.vcd *.log *.fst
 
 .PHONY: clean hex all
diff --git a/verilog/dv/user_spi/flash0.hex b/verilog/dv/user_spi/flash0.hex
new file mode 100755
index 0000000..24a2e47
--- /dev/null
+++ b/verilog/dv/user_spi/flash0.hex
@@ -0,0 +1,79 @@
+@00000000

+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

+00 00 00 00 13 00 00 00 6F 00 00 00 FF FF FF FF

+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

+6F 00 60 18 13 00 00 00 13 00 00 00 13 00 00 00

+13 00 00 00 13 00 00 00 13 00 00 00 13 00 00 00

+13 00 00 00 13 00 00 00 13 00 00 00 13 00 00 00

+13 00 00 00 13 00 00 00 13 00 00 00 13 00 00 00

+93 00 00 00 13 01 00 00 93 01 00 00 13 02 00 00

+93 02 00 00 13 03 00 00 93 03 00 00 13 04 00 00

+93 04 00 00 13 05 00 00 93 05 00 00 13 06 00 00

+93 06 00 00 13 07 00 00 93 07 00 00 13 08 00 00

+93 08 00 00 13 09 00 00 93 09 00 00 13 0A 00 00

+93 0A 00 00 13 0B 00 00 93 0B 00 00 13 0C 00 00

+93 0C 00 00 13 0D 00 00 93 0D 00 00 13 0E 00 00

+93 0E 00 00 13 0F 00 00 93 0F 00 00 97 01 48 00

+93 81 41 62 13 05 00 40 97 05 48 00 93 85 85 D7

+17 06 48 00 13 06 06 E3 63 0D B5 00 29 A0 14 41

+94 C1 11 05 91 05 E3 9C C5 FE 17 06 48 00 13 06

+66 E1 97 05 48 00 93 85 E5 E0 21 A0 23 20 06 00

+11 06 E3 9D C5 FE 13 81 01 76 17 05 48 00 13 05

+65 DF 17 06 48 00 13 06 E6 DE B3 05 A6 40 13 87

+01 66 33 02 B7 40 92 85 17 06 48 00 13 06 86 DD

+29 A0 14 41 94 C1 11 05 91 05 E3 1C C5 FE 21 A0

+23 A0 05 00 91 05 E3 9D E5 FE B7 02 49 00 05 43

+23 A0 62 00 B7 02 49 00 91 02 13 03 30 06 23 A0

+62 00 B7 02 49 00 C1 02 7D 53 23 A0 62 00 23 A2

+62 00 01 45 81 45 97 02 48 00 E7 80 A2 CC 97 02

+48 00 93 82 22 D2 6D 71 06 C2 0A C4 0E C6 12 C8

+16 CA 1A CC 1E CE 22 D0 26 D2 2A D4 2E D6 32 D8

+36 DA 3A DC 3E DE C2 C0 C6 C2 CA C4 CE C6 D2 C8

+D6 CA DA CC DE CE E2 D0 E6 D2 EA D4 EE D6 F2 D8

+F6 DA FA DC FE DE 73 25 20 34 F3 25 10 34 0A 86

+EF 00 80 04 92 40 22 41 B2 41 42 42 D2 42 62 43

+F2 43 02 54 92 54 22 55 B2 55 42 56 D2 56 62 57

+F2 57 06 48 96 48 26 49 B6 49 46 4A D6 4A 66 4B

+F6 4B 06 5C 96 5C 26 5D B6 5D 46 5E D6 5E 66 5F

+F6 5F 51 61 73 00 20 30 6F F0 DF D1 00 00 00 00

+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

+@00000400

+37 37 22 11 B7 07 03 30 93 02 47 34 37 43 33 22

+23 AC 57 04 93 03 53 45 37 55 44 33 23 AE 77 04

+93 05 65 56 37 66 55 44 AC D3 93 06 76 67 37 78

+66 55 F4 D3 93 08 88 78 37 9E 77 66 23 A4 17 07

+93 0E 9E 89 23 A6 D7 07 01 A0 00 00 00 00 00 00

+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

+97 02 B8 FF 93 82 42 09 82 82 13 00 00 00 13 00

+00 00 13 00 00 00 13 00 00 00 13 00 00 00 01 00

+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

+@000004A0

+13 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

diff --git a/verilog/dv/user_spi/user_spi_tb.v b/verilog/dv/user_spi/user_spi_tb.v
index 2396183..486d6ea 100644
--- a/verilog/dv/user_spi/user_spi_tb.v
+++ b/verilog/dv/user_spi/user_spi_tb.v
@@ -229,7 +229,7 @@
 		$display("#############################################");
 		$display("  Read Identification (RDID:0x9F)            ");
 		$display("#############################################");
-               wb_user_core_write('h3080_0004,'h10); // Change the Bank Sel 10
+                wb_user_core_write('h3080_0004,'h10); // Change the Bank Sel 10
 		wb_user_core_write(`QSPIM_IMEM_CTRL1,{16'h0,1'b0,1'b0,4'b0000,2'b00,P_SINGLE,P_SINGLE,4'b0001});
 		wb_user_core_write(`QSPIM_IMEM_CTRL2,{8'h4,2'b00,2'b00,P_FSM_CR,8'h00,8'h9F});
 		wb_user_core_read_check(`QSPIM_IMEM_RDATA,read_data,32'h00190201);
@@ -1179,7 +1179,7 @@
 
 
    // Quad flash
-     s25fl256s #(.mem_file_name("user_risc_boot.hex"),
+     s25fl256s #(.mem_file_name("flash0.hex"),
 	         .otp_file_name("none"),
                  .TimingModel("S25FL512SAGMFI010_F_30pF")) 
 		 u_spi_flash_256mb (
diff --git a/verilog/dv/user_uart/Makefile b/verilog/dv/user_uart/Makefile
index 95eba63..387f35d 100644
--- a/verilog/dv/user_uart/Makefile
+++ b/verilog/dv/user_uart/Makefile
@@ -29,7 +29,7 @@
 UPRJ_GL_PATH = $(UPRJ_VERILOG_PATH)/gl
 UPRJ_BEHAVIOURAL_MODELS = ../model
 UPRJ_BEHAVIOURAL_AGENTS = ../agents
-UPRJ_INCLUDE_PATH1 = $(UPRJ_RTL_PATH)/yifive/ycr1/src/includes
+UPRJ_INCLUDE_PATH1 = $(UPRJ_RTL_PATH)/yifive/ycr1c/src/includes
 UPRJ_INCLUDE_PATH2 = $(UPRJ_RTL_PATH)/sdram_ctrl/src/defs
 UPRJ_INCLUDE_PATH3 = $(UPRJ_RTL_PATH)/i2cm/src/includes
 UPRJ_INCLUDE_PATH4 = $(UPRJ_RTL_PATH)/usb1_host/src/includes
@@ -59,12 +59,12 @@
 vvp:  ${PATTERN:=.vvp}
 
 %.vvp: %_tb.v
-	${GCC64_PREFIX}-gcc -O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las  -D__RVC_EXT -static -std=gnu99 -fno-common -fno-builtin-printf -DTCM=1 -Wa,-march=rv32imc -march=rv32imc -mabi=ilp32 -DFLAGS_STR=\""-O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las "\"  -c -I./ -I$(YIFIVE_FIRMWARE_PATH) user_uart.c -o user_uart.o
-	${GCC64_PREFIX}-gcc -O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las  -D__RVC_EXT -static -std=gnu99 -fno-common -fno-builtin-printf -DTCM=1 -Wa,-march=rv32imc -march=rv32imc -mabi=ilp32 -DFLAGS_STR=\""-O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las "\"  -D__ASSEMBLY__=1 -c -I./ -I$(YIFIVE_FIRMWARE_PATH)  $(YIFIVE_FIRMWARE_PATH)/crt_tcm.S -o crt_tcm.o
-	${GCC64_PREFIX}-gcc -o user_uart.elf -T $(YIFIVE_FIRMWARE_PATH)/link_tcm.ld user_uart.o crt_tcm.o -nostartfiles -nostdlib -lc -lgcc -march=rv32imc -mabi=ilp32 -N
+	${GCC64_PREFIX}-gcc -O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las  -D__RVC_EXT -static -std=gnu99 -fno-common -fno-builtin-printf -DTCM=0 -Wa,-march=rv32imc -march=rv32imc -mabi=ilp32 -DFLAGS_STR=\""-O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las "\"  -c -I./ -I$(YIFIVE_FIRMWARE_PATH) user_uart.c -o user_uart.o
+	${GCC64_PREFIX}-gcc -O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las  -D__RVC_EXT -static -std=gnu99 -fno-common -fno-builtin-printf -DTCM=0 -Wa,-march=rv32imc -march=rv32imc -mabi=ilp32 -DFLAGS_STR=\""-O2 -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las "\"  -D__ASSEMBLY__=1 -c -I./ -I$(YIFIVE_FIRMWARE_PATH)  $(YIFIVE_FIRMWARE_PATH)/crt.S -o crt.o
+	${GCC64_PREFIX}-gcc -o user_uart.elf -T $(YIFIVE_FIRMWARE_PATH)/link.ld user_uart.o crt.o -nostartfiles -nostdlib -lc -lgcc -march=rv32imc -mabi=ilp32 -N
 	${GCC64_PREFIX}-objcopy -O verilog user_uart.elf user_uart.hex
 	${GCC64_PREFIX}-objdump -D user_uart.elf > user_uart.dump
-	rm crt_tcm.o user_uart.o
+	rm crt.o user_uart.o
 ifeq ($(SIM),RTL)
    ifeq ($(DUMP),OFF)
 	iverilog -g2005-sv -DFUNCTIONAL -DSIM -I $(PDK_PATH) \
diff --git a/verilog/dv/user_uart/user_uart_tb.v b/verilog/dv/user_uart/user_uart_tb.v
index edda128..7171ba6 100644
--- a/verilog/dv/user_uart/user_uart_tb.v
+++ b/verilog/dv/user_uart/user_uart_tb.v
@@ -149,7 +149,7 @@
 
 	`ifdef WFDUMP
 	   initial begin
-	   	$dumpfile("risc_boot.vcd");
+	   	$dumpfile("simx.vcd");
 	   	$dumpvars(1, user_uart_tb);
 	   	$dumpvars(0, user_uart_tb.u_top);
 	   end
@@ -186,7 +186,7 @@
    // Remove all the reset
    wb_user_core_write('h3080_0000,'h1F);
 
-   repeat (16000) @(posedge clock);  // wait for Processor Get Ready
+   repeat (20000) @(posedge clock);  // wait for Processor Get Ready
    tb_uart.uart_init;
    wb_user_core_write(`ADDR_SPACE_UART+8'h0,{3'h0,2'b00,1'b1,1'b1,1'b1});  
    
diff --git a/verilog/dv/user_uart_master/Makefile b/verilog/dv/user_uart_master/Makefile
index dbe1ce7..b52caef 100644
--- a/verilog/dv/user_uart_master/Makefile
+++ b/verilog/dv/user_uart_master/Makefile
@@ -29,7 +29,7 @@
 UPRJ_GL_PATH = $(UPRJ_VERILOG_PATH)/gl
 UPRJ_BEHAVIOURAL_MODELS = ../model
 UPRJ_BEHAVIOURAL_AGENTS = ../agents
-UPRJ_INCLUDE_PATH1 = $(UPRJ_RTL_PATH)/yifive/ycr1/src/includes
+UPRJ_INCLUDE_PATH1 = $(UPRJ_RTL_PATH)/yifive/ycr1c/src/includes
 UPRJ_INCLUDE_PATH2 = $(UPRJ_RTL_PATH)/sdram_ctrl/src/defs
 UPRJ_INCLUDE_PATH3 = $(UPRJ_RTL_PATH)/i2cm/src/includes
 UPRJ_INCLUDE_PATH4 = $(UPRJ_RTL_PATH)/usb1_host/src/includes
diff --git a/verilog/dv/wb_port/Makefile b/verilog/dv/wb_port/Makefile
index d378ce7..a19be6a 100644
--- a/verilog/dv/wb_port/Makefile
+++ b/verilog/dv/wb_port/Makefile
@@ -30,7 +30,7 @@
 UPRJ_RTL_PATH = $(UPRJ_VERILOG_PATH)/rtl
 UPRJ_GL_PATH = $(UPRJ_VERILOG_PATH)/gl
 UPRJ_BEHAVIOURAL_MODELS = ../
-UPRJ_INCLUDE_PATH1 = $(UPRJ_RTL_PATH)/yifive/ycr1/src/includes
+UPRJ_INCLUDE_PATH1 = $(UPRJ_RTL_PATH)/yifive/ycr1c/src/includes
 UPRJ_INCLUDE_PATH2 = $(UPRJ_RTL_PATH)/sdram_ctrl/src/defs
 UPRJ_INCLUDE_PATH3 = $(UPRJ_RTL_PATH)/i2cm/src/includes
 UPRJ_INCLUDE_PATH4 = $(UPRJ_RTL_PATH)/usb1_host/src/includes
diff --git a/verilog/rtl/lib/sync_fifo2.sv b/verilog/rtl/lib/sync_fifo2.sv
new file mode 100755
index 0000000..f71ad30
--- /dev/null
+++ b/verilog/rtl/lib/sync_fifo2.sv
@@ -0,0 +1,222 @@
+//////////////////////////////////////////////////////////////////////////////
+// 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>
+//
+/*********************************************************************
+                                                              
+  SYNC FIFO with empty,aempty,full,afull
+                                                              
+                                                              
+  Description: SYNC FIFO 
+                                                              
+  To Do:                                                      
+    nothing                                                   
+                                                              
+  Author(s):  Dinesh Annayya, dinesha@opencores.org                 
+                                                             
+ Copyright (C) 2000 Authors and OPENCORES.ORG                
+                                                             
+ This source file may be used and distributed without         
+ restriction provided that this copyright statement is not    
+ removed from the file and that any derivative work contains  
+ the original copyright notice and the associated disclaimer. 
+                                                              
+ This source file is free software; you can redistribute it   
+ and/or modify it under the terms of the GNU Lesser General   
+ Public License as published by the Free Software Foundation; 
+ either version 2.1 of the License, or (at your option) any   
+later version.                                               
+                                                              
+ This source is distributed in the hope that it will be       
+ useful, but WITHOUT ANY WARRANTY; without even the implied   
+ warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      
+ PURPOSE.  See the GNU Lesser General Public License for more 
+ details.                                                     
+                                                              
+ You should have received a copy of the GNU Lesser General    
+ Public License along with this source; if not, download it   
+ from http://www.opencores.org/lgpl.shtml                     
+                                                              
+*******************************************************************/
+
+//-------------------------------------------
+// sync FIFO
+//-----------------------------------------------
+//`timescale  1ns/1ps
+
+module sync_fifo2 (clk,
+                   reset_n,
+                   wr_en,
+                   wr_data,
+                   full,                 
+                   afull,                 
+                   rd_en,
+                   empty,                
+                   aempty,                
+                   rd_data);
+
+   parameter W = 4'd8;
+   parameter DP = 3'd4;
+   parameter WR_FAST = 1'b1;
+   parameter RD_FAST = 1'b1;
+   parameter FULL_DP = DP;
+   parameter EMPTY_DP = 1'b0;
+
+   parameter AW = (DP == 2)   ? 1 : 
+		  (DP == 4)   ? 2 :
+                  (DP == 8)   ? 3 :
+                  (DP == 16)  ? 4 :
+                  (DP == 32)  ? 5 :
+                  (DP == 64)  ? 6 :
+                  (DP == 128) ? 7 :
+                  (DP == 256) ? 8 : 0;
+
+   output [W-1 : 0]  rd_data;
+   input [W-1 : 0]   wr_data;
+   input             clk, reset_n, wr_en, rd_en;
+   output            full, empty;
+   output            afull, aempty;       // about full and about to empty
+
+
+   // synopsys translate_off
+
+   initial begin
+      if (AW == 0) begin
+         $display ("%m : ERROR!!! Fifo depth %d not in range 2 to 256", DP);
+      end // if (AW == 0)
+   end // initial begin
+
+   // synopsys translate_on
+
+   reg [W-1 : 0]    mem[DP-1 : 0];
+
+   /*********************** write side ************************/
+   reg [AW:0] wr_ptr;
+   reg        full_q;
+   wire       full_c;
+   wire       afull_c;
+   wire [AW:0]wr_ptr_inc = wr_ptr + 1'b1;
+   wire [AW:0]wr_cnt = get_cnt(wr_ptr, rd_ptr);
+
+   assign full_c  = (wr_cnt == FULL_DP) ? 1'b1 : 1'b0;
+   assign afull_c = (wr_cnt == FULL_DP-1) ? 1'b1 : 1'b0;
+
+
+   always @(posedge clk or negedge reset_n) begin
+	if (!reset_n) begin
+		wr_ptr <= 0;
+		full_q <= 0;	
+	end
+	else if (wr_en) begin
+		wr_ptr <= wr_ptr_inc;
+		if (wr_cnt == (FULL_DP-1)) begin
+			full_q <= 1'b1;
+		end
+	end
+	else begin
+	    	if (full_q && (wr_cnt<FULL_DP)) begin
+			full_q <= 1'b0;
+	     	end
+	end
+    end
+
+    assign full  = (WR_FAST == 1) ? full_c : full_q;
+    assign afull = afull_c;
+
+    always @(posedge clk) begin
+	if (wr_en) begin
+		mem[wr_ptr[AW-1:0]] <= wr_data;
+	end
+    end
+
+
+
+   /************************ read side *****************************/
+   reg [AW:0] rd_ptr;
+   reg empty_q;
+   wire empty_c;
+   wire aempty_c;
+   wire [AW:0] rd_ptr_inc = rd_ptr + 1'b1;
+   wire [AW:0] rd_cnt = get_cnt(wr_ptr, rd_ptr);
+ 
+   assign empty_c  = (rd_cnt == 0) ? 1'b1 : 1'b0;
+   assign aempty_c = (rd_cnt == 1) ? 1'b1 : 1'b0;
+
+   always @(posedge clk or negedge reset_n) begin
+      if (!reset_n) begin
+         rd_ptr <= 0;
+	 empty_q <= 1'b1;
+      end
+      else begin
+         if (rd_en) begin
+            rd_ptr <= rd_ptr_inc;
+            if (rd_cnt==(EMPTY_DP+1)) begin
+               empty_q <= 1'b1;
+            end
+         end
+         else begin
+            if (empty_q && (rd_cnt!=EMPTY_DP)) begin
+	      empty_q <= 1'b0;
+	    end
+         end
+       end
+    end
+
+    assign empty  = (RD_FAST == 1) ? empty_c : empty_q;
+    assign aempty = aempty_c;
+
+    reg [W-1 : 0]  rd_data_q;
+
+   wire [W-1 : 0] rd_data_c = mem[rd_ptr[AW-1:0]];
+
+
+   always @(posedge clk) begin
+	rd_data_q <= rd_data_c;
+   end
+   assign rd_data  = (RD_FAST == 1) ? rd_data_c : rd_data_q;
+
+
+	
+			
+function [AW:0] get_cnt;
+input [AW:0] wr_ptr, rd_ptr;
+begin
+	if (wr_ptr >= rd_ptr) begin
+		get_cnt = (wr_ptr - rd_ptr);	
+	end
+	else begin
+		get_cnt = DP*2 - (rd_ptr - wr_ptr);
+	end
+end
+endfunction
+
+// synopsys translate_off
+always @(posedge clk) begin
+   if (wr_en && full) begin
+      $display($time, "%m Error! afifo overflow!");
+      $stop;
+   end
+end
+
+always @(posedge clk) begin
+   if (rd_en && empty) begin
+      $display($time, "%m error! afifo underflow!");
+      $stop;
+   end
+end
+// synopsys translate_on
+
+endmodule
diff --git a/verilog/rtl/lib/sync_wbb.sv b/verilog/rtl/lib/sync_wbb.sv
new file mode 100644
index 0000000..a8c8209
--- /dev/null
+++ b/verilog/rtl/lib/sync_wbb.sv
@@ -0,0 +1,334 @@
+//////////////////////////////////////////////////////////////////////////////
+// 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>
+//
+//////////////////////////////////////////////////////////////////////
+////                                                              ////
+////  sync Wishbone Interface iBurst Enable and lack             ////
+////                                                              ////
+////  This file is part of the YIFive cores project               ////
+////  http://www.opencores.org/cores/yifive/                      ////
+////                                                              ////
+////  Description                                                 ////
+////      This block does async Wishbone from one clock to other  ////
+////      clock domain
+////                                                              ////
+////  To Do:                                                      ////
+////    nothing                                                   ////
+////                                                              ////
+////  Author(s):                                                  ////
+////      - Dinesh Annayya, dinesha@opencores.org                 ////
+////                                                              ////
+////  Revision :                                                  ////
+////    0.1 - 25th Feb 2021, Dinesh A                             ////
+////          initial version                                     ////
+////    0.2 - 28th Feb 2021, Dinesh A                             ////
+////          reduced the response FIFO path depth to 2 as        ////
+////          return path used by only read logic and read is     ////
+////          blocking request and expect only one location will  ////
+////          be used                                             ////
+////    0.3 - 20 Jan 2022, Dinesh A                               ////
+////          added wishbone burst mode. Additional signal added  ////
+////           A. *bl  - 10 Bit word Burst count, 1 - 1 DW(32 bit)////
+////           B. *lack - Last Burst ack                          //// 
+//////////////////////////////////////////////////////////////////////
+////                                                              ////
+//// Copyright (C) 2000 Authors and OPENCORES.ORG                 ////
+////                                                              ////
+//// This source file may be used and distributed without         ////
+//// restriction provided that this copyright statement is not    ////
+//// removed from the file and that any derivative work contains  ////
+//// the original copyright notice and the associated disclaimer. ////
+////                                                              ////
+//// This source file is free software; you can redistribute it   ////
+//// and/or modify it under the terms of the GNU Lesser General   ////
+//// Public License as published by the Free Software Foundation; ////
+//// either version 2.1 of the License, or (at your option) any   ////
+//// later version.                                               ////
+////                                                              ////
+//// This source is distributed in the hope that it will be       ////
+//// useful, but WITHOUT ANY WARRANTY; without even the implied   ////
+//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      ////
+//// PURPOSE.  See the GNU Lesser General Public License for more ////
+//// details.                                                     ////
+////                                                              ////
+//// You should have received a copy of the GNU Lesser General    ////
+//// Public License along with this source; if not, download it   ////
+//// from http://www.opencores.org/lgpl.shtml                     ////
+////                                                              ////
+//////////////////////////////////////////////////////////////////////
+
+module sync_wbb 
+     #(parameter AW  = 32,
+       parameter BW  = 4,
+       parameter BL  = 10,
+       parameter DW  = 32)
+       (
+
+    // Master Port
+       input   logic               rst_n       ,  // Regular Reset signal
+       input   logic               clk_i       ,  // System clock
+       input   logic               wbm_cyc_i   ,  // strobe/request
+       input   logic               wbm_stb_i   ,  // strobe/request
+       input   logic [AW-1:0]      wbm_adr_i   ,  // address
+       input   logic               wbm_we_i    ,  // write
+       input   logic [DW-1:0]      wbm_dat_i   ,  // data output
+       input   logic [BW-1:0]      wbm_sel_i   ,  // byte enable
+       input   logic [3:0]         wbm_tid_i   ,
+       input   logic [BL-1:0]      wbm_bl_i    ,  // Burst Count
+       input   logic               wbm_bry_i   ,  // Burst Ready
+       output  logic [DW-1:0]      wbm_dat_o   ,  // data input
+       output  logic               wbm_ack_o   ,  // acknowlegement
+       output  logic               wbm_lack_o  ,  // Last Burst access
+       output  logic               wbm_err_o   ,  // error
+
+    // Slave Port
+       output  logic               wbs_cyc_o   ,  // strobe/request
+       output  logic               wbs_stb_o   ,  // strobe/request
+       output  logic [AW-1:0]      wbs_adr_o   ,  // address
+       output  logic               wbs_we_o    ,  // write
+       output  logic [DW-1:0]      wbs_dat_o   ,  // data output
+       output  logic [BW-1:0]      wbs_sel_o   ,  // byte enable
+       output  logic [3:0]         wbs_tid_o   ,
+       output  logic [BL-1:0]      wbs_bl_o    ,  // Burst Count
+       output  logic               wbs_bry_o   ,  // Busrt WData Avialble Or Ready To accept Rdata  
+       input   logic [DW-1:0]      wbs_dat_i   ,  // data input
+       input   logic               wbs_ack_i   ,  // acknowlegement
+       input   logic               wbs_lack_i  ,  // Last Ack
+       input   logic               wbs_err_i      // error
+
+    );
+
+
+
+parameter CFW = AW+DW+BW+BL+4+1 ; // COMMAND FIFO WIDTH
+parameter RFW = DW+1+1 ;        // RESPONSE FIFO WIDTH
+
+parameter IDLE        = 2'b00;
+parameter WRITE_DATA  = 2'b01;
+parameter READ_DATA   = 2'b10;
+
+
+//-------------------------------------------------
+//  Master Interface
+// -------------------------------------------------
+logic           m_cmd_wr_en       ;
+logic [CFW-1:0] m_cmd_wr_data     ;
+logic           m_cmd_wr_full     ;
+logic           m_cmd_wr_afull    ;
+
+logic           m_resp_rd_empty    ;
+logic           m_resp_rd_aempty   ;
+logic           m_resp_rd_en       ;
+logic [RFW-1:0] m_resp_rd_data     ;
+logic [BL-1:0]  m_bl_cnt           ;
+logic [1:0]     m_state            ;
+
+// Master Write Interface
+
+
+
+assign m_cmd_wr_data = {wbm_adr_i,wbm_we_i,wbm_dat_i,wbm_sel_i,wbm_tid_i,wbm_bl_i};
+
+assign wbm_dat_o = m_resp_rd_data[DW-1:0];
+assign wbm_err_o = 'b0;
+
+always@(negedge rst_n or posedge clk_i)
+begin
+   if(rst_n == 0) begin
+        m_cmd_wr_en        <= 'b0;
+        m_resp_rd_en       <= 'b0;
+        m_state            <= 'h0;
+        m_bl_cnt           <= 'h0;
+        wbm_ack_o          <= 'b0;
+        wbm_lack_o         <= 'b0;
+   end else begin
+      case(m_state)
+      IDLE:  begin
+	 // Read DATA
+         if(wbm_stb_i && !wbm_we_i && wbm_bry_i && !m_cmd_wr_full && !wbm_lack_o) begin
+           m_bl_cnt         <= wbm_bl_i;
+           m_cmd_wr_en      <= 'b1;
+           m_state          <= READ_DATA;
+         end else if(wbm_stb_i && wbm_we_i && wbm_bry_i && !m_cmd_wr_full && !wbm_lack_o) begin
+            wbm_ack_o       <= 'b1;
+            m_cmd_wr_en     <= 'b1;
+            m_bl_cnt        <= wbm_bl_i-1;
+            if(wbm_bl_i == 'h1) begin
+               wbm_lack_o   <= 'b1;
+               m_state      <= IDLE;
+            end else begin
+               m_bl_cnt     <= wbm_bl_i-1;
+               m_state      <= WRITE_DATA;
+            end
+         end else begin
+            m_resp_rd_en    <= 'b0;
+            m_cmd_wr_en     <= 'b0;
+            wbm_ack_o       <= 'b0;
+            wbm_lack_o      <= 'b0;
+         end
+      end
+
+      // Write next Transaction
+      WRITE_DATA: begin
+         if(m_cmd_wr_full != 1 && wbm_bry_i) begin
+            wbm_ack_o       <= 'b1;
+            m_cmd_wr_en     <= 'b1;
+            if(m_bl_cnt == 1) begin
+               wbm_lack_o   <= 'b1;
+               m_state      <= IDLE;
+            end else begin
+               m_bl_cnt        <= m_bl_cnt-1;
+            end
+         end else begin
+            m_cmd_wr_en     <= 'b0;
+            wbm_ack_o       <= 'b0;
+            wbm_lack_o      <= 'b0;
+         end
+      end
+
+      // Read Transaction
+      READ_DATA: begin
+	   // Check Back to Back Ack and last Location case
+           if(((wbm_ack_o == 0 && m_resp_rd_empty != 1) ||
+	       (wbm_ack_o == 1 && m_resp_rd_aempty != 1)) && wbm_bry_i) begin
+              m_resp_rd_en   <= 'b1;
+              wbm_ack_o      <= 'b1;
+              if(m_bl_cnt == 1) begin
+                  wbm_lack_o   <= 'b1;
+                  m_state      <= IDLE;
+              end else begin
+                 m_bl_cnt        <= m_bl_cnt-1;
+	      end
+           end else begin
+              m_resp_rd_en    <= 'b0;
+              m_cmd_wr_en     <= 'b0;
+              wbm_ack_o       <= 'b0;
+              wbm_lack_o      <= 'b0;
+	   end
+      end
+      endcase
+   end
+end
+
+
+//------------------------------
+// Slave Interface
+//-------------------------------
+
+logic [CFW-1:0] s_cmd_rd_data   ;
+logic [CFW-1:0] s_cmd_rd_data_l ;
+logic        s_cmd_rd_empty     ;
+logic        s_cmd_rd_aempty    ;
+logic        s_cmd_rd_en        ;
+logic        s_resp_wr_en        ;
+logic [RFW-1:0] s_resp_wr_data      ;
+logic        s_resp_wr_full      ;
+logic        s_resp_wr_afull     ;
+logic        wbs_ack_f          ;
+logic        wbs_stb_l          ;
+logic        wbs_burst          ;
+
+wire wbs_stb_pedge = (wbs_stb_l == 1'b0) && wbs_stb_o;
+
+
+always@(negedge rst_n or posedge clk_i)
+begin
+   if(rst_n == 0) begin
+      wbs_ack_f <= 1'b0;
+      wbs_stb_l <= 1'b0;
+      wbs_burst <= 'h0;
+      s_cmd_rd_data_l <= 'h0;
+   end else begin
+      wbs_ack_f <= wbs_lack_i;
+      wbs_stb_l <= wbs_stb_o;
+      if(s_cmd_rd_en)
+          s_cmd_rd_data_l <= s_cmd_rd_data;
+      if(wbs_stb_pedge && wbs_bl_o > 'h1)
+         wbs_burst <= 1'b1;
+      else if(wbs_lack_i)
+         wbs_burst <= 1'b0;
+   end
+end
+
+
+// Read Interface
+
+
+assign {wbs_adr_o,wbs_we_o,wbs_dat_o,wbs_sel_o,wbs_tid_o,wbs_bl_o} = (s_cmd_rd_empty) ? s_cmd_rd_data_l:  s_cmd_rd_data;
+// All the downstream logic expect Stobe is getting de-asserted 
+// atleast for 1 cycle after ack is generated
+assign wbs_stb_o = (wbs_burst) ? 1'b1 : ((wbs_ack_f) ? 1'b0 : (s_cmd_rd_empty) ? 1'b0: 1'b1);
+assign wbs_cyc_o = (wbs_burst) ? 1'b1 : ((wbs_ack_f) ? 1'b0 : (s_cmd_rd_empty) ? 1'b0: 1'b1);
+
+// Generate bust ready only we have space inside response fifo
+// In Write Phase, 
+//      Generate burst ready, only when we have wdata & space in response fifo 
+// In Read Phase 
+//      Generate burst ready, only when space in response fifo 
+//
+assign wbs_bry_o = (wbs_we_o) ? ((s_cmd_rd_empty || (s_cmd_rd_en  && s_cmd_rd_aempty)) ? 1'b0: 1'b1) :
+	                         (s_resp_wr_full || (s_resp_wr_en && s_resp_wr_afull)) ? 1'b0: 1'b1;
+
+// During Write phase, cmd fifo will have wdata, so dequeue for every ack
+// During Read Phase, cmd fifo will be written only one time, hold the bus
+// untill last ack received
+assign s_cmd_rd_en = (wbs_stb_o && wbs_we_o) ? wbs_ack_i: wbs_lack_i;
+
+// Write Interface
+// response send only for read logic
+assign s_resp_wr_en   = wbs_stb_o & (!wbs_we_o) & wbs_ack_i ;
+assign s_resp_wr_data = {wbs_err_i,wbs_lack_i,wbs_dat_i};
+
+sync_fifo2 #(.W(CFW), .DP(4),.WR_FAST(1), .RD_FAST(1)) u_cmd_if (
+	           // Sync w.r.t WR clock
+	           .clk           (clk_i             ),
+                   .reset_n       (rst_n             ),
+                   .wr_en         (m_cmd_wr_en       ),
+                   .wr_data       (m_cmd_wr_data     ),
+                   .full          (m_cmd_wr_full     ),                 
+                   .afull         (m_cmd_wr_afull    ),                 
+
+		   // Sync w.r.t RD Clock
+                   .rd_en         (s_cmd_rd_en       ),
+                   .empty         (s_cmd_rd_empty    ), // sync'ed to rd_clk
+                   .aempty        (s_cmd_rd_aempty   ), // sync'ed to rd_clk
+                   .rd_data       (s_cmd_rd_data     )
+	     );
+
+
+// Response used only for read path, 
+// As cache access will be busrt of 512 location, To 
+// support continous ack, depth is increase to 8 location
+sync_fifo2 #(.W(RFW), .DP(4), .WR_FAST(1), .RD_FAST(1)) u_resp_if (
+	           // Sync w.r.t WR clock
+	           .clk           (clk_i              ),
+                   .reset_n       (rst_n              ),
+                   .wr_en         (s_resp_wr_en       ),
+                   .wr_data       (s_resp_wr_data     ),
+                   .full          (s_resp_wr_full     ),                 
+                   .afull         (s_resp_wr_afull    ),                 
+
+		   // Sync w.r.t RD Clock
+                   .rd_en         (m_resp_rd_en       ),
+                   .empty         (m_resp_rd_empty  ), // sync'ed to rd_clk
+                   .aempty        (m_resp_rd_aempty   ), // sync'ed to rd_clk
+                   .rd_data       (m_resp_rd_data     )
+	     );
+
+
+
+endmodule
diff --git a/verilog/rtl/mbist/src/core/mbist_mem_wrapper.sv b/verilog/rtl/mbist/src/core/mbist_mem_wrapper.sv
index 5e22d3e..8f31671 100644
--- a/verilog/rtl/mbist/src/core/mbist_mem_wrapper.sv
+++ b/verilog/rtl/mbist/src/core/mbist_mem_wrapper.sv
@@ -68,16 +68,13 @@
           // 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 [(BIST_NO_SRAM+1)/2-1:0] wb_cs_i         ,  // Chip Select
-        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
+        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        ,
@@ -92,23 +89,14 @@
 
 // Memory Write PORT
 assign func_clk    = wb_clk_i;
-assign func_cen    = (wb_cs_i == sram_id) ? !wb_stb_i : 1'b1;
-assign func_web    = (wb_cs_i == sram_id) ? !wb_we_i  : 1'b1;
-assign func_mask   = wb_sel_i;
-assign func_addr   = wb_adr_i;
-assign func_din    = wb_dat_i;
-assign wb_dat_o      = func_dout;
+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 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_cs_i == sram_id) & (wb_stb_i == 1'b1) & (wb_ack_o == 0);
-   end
-end
 
 
 endmodule
diff --git a/verilog/rtl/mbist/src/core/mbist_repair_addr.sv b/verilog/rtl/mbist/src/core/mbist_repair_addr.sv
index 983f661..47871d6 100644
--- a/verilog/rtl/mbist/src/core/mbist_repair_addr.sv
+++ b/verilog/rtl/mbist/src/core/mbist_repair_addr.sv
@@ -99,7 +99,10 @@
 begin
    AddressOut = AddressIn;
    for(index=0; index < BIST_ERR_LIMIT; index=index+1) begin
-      if(ErrorCnt > index && AddressIn == RepairMem[index]) AddressOut = BIST_REPAIR_ADDR_START+index;
+      if(ErrorCnt > index && AddressIn == RepairMem[index]) begin
+	  AddressOut = BIST_REPAIR_ADDR_START+index;
+	  $display("STATUS: MBIST ADDRESS REPAIR: %m => Old Addr: %x Nex Addr: %x",AddressIn,AddressOut);
+      end
    end
 end
 
diff --git a/verilog/rtl/mbist/src/top/mbist_top.sv b/verilog/rtl/mbist/src/top/mbist_top.sv
index a1094cf..806ce13 100644
--- a/verilog/rtl/mbist/src/top/mbist_top.sv
+++ b/verilog/rtl/mbist/src/top/mbist_top.sv
@@ -90,16 +90,13 @@
         // WB I/F
         input   wire                          wb_clk_i,  // System clock
         input   wire                          wb_clk2_i, // System clock2 is no cts
-        input   wire                          wb_cyc_i,  // strobe/request
-        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
-        output  wire [BIST_DATA_WD-1:0]       wb_dat_o,  // data input
-        output  wire                          wb_ack_o,  // acknowlegement
-        output  wire                          wb_err_o,  // error
+        input   wire                          mem_req,  // strobe/request
+	input   wire [(BIST_NO_SRAM+1)/2-1:0] mem_cs,
+        input   wire [BIST_ADDR_WD-1:0]       mem_addr,  // address
+        input   wire                          mem_we ,  // write
+        input   wire [BIST_DATA_WD-1:0]       mem_wdata,  // data output
+        input   wire [BIST_DATA_WD/8-1:0]     mem_wmask,  // byte enable
+        output  wire [BIST_DATA_WD-1:0]       mem_rdata,  // data input
 
      // towards memory
      // PORT-A
@@ -183,8 +180,6 @@
 wire                    bist_wr         ;
 wire                    bist_rd         ;
 wire [BIST_DATA_WD-1:0] wb_dat[0:BIST_NO_SRAM-1];  // data input
-wire                    wb_ack[0:BIST_NO_SRAM-1];  // acknowlegement
-wire                    wb_err[0:BIST_NO_SRAM-1];  // error
 
 //--------------------------------------------------------
 // As yosys does not support two dimensional var, 
@@ -256,9 +251,7 @@
 assign bist_sdo = bist_ms_sdo[3];
 
 // Pick the correct read path
-assign wb_dat_o = wb_dat[wb_cs_i];
-assign wb_ack_o = wb_ack[wb_cs_i];
-assign wb_err_o = wb_err[wb_cs_i];
+assign mem_rdata = wb_dat[mem_cs];
 
 assign bist_wr = (cmd_phase && op_write);
 assign bist_rd = (cmd_phase && op_read);
@@ -497,16 +490,13 @@
                    // WB I/F
 		        .sram_id         (NO_SRAM_WD'(sram_no)      ),
                         .wb_clk_i        (wb_clk2_i                 ),  // System clock
-                        .wb_cyc_i        (wb_cyc_i                  ),  // strobe/request
-			.wb_cs_i         (wb_cs_i                   ),  // Chip Select
-                        .wb_stb_i        (wb_stb_i                  ),  // strobe/request
-                        .wb_adr_i        (wb_adr_i                  ),  // address
-                        .wb_we_i         (wb_we_i                   ),  // write
-                        .wb_dat_i        (wb_dat_i                  ),  // data output
-                        .wb_sel_i        (wb_sel_i                  ),  // byte enable
-                        .wb_dat_o        (wb_dat[sram_no]           ),  // data input
-                        .wb_ack_o        (wb_ack[sram_no]           ),  // acknowlegement
-                        .wb_err_o        (wb_err[sram_no]           ),  // error
+			.mem_cs          (mem_cs                    ),  // Chip Select
+                        .mem_req         (mem_req                   ),  // strobe/request
+                        .mem_addr        (mem_addr                  ),  // address
+                        .mem_we          (mem_we                    ),  // write
+                        .mem_wdata       (mem_wdata                 ),  // data output
+                        .mem_wmask       (mem_wmask                 ),  // byte enable
+                        .mem_rdata       (wb_dat[sram_no]           ),  // data input
                     // MEM A PORT 
                         .func_clk        (func_clk[sram_no]         ),
                         .func_cen        (func_cen[sram_no]         ),
diff --git a/verilog/rtl/mbist_wrapper/src/mbist_wb.sv b/verilog/rtl/mbist_wrapper/src/mbist_wb.sv
new file mode 100644
index 0000000..ef989dd
--- /dev/null
+++ b/verilog/rtl/mbist_wrapper/src/mbist_wb.sv
@@ -0,0 +1,179 @@
+//////////////////////////////////////////////////////////////////////////////
+// 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>
+//
+//////////////////////////////////////////////////////////////////////
+//   
+//   MBIST wishbone Burst access to SRAM Write and Read access
+//   Note: BUSRT crossing the SRAM boundary is not supported due to sram
+//   2 cycle pipe line delay
+//////////////////////////////////////////////////////////////////////
+
+module mbist_wb
+     #(  
+         parameter BIST_NO_SRAM           = 4,
+	 parameter BIST_ADDR_WD           = 9,
+	 parameter BIST_DATA_WD           = 32) (
+
+`ifdef USE_POWER_PINS
+    inout vccd1,	// User area 1 1.8V supply
+    inout vssd1,	// User area 1 digital ground
+`endif
+
+
+	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
+
+	output  logic                          mem_req,
+	output  logic [(BIST_NO_SRAM+1)/2-1:0] mem_cs,
+	output  logic [BIST_ADDR_WD-1:0]       mem_addr,
+	output  logic [31:0]                   mem_wdata,
+	output  logic                          mem_we,
+	output  logic [3:0]                    mem_wmask,
+	input   logic [31:0]                   mem_rdata
+
+
+
+
+);
+
+parameter IDLE          = 2'b00;
+parameter WRITE_ACTION  = 2'b01;
+parameter READ_ACTION1  = 2'b10;
+parameter READ_ACTION2  = 2'b11;
+
+
+logic [9:0]                mem_bl_cnt     ;
+logic                      wb_ack_l       ;
+logic [BIST_ADDR_WD-1:0]   mem_next_addr;
+logic [1:0]                state;
+logic                      mem_hval;   // Mem Hold Data valid
+logic [31:0]               mem_hdata;  // Mem Hold Data
+
+
+assign  mem_wdata    = wb_dat_i;
+
+always @(negedge rst_n, posedge wb_clk_i) begin
+    if (~rst_n) begin
+       mem_bl_cnt       <= 'h0;
+       mem_addr         <= 'h0;
+       mem_next_addr    <= 'h0;
+       wb_ack_l         <= 'b0;
+       wb_dat_o         <= 'h0;
+       mem_req          <= 'b0;
+       mem_cs           <= 'b0;
+       mem_wmask        <= 'h0;
+       mem_we           <= 'h0;
+       mem_hval         <= 'b0;
+       mem_hdata        <= 'h0;
+       state            <= IDLE;
+    end else begin
+	case(state)
+	 IDLE: begin
+	       mem_bl_cnt  <=  'h1;
+	       wb_ack_o    <=  'b0;
+	       wb_lack_o   <=  'b0;
+	       if(wb_stb_i && wb_bry_i && ~wb_we_i && !wb_lack_o) begin
+	          mem_cs      <=  wb_cs_i;
+	          mem_addr    <=  wb_adr_i;
+	          mem_req     <=  'b1;
+		  mem_we      <=  'b0;
+	          state       <=  READ_ACTION1;
+	       end else if(wb_stb_i && wb_bry_i && wb_we_i && !wb_lack_o) begin
+	          mem_cs      <=  wb_cs_i;
+	          mem_next_addr<=  wb_adr_i;
+		  mem_we      <=  'b1;
+                  mem_wmask   <=  wb_sel_i;
+	          state       <=  WRITE_ACTION;
+	       end else begin
+	          mem_req      <=  1'b0;
+               end
+	    end
+
+         WRITE_ACTION: begin
+	    if (wb_stb_i && wb_bry_i ) begin
+	       wb_ack_o     <=  'b1;
+	       mem_req      <=  1'b1;
+	       mem_addr     <=  mem_next_addr;
+	       if((wb_stb_i && wb_bry_i ) && (wb_bl_i == mem_bl_cnt)) begin
+	           wb_lack_o   <=  'b1;
+	           state       <= IDLE;
+	       end else begin
+	          mem_bl_cnt   <= mem_bl_cnt+1;
+	          mem_next_addr<=  mem_next_addr+1;
+	       end
+            end else begin 
+	       wb_ack_o     <=  'b0;
+	       mem_req      <=  1'b0;
+            end
+         end
+       READ_ACTION1: begin
+	   mem_addr   <=  mem_addr +1;
+           mem_hval   <= 1'b0;
+	   wb_ack_l   <=  'b1;
+	   mem_bl_cnt <=  'h1;
+	   state      <=  READ_ACTION2;
+       end
+
+       // Wait for Ack from application layer
+       READ_ACTION2: begin
+           // If the not the last ack, update memory pointer
+           // accordingly
+	   wb_ack_l    <= wb_ack_o;
+	   if (wb_stb_i && wb_bry_i ) begin
+	      wb_ack_o   <= 1'b1;
+	      mem_bl_cnt <= mem_bl_cnt+1;
+	      mem_addr   <=  mem_addr +1;
+	      if(wb_ack_l || wb_ack_o ) begin // If back to back ack 
+                 wb_dat_o     <= mem_rdata;
+                 mem_hval     <= 1'b0;
+	      end else begin // Pick from previous holding data
+                 mem_hval     <= 1'b1;
+                 wb_dat_o     <= mem_hdata;
+                 mem_hdata    <= mem_rdata;
+	      end
+	      if((wb_stb_i && wb_bry_i ) && (wb_bl_i == mem_bl_cnt)) begin
+		  wb_lack_o   <= 1'b1;
+	          state       <= IDLE;
+	      end
+           end else begin
+	      wb_ack_o   <= 1'b0;
+	      if(!mem_hval) begin
+                 mem_hdata  <= mem_rdata;
+                 mem_hval   <= 1'b1;
+	      end
+           end
+       end
+       endcase
+   end
+end
+
+endmodule
diff --git a/verilog/rtl/mbist_wrapper/src/mbist_wrapper.sv b/verilog/rtl/mbist_wrapper/src/mbist_wrapper.sv
index e33134a..c838f52 100644
--- a/verilog/rtl/mbist_wrapper/src/mbist_wrapper.sv
+++ b/verilog/rtl/mbist_wrapper/src/mbist_wrapper.sv
@@ -97,8 +97,11 @@
         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
 
 
@@ -107,10 +110,8 @@
 
 );
 
-parameter     BIST_NO_SRAM= 4; // NO of MBIST MEMORY
 parameter  NO_SRAM_WD = (BIST_NO_SRAM+1)/2;
 parameter     BIST1_ADDR_WD = 11; // 512x32 SRAM
-parameter     BIST_DATA_WD = 32;
 
 // FUNCTIONAL PORT 
 // towards memory MBIST1
@@ -143,6 +144,55 @@
 wire [BIST1_ADDR_WD-1:2]       mem2_addr_b;
 wire [BIST1_ADDR_WD-1:2]       mem3_addr_b;
 
+logic                          mem_req;
+logic [(BIST_NO_SRAM+1)/2-1:0] mem_cs;
+logic [BIST_ADDR_WD-1:0]       mem_addr;
+logic [31:0]                   mem_wdata;
+logic                          mem_we;
+logic [3:0]                    mem_wmask;
+logic [31:0]                   mem_rdata;
+
+mbist_wb  #(
+	.BIST_NO_SRAM           (4                      ),
+	.BIST_ADDR_WD           (BIST1_ADDR_WD-2        ),
+	.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
+`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            )
+
+	
+
+
+);
+
 
 mbist_top  #(
 	`ifndef SYNTHESIS
@@ -171,16 +221,13 @@
 	// WB I/F
         .wb_clk2_i            (wb_clk2_i            ),  
         .wb_clk_i             (wb_clk_i             ),  
-        .wb_cyc_i             (wb_cyc_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_dat_o             (wb_dat_o             ),  
-        .wb_ack_o             (wb_ack_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                ),
 
diff --git a/verilog/rtl/pinmux/src/pinmux_reg.sv b/verilog/rtl/pinmux/src/pinmux_reg.sv
index 1eb04e1..c59c28f 100644
--- a/verilog/rtl/pinmux/src/pinmux_reg.sv
+++ b/verilog/rtl/pinmux/src/pinmux_reg.sv
@@ -721,7 +721,7 @@
 //-----------------------------------------
 // Software Reg-2, Release date: <DAY><MONTH><YEAR>
 // ----------------------------------------
-gen_32b_reg  #(32'h1501_2022) u_reg_23	(
+gen_32b_reg  #(32'h0202_2022) u_reg_23	(
 	      //List of Inputs
 	      .reset_n    (h_reset_n     ),
 	      .clk        (mclk          ),
@@ -734,9 +734,9 @@
 	      );
 
 //-----------------------------------------
-// Software Reg-3: Poject Revison 3.0 = 0003100
+// Software Reg-3: Poject Revison 3.2 = 0003200
 // ----------------------------------------
-gen_32b_reg  #(32'h0003_1000) u_reg_24	(
+gen_32b_reg  #(32'h0003_2000) u_reg_24	(
 	      //List of Inputs
 	      .reset_n    (h_reset_n     ),
 	      .clk        (mclk          ),
diff --git a/verilog/rtl/qspim b/verilog/rtl/qspim
index f7a1f82..50b382d 160000
--- a/verilog/rtl/qspim
+++ b/verilog/rtl/qspim
@@ -1 +1 @@
-Subproject commit f7a1f824fda54c5103bcbd5b9401f36d28551491
+Subproject commit 50b382d05288f8b0d59c8c9e575719d4f3f00911
diff --git a/verilog/rtl/uprj_netlists.v b/verilog/rtl/uprj_netlists.v
index b9fc454..b81ad7e 100644
--- a/verilog/rtl/uprj_netlists.v
+++ b/verilog/rtl/uprj_netlists.v
@@ -105,44 +105,54 @@
      `include "wb_host/src/wb_host.sv"
      `include "lib/async_wb.sv"
 
-     `include "lib/wb_stagging.sv"
+     `include "lib/sync_wbb.sv"
+     `include "lib/sync_fifo2.sv"
      `include "wb_interconnect/src/wb_arb.sv"
      `include "wb_interconnect/src/wb_interconnect.sv"
 
 
-     `include "yifive/ycr1/src/core/pipeline/ycr1_pipe_hdu.sv"
-     `include "yifive/ycr1/src/core/pipeline/ycr1_pipe_tdu.sv"
-     `include "yifive/ycr1/src/core/pipeline/ycr1_ipic.sv"
-     `include "yifive/ycr1/src/core/pipeline/ycr1_pipe_csr.sv"
-     `include "yifive/ycr1/src/core/pipeline/ycr1_pipe_exu.sv"
-     `include "yifive/ycr1/src/core/pipeline/ycr1_pipe_ialu.sv"
-     `include "yifive/ycr1/src/core/pipeline/ycr1_pipe_idu.sv"
-     `include "yifive/ycr1/src/core/pipeline/ycr1_pipe_ifu.sv"
-     `include "yifive/ycr1/src/core/pipeline/ycr1_pipe_lsu.sv"
-     `include "yifive/ycr1/src/core/pipeline/ycr1_pipe_mprf.sv"
-     `include "yifive/ycr1/src/core/pipeline/ycr1_pipe_mul.sv"
-     `include "yifive/ycr1/src/core/pipeline/ycr1_pipe_div.sv"
-     `include "yifive/ycr1/src/core/pipeline/ycr1_pipe_top.sv"
-     `include "yifive/ycr1/src/core/primitives/ycr1_reset_cells.sv"
-     `include "yifive/ycr1/src/core/primitives/ycr1_cg.sv"
-     `include "yifive/ycr1/src/core/ycr1_clk_ctrl.sv"
-     `include "yifive/ycr1/src/core/ycr1_tapc_shift_reg.sv"
-     `include "yifive/ycr1/src/core/ycr1_tapc.sv"
-     `include "yifive/ycr1/src/core/ycr1_tapc_synchronizer.sv"
-     `include "yifive/ycr1/src/core/ycr1_core_top.sv"
-     `include "yifive/ycr1/src/core/ycr1_dm.sv"
-     `include "yifive/ycr1/src/core/ycr1_dmi.sv"
-     `include "yifive/ycr1/src/core/ycr1_scu.sv"
-      
-     `include "yifive/ycr1/src/top/ycr1_imem_router.sv"
-     `include "yifive/ycr1/src/top/ycr1_dmem_router.sv"
-     `include "yifive/ycr1/src/top/ycr1_dp_memory.sv"
-     `include "yifive/ycr1/src/top/ycr1_tcm.sv"
-     `include "yifive/ycr1/src/top/ycr1_timer.sv"
-     `include "yifive/ycr1/src/top/ycr1_dmem_wb.sv"
-     `include "yifive/ycr1/src/top/ycr1_imem_wb.sv"
-     `include "yifive/ycr1/src/top/ycr1_intf.sv"
-     `include "yifive/ycr1/src/top/ycr1_top_wb.sv"
+     `include "yifive/ycr1c/src/core/pipeline/ycr1_pipe_hdu.sv"
+     `include "yifive/ycr1c/src/core/pipeline/ycr1_pipe_tdu.sv"
+     `include "yifive/ycr1c/src/core/pipeline/ycr1_ipic.sv"
+     `include "yifive/ycr1c/src/core/pipeline/ycr1_pipe_csr.sv"
+     `include "yifive/ycr1c/src/core/pipeline/ycr1_pipe_exu.sv"
+     `include "yifive/ycr1c/src/core/pipeline/ycr1_pipe_ialu.sv"
+     `include "yifive/ycr1c/src/core/pipeline/ycr1_pipe_idu.sv"
+     `include "yifive/ycr1c/src/core/pipeline/ycr1_pipe_ifu.sv"
+     `include "yifive/ycr1c/src/core/pipeline/ycr1_pipe_lsu.sv"
+     `include "yifive/ycr1c/src/core/pipeline/ycr1_pipe_mprf.sv"
+     `include "yifive/ycr1c/src/core/pipeline/ycr1_pipe_mul.sv"
+     `include "yifive/ycr1c/src/core/pipeline/ycr1_pipe_div.sv"
+     `include "yifive/ycr1c/src/core/pipeline/ycr1_pipe_top.sv"
+     `include "yifive/ycr1c/src/core/primitives/ycr1_reset_cells.sv"
+     `include "yifive/ycr1c/src/core/primitives/ycr1_cg.sv"
+     `include "yifive/ycr1c/src/core/ycr1_clk_ctrl.sv"
+     `include "yifive/ycr1c/src/core/ycr1_tapc_shift_reg.sv"
+     `include "yifive/ycr1c/src/core/ycr1_tapc.sv"
+     `include "yifive/ycr1c/src/core/ycr1_tapc_synchronizer.sv"
+     `include "yifive/ycr1c/src/core/ycr1_core_top.sv"
+     `include "yifive/ycr1c/src/core/ycr1_dm.sv"
+     `include "yifive/ycr1c/src/core/ycr1_dmi.sv"
+     `include "yifive/ycr1c/src/core/ycr1_scu.sv"
+     `include "yifive/ycr1c/src/top/ycr1_imem_router.sv"
+     `include "yifive/ycr1c/src/top/ycr1_dmem_router.sv"
+     `include "yifive/ycr1c/src/top/ycr1_dp_memory.sv"
+     `include "yifive/ycr1c/src/top/ycr1_tcm.sv"
+     `include "yifive/ycr1c/src/top/ycr1_timer.sv"
+     `include "yifive/ycr1c/src/top/ycr1_dmem_wb.sv"
+     `include "yifive/ycr1c/src/top/ycr1_imem_wb.sv"
+     `include "yifive/ycr1c/src/top/ycr1_intf.sv"
+     `include "yifive/ycr1c/src/top/ycr1_top_wb.sv"
+     `include "yifive/ycr1c/src/top/ycr1_icache_router.sv"
+     `include "yifive/ycr1c/src/top/ycr1_dcache_router.sv"
+     `include "yifive/ycr1c/src/cache/src/core/icache_top.sv"
+     `include "yifive/ycr1c/src/cache/src/core/icache_app_fsm.sv"
+     `include "yifive/ycr1c/src/cache/src/core/icache_tag_fifo.sv"
+     `include "yifive/ycr1c/src/cache/src/core/dcache_tag_fifo.sv"
+     `include "yifive/ycr1c/src/cache/src/core/dcache_top.sv"
+     `include "yifive/ycr1c/src/lib/ycr1_async_wbb.sv"
+     `include "yifive/ycr1c/src/lib/ycr1_arb.sv"
+
      `include "lib/sync_fifo.sv"
 
      `include "mbist/src/core/mbist_addr_gen.sv"
@@ -156,6 +166,8 @@
      `include "mbist/src/core/mbist_mem_wrapper.sv"
 
     `include "mbist/src/top/mbist_top.sv" 
+    `include "mbist_wrapper/src/mbist_wb.sv" 
+    `include "mbist_wrapper/src/mbist_wrapper.sv" 
 
 
     `include "uart2wb/src/uart2wb.sv" 
diff --git a/verilog/rtl/user_project_wrapper.v b/verilog/rtl/user_project_wrapper.v
index 0c0f7cf..efe14c3 100644
--- a/verilog/rtl/user_project_wrapper.v
+++ b/verilog/rtl/user_project_wrapper.v
@@ -152,6 +152,9 @@
 ////        yfive/ycr1 on sankranti 2022 (A Hindu New Year)       ////
 ////    3.1  Jan 15, 2022, Dinesh A                               ////
 ////         Major changes in qspim logic to handle special mode  ////
+////    3.2  Feb 02, 2022, Dinesh A                               ////
+////         Bug fix around icache/dcache and wishbone burst      ////
+////         access clean-up                                      ////
 //////////////////////////////////////////////////////////////////////
 ////                                                              ////
 //// Copyright (C) 2000 Authors and OPENCORES.ORG                 ////
@@ -237,16 +240,34 @@
 parameter     BIST_DATA_WD = 32;
 
 //---------------------------------------------------------------------
-// Wishbone Risc V Instruction Memory Interface
+// Wishbone Risc V Dcache Memory Interface
 //---------------------------------------------------------------------
-wire                           wbd_riscv_imem_stb_i; // strobe/request
-wire   [WB_WIDTH-1:0]          wbd_riscv_imem_adr_i; // address
-wire                           wbd_riscv_imem_we_i;  // write
-wire   [WB_WIDTH-1:0]          wbd_riscv_imem_dat_i; // data output
-wire   [3:0]                   wbd_riscv_imem_sel_i; // byte enable
-wire   [WB_WIDTH-1:0]          wbd_riscv_imem_dat_o; // data input
-wire                           wbd_riscv_imem_ack_o; // acknowlegement
-wire                           wbd_riscv_imem_err_o;  // error
+wire                           wbd_riscv_dcache_stb_i; // strobe/request
+wire   [WB_WIDTH-1:0]          wbd_riscv_dcache_adr_i; // address
+wire                           wbd_riscv_dcache_we_i;  // write
+wire   [WB_WIDTH-1:0]          wbd_riscv_dcache_dat_i; // data output
+wire   [3:0]                   wbd_riscv_dcache_sel_i; // byte enable
+wire   [9:0]                   wbd_riscv_dcache_bl_i;  // burst length
+wire                           wbd_riscv_dcache_bry_i; // burst ready
+wire   [WB_WIDTH-1:0]          wbd_riscv_dcache_dat_o; // data input
+wire                           wbd_riscv_dcache_ack_o; // acknowlegement
+wire                           wbd_riscv_dcache_lack_o;// last burst acknowlegement
+wire                           wbd_riscv_dcache_err_o;  // error
+
+//---------------------------------------------------------------------
+// Wishbone Risc V Icache Memory Interface
+//---------------------------------------------------------------------
+wire                           wbd_riscv_icache_stb_i; // strobe/request
+wire   [WB_WIDTH-1:0]          wbd_riscv_icache_adr_i; // address
+wire                           wbd_riscv_icache_we_i;  // write
+wire   [WB_WIDTH-1:0]          wbd_riscv_icache_dat_i; // data output
+wire   [3:0]                   wbd_riscv_icache_sel_i; // byte enable
+wire   [9:0]                   wbd_riscv_icache_bl_i;  // burst length
+wire                           wbd_riscv_icache_bry_i; // burst ready
+wire   [WB_WIDTH-1:0]          wbd_riscv_icache_dat_o; // data input
+wire                           wbd_riscv_icache_ack_o; // acknowlegement
+wire                           wbd_riscv_icache_lack_o;// last burst acknowlegement
+wire                           wbd_riscv_icache_err_o;  // error
 
 //---------------------------------------------------------------------
 // RISC V Wishbone Data Memory Interface
@@ -335,9 +356,12 @@
 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; // byte enable
+wire                           wbd_mbist_bry_o; // byte enable
 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_lack_i; // acknowlegement
 wire                           wbd_mbist_err_i;  // error
 
 //----------------------------------------------------
@@ -557,33 +581,33 @@
 
 // towards memory MBIST1
 // PORT-A
-wire   [BIST_NO_SRAM-1:0]      mem_clk_a;
-wire   [BIST1_ADDR_WD-1:2]     mem0_addr_a;
-wire   [BIST1_ADDR_WD-1:2]     mem1_addr_a;
-wire   [BIST1_ADDR_WD-1:2]     mem2_addr_a;
-wire   [BIST1_ADDR_WD-1:2]     mem3_addr_a;
-wire   [BIST_NO_SRAM-1:0]      mem_cen_a;
-wire   [BIST_NO_SRAM-1:0]      mem_web_a;
-wire [BIST_DATA_WD/8-1:0]      mem0_mask_a;
-wire [BIST_DATA_WD/8-1:0]      mem1_mask_a;
-wire [BIST_DATA_WD/8-1:0]      mem2_mask_a;
-wire [BIST_DATA_WD/8-1:0]      mem3_mask_a;
-wire   [BIST_DATA_WD-1:0]      mem0_din_a;
-wire   [BIST_DATA_WD-1:0]      mem1_din_a;
-wire   [BIST_DATA_WD-1:0]      mem2_din_a;
-wire   [BIST_DATA_WD-1:0]      mem3_din_a;
-wire   [BIST_DATA_WD-1:0]      mem0_dout_a;
-wire   [BIST_DATA_WD-1:0]      mem1_dout_a;
-wire   [BIST_DATA_WD-1:0]      mem2_dout_a;
-wire   [BIST_DATA_WD-1:0]      mem3_dout_a;
+//wire   [BIST_NO_SRAM-1:0]      mem_clk_a;
+//wire   [BIST1_ADDR_WD-1:2]     mem0_addr_a;
+//wire   [BIST1_ADDR_WD-1:2]     mem1_addr_a;
+//wire   [BIST1_ADDR_WD-1:2]     mem2_addr_a;
+//wire   [BIST1_ADDR_WD-1:2]     mem3_addr_a;
+//wire   [BIST_NO_SRAM-1:0]      mem_cen_a;
+//wire   [BIST_NO_SRAM-1:0]      mem_web_a;
+//wire [BIST_DATA_WD/8-1:0]      mem0_mask_a;
+//wire [BIST_DATA_WD/8-1:0]      mem1_mask_a;
+//wire [BIST_DATA_WD/8-1:0]      mem2_mask_a;
+//wire [BIST_DATA_WD/8-1:0]      mem3_mask_a;
+//wire   [BIST_DATA_WD-1:0]      mem0_din_a;
+//wire   [BIST_DATA_WD-1:0]      mem1_din_a;
+//wire   [BIST_DATA_WD-1:0]      mem2_din_a;
+//wire   [BIST_DATA_WD-1:0]      mem3_din_a;
+//wire   [BIST_DATA_WD-1:0]      mem0_dout_a;
+//wire   [BIST_DATA_WD-1:0]      mem1_dout_a;
+//wire   [BIST_DATA_WD-1:0]      mem2_dout_a;
+//wire   [BIST_DATA_WD-1:0]      mem3_dout_a;
 
 // PORT-B
-wire [BIST_NO_SRAM-1:0]        mem_clk_b;
-wire [BIST_NO_SRAM-1:0]        mem_cen_b;
-wire [BIST1_ADDR_WD-1:2]       mem0_addr_b;
-wire [BIST1_ADDR_WD-1:2]       mem1_addr_b;
-wire [BIST1_ADDR_WD-1:2]       mem2_addr_b;
-wire [BIST1_ADDR_WD-1:2]       mem3_addr_b;
+//wire [BIST_NO_SRAM-1:0]        mem_clk_b;
+//wire [BIST_NO_SRAM-1:0]        mem_cen_b;
+//wire [BIST1_ADDR_WD-1:2]       mem0_addr_b;
+//wire [BIST1_ADDR_WD-1:2]       mem1_addr_b;
+//wire [BIST1_ADDR_WD-1:2]       mem2_addr_b;
+//wire [BIST1_ADDR_WD-1:2]       mem3_addr_b;
 
 wire [3:0]                     spi_csn;
 
@@ -730,33 +754,50 @@
     .sram0_addr1            (sram0_addr1               ),
     .sram0_dout1            (sram0_dout1               ),
 
-    // SRAM-1 PORT-0
-    .sram1_clk0             (sram1_clk0                ),
-    .sram1_csb0             (sram1_csb0                ),
-    .sram1_web0             (sram1_web0                ),
-    .sram1_addr0            (sram1_addr0               ),
-    .sram1_wmask0           (sram1_wmask0              ),
-    .sram1_din0             (sram1_din0                ),
-    .sram1_dout0            (sram1_dout0               ),
-    
-    // SRAM PORT-0
-    .sram1_clk1             (sram1_clk1                ),
-    .sram1_csb1             (sram1_csb1                ),
-    .sram1_addr1            (sram1_addr1               ),
-    .sram1_dout1            (sram1_dout1               ),
+  //  // SRAM-1 PORT-0
+  //  .sram1_clk0             (sram1_clk0                ),
+  //  .sram1_csb0             (sram1_csb0                ),
+  //  .sram1_web0             (sram1_web0                ),
+  //  .sram1_addr0            (sram1_addr0               ),
+  //  .sram1_wmask0           (sram1_wmask0              ),
+  //  .sram1_din0             (sram1_din0                ),
+  //  .sram1_dout0            (sram1_dout0               ),
+  //  
+  //  // SRAM PORT-0
+  //  .sram1_clk1             (sram1_clk1                ),
+  //  .sram1_csb1             (sram1_csb1                ),
+  //  .sram1_addr1            (sram1_addr1               ),
+  //  .sram1_dout1            (sram1_dout1               ),
 `endif
     
-    .wb_rst_n               (wbd_int_rst_n             ),
-    .wb_clk                 (wbd_clk_riscv_skew        ),
-    // Instruction memory interface
-    .wbd_imem_stb_o         (wbd_riscv_imem_stb_i      ),
-    .wbd_imem_adr_o         (wbd_riscv_imem_adr_i      ),
-    .wbd_imem_we_o          (wbd_riscv_imem_we_i       ), 
-    .wbd_imem_dat_o         (wbd_riscv_imem_dat_i      ),
-    .wbd_imem_sel_o         (wbd_riscv_imem_sel_i      ),
-    .wbd_imem_dat_i         (wbd_riscv_imem_dat_o      ),
-    .wbd_imem_ack_i         (wbd_riscv_imem_ack_o      ),
-    .wbd_imem_err_i         (wbd_riscv_imem_err_o      ),
+    .wb_rst_n               (wbd_int_rst_n               ),
+    .wb_clk                 (wbd_clk_riscv_skew          ),
+
+    // Instruction cache memory interface
+    .wb_icache_stb_o       (wbd_riscv_icache_stb_i      ),
+    .wb_icache_adr_o       (wbd_riscv_icache_adr_i      ),
+    .wb_icache_we_o        (wbd_riscv_icache_we_i       ), 
+    .wb_icache_dat_o       (wbd_riscv_icache_dat_i      ),
+    .wb_icache_sel_o       (wbd_riscv_icache_sel_i      ),
+    .wb_icache_bl_o        (wbd_riscv_icache_bl_i       ),
+    .wb_icache_bry_o       (wbd_riscv_icache_bry_i      ),
+    .wb_icache_dat_i       (wbd_riscv_icache_dat_o      ),
+    .wb_icache_ack_i       (wbd_riscv_icache_ack_o      ),
+    .wb_icache_lack_i      (wbd_riscv_icache_lack_o     ),
+    .wb_icache_err_i       (wbd_riscv_icache_err_o      ),
+
+    // Data cache memory interface
+    .wb_dcache_stb_o       (wbd_riscv_dcache_stb_i     ),
+    .wb_dcache_adr_o       (wbd_riscv_dcache_adr_i     ),
+    .wb_dcache_we_o        (wbd_riscv_dcache_we_i      ), 
+    .wb_dcache_dat_o       (wbd_riscv_dcache_dat_i     ),
+    .wb_dcache_sel_o       (wbd_riscv_dcache_sel_i     ),
+    .wb_dcache_bl_o        (wbd_riscv_dcache_bl_i      ),
+    .wb_dcache_bry_o       (wbd_riscv_dcache_bry_i     ),
+    .wb_dcache_dat_i       (wbd_riscv_dcache_dat_o     ),
+    .wb_dcache_ack_i       (wbd_riscv_dcache_ack_o     ),
+    .wb_dcache_lack_i      (wbd_riscv_dcache_lack_o    ),
+    .wb_dcache_err_i       (wbd_riscv_dcache_err_o     ),
 
     // Data memory interface
     .wbd_dmem_stb_o         (wbd_riscv_dmem_stb_i      ),
@@ -790,6 +831,7 @@
     .dout1    (sram0_dout1)
   );
 
+/***
 sky130_sram_2kbyte_1rw1r_32x512_8 u_tsram1_2kb(
 `ifdef USE_POWER_PINS
     .vccd1 (vccd1),// User area 1 1.8V supply
@@ -809,7 +851,7 @@
     .addr1    (sram1_addr1),
     .dout1    (sram1_dout1)
   );
-
+***/
 `endif
 
 
@@ -991,27 +1033,44 @@
          .m0_wbd_ack_o  (wbd_int_ack_o         ),
          .m0_wbd_err_o  (wbd_int_err_o         ),
          
-         // Master 0 Interface
-         .m1_wbd_dat_i  (wbd_riscv_imem_dat_i  ),
-         .m1_wbd_adr_i  (wbd_riscv_imem_adr_i  ),
-         .m1_wbd_sel_i  (wbd_riscv_imem_sel_i  ),
-         .m1_wbd_we_i   (wbd_riscv_imem_we_i   ),
-         .m1_wbd_cyc_i  (wbd_riscv_imem_stb_i  ),
-         .m1_wbd_stb_i  (wbd_riscv_imem_stb_i  ),
-         .m1_wbd_dat_o  (wbd_riscv_imem_dat_o  ),
-         .m1_wbd_ack_o  (wbd_riscv_imem_ack_o  ),
-         .m1_wbd_err_o  (wbd_riscv_imem_err_o  ),
-         
          // Master 1 Interface
-         .m2_wbd_dat_i  (wbd_riscv_dmem_dat_i  ),
-         .m2_wbd_adr_i  (wbd_riscv_dmem_adr_i  ),
-         .m2_wbd_sel_i  (wbd_riscv_dmem_sel_i  ),
-         .m2_wbd_we_i   (wbd_riscv_dmem_we_i   ),
-         .m2_wbd_cyc_i  (wbd_riscv_dmem_stb_i  ),
-         .m2_wbd_stb_i  (wbd_riscv_dmem_stb_i  ),
-         .m2_wbd_dat_o  (wbd_riscv_dmem_dat_o  ),
-         .m2_wbd_ack_o  (wbd_riscv_dmem_ack_o  ),
-         .m2_wbd_err_o  (wbd_riscv_dmem_err_o  ),
+         .m1_wbd_dat_i  (wbd_riscv_dmem_dat_i  ),
+         .m1_wbd_adr_i  (wbd_riscv_dmem_adr_i  ),
+         .m1_wbd_sel_i  (wbd_riscv_dmem_sel_i  ),
+         .m1_wbd_we_i   (wbd_riscv_dmem_we_i   ),
+         .m1_wbd_cyc_i  (wbd_riscv_dmem_stb_i  ),
+         .m1_wbd_stb_i  (wbd_riscv_dmem_stb_i  ),
+         .m1_wbd_dat_o  (wbd_riscv_dmem_dat_o  ),
+         .m1_wbd_ack_o  (wbd_riscv_dmem_ack_o  ),
+         .m1_wbd_err_o  (wbd_riscv_dmem_err_o  ),
+         
+         // Master 2 Interface
+         .m2_wbd_dat_i  (wbd_riscv_dcache_dat_i  ),
+         .m2_wbd_adr_i  (wbd_riscv_dcache_adr_i  ),
+         .m2_wbd_sel_i  (wbd_riscv_dcache_sel_i  ),
+         .m2_wbd_bl_i   (wbd_riscv_dcache_bl_i   ),
+         .m2_wbd_bry_i  (wbd_riscv_dcache_bry_i  ),
+         .m2_wbd_we_i   (wbd_riscv_dcache_we_i   ),
+         .m2_wbd_cyc_i  (wbd_riscv_dcache_stb_i  ),
+         .m2_wbd_stb_i  (wbd_riscv_dcache_stb_i  ),
+         .m2_wbd_dat_o  (wbd_riscv_dcache_dat_o  ),
+         .m2_wbd_ack_o  (wbd_riscv_dcache_ack_o  ),
+         .m2_wbd_lack_o (wbd_riscv_dcache_lack_o ),
+         .m2_wbd_err_o  (wbd_riscv_dcache_err_o  ),
+
+         // Master 3 Interface
+         .m3_wbd_dat_i  (wbd_riscv_icache_dat_i  ),
+         .m3_wbd_adr_i  (wbd_riscv_icache_adr_i  ),
+         .m3_wbd_sel_i  (wbd_riscv_icache_sel_i  ),
+         .m3_wbd_bl_i   (wbd_riscv_icache_bl_i   ),
+         .m3_wbd_bry_i  (wbd_riscv_icache_bry_i  ),
+         .m3_wbd_we_i   (wbd_riscv_icache_we_i   ),
+         .m3_wbd_cyc_i  (wbd_riscv_icache_stb_i  ),
+         .m3_wbd_stb_i  (wbd_riscv_icache_stb_i  ),
+         .m3_wbd_dat_o  (wbd_riscv_icache_dat_o  ),
+         .m3_wbd_ack_o  (wbd_riscv_icache_ack_o  ),
+         .m3_wbd_lack_o (wbd_riscv_icache_lack_o ),
+         .m3_wbd_err_o  (wbd_riscv_icache_err_o  ),
          
          
          // Slave 0 Interface
@@ -1054,9 +1113,12 @@
          // .s3_wbd_err_i  (1'b0          ), - Moved inside IP
          .s3_wbd_dat_i  (wbd_mbist_dat_i ),
          .s3_wbd_ack_i  (wbd_mbist_ack_i ),
+         .s3_wbd_lack_i (wbd_mbist_lack_i ),
          .s3_wbd_dat_o  (wbd_mbist_dat_o ),
          .s3_wbd_adr_o  (wbd_mbist_adr_o ),
          .s3_wbd_sel_o  (wbd_mbist_sel_o ),
+         .s3_wbd_bry_o  (wbd_mbist_bry_o ),
+         .s3_wbd_bl_o   (wbd_mbist_bl_o ),
          .s3_wbd_we_o   (wbd_mbist_we_o  ),  
          .s3_wbd_cyc_o  (wbd_mbist_cyc_o ),
          .s3_wbd_stb_o  (wbd_mbist_stb_o )
@@ -1224,9 +1286,9 @@
 
 
    ); 
-//------------- MBIST1 - 512x32             ----
+//------------- MBIST - 512x32             ----
 
-mbist_top  #(
+mbist_wrapper  #(
 	`ifndef SYNTHESIS
 	.BIST_NO_SRAM           (4                      ),
 	.BIST_ADDR_WD           (BIST1_ADDR_WD-2        ),
@@ -1260,8 +1322,11 @@
         .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_lack_o            (wbd_mbist_lack_i),  
         .wb_err_o             (                 ), 
 
 	.rst_n                (bist_rst_n       ),
@@ -1280,40 +1345,41 @@
 	.bist_correct         (bist_correct     ),
 	.bist_error           (bist_error       ),
 	.bist_done            (bist_done        ),
-	.bist_sdo             (bist_sdo         ),
+	.bist_sdo             (bist_sdo         )
 
-     // towards memory
-     // PORT-A
-        .mem_clk_a            (mem_clk_a         ),
-        .mem_addr_a0          (mem0_addr_a       ),
-        .mem_addr_a1          (mem1_addr_a       ),
-        .mem_addr_a2          (mem2_addr_a       ),
-        .mem_addr_a3          (mem3_addr_a       ),
-        .mem_cen_a            (mem_cen_a         ),
-        .mem_web_a            (mem_web_a         ),
-        .mem_mask_a0          (mem0_mask_a       ),
-        .mem_mask_a1          (mem1_mask_a       ),
-        .mem_mask_a2          (mem2_mask_a       ),
-        .mem_mask_a3          (mem3_mask_a       ),
-        .mem_din_a0           (mem0_din_a        ),
-        .mem_din_a1           (mem1_din_a        ),
-        .mem_din_a2           (mem2_din_a        ),
-        .mem_din_a3           (mem3_din_a        ),
-        .mem_dout_a0          (mem0_dout_a       ),
-        .mem_dout_a1          (mem1_dout_a       ),
-        .mem_dout_a2          (mem2_dout_a       ),
-        .mem_dout_a3          (mem3_dout_a       ),
-     // PORT-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       )
+    // // towards memory
+    // // PORT-A
+    //    .mem_clk_a            (mem_clk_a         ),
+    //    .mem_addr_a0          (mem0_addr_a       ),
+    //    .mem_addr_a1          (mem1_addr_a       ),
+    //    .mem_addr_a2          (mem2_addr_a       ),
+    //    .mem_addr_a3          (mem3_addr_a       ),
+    //    .mem_cen_a            (mem_cen_a         ),
+    //    .mem_web_a            (mem_web_a         ),
+    //    .mem_mask_a0          (mem0_mask_a       ),
+    //    .mem_mask_a1          (mem1_mask_a       ),
+    //    .mem_mask_a2          (mem2_mask_a       ),
+    //    .mem_mask_a3          (mem3_mask_a       ),
+    //    .mem_din_a0           (mem0_din_a        ),
+    //    .mem_din_a1           (mem1_din_a        ),
+    //    .mem_din_a2           (mem2_din_a        ),
+    //    .mem_din_a3           (mem3_din_a        ),
+    //    .mem_dout_a0          (mem0_dout_a       ),
+    //    .mem_dout_a1          (mem1_dout_a       ),
+    //    .mem_dout_a2          (mem2_dout_a       ),
+    //    .mem_dout_a3          (mem3_dout_a       ),
+    // // PORT-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
@@ -1395,6 +1461,8 @@
     .dout1    ()
   );
 
+**/
+
 /***
 sar_adc  u_adc (
 `ifdef USE_POWER_PINS
diff --git a/verilog/rtl/wb_interconnect/src/wb_arb.sv b/verilog/rtl/wb_interconnect/src/wb_arb.sv
index 16e0da7..aefac4a 100644
--- a/verilog/rtl/wb_interconnect/src/wb_arb.sv
+++ b/verilog/rtl/wb_interconnect/src/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
 
 ///////////////////////////////////////////////////////////////////////
@@ -80,7 +80,8 @@
 parameter	[1:0]
                 grant0 = 3'h0,
                 grant1 = 3'h1,
-                grant2 = 3'h2;
+                grant2 = 3'h2,
+                grant3 = 3'h3;
 
 ///////////////////////////////////////////////////////////////////////
 // Local Registers and Wires
@@ -115,11 +116,13 @@
       	if(!req[0] ) begin
       		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[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/wb_interconnect/src/wb_interconnect.sv b/verilog/rtl/wb_interconnect/src/wb_interconnect.sv
index 14e716e..1f83bc6 100644
--- a/verilog/rtl/wb_interconnect/src/wb_interconnect.sv
+++ b/verilog/rtl/wb_interconnect/src/wb_interconnect.sv
@@ -158,6 +158,8 @@
          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 [9:0]	m2_wbd_bl_i,
+         input	logic    	m2_wbd_bry_i,
          input	logic 	        m2_wbd_we_i,
          input	logic 	        m2_wbd_cyc_i,
          input	logic 	        m2_wbd_stb_i,
@@ -166,6 +168,19 @@
          output	logic 	        m2_wbd_lack_o,
          output	logic 	        m2_wbd_err_o,
          
+         // Master 3 Interface
+         input	logic [31:0]	m3_wbd_dat_i,
+         input	logic [31:0]	m3_wbd_adr_i,
+         input	logic [3:0]	m3_wbd_sel_i,
+         input	logic [9:0]	m3_wbd_bl_i,
+         input	logic    	m3_wbd_bry_i,
+         input	logic 	        m3_wbd_we_i,
+         input	logic 	        m3_wbd_cyc_i,
+         input	logic 	        m3_wbd_stb_i,
+         output	logic [31:0]	m3_wbd_dat_o,
+         output	logic 	        m3_wbd_ack_o,
+         output	logic 	        m3_wbd_lack_o,
+         output	logic 	        m3_wbd_err_o,
          
          // Slave 0 Interface
          input	logic [31:0]	s0_wbd_dat_i,
@@ -207,10 +222,13 @@
 	 // MBIST
          input	logic [31:0]	s3_wbd_dat_i,
          input	logic 	        s3_wbd_ack_i,
+         input	logic 	        s3_wbd_lack_i,
          // input	logic 	s3_wbd_err_i,
          output	logic [31:0]	s3_wbd_dat_o,
          output	logic [12:0]	s3_wbd_adr_o, 
          output	logic [3:0]   	s3_wbd_sel_o,
+         output	logic [9:0]   	s3_wbd_bl_o,
+         output	logic    	s3_wbd_bry_o,
          output	logic 	        s3_wbd_we_o,
          output	logic 	        s3_wbd_cyc_o,
          output	logic 	        s3_wbd_stb_o
@@ -253,11 +271,13 @@
 type_wb_wr_intf  m0_wb_wr;
 type_wb_wr_intf  m1_wb_wr;
 type_wb_wr_intf  m2_wb_wr;
+type_wb_wr_intf  m3_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;
+type_wb_rd_intf  m3_wb_rd;
 
 // Slave Write Interface
 type_wb_wr_intf  s0_wb_wr;
@@ -351,16 +371,30 @@
 	                      (boot_remap[1] && m2_wbd_adr_i[31:11] == 21'h1) ? TARGET_MBIST:
 	                      (boot_remap[2] && m2_wbd_adr_i[31:11] == 21'h2) ? TARGET_MBIST:
 	                      (boot_remap[3] && m2_wbd_adr_i[31:11] == 21'h3) ? TARGET_MBIST:
-			      (dcache_remap[0] && m1_wbd_adr_i[31:11] == 21'b0000_1000_0000_0000_0000_0) ? TARGET_MBIST:
-	                      (dcache_remap[1] && m1_wbd_adr_i[31:11] == 21'b0000_1000_0000_0000_0000_1) ? TARGET_MBIST:
-	                      (dcache_remap[2] && m1_wbd_adr_i[31:11] == 21'b0000_1000_0000_0000_0001_0) ? TARGET_MBIST:
-	                      (dcache_remap[3] && m1_wbd_adr_i[31:11] == 21'b0000_1000_0000_0000_0001_1) ? TARGET_MBIST:
+			      (dcache_remap[0] && m2_wbd_adr_i[31:11] == 21'b0000_1000_0000_0000_0000_0) ? TARGET_MBIST:
+	                      (dcache_remap[1] && m2_wbd_adr_i[31:11] == 21'b0000_1000_0000_0000_0000_1) ? TARGET_MBIST:
+	                      (dcache_remap[2] && m2_wbd_adr_i[31:11] == 21'b0000_1000_0000_0000_0001_0) ? TARGET_MBIST:
+	                      (dcache_remap[3] && m2_wbd_adr_i[31:11] == 21'b0000_1000_0000_0000_0001_1) ? TARGET_MBIST:
 	                      (m2_wbd_adr_i[31:28] ==  4'b0000 ) ? TARGET_SPI_MEM :
                               (m2_wbd_adr_i[31:16] == 16'h1000 ) ? TARGET_SPI_REG :
                               (m2_wbd_adr_i[31:16] == 16'h1001 ) ? TARGET_UART : 
                               (m2_wbd_adr_i[31:16] == 16'h1002 ) ? TARGET_PINMUX : 
                               (m2_wbd_adr_i[31:16] == 16'h1003 ) ? TARGET_MBIST : 
 			      4'b0000; 
+wire [3:0] m3_wbd_tid_i     = (boot_remap[0] && m3_wbd_adr_i[31:11] == 21'h0) ? TARGET_MBIST:
+	                      (boot_remap[1] && m3_wbd_adr_i[31:11] == 21'h1) ? TARGET_MBIST:
+	                      (boot_remap[2] && m3_wbd_adr_i[31:11] == 21'h2) ? TARGET_MBIST:
+	                      (boot_remap[3] && m3_wbd_adr_i[31:11] == 21'h3) ? TARGET_MBIST:
+			      (dcache_remap[0] && m3_wbd_adr_i[31:11] == 21'b0000_1000_0000_0000_0000_0) ? TARGET_MBIST:
+	                      (dcache_remap[1] && m3_wbd_adr_i[31:11] == 21'b0000_1000_0000_0000_0000_1) ? TARGET_MBIST:
+	                      (dcache_remap[2] && m3_wbd_adr_i[31:11] == 21'b0000_1000_0000_0000_0001_0) ? TARGET_MBIST:
+	                      (dcache_remap[3] && m3_wbd_adr_i[31:11] == 21'b0000_1000_0000_0000_0001_1) ? TARGET_MBIST:
+	                      (m3_wbd_adr_i[31:28] ==  4'b0000 ) ? TARGET_SPI_MEM :
+                              (m3_wbd_adr_i[31:16] == 16'h1000 ) ? TARGET_SPI_REG :
+                              (m3_wbd_adr_i[31:16] == 16'h1001 ) ? TARGET_UART : 
+                              (m3_wbd_adr_i[31:16] == 16'h1002 ) ? TARGET_PINMUX : 
+                              (m3_wbd_adr_i[31:16] == 16'h1003 ) ? TARGET_MBIST : 
+			      4'b0000; 
 //----------------------------------------
 // Master Mapping
 // -------------------------------------
@@ -387,13 +421,23 @@
 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_bl  = m2_wbd_bl_i;
+assign m2_wb_wr.wbd_bry = m2_wbd_bry_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 m3_wb_wr.wbd_dat = m3_wbd_dat_i;
+assign m3_wb_wr.wbd_adr = {m3_wbd_adr_i[31:2],2'b00};
+assign m3_wb_wr.wbd_sel = m3_wbd_sel_i;
+assign m3_wb_wr.wbd_bl  = m3_wbd_bl_i;
+assign m3_wb_wr.wbd_bry = m3_wbd_bry_i;
+assign m3_wb_wr.wbd_we  = m3_wbd_we_i;
+assign m3_wb_wr.wbd_cyc = m3_wbd_cyc_i;
+assign m3_wb_wr.wbd_stb = m3_wbd_stb_i;
+assign m3_wb_wr.wbd_tid = m3_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;
@@ -409,6 +453,11 @@
 assign m2_wbd_lack_o =  m2_wb_rd.wbd_lack;
 assign m2_wbd_err_o  =  m2_wb_rd.wbd_err;
 
+assign m3_wbd_dat_o  =  m3_wb_rd.wbd_dat;
+assign m3_wbd_ack_o  =  m3_wb_rd.wbd_ack;
+assign m3_wbd_lack_o =  m3_wb_rd.wbd_lack;
+assign m3_wbd_err_o  =  m3_wb_rd.wbd_err;
+
 //----------------------------------------
 // Slave Mapping
 // -------------------------------------
@@ -439,6 +488,8 @@
  assign  s3_wbd_dat_o =  s3_wb_wr.wbd_dat[31:0] ;
  assign  s3_wbd_adr_o =  s3_wb_wr.wbd_adr[12:0] ; // MBIST Need 13 bit
  assign  s3_wbd_sel_o =  s3_wb_wr.wbd_sel[3:0] ;
+ assign  s3_wbd_bl_o  =  s3_wb_wr.wbd_bl ;
+ assign  s3_wbd_bry_o =  s3_wb_wr.wbd_bry ;
  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 ;
@@ -461,7 +512,7 @@
 
  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_lack = s3_wbd_ack_i ;
+ assign s3_wb_rd.wbd_lack = s3_wbd_lack_i ;
  assign s3_wb_rd.wbd_err  = 1'b0; // s3_wbd_err_i ; - unused
 
 //
@@ -472,7 +523,8 @@
 wb_arb	u_wb_arb(
 	.clk(clk_i), 
 	.rstn(rst_n),
-	.req({	m2_wbd_stb_i & !m2_wbd_lack_o,
+	.req({	m3_wbd_stb_i & !m3_wbd_lack_o,
+	        m2_wbd_stb_i & !m2_wbd_lack_o,
 		m1_wbd_stb_i & !m1_wbd_lack_o,
 		m0_wbd_stb_i & !m0_wbd_lack_o}),
 	.gnt(gnt)
@@ -485,6 +537,7 @@
         3'h0:	   m_bus_wr = m0_wb_wr;
         3'h1:	   m_bus_wr = m1_wb_wr;
         3'h2:	   m_bus_wr = m2_wb_wr;
+        3'h3:	   m_bus_wr = m3_wb_wr;
         default:   m_bus_wr = m0_wb_wr;
      endcase			
 end
@@ -513,41 +566,42 @@
 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;
+assign  m3_wb_rd = (gnt == 2'b11) ? m_bus_rd : 'h0;
 
 
 // Stagging FF to break write and read timing path
-wb_stagging u_m_wb_stage(
+sync_wbb u_sync_wbb(
          .clk_i            (clk_i               ), 
          .rst_n            (rst_n               ),
          // 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_bl_i       (m_bus_wr.wbd_bl     ),
-         .m_wbd_bry_i      (m_bus_wr.wbd_bry    ),
-         .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_lack_o     (m_bus_rd.wbd_lack   ),
-         .m_wbd_err_o      (m_bus_rd.wbd_err    ),
+         .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
-         .s_wbd_dat_i      (s_bus_rd.wbd_dat    ),
-         .s_wbd_ack_i      (s_bus_rd.wbd_ack    ),
-         .s_wbd_lack_i     (s_bus_rd.wbd_lack   ),
-         .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_bl_o       (s_bus_wr.wbd_bl    ),
-         .s_wbd_bry_o      (s_bus_wr.wbd_bry    ),
-         .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    )
+         .wbs_dat_i      (s_bus_rd.wbd_dat    ),
+         .wbs_ack_i      (s_bus_rd.wbd_ack    ),
+         .wbs_lack_i     (s_bus_rd.wbd_lack   ),
+         .wbs_err_i      (s_bus_rd.wbd_err    ),
+         .wbs_dat_o      (s_bus_wr.wbd_dat    ),
+         .wbs_adr_o      (s_bus_wr.wbd_adr    ),
+         .wbs_sel_o      (s_bus_wr.wbd_sel    ),
+         .wbs_bl_o       (s_bus_wr.wbd_bl     ),
+         .wbs_bry_o      (s_bus_wr.wbd_bry    ),
+         .wbs_we_o       (s_bus_wr.wbd_we     ),
+         .wbs_cyc_o      (s_bus_wr.wbd_cyc    ),
+         .wbs_stb_o      (s_bus_wr.wbd_stb    ),
+         .wbs_tid_o      (s_bus_wr.wbd_tid    )
 
 );
 
diff --git a/verilog/rtl/yifive/ycr1 b/verilog/rtl/yifive/ycr1
deleted file mode 160000
index f7438dc..0000000
--- a/verilog/rtl/yifive/ycr1
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit f7438dc651a838e2e922f6dc1753949329e7b5a9
diff --git a/verilog/rtl/yifive/ycr1c b/verilog/rtl/yifive/ycr1c
new file mode 160000
index 0000000..8b57442
--- /dev/null
+++ b/verilog/rtl/yifive/ycr1c
@@ -0,0 +1 @@
+Subproject commit 8b5744202fecf8a87d84da5dc7583a84aeef4fc1