Skip to content
Snippets Groups Projects
Commit 33858f9e authored by Fang Lu's avatar Fang Lu
Browse files

Merge remote-tracking branch 'origin/jxt' into ilufang

parents 1c6f209b 96c3f4eb
No related branches found
No related tags found
No related merge requests found
......@@ -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),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment