本资源包含基于FPGA的SD卡读写功能实现的Verilog代码及Quartus工程文件。适合学习FPGA存储接口设计的学生和工程师使用。
FPGA读写SD卡Verilog设计逻辑Quartus工程源码文件,使用的是Cyclone4E系列中的EP4CE10F17C8型号的FPGA,Quartus版本为18.0。
模块定义如下:
```verilog
module top_sd_rw(
input sys_clk, //系统时钟
input sys_rst_n, //系统复位,低电平有效
//SD卡接口
input sd_miso, //SD卡SPI串行输入数据信号
output sd_clk, //SD卡SPI时钟信号
output sd_cs, //SD卡SPI片选信号
output sd_mosi,//SD卡SPI串行输出数据信号
//LED
output [3:0] led//LED灯指示
);
```
接下来是内部定义:
```verilog
wire clk_ref;
wire clk_ref_180deg ;
wire rst_n ;
wire locked ;
wire wr_start_en; //开始写SD卡数据信号
wire [31:0] wr_sec_addr; //写数据扇区地址
wire [15:0] wr_data; //写数据
//读操作相关定义
wire rd_start_en;
wire [31:0] rd_sec_addr ;
wire error_flag ; //SD卡读写错误的标志
wire wr_busy ; //写数据忙信号
wire wr_req ; //写数据请求信号
wire rd_busy; //读忙信号
wire rd_val_en; //数据读取有效使能信号
wire [15:0] rd_val_data ; //读数据
wire sd_init_done; //SD卡初始化完成信号
```
主要代码如下:
```verilog
assign rst_n = sys_rst_n & locked;
//锁相环pll_clk实例化
pll_clk u_pll_clk(
.areset (1b0),
.inclk0 (sys_clk ),
.c0 (clk_ref ),
.c1 (clk_ref_180deg),
.locked(locked )
);
//生成SD卡测试数据的数据发生器实例化
data_gen u_data_gen(
.clk(clk_ref),
.rst_n(rst_n),
.sd_init_done(sd_init_done),
.wr_busy(wr_busy),
.wr_req(wr_req),
.wr_start_en(wr_start_en ),
.wr_sec_addr ( wr_sec_addr ),
.wr_data( wr_data ),
//读操作相关
.rd_val_en(rd_val_en),
.rd_val_da //此处代码可能有误,可能是 rd_val_data,需要根据具体设计进行调整
);
```