SD卡读取BMP图片并显示设计Verilog代码Quartus AX301开发板
名称:SD卡读取BMP图片并显示设计Verilog代码Quartus AX301开发板
软件:Quartus
语言:Verilog
代码功能:
在前面的实验中我们在 VGA、LCD 上显示的是彩条,是 FPGA 内部产生的数据,本实验将彩
条替换为 SD 内的 BMP 图片数据,但是 SD 卡读取速度远远不能满足显示速度的要求,只能先写
入外部高速 RAM,再读出后给视频时序模块显示
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在AX301开发板验证,AX301开发板如下,其他开发板可以修改管脚适配:
设计文档:
SD 卡读取 BMP 图片显示例程

1 实验简介
在前面的实验中我们练习了 SD 卡读写,VGA 视频显示等例程,本实验将 SD 卡里的 BMP 图
片读出,写入到外部存储器,再通过 VGA、LCD 等显示。
本实验如果通过液晶屏显示,需要有液晶屏模块。
2 实验原理
在前面的实验中我们在 VGA、LCD 上显示的是彩条,是 FPGA 内部产生的数据,本实验将彩
条替换为 SD 内的 BMP 图片数据,但是 SD 卡读取速度远远不能满足显示速度的要求,只能先写
入外部高速 RAM,再读出后给视频时序模块显示。
2.1 BMP 图片格式
本实验直接在 SD 卡中搜索 BMP 文件,假设每个文件都是从 SD 的某个扇区第一个字节开始,
根据 BMP 文件头的特征找到 BMP。
BMP(全称 Bitmap)是 Windows 操作系统中的标准图像文件格式,可以分成两类:设备相关
位图(DDB)和设备无关位图(DIB),使用非常广。它采用位映射存储格式,除了图像深度可选
以外,不采用其他任何压缩,因此,BMP 文件所占用的空间很大。BMP 文件的图像深度可选 1bit、
4bit、8bit 及 24bit。BMP 文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。由
于 BMP 文件格式是 Windows 环境中交换与图有关的数据的一种标准,因此在 Windows 环境中运
行的图形图像软件都支持 BMP 图像格式。
对于程序设计来说最重要的是找到 BMP 文件头,BMP 图像文件头格式如下:
1)1-2:(这里的数字代表的是字节,下同)图像文件头。0x4d42=’BM’,表示是 Windows
支持的 BMP 格式。(注意:查 ascii 表 B 0x42,M 0x4d,bfType 为两个字节,B 为 low 字节,M 为 high
字节所以 bfType=0x4D42,而不是 0x424D,请注意)
![]()


![]()

FPGA 版权所有 1 / 6

2)3-6:整个文件大小。4690 0000,为 00009046h=36934。
3)7-8:保留,必须设置为 0。
4)9-10:保留,必须设置为 0。
5)11-14:从文件开始到位图数据之间的偏移量(14+40+4*(2^biBitCount))(在有颜色板的情 况下)。4600 0000,为 00000046h=70,上面的文件头就是 35 字=70 字节。
位图信息头
6)15-18:位图图信息头长度。
7) 19-22:位图宽度,以像素为单位。8000 0000,为 00000080h=128。
8)23-26:位图高度,以像素为单位。9000 0000,为 00000090h=144。
9)27-28:位图的位面数,该值总是 1。0100,为 0001h=1。
10)29-30:每个像素的位数。有 1(单色),4(16 色),8(256 色),16(64K 色,高彩 色),24(16M 色,真彩色),32(4096M 色,增强型真彩色)。1000 为 0010h=16。
11)31-34:压缩说明:有 0(不压缩),1(RLE 8,8 位 RLE 压缩),2(RLE 4,4 位 RLE 压 缩,3(Bitfields,位域存放)。
12)35-38:用字节数表示的位图数据的大小,该数必须是 4 的倍数,数值上等于:一行所占 的字节数×位图高度。0090 0000 为 00009000h=80×90×2h=36864。假设位图是 24 位,宽为 41,高 为 30,则数值= (biWidth*biBitCount+31)/32*4*biHeight,即=(41*24+31)/32*4*30=3720
13)39-42:用象素/米表示的水平分辨率。A00F 0000 为 0000 0FA0h=4000。
14)43-46:用象素/米表示的垂直分辨率。A00F 0000 为 0000 0FA0h=4000。
15)47-50:位图使用的颜色索引数。设为 0 的话,则说明使用所有调色板项。
16)51-54:对图象显示有重要影响的颜色索引的数目。如果是 0,表示都重要。

2 / 6

本实验使用不压缩,24(16M 色,真彩色)的BMP 图片,文件头大小是54 个字节,前两个
字节为“BM”,紧接着4 个字节是文件大小,19-22 字节为图片宽度,这些信息是程序设计中要 使用的重要信息。
3 程序设计
由于 SD 卡读写实验,VGA、LCD 显示实验种我们已经练习过 SD 卡和视频相关知识,这里不 再讲解。
本实验的重点模块是 BMP 图片读取模块 bmp_read,bmp_read 模块完成 SD 卡中读取一个扇 区的数据,然后和 BMP 的文件头对比,如果前 2 个字节等于“BM”,然后再找到 19-22 字节, 对比图片的宽度和输入要求的宽度是否一致,如果一致就认为找到一张 BMP 图片,读取出来,去 掉前面 54 字节的文件头,写入外部存储器。
bmp_read 状态机如下所示,有搜索命令以后,进入搜索状态“S_FIND”,开始不断地读取 SD 卡,找到符合要求的 BMP 图片,找到以后进入“S_READ_WAIT”,判断 FIFO 空间大小,如果 FIFO 空间足够大,进入“S_READ”状态。

bmp_read 模块状态机
部分代码展示:
////////////////////////////////////////////////////////////////////////////////// // // // // // Author: meisq // // msq@qq.com // // ALINX(shanghai) Technology Co.,Ltd // // heijin // // WEB: http://www.alinx.cn/ // // BBS: http://www.heijin.org/ // // // ////////////////////////////////////////////////////////////////////////////////// // // // Copyright (c) 2017,ALINX(shanghai) Technology Co.,Ltd // // All rights reserved // // // // This source file may be used and distributed without restriction provided // // that this copyright statement is not removed from the file and that any // // derivative work contains the original copyright notice and the associated // // disclaimer. // // // //////////////////////////////////////////////////////////////////////////////////
代码文件(付费下载):
![]()
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » SD卡读取BMP图片并显示设计Verilog代码Quartus AX301开发板
发表评论
模板文件不存在: ./template/plugins/comment/pc/index.htm