Fixed wishbone slaves not providing read data on the correct clock cycle.
diff --git a/verilog/rtl/CaravelHost/WBAddressExtension.v b/verilog/rtl/CaravelHost/WBAddressExtension.v
index e31c60a..c5c10e3 100644
--- a/verilog/rtl/CaravelHost/WBAddressExtension.v
+++ b/verilog/rtl/CaravelHost/WBAddressExtension.v
@@ -47,15 +47,18 @@
 	reg[31:0] currentDataIn;
 
 	reg acknowledge = 1'b0;
+	reg[31:0] dataRead_buffered;
 
 	always @(posedge wb_clk_i) begin
 		if (wb_rst_i) begin
 			state <= STATE_IDLE;
 			acknowledge <= 1'b0;
+			dataRead_buffered <= 32'b0;
 		end else begin
 			case (state)
 				STATE_IDLE: begin
 					acknowledge <= 1'b0;
+					dataRead_buffered <= 32'b0;
 
 					if (wbs_cyc_i && !userSpaceSelect) begin
 						if (wbs_stb_i) begin
@@ -80,6 +83,7 @@
 				STATE_READ_SINGLE: begin
 					state <= STATE_FINISH;
 					acknowledge <= 1'b1;
+					dataRead_buffered <= currentAddress;
 				end
 
 				STATE_FINISH: begin
@@ -97,6 +101,6 @@
 
 	// Connect wishbone return signals
 	assign wbs_ack_o = userSpaceSelect ? userSpace_wb_ack_o : acknowledge;
-	assign wbs_data_o = userSpaceSelect ? userSpace_wb_data_o : currentAddress;
+	assign wbs_data_o = userSpaceSelect ? userSpace_wb_data_o : dataRead_buffered;
 	
 endmodule
\ No newline at end of file
diff --git a/verilog/rtl/ExperiarCore/Wishbone/WB_SRAMInterface.v b/verilog/rtl/ExperiarCore/Wishbone/WB_SRAMInterface.v
index 9be0969..f4f6fe1 100644
--- a/verilog/rtl/ExperiarCore/Wishbone/WB_SRAMInterface.v
+++ b/verilog/rtl/ExperiarCore/Wishbone/WB_SRAMInterface.v
@@ -48,21 +48,25 @@
 	wire isStateWriteSingle = state == STATE_WRITE_SINGLE;
 	wire isStateIdle = state == STATE_IDLE;
 
+	wire[31:0] peripheralBus_dataRead;
 	wire peripheralBus_busy;
 
 	reg stall = 1'b0;
 	reg acknowledge = 1'b0;
+	reg[31:0] dataRead_buffered;
 	
 	always @(posedge wb_clk_i) begin
 		if (wb_rst_i) begin
 			state <= STATE_IDLE;
 			stall <= 1'b0;
 			acknowledge <= 1'b0;
+			dataRead_buffered <= 32'b0;
 		end else begin
 			case (state)
 				STATE_IDLE: begin
 					stall <= 1'b0;
 					acknowledge <= 1'b0;
+					dataRead_buffered <= 32'b0;
 
 					if (wb_cyc_i) begin
 						if (wb_stb_i) begin
@@ -91,6 +95,7 @@
 					if (!peripheralBus_busy) begin
 						state <= STATE_FINISH;
 						acknowledge <= 1'b1;
+						dataRead_buffered <= peripheralBus_dataRead;
 					end
 				end
 
@@ -118,9 +123,8 @@
 	wire peripheralBus_oe = isStateReadSingle;
 	wire[19:0] peripheralBus_address = !isStateIdle ? currentAddress : 24'b0;
 	wire[3:0] peripheralBus_byteSelect = !isStateIdle ? currentByteSelect : 4'b0;
-	wire[31:0] peripheralBus_dataWrite = isStateWriteSingle ? wb_data_i : 32'b0;
-	wire[31:0] peripheralBus_dataRead;
-	assign wb_data_o = isStateReadSingle ? peripheralBus_dataRead : 32'b0;
+	wire[31:0] peripheralBus_dataWrite = isStateWriteSingle ? wb_data_i : 32'b0;	
+	assign wb_data_o = dataRead_buffered;
 
 	// Connect local memory and management interface signals
 	wire localMemoryEnable = wb_adr_i[23] == 1'b0;
