📄 writedata.v
字号:
/*module writeData(
clk16M,
arst,
// rb,
enable,
wrdfinish,
datain,
wr,
cle,
// re,
data
// sel
);
input
clk16M,
arst,
// rb,
enable,
wrdfinish;
input [7:0]
datain;
output
wr,
cle;
// re,
// sel;
output [7:0]
data;
reg
we,
wetemp,
wecmd,
cle,
// re,
// sel,
state;
reg [2:0]
state1;
reg [7:0]
data,
dataout,
cmdata;
wire [7:0]
temp;
assign wr = wetemp & wecmd;
always @(posedge clk16M or negedge arst)
begin
if(arst == 0)
begin
dataout <= 8'd0;
we <= 1'b1;
end
else if(enable == 1)
begin
case(state)
1'b0:
begin
we <= 1'b0;
dataout <= datain;
end
1'b1:
begin
we <= 1'b1;
end
endcase
end//else if(enable == 1)
end//always
assign temp = (enable == 1'b1)? dataout : cmdata;
always @(posedge clk16M or negedge arst)
begin
if(arst == 0)
begin
data <= 8'd0;
wetemp <= 1'b1;
end
else
begin
data <= temp;
wetemp <= we;
end
end
always @(posedge clk16M or negedge arst)
begin
if(arst == 0)
begin
state <= 1'b0;
end
else if(enable == 1)
begin
state <= ~state;
end
end//always
always @(posedge clk16M or negedge arst)
begin
if(arst == 0)
begin
cle <= 1'b0;
wecmd <= 1'b1;
//re <= 1'b1;
//sel <= 1'b0;
end
else
begin
case(state1)
3'd1:
begin
cle <= 1'b1;
end
3'd2:
begin
wecmd <= 1'b0; //写命令10H
cmdata <= 8'h10;
end
3'd3:
begin
wecmd <= 1'b1;
end
3'd4:
cle <= 1'b0;*/
/* 4'd7:
begin
wecmd <= 1'b0;
end
4'd8:
wecmd <= 1'b1;
4'd9:
begin
cle <= 1'b0;
end
4'd10:
begin
re <= 1'b0;
end
4'd11:
begin
re <= 1'b1;
sel <= 1'b1;
end*/
/*endcase
end//else
end//always
always @(posedge clk16M or negedge arst)
begin
if(arst == 0)
begin
state1 <= 3'd0;
end
else// if(rb == 1)
begin
case(state1)
3'd0:
begin
state1[0] <= wrdfinish;
end
3'd1:
state1 <= 3'd2;
3'd2:
state1 <= 3'd3;
3'd3:
state1 <= 3'd4;
3'd4:
state1 <= 3'd0;*/
/* 4'd4:
state1 <= 4'd5;
4'd5:
state1 <= 4'd6;
4'd6:
state1 <= 4'd7;
4'd7:
state1 <= 4'd8;
4'd8:
state1 <= 4'd9;
4'd9:
state1 <= 4'd10;
4'd10:
state1 <= 4'd11;
4'd11:
state1 <= 4'd0;*/
/*endcase
end//else
end//always
endmodule*/
module writeData(
clk24M,
arst,
datastart,
fifodata,
fiforen,
datawe,
datacle,
flashdata,
datafinish
);
input
clk24M,
arst,
datastart;
input [15:0]
fifodata;
output
fiforen,
datawe,
datacle,
datafinish;
output [7:0]
flashdata;
reg
fiforen,
datawe,
//we,
datacle,
datafinish;
reg [7:0]
flashdata;
reg [7:0]
cnt;
reg
cntfull;
reg [3:0]
state;
always @(posedge clk24M or negedge arst)
begin
if(arst == 0)
begin
//fiforen <= 1'b0;
//datacle <= 1'b0;
//we <= 1'b1;
flashdata <= 8'd0;
end
else
begin
case(state)
//4'd1:
//fiforen <= 1'b0;
//4'd2:
//begin
//fiforen <= 1'b1;
//we <= 1'b0;
//end
4'd3:
begin
//we <= 1'b1;
//fiforen <= 1'b0;
flashdata <= fifodata[7:0];
end
//4'd4:
//we <= 1'b0;
4'd5:
begin
//fiforen <= 1'b1;
//we <= 1'b1;
flashdata <= fifodata[15:8];
end
//4'd6:
//begin
//fiforen <= 1'b0;
//we <= 1'b0;
//end
//4'd7:
//begin
//we <= 1'b1;
//flashdata <= fifodata[7:0];
//end
//4'd8:
//we <= 1'b0;//
//4'd9:
//begin
//we <= 1'b1;
//flashdata <= {4'd0,fifodata[11:8]};
//flashdata <= fifodata[15:8];
//end
//4'd11:
//begin
//we <= 1'b0;
//datacle <= 1'b1;
//end
4'd9:
begin
//we <= 1'b1;
flashdata <= 8'h10;
end
//4'd14:
//datacle <= 1'b0;
endcase
end
end
always @(posedge clk24M or negedge arst)
begin
if(arst == 0)
begin
datawe <= 1'b1;
end
else
begin
//datawe <= (((state[3] & state[2]) | (~state[3] & state[0])) | (~state[1] & state[0])) |
//(((state[3] & state[1]) & (state[0])) | (~(state[3] | state[2] | state[1])));
//datawe <= ((~state[3]) & state[2] &(~state[0]))| (state[3] & state[1]) | ((~state[3])&(~state[2])&((~state[1])|(~state[0])))|
//(state[3]&(~state[2])&(~state[1])&(~state[0])) | (state[3]&state[2]&(~state[1])&state[0]);
//datawe <= state[3] | ((~state[3])&((~state[1])|(~state[0])));
datawe <= ((~state[3])&(~state[2])&((~state[1])|(~state[0])))|
((~state[3])&(state[2])&(~state[1])&(~state[0]))|
((~state[3])&(state[2])&(state[1]))|
((state[3])&(~state[2])&(~state[1])&(~state[0]))|
((state[3])&((state[2])|(state[1])));
/*case(state)
4'd2:
we <= 1'b0; 1
4'd3:
we <= 1'b1; 0
4'd4:
we <= 1'b0; 1
4'd5:
we <= 1'b1; 0
4'd6:
we <= 1'b0; 1
4'd7:
we <= 1'b1; 1
4'd8:
we <= 1'b0; 1
4'd9:
we <= 1'b1; 0
4'd10:
we <= 1
4'd11:
we <= 1'b0; 1
4'd12:
we <= 1'b1; 1
4'd13:
we <= 1
endcase*/
end
end
always @(posedge clk24M or negedge arst)
begin
if(arst == 0)
begin
fiforen <= 1'b0;
end
else
begin
//fiforen <= (~(state[3] | state[1])) & state[0];
fiforen <= ((~state[3]) & (~state[2]) & state[1] & (~state[0]));
/*case(state)
4'd1: //0001
fiforen <= 1'b0;
4'd2: //0010
fiforen <= 1'b1;
4'd3: //0011
fiforen <= 1'b0;
//4'd6: //0110
fiforen <= 1'b0;
endcase*/
end
end
always @(posedge clk24M or negedge arst)
begin
if(arst == 0)
begin
datacle <= 1'b0;
end
else
begin
//datacle <= (state[3] & state[1] & state[0]) | ((state[3] & state[2]) & (~state[1]));
//datacle <= ((~state[3])&state[2]&state[1])|(state[3]&(~state[2])&(~state[1])&(~state[0]));
datacle <= (state[3]&(~state[2])&(state[1]|state[0]));
/*case(state)
4'd6: //1011 1100 1101
datacle <= 1'b1;
4'd9: //1110
datacle <= 1'b0;
endcase*/
end
end
/*always @(posedge clk24M or negedge arst)
begin
if(arst == 0)
begin
datawe <= 1'b1;
end
else
begin
datawe <= we;
end
end*/
always @(posedge clk24M or negedge arst)
begin
if(arst == 0)
begin
datafinish <= 1'b1;
state <= 4'd0;
end
else
begin
case(state)
4'd0:
state[0] <= datastart;
4'd1:
state <= 4'd2;
4'd2:
state <= 4'd3;
4'd3:
state <= 4'd4;
4'd4:
state <= 4'd5;
4'd5:
state <= 4'd6;
4'd6:
state <= 4'd7;
4'd7:
begin
if(cntfull)
begin
state <= 4'd2;
end
else
begin
state <= 4'd8;
end
end
4'd8:
state <= 4'd9;
4'd9:
state <= 4'd10;
4'd10:
begin
datafinish <= 1'b0;
state <= 4'd11;
end
4'd11:
begin
datafinish <= 1'b1;
state <= 4'd0;
end
endcase
end
end
always @(posedge clk24M or negedge arst)
begin
if(arst == 0)
begin
cnt <= 8'd0;
end
else
begin
if(fiforen)
begin
cnt <= cnt + 1'b1;
end
end
end
always @(posedge clk24M or negedge arst)
begin
if(arst == 0)
begin
cntfull <= 1'b0;
end
else
begin
cntfull <= ((cnt[7] | cnt[6]) | (cnt[5] | cnt[4])) | ((cnt[3] | cnt[2]) | (cnt[1] | cnt[0]));
end//
end
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -