1、 电子信息工程专业综合设计(报告)(课 程 设 计)题目 基于 FPGA 的 VGA 图像显示设计 (图像旋转、放大、单步步进移动和屏保移动) 二级学院 电子信息与自动化学院 专 业 电子信息工程 班 级 学生姓名 学 号 指导教师 时 间 2011.12.26-2012.01.13 基于 FPGA 的 VGA 图像显示设计及应用摘 要:VGA( 视频图形阵列 )作为一种标准的显示接口得到广泛的应用。本文依据 VGA 显示原理,介绍了利用 FPGA 实现对 VGA 图形控制器 VHDL 设计方法。详细描述了各硬件模块的工作原理及实现途径,并给出了软件设计思路及部分代码。关键词:VGA;FPGA
2、;VHDL0. 引言随着可编程逻辑器件的不断发展及其价格的不断下降,EDA 开发软件的不断完善,可编程逻辑设计的应用优势逐渐显示出来, 特别是大规模可编程器件。而 FPGA 具有功能强大,开发过程投资小、周期短等特点,成为当今硬件设计的首选方式之一。VGA(视频图形阵列)作为一种标准的显示接口得到广泛地应用。利用 FPGA 芯片和 EDA 设计方法,可以灵活地根据用户需求,设计出针对性强的 VGA 显示控制器,不仅降低了生产成本也可以快速地对产品进行升级换代。 本文设计采用 Quartus II 9.0 软件工具,并以 Altera 公司的 Cyclone 系列 FPGA 的器件 EP1C12
3、F324C8 为主实现硬件平台的设计。1 方案设计及工作原理1.1 方案设计采用模块化设计方法,我们对 VGA 图形控制器按功能进行层次划分。本设计的 VGA 控制器主要由以下模块组成:VGA 时序控制模块、ROM 内存地址控制模块、RO 内存模块、按键扫描控制模块。如图 1 所示。VGA 时序控制模块ROM 内存地址控制模块 ROM按键扫描控制模块50MHz5Hzaddrdata首坐标 xx、yyVGA接口RGBHS、VSD/ACRT图 1.方案模块框图1.2 工作原理根据 VGA 的显示协议,可以选择不同的显示分辨率。本设计选择的是800*600 的分辨率。根据相应协议,在“VGA 时序控
4、制模块”对行扫描信号 HS和场扫描信号 VS 进行相应的时序控制(具体控制详细信息见“VGA 驱动原理”资料文档) 。“ROM 内存地址控制模块”根据“按键扫描控制模块”获得的图片显示首坐标 xx、yy 信息和“VGA 时序控制模块”传送过来的 hcnt(列计数器值)、vcnt(行计数器值)及相关控制信号计算出正确的内存地址,从 rom 中取出所需要的像素点的三基色数据。本设计的功能实现包括:图像旋转、放大、单步步进移动和屏保移动功能。其中图像的旋转运用了矩阵的转置原理,通过对图像的内存存储地址矩阵进行转置运算获得图像 90旋转的效果。图像的放大是通过将包括原像素点在内,相邻的 4 个点填写相
5、同的颜色来实现的。2 模块设计及仿真2.1 VGA 时序控制模块VGA 时序控制模块是整个显示控制器的关键部分,其实质就是完成 VGA 显示卡的功能。主要作用就是在一定的工作频率下,产生准确的时序关系(VS垂直同步信号,HS水平同步信号,消隐信号之间的关系) 。及其在准确的时序下对 ROM 存储器数据进行读取。 其中产生准确的时序关系为此模块重点,在 VGA 显示过程中,完成一行扫描所需要的时间称为水平扫描时间,完成一帧(一屏)扫描所需要的时间称为垂直扫描时间。每扫描完一行用行同步信号进行同步;扫描完所有行后用场同步信号进行同步。本文设计采用的是 80060075Hz 模式。依据时序标准,每显
6、示行包含 1056 点,其中 800 点为有效显示区,256 点为消隐区,每行的行同步脉冲低电平宽度为 80 个像素点;同理每场有 625 行,有效行为 600 行,其中场同步脉冲低电平宽度为 3 行。其行、场时序如表 1 ,时序图见图2。表 1 行扫描、场扫描时序Horizontal(in Pixels) Vertical(in lines)Format Pixel Clock MHzActiveVideoFront PorchSync PulseBack PorchActive VideoFront PorchSync PulseBack Porch800,600,75Hz49.50 80
7、0 16 80 160 600 1 3 21依照这个标准,正好与开发板 EP1C12 外部晶振频率 50MHz 相近,可以直接引用外部晶振时钟作为其驱动时钟(只要所用时钟和协议要求的时钟相差不大,不会影响显示效果,最多就是显示的刷新频率不是真正等于 75Hz 而已) 。图 2 行 HS、场 VS 时序图2.2 ROM 内存地址控制模块整个显示思路是在 800*600 分辨率的显示器上开辟一 256*64 的显示区域来显示图片,因为显示的图片的大小为 256*64。在此区域以外显示指定颜色,例如黑色、蓝色等,作为一个背景色显示。在本模块中,通过在对 ROM 内存地址的控制,实现了图片的旋转和一倍
8、放大功能。以下通过一段关键代码详细讲解其实现原理。(1) 首先分析无旋转状态下的 romaddr_control 的计算原理:romaddr_control 0); end if; end if; end process; -this is Vertical counter process(clk) begin if (rising_edge(clk) then if (hcnt = 800+8 ) then if(vcnt 0); end if; end if; end if; end process; -this is hs pulse process(clk) begin if (ris
9、ing_edge(clk) then if(hcnt=800+8+8)and (hcnt= 600+0+1) and (vcnt if(fangda_temp = 0) thenromaddr_control if(fangda_temp = 0) thenromaddr_control if(fangda_temp = 0) thenromaddr_control if(fangda_temp = 0) thenromaddr_control yy+wide) then qout_tempxx)and(hcnt yy+long) then qout_temp=xx)and(hcnt=xx + wide) thenqout_temp=qin;-input logo.hexelseqout_temp=“00000111“;-cnt(31 downto 24);end if;end if;end process;end one;(4) 按键控制模块(图象显示顶层程序)LIBRARY ieee; -图象显示顶层程序 USE ieee.std_logic_1164.all;