diff --git a/verilog/rtl/Flash/WBFlashInterface.v b/verilog/rtl/Flash/WBFlashInterface.v
index 30c4645..a09ec56 100644
--- a/verilog/rtl/Flash/WBFlashInterface.v
+++ b/verilog/rtl/Flash/WBFlashInterface.v
@@ -33,17 +33,20 @@
 
 	reg stall = 1'b0;
 	reg acknowledge = 1'b0;
+	reg[31:0] dataRead_buffered;
 
 	always @(posedge wb_clk_i) begin
 		if (wb_rst_i) begin
 			state <= STATE_IDLE;
 			stall <= 1'b0;
 			acknowledge <= 1'b0;
+			dataRead_buffered <= 32'b0;
 		end else begin
 			case (state)
 				STATE_IDLE: begin
 					stall <= 1'b0;
 					acknowledge <= 1'b0;
+					dataRead_buffered <= 32'b0;
 
 					if (wb_cyc_i) begin
 						if (wb_stb_i) begin
@@ -71,6 +74,7 @@
 					if (!flashCache_busy) begin
 						state <= STATE_FINISH;
 						acknowledge <= 1'b1;
+						dataRead_buffered <= flashCache_dataRead;
 					end
 				end
 
@@ -99,6 +103,6 @@
 	assign flashCache_address = state != STATE_IDLE ? currentAddress : 24'b0;
 	assign flashCache_byteSelect = state != STATE_IDLE ? currentByteSelect : 4'b0;
 
-	assign wb_data_o = state == STATE_READ_SINGLE ? flashCache_dataRead : 32'b0;
+	assign wb_data_o = dataRead_buffered;
 	
 endmodule
\ No newline at end of file
diff --git a/verilog/rtl/Peripherals/WBPeripheralBusInterface/WBPeripheralBusInterface_top.v b/verilog/rtl/Peripherals/WBPeripheralBusInterface/WBPeripheralBusInterface_top.v
index d0a337d..f8fcd0b 100644
--- a/verilog/rtl/Peripherals/WBPeripheralBusInterface/WBPeripheralBusInterface_top.v
+++ b/verilog/rtl/Peripherals/WBPeripheralBusInterface/WBPeripheralBusInterface_top.v
@@ -40,17 +40,20 @@
 
 	reg stall = 1'b0;
 	reg acknowledge = 1'b0;
+	reg[31:0] dataRead_buffered;
 
 	always @(posedge wb_clk_i) begin
 		if (wb_rst_i) begin
 			state <= STATE_IDLE;
 			stall <= 1'b0;
 			acknowledge <= 1'b0;
+			dataRead_buffered <= 32'b0;
 		end else begin
 			case (state)
 				STATE_IDLE: begin
 					stall <= 1'b0;
 					acknowledge <= 1'b0;
+					dataRead_buffered <= 32'b0;
 
 					if (wb_cyc_i) begin
 						if (wb_stb_i) begin
@@ -79,6 +82,7 @@
 					if (!peripheralBus_busy) begin
 						state <= STATE_FINISH;
 						acknowledge <= 1'b1;
+						dataRead_buffered <= peripheralBus_dataRead;
 					end
 				end
 
@@ -108,7 +112,7 @@
 	assign peripheralBus_address = state != STATE_IDLE ? currentAddress : 24'b0;
 	assign peripheralBus_byteSelect = state != STATE_IDLE ? currentByteSelect : 4'b0;
 
-	assign wb_data_o = state == STATE_READ_SINGLE ? peripheralBus_dataRead : 32'b0;
+	assign wb_data_o = dataRead_buffered;
 	assign peripheralBus_dataWrite = state == STATE_WRITE_SINGLE ? wb_data_i : 32'b0;
 
 endmodule
\ No newline at end of file