FPGA读写SD卡Verilog设计逻辑Quartus工程源码文件,FPGA型号Cyclone4E系列中的EP4CE10F17C8,Quartus版本18.0。
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灯
);
//wire define
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 ; //开始写SD卡数据信号
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卡初始化完成信号
//*****************************************************
//** main code
//*****************************************************
assign rst_n = sys_rst_n & locked;
//锁相环
pll_clk u_pll_clk(
.areset (1'b0 ),
.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