• 方案介绍
  • 相关推荐
申请入驻 产业图谱

W25Q64 SPI读写控制 Verilog Gowin

09/22 09:12
462
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

名称: W25Q64 SPI读写控制 Verilog Gowin

软件: Gowin IDE

语言: Verilog

代码功能: 实现W25Q64 SPI Flash 的读写、ID读取及数据展示,通过按键控制读写操作和数码管显示,适用于嵌入式存储系统

代码实现思路:

本设计以模块化方式实现SPI Flash 的读写控制。顶层模块通过按键消抖采集用户输入,SPI控制模块生成读写请求,SPI接口模块负责与Flash的时序通信,数码管显示模块实时反馈操作状态。整体采用状态机驱动,确保操作流程清晰可靠,各模块配合协调,便于扩展和调试。

代码结构:

-?top:顶层模块,协调各功能模块实现整体控制。

-?key_jitter:按键消抖模块,提供稳定的按键信号。

-?spi_control:SPI读写控制模块,生成数据读写请求。

-?spi_interface:SPI接口模块,实现与Flash的数据时序通信。

-?spi_read_ctrl:读控制模块,实现Flash ID和数据的读取。

-?spi_write_ctrl:写控制模块,实现数据写入和擦除操作。

-?display:数码管显示模块,实时显示当前操作状态。

1、工程文件

2、程序文件

3、程序编译

4、RTL图

5、管脚分配

## 部分代码预览

```verilog

// 以下为top.v前100行

//按下key[2]写数据

//按下key[1]读数据

//按下key[0]读ID

module top(

input ? ? ? ? ? clk,

input ? ? ? ? ? rst_n,

input ? [2:0] ? key_in,

input ? ? ? ? ? key_shift,//切换显示内容

 

input ? ? ? ? ? miso,// 主机采样从机发送

output ? ? ? ? ?mosi,// 主机发送从机

output ? ? ? ? ?sclk,// 串行时钟

output ? ? ? ? ?cs_n, // 片选信号

output ?[3:0] ? bit_select,//数码管位选

output ?[7:0] ? seg_select//数码管段选

);

 

wire ? ?[2:0] ? ? ? key_out;

wire ? ? ? ? ? ? ? ?req;

wire ? ? ? ? ? ? ? ?done;

wire ? ?[7:0] ? ? ? rx_data;

wire ? ?[7:0] ? ? ? tx_data;

wire ? ?[23:0] ? ? ?seg_data;

 

//按键消抖

key_jitter i0_key_jitter(

.clkin(clk),

.key_in(key_in[0]), //输入

.key_negedge(key_out[0]) //消抖后按键下降沿

);

 

//按键消抖

key_jitter i1_key_jitter(

.clkin(clk),

.key_in(key_in[1]), //输入

.key_negedge(key_out[1]) //消抖后按键下降沿

);

 

//按键消抖

key_jitter i2_key_jitter(

.clkin(clk),

.key_in(key_in[2]), //输入

.key_negedge(key_out[2]) //消抖后按键下降沿

);

 

spi_control u_spi_control(

.clk(clk),

.rst_n(rst_n),

.key_out(key_out),

.din(rx_data),

.done(done),

.dout(tx_data),

.req(req),

.seg_data(seg_data)

);

 

spi_interface u_spi_interface(

.clk(clk),

.rst_n(rst_n),

.din(tx_data),

.req(req),

.dout(rx_data),

.done(done),

.miso(miso),

.mosi(mosi),

.sclk(sclk),

.cs_n(cs_n)

);

 

//显示模块

display i_display(

.clk(clk),

.rst_n(rst_n),

.key_shift(key_shift),

.key_in(key_out),

.seg_data(seg_data),

.bit_select(bit_select),

.seg_select(seg_select)

);

endmodule

```

代码下载(付费可见):

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1543

相关推荐