本资源包包含了使用Verilog语言编写的在FPGA上实现从SD卡读取图像并输出到VGA显示器的完整代码和Quartus项目的配置文件,适用于数字系统设计学习与实践。
FPGA设计读取SD卡中的图片并通过VGA屏显示输出的Verilog设计Quartus工程源码文件使用的是Cyclone4E系列中的EP4CE10F17C8型号,Quartus版本为18.0。
模块定义如下:
```verilog
module top_sd_photo_vga(
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串行输出数据信号
// SDRAM接口
output sdram_clk, //SDRAM 时钟
output sdram_cke, //SDRAM 时钟有效
output sdram_cs_n, //SDRAM 片选
output sdram_ras_n, //SDRAM 行有效
output sdram_cas_n, //SDRAM 列有效
output sdram_we_n, //SDRAM 写有效
output [1:0] sdram_ba, //SDRAM Bank地址
output [1:0] sdram_dqm,//SDRAM 数据掩码
output [12:0] sdram_addr,//SDRAM 地址
inout [15:0] sdram_data //SDRAM 数据
// VGA接口
,output vga_hs, //行同步信号
output vga_vs, //场同步信号
output [15:0] vga_rgb//红绿蓝三原色输出
);
```
参数定义:
```verilog
parameter PHOTO_H_PIXEL = 640 ; // 设置SDRAM缓存大小,水平像素数为24d640,这里简化表示为640。
parameter PHOTO_V_PIXEL = 480; // 设置SDRAM缓存大小,垂直像素数为24d480,这里简化表示为480。
```
线网定义:
```verilog
wire clk_100m ; // 100MHz时钟信号,用于SDRAM操作
wire clk_100m_shift; // 与clk_100m相位偏移的时钟信号
wire clk_50m;
wire clk_50m_180deg ;
wire clk_25m ;
wire rst_n ;
wire locked ;
wire sys_init_done; //系统初始化完成标志
```
SD卡读取相关定义:
```verilog
// SD卡读信号线网
wire sd_rd_start_en ; // 开始写入SD卡数据的使能信号
reg [31:0] sd_rd_sec_addr ; // 存储要读取的数据扇区地址
wire sd_rd_busy; // 表示正在从SD卡中读取数据,为高电平有效
```