发一个网络上找不到的资源,spiflash控制器的verilog代码,前两天自己做的,板上验证通过
module spiflashIV(data_ok,
clk,
addr,
mode,// 1 is write,0 is read
txdata,
rxdata,
ld_addr,//start onecommand
cs,
sck,
miso_temp,
mosi,
NUM
);
input addr;
inputclk;
inputmode;
inputtxdata;
inputld_addr;//start one bye translate
input wire miso_temp;
input NUM;
output cs;
output sck;
output mosi;
outputrxdata;
output data_ok;
reg reset_count;
reg reset;
always@(posedge clk)
begin
reset_count<=reset_count;
if(reset_count<8'h01)begin
reset_count<=reset_count+1'b1;
reset<=1'b0;
end
else begin
reset<=1'b1;
end
end
wire miso;
assign miso=miso_temp;
reg cs;
reg data_ok;
reg state;
reg rxdata;
reg rxdata_temp;
regSTATE;
regnum;
always@(posedge clk or negedge reset)begin
if(!reset)begin
cs<=1'b1;
state<=7'b0000000;
data_ok<=1'b0;
rxdata<=8'b00000000;
STATE<=2'b00;
num<=10'd0;
end
else begin
cs<=cs;
state<=state;
data_ok<=data_ok;
rxdata<=rxdata;
STATE<=STATE;
num<=num;
if(ld_addr)begin
cs<=1'b0;
STATE<=2'b01;
end
case(STATE)
2'b01:
begin
if(state<7'd64)begin
state<=state+1'b1;
end
else begin
STATE<=2'd2;
state<=7'd0;
end
end
2'b10:
begin
if(num<NUM)begin
if(state<7'd16)begin
state<=state+1'b1;
end
else if(state<=7'd16)begin
state<=7'd17;
data_ok<=1'b1;
rxdata<=rxdata_temp;
end
else begin
state<=7'd0;
data_ok<=1'b0;
num<=num+1'b1;
end
end
else begin
cs<=1'b1;
STATE<=2'b00;
num<=10'd0;
end
end
default:begin end
endcase
end
end
reg mosi;
reg sck;
always@(negedge clk or negedge reset)begin
if(!reset)begin
sck<=1'b0;
mosi<=1'b0;
rxdata_temp<=8'b00000000;
end
else begin
sck<=sck;
mosi<=mosi;
rxdata_temp<=rxdata_temp;
case(STATE)
2'b01:
case(state)
7'd1:begin sck<=1'b1; end
7'd2:begin sck<=1'b0; mosi<=1'b0; end
7'd3:begin sck<=1'b1; end
7'd4:begin sck<=1'b0; mosi<=1'b0; end
7'd5:begin sck<=1'b1; end
7'd6:begin sck<=1'b0; mosi<=1'b0;end
7'd7:begin sck<=1'b1; end
7'd8:begin sck<=1'b0; mosi<=1'b0;end
7'd9:begin sck<=1'b1;end
7'd10:begin sck<=1'b0; mosi<=1'b0;end
7'd11:begin sck<=1'b1; end
7'd12:begin sck<=1'b0; mosi<=1'b1;end
7'd13:begin sck<=1'b1; end
7'd14:begin sck<=1'b0; mosi<=1'b1;end
7'd15:begin sck<=1'b1; end
7'd16:begin sck<=1'b0; mosi<=addr;end
7'd17:begin sck<=1'b1; end
7'd18:begin sck<=1'b0; mosi<=addr;end
7'd19:begin sck<=1'b1; end
7'd20:begin sck<=1'b0; mosi<=addr;end
7'd21:begin sck<=1'b1;end
7'd22:begin sck<=1'b0; mosi<=addr;end
7'd23:begin sck<=1'b1;end
7'd24:begin sck<=1'b0; mosi<=addr; end
7'd25:begin sck<=1'b1; end
7'd26:begin sck<=1'b0;mosi<=addr;end
7'd27:begin sck<=1'b1; end
7'd28:begin sck<=1'b0; mosi<=addr;end
7'd29:begin sck<=1'b1; end
7'd30:begin sck<=1'b0; mosi<=addr;end
7'd31:begin sck<=1'b1; end
7'd32:begin sck<=1'b0; mosi<=addr;end
7'd33:begin sck<=1'b1;end
7'd34:begin sck<=1'b0; mosi<=addr;end
7'd35:begin sck<=1'b1;end
7'd36:begin sck<=1'b0; mosi<=addr;end
7'd37:begin sck<=1'b1;end
7'd38:begin sck<=1'b0;mosi<=addr;end
7'd39:begin sck<=1'b1; end
7'd40:begin sck<=1'b0; mosi<=addr;end
7'd41:begin sck<=1'b1;end
7'd42:begin sck<=1'b0; mosi<=addr; end
7'd43:begin sck<=1'b1; end
7'd44:begin sck<=1'b0; mosi<=addr;end
7'd45:begin sck<=1'b1;end
7'd46:begin sck<=1'b0; mosi<=addr;end
7'd47:begin sck<=1'b1;end
7'd48:begin sck<=1'b0; mosi<=addr;end
7'd49:begin sck<=1'b1;end
7'd50:begin sck<=1'b0; mosi<=addr;end
7'd51:begin sck<=1'b1;end
7'd52:begin sck<=1'b0; mosi<=addr;end
7'd53:begin sck<=1'b1;end
7'd54:begin sck<=1'b0; mosi<=addr;end
7'd55:begin sck<=1'b1;end
7'd56:begin sck<=1'b0; mosi<=addr;end
7'd57:begin sck<=1'b1;end
7'd58:begin sck<=1'b0; mosi<=addr;end
7'd59:begin sck<=1'b1;end
7'd60:begin sck<=1'b0; mosi<=addr;end
7'd61:begin sck<=1'b1;end
7'd62:begin sck<=1'b0; mosi<=addr;end
7'd63:begin sck<=1'b1; end
7'd64:begin sck<=1'b0; mosi<=1'b0;end
default:begin end
endcase
2'b10:
case(state)
7'd1:begin sck<=1'b1; rxdata_temp<=miso;end
7'd2:begin sck<=1'b0; mosi<=1'b0; end
7'd3:begin sck<=1'b1; rxdata_temp<=miso;end
7'd4:begin sck<=1'b0; mosi<=1'b0; end
7'd5:begin sck<=1'b1; rxdata_temp<=miso;end
7'd6:begin sck<=1'b0; mosi<=1'b0; end
7'd7:begin sck<=1'b1; rxdata_temp<=miso;end
7'd8:begin sck<=1'b0; mosi<=1'b0; end
7'd9:begin sck<=1'b1; rxdata_temp<=miso;end
7'd10:begin sck<=1'b0; mosi<=1'b0; end
7'd11:begin sck<=1'b1; rxdata_temp<=miso;end
7'd12:begin sck<=1'b0; mosi<=1'b0;end
7'd13:begin sck<=1'b1; rxdata_temp<=miso; end
7'd14:begin sck<=1'b0; mosi<=1'b0;end
7'd15:begin sck<=1'b1; rxdata_temp<=miso;end
7'd16:begin sck<=1'b0; mosi<=1'b0;end
default:begin end
endcase
default:begin end
endcase
end
end
endmodule
http://cache.amobbs.com/bbs_upload782111/files_36/ourdev_619156AFXQFF.JPG
(原文件名:lattice内嵌逻辑分析仪_spiflash读时序.JPG) mark mark make mark mark mark 支持,要是加点说明就更好了! mark mark mark 回复【10楼】nightmara
-----------------------------------------------------------------------
楼主:你所用芯片的型号是什么啊? 回复【10楼】nightmara
-----------------------------------------------------------------------
楼主:你所用芯片的型号是什么啊? mark! markddddd
这不会是专门用来串口烧写flash的吧? mark lz mark mark{:handshake:} mark,顶一下 感谢分享{:victory:} 收藏,买的板子在路上,到了后一定用楼主的代码试下。谢谢分享! 收了,这操作方式简洁高效,是好的例子 mark,赞 网上找不到, LZ自己实现. 赞一个 搞下来看看,话说楼主用的是哪款flash芯片。 谢谢,收藏下 给点注释就好看了 太好了,正需要呢,谢谢了 mark 一下
页:
[1]