diff --git a/final_sd_interface.sv b/final_sd_interface.sv
index be9dd77879550c639b795d4f8869e9506666b2a9..badecb2b7c4019ebf763c92de6340ce92d053b8d 100644
--- a/final_sd_interface.sv
+++ b/final_sd_interface.sv
@@ -32,8 +32,8 @@ logic [7:0] sd_cmd_message [6], sd_cmd_message_next[6];
 
 logic [10:0] counter,counter_next;
 logic c_reset;//c_continue;
-logic sd_clk_tog;
-logic sd_cmd_in, sd_dat_in;
+//logic sd_clk_tog;
+logic sd_cmd_in, sd_dat_in, sd_cmd_in_next;
 //logic [3:0] sd_dat_buffer;
 ///logic sd_cmd_reg_output;
 logic [47:0]reg_48,reg_48_next;
@@ -89,6 +89,7 @@ always_ff @(posedge CLK) begin
 			sd_cmd_message[i] <= 8'b0;
 		end
 		interface_status <= 0;
+		sd_cmd_in <= 1;
 	end else begin
 		state <= state_next;
 		reg_48 <= reg_48_next;
@@ -98,6 +99,7 @@ always_ff @(posedge CLK) begin
 			sd_cmd_message[i] <= sd_cmd_message_next[i];
 		end
 		interface_status <= interface_status_next;
+		sd_cmd_in <= sd_cmd_in_next;
 	end
 end
 
@@ -111,27 +113,29 @@ end
 
 always_comb begin
 	for (int i=0;i<6;++i) begin
-			sd_cmd_message_next[i] <= sd_cmd_message[i];
+			sd_cmd_message_next[i] = sd_cmd_message[i];
 	end
 	sd_readdata = 32'hCCCC;
 	c_reset = 1'b0;
 	//sd_clk_tog = 0;
 	for (int i=0;i<128;++i) begin
-			dataBuffer_next[i] <= dataBuffer[i];
+			dataBuffer_next[i] = dataBuffer[i];
 		end
 	counter_next = counter;
 	state_next = state;
 
+	sd_cmd_in_next = sd_cmd_in;
+
 	reg_48_next = reg_48;
 	reg_8_next = reg_8;
 
 	interface_status_next = interface_status;
 	interface_command_mes = 3'b0;
 
-	sd_cmd_in = 1; //set cmd line to output
+	//sd_cmd_in = 1; //set cmd line to output
 	sd_dat_in = 1; //set data line to input
-	//SD_CLK_next = SD_CLK;
-	sd_clk_tog = 0;
+	SD_CLK_next = 1;
+	//sd_clk_tog = 0;
 
 	
 
@@ -180,10 +184,10 @@ always_comb begin
 	//state case
 	case (state)
 		Init : begin
-			sd_cmd_in = 0; //set cmd line to output
+			sd_cmd_in_next = 1; 
 			sd_dat_in = 1; //set data line to input
 			SD_CLK_next = 1;
-			sd_clk_tog = 0;
+			//sd_clk_tog = 0;
 			//SD_CMD = 1;
 			//SD_DAT = 0;
 			if (interface_command_mes == 3'b111) begin
@@ -199,47 +203,53 @@ always_comb begin
 				3'b001: begin
 					//send message routine
 					c_reset = 1;
-					sd_clk_tog = 1;
+					SD_CLK_next = 0;
+					//sd_clk_tog = 1;
 					//sd_cmd_reg_load = 1;
 					//sd_cmd_reg_input = sd_cmd_message [0];
 					reg_48_next = {sd_cmd_message[0],sd_cmd_message[1],sd_cmd_message[2],
 								   sd_cmd_message[3],sd_cmd_message[4],sd_cmd_message[5]};
 					state_next = Send_cmd;
+					sd_cmd_in_next = 0; 
 					interface_status_next = 2'b00;
 				end
 				3'b010: begin
 					//receive cmd state
 					c_reset = 1;
-					sd_clk_tog = 1;
+					//sd_clk_tog = 1;
 					//sd_cmd_rec_shift = 1;		
-
+					SD_CLK_next = 0;
 					state_next = Receive_cmd;
 					interface_status_next = 2'b00;
 				end
 				3'b011: begin
 					//read data state
 					c_reset = 1;
-					sd_clk_tog = 1;
+					//sd_clk_tog = 1;
+					SD_CLK_next = 0;
 					state_next = Read_data_0;
 					interface_status_next = 2'b00;
 				end
 				3'b100: begin
 					//toggle 8 SD_CLK 
 					c_reset = 1;
-					sd_clk_tog = 1;
+					//sd_clk_tog = 1;
+					SD_CLK_next = 0;
 					state_next = Dummy_clk;
 					interface_status_next = 2'b00;
 				end
 				3'b101: begin
 					c_reset = 1;
-					sd_clk_tog = 1;
+					//sd_clk_tog = 1;
+					SD_CLK_next = 0;
 					state_next = Dummy_clk2;
 					interface_status_next = 2'b00;
 				end
 				3'b110: begin
 					//probe read
 					c_reset = 1;
-					sd_clk_tog = 1;
+					//sd_clk_tog = 1;
+					SD_CLK_next = 0;
 					state_next = Receive_cmd_probe_0;
 					interface_status_next = 2'b00;
 				end
@@ -249,55 +259,73 @@ always_comb begin
 
 		Send_cmd: begin
 			//sd_clk_tog = 1;
-			sd_cmd_in = 0; //set cmd line to output
+			//sd_cmd_in = 0; //set cmd line to output
 			counter_next = counter + 1;
-			if (counter[0])
+			if (counter[0]) begin
 				reg_48_next = {reg_48[46:0],1'b0};
- 
+				SD_CLK_next = 0;
+ 			end else
+ 				SD_CLK_next = 1;
+
 			if (counter == 11'b00001011111) begin
 				c_reset = 1;
 				state_next = Idle;
 				interface_status_next = 2'b01;
-
+				sd_cmd_in_next = 1; 
+				SD_CLK_next = 1;
 			end else begin
 				state_next = Send_cmd;
-				sd_clk_tog = 1;
+				//sd_clk_tog = 1;
 			end
 		end
 
 		Receive_cmd: begin
-			sd_cmd_in = 1; // set cmd line to be input
+			//sd_cmd_in = 1; // set cmd line to be input
 			counter_next = counter + 1;
 			if (counter[0]) begin
 				reg_8_next = {reg_8[6:0],SD_CMD};
-			end
+				SD_CLK_next = 0;
+			end else
+				SD_CLK_next = 1;
+
 			if (counter == 11'b00000001111) begin
 				c_reset = 1;
 				state_next = Idle;
 				interface_status_next = 2'b01;
+				SD_CLK_next = 1;
 			end else begin
 				//sd_cmd_rec_shift = 1;
 				state_next = Receive_cmd;
-				sd_clk_tog = 1;
+				//sd_clk_tog = 1;
 			end
 		end
 
 		Receive_cmd_probe_0: begin
 			counter_next = counter + 1;
-			sd_cmd_in = 1; // set cmd line to be input
-			sd_clk_tog = 1;
+			//sd_cmd_in = 1; // set cmd line to be input
+			//sd_clk_tog = 1;
+			if (counter[0])
+				SD_CLK_next = 0;
+			else
+				SD_CLK_next = 1;
 			//sd_cmd_rec_shift = 1;
 			state_next = Receive_cmd_probe_1;
 		end
 		Receive_cmd_probe_1: begin
 			counter_next = counter + 1;
-			sd_cmd_in = 1; // set cmd line to be input
-			sd_clk_tog = 1;
+			//sd_cmd_in = 1; // set cmd line to be input
+			//sd_clk_tog = 1;
+			if (counter[0])
+				SD_CLK_next = 0;
+			else
+				SD_CLK_next = 1;
+
 			reg_8_next = {reg_8[6:0],SD_CMD};
 			if (counter >= 11'b00100111111) begin
 				c_reset = 1;
 				state_next = Init;
 				interface_status_next = 2'b11;
+				SD_CLK_next = 1;
 			end else if (SD_CMD) begin
 				state_next = Receive_cmd_probe_0;
 			end else begin
@@ -306,15 +334,25 @@ always_comb begin
 		end
 		Receive_cmd_probe_2: begin
 			counter_next = counter + 1;
-			sd_cmd_in = 1; // set cmd line to be input
-			sd_clk_tog = 1;
+			//sd_cmd_in = 1; // set cmd line to be input
+			//sd_clk_tog = 1;
+			if (counter[0])
+				SD_CLK_next = 0;
+			else
+				SD_CLK_next = 1;
 			//sd_cmd_rec_shift = 1;
 			state_next = Receive_cmd_probe_3;
 		end
 		Receive_cmd_probe_3: begin
 			counter_next = counter + 1;
-			sd_cmd_in = 1; // set cmd line to be input
-			sd_clk_tog = 1;
+			//sd_cmd_in = 1; // set cmd line to be input
+			//sd_clk_tog = 1;
+
+			if (counter[0])
+				SD_CLK_next = 0;
+			else
+				SD_CLK_next = 1;
+
 			reg_8_next = {reg_8[6:0],SD_CMD};
 			if ((!SD_CMD) || (counter >= 11'b00100111111)) begin
 				
@@ -322,6 +360,7 @@ always_comb begin
 					c_reset = 1;
 					state_next = Init;
 					interface_status_next = 2'b11;
+					SD_CLK_next = 1;
 				end else begin
 					state_next = Receive_cmd;
 					counter_next = 11'b00000000100;
@@ -331,12 +370,16 @@ always_comb begin
 			end
 		end
 		Read_data_0: begin
-			sd_clk_tog = 1;
+			//sd_clk_tog = 1;
+			SD_CLK_next = 1;
+
 			state_next = Read_data_1;
 		end
 
 		Read_data_1:begin
-			sd_clk_tog = 1;
+			//sd_clk_tog = 1;
+			SD_CLK_next = 0;
+
 			if (SD_DAT) begin
 				state_next = Read_data_0;
 			end else begin
@@ -346,6 +389,10 @@ always_comb begin
 
 		Read_data:begin
 			counter_next = counter + 1;
+			if (counter[0])
+				SD_CLK_next = 0;
+			else
+				SD_CLK_next = 1;
 			if (counter[0]) begin
 					dataBuffer_next[counter[10:4]][{(counter[3:2]),~counter[1],2'b11}] = SD_DAT[3];
 					dataBuffer_next[counter[10:4]][{(counter[3:2]),~counter[1],2'b10}] = SD_DAT[2];
@@ -356,41 +403,52 @@ always_comb begin
 				c_reset = 1;
 				state_next = Idle;
 				interface_status_next = 2'b01;
+				SD_CLK_next = 1;
 			end else begin
 				state_next = Read_data;
-				sd_clk_tog = 1;
+				//sd_clk_tog = 1;
 				
 			end
 		end
 
 		Dummy_clk: begin
 			counter_next = counter + 1;
+			if (counter[0])
+				SD_CLK_next = 0;
+			else
+				SD_CLK_next = 1;
 			if (counter == 11'b00000001111) begin
 				c_reset = 1;
 				state_next = Idle;
 				interface_status_next = 2'b01;
+				SD_CLK_next = 1;
 			end else begin
 				state_next = Dummy_clk;
-				sd_clk_tog = 1;
+				//sd_clk_tog = 1;
 			end
 		end
 		//default : /* default */;
 		Dummy_clk2: begin
 			counter_next = counter + 1;
+			if (counter[0])
+				SD_CLK_next = 0;
+			else
+				SD_CLK_next = 1;
 			if (counter == 11'b00000110001) begin
 				c_reset = 1;
 				state_next = Idle;
 				interface_status_next = 2'b01;
+				SD_CLK_next = 1;
 			end else begin
 				state_next = Dummy_clk2;
-				sd_clk_tog = 1;
+				//sd_clk_tog = 1;
 			end
 		end
 	endcase
-	if (sd_clk_tog) 
-		SD_CLK_next = ~SD_CLK;
-	else 
-		SD_CLK_next = SD_CLK;
+	// if (//sd_clk_tog) 
+	// 	SD_CLK_next = ~SD_CLK;
+	// else 
+	// 	SD_CLK_next = SD_CLK;
 end
 /*
 reg_48 sd_cmd_register(.Clk(CLK),.SD_CLK(SD_CLK),.Reset(RESET),.Shift_In(1'b0),.Load(sd_cmd_reg_load),