基于FPGA的VGA图像显示
- 格式:doc
- 大小:43.50 KB
- 文档页数:10
电子信息工程专业综合设计(报告)(课程设计)题目基于FPGA的VGA图形显示二级学院电气与电子工程学院专业电子信息工程班级学生学号同组指导教师时间基于FPGA的VGA图形显示摘要:本次的题目是基于FPGA的VGA图形显示,实现VGA图像显示与控制。
本文介绍的主要容围绕着显示特定图片,且图片可受控制的相关原理与方法展开。
根据VGA显示原理,利用VHDL 作为逻辑描述手段,设计了一种基于现场可编程器件FPGA的VGA接口控制器。
实现VGA图像显示控制器是通过Altera公司的QuartusII软件环境下对VGA模块的设计和顶层逻辑框图设计。
FPGA的嵌入式系统中能代替VGA的专用显示芯片,节约硬件成本,节省计算机处理时间,加快数据处理速度并具有显示面积大,色彩丰富、承载信息量大、接口简单等优点。
除此以外FPGA 芯片和EDA设计方法的使用,可根据用户的需求,为设计提供了有针对性的VGA显示控制器,可不需要依靠计算机,它可以大大降低成本,并可以满足生产实践中不断改变的需要。
关键字:FPGA VGA 图像控制器一、前言本次课程设计主要是通过Altera公司的QuartusII软件环境下对VGA模块的设计和顶层逻辑框图设计。
VGA是IBM于1987年提出的一个使用模拟信号的电脑显示标准。
在性能上,VGA 将16色模式的分辨率提高到了640×480,同时VGA新提供了一种具有320×200分辨率、256种颜色的图形模式,且所显示的每一种颜色都可从262144(18位)种颜色中选择,VGA的这种色彩显示能力对微机图形/图象软件的发展起到了很大的促进作用先后分别经历了EGA, EGA, VGA, SVGA, XGA, SXGA, UXGA, QXGA, WQXGA, QSXGA, WQSXGA, QUXGA, WQUXGA, 1080P。
目前大多数计算机与外部显示设备之间都是通过模拟VGA接口连接,计算机部以数字方式生成的显示图像信息,被显卡中的数字/模拟转换器转变为R,G,B三原色信号和行、场同步信号,信号通过电缆传输到显示设备中。
论文摘要:本论文依据VGA接口原理采用了Verilog HDL语言对Altera的Cyclone系列的FPGA进行了设计,通过MATLAB 二值化得到图片颜色的数据,将得到的数据存储到ROM中,然后读取ROM中的数据直接送到显示器,节省了计算机的处理过程,加快了数据的处理速度,节约了硬件成本。
此方案可以广泛应用于各种仪器,数字视频系统、高分辨率的彩色图片图像处理、视频信号再现等。
论文关键词:现场可编程门阵列,图像控制器,只读存储引言VGA接口显示器是计算机系统以及智能仪器中重要的显示终端设备。
标准的VGA接口需要提供以下几组基本的信号:行同步信号Hsync场同步信号Vsync以及红黄蓝3路模拟信号。
因此要使数字图像信息在VGA接口显示器正确、完整地显示,就涉及到了时序的构建和数字图像信息的模拟化两方面。
如果接口前端无可供利用的时序信息,那么就可参照有关标准来构造时序,这可利用可编程器件很方便地实现;另外由于VGA是一个模拟的接口标准,因此数字图像信息模拟化可用视频DA转换器来实现。
VGA标准是当前最常用的视频显示标准,还包括SVGA、XVGA等子标准。
本文主要以640×480,60Hz下VGA显示标准为例,实现一个满足多方面需求的VGA显示终端接口。
设计可应用于图像处理、视频信号再现、数据可视化分析等方面,实现方法和器件的选取以及设计应用列举都具有典型的代表意义。
理论分析VGA显示接口的硬件设计和原理(1)基本原理说明这次系统设计使用的显示器是满足VGA标准的常用的彩色显示器,由CRT(阴极射线管)构成,彩色由G、R、B(绿:Green,红:Red,蓝:Blue)三基色组成。
显示则用逐行扫描的方式解决,阴极射线枪发出电子束打在涂有荧光粉的荧光屏上,产生GRB三基色,合成一个彩色像素。
硬件选用了AnalogDevice公司的ADV7123。
ADV7123由三个10位高速DAC 组成,最高时钟速率为240MHZ,即可以达到最高240MS/s的数据吞吐率。
基于FPGA的VGA显示(后附VHDL代码)整个VGA的时序操作很简单,就是形成一个具有一定占空比的电平周期。
只是整个VGA的操作涉及到一些专有名词,理解上比较困难,一旦明白了这些是什么意思后,操作即将变得很简单。
VGA工作流程:常见的彩色显示器,一般由CRT (阴极射线管)构成,彩色是由R、G、B(红、绿、蓝)三基色组成,CRT用逐行扫描或隔行扫描的方式实现图像显示,由VGA控制模块产生的水平同步信号和垂直同步信号控制阴极射线枪产生的电子束,打在涂有荧光粉的荧光屏上,产生R、G、B三基色,合成一个彩色像素。
扫描从屏幕的左上方开始,由左至右,由上到下,逐行进行扫描,每扫完一行,电子束回到屏幕下一行的起始位置,在回扫期间,CRT对电子束进行消隐,每行结束是用行同步信号HS进行行同步;扫描完所有行,再由场同步信号VS进行场同步,并使扫描回到屏幕的左上方,同时进行场消隐,预备下一场的扫描。
行同步信号HS 和场同步信号VS是两个重要的信号。
注意点:什么时候消隐?为什么要消隐?当一行扫描完毕后然后电子枪又转到下一行的这段时间或是扫描完所有的行后电子枪回到第一行的这段时间,这两段时间都要消隐。
在消隐的时间内,数据是无效的。
这样就保证电子枪的回扫的个动作不干扰显示,因为回扫这个动作是很频繁的,若在这个时间段内数据有效,那么就回在显示屏上出现电子枪回扫的轨迹。
消隐的时候我们干什么?消隐这个动作是显示屏(CRT)执行的,我们在编程时只要注意有这么个东西就行。
同步信号(包括HS和VS)是什么?这个就相当于一个数据起始信号,表明数据马上就要开始了。
如果撇开具体的设备,那么这个信号和AD、DA中常用的Sync(同步)、CS(片选)信号相当。
该信号一般为负电平,但对于有的显示器可不关心该信号的极性,因为它内部可自动转换正负逻辑。
对于普通的VGA显示器,需要引出5个信号:R,G,B:三原色;HS:行同步信号;VS:场同步信。
电子线路测试与实验报告基于FPGA的VGA显示实验姓名:专业班级:光电1208学号:U2012一、实验要求功能要求:利用Basys2实验板实现图片在VGA接口显示器上的显示。
基本要求:1)实现240*160以上像素的图片在VGA接口显示器上的显示;2)利用算法实现特定图片在VGA接口显示器上的放大、缩小旋转及其他动作的自动变换。
二、实验具体目标1.首先实现特定图片在显示器上的显示;2.图片自动旋转90度;3.实现图片的放大与缩小,同样通过一个按键实现;4.添加复位键,按下复位键后图片返回最初的状态。
三、实验原理1.VGA的显示原理在基于FPGA的VGA控制中,只需考虑行同步信号(HS),场同步信号(VS),以及红绿蓝三基色(R、G、B)这五个信号,即可实现对VGA显示的控制。
2.对图片的旋转与缩放操作对图片的旋转操作在本质上是对IP核ROM的输入地址addr进行变换的过程。
在这里,假定显示的坐标分别为x_vdn以及y_vdn,由于图片是160*40的,在正常的显示时,addr 与x_vdn以及y_vdn的对应关系应该为:addr=x_vdn+y_vdn*160即依次取像素点,图片正常显示。
要把图片顺时针旋转90度,那么相当于显示的图片是40*160的,重新考虑addr与两个坐标之间映射关系。
容易得到,此时:addr=(39-x_vdn)*160+y_vd对图片的缩放操作对图片的缩放操作则只考虑以下两种变化,即放大一倍,此时图片的大小为320*80;缩小一倍,此时图片的大小为80*20。
对于图片的放大一倍,则要考虑不同的像素点对显示信号的共用(在这里即为m信号)。
由通常的规则,按照顺序,构成一个正方形的每四个相邻的像素点共用一个m信号。
同时,在这里对x_vdn以及y_vdn的最后一位判断,并且形成不同的映射规则。
具体的映射规则在源代码中给出。
对于图片的缩小,则相对简单的多。
此时的映射关系为:addr=y_vdn*320+x_vdn*2;3.工程结构与解读如图,下图为系统的结构框图。
页眉内容课程设计开课学期:第六学期课程名称:FPGA课程设计学院:专业:班级:学号:姓名:任课教师:2015 年7 月20日基于FPGA的VGA显示控制器设计一、设计方案1.设计的主要内容此设计要求实现某一分辨率下(如640*480@60Hz)的VGA显示驱动,能简单显示彩条和图像等。
能够熟悉VGA接口协议、工作时序及VGA工作原理,并计算出合适的时序,对原始时钟进行分频处理以获取符合时序要求的各率,此外须要显示的图像等可存储于外部存储器,运行时,从外部存储器读取显示数据。
将图像控制模块分为这样几部分;二分频电路、地址发生器、VGA时序控制模块、图像数据存储器读出模块.如图1-1所示:图1-1VGA显示控制系统框图2.设计原理显示控制器是一个较大的数字系统,采用模块化设计原则、借鉴自顶向下的程序设计思想,进行功能分离并按层次设计。
利用VHDL硬件描述语言对每个功能模块进行描述,并逐一对每个功能模块进行编译仿真,使顶层VGA显示控制器的模块实体仿真综合得以顺利通过。
其中二分频把50MHZ实在频率分成25Mhz并提供给其它模块作为时钟;VGA时序控制模块用于产生640X480显示范围,并控制显示范围和消隐范围以及产生水平同步时序信号HS和垂直同步时序信号VS的值;存储器读出模块提供给SRAM地址并按地址读出八位数据(灰度值Y),然后得到R、G、B的值(若Y>中间值,则R=G=B=1;否则R=G=B=0),并把R、G、B的值通过VGA接口传送给VRT显示器[9]。
地址发生器接收所要显示的数据读取控制信号,产生与图像数据ROM模块对应得地址,根据VGA显示的像素分布,确定读取对应数据的地址,由于所显示的图形每行需256个像素,而ROM 中每个地址存储的数据时64位,故每4个地址取出的数据用于一行的显示。
VGA显示控制模块:主要分为时序信号和数据颜色的控制,imgrom模块即图像数据ROM模块,在这一模块中需要解决的是图像数据BMP位图文件的来源及转换成HEX文件,利用Image2lcd 对本次设计图片处理得到BMP文件,最终在QuartusII得到HEX文件,在已设置LPM_ROM 进行加载图像数据。
基于FPGA实现VGA的彩色图片显示
0 引言
视频图形阵列显示接口是微机系统使用的一种通用显示接口,广泛应用于智能控制系统中,作为系统的显示终端。
对于由嵌入式微处理器构成的
图像处理系统来说,采用VGA显示输出具有兼容性强、显示内容丰富的优势。
同时,VGA显示接口具有结构简单、性能可靠、兼容性强、时序容易控
制的特点。
因此,结合FPGA的VGA图像控制器在嵌入式的图像处理系统中有广泛的应用前景。
目前大多数计算机与外部显示设备之间都是通过模拟VGA接口连接,计算机内部以数字方式生成的显示图像信息,被显卡中的数字/模拟转换器转
变为R、G、B三原色信号和行场同步信号,信号通过电缆传输到显示设备中。
1 VGA显示
常见的VGA接口的彩色显示器,一般由cRT(阴极射线管)构成,
色彩由R、G、B(红:Red,绿:Green,蓝:Blue三基色组成。
显示采用逐。
电子线路测试与实验报告基于FPGA的VGA显示实验姓名:专业班级:光电1208学号:U2012一、实验要求功能要求:利用Basys2实验板实现图片在VGA接口显示器上的显示。
基本要求:1)实现240*160以上像素的图片在VGA接口显示器上的显示;2)利用算法实现特定图片在VGA接口显示器上的放大、缩小旋转及其他动作的自动变换。
二、实验具体目标1.首先实现特定图片在显示器上的显示;2.图片自动旋转90度;3.实现图片的放大与缩小,同样通过一个按键实现;4.添加复位键,按下复位键后图片返回最初的状态。
三、实验原理1.VGA的显示原理在基于FPGA的VGA控制中,只需考虑行同步信号(HS),场同步信号(VS),以及红绿蓝三基色(R、G、B)这五个信号,即可实现对VGA显示的控制。
2.对图片的旋转与缩放操作对图片的旋转操作在本质上是对IP核ROM的输入地址addr进行变换的过程。
在这里,假定显示的坐标分别为x_vdn以及y_vdn,由于图片是160*40的,在正常的显示时,addr与x_vdn以及y_vdn的对应关系应该为:addr=x_vdn+y_vdn*160即依次取像素点,图片正常显示。
要把图片顺时针旋转90度,那么相当于显示的图片是40*160的,重新考虑addr与两个坐标之间映射关系。
容易得到,此时:addr=(39-x_vdn)*160+y_vd对图片的缩放操作对图片的缩放操作则只考虑以下两种变化,即放大一倍,此时图片的大小为320*80;缩小一倍,此时图片的大小为80*20。
对于图片的放大一倍,则要考虑不同的像素点对显示信号的共用(在这里即为m信号)。
由通常的规则,按照顺序,构成一个正方形的每四个相邻的像素点共用一个m信号。
同时,在这里对x_vdn以及y_vdn的最后一位判断,并且形成不同的映射规则。
具体的映射规则在源代码中给出。
对于图片的缩小,则相对简单的多。
此时的映射关系为:addr=y_vdn*320+x_vdn*2;3.工程结构与解读如图,下图为系统的结构框图。
基于FPGA的VGA图像显示系统的设计杜宗展;王振河;冯迎春【期刊名称】《现代电子技术》【年(卷),期】2015(38)16【摘要】As a standard display interface,VGA(video graphics array)has been widely used. According to the principles of VGA and FPGA(field programmable gate array),the designed VGA interface based on FPGA can send the data to the dis-play directly,and grayscale of the output image was added to this design. Compared to the traditional design,there is no com-puter processing procedure in the design,which can save the expense of hardware and enhance the speed of data processing. It is widely used to the domain of video display.%VGA(视频图形阵列)是一种标准的显示接口,被广泛应用.根据VGA,FPGA(现场可编程门阵列)的作用原理,设计的基于FPGA的VGA 接口可以直接将数据送至显示器,同时增添了关于输出图像灰度等级的设计.与传统设计相比,该设计没有计算机的处理过程,可节省硬件成本,加快数据处理速度,被广泛应用到视频显示领域.【总页数】5页(P95-99)【作者】杜宗展;王振河;冯迎春【作者单位】山东大学电气工程学院,山东济南 250061;山东电力集团公司检修公司,山东济南 250061;山东电力集团公司检修公司,山东济南 250061【正文语种】中文【中图分类】TN919-34;TP391.8【相关文献】1.基于FPGA的VGA图像显示系统的设计与实现 [J], 周卓然;徐道连;吕凤飞;付少华2.基于FPGA的VGA图像显示控制的设计和实现 [J], 李云;刘桂华3.基于FPGA的VGA图像显示及控制系统的设计与实现 [J], 李营;吕兆承;陈帅;权循忠4.基于FPGA的VGA图像显示设计 [J], 桂淮濛5.基于FPGA的UART控制VGA图像显示器设计 [J], 李营; 范静静; 权循忠; 吕兆承; 陈帅因版权原因,仅展示原文概要,查看原文内容请购买。
基于FPGA的VGA图像显示控制器设计第1页一.实验简介本实验介绍了一种利用可编程逻辑器件实现VGA图像显示控制的方法,阐述了VGA 图像显示控制器中VGA显像的基本原理以及功能演示,利用可编程器件FPGA设计VGA 图像显示控制的VHDL设计方案,并在Altera公司的QuartusII软件环境下完成VGA 模块的设计。
而且给出了VGA模块的设计思路和顶层逻辑框图。
最终实现VGA图像显示控制器,VGA图像控制器是一个较大的数字系统,传统的图像显示的方法是在图像数据传输到计算机,并通过显示屏显示出在传输过程中,将图像数据的CPU需要不断的信号控制,所以造成CPU的资源浪费,系统还需要依靠计算机,从而减少了系统的灵活性。
FPGA芯片和EDA设计方法的使用,可根据用户的需求,为设计提供了有针对性的VGA显示控制器,不需要依靠计算机,它可以大大降低成本,并可以满足生产实践中不断改变的需要,产品的升级换代和方便迅速。
二.任务要求2.1课题要求设计一个VGA 图像显示控制器。
1.显示模式为640×480×60Hz 模式;2.用拨码开关控制R、G、B(每个2 位),使显示器可以显示64 种纯色;3.在显示器上显示横向彩条信号(至少6 种颜色);4.在显示器上显示纵向彩条信号(至少8 种颜色);5.在显示器上显示自行设定的图形、图像等。
2.2设计目标根据课题要求,实验中将目标进行了细化,叙述如下:1.设定4种显示模式:横彩模式、纵彩模式、纯色模式、用户模式;第2页2.拨码开关最低两位SW1~SW0控制4种模式的切换;3.拨码开关高6位SW7~SW2每两位分别控制RGB显示64种纯色;4.横向和纵向彩条均设置为8种内置的颜色;5.用户模式中分3种子模式:1)子模式1是沿固定轨迹运动模式,固定图形沿水平方向运动,行运动到边界后折回到下一行继续水平运动;2)子模式2是反弹球模式,固定图形在矩形屏幕做内直线运动,到边界后沿反射角方向反弹,周而复始;3)子模式3是受控运动模式,使用上下左右4个按键控制固定图形在屏幕内的运动方向;4)子模式间的切换由一个单独的按键进行控制,按键按下后顺序切换子模式。
题目基于FPGA的VGA图像汉字显示及PS/2键盘控制设计与应用1.方案设计及工作原理1.1 VGA模块方案设计采用模块化设计方法,我们对VGA 图形控制器按功能进行层次划分。
本设计的VGA控制器主要由以下模块组成:VGA 时序控制模块、ROM 内存地址控制模块、ROM内存模块、按键扫描控制模块。
如图 1 所示。
图1.方案模块框图1.2工作原理VGA时序控制模块ROM内存地址控制模块ROM 按键扫描控制模块50MHz 5Hz addr data 首坐标xx、yy VGA 接口RGB HS、VS D/A CRT 根据VGA的显示协议,可以选择不同的显示分辨率。
本设计选择的是800*600的分辨率。
根据相应协议,在“VGA时序控制模块”对行扫描信号HS和场扫描信号VS进行相应的时序控制(具体控制详细信息见“VGA驱动原理”资料文档)。
“ROM内存地址控制模块”根据“按键扫描控制模块”获得的图片显示首坐标xx、yy信息和“VGA时序控制模块”传送过来的ht(列计数器值)、vt(行计数器值)及相关控制信号计算出正确的内存地址,从rom中取出所需要的像素点的三基色数据。
1.3 PS/2接口电路的工作原理PS/2协议和接口最初是IBM公司开发并推广使用的一种应用于键盘/鼠标的协议和接口,PS/2键盘按键接口是6芯的插头与PC机的键盘相连接,插头、插座定义如图所示。
键盘/鼠标接口的数据线和时钟线采用集电极开路结构,平时都是高电平当这些设备等待发送数据时,它首先检查clock是否为高。
如果为低,则认为PC抑制了通讯,此时它缓冲数据直到获得总线的控制权。
如果clock为高电平,设备则开始向PC发送数据。
一般都是由ps2设备产生时钟信号。
发送按帧格式。
数据位在clock为高电平时准备好,在clock下降沿被PC读入。
图3所示是按下Q 键的时序图“Q”键的扫描码从键盘发送到计算机(通道A是时钟信号,通道B 是数据信号)。
基于 FPGA 的 VGA 图像显示系统的设计与实现周卓然,徐道连,吕凤飞,付少华( 重庆大学光电技术及系统教育部重点实验室,重庆市 400030)摘要: 文中依据 VGA 接口的设计原理,提出一种基于 DE2 - 70 的 VGA 图像显示控制系统,与传统的 VGA 控制系统相比,由于 FPGA 体积小,可重构,因此很适合小型便携式系统设备的设计,给出了 QuartusⅡ9.1 的仿真结果。
在硬件平台上实现了 VGA 的汉字显示和彩条信号的显示。
实验结果表明: 由 FPGA 作为处理器来控制 VGA 图像的和汉字的显示,能够达到预期的效果,克服传统 VGA 控制系统的弊端。
关键词: VGA; 汉字; FPGA; QuartusⅡ9. 10. 引言VGA 汉字显示系统的应用范围越来越广泛,但传统的VGA 字符显示方案主要是通过 VGA 专用芯片来控制 VGA 接口来显示字符信息的,但 FPGA 在大规模嵌入式系统设计中优势明显,如管脚资源丰富,运行速度快,可以实现大规模的系统设计,并且使用芯片更少,可以降低成本,有利于小型化。
同时由于现代 EDA 软件的大量应用,能够方便设计人员缩短设计周期,更方便地实现仿真。
文中研制了一种基于 FPGA 的 VGA 图像显示控制系统,在 VGA 显示器上可以显示多种图像,可以代替传统的 VGA 专用芯片的功能,具有很好的应用前景。
1. VGA 显示原理1.1 VGA 显示接口计算机显示器有许多的接口标准,VGA 是一种计算机视频传输标准,目前绝大部分的计算机与外设之间都带有 VGA 显示接口。
VGA 显示接口结构简单,性能较稳定,兼容性很强,时序易于实现在图像处理领域具有广泛的应用前景。
1.2 VGA 接口定义和时序控制VGA 接口上面共有 15 条线,分为 3 组,分别用来处理输入模拟信号和行同步线( HS)和场同步线( VS),其中行同步线和场同步线联合起来控制VGA的显示时序。
`timescale 1ns / 1ps/////////////////////////////////////////////////////////////////// /////////////// Company:// Engineer://// Create Date:// Design Name:// Module Name:// Project Name:// Target Device:// Tool versions:// Description://// Dependencies://// Revision:// Revision 0.01 ‐ File Created// Additional Comments:///////////////////////////////////////////////////////////////////// /////////////module vga_dis(clk,rst_n,hsync,vsync,vga_r,vga_g,vga_b);input clk; //50MHzinput rst_n; //低电平复位output hsync; //行同步信号output vsync; //场同步信号output vga_r;output vga_g;output vga_b;//‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐reg[10:0] x_cnt; //行坐标reg[9:0] y_cnt; //列坐标always @ (posedge clk or negedge rst_n)if(!rst_n) x_cnt <= 11'd0;else if(x_cnt == 11'd1039) x_cnt <= 11'd0; else x_cnt <= x_cnt+1'b1;always @ (posedge clk or negedge rst_n)if(!rst_n) y_cnt <= 10'd0;else if(y_cnt == 10'd665) y_cnt <= 10'd0;else if(x_cnt == 11'd1039) y_cnt <= y_cnt+1'b1;//‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐wire valid; //有效显示区标志assign valid = (x_cnt >= 11'd187) && (x_cnt < 11'd987)&& (y_cnt >= 10'd31) && (y_cnt < 10'd631);wire[9:0] xpos,ypos; //有效显示区坐标assign xpos = x_cnt‐11'd187;assign ypos = y_cnt‐10'd31;//‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐reg hsync_r,vsync_r; //同步信号产生always @ (posedge clk or negedge rst_n)if(!rst_n) hsync_r <= 1'b1;else if(x_cnt == 11'd0) hsync_r <= 1'b0; //产生hsync信号 else if(x_cnt == 11'd120) hsync_r <= 1'b1;always @ (posedge clk or negedge rst_n)if(!rst_n) vsync_r <= 1'b1;else if(y_cnt == 10'd0) vsync_r <= 1'b0; //产生vsync信号else if(y_cnt == 10'd6) vsync_r <= 1'b1;assign hsync = hsync_r;assign vsync = vsync_r;//‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐//显示一个矩形框wire a_dis,b_dis,c_dis,d_dis; //矩形框显示区域定位assign a_dis = ( (xpos>=200) && (xpos<=220) )&& ( (ypos>=140) && (ypos<=460) );assign b_dis = ( (xpos>=580) && (xpos<=600) )&& ( (ypos>=140) && (ypos<=460) );assign c_dis = ( (xpos>=220) && (xpos<=580) )&& ( (ypos>140) && (ypos<=160) );assign d_dis = ( (xpos>=220) && (xpos<=580) )&& ( (ypos>=440) && (ypos<=460) );//显示一个小矩形wire e_rdy; //矩形的显示有效矩形区域assign e_rdy = ( (xpos>=385) && (xpos<=415) )&& ( (ypos>=285) && (ypos<=315) );//‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐//r,g,b控制液晶屏颜色显示,背景显示蓝色,矩形框显示红蓝色assign vga_r = valid ? e_rdy : 1'b0;assign vga_g = valid ? (a_dis | b_dis | c_dis | d_dis) : 1'b0; assign vga_b = valid ? ~(a_dis | b_dis | c_dis | d_dis) : 1'b0;endmodule。
——基于FPGA的VGA显示姓名:王青鹏学号:200661175班级:电子0604日期:200910201.实验目的 (3)2.实验要求 (3)3.实验原理 (3)3.1VGA时序信号 (3)3.2VGA显示时序图 (4)3.3关键参数 (5)3.4VGA显示工作过程 (5)3.5整体设计思路及过程 (6)3.6管脚分配及下载 (15)4.实验心得体会 (16)FPGA的VGA显示一.实验目的1.熟悉和掌握时序控制电路的设计方法。
2.了解VGA显示器的工作时序及其控制电路的工作原理。
3.培养分析系统、进行模块设计及独立解决问题的能力。
二.实验要求1.设计VGA显示器的控制电路,使之控制显示器,完成相应的显示功能。
2.使用一个按钮mod(低有效),使VGA显示器在3种(或4种)不同的显示模式间切换。
使用一个按钮reset,将控制器恢复模式00。
模式00:将屏幕均分,从左到右,依次显示八种不同的颜色。
模式01:将屏幕均分,从上到下,依次显示八种不同的颜色。
模式10:将屏幕均分为8*8棋盘格。
模式11:复位模式,屏幕全黑。
3.利用GW48实验开发系统实现设计的编程下载.三.实验原理3.1VGA时序信号H_SYNC:水平同步信号(负脉冲),每个水平扫描周期显示器刷新V_SYNC:垂直同步信号(负脉冲),每个垂直扫描周期显示器刷新一帧;RGB[2..0]:颜色信号,R——红色信号;G——绿色信号;B——蓝色信号。
其对应颜色关系如下表所示。
3.2VGA显示器的时序图垂直刷新循环3.3关键参数1.实验板上的晶振提供全局时钟信号(50MHz),通过分频得到时钟信号clk25M(fclk=25MHz)作为输入时钟。
2.刷新1个像素所需时间Tpixel=1/fclk=40ns;3.刷新一行所需时间Trow=Tpixel*640+guard bands=25.6us+B +C+E=32.2us;4.一个垂直扫描周期内包含480个水平扫描周期,完成一帧的刷新。
正文一,VGA时序标准VGA是一种常用的显示输出接口,采用行场扫描控制结合RGB三色合成原理,输出显示信号。
每个VGA接口为15针接口,分三行排布,每行5针。
如图所示:图1.1 VGA接口15针并未全部使用,有效的信号线共5根,即红绿蓝三基色信号线:R,G,B,每线电压从0V到0.71V变化,表示无色到饱和,依据电平高低,显示颜色的饱和程度。
行同步控制信号,Hsync,控制每行扫描像素的有效和失效。
场同步:Vsync,控制场方向,即整个图像显示过程的时间长度,场同步中的显示部分的时间长度,等于每行扫描时间的总和。
在不同刷新频率下,显示每个像素的时间是不同的,相同刷新频率下,每个像素显示时间是固定的,所以,不同的每个像素写入时间,导致了分辨率的不同。
因为VGA的显示是逐行扫描,每行从左到右扫描,到了行尾,回归到下一行的行头,继续向尾部扫描。
所以,显示原理是逐次写入每行的像素数据,直到整幅图像显示成功为止。
VGA显示的数据是不能锁存的,所以必须一次又一次的连续输入数据,72Hz的刷新率下,一秒钟显示72幅图像,所以,需要连续写入72幅图像,才能达到一秒的显示效果。
所以,VGA显示图像,要反反复复写入图像数据,才能得到持续的显示效果。
图1.2 VGA接口线序VGA显示,无法做到类似于TFT液晶屏的定点写入,VGA是扫描式暂时显示,所以时序显得尤为重要,时序出现失误,图像会出现走形,无法达到准确效果。
而显示的时序控制主要依靠两条数据通道:行同步和场同步,即Hsync和Vsync,其控制了扫描显示的起点和终点,同时控制扫描起点的时间,通过时间的控制,达到确定的显示效果。
具体的控制时序图如下:图1.3 VGA 同步时序VGA显示中,以每个像素写入时间作为FPGA时钟周期,所以每个时钟周期写入一组RGB像素值。
逐行写入,所以每行数据显示的结果,拼凑成一帧图像,72Hz下,每秒显示72帧图像。
由于本设计要求静态显示效果,所以,我们只定义一帧的数据,最后无限循环执行即可。
电子信息工程专业综合设计(报告)(课程设计)题目基于FPGA的VGA图形显示二级学院电气与电子工程学院专业电子信息工程班级学生学号同组指导教师时间基于FPGA的VGA图形显示摘要:本次的题目是基于FPGA的VGA图形显示,实现VGA图像显示与控制。
本文介绍的主要容围绕着显示特定图片,且图片可受控制的相关原理与方法展开。
根据VGA显示原理,利用VHDL 作为逻辑描述手段,设计了一种基于现场可编程器件FPGA的VGA接口控制器。
实现VGA图像显示控制器是通过Altera公司的QuartusII软件环境下对VGA模块的设计和顶层逻辑框图设计。
FPGA的嵌入式系统中能代替VGA的专用显示芯片,节约硬件成本,节省计算机处理时间,加快数据处理速度并具有显示面积大,色彩丰富、承载信息量大、接口简单等优点。
除此以外FPGA 芯片和EDA设计方法的使用,可根据用户的需求,为设计提供了有针对性的VGA显示控制器,可不需要依靠计算机,它可以大大降低成本,并可以满足生产实践中不断改变的需要。
关键字:FPGA VGA 图像控制器一、前言本次课程设计主要是通过Altera公司的QuartusII软件环境下对VGA模块的设计和顶层逻辑框图设计。
VGA是IBM于1987年提出的一个使用模拟信号的电脑显示标准。
在性能上,VGA 将16色模式的分辨率提高到了640×480,同时VGA新提供了一种具有320×200分辨率、256种颜色的图形模式,且所显示的每一种颜色都可从262144(18位)种颜色中选择,VGA的这种色彩显示能力对微机图形/图象软件的发展起到了很大的促进作用先后分别经历了EGA, EGA, VGA, SVGA, XGA, SXGA, UXGA, QXGA, WQXGA, QSXGA, WQSXGA, QUXGA, WQUXGA, 1080P。
目前大多数计算机与外部显示设备之间都是通过模拟VGA接口连接,计算机部以数字方式生成的显示图像信息,被显卡中的数字/模拟转换器转变为R,G,B三原色信号和行、场同步信号,信号通过电缆传输到显示设备中。
基于FPGA的VGA彩条图像显示1. 设计的任务及内容在电子电路领域中,设计自动化工具已经被广大电子工程师所接受,它必将取代人工设计方法并成为主要的设计手段。
目前,Verilog语言已经成为各家EDA工具和集成电路厂商认同和共同推广的标准化硬件描述语言,随着科学技术的迅猛发展,电子工业界经历了巨大的飞跃。
集成电路的设计正朝着速度快、性能高、容量大、体积小和微功耗的方向发展,这种发展必将导致集成电路的设计规模日益增大。
该实训的设计是用Verilog语言硬件描述语言设计出一个VGA图象显示控制器,用Verilog 硬件描述语言进行编程,把Verilog语言描述的VGA图象显示控制器所需的程序在QuartusⅡ软件环境下进行模拟仿真,以此来验证所设计的结果是否满足设计的要求。
在结果符合要求的情况下把Verilog程序下载到FPGA器件上,利用FPGA器件内部存储器存储所需要的数据,再通过VGA接口输出到显示器上,从而达到设计的要求。
VGA显示器因为其输出信息量大,输出形式多样等特点已经成为现在大多数设计的常用输出设备,FPGA以其结构的优势可以使用很少的资源产生VGA的各种控制信号。
CRT显示器作为一种通用型显示设备,如今已广泛应用于我们的工作和生活中。
与嵌入式系统中常用的显示器件相比,它具有显示面积大、色彩丰富、承载信息量大、接口简单等优点,如果将其应用到嵌入式系统中,可以显著提升产品的视觉效果。
如今随着液晶显示器的出现,越来越多的数字产品开始使用液晶作为显示终端。
但基于VGA标准的显示器仍是目前普及率最高的显示器[1]。
若驱动此类显示器,需要很高的扫面频率,以及极短的处理时间,正是由于这些特点,所以可以用FPGA来实现对VGA显示器的驱动。
本次专业课程设计即选用FPGA 来实现VGA的显示。
随着FPGA的不断发展及其价格的不断下降,FPGA的可编程逻辑设计的应用优势逐渐显现出来。
现在,越来越多的嵌入式系统选择了基于FPGA的设计方案。
基于FPGA的VGA图像显示1、VGA显示原理VGA标准是一种计算机显示标准,最初是由IBM公司在1987 年提出的,分辨率是640*480。
VGA 接口也叫做D_Sub 接口,是显卡上输出模拟信号的接口。
目前大多数计算机与外部显示设备之间都是通过模拟VGA接口连接,计算机内部以数字方式生成的显示图像信息,被显卡中的D/A 转换器转变为R、G、B三原色信号和行、场同步信号,信号通过电缆传输到显示设备中。
常见的彩色显示器一般由阴极射线管(CRT) 构成,彩色由GRB(Green Red Blue) 基色组成。
显示采用逐行扫描的方式解决,阴极射线枪发出电子束打在涂有荧光粉的荧光屏上,产生GRB 基色,合成一个彩色像素。
扫描从屏幕的左上方开始,从左到右,从上到下,逐行扫描,每扫完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT 对电子束进行消隐,每行结束时,用行同步信号进行行同步;扫描完所有行,用场同步信号进行场同步,并使扫描回到屏幕的左上方,同时进行场消隐,并预备进行下一次的扫描。
要实现VGA显示就要解决数据来源、数据存储、时序实现等问题,其中关键还是如何实现VGA时序。
VGA的标准参考显示时序如图1所示。
行时序和帧时序都需要产生同步脉冲(Sync a)、显示后沿(Back porch b)、显示时序段(Display interval c)和显示前沿(Front porch d)四个部分。
2、方案设计由VGA的显示原理可知,该任务的关键是VGA时序控制部分和汉字图形显示部分:(1)VGA时序控制部分,采用FPGA本地50MHz时钟,根据所需时序要求,经Verilog语言编写的计数模块分频而得到,该部分十分重要,如果产生的时序有偏差,那么就会使汉字图形无法显示或显示结果混乱;(2)汉字图形显示部分,有2种方法可以实现:第1 种是在对像素进行行计数、场计数的时候,就把字库信息直接赋值给颜色信号R、G、B,这种方法虽然简单,但是控制很不灵活,需要对汉字的显示像素一一判定对应的位置,容易出现错误,不易修改,所以本次采用的是第2 种方法,第2 种方法是使用FPGA内部的一种资源来存储汉字的字库信息,然后由程序将其提取出来作为显示信号发送到VGA 接口,以实现汉字图形的显示,这样就克服了第一种方法易出错又不易修改的缺点。
在FPGA 中可以作为存储器件的资源主要有块RAM,本次任务就采用块RAM 来存储汉字图形的信息。
块RAM 是FPGA 内部的一种专用的资源,多数是分布在FPGA 边缘,因此叫做块RAM。
目前大多数的FPGA 都有内嵌的块RAM。
块RAM 是一种可同步配置的块,它的使用大大扩展了FPGA 的应用范围和灵活性。
FPGA 内嵌的块RAM 一般可以灵活的配置成单口RAM(single port RAM,SPRAM)、双口RAM (double port RAM,DPRAM)、内容寻址存储器(content addressable memory,CAM)以及先进先出存储器(first in first out,FIFO)等常用的存储结构。
3、VGA显示控制器“VGA显示控制器”接收时序控制信号、行列控制信号,根据显示内容需要产生相应的ROM 数据读取控制信号,发送给ROM地址发生器,用于产生相应的地址数据,并将收到的R、G、B分量的串行数据发送给对应的VGA引脚,用于汉字图形的显示,同时还可以控制显示图形的颜色(共8种)。
4、ROM地址发生器“ROM地址发生器”接收所要显示的数据读取控制信号,产生对应得ROM地址,根据VGA 显示的像素分布,确定读取对应数据的地址,由于所显示的图形每行需256个像素,而ROM 中每个地址存储的数据时64位,故每4个地址取出的数据用于一行的显示。
5、ROM存储器“ROM存储器”为FPGA内部块RAM配置成的单端口ROM,用于存储汉字图形的字模数据,根据ROM地址将相应的显示内容的数据传送给数据并串转换模块。
为了便于控制显示图形和容易编程,现制定显示区域为512行256列,每列为1bit,共为数据为512x256=131072bit,因此ROM的设定应该是:设定WORD为64bit ,则深度为:131072/64=2048=2^12,所以ROM的地址线为12根,建立的ROM与.mif文件。
6、数据并串转换模块因为从ROM中直接读出的数据是64bit的,而用于每一个像素显示的数据需要1bit的串行输出,因此需加入该模块进行将64位的显示数据转换成R、G、B三个分量各自对应的数据串行输出到VGA显示控制器,用于图像的实际显示。
实验程序如下:(此程序运行需要设置ROM,并要生成.mif文件)如有问题可联系QQ:472373532module VGA_DIS(clk,rst,hsync,vsync,r,g,b,ROM_DATA,ROM_ADDR);input clk; //50M时钟input rst; //复位信号output hsync;//行同步信号output vsync;//场同步信号output [10:0] ROM_ADDR;input[63:0] ROM_DATA;//三原色接口信号output r;output g;output b;reg[10:0] x;//行坐标reg[10:0] y;//列坐标always @(posedge clk or negedge rst)beginif(!rst)x<=10'd0;else if(x==11'd1056)x<=10'd0;elsex<=x+1'b1;endalways @(posedge clk or negedge rst)beginif(!rst)y<=10'd0;else if(y==11'd628)y<=10'd0;else if (x==11'd1056)y<=y+1'b1;endwire valid;assign valid = (x>11'd216)&&(x<11'd1016)&&(y>11'd27)&&(y<11'd627); wire [10:0]x_valid,y_valid;assign x_valid=x-11'd216;assign y_valid=y-11'd27;reg hsync_r,vsync_r;always@(posedge clk or negedge rst)if(!rst)beginhsync_r<=1'b0;vsync_r<=1'b0;endelsebeginhsync_r<=(x<=10'd160);vsync_r<=(y<=10'd5);endassign hsync=hsync_r;//行同步信号assign vsync=vsync_r;//场同步信号//--------------------------------------------------// VGA色彩信号产生reg[7:0] m;reg[3:0] X=4'd1 ;//这里X,Y定义了汉字显示的坐标reg[3:0] Y=4'd0;reg flag;//设置标志位用来使不显示汉字以外为通一背景色reg flag1;reg [3:0] temp;wire [3:0] temp1;always @(posedge clk or negedge rst)if(!rst)m<=8'd0;else if(valid&&(x_valid-256*X)<=256&&(x_valid-256*X)>=0)//列变量 beginflag<=1'b1;m<=x_valid[7:0];temp<=m/64;endelse// m<=6'd0;flag<=1'b0;reg[8:0] n;always @(posedge clk or negedge rst)if(!rst)n<=9'd0;else if(valid&&(y_valid-512*Y)<=512&&(y_valid-512*Y)>=0)//行变量beginn<=y_valid[8:0];flag1<=1'b1;endelse// n<=6'd0;flag1<=1'b0;assign temp1=m/64;assign ROM_ADDR=4*n+temp1;assign r=valid ? ~ROM_DATA[6'd63-(m-64*temp1)]&&flag&&flag1 : 1'b0; assign g=valid ? ~ROM_DATA[6'd63-(m-64*temp1)]&&flag&&flag1 : 1'b0; assign b=valid ? ~ROM_DATA[6'd63-(m-64*temp1)]&&flag&&flag1 : 1'b0;//assign r=valid ?d_rec :1'b0;//assign g=valid ?~(u_rec |d_rec) : 1'b0;//assign b=valid ? u_rec : 1'b0;endmoduleQQ:472373532module VGA_DIS(clk,rst,hsync,vsync,r,g,b,ROM_DATA,ROM_ADDR); input clk; //50M时钟input rst; //复位信号output hsync;//行同步信号output vsync;//场同步信号output [10:0] ROM_ADDR;input[63:0] ROM_DATA;//三原色接口信号output r;output g;output b;reg[10:0] x;//行坐标reg[10:0] y;//列坐标always @(posedge clk or negedge rst)beginif(!rst)x<=10'd0;else if(x==11'd1056)x<=10'd0;elsex<=x+1'b1;endalways @(posedge clk or negedge rst)beginif(!rst)y<=10'd0;else if(y==11'd628)y<=10'd0;else if (x==11'd1056)y<=y+1'b1;endwire valid;assign valid = (x>11'd216)&&(x<11'd1016)&&(y>11'd27)&&(y<11'd627); wire [10:0]x_valid,y_valid;assign x_valid=x-11'd216;assign y_valid=y-11'd27;reg hsync_r,vsync_r;always@(posedge clk or negedge rst)if(!rst)beginhsync_r<=1'b0;vsync_r<=1'b0;endelsebeginhsync_r<=(x<=10'd160);vsync_r<=(y<=10'd5);endassign hsync=hsync_r;//行同步信号assign vsync=vsync_r;//场同步信号//--------------------------------------------------// VGA色彩信号产生reg[7:0] m;reg[3:0] X=4'd1 ;//这里X,Y定义了汉字显示的坐标reg[3:0] Y=4'd0;reg flag;//设置标志位用来使不显示汉字以外为通一背景色reg flag1;reg [3:0] temp;wire [3:0] temp1;always @(posedge clk or negedge rst)if(!rst)m<=8'd0;else if(valid&&(x_valid-256*X)<=256&&(x_valid-256*X)>=0)//列变量beginflag<=1'b1;m<=x_valid[7:0];temp<=m/64;endelse// m<=6'd0;flag<=1'b0;reg[8:0] n;always @(posedge clk or negedge rst)if(!rst)n<=9'd0;else if(valid&&(y_valid-512*Y)<=512&&(y_valid-512*Y)>=0)//行变量beginn<=y_valid[8:0];flag1<=1'b1;endelse// n<=6'd0;flag1<=1'b0;assign temp1=m/64;assign ROM_ADDR=4*n+temp1;assign r=valid ? ~ROM_DATA[6'd63-(m-64*temp1)]&&flag&&flag1 : 1'b0; assign g=valid ? ~ROM_DATA[6'd63-(m-64*temp1)]&&flag&&flag1 : 1'b0; assign b=valid ? ~ROM_DATA[6'd63-(m-64*temp1)]&&flag&&flag1 : 1'b0;//assign r=valid ?d_rec :1'b0;//assign g=valid ?~(u_rec |d_rec) : 1'b0;//assign b=valid ? u_rec : 1'b0;endmodule。