搜索
您的当前位置:首页数码相框

数码相框

来源:世旅网
五邑大学本科毕业设计

摘 要

数码相框数码相框是展示数码照片而非纸质照片的相框,它不再用放进相片的方式来展示,而是通过一个液晶的屏幕显示,它可以通过读卡器的接口从SD卡获取相片,并设置循环显示的方式,比普通的相框更灵活多变,也给现在日益使用的数码相片一个新的展示空间。市场上的数码相框一般是以带液晶驱动外设的 ARM 处理器为主实现功能,而本设计恰恰相反,所有的功能都使用 FPGA来完成。本设计使用Altera公司cyclone 系列的 EP1C3T144为基础来实现所有的功能,以 SF-EP1C 开发板作为目标板。从 SD卡中读取图片(SPI 模式),SD卡控制不涉及文件操作系统。使用电脑显示器(VGA)作为图片显示屏幕,工作在60Hz/800*600分辨率下,显示色彩为256色。FPGA 中实现bmp解码,使用SDR SDRAM作为显示图片缓存,循环显示SD卡中10幅图片。

关键词 数码相框;EP1C3T144;SF-EP1C开发板;SPI模式;bmp解码;SDR SDRAM

I

五邑大学本科毕业设计

Abstract

The digital photo frame displays digital photos rather than paper photos. It no longer uses paper photos but uses a LCD screen to display photos instead. It get photos from SD card through SD card interface, displaying photos in a cyclical way. It’s more flexible than traditional frame, also gives a new display space as digital photos is increasingly used. In the market, digital photo frames are mainly based on ARM processor with LCD and other peripherals. On the contrary, this design employs FPGA to complete all functions of digital photo frame. This design uses EP1C3T144, which is in the cyclone series of Altera company, as the core unit for realizing all the functionality. And the design uses SF - EP1C development board as the target board. It can read pictures from the SD card (SPI model). The SD card control does not need a file system operation. Then the design use a computer display(VGA) as a picture screen, working in 60Hz, 800 * 600 resolution and 256 colors. At last BMP decoding using FPGA is realized, in which SDR SDRAM is used as image cache. As a result, it cyclically displays10 pictures from the SD card successfully.

Key words digital photo frame EP1C3T144 SF-EP1C Development Board SPI mode

bmp decoding SDR SDRAM

II

五邑大学本科毕业设计

目 录

摘 要 .............................................................................................................................................. I Abstract .......................................................................................................................................... II

第1章 绪论 ................................................................................................................................... 1

1.1 课题的研究目的和意义 ................................................................................................... 1 1.2 数码相框的动态发展趋势 ............................................................................................... 1 1.3 设计的主要目标任务 ....................................................................................................... 2 1.4 本章小结 ........................................................................................................................... 2 第2章 SF-EP1C开发板介绍 ...................................................................................................... 3

2.1 SF-EP1C开发板原理图 .................................................................................................... 3 2.2 SF-EP1C开发板功能框图 ................................................................................................ 5 2.3 SF-EP1C开发板基本配置 ................................................................................................ 6 2.4 Cyclone器件简介 .............................................................................................................. 6 2.5 本章小结 ........................................................................................................................... 7 第3章 数码相框的设计方案 ..................................................................................................... 8

3.1 功能需求及模块划分 ....................................................................................................... 8 3.2 系统时钟与复位模块的设计 ......................................................................................... 11

3.2.1 PLL的配置需求 .................................................................................................... 11 3.2.2 PLL的配置步骤 .................................................................................................... 12 3.2.3 PLL的例化 ............................................................................................................ 18 3.3 SD卡模块的设计 ............................................................................................................ 19

3.3.1 SPI接口控制 ......................................................................................................... 19 3.3.2 SD卡数据存储结构与 FAT16 文件系统 ........................................................... 21 3.3.3 SD卡初始化及读操作 .......................................................................................... 29 3.4 数据流模块的设计 ......................................................................................................... 31 3.5 SDRAM控制器模块的设计 ........................................................................................... 34

3.5.1 接口控制模块 ....................................................................................................... 35 3.5.2 命令生成模块 ....................................................................................................... 36 3.5.3 数据路径模块 ....................................................................................................... 37 3.6 VGA显示驱动模块的设计 ............................................................................................ 39

3.6.1 VGA显示原理与VGA时序实现 ........................................................................ 39 3.6.2 功能单元设计 ....................................................................................................... 41 3.6.3 显存数据更新与显示的同步实现 ....................................................................... 42

III

五邑大学本科毕业设计

3.6.4 BMP格式图片显示 .............................................................................................. 43 3.7 本章小结 ......................................................................................................................... 48 总 结 ........................................................................................................................................... 49 参考文献 ....................................................................................................................................... 50 致 谢 ........................................................................................................................................... 51

IV

五邑大学本科毕业设计

第1章 绪论

1.1 课题的研究目的和意义

数码相框的普及,使得拍摄下来的数码相片呈现出了几何级数的增长,用各种存储器保存照片已成为大家习惯的做法。有资料显示,全世界拍摄的数码照片,只有不到35%的被打印出来,而超过65%的都被保存在硬盘、光盘、存储卡等存储介质中。

浏览存储器中的照片最常用的方法是通过电脑、电视等产品,它们能够清晰地显示照片,但不方便携带。随着嵌入式技术、液晶显示技术、数字存储技术的发展,出现了一种以数码相片的保存、回放和浏览为核心功能的产品——数码相框,给数码相片提供了一个新的展示平台。

数码相框主要由存储器、液晶显示器、解码器和微控制器组成,它利用解码芯片实现对图像的解码,并在液晶屏上显示图像。

鉴于数码相框广泛的用途,开发数码相框具有重要的意义和市场价值。虽然当前数码相框并不普及,但随着数码成像后期应用市场的不断扩大,数码相框将成为必不可少的配套产品,它也许会成为继电视、电脑之后生活中必不可少的第三块屏幕。

1.2 数码相框的动态发展趋势

从长远来看,今后几年将为处在数码相框产品供应链的各企业带来巨大的商机。未来几年,数码相框的市场处在逐渐走向成熟的阶段,其产销量和市场需求依然将保持大幅度的增长,在未来几内,市场无萎缩的可能。但数码相框拓展中国市场需克服两大难点:一是价格; 二是拓展应用空间。价格下降是必然趋势,中国消费者接受只是时间的问题,而根据中国消费者的需求和特点,开发出相应的应用产品,则是需要数码相框厂商亟待的问题。

从技术上来说,未来数码相框的发展将向两极分化。一部分产品着重强调基本功能和低成本,整合家庭中的闹钟、日历和装饰功能,这些产品走的是低成本路线,以展示照片为主,追求图像的品质及幻灯片播放特效,已成为DC/DV的附属物;另一部分产品会添加一些新的功能,如Wi-Fi、DVB-T,还可以即时报告天气、股票等信息,从而有望成为“桌面信息中心”。此外,触摸面板会成为一个应用的新亮点。

1

五邑大学本科毕业设计

1.3 设计的主要目标任务

本设计使用Altera公司cyclone 系列的 EP1C3T144为基础来实现所有的功能,以 SF-EP1C 开发板作为目标板。从 SD卡中读取图片(SPI 模式),SD卡控制不涉及文件操作系统。使用电脑显示器(VGA)作为图片显示屏幕,工作在60Hz/800*600分辨率下,显示色彩为256色。FPGA 中实现bmp解码,使用SDR SDRAM作为显示图片缓存,循环显示SD卡中10幅图片。

1.4 本章小结

本章介绍了数码相框广泛的用途及其研究的目的和意义,也从未来发展方向和技术实现层面简述了数码相框的动态发展趋势,从而说明了本人设计DIY数码相框的原因,最后介绍了设计数码相框的主要目标任务。

2

五邑大学本科毕业设计

第2章 SF-EP1C开发板介绍

2.1 SF-EP1C开发板原理图

3

五邑大学本科毕业设计

4

五邑大学本科毕业设计

2.2 SF-EP1C开发板功能框图

如图2-1和图2-2所示,SF-EP1C开发板有着比较丰富的外设,也给用户预留了一些可扩展的接口。

图2-1 SF-EP1C开发板正面资源分布及功能框图

图2-2 SF-EP1C开发板背面资源分布及功能框图

5

五邑大学本科毕业设计

2.3 SF-EP1C开发板基本配置

●FPGA使用EP1C3T144C8,硬件电路充分考虑了可升级性,该板子同样适用于EP1C6T144;

●板载1Mbit串行配置芯片EPCS1,支持AS和JTAG两种配置方式; ●5V/1.5A DC电源供电,内部产生核压1.5V、I/O电压3.3V; ●PLL电源电路进行滤波处理,更加稳定可靠;

●板载25MHz有源晶振,预留1个未焊接晶振接口;

●4个独立按键、2个复用LED; ●1个串口;

●1个SD卡接口;

●1个256色VGA接口;

●1个64MBit(4*1M*256Bit) SDRAM; ●8位拨码开关;

●1个复位按键和1个FPGA重配置按键;

●4位数码管,仅使用3个I/O口控制,由两个74HC595芯片实现; ●2个20PIN的扩展接口,供大家任意发挥;

2.4 Cyclone器件简介

Altera的Cyclone系列可编程门阵列是基于1.5V、0.13um的SRAM全铜工艺制造。能提供最大20060个LEs,以及最大288Kbit的内嵌RAM。FPGA内部集成的诸如时钟锁相环(PLLs)和专用DDR接口,达到了DDR SDRAM和快速RAM存储访问需求。Cyclone器件是数据存储的高性价比解决方案。Cyclone器件也支持多种I/O标准,包括数据率高达640Mbps的LVDS接口以及66-或33-MHz、64-或32-bit的PCI接口。Altera也提供低成本的串行配置器件配置cyclone器件。

Cyclone器件具有以下特性: ●2910-20060个LEs;

●最大内嵌294912 RAM bits(36864 bytes); ●支持低成本串行配置器件;

●支持LVTTL,LVCOMS,SSTL-2以及SSTL-3 I/O标准; ●支持66-或33-MHz、64-或32-bit的PCI接口; ●支持数据率高达640Mbps的LVDS接口; ●支持数据率低至311Mbps的LVDS接口; ●支持数据率311Mbps的RSDS接口;

6

五邑大学本科毕业设计

●每个器件最多两个PLLs,并且支持倍频和相位偏移; ●多达8个全局时钟网络; ●支持外部存储器,包括DDR SDRAM(133MHz)、FCRAM以及SDR SDRAM; ●支持altera提供的多种多样的IP核。 表2-1 Cyclone器件资源 器件 Les M4K RAM块(128*36bit) RAM总量 PLLs 用户可用IO数 EP1C3 2,910 13 59,904 1 104 EP1C4 4,000 17 78,336 2 301 EP1C6 5,980 20 92,160 2 185 EP1C12 EP1C20 12,060 52 239,616 2 249 20,060 64 294,912 2 301 2.5 本章小结

本章介绍了SF-EP1C开发板的原理图、板子的功能框图、基本配置和Cyclone器件简介,与市面上其它板子对比,SF-EP1C开发板价格实惠,而且这块板子功能比较全面,虽然板子只有不到3000个LEs,但是如果写起代码来就会深有感触,这个规模的逻辑资源也是可以胜任很多应用的。如果想通过这样一块板子来掌握如何利用FPGA器件本身的各种资源来完成一个像模像样的工程,那么SF-EP1C开发板是个不错的选择。

7

五邑大学本科毕业设计

第3章 数码相框的设计方案

3.1 功能需求及模块划分

本设计所要实现的数码相框的主要功能点如下。

1、使用 cyclone 系列的 EP1C3T144 为基础来实现所有的功能,以 SF-EP1C 开发板作为目标板。

2、从 SD 卡中读取图片(SPI 模式),SD 卡控制不涉及文件操作系统。 3、使用电脑显示器(VGA)作为图片显示屏幕,工作在 60Hz/800*600 分辨率下,显示色彩为 256色。

4、FPGA 中实现 bmp 的解码。

5、使用 SDR SDRAM 作为显示图片缓存。 6、循环显示SD 卡中 10 幅图片。

如图3-1、图3-2所示,该设计的功能框图里明确了各个功能模块,5 个大的功能模块包括:系统时钟与复位模块、(包括 SD 卡控制模块和 SPI 时序产生模块)、SD卡相关模块数据流控制模块(包括写 SDRAM 缓存 FIFO 模块、读 SDRAM 缓存 FIFO 模块和 BMP 色彩表模块)、SDRAM控制器模块、VGA 显示驱动模块。

图3-1 数码相框功能框图

8

五邑大学本科毕业设计

图3-2 数码相框系统功能框图

系统时钟与复位模块主要完成 PLL例化和复位控制。PLL 输出三个时钟:内部 SDRAM 控制器工作的 100MHz 时钟、 外部 SDRAM使用的有一定相位偏移的 100MHz 时钟和其他模块使用的 50MHz 时钟。复位控制部分对复位信号做“异步复位,同步释放”处理,保证系统有一个可靠稳定的复位信号。SD 卡相关模块有两个子模块,SD 卡控制模块完成 SD 卡的一些基本控制,如 SD 卡的上电初始化、命令发送、数据读取等。FPGA 和SD卡之间数据或命令的传输是通过 SPI 口,这部分由 SPI时序产生模块控制。

数据流控制模块用于衔接 SD 卡、SDRAM 以及VGA显示驱动模块。从 SD 卡中读取的 BMP图片的色彩表数据将被缓存到 BMP色彩表中,用于显示图片时译码使用。SD 卡的图片数据部分则被送入写 SDRAM缓存 FIFO 中。读和写 SDRAM 缓存 FIFO都直接和 SDRAM 控制器连接,他们一齐完成了高速数据的缓冲。由于 SD 卡本身速度较慢,无法满足 VGA 实时的数据扫描需求,所以需要先将 SD卡中缓存的图片送入 SDRAM 中,VGA显示器实时的从 SDRAM中读取数据进行显示。

最后从读 SDRAM 缓存 FIFO里输出的图片数据经过 BMP 色彩表译码后送到 VGA 显示驱动模块。VGA 显示模块直接驱动显示器进行图片显示。

DIY数码相框工程源码配合SF-EP1C开发板使用,FPGA管脚定义以及分配如表3-1所示。

表3-1 DIY数码相框引脚定义及分配

名称 clk rst_n sdram_clk sdram_cke 方向 input input output output 分配 PIN16 PIN144 PIN26 PIN27 9

作用 FPAG输入时钟信号25MHz FPAG输入复位信号,低电平有效 SDRAM时钟信号 SDRAM时钟有效信号,高电平有效 五邑大学本科毕业设计

sdram_cs_n sdram_ras_n sdram_cas_n sdram_we_n sdram_ba[0] sdram_ba[1] sdram_addr[0] sdram_addr[1] sdram_addr[2] sdram_addr[3] sdram_addr[4] sdram_addr[5] sdram_addr[6] sdram_addr[7] sdram_addr[8] sdram_addr[9] sdram_addr[10] sdram_addr[11] sdram_data[0] sdram_data[1] sdram_data[2] sdram_data[3] sdram_data[4] sdram_data[5] sdram_data[6] sdram_data[7] sdram_data[8] sdram_data[9] sdram_data[10] sdram_data[11] sdram_data[12] sdram_data[13] sdram_data[14] sdram_data[15] spi_miso

output output output output output output output output output output output output output output output output output output inout inout inout inout inout inout inout inout inout inout inout inout inout inout inout inout input PIN39 PIN38 PIN37 PIN1 PIN40 PIN41 PIN47 PIN48 PIN49 PIN50 PIN36 PIN35 PIN34 PIN33 PIN32 PIN31 PIN42 PIN28 PIN132 PIN133 PIN134 PIN139 PIN140 PIN141 PIN142 PIN143 PIN11 PIN10 PIN7 PIN6 PIN5 PIN4 PIN3 PIN2 PIN51 SDRAM片选信号,低电平有效 SDRAM行地址选通脉冲,低电平有效 SDRAM列地址选通脉冲,低电平有效 SDRAM写选通信号,低电平有效 SDRAM的L-Bank地址线 SDRAM的L-Bank地址线 SDRAM地址总线 SDRAM地址总线 SDRAM地址总线 SDRAM地址总线 SDRAM地址总线 SDRAM地址总线 SDRAM地址总线 SDRAM地址总线 SDRAM地址总线 SDRAM地址总线 SDRAM地址总线 SDRAM地址总线 SDRAM数据总线 SDRAM数据总线 SDRAM数据总线 SDRAM数据总线 SDRAM数据总线 SDRAM数据总线 SDRAM数据总线 SDRAM数据总线 SDRAM数据总线 SDRAM数据总线 SDRAM数据总线 SDRAM数据总线 SDRAM数据总线 SDRAM数据总线 SDRAM数据总线 SDRAM数据总线 SPI主机输入从机输出数据信号 10

五邑大学本科毕业设计

spi_mosi spi_clk spi_cs_n hsync vsync vga_r[2] vga_r[1] vga_r[0] vga_g[2] vga_g[1] vga_g[0] vga_b[1] vga_b[0] output output output Output Output Output Output Output output Output Output Output Output PIN57 PIN52 PIN58 PIN61 PIN62 PIN74 PIN73 PIN72 PIN71 PIN70 PIN69 PIN67 PIN68 SPI主机输出从机输入数据信号 SPI时钟信号,由主机产生 SPI从设备使能信号,由主机控制 VGA行同步信号 VGA场同步信号 VGA色彩 VGA色彩 VGA色彩 VGA色彩 VGA色彩 VGA色彩 VGA色彩 VGA色彩 数码相框在FPGA中实现的框图如图3-3所示。

图3-3 数码相框的RTL视图

3.2 系统时钟与复位模块的设计

3.2.1 PLL的配置需求

已经新建了一个工程,然后需要配置一个 PLL。该PLL的输入时钟为FPGA外部25MHz晶振,希望得到一个50MHz(输入时钟的2倍频)的系统时钟供FPGA内部使用。该PLL的输入输出接口如表3-2所示。

11

五邑大学本科毕业设计

表3-2 PLL的接口定义

3.2.2 PLL的配置步骤

1、如图3-4所示,在 Quartus II的菜单栏选择“Tools—>MegaWizard Plug-In Manager„”。

图3-4 选择 MegaWizard

2、如图3-5所示,使用默认选项“Create a new custom megafunction variation”, 点击“Next>”。

12

五邑大学本科毕业设计

图3-5 新建 megagunction

3、如图3-6所示,进行以下配置:

●在“Select a megafunction from the list below”窗口内打开“I/O”下拉框,选择“ALTPLL”。

●在“Which type of output file do you wangt to create?”下选择“Verilog HDL”,这是配置的 PLL内核使用的语言,一般选择此项。

●“What name do you want for the output file?”里默认会出现当前设计的工程路径,需要设计者在最后面手动输入例化的 PLL 的名字,这里输入了“PLL_ctrl”。

完成以上配置,点击“Next>”。

图3-6 新建 PLL

4、如图3-7所示,进行以下配置:

●在“General”一栏内的“Which device speed grade will you be using?”选则该工程所

13

五邑大学本科毕业设计

使用器件的速度等级。

●在“What is frequency of the inclock0 input?”内选择 PLL输入时钟的频率。其他选项使用默认即可。点击“Next>”。

图3-7 输入时钟配置

5、如图3-8所示,配置如下:

●在“Option input”一栏内勾选“Creat an‘areset’input to asynchronously reset the PLL”。 ●在“Lock output”中勾选“Creat ‘locked’output”。 其他选项使用默认即可。点击“Next>”。

14

五邑大学本科毕业设计

图3-8 配置控制信号

●在“Enter output clock frequency?”后面输入希望得到的 PLL 输出时钟的频率。 也可以在“Enter output clock parameter?”后面设置相应的输出时钟和输入时钟的频率关系。“Clock Multiplication factor”后输入倍频系数,“Clock division factor”后输入分频系数,二者决定了输出时钟频率。

●在“Clock phase shift”中可以设置相位偏移。 ●在“Clock ducy cycle”中可以设置输出时钟占空比。 按照图3-9设置后,点击“Next>”。

15

五邑大学本科毕业设计

图3-9 配置输出时钟 c0

6、“clk c1”选项是可选的,用户需要第二个输出时钟时可以开启该输出时钟,相应勾选“Use the clock”后和上一步类似进行配置即可。如图3-10所示,点击“Next>”。

图3-10 配置输出时钟 c1

7、“extclk e0”也是可选的,该时钟主要是输出给 FPGA 外部器件作为时钟,不能作为内部时钟使用。用户需要该输出时钟时可以开启该输出时钟,相应勾选“Use the clock”

16

五邑大学本科毕业设计

后和前一步类似进行配置即可。如图3-11所示,点击“Next>”。

图3-11 配置输出时钟 e0

8、如图3-12所示,“EDA”中列了用户在对例化了 PLL 模块的工程仿真时,需要添加的仿真库文件,用户可以到 Quartus II 安装文件夹下可以找到。点击“Next>”。

图3-12 仿真库文件

17

五邑大学本科毕业设计

9、如图3-13所示,“Summary”中罗列了该 PLL 核最终的输出文件。对主要的一些输出文件说明如下:

●PLL_ctrl.v,字面翻译是“变异文件” ,是 PLL内部的控制 IP 核。

●PLL_ctrl_inst.v 是一个模板的例化文件, 用户可以直接复制这个文件里的例化来用。

●PLL_ctrl_wave.jpg 里是用户所配置的 PLL 的波形示例,勾选后可以在工程目录下找到,看看波形是否符合预定的要求。或者用它和仿真后的波形对比一下,它们应该是一致的。

图3-13 输出文件

3.2.3 PLL的例化

PLL 配置完成后,需要将 PLL 例化到工程中。找到“PLL_ctrl_inst.v”文件并打开,将其内容拷贝到工程代码中,然后更改“()”里的内容,使用代码外的接口对应即可。如:

input clk; //25MHz 系统外部输入时钟 input rst_n; //系统复位信号,低电平有效

output clkdiv; //PLL 输出时钟

output locked; //稳定PLL输出标志位,高有效

18

五邑大学本科毕业设计

//PLL 产生模块

//产生一个系统输入时钟 2 倍频,相移 0 度的时钟 PLL_ctrl PLL_ctrl_inst (

.areset(~rst_n), //PLL异步复位信号,高有效 .inclk0(clk), //PLL输入时钟 .c0(clkdiv), //PLL 输出时钟

.locked(locked) //稳定PLL输出标志位,高有效 );

PLL仿真波形如图3-14所示。

图3-14 PLL仿真波形

3.3 SD卡模块的设计

3.3.1 SPI接口控制

SPI(Serial Peripheral Interface)即串行外围设备接口,是一种高速、全双工、同步的通信总线。只需要四条信号线即可,节约管脚,同时有利于 PCB的布局。正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。

该工程模块的 SPI 接口四条信号线分别定义为 spi_cs_n、spi_clk、spi_miso 和spi_mosi。其中 spi_cs_n 是控制芯片是否被选中的,只有片选信号有效时(一般为低电平有效),对此芯片的操作才有效。这就使得在同一总线上连接多个 SPI 设备成为可能。spi_clk是SPI 同步时钟信号,数据信号在该时钟的控制下逐位进行传输。spi_miso 和spi_mosi 是主从机进行通信的数据信号,spi_miso 即主机的输入或者说是从机的输出,spi_mosi 即主机的输出或者说是从机的输入。

SPI 的工作模式有两种:主模式和从模式。SPI 总线可以配置成单主单从、单主多从和互为主从。该工程的 FPGA 是SPI 主机,SD 卡是从机,处于单主单从模式。因此,FPGA 将控制产生 spi_cs_n 和spi_clk 的时序。

一般而言,一些内嵌有 SPI 接口外设的处SPI 通信可以配置成四种不同的传输模式。理器的 datasheet 都会提到CPOL和 CPHA这两个参数。如图3-15所示,CP0L=1 时,

19

五邑大学本科毕业设计

发起通信后的第一个时钟沿是下降沿;SPI 时钟信号 spi_clk 闲置时总是高电平,CPOL=0时, SPI 时钟信号 spi_clk 闲置时总是低电平, 发起通信后的第一个时钟沿是上升沿。 而CPHA则用于控制数据与时钟的对齐模式,CPHA=1 时,时钟的第一个变化沿(上升沿或者下降沿)数据变化,那么也意味着时钟的第二个沿(与第一个沿相反)锁存数据;CPHA=0 时,时钟的第一个变化沿之前数据变化,那么也意味着时钟的第一个沿锁存数据。

图3-15 CPOL 配置 SPI 时钟

不同的 CPOL和 CPHA 可以配置成 4 种SPI 传输模式,其时序如图3-16所示。 SD卡通信可以是 SD 模式或者 SPI 模式,该工程使用了 SD 卡的 SPI 模式进行通信。SD卡在总线模式中唤醒,在接收复位命令时如果 CS 信号有效(拉低),那么将进入 SPI模式。如果 SD 卡认为 SD 总线模式是必须的, 那么它不会对命令做出响应并继续保持 SD 总线模式。如果需要 SPI 模式,SD卡将切换到 SPI 模式并发出 SPI 模式下的 R1 响应。

返回 SD 总线模式唯一的方法是重新给 SD 卡上电。在 SPI 模式下,SD 卡协议状态机不被检测。所有在 SD 总线模式支持的命令在 SPI模式也是可用的。

SPI 模式下缺省的命令结构/协议是 CRC 检测关闭。随着 SD 卡在 SD 总线模式下上电,一旦在 SPI 模式下,默认将关闭 CRC。CMD0 必须紧跟着一个有效的 CRC 字节。 对于该设计中,SPI 的时序模式为 CPOL=1,CPHA=1,速率为 25Mbit。

图3-16 SPI 时序

20

五邑大学本科毕业设计

SPI 模块的接口定义如表3-3所示。

表3-3 SPI模块接口定义

名称 clk rst_n spi_miso spi_mosi spi_clk spi_tx_en spi_tx_rdy spi_rx_en spi_rx_rdy spi_tx_db[7:0] spi_rx_db[7:0] 方向 input input input output output input output input output input output 描述 PLL产生时钟信号,频率为50MHz 系统复位信号,低电平有效 SPI主机输入从机输出数据信号 SPI主机输出从机输入数据信号 SPI时钟信号,由主机产生 SPI数据发送使能信号,高有效 SPI数据发送完成标志位,高有效 SPI数据接收使能信号,高有效 SPI数据接收完成标志位,高有效 SPI数据发送寄存器 SPI数据接收寄存器 当需要启动 SPI模式进行数据传输时,先spi_cs_n 信号由 SD 卡命令驱动模块控制。

把待传输的数据放置到 SPI 数据发送寄存器 spi_tx_db[7:0]中,然后将 SPI发送使能标志位spi_tx_en 拉高,SPI 发送功能模块被启动。若干个时钟周期后,数据发送完毕,则 SPI 发送完成标志位 spi_tx_rdy 被拉高。此时外部模块检测到 spi_tx_rdy 为高电平,则拉低spi_tx_en,SPI 模块在spi_tx_en 拉低后也会清零内部的计数器,此时的 spi_tx_rdy 也会复位,从而完成一次数据传输。接收功能和发送功能类似,只要在 SPI 接口完成标志位spi_rx_rdy拉高后读取 spi_rx_db[7:0]的数据即可。

3.3.2 SD卡数据存储结构与 FAT16 文件系统

首先,需要说明的一点是,SD卡和SDHC卡其实还是有点区别的,不仅在容量上,对于实际的底层驱动上也是稍有区别的。SD卡一般容量在 2GB以下,使用 FAT16 的文件系统;而 SDHC 容量为 4GB 或更大,一般使用 FAT32 的文件系统。该设计针对SD卡进行初始化和通信。下面对SD卡以及 FAT16 文件系统做一些简单的介绍,该设计代码不涉及文件系统的操作,但是了解文件系统将有助于进一步明确 SD 卡的数据存储结构。

3.3.2.1 FAT16 存储原理

当把一部分磁盘空间格式化为FAT文件系统时, FAT文件系统就将这个分区当成整块可分配的区域进行规划,以便于数据的存储。下文将把FAT16部分提取出来,详细进行描述。

21

五邑大学本科毕业设计

FAT16是Microsoft较早推出的文件系统,具有高度兼容性,目前仍然广泛应用于个人电脑尤其是移动存储设备中,首先是引导FAT16简单来讲由图3-17所示的六部分组成。扇区(DBR),紧随的便是FAT表,FAT表是FAT16用来记录磁盘数据区簇链结构的。FAT将磁盘空间按一定数目的扇区为单位进行划分,这样的单位称为簇。通常情况下,每扇区512字节的原则是不变的。簇的大小一般是2n (n为整数)个扇区的大小,如512B,1K,2K,4K,8K,16K,32K,64K,通常不超过32K。以簇为单位而不以扇区为单位进行磁盘的分配,是因为当分区容量较大时,采用大小为512B的扇区管理会增加FAT表的项数,对大文件存取会增加消耗,使文件系统效率不高。分区的大小和簇的取值是有关系的,如表3-4。

图3-17 FAT16的组织形式 表3-4 FAT16分区大小与对应簇大小

3.3.2.2 引导扇区的信息

DBR区(DOS BOOT RECORD)即操作系统引导记录区,通常占用分区的第0扇区共512个字节(特殊情况也要占用其它保留扇区)。在这512个字节中,其实又是由跳转指令,厂商标志和操作系统版本号,BPB(BIOS Parameter Block),扩展BPB,OS引导程序,结束标志几部分组成。表3-5表3-6和表3-7分别为FAT16分区上的引导扇区段、BPB字段、BPB扩展字段的重要信息列表。

22

五邑大学本科毕业设计

表3-5 FAT16分区上的引导扇区段

表3-6 FAT16分区的BPB字段

23

五邑大学本科毕业设计

表3-7 FAT16分区的扩展BPB字段

所使用的 SD 卡使用 Winhex查看到的 DBR 区数据如图3-18所示。 1、偏移地址 00H,长度 3,内容:EB 3C 90 跳转指令。

2、偏移地址 03H,长度 8,内容:4D 53 44 4F 53 35 2E 30 为厂商标志和 OS版本号,这里是 MSDOS5.0。

3、偏移地址 0BH,长度 2,内容:00 02。注意这里数据的布局,高地址放高字节,低地址放低字节(数据为小端格式组织),所以数据应该是 0200,即 512。表示的意思是,该磁盘每个扇区有 512 个字节。有的可能是 1024、2048、4096。

4、偏移地址 0DH,长度 1,内容:01。表示的意思是每个簇有 1 个扇区。这个值不

24

五邑大学本科毕业设计

能为 0,而且必须是 2 的整数次方,比如 1、2、4、8、16、32、64、128。但是这个值不能使每个簇超过 32KB 字节。

5、偏移地址 0EH,长度 2,内容:08 00。转换一下,就是 00 08,意思是保留区域中的保留扇区数为 8 个。那么就可以知道下面的 FAT1 区的开始的地址就是:0x08*0x200(每个扇区的字节数)=0x1000。

6、偏移地址 10H,长度 1,内容:02。表示此卷中的 FAT 结构的份数为 2,另外一个是备份的。

7、偏移地址 11H,长度 2,内容:00 02。转换一下,就是 0200H,表示根目录项数(Root Entries),能够保存在该分区的根目录文件夹中的 32 个字节长的文件和文件夹名称项的总数。在一个典型的硬盘上,本字段的值为 512。通过该数据也可以算出根目录后的用户数据区的偏移量地址,即用户数据区首地址=根目录地址+512*32(十进制)。

8、偏移量地址 13H,长度 2,内容:4D ED。转换一下就是 ED4DH,即大约 32MB的SD卡存储量。表示小扇区数(Small Sector) 。该分区上的扇区数,表示为 16位(<65536)。对大于 65536 个扇区的分区来说,本字段的值为 0,而使用大扇区数来取代它。

9、偏移地址 16H,长度 2,内容:EC 00。转换一下为 00EC,表示每个FAT占用的扇区数。那么每个扇区占用的字节数就是 0x00EC*0x200=0x1D800。根据启动区、FAT1、FAT2、根目录、数据区的次序,可以依次计算出它们的地址了。

10、偏移量地址 20H,长度 2,内容:00 00。表示大扇区数(Large Sector) 。如果小扇区数字段的值为 0,本字段就包含该 FAT16 分区中的总扇区数。如果小扇区数字段的值不为 0,那么本字段的值为 0。

图3-18 DBR区数据

根据上面得到的信息可以进行以下的地址推导: 1、启动区地址理所当然是 0x00。 2、FAT1 地址是0x1000。

3、FAT2 地址是0x1000 + 0x1D800 = 0x1E800。 4、根目录区地址是 0x1E800 + 0x1D800 = 0x3C000。

根据上面的计算,可以看看是不是和实际的一致。如图3-19图3-20和图3-21所示。

图3-19 FAT1 地址

25

五邑大学本科毕业设计

图3-20 FAT2 地址

图3-21 根目录地址

和前面计算的结果是一致的。SD 卡数据每次读取都是以一整个扇区 512 字节为单位。找出这些地址后,可以很方便的找到数据。 3.3.2.3 分析根目录区的内容

FAT16 文件系统从根目录所占的 32 个扇区之后的第一个扇区开始以簇为单位进行数据的处理,这之前仍以扇区为单位。对于根目录之后的第一个簇,系统并不编号为第 0 簇或第1 簇 (可能是留作关键字),而是编号为第 2 簇,也就是说数据区顺序上的第 1 个簇也是编号上的第 2簇。

FAT 文件系统之所以有 12,16,32 不同的版本之分,其根本在于 FAT 表用来记录任意一簇链接的二进制位数。以 FAT16 为例,每一簇在 FAT 表中占据 2 字节(二进制 16 位)。所以,FAT16 最大可以表示的簇号为 0xFFFF(十进制的 65535),以 32K 为簇的大小的话,FAT32可以管理的最大磁盘空间为:32KB×65535=2048MB,这就是为什么 FAT16 不支持超过 2GB分区的原因。

FAT 表实际上是一个数据表,以 2 个字节为单位,我们暂将这个单位称为 FAT 记录项,通常情况其第 1、2 个记录项(前 4 个字节)用作介质描述。从第三个记录项开始记录除根目录外的其他文件及文件夹的簇链情况。根据簇的表现情况 FAT 用相应的取值来描述,如表3-8所示。

26

五邑大学本科毕业设计

表3-8 FAT163记录项的取值含义

这里使用的是FAT16短文件目录项,每32个字节表示一个文件(文件夹也是),3 2个字节的表示定义分别如表3-9所示。

表3-9 FAT16目录项32个字节的表示定义

对上表中的一些取值进行说明:

●对于短文件名,系统将文件名分成两部分进行存储, 即主文件名+扩展名。0x0~0x7字节记录文件的主文件名,0x8~0xA记录文件的扩展名,取文件名中的 ASCII 码值。不记录主文件名与扩展名之间的“.” 。 主文件名不足 8 个字符就以空白符(20H)填充,扩展名不足 3 个字符也同样以空白符(20H)填充。0x0 偏移处的取值若为00H,表明目录项为空;若为 E5H,表明目录项曾被使用,但对应的文件或文件夹已被删除。(这也是误删除后恢复的理论依据)。文件名中的第一个字符若为“.”或“..”表示这个簇记录的是一个子目录的目录项。“.”代表当前目录;“..”代表上级目录(和我们在 dos或 windows 中的使用意思是一样的,如果磁盘数据被破坏,就可以通过这两个目录项的具体参数推算磁

27

五邑大学本科毕业设计

盘的数据区的起始位置,猜测簇的大小等等,故而是比较重要的)。

●0xB 的属性字段:可以看作系统将 0xB 的一个字节分成 8 位,用其中的一位代表某种属性的有或无。这样,一个字节中的 8 位每位取不同的值就能反映各个属性的不同取值了。如 00000101 就表示这是个文件,属性是只读系统。

●0xC~0x15 在原 FAT16 的定义中是保留未用的。在高版本的 WINDOWS 系统中有时也用它来记录修改时间和最近访问时间。那样其字段的意义和FAT32的定义是相同的。

●0x16~0x17 中的时间=小时*2048+分钟*32+秒/2。得出的结果换算成 16 进制填入即可。也就是:0x16 字节的 0~4 位是以 2 秒为单位的量值;0x16 字节的 5~7 位和 0x17 字节的 0~2 位是分钟;0x17字节的 3~7位是小时。

●0x18~0x19 中的日期=(年份-1980)*512+月份*32+日。得出的结果换算成 16 进制填入即可。也就是:0x18 字节 0~4 位是日期数;0x18 字节 5~7 位和 0x19 字节 0位是月份;0x19 字节的1~7 位为年号,原定义中 0~119 分别代表 1980~2099,目前高版本的 Windows 允许取 0~127,即年号最大可以到 2107年。

●0x1A~0x1B存放文件或目录的表示文件的首簇号,系统根据掌握的首簇号在 FAT表中找到入口, 然后再跟踪簇链直至簇尾, 同时用 0x1C~0x1F处字节判定有效性就可以完全无误的读取文件(目录)了。

●普通子目录的寻址过程也是通过其父目录中的目录项来指定的, 与数据文件(指非目录文件)不同的是目录项偏移 0xB的第 4 位置1,而数据文件为 0。

●对于整个 FAT 分区而言,簇的分配并不完全总是分配干净的。如一个数据区为 99个扇区的 FAT 系统,如果簇的大小设定为 2 扇区,就会有 1个扇区无法分配给任何一个簇。这就是分区的剩余扇区,位于分区的末尾。有的系统用最后一个剩余扇区备份本分区的 DBR,这也是一种好的备份方法。

●早的 FAT16系统并没有长文件名一说,Windows操作系统已经完全支持在 FAT16上的长文件名了。FAT16 的长文件名与 FAT32 长文件名的定义是相同的。 3.3.2.4 计算出该文件放置空间

从文件的大小可以计算出,需要占用多少个簇。根据前面的数据,每个簇放1个扇区,每个扇区512个字节,那么一个簇的空间就是512字节了。那么48729字节需要96个簇,这96个簇的开始的地址就可以计算出来了。

如图3-22所示,TEST.txt占用了48KB的空间,NEXT占用了512B的空间。文件是按照整簇来存放的,不够一个簇的大小(由上面算得,一个簇为一个扇区即512B),也要给一个簇的空间。

28

五邑大学本科毕业设计

图3-22 文件存储空间占用

上面已经知道TEST.txt开始簇地址存放在FAT1中的偏移量了:02H,由此可以先计算出TEST.txt的第一簇数据存放地址为: 3C000H(根目录地址)+20H*200H(前面提到的用户数据偏移量)+(02H-02H)*01H(1个簇有1个扇区)*200H=40000H。把偏移量-02H意思是簇号在FAT1中存储都是从02H开始的。(FAT1 而第一个簇地址存放在FAT1中的:1000H起始地址)+02H*02H=1004H。而1004H地址上的数据为:03 00,转换后为0003H,那么我们可以计算出TEST.txt第二个簇的地址为:3C000H(根目录区地址)+20H*200H(前面提到的用户数据偏移量)+ (03H-02H)*01H(1个簇有1个扇区)*200H=40200(第一个簇开始地址)。依此类推,一直到FAT1中偏移量为C2处出现了FF FF,这表示TEST.txt文件存储结束,那么前面的0061H就是文件最后一个簇偏移量。可以由此算一下文件大小为:(0061H-0002H+0001H(补偿))=96个簇,和实际相符。

同样的道理可以算出NEXT.txt文件的存放地址。首地址偏移量为62H,由此可以先计算出NEXT.txt的第一簇数据存放地址为: 3C000H(根目录地址)+20H*200H(前面提到的用户数据偏移量)+(62H-02H)*01H(1个簇有1个扇区)*200H=4C000H。 而第一个簇地址存放在FAT1中的:1000H(FAT1起始地址)+62H*02H=10C4H。而10C4H地址上的数据为:也就是说由于NTXT.txt不满一个簇,那么只能分配到一个簇的地址空间。FF FF,即结束了,

3.3.3 SD卡初始化及读操作

对于 SD 卡的设计测试所用的串口模块在最后的系统中是不需要的,但是现在的初步调试会用到它。所以要先对这个串口模块精心包装定制一番,再整合前面设计好 SPI 协议控制模块,能收能发全双工,速率 25Mb,标称的最大速度(初步调试时可以考虑先降额一半或更低的速率可能更好一些,这里由于叙述的方便所以直接用 25Mb 的速率)。SD 卡控制的模块里除了 SPI协议模块外,当然还得用几个又臭又长的状态机来控制SD 卡的上电初始化和扇区读取控制。

初步测试的模块划分如图3-23所示。SD 接收来的数据要送给串口模块发出去,这期间的数据交换就都交给 FIFO 来处理了。输出处理串口发送信号 rs232_tx 外,还有 led[3:0]连接到 4 个发光二极管,用于调试 SD 卡初始化的状态机时的状态指示。

29

五邑大学本科毕业设计

图3-23 SD卡调试模块 RTL 视图

SD 卡控制模块包括了一个 SD 卡初始化和扇区读取控制的模块和一个 SPI 通信模块,它的具体接口定义和描述如表3-10所示。

表3-10 SD卡模块接口定义

SD 卡的上电初始化过程可以分为以下五个步骤: 1、适当延时等待 SD 就绪。

2、发送 74+个 spi_clk,且保持 spi_cs_n=1,spi_mosi=1。

3、发送 CMD0 命令并等待响应 R1=8'h01: 将卡复位到 IDLE 状态。 4、发送 CMD1 命令并等待响应 R1=8'h00: 激活卡的初始化进程。

发送CMD16 命令并等待响应 R1=8'h00: 设置一次读写 BLOCK的长度为 512 个5、字节。

SD 数据读取操作大体分为以下三个步骤: 1、发送命令CMD17。 2、接收读数据起始令牌 0xfe。

3、读取 512Byte 数据以及 2Byte 的CRC。 SD 命令 CMD发送控制大体分为以下五个步骤: 1、发送8 个时钟脉冲。

2、SD 卡片选 CS 拉低,即片选有效。 3、连续发送6 个字节命令。

30

五邑大学本科毕业设计

4、接收1 个字节响应数据。

5、SD 卡片选 CS 拉高,即关闭 SD 卡。 发送总共 6个字节命令的格式如图3-24所示。

图3-24 SD卡命令格式

3.4 数据流模块的设计

该模块主要实现一个串口发送器功能, 该发送器的数据是从 FIFO 中读取的。 也就是说,只要 FIFO 中有数据,串口发送器就会启动,将数据发送出去。

如图3-25 所示,该串口发送器由三个大模块组成。datagene 模块每 1s产生 16 个字节递增的数据,这些数据将会写入 fifo232 中例化的一个 256 字节大小的 FIFO 中。一旦检测到 FIFO中有数据,uart_ctrl 模块就会将 FIFO 中的数据读出并通过串口发送出去。大家可以用串口线连接 SF‐EP1C板和 PC机,通过调试助手查看收到的数据是否是一组不停递增的数据。

图3-25 串口发送器 RTL 视图

这一模块各个管脚的分配如表3-11所示。

表3-11 数据流控制模块接口定义

31

五邑大学本科毕业设计

fifo232 是对 FIFO 的例化,FIFO 的配置方式和 RAM等基本相同,该模块重点把握数据流是如何在各个控制信号的控制下进行传输。 数据的读、写功能波形仿真,如图3-26、图3-27所示。

32

五邑大学本科毕业设计

图3-26 rdfifo波形仿真图

图3-27 wrfifo波形仿真图

图3-28为SD卡与数据流fifo综合模块的RTL视图。

图3-28 SD_fifo模块的RTL视图

33

五邑大学本科毕业设计

3.5 SDRAM控制器模块的设计

SDRAM控制器针对SDRAM的指令操作特点,为SDRAM提供同步命令接口和时序逻辑控制,下面将以ALTERA公司的Cyclone系列FPGA为例,主机系统时钟为100MHz,使用三星公司的K4S641632E,8MByte SDRAM,介绍SDRAM控制器的具体设计方法。图3-29为SDRAM控制器的接口原理图。

图3-29 SDRAM控制器接口原理图

接口信号介绍:

1、与主机接口信号: CLK:系统时钟信号; RESET::系统复位信号;

CMD[2:0]:译码指令,如表3所示;

CMDACK:指令应答信号,通知主机命令已被SDRAM执行;

ADDR:地址线,根据具体情况确定位数,本例中为22位,A21、A20代表页地

址BA1,BA0;A19~A8代表行地址;A7~A0代表列地址;

DATAIN/DATAOU:输入、输出数据总线; DM:数据掩码; 2、与SDRAM接口信号:

SADDR:12位地址线,在读、写操作时,地址线分时复用为行地址和列地址; BA:页地址,BA0,BA1; CS:片选信号; CKE:时钟使能信号;

RAS、CAS、WE:命令控制信号; DQM:SDRAM数据掩码; DQ:双向数据线;

34

五邑大学本科毕业设计

SDRAM控制器作为顶层模块,由3个主要模块组成:接口控制模块、命令生成模块、数据路径模块。下面将介绍各个模块的功能和关键设计的实现方法。

CMD命令字功能如表3-12所示。

表3-12 CMD命令字

3.5.1 接口控制模块

接口控制模块主要实现的功能包括:将CMD[2:0]翻译成接口指令和对刷新计数器的控制,如图3-30所示。首先通过状态机来完成对CMD[2:0]的翻译,在VHDL程序中声明一个用户自定义类型states,根据CMD[2:0]输入来决定状态的转移,完成对CMD[2:0]的解码。

SDRAM需要周期性刷新操作以保持数据,数据手册中通常会给出在一定的时间T内,SDRAM至少刷新X次,如果用户使用频率为Fr MHz的时钟,则刷新周期Tf可以通过下面的公式计算出:Tf=(T*Fr) / X。例如,本例中数据手册要求64ms内至少刷新4096次,系统时钟周期为100MHz,则刷新周期为(64ms*100MHz)/ 4096,得出结果等于1562.5,所以至多1562个时钟周期的时间就必须对SDRAM刷新一次。刷新控制在程序中通过一个计数器来完成,当到达规定的计数周期,就向SDRAM发出REF_REQ刷新请求,直到SDRAM完成刷新操作,发出REF_ACK刷新应答信号,计数器才重新赋值开始下一次的计数。

图3-30 接口控制模块

35

五邑大学本科毕业设计

3.5.2 命令生成模块

图3-31是命令生成模块,主要实现了对输入的指令请求进行仲裁判断,并将仲裁后要执行的指令解码成SDRAM需要的RAS、CAS等信号,从而实现对SDRAM的控制。

图3-31 命令生成模块

之所以需要仲裁机制,是因为在指令执行之前可能会发生以下情况:其它指令和刷新请求同时到来;刷新请求到来时,其它指令正在执行。仲裁机制实现方法如下:

(1) SDRAM在每一刻只有一个指令在执行;

(2) 先到的指令先执行,即:如果刷新请求到来时,其它命令正在执行中,要等到当前命令执行完成后,才能执行刷新指令;

(3) 其它指令和刷新请求同时到来时刷新操作先执行。

经过仲裁判断后,指令将传入命令生成器。命令生成器不仅要把指令解码成可控制SDRAM的信号,同时还要用三个移位寄存器对命令执行的延迟时间进行控制。第一个为指令延时寄存器,用来保证SDRAM有充足时间完成最终指令。例如,如果命令的执行需要8各时钟周期的时间,则指令延时寄存器com_delay的初值设为“11111111”,同时声明一个内部信号com_done,作为指令执行完成的标志的。在指令执行期间,每一个时钟上升沿到来时,移位寄存器向右移位一次,com_delay[0]的移入com_done,同时“0” 移入最高位com_delay[7]。当com_done为“0”时,就说明指令的延迟时间已到,即通过com_done的值,就可以判断当前指令是否执行完成。要注意的是:移位寄存器的位数和初值,应该根据SDRAM的数据手册中命令完成需要的时间和系统的时钟周期来确定。

当输入的指令为writea和reada指令,将引发一系列指令的执行,和其它指令相比需要附加时间。所以,声明第二个移位寄存器rw_shift,来计算这两个指令的附加时间,其工作原理和第一个移位寄存器是一样的。最后一个移位寄存器oe_shift用来为数据通道生成oe,即数据输入、输出使能信号。对于非页模式的读写来说,oe保持有效的时间取决于突发长度。并且oe有效的起始时间对读操作和写操作时不同的:读操作时,oe有效的起始时间取决于CAS延时时间,而对于写操作时则在写指令开始时oe就是有效的。

36

五邑大学本科毕业设计

3.5.3 数据路径模块

