基于FPGA的VGA彩条图像显示_第1页
基于FPGA的VGA彩条图像显示_第2页
基于FPGA的VGA彩条图像显示_第3页
基于FPGA的VGA彩条图像显示_第4页
基于FPGA的VGA彩条图像显示_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 基于FPGA的VGA彩条图像显示1.设计的任务及内容在电子电路领域中,设计自动化工具已经被广大电子工程师所接受,它必将取代人工设计方法并成为主要的设计手段。目前,Verilog语言已经成为各家EDA工具和集成电路厂商认同和共同推广的标准化硬件描述语言,随着科学技术的迅猛发展,电子工业界经历了巨大的飞跃。集成电路的设计正朝着速度快、性能高、容量大、体积小和微功耗的方向发展,这种发展必将导致集成电路的设计规模日益增大。该实训的设计是用Verilog语言硬件描述语言设计出一个VGA图象显示控制器,用Verilog硬件描述语言进行编程,把Verilog语言描述的VGA图象显示控制器所需的程序在Qua

2、rtusII软件环境下进行模拟仿真,以此来验证所设计的结果是否满足设计的要求。在结果符合要求的情况下把Verilog程序下载到FPGA器件上,利用FPGA器件内部存储器存储所需要的数据,再通过VGA接口输出到显示器上,从而达到设计的要求。VGA显示器因为其输出信息量大,输出形式多样等特点已经成为现在大多数设计的常用输出设备,FPGA以其结构的优势可以使用很少的资源产生VGA的各种控制信号。CRT显示器作为一种通用型显示设备,如今已广泛应用于我们的工作和生活中。与嵌入式系统中常用的显示器件相比,它具有显示面积大、色彩丰富、承载信息量大、接口简单等优点,如果将其应用到嵌入式系统中,可以显著提升产品

3、的视觉效果。如今随着液晶显示器的出现,越来越多的数字产品开始使用液晶作为显示终端。但基予GA标准的显示器仍是目前普及率最高的显示器1。若驱动此类显示器,需要很高的扫面频率,以及极短的处理时间,正是由于这些特点,所以可以用FPGA来实现对VGA显示器的驱动。本次专业课程设计即选用PGA来实现VGA的显示。随着FPGA的不断发展及其价格的不断下降,FPGA的可编程逻辑设计的应用优势逐渐显现出来。现在越来越多的嵌入式系统选择了基于FPGA的设计方案。在基于FPGA的大规模嵌入式系统设计中,为实现VGA显示功能既可以使用专用的VGA接口芯片如SPX7111A等,也可以设计和使用基于FPGA的VGA接口

4、软核。虽然使用VGA专用芯片具有更稳定的VGA时序和更多的显示模式可供选择等优点,但设计和使用VGA接口软核更具有以下优势:(1)使用芯片更少,节省板上资源,减小布线难度;(2)当进行高速数据传输时,具有更小的高频噪声干扰;(3)FPGA(现场可编程门阵列)设计VGA接口可以将要显示的数据直接送到显示器,节省了计算机的处理过程,加快了数据的处理速度,节约了硬件成本。FPGA简介FPGA采用了逻辑单元阵列LCA(LogicCellArray)这样一个概念,内部包括可配置逻辑模块CLB(ConfigurableLogicBlock)、输出输入模块IOB(InputOutputBlock)和内部连线

5、(Interconnect)三个部分9。FPGA的基本特点主要有:采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。FPGA可做其它全定制或半定制ASIC电路的中试样片。FPGA内部有丰富的触发器和I/O引脚。FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。可以说,FPGA芯片是小批量系统提咼系统集成度、可靠性的最佳选择之一。FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的AM进行编程。用户可以根据不同的配置模式,采用不同的编程方式。加电时,FPG

6、A芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。当需要修改FPGA功能时,只需换一片EPROM即可。这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。因此,FPGA的使用非常灵活。FPGA(FiledProgrammableGateArray),即现场可编程门阵列,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路ASIC)领域中的一种半订制电路而出现的,既解

7、决了订制电路的不足,又克服了原有可编程器件门电路数有限的缺点。QuartusI软件概述QuartusII软件是Altera公司最新版本的EDA开发软件,支持APEX系列、Cyclone系列、Stratix系列和Excalibur系列等新型系列器件的开发。含有工作组计算、集成逻辑分析仪EDA工具集成、多过程支持、增强重编译和IP集成等特性。支持百万门级的设计,支持高速/O设计,具有更强的设计能力和更快的编译速度QuartusII开发软件为可编程片上系统SOPC)设计提供了一个完整的设计环境。无论是使用个人电脑NUIX或Linux工作站,QuartusII都提供了方便设计、快速编译处理以及编程功能

8、。QuartusII输入的设计过程可分为创建工程、输入文件、项目编译、项目校验和编程下载等几个步骤。本实训的开发板简介本次实训采用板采用Altera公司CycloneII系列EP2C8Q208芯片而设计的。开发板上使用JTAG接口对芯片进行编程仿真调试,利廉S配置EPCS4Flash芯片。自带的ByteBlasterII下载线可以下载Altera公司的所有FPGA芯片。1.4设计的主要内容此设计要实现某一分辨率下(如640*48060Hz)的VGA显示驱动,能简单显示彩条图像并且实现LCD显示等。此程序使用Verilog语言进行描述,VerilogHDL是目前应用最为广泛的硬件描述语言.Ver

9、ilogHDL可以用来进行各种层次的逻辑设计,也可以进行数字系统的逻辑综合,仿真验证和时序分析等oVerilogHDL适合算法级,寄存器级,逻辑级,门级和版图级等各个层次的设计和描述.VerilogHDL进行设计最大的优点是其工艺无关性.这使得工程师在功能设计,逻辑验证阶段可以不必过多考虑门级及工艺实现的具体细节,只需根据系统设计的要求施加不同的约束条件,即可设计出实际电路VerilogHDL是一种硬件描述语言(hardwaredescriptionlanguage)为了制作数字电路而用来描述FPGA的设计之用。根据VGA接口协议,利用FPGA芯片实现借口控制器功能,并在ZRT显示器上做出相应

10、显示。要进行彩条显示,彩色方块显示,利用案件实现显示模式的切换。2设计系统方案熟悉VGA工作原理及VGA接口协议、工作时序。计算出合适的时序,并对原始时钟进行分频处理以获取符合时序要求的各频率。须要显示的图像等可存储于外部存储器,运行时,从外部存储器读取显示数据。显示控制器是一个较大的数字系统,采用模块化设计原则、借鉴自顶向下的程序设计思想,进行功能分离并按层次设计。利用Verilog硬件描述语言对每个功能模块进行描述,并逐一对每个功能模块进行编译仿真,使顶层/GA显示控制器的模块实体仿真综合得以顺利通过8】。VGA显示控制器主要由以下模块组成:分频模块、GA时序控制器模块、彩条图形生成模块、

11、VGA显示模块、存储模块等,如下图2.1所示。2.1VGA显示的发展状况显示绘图阵列(videographicarray,VGA)接口,他作为一种标准的显示接口得到了广泛的应用。VGA接口大多应用在显示器与显卡之间;同时还可以用用在擦二色等离子电视输入图像的模数转换上;VGA接口同样也是LCD液晶显示设备的标准接口。可编程逻辑器件随着微电子制造工艺的发展取得了长足的进步。早期的器件只能存储少量的数据,完成简单的逻辑功能;发展到现在,可以完成复杂的逻辑功能,速度更块,规模更大,功耗更低。目前可编程逻辑器件主要有两大类:复杂可编程逻辑器件Complexprogrammablelogicdevice

12、,CPLD)和现场可编程逻辑器件(filedprogrammablegatearray,FPGA。FPGA的运行速度块,管脚资源丰富,容易实现大规模的系统设计,有大量的软核可用,便于进行二次开发。另外,由于FPGA具有可重构能力、抗看绍兴强等特点,因此FPGA在工业控制等领域越来越受到重视。利用FPGA完成VGA显示控制,可以使图像的显示脱离机的控制,形成体积小、功耗低的格式嵌入式系统(便携式设备或手持设备),应用于地面勘测、性能检测等方面,具有重要的现实意义。显示器因为其输出信息量大,输出形式多样等特点已经成为现在大多数设计的常用输出设备。在FPGA的设计中可以使用很少的资源,就产生/GA各

13、种信号。为了通过VGA端口连接显示器显示前端采集到的图像数据,本课题在1EDAAlteraFPGA开发板上使用VGA接口在显示器上显示彩条及简单的图形,可以作为整个采集系统显示设计的参考,具有一定的实用价值。2.2VGA显示接口VGA接口负责向显示器输出相应的显示信号oVGA接口是一种D型接口,上面共有15个针孔,非对称地分成3排,每排5个,其排列及接口定义如图1.1所示。绿地幻地自测试一OOOOC数字地-ooocfe滥地imt图2.2:VGA接口图码步步码码在基于FPGA的VGA控制中,只需要考虑行同步信号(Hs)、场同步信号(Vs)、蓝基色(R)、绿基色(G)、红基色(B)这5个信号。如果

14、能从FPGA发出这5个信号到VGA接口,就可以实现对VGA的控制。2.3VGA显示的原理VGA显示图像原理:常见的彩色显示器,一般由CRT(阴极射线管)构成。彩色是有R,G.B(红:RED,绿:GREEN蓝:BLUE)三基色组成。显示是用逐行扫描的方式解决,阴极射线枪发出电子束打在涂有银光粉的荧光屏幕上,产生R,G,B三基色,合成一个彩色像素7-8扫描从屏幕的左上方开始,从左到右,从上到下,进行扫描,每扫完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT对电子束进行消隐,每行结束时,用行同步信号进行同步,扫描完所有行,用场同步信号进行场同步,并使扫描回到屏幕的左上方,同时进行场消隐

15、,预备下一场的扫描。它的行场扫描时序示意图1.2所示。现以正极性为例,说明CRT的工作过程:R、G、B为正极性信号,即高电平有效。当VS=0,HS=0时,CRT显示的内容为亮的过程,即正向扫描过程约为26us。当一行扫描完毕,行同步HS=1,约需6us,期间,CRT扫描产生消隐,电子束回到CRT的左边下一行的起始位置X=0,Y=1);当扫描完480行后,CRT的场同步VS=1,产生场同步是扫描线回到CRT的第一行第一列C=0,Y=0处,约为两个行周期)。HS和VS的时序图。T1为行同步消隐(约为6us);T2为行显示时间(约为26us),T3为场同步消隐(两行周期);T4为场显示时间(480行

16、周期)。H(;H行消隐f图像X行消除x下彳调像R(;B场消隐图像场消隐Y下-行囲象图2.3行场扫描示示意图2.4硬件电路实现VGA的图形模式分为3类:CGA、EGA兼容的图形模式;标准的VGA图形模式;VGA扩展图形模式。后两种图形模式统称为VGA图形模式。本研究基于标准VGA模式来实现。常见的彩色显示器一般都是由CRT(阴极射线管)构成,每一个像素的色彩由红、绿、蓝三基色构成。显示时采用的是逐行扫描的方式。VGA显示模块产生的由水平同步信号和垂直同步信号控制阴极射线管中的电子枪产生电子束,轰击涂有荧光粉的屏幕,产生红、绿、蓝三基色,于显示屏上合成一个彩色像素点。图2.4表示的是VGA显示模块

17、与CRT显示器的控制框图。电子束扫描一幅屏幕图像上的各个点的过程称为屏幕扫描。现在显示器都是通过光栅扫描方式来进行屏幕扫描。在光栅扫描方式下,电子束按照固定的路径扫过整个屏幕,在扫描过程中通过电子束的通断强弱来控制电子束所经过的每个点是否显示或显示的颜色21。电子枪在VGA显示模块产生的行同步、场同步等控制信号的作用下进行包括水平扫描、水平回扫、垂直扫描、垂直回扫等过程。光栅扫描的路径通常为:从上到下扫过每一行,在每一行中从左到右地进行扫描。其过程如下:电子束从屏幕左上角开始向右扫,当到达屏幕的右边缘时,电子束关闭(水平消隐),并快速返回屏幕左边缘(水平回扫),然后在下一条扫描线上开始新的一次

18、水平扫描。一旦所有的水平扫描均告完成,电子束在屏幕的右下角结束并关闭(垂直消隐),然后迅速返回到屏幕的左上角(垂直回扫),开始下一次光栅扫描。通过对硬件进行编程,输出标准的VGA信号(红、绿、蓝三色信号和行、帧同步信号),通过15针VGA接口输出至显示器,可具有显示驱动程序的能力,驱动显示器显示图像信号。板上的VGA接口只需使用其中的5个引脚,其中行、帧同步信号直接由FGPA输出;红、绿、蓝三色信号使用FPGA上8个引脚,8位数据,其中红色2位,绿色和蓝色各3位,经由电阻网络D/A变换后输出值显示器,具有256种颜色。VGA接口与FPGA引脚连接见图2.5。取IKQIHVGUIS图2.5VGA

19、与FPGA引脚连接2.5软件实现设计VGA图像显示控制需要注意两个问题:一个是时序的驱动,这是完成设计的关键,时序稍有偏差,显示必然不正常,甚至会损坏彩色显示器;另一个VGA信号的电平驱动。针对开发板的条件,可以用50MHz的系统时钟进行分频得至20MHz的像素频率输出,FPGA通过串联电阻直接驱动5个VGA信号。每个颜色信号串一个电阻,每位的颜色信号分别是VGA_RED、VGA_BLUE、VGA_GREEN。每个电阻与终端的75欧电缆电阻相结合,确保颜色信号保持在VGA规定的0V0.7V之间。VGA_HSYNC和VGA_VSYNC信号使用LVTTL或LVCM0S3I/C标准驱动电平。通过VG

20、A_RED、VGA_BLUEVGA_GREEN置高或低来产生8中颜色,如下表所示。VGA_REDVGA_GREENVGA_BLUEResuItingColor000Black00LBlue010Green011Cyan100Red1101Magenta110YeJJowVGA信号的时序由1视频电气标准?委员会(VESA)规定。以下提供的VGA系作为例子来说明FPGA在640X480模式下是如何驱动/GA监视器的。VGA显示器基于CRT,使用调幅模式,移动电子束(或阴极射线)在荧光屏上显示信息。LCD使用矩阵开关给液晶加压,在每个像素点上通过液晶来改变光的介电常数。尽管下面的描述仅限于CRT,L

21、CD已经发展到可以同CRT使用同样的时序信号了。因此,下面的讨论均适合CRT和LCD。在CRT显示器中,电流的波形通过蹄形磁铁产生磁场,使得电子束偏转,光栅在显示屏上横向显示,水平方向从左至右,垂直方向从上至下。当电子束向正方向移动时,信息才显示,即从左至右、从上至下。如果电子束从后返回左或顶边,显示屏并不显示任何信息。在消隐周期电子束重新分配和稳定于新的水平或垂直位时,丢失了许多信息。显示协议定义了电子束的大小以及通过显示屏的频率,该频率是可调的。现在的VGA显示屏支持多种显示协议,VGA控制器通过协议产生时序信号来控制光栅。控制器产生同步脉冲TTL电平来设置电流通过偏转磁铁的频率,以确保像

22、素或视频数据在适当的时间送给电子枪。视频数据一般来自重复显示存储器中一个或多个字节它们被分配到每个像素单元。入门实验板使用每个像素中的3位,产生图8中可能的一种颜色。控制器指定视频数据缓冲器以备电子束通过显示屏。然后,控制器接收并利用视频数据在适当的时间显示,电子束移动到指定的像素点。根据图2.5所示,VGA控制器产生水平同步时序信号HS)和垂直同步时序信号VS),调节在每个像素时钟视频数据的传送。像素时钟定义了显示像素信息的有效时间段VS信号定义显示的更新频率,或刷新屏幕信息的频率。最小的刷新频率是取决于显示器的亮度和电子束的强度,实际频率一般在0120Hz之间。给定的刷新频率的水平线的数量

23、定义了水平折回频率。下表的时序信号是640X480,像素时钟25Mhz,刷新频率60Hz1。图7说明了每个时序的联系。同步脉冲的时序宽度(TPW)和前后门拱的间隔TFP和TBP)基于观察多种VGA的显示屏的结果。前后门拱的间隔是前后同步脉冲时间。在这些时段信息不能显示。SymbolParameterVerticalSyncHorizontalSyncTimeClocksUne?TimeClocksTsSyncpulsetime16.7ms416,50052132ys800T防Displaytirne15.36ms384,00048025.6us640TpwPulsewidth64pm1,600

24、23.84jxs%咕Frontporch320序&000to640rm16TbpBackporch928ns23,2fX)291勺切4&Totalhorizontaltimetime7LT-LbacXCurrentthroughthehorizontaldefectioncoilHorizontaldisplaytinneRetrace:Noinformationisdisplayedduringthistime-1Irontporch鬧:图2.6VGA控希IJ器时序信号setsthretrcefrequencyIraniporchL逊一”_4;_御?曲k.S1ab(ecurrenlramp;

25、Infarinationis/displayedduringthistimeretracefimepixel0.0pixel0,639vgaDisplaypixel479.0pixel479.639G40pixelsaredisplayedeachtimethebeamtraverseslhescreen图2.7各时序之间的联系2.6设计方案设计方案如下:将图像控制模块分为这样几部分:锁相环电路PLL.v)、VGA显示模块(vga.v)、时钟分频模块(clk_div.v)、LCD状态控制模块(clk_ctrl.v)、LCD顶层模块(lcd.v)。其中锁相环给分频器和相位器提供稳定的20MHzA

26、时钟频率信号;VGA显示模块用于产生1024*76860Hz/65M彩条图像,并控制显示范围和消隐范围以及产生水平同步时序信号S和垂直同步时序信号vs的值;提供给SRAM地址并按地址读出八位数据(灰度值Y),然后得至【JR、G、B的值(若Y中间值,贝JR=G=B=1;否贝UR=G=B=O),并把R、G、B的值通过VGA接口传到CRT显示器;分频模块通过计数器实现分频功能;状态控制模块给出液晶显示第一行和第二行内容;LCD顶层模块将clk_div模块输出的Hk_lcd链接至【Jlcd_ctrl中,显示内容。3VGA彩条显示调试与显示3.1软件程序设计本设计需要三个模块,一个是锁相环模块、GA显示

27、模块、LCD模块。1锁相环模块设计一个cyclone2锁相环在选择参数时的分频比为1:1,输入的最高频率设置成20MHz,占空比50%,所以C0的输出最高频率是20MHz输出与输入频率相同,C1的输出最高频率是65MHz,也是稳定的。模块如图3.1所示。pHinclkuCUc1ClkRatioPh(dg)DC(零)CU1/1U.LIU5D.UUcl13/4U.LIU5D.UUinclkufrequency:2U.UUUMHzOperatidnh.itode:NoCompensationinst2CycloneII图3.1锁相环模块锁相环的设计部分程序如下modulepll(inclk0,c0,

28、c1);inputinclk0;outputc0;outputc1;wire5:0sub_wire0;wire0:0sub_wire5=1h0;wire1:1sub_wire2=sub_wire01:1;wire0:0sub_wire1=sub_wire00:0;wirec0=sub_wire1;wirec1=sub_wire2;wiresub_wire3=inclk0;wire1:0sub_wire4=sub_wire5,sub_wire3;altpllaltpll_component(.inclk(sub_wire4),.clk(sub_wire0),.activeclock(),.are

29、set(1b0),.clkbad(),.clkena(61b1),.clkloss(),.clkswitch(1b0),.configupdate(1b0),.enable0(),.enable1(),.extclk(),.extclkena(41b1),.fbin(1b1),.fbmimicbidir(),.fbout(),.locked(),.pfdena(1b1),.phasecounterselect(41b1),.phasedone(),.phasestep(1b1),.phaseupdown(1b1),.pllena(1b1),.scanaclr(1b0),.scanclk(1b0

30、),.scanclkena(1b1),.scandata(1b0),.scandataout(),.scandone(),.scanread(1b0),.scanwrite(1b0),.sclkout0(),.sclkout1(),.vcooverrange(),.vcounderrange();defparamaltpll_component.clk0_divide_by=1,altpll_component.clk0_duty_cycle=50,altpll_component.clk0_multiply_by=1,altpll_component.clk0_phase_shift=0,a

31、ltpll_component.clk1_divide_by=1,altpll_component.clk1_duty_cycle=50,altpll_component.clk1_multiply_by=1,altpll_component.clk1_phase_shift=0,altpll_component.inclk0_input_frequency=50000,altpll_ended_device_family=CycloneII,altpll_component.lpm_hint=CBX_MODULE_PREFIX=pll,altpll_component.lpm_type=al

32、tpll,altpll_component.operation_mode=NO_COMPENSATION,altpll_component.port_activeclock=PORT_UNUSED,altpll_component.port_areset=PORT_UNUSED,altpll_component.port_clkbad0=PORT_UNUSED,altpll_component.port_clkbad1=PORT_UNUSED,altpll_component.port_clkloss=PORT_UNUSED,altpll_component.port_clkswitch=PO

33、RT_UNUSED,altpll_component.port_configupdate=PORT_UNUSED,altpll_component.port_fbin=PORT_UNUSED,altpll_component.port_inclk0=PORT_USED,altpll_component.port_inclk1=PORT_UNUSED,altpll_component.port_locked=PORT_UNUSED,altpll_component.port_pfdena=PORT_UNUSED,altpll_component.port_phasecounterselect=P

34、ORT_UNUSED,altpll_component.port_phasedone=PORT_UNUSED,altpll_component.port_phasestep=PORT_UNUSED,altpll_component.port_phaseupdown=PORT_UNUSED,altpll_component.port_pllena=PORT_UNUSED,altpll_component.port_scanaclr=PORT_UNUSED,altpll_component.port_scanclk=PORT_UNUSED,altpll_component.port_scanclk

35、ena=PORT_UNUSED,altpll_component.port_scandata=PORT_UNUSED,altpll_component.port_scandataout=PORT_UNUSED,altpll_component.port_scandone=PORT_UNUSED,altpll_component.port_scanread=PORT_UNUSED,altpll_component.port_scanwrite=PORT_UNUSED,altpll_component.port_clk0=PORT_USED,altpll_component.port_clk1=P

36、ORT_USED,altpll_component.port_clk2=PORT_UNUSED,altpll_component.port_clk3=PORT_UNUSED,altpll_component.port_clk4=PORT_UNUSED,altpll_component.port_clk5=PORT_UNUSED,altpll_component.port_clkena0=PORT_UNUSED,altpll_component.port_clkena1=PORT_UNUSED,altpll_component.port_clkena2=PORT_UNUSED,altpll_co

37、mponent.port_clkena3=PORT_UNUSED,altpll_component.port_clkena4=PORT_UNUSED,altpll_component.port_clkena5=PORT_UNUSED,altpll_component.port_extclk0=PORT_UNUSED,altpll_component.port_extclk1=PORT_UNUSED,altpll_component.port_extclk2=PORT_UNUSED,altpll_component.port_extclk3=PORT_UNUSED;endmodule2.VGA显

38、示模块VGA显示模块用于产生彩条图像,实现横彩条、竖彩条、棋盘彩条转换,并控制显示范围和消隐范围以及产生水平同步时序信号is和垂直同步时序信号vs的值。一般来说,时钟计数器通过像素时钟来控制水平时序信号。译码计数器的值产HS信号。在指定的行,计数器产生当前像素显示的位置。一个独立的计数器产生垂直时序信号。垂直同步计数器在每个HS脉冲信号来临时自动加1,译码值产生VS信号。计数器产生当前显示行。这两个计数器从地址到显示缓冲器连续计数。开发板的DDRSDRAM提供了一个足够的显示缓冲区。在HS脉冲的开始和VS脉冲的开始没有具体规定相对的时序关系。因此,计数器被分配到简单格式的视频RAM地址,或分配

39、到同步脉冲产生器的最小译码逻辑。设计部分代码如下:modulevga_A(clock,switci,disp_RGB,isync,vsync);inputclock;/系/统输入时钟input1:0switci;output2:0disp_RGB;/VGA数据输出disp_RGB0蓝disp_RGBl红/disp_RGB2绿outputhsync;/VGA行同步信号outputvsync;/VGA场同步信号reg11:0hcount;/VGA亍扫描计数器reg11:0vcount;/VGA场扫描计数器reg2:0data;reg2:0h_dat;reg2:0v_dat;wiredat_act;

40、wirehsync;wirevsync;/VGA行、场扫描时序参数表parameter/1024*76860Hz/65Mh_Front_porch=12d24,h_Back_porch=12d160,h_Sync_pulse=12d136,Whole_line=12d1344,v_Front_porch=12d3,v_Sync_pulse=12d6,v_Back_porch=12d29,Whole_frame=12d806;*VGA驱动部分*/行场扫描/行扫描hcount从0开始计数到Whole_line/场扫描vcount从0开始计数到Whole_framealways(posedgeclo

41、ck)begin/f(hcount=Whole_line)行扫描计数到Wholelinef(hcount=12dl344)行扫描计数到Wholelinebeginhcount=1d0;/f(vcount=Whole_frame)场扫描计数到Wholeframef(vcount=12d806)场扫描计数到Wholeframevcount=1d0;elsevcount=vcount+1d1;endelsebeginhcount=(hcount+1d1);endend/同步信号输出reghsync_r,vsync_r;always(posedgeclock)beginhsync_rh_Sync_pu

42、lse);vsync_rv_Sync_pulse);endassignhsync=hsync_r;产生行同步信号(低电平)assignvsync=vsync_r;产生场同步信号(低电平)/数据输出assigndat_act=(hcount=(h_Sync_pulse+h_Back_porch)&(hcount=(v_Sync_pulse+v_Back_porch)&(vcount(Whole_frame-v_Front_porch);assigndisp_RGB=(dat_act)?data:3h00;#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#

43、J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*always(posedgeclock)begincase(switch1:0)2d0:data=h_dat;/选择横彩条2d1:data=v_dat;/选择竖彩条2d2:data=(v_dat人h_dat);产生棋盘格2d3:data=(v_dat人h_dat);产生棋盘格endcaseendalways(posedgeclock)/产/生竖彩条beginif(hcount363)v_dat=3h7;/白elseif(hcount433)v_dat=3h6;/黄/elseif(hcount503)v_da

44、t=3h5;/青/elseif(hcount573)v_dat=3h4;/绿elseif(hcount643)v_dat=3h3;/紫/elseif(hcount713)v_dat=3h2;/红/elseif(hcount783)v_dat=3h1;/蓝/elseif(hcount853)v_dat=3h7;/白elseif(hcount923)v_dat=3h6;/黄/elseif(hcount993)v_dat=3h5;/青/elseif(hcount1063)v_dat=3h4;/绿elseif(hcount1133)v_dat=3h3;/紫/elseif(hcount1203)v_da

45、t=3h2;/红/elseif(hcount1273)v_dat=3h1;/蓝/elsev_dat=3h0;/黑/endalways(posedgeclock)/产/生横彩条beginif(vcount94)h_dat=3h7;/白elseif(vcount154)h_dat=3h6;/黄/elseif(vcount214)h_dat=3h5;/青/elseif(vcount274)h_dat=3h4;/绿elseif(vcount334)h_dat=3h3;/紫/elseif(vcount394)h_dat=3h2;/红/elseif(vcount454)h_dat=3h1;/蓝/elseh

46、_dateCLEAR0001UnsignedBinarySETFUNCTION0010UnsignedBinarySWITCHMODE0011UnsignedBinarySETMODE0100UnsignedBinarySETDDRAM10101UnsignedBinaryITERAMJ0110UnsignedBinary/VRITERAM20111UnsignedBinaryIDLE1000UnsignedBinaryJ|厅PlITJl厅PutkUTPUT图3.2LCD模块分频器子模块程序:moduleclk_div(clk,sys_rst_n,clk_lcd);inputclk;input

47、sys_rst_n;sys_rst_i为全局复位信号(高电平有效)outputclk_lcd;clk_lcd链接到lcd_ctrl中reg19:0cnt;/对/时钟进行计数分频regclk_BUF;always(posedgeclkornegedgesys_rst_n)if(!sys_rst_n)/低/电平复位cnt=26026)/学/习特权同学,提高代码健壮性cnt=20d0;elsecnt=cnt+1b1;always(posedgeclkornegedgesys_rst_n)if(!sys_rst_n)clk_BUF=0;elseif(cnt=26026)clk_BUF=clk_BUF;

48、assignclk_lcd=clk_BUF;endmodule状态控制子模块程序:modulelcd_ctrl(clk_lcd,sys_rst_n,lcd_rs,lcd_rw,lcd_en,lcd_data);inputclk_lcd;inputsys_rst_n;/系/统复位信号,低电平复位outputlcd_rs;/0=输入指令,1=输入数据outputlcd_rw;/0=向LCD写入指令或数据,1=从LCD读取信息outputlcd_en;/使能信号,1时读取信息10(下降沿)执行指令output7:0lcd_data;/LCD数据信号parameterCLEAR=4d1,/清/屏指令S

49、ETFUNCTION=4d2,/模/式设置指令SWITCHMODE=4d3,/开/关控制指令SETMODE=4d4,/设/定显示屏或光标移动方向指令SETDDRAM_1=4d5,设定第一行DDRAM地址指令WRITERAM_1=4d6,/向/第一行写入的数码WRITERAM_2=4d7,IDLE=4d8;/空/闲reg127:0Data_First=VGAcaitiaotu;液晶显示的第一行的数据reg127:0Data_Second=1308305028huli液晶显示的第二行的数据reg127:0Data_First_Buf,Data_Second_Buf;液晶显示的数据缓存/LCD状态机

50、寄存器reg3:0state;/当/前状态寄存器reglcd_rs_reg=1b0;lcd_r输出寄存器reglcd_rw_reg=1b0;lcd_rW输出寄存器reg7:0lcd_data_reg;lcd_dat输出寄存器reglcd_en_sel;reg5:0display_count;/状态控制always(posedgeclk_lcdornegedgesys_rst_n)if(!sys_rst_n)beginstate=CLEAR;lcd_rs_reg=1b0;lcd_data_reg=8b00000000;lcd_en_sel=1b1;display_count=4b0;endels

51、ecase(state)CLEAR:beginstate=SETFUNCTION;lcd_data_reg=8b00000001;endSETFUNCTION:beginstate=SWITCHMODE;lcd_data_reg=8b00111000;endSWITCHMODE:beginstate=SETMODE;lcd_data_reg=8b00001100; l8endSETMODE:beginstate=SETDDRAM_1;lcd_data_reg=8b00000110;endSETDDRAM_1:beginstate=WRITERAM_1;lcd_data_reg=8b100000

52、00;/写入第一行显示起始地址:第一行第二个位置Data_First_Buf=Data_First;endWRITERAM_1:beginif(display_count=6d16)/display_coun等于14时表示第一行数据已写宀完beginlcd_data_reg=8b11000000;送/入写第二行的指令lcd_rs_reg=1b0;display_count=4b0;Data_Second_Buf=Data_Second;state=WRITERAM_2;/写/完第一行进入写第二行状态endelsebeginlcd_data_reg=Data_First_Buf127:120;D

53、ata_First_Buf=(Data_First_Buf8);lcd_rs_reg=lbl;/RS=1表示写数据display_count=display_count+1b1;state=WRITERAM_l;endendWRITERAM_2:beginif(display_count=6dl6)beginlcd_en_sel=lb0;lcd_rs_reg=lb0;display_count=4b0;state=IDLE;/写/完进入空闲状态endelsebeginlcd_data_reg=Data_Second_Bufl27:l20;Data_Second_Buf=(Data_Second_Buf8);lcd_rs_reg=lbl;display_count=display_count+1b1;state=WRITERAM_2;endendIDLE:beginstate=IDLE;enddefault:state=CLEAR;endcaseassignlcd_rw=lcd_rw_reg;assignlcd_rs=lcd_rs_reg;assignlcd_data=lcd_data_reg;assignlcd_en=lcd_en_sel?clk_lcd:1b0;endmoduleLCD顶层模块程序:modulelcd(clk,sys_rst_n,lcd_en,lcd_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论