数据路径模块主要是在writea和reada命令期间处理数据的路径操作。模块的结构图如图3-32所示。DQ是双向数据线,用来传输从SDRAM读出数据和向SDRAM写入的数据。无论是数据在读出还是写入时,都是在oe有效,即oe为高电平时才能进行传输。DM是由主机输出的数据掩码,通过DQM输出到SDRAM的LDQM和UDQM管脚,进而控制SDRAM I/O缓冲的低字节和高字节。

图3-32 数据路径模块

该SDRAM 控制器的接口定义与说明如表3-13所示。

37

五邑大学本科毕业设计

表3-13 SDRAM 控制器接口定义

图3-33为SDRAM控制器顶层模块的RTL视图。

38

五邑大学本科毕业设计

图3-33 SDRAM_TOP模块的RTL视图

3.6 VGA显示驱动模块的设计

3.6.1 VGA显示原理与VGA时序实现

通用VGA显示卡系统主要由控制电路、显示缓存区和视频 BIOS程序三个部分组成。控制电路如图3-34所示。控制电路主要完成时序发生、显示缓冲区数据操作、主时钟选择和 D/A转换等功能;显示缓冲区提供显示数据缓存空间;视频BIOS作为控制程序固化在显示卡的 ROM中。

图3-34 通用VGA显示卡控制电路框图

39

五邑大学本科毕业设计

3.6.1.1 VGA时序分析

通过对VGA显示卡基本工作原理的分析可知,要实现VGA显示就要解决数据来源、数据存储、时序实现等问题,其中关键还是如何实现VGA时序。VGA的标准参考显示时序如图3-35所示。行时序和帧时序都需要产生同步脉冲(Sync a)、显示后沿(Back porch b)、显示时序段(Display interval c)和显示前沿(Front porch d)四个部分。几种常用模式的时序参数如表3-14所示。

图3-35 VGA标准参考时序图 表3-14 VGA参考时序数据

3.6.1.2 VGA时序实现

首先,根据刷新频率确定主时钟频率,然后由主时钟频率和图像分辨率计算出行总周期数,再把表3-14中给出的a、b、c、d各时序段的时间按照主计数脉冲源频率折算成时钟周期数。在CPLD中利用计数器和RS触发器,以计算出的各时序段时钟周期数为基准,产生不同宽度和周期的脉冲信号,再利用它们的逻辑组合构成图3-35中的a、b、c、d各时序段以及D/A转换器的空白信号BLANK和同步信号SYNC。 3.6.1.3 读SRAM地址的产生方法

主时钟作为像素点计数脉冲信号,同时提供显存SRAM的读信号和D/A转换时钟,它所驱动的计数器的输出端作为读SRAM的低位地址。行同步信号作为行数计数脉冲信

40

五邑大学本科毕业设计

号,它所驱动的计数器的输出端作为读SRAM的高位地址。由于采用两片SRAM,所以最高位地址作为SRAM的片选使用。由于信号经过CPLD内部逻辑器件时存在一定的时间延迟,在CPLD产生地址和读信号读取数据时,读信号、地址信号和数据信号不能满足SRAM读数据的时序要求。可以利用硬件电路对读信号进行一定的时序调整,使各信号之间能够满足读SRAM和为DAC输入数据的时序要求。 3.6.1.4 数据宽度和格式

如果VGA显示真彩色BMP图像,则需要R、G、B三个分量各8位,即24位表示一个像素值,很多情况下还采用32位表示一个像素值。为了节省显存的存储空间,可采用高彩色图像,即每个像素值由16位表示,R、G、B三个分量分别使用5位、6位、5位,比真彩色图像数据量减少一半,同时又能满足显示效果。

3.6.2 功能单元设计

实现VGA显示,除了实现时序控制,还必须有其他功能单元的支持才能实现完整的图像显示。

1、控制器:VGA显示有多种模式,需要通过控制器实现模式间切换,还需要对显示的内容进行接收、处理和显示。所以控制器的性能越高,数据更新和显示效果就越好。

2、显示数据缓存区:VGA显示要求显存速度快、容量大。读速度要达到65MHz以卜,存储容量至少要2MB。可采用高速SRAM或SDRAM作为显示数据缓存。

3、数模转换器DAC:VGA显示对数模转换DAC有如下要求:一是高速转换,转换的速度应该在80MHz或以上;二是刚步性好,能保证 R、G、B三路信号的同步性;三是有相应的精度。可选择一种包括3路8位高速D/A的专用视频芯片。

4、数据源及其接口:要提高VGA显示的效率,就要不断更新数据,同时还要保证实时性,因此需要非常高的接口速度。VGA显示卡虽可达到100Mbps的数据更新速度,但是一般设备、特别是嵌入式设备达不到这么高的速度,而且大多数情况下也不需要这么高的数据更新率。目前常用接口为EPP接口、USB接口、TCP/IP、RS232C/485等。其中TCP/IP、EPP接口和USB接口是基于计算机的,速度较快;TCP/IP、RS232C/485是基于网络通信的接口,其中RS485速度虽慢,但应用广泛且容易实现远程控制 。

在数据源为低速接口时,可以考虑采用 Flash或者SM存储卡等预先存储一些常用的图像显示数据和字库文件,在更新数据时直接应用这些数据,从而加快显示缓存的更新速度。这样既能满足高分辨率图像的显示,又能满足文字信息数据的快速更新。刚时为了存储更多的图像,可以先存储JPEG格式图像,再由控制器解码成BMP位图图像后送到显示缓存显示,这样就相对扩展了Flash的存储空间。同时,由于图像的解码速度要大大快于

41

五邑大学本科毕业设计

数据源接口的速度,也就相应提高了显示缓存的数据更新速度。 由各功能单元组成的VGA显示硬件结构框图如图3-36所示。

图3-36 VGA显示硬件结构框图

3.6.3 显存数据更新与显示的同步实现

在VGA显示时,要考虑如何实现显存数据更新与显示的同步进行。解决的方案有以下几种:

1、采用具有缓存作用的双口RAM,这种方法使用的器件数量多、功耗大、成本高,基本不可取。

2、采用两组SRAM进行乒乓工作模式,一组SRAM用于显示的同时,另一组SRAM用于图像数据的更新,然后在两组SRAM之间切换。这样做会提高一些成本,而且需要更复杂的总线控制。

3、利用FPAG/CPLD和SDRAM构造双口SRAM。这种方法实时性好,成本较低,时序控制比较复杂,它是实现高性能低成本要求的最佳方案。

4、采用一组SRAM作为显存,可以简化系统设计、降低成本。这时可以考虑利用行时序和帧时序中SRAM总线空闲的时序段,在不关闭图像显示的情况下实现显存SRAM的数据更新。该方法的更新率与数据写速度密切相关,显存的写数据速度越快,该方法的更新率就越高。

假设CPU的工作时钟最大为60MHz,并采用JPEG解码更新方式。这时如果将解码缓存区分配在CPU片内内存,则更新数据时直接由内存向SRAM写数据,一次需要0.17μs;如果将解码缓存区分配在片外空间,则更新数据时CPU要先从片外读数据,再向SRAM写数据,这样写一次需要0.25μs。在相邻显示的两帧图像只存在局部差别或更新文本显示信息时,可使用局部数据更新方法,以提高更新率。表3-15给出了显示每帧图像包含的总线空闲时间,以及在不同解码缓存区分配方式下图像全部更新和10%局部更新的帧率。这里提到的帧率是指对显存数据的更新速度,而不是指图像的屏幕刷新率,它对刷新率没有影响。

42

五邑大学本科毕业设计

表3-15 每帧总线空闲时间及两种解码缓冲区分配方式下的显存更新速度

基于以上方案设计的嵌入式

VGA显示系统在只有系统控制板和CRT显示器的情况下

实现了嵌入式高分辨率VGA显示。

通过对嵌入式VGA显示系统的设计分析和实际使用,得到如下结论: 1、由于VGA显示是一个高速过程,所以选择器件时要选择高速器件。

2、VGA显示时序要求较严格,时序中的前后沿及同步脉冲宽度都要依照严格的参考数据设置。

3、在一般情况下,由于数据接口的限制,数据更新率不能达到计算机的水平。通过一些特殊设计,还是能够满足大多数嵌入式VGA的需求。

4、性能、成本和复杂度要综合考虑,要以系统的实际需求为目标,采用合理而实用的设计方案。

3.6.4 BMP格式图片显示

3.6.4.1 BMP格式解析

位图(Bitmap)是 Windows 显示图片的基本格式。在 Windows下,任何各式的图片文件(包括视频播放)都要转化为位图后才能显示出来。

位图文件主要分为如表3-16所示的3 个部分。

表3-16 位图文件结构

43

五邑大学本科毕业设计

1、文件信息头

文件信息头 BITMAPFILEHEADER 的结构体定义如下: typedef struct tagBITMAPFILEHEADER { /* bmfh */ UINT bfType; DWORD bfSize; UINT bfReserved1; UINT bfReserved2; DWORD bfOffBits; } BITMAPFILEHEADER;

位图文件信息头定义如表3-17所示。

表3-17 位图文件信息头定义

2、位图信息头

位图信息头 BITMAPINFOHEADER 的结构体定义如下: typedef struct tagBITMAPINFOHEADER { /* bmih */ DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount; DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter;

44

五邑大学本科毕业设计

LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant; } BITMAPINFOHEADER;

位图信息头定义如表3-18所示。

表3-18 位图信息头定义

3、彩色表

彩色表包含的元素与位图所具有的颜色数相同,象素的颜色用 RGBQUAD结构来定义。对于 24 位真彩色图像就不使用彩色表(同样也包括 16 位、和 32 位位图) ,因为位图中的 RGB值就代表了每个象素的颜色。彩色表中的颜色按颜色的重要性排序,这可以辅助显示驱动程序为不能显示足够多颜色数的显示设备显示彩色图像。RGBQUAD 结构描述由 R、G、B 相对强度组成的颜色,定义如下:

45

五邑大学本科毕业设计

typedef struct tagRGBQUAD { /* rgbq */ BYTE rgbBlue; BYTE rgbGreen; BYTE rgbRed; BYTE rgbReserved; } RGBQUAD;

位图彩色表定义如表3-19所示。

表3-19 位图色彩表定义

4、RGB颜色阵列

在 Windows 下RGB 颜色阵列存储的格式其实是BGR。也就是说,对于 24位的 RGB 位图像素数据格式是:

对于 32 位的RGB 位图像素数据格式是:

透明通道也称 Alpha 通道,该值是该像素点的透明属性,取值在 0(全透明)到 255(不透明)之间。对于 24 位的图像来说,因为没有 Alpha 通道,即整个图像都不透明。紧跟在彩色表之后的是图像数据字节阵列。 图像的每一扫描行由表示图像象素的连续的字节组成,每一行的字节数取决于图像的颜色数目和用象素表示的图像宽度。扫描行是由底向上存储的,这就是说,阵列中的第一个字节表示位图左下角的象素,而最后一个字节表示位图右上角的象素。

3.6.4.2基于verilog的 BMP解码设计

虽然 BMP 格式内的数据本身就是 RGB格式的,但是由于它存储的顺序是从图片的左下角开始右上角结束,而且对于如 8bit 的位图还有色彩表的概念,而送到液晶显示器一端的数据一般是以从左到右、从上到下的顺序扫描数据的,所以 BMP 格式的解码还是有点文章可作的。

SD 卡控制模块直接寻址到某一幅图片后将其发送到数据流控制模块,同时会有一个

46

五邑大学本科毕业设计

图片数据有效标志位 wrf_wrreq 做指示,wrf_wrreq只在每次发送的数据有效后保持一个时钟周期高脉冲,从而让数据流控制模块对该数据做相应处理。因此一副分辨率为 800*600 的8bit 位宽图片共有 481078 字节(54个字节信息头数据、1024 字节色彩表数据和 480000 字节图像数据)的数据,在读取 SD 卡过程中,wrf_wrreq 也就会产生对应的 481078 个单时钟周期的高脉冲。

图片数据处理的大体流向如图3-37所示。由于该设计中只处理 BMP 格式图片,所以对文件信息头和位图信息头就不做判断处理,色彩表数据存储到 FPGA 内部 IP core 例化的一个 RAM(rgb_ram)中,将 1024 字节的色彩表译码为 256 字节的不同色彩数据。图像数据被送入 FIFO(wrfifo)中,图像也是数据从 FIFO(rdfifo)中送出,这两个 FIFO 和 SDRAM接口。从 rdfifo 出来的图像数据再通过 rgb_ram译码后送到后端的 VGA驱动模块显示。

图3-37 图片数据流示意图

VGA显示驱动模块的接口定义与描述分别如表3-20所示。

表3-20 VGA显示驱动模块接口定义

47

五邑大学本科毕业设计

3.7 本章小结

本章具体分析了整个毕业设计的实现方案,把数码相框分成五个模块来设计,包括:系统时钟与复位模块、SD卡相关模块、数据流控制模块、SDRAM控制器模块、VGA 显示驱动模块。每个模块都明确分析了设计思路,将各个模块的代码调试好后,再把五个模块代码综合起来,烧录到SF-EP1C开发板中,插入带有10张图片的SD卡,最后就可以用液晶显示器将毕业设计结果实现出来。

48

五邑大学本科毕业设计

总 结

之所以选择 DIY 数码相框,并不是期望可以做个多么像样的产品出来,毕竟消费类数码产品的市场竞争是很激烈的,任何一个成熟产品的成本都会被剥削到最低。市场上的数码相框一般是以带液晶驱动外设的 ARM 处理器为主实现上述的所有功能,而这个工程恰恰相反,所有的功能也都会使用 FPGA来完成。但是话说回来,FPGA 是硬件,虽然有很多硬件固有特性所具备的优势,但是其设计灵活性方面还是和软件无法媲美的,所以这个工程项目最终实现的数码相框的功能会打一些折扣。

49

五邑大学本科毕业设计

参考文献

1 阎石.数字电子技术基础[M].第五版.北京:高等教育出版社,2006

2 王金明.数字系统设计与Verilog HDL[M].第三版.北京:电子工业出版社,2009 3 夏宇闻. Verilog数字系统设计教程[M].第二版.北京:北京航天航空大学出版社,2008 4 Samir Palnitkar.Verilog HDL 数字设计与综合[M].2版.夏宇闻,胡燕详,刁岚松,等译.北京:电子工业出版社,2004

5 Clive“Max”Maxfiled.FPGA设计指南:器件、工具和流程[M].杜生海,邢闻,译.北京:人发邮电出版社,2007

6 吴继华,王诚.设计与验证Verilog HDL[M].北京:人民邮电出版社,2006

7 Jamick Bergeron.编写测试平台[M].张春,陈新凯,李晓雯,等译.北京:电子工业出版社,2006

8 吴厚航。深入浅出玩转FPGA [M].北京:北京航天航空大学出版社,2010

9 王诚,吴华,范丽珍,等. Altera FPGA/CPLD设计(基础篇)[M]. 北京:人民邮电出版社,2005

50

五邑大学本科毕业设计

致 谢

在本次毕业设计中,我得到了张歆奕老师的精心指导,不管是从开始定方向还是在查资料准备的过程中,一直都耐心地给予我指导和意见,使我在总结学业及学业设计方面都有了较大提高;同时也显示了老师高度的敬业精神和责任感。在此,我对张歆奕老师表示诚挚的感谢以及真心的祝福。

光阴似箭,大学四年的时光在转眼之间就要过去了,在这大学四年中,我得到了老师们对我的谆谆教诲和帮助。他们严谨的治学,优良的作风和敬业的态度,为我们树立了为人师表的典范。在此,我对所有的信息学院的老师表示感谢,祝你们身体健康,工作顺利!

同时也感谢我的室友们,从遥远的家来到这个陌生的城市里,是你们和我共同维系着彼此之间兄弟般的感情,维系着寝室那份家的融洽。四年了,仿佛就在昨天。四年里,我们没有红过脸,没有吵过嘴,没有发生上大学前所担心的任何不开心的事情。只是今后大家就难得再聚在一起吃顿饭了吧,没关系,各奔前程,大家珍重。

在此,向所有关心和帮助过我的老师、同学、朋友(特别是网上朋友)以及家人献上我最衷心的感谢和诚挚的祝福!是他们深切的鼓励和鞭策使我一直保持着前进的动力和希望!

钟华辉 2011年6月

51

因篇幅问题不能全部显示,请点此查看更多更全内容

Top