毕业设计58VGA显示控制模块硬件及软件设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
摘要 (1)
Abstract (2)
前言 (3)
第1章绪论 (4)
第1.1节应用背景 (4)
第1.2节设计思路 (4)
第1.3节设计工作 (5)
第2章硬件电路设计 (6)
第2.1节系统总体结构框架 (6)
第2.2节主控制器硬件模块 (7)
第2.3节电源模块 (10)
第2.4节D/A转换电路模块 (10)
第2.5节VGA显示模块 (14)
第2.6节本章小结 (16)
第3章软件设计 (17)
第3.1节Quartus II及VHDL语言介绍 (17)
第3.2节程序设计 (18)
第3.3节本章小结 (22)
第4章软件调试 (23)
第4.1节编译仿真 (23)
第4.2节配置加载 (23)
第4.3节实验结果 (24)
第5章结论与展望 (25)
参考文献 (26)
致谢 (27)
附录 (28)
摘要
本文设计了一个基于VHDL的VGA显示控制模块,通过FPGA控制图像信号与时序信号,软件的开发环境是ALTERA公司的Quartus II 6.0。
设计运用VHDL语言编程,配置加载FPGA芯片,经FPGA处理,信号通过D/A转换器(电阻分压与ADV7123视频D/A转换两套方案),由VGA接口输出。
设计的主控制器采用ALTERA公司的ACEX EP1K30TC144-3芯片,通过GW48系列SOPC/EDA实验箱调试,完成整个系统实验。
关键词:FPGA;VHDL;VGA
Abstract
This paper describes the design of VGA display and control module which based on VHDL. Image signal and schedule signal were controlled by FPGA. Software development environment is Altera's Quartus II 6.0. This design using VHDL language programming, loading FPGA configuration, the FPGA, signal through D/A Converter (resistance pressure and ADV7123 video DAC two options), then output from the VGA interface. ACEX EP1K30TC144-3 chip of ALTERA Company has been adapted in the design of the main controller. Debugging program through GW48 Series SOPC/EDA Experiment Box, the whole system will be completed experiment.
.
Keywords:FPGA;VHDL;VGA
前言
随着大规模集成电路技术的发展及电子产品市场运作节奏的进一步加快,现代电子设计技术已迈入一个全新的阶段。
电子器件及其技术的发展将更多地趋向于支持EDA (Electronic Design Automation),借助VHDL语言,硬件设计与软件设计技术得到了有机的融合。
可编程逻辑器件FPGA(Field Programmable Gate Array)和CPLD(Complex Programmable Logic Device)由于具有开发简单、静态可重复编程和动态在系统编程的特点,已经成为当今应用最广泛的两类可编程专用集成电路(ASIC)。
随着电子技术的迅猛发展,速度更快、集成度更高的FPGA不断出现,随着结构和工艺的改进,FPGA芯片上包含的资源越来越丰富,可实现的功能越来越强,这使得FPGA在电子电路设计中扮演的角色越来越重要。
本文描述了基于VHDL的VGA显示控制模块的设计,具体内容如下:
1.第一章绪论介绍了FPGA的特点及设计所做的工作。
2.第二章介绍了硬件电路的设计,包含4个功能模块。
3.第三章讲解了软件的设计,简单介绍了Quartus II及VHDL语言,着重讲解了程序设计方案。
4.第四章介绍了软件调试的方法。
5.第五章是本次设计的结论与展望。
由于时间仓促,加之水平有限,文中的缺点和不足之处在所难免,敬请批评指正。
第1章绪论
第1.1节应用背景
图像处理是信号与信息处理学科的一个重要组成部分,也是诸多计算机领域中最为活跃的领域之一。
随着计算机、集成电路等技术的飞速发展,数字系统的设计正朝着速度快、容量大、体积小、重量轻的方向发展。
推动该潮流迅猛发展的引擎就是日趋进步和完善的ASIC设计技术。
ASIC具有高集成度、高性能、高可靠性、高保密性及成本低、开发工具先进等优点,基于它们的优点,可编程ASIC,特别是高密度可编程ASIC近年来发展迅速,已经在国内外计算机硬件、工业控制、智能仪表、数字电路系统、航空航天设备等领域得到了广泛应用。
大规模可编程逻辑器件CPLD是将多个可编程阵列逻辑器件集成到一个芯片,具有类似PAL的结构;FPGA具有类似门阵列的结构,这两类器件都具有用户可编程特性。
CPLD和FPGA在图像领域有着广泛的应用,他们的功能有:形成图像处理器的外围接口与控制,形成图像的通道,完成数字图像的编码,产生专用的图形等。
第1.2节设计思路
在许多图像处理系统中,需要将经过处理的图像显示出来,如果采用传统的办法将图像数据传回电脑并通过显示器显示出来,那么在传输的过程中就需要嵌入式系统的CPU 不断的对所传输的图像数据信号进行控制,这样就造成了CPU资源的浪费,同样系统还需要依赖电脑,降低了系统的灵活性。
如果采用FPGA对显示器的VGA接口进行设计,数据流只需要在整个系统的内部流动,而不需要依靠计算机,实现了系统的最小化,大大减少了电路板的尺寸,增强了系统的可靠性和设计的灵活性。
VGA是计算机显示器常见的显示标准,VGA接口是LCD液晶显示器、CRT显示器的标准接口,通过VGA控制LCD、CRT可以使整个系统变得小巧和便携,使得应用的范围大大扩展。
在这次的设计实验中,正是需要把预设的图像实时地直接地显示出来,以验证设计的正确性,从而满足各种不同应用设计的需要。
第1.3节设计工作
本设计主要采用软硬件结合的方式,实现将预置的图像或动画在VGA(640*480)显示器上正确显示的功能。
主要工作有:
1.软件设计,在Quartus Ⅱ环境下,运用VHDL硬件描述语言编程,包括初始化模块设计,控制器模块设计,VGA时序模块设计。
2.程序设计完成后,进行测试,所有的硬件测试先在GW48系列SOPC/EDA实验箱上完成,使其能够满足设计要求。
3.在实验箱调试正确,满足要求后,进行拓展的硬件设计,包括:系统的整体结构设计,电路原理图设计和PCB电路板设计三大部分。
第2章硬件电路设计
第2.1节系统总体结构框架
一、系统的硬件电路在GW48系列SOPC/EDA实验箱上完成,实现FPGA对VGA显示器的控制,实现8位色输出。
结构示意图如下:
图2.1 实验箱实现的硬件结构示意图
实验箱的内部结构是相当复杂的,本系统中用到的是:一块FPGA核心板,板上有ACEX EP1K30TC144-3芯片及其外围电路;D/A转换电路;VGA接口电路。
通过计算机编程,将图像数据与时序信号一同下载进入FPGA,经过FPGA的处理,再通过D/A 转换电路,完成数字信号向模拟信号的转换,最后由VGA接口输出,在CRT显示器上显示图像。
二、在实验箱上完成设计后,我又设计制作了电路板加以拓展,以代替实验箱。
专用电路板设计的目的是丰富图像显示的色彩,增强图像的还原能力,使系统的功能更加强大。
系统由FPGA主控制器,电源模块,D/A转换模块(分两套方案),显示接口模块组成。
其结构示意图如下:
图2.2 拓展电路硬件结构示意图
输入部分:(1)由计算机进行软件编程,设计专门的图像数据,将其与时序信号一同下载送入FPGA。
(2)在第一种方案实现的情况下,我们还构想了另一种方案,就是将图像数据事先用烧写器存入EEPROM,当系统工作时,根据时序将存储器中的数据送入FPGA,这种方法可以使图像信息更加丰富。
这个方案还处于构思阶段,还没有实施,有待今后进一步拓展。
输出部分:在FPGA里将通过软件的方法构造的行、场同步信号和点时钟信号送到地址发生器中,产生所需要的控制帧存储器的地址信号,同时把采集处理后的数字图像信息输入到实验箱上的D/A转换电路,经数模转换后从VGA接口输出。
以下两套拓展方案是分开工作的,通过连接到VGA接口的插针进行选择。
(1)方案一将4位图像数据信号送入电阻分压网络,它起到一个D/A转换的作用,最终将数字图像信号送入VGA接口。
(2)方案二以同样的方法将R、G、B三基色10位信号送入ADV7123,ADV7123把数字图像信号D/A转换后送入VGA接口。
第2.2节主控制器硬件模块
一、ACEX1K系列芯片介绍
图像处理系统往往需要庞大的处理器阵列、存储器模块和通讯网络,大规模集成电路正好可以解决这些问题。
因此,本设计选用ALTERA公司的ACEX1K系列芯片,此系列的产品不但具有高性能、高密度和非常大的灵活性,还具有改进的结构、先进的处理技术、现代化的开发工具以及多个宏功能模块可选用等优点。
ACEX1K是2000年推出的2.5V低价格SRAM工艺PLD(FPGA),其结构中带嵌入式存储块EAB,部分型号带PLL,且每个嵌入式存储块EAB的容量均为4KB。
ACEX1K器件的特点是将查找表LUT和EAB相结合,提供了效率高而又廉价的结构。
基于LUT的逻辑对数据路径管理、寄存器强度、数学计算或数字信号处理DSP的设计提供优化的性能和效率,而EAB可实现RAM、ROM、双口RAM或FIFO功能。
这使得ACEX1K适合于复杂逻辑及存储器功能,如数字信号处理、数据路径管理、数据变换和微处理器等各种高性能通信应用。
基于可重构CMOS SRAM单元,ACEX1K结构具有实现一般门阵列宏功能需要的所有特征,相应的多引脚提供与系统元器件的有效接口。
先进的处理功能和2.5V低电压要求,使得ACEX1K器件满足廉价、高容量的应用需要。
每个ACEXIK器件包含一个实现存储器及特殊逻辑功能的增强型嵌入式阵列和一个实现一般逻辑的逻辑阵列。
嵌入式阵列由一系列EAB组成,每个EAB提供4096位。
逻辑阵列由逻辑阵列块LAB组成,八个可编程逻辑块,如八位计数器、地址译码器或状态机,或跨LAB进行组合以建立更大的逻辑块。
每个LAB代表大约96个可用逻辑门。
图2.3 EP1K30TC144-3芯片
本系统就是选用了ALTERA公司的ACEX1K系列的EP1K30TC144-3芯片,它具有144个引脚,其中102个I/O通信口。
在本次的基于VHDL的VGA显示控制模块设计中,电阻分压网络共用12个I/O通信口,ADV7123 D/A转换器共用30个I/O 通信口,存储器模块共用26个I/O通信口。
引脚的配置及功能分配情况如下:
表2.1 引脚配置功能表
另外,EP1K30TC144-3芯片中的TCK、TDO、TMS、nSTA、TDI信号是与JTAG 下载口相连的,在JTAG下载模式下,Quartus Ⅱ可以对EP1K30TC144-3进行编程、配置。
二、外部时钟
本系统需接一个外部晶振作为时钟信号,晶振的频率需要在规定范围内选择,尽可能选择符合程序要求,兼顾各芯片参数,能够简单的分频出所需频率的晶振。
本次设计中,我们选择的是50MHz的有源晶振。
图2.4 引脚结构为:1脚悬空,2脚接地,3脚输出,4脚接电源VCC
50MHz的有源晶振可以方便的分频出25MHz的频率作为全局时钟,25MHz是VGA显示的点扫描频率,即是我们所需要的。
第2.3节电源模块
本系统中由外部提供5V电源,5V电源使用圆头插座的封装,可以直接用5V的电源变压器插上使用。
在电路中,由于涉及芯片的参考电压较多,FPGA的I/O口电压为3.3V,核心电压为2.5V,以及一个内部参考电平1.8V,所以我用到了3个线型稳压器。
一个LM1117-3.3将5V电压转为3.3V,LM1117-2.5将5V电压转为2.5V,LM1117-1.8将5V电压转为1.8V。
系统中其他外设的电源有5V供电和3.3V供电,这样4个电压可以满足整个电路板的要求。
电源的外围加上一些滤波电容,对FPGA电源进行滤波,电源指示灯用来显示电源工作是否正常。
下图为电源滤波部分的硬件电路图:
图2.5 电源滤波原理图
第2.4节 D/A转换电路模块
由于FPGA中处理的信号为数字信号,而我们这次设计的目标是在CRT显示器上完成对图像的显示控制,所以本系统中D/A转换电路模块是必须的。
一、实验箱D/A转换电路
根据运用VHDL语言软件设计的要求,实验箱中的D/A转换模块是一片74LS245(八同向三态总线收发器),实现了8种颜色显示的功能。
D/A转换电路从FPGA获得R、G、B三基色信号,根据R、G、B信号的二元化值0和1的不同组合,显示出黑、蓝、绿、青、红、品、黄、白八种颜色。
利用实验箱对程序进行验证,我设计了一个白色的小圆球,半径为30个像素点,使其能够在整个CRT显示器上水平运动,一行运动结束后进入下一行,循环往复。
这个设计方案在实验箱上已经得到了实现。
二、电阻分压网络
在拓展系统中,方案一在D/A转换电路部分设计了一个以电阻进行分压的网络,将输入的数字信号转换为模拟信号,并复合行、场同步信号,一起送入VGA接口电路输出。
电阻分压网络的作用是模拟D/A转换器,下图就是电阻分压网络的结构原理图:
图2.6 电阻分压网络原理图
在图中,我们可以看出,用电阻分压网络对信号进行D/A转换,其结构是比较简单的。
此方案中,三路R、G、B数字信号各对应一组电阻,每组电阻由4个2KΩ电阻,4个1KΩ电阻组成。
每路数字信号都是4位的,由FPGA直接输入。
每组分压网络的等效电路是相同的,下图为R信号的等效电路图:
图2.7 分压网络R信号等效电路
G
表2.24位输入信号分压结果表
根据原理图的典型接法,将三路R[0..3]、G[0..3]、B[0..3]数字信号共12位接入电阻分压网络,最终将R、G、B送入VGA的1、2、3接口。
三、ADV7123视频D/A转换器
方案二采用AD公司生产的D/A转换芯片ADV7123。
它是美国ANALOG DEVICES公司生产的一种可以产生视频的数字/模拟转换器件。
是专门为解决彩色图像和包括高清晰度电视(HDTV)的视频系统而设计的芯片。
它的输入由3个高速的10位标准TTL电平的RGB信号,输出为高抗阻的模拟信号,具有330MHz的最大采样速度。
ADV7123有3个独立的10位像素输入端口,分别表示红、绿、蓝,5V电源,1.23V的参考电压,像素时钟,还包括/SYNC与/BLANK信号,ADV7123产生的RGB信号与RS-343A、RS-170及大多数使用的高清晰度的电视系统产生的信号是兼容的,与TTL兼容信号输入,5V的CMOS整体结构,应用领域为高质量的电视系统,高质量的彩色图像系统。
下图是VGA显示终端接口硬件设计原理图,通过ADV7123产生三路模拟信号输出,同时结合行、场同步信号完成图像的显示。
图2.8VGA显示终端接口设计电路图
本系统设计的输入数据有30位图像数据信号,两位控制信号,一位时钟信号。
其中数据信号由R、G、B三部分组成,每部分各用10位数据,,Pclk为时钟输入端,在上升沿锁存R0~R9、G0~G9、B0~B9 三个10位数字信号,以及/SYNC和/BLANK信号。
/PSAVE为节能控制管脚引入FPGA,在调试时接逻辑高电平,令不使能。
/SYNC是ADV7123独立的视频同步控制输入端,不会影响其它控制信号或数据输入信号,只能在消隐期间使用。
/BLANK信号接逻辑高电平,使在每一个CLOCK时钟上升沿,都能锁定R0~R9、G0~G9、B0~B9 三个10位数字信号。
ADV7123使用方便,IOR、IOG、IOB信号分别为红色、绿色、蓝色通道的电流正向输出端,IOR、IOB、IOG信号输出的电流值可以通过公式算得: IOR、IOB= 7. 9896 ×VREF / Rset (mA) ,当使用/SYNC信号时IOG= 11. 445×VREF/ Rset (mA) ,如果未使用/SYNC信号,计算公式同IOR、IOB的计算公式。
在点时钟脉冲Pclk的作用下三个10位的R、G、B信号送入数据寄存器,而后送到三个DAC模块,复合消隐信号和复合同步信号加到红、绿、蓝模拟信号送到输出端。
四、小结
本系统的硬件测试已经在GW48系列SOPC/EDA实验箱上完成。
它是一个最简单的D/A转换系统,每路图像信号只有1位,只存在0和1的取值,因此最多只显示8种颜色,结构简单,容易实现。
而在拓展电路部分,电阻分压网络与ADV7123视频D/A转换器相比较,实现起来
相对简单,但在色彩的还原表现上要欠缺一些。
电阻分压网络是三路共12位的,其能表现出的色彩最多为12
2 4K色,ADV7123视频D/A转换器为三路共30位的,其每路基色信号都有10
2个色阶。
ADV7123作为专门的视频转换芯片,在功能上肯定比电阻分压网络先进,在成像方面具有较大的优势。
对于两种方案,我们可以根据要求以及实际的需要选择。
第2.5节 VGA显示模块
一、VGA接口
计算机显示器的显示有许多标准,最常见的是VGA。
VGA是Video Graphics Array (视频图形阵列)的缩写,VGA工业标准为640Hz*480 Hz *60 Hz模式,信号类型为模拟类型,显示卡端的接口为15针插座。
接口如图所示:
图2.9VGA接口示意图
VGA接口的1、2、3脚分别接D/A转换器输出的R、G、B三色数字信号,13脚接行同步信号,14脚接场同步信号,5、6、7、8、10脚接地,其余引脚均悬空。
二、VGA显示原理
CRT显示器所用的显示器件是阴极射线管。
CRT显示器主要由电子枪、视频放大电路系统、扫描系统、荧光屏等几部分组成。
人们之所以能在CRT荧光屏上看见所显示的字符或图形,是因为阴极射线管的电子枪发射的电子流经过聚焦后形成电子束,轰击荧光屏,使屏幕上涂的荧光粉发出可见光。
要在屏幕上指定的位置进行显示,需要通过扫描偏转系统产生两个互相垂直的电磁场,控制电子束在水平方向和在垂直方向偏转,从而将电子束引向屏幕的相应位置。
图2.10 显示器成像原理图
CRT显示器可以采用多种扫描方式,主要包括随机扫描和光栅扫描。
在随机扫描方
式中,电子束没有固定的扫描路径,只在显示字符或图形的地方扫描。
因此,扫描控制信号随显示内容的不同而有所不同,这就使扫描电路比较复杂。
光栅扫描有固定的格式,不管屏幕上需要显示或不需要显示的地方,都按统一路径全屏幕扫描。
因此扫描控制信号不随显示画面变化,便得扫描电路比较简单。
因此,光栅扫描被广泛用于字符显示和图形显示器中。
对于VGA显示器,其引出线共含5个信号:R、G、B(3基色信号)、HS(行同步信号)、VS(场同步信号)。
由R、G、B三种基色可以组合出任意所需要的颜色。
在实验的验证阶段可以仅利用R、G、B三种基色的二元化值(0和1)的不同组合来验证设计的正确性。
其不同组合所能成的颜色如表所示:
表2.3 显示器成色表
VGA显示器在一行图像显示完成后,用行同步信号进行行同步,并进行行消隐,行同步信号为低电平有效。
当扫描完所有行时,用场同步信号进行场同步。
并使扫描回到屏幕的左上方,同时进行场消隐,并预备进行下一次的扫描。
场同步信号也同样为低电平有效。
行和场扫描时序图如图所示:
图2.11 VGA行、场扫描时序图
图中,T1为行同步消隐时间,约为6μs;T2为行显示时间,约为26μs;T3为场同步消隐,为两个行周期;T4为场显示时间,为480个行周期。
VGA工业标准要求的频率:
时钟频率(clock frequency):25.175MHz(像素输出的频率)
行频(line frequency):31469Hz
场频(field frequency):59.94Hz(每秒图像刷新频率)
在本系统中,我们用50MHz的有源晶振作二分频,得到25MHz的频率给FPGA 提供时钟信号,因为25MHz约等于像素的输出频率,符合VGA显示的工业标准要求。
第2.6节本章小结
整个设计的硬件电路首先通过实验箱进行调试,将实验箱电源线、并口下载线、十芯线和VGA接口线都正确的连入电路,选择对应的芯片配置引脚、加载,即可完成整个系统实验。
拓展电路板设计的硬件模块包括电源、滤波电路、外部晶振、电阻分压网络D/A转换器、ADV7123视频D/A转换器以及VGA接口电路。
电路板上的两种D/A转换方案是通过跳线选择分开使用的。
FPGA主控制器核心板通过两组排针与拓展电路板相连,即连接对应的EP1K30TC144-3芯片的I/O通信口与时钟信号,进行信号传输。
在拓展系统中,要将实验箱、核心板、拓展电路板三者连接使用。
第3章软件设计
第3.1节 Quartus II及VHDL语言介绍
在本设计系统中,软件的开发平台是ALTERA公司的Quartus II,Quartus II提供了良好的多平台设计环境,它可以轻易满足系统特定的设计需要。
Quartus II 软件拥有FPGA和CPLD设计的所有阶段的解决方案。
下图为Quartus II设计流程的图示说明:
图3.1 Quartus II设计流程图
设计输入是这次系统设计软件部分的关键,对于Quartus II软件,它的工程由所有设计文件和与设计有关的设置组成。
我们可以使用Quartus II Block Editor、Text Editor、Mega Wizard Plug-In manager(Tools菜单)和EDA设计输入工具建立包括ALTERA宏功能模块、参数化模块库(LPM)函数和知识产权(IP)函数在内的设计。
可以使用Settings对话框(Assignments菜单)和Assignment Editor 设定初始设计约束条件。
系统设计中,软件的设计是基于VHDL硬件编程语言,VHDL语言非常适用于可编程逻辑器件的应用设计,它具有功能强大的语言结构,可用简洁明确的代码描述来进行复杂控制逻辑的设计。
VHDL语言具有很高的灵活性,可移植性,是一种设计、模拟、综合的标准硬件描述语言。
第3.2节程序设计
本次系统设计的目标是:运用VHDL语言设计一个简单的图形(初步定为一个圆形),使其能够在VGA显示器指定的区域内,按照指定的轨迹,在预定的时间间隔下运动。
一、VGA显示的时序设计
下图为VGA行扫描、场扫描时序示意图,我们需要根据时序的要求来设计显示模块的程序。
图3.2 行扫描时序示意图
图3.3 场扫描时序示意图
对应行扫描、场扫描时序示意图,以及行扫描、场扫描的时序要求,我绘制了下表:
表3.1 行扫描时序要求(单位:像素,即输出一个像素Pixel的时间间隔)
表3.2 场扫描时序要求(单位:行周期,即输出一个行周期的时间间隔)根据行扫描、场扫描时序要求,时序设计的关键在于规定行(场)同步消隐,行(场)显示时间。
程序如下:
PROCESS(CLK)
BEGIN
IF (RISING_EDGE(CLK)) THEN
IF (HCNT >= 640+8+8) AND (HCNT < 640+8+8+96) THEN
HS <= '0'; //VGA显示的行消隐时间ELSE
HS <= '1';
END IF;
END IF;
END PROCESS;
当显示的点的运动位置在(640+8+8)像素点与(640+8+8+96)像素点之间的时候,进行行消隐。
PROCESS(VCNT)
BEGIN
IF (VCNT >= 480+8+2) AND (VCNT < 480+8+2+2) THEN
VS <= '0'; //VGA显示的场消隐时间ELSE
VS <= '1';
END IF;
END PROCESS;
当显示的点的运动位置在(480+8+2)行与(480+8+2+2)行之间的时候,进行场消隐。
PROCESS(CLK)
BEGIN
IF (RISING_EDGE(CLK)) THEN
IF (HCNT < 640 AND VCNT < 480) THEN
R <= RGBIN(2);
G <= RGBIN(1);
B <= RGBIN(0);
ELSE
R <= '0';
G <= '0';
B <= '0';
END IF;
END IF;
END PROCESS;
以上的一个进程说明了图像的点在显示器上能够显示的位置。
640×480正是VGA显示的工业标准。
二、时钟、频率设计
本系统采用的是一个50MHz的有源晶振,为了产生25MHz的时钟频率,需对50MHz 进行二分频。
我们希望图形每隔1秒钟运动一次,所以需要产生一个1Hz的频率来控制电路。
分频程序如下:
PROCESS(CLK50MHZ)
BEGIN
IF CLK50MHZ'EVENT AND CLK50MHZ = '1' THEN //50MHz二分频
CLK25MHZ <= NOT CLK25MHZ; //产生25MHz的工作频率
END IF;
IF CLK50MHZ'EVENT AND CLK50MHZ = '1' THEN
IF COUNTER = N THEN //N =24999999
COUNTER <= 0; //产生1Hz频率
CLK1HZ <= NOT CLK1HZ;
ELSE
COUNTER <= COUNTER + 1;
END IF;
END IF;
END PROCESS;
利用50MHz的晶振进行二分频,方法是在50MHz的每一个时钟上升沿,对要产生的信号按位取反,即在第一个上升沿取1时,下一个上升沿就取0,依此类推,就产生了25MHz 的频率。
1Hz的频率是在50MHz的时钟计数到N(24999999)时,对要产生的信号按位取反,即产生1Hz频率。
三、图形设计
下面的程序根据VHDL语言的规则,经过反复调试,设计了一个圆,圆的半径为30个像素点。
PROCESS(CLK25MHZ,HPOS,VPOS)
BEGIN
IF CLK25MHZ'EVENT AND CLK25MHZ = '1' THEN
IF (HPOS>HMOV) AND (HPOS<HMOV1) AND (VPOS>VMOV) AND
(VPOS<VMOV1) AND
((HPOS-HMOV2)*(HPOS-HMOV2)+(VPOS-VMOV2)*(VPOS-VMOV2)<900
OR
(HMOV2-HPOS)*(HMOV2-HPOS)+(VPOS-VMOV2)*(VPOS-VMOV2)<900
OR
(HPOS-HMOV2)*(HPOS-HMOV2)+(VMOV2-VPOS)*(VMOV2-VPOS)<900
OR
(HMOV2-HPOS)*(HMOV2-HPOS)+(VMOV2-VPOS)*(VMOV2-VPOS)<900) THEN
RGB <= "111"; //111为3路R、G、B信号组合而成的白色
ELSE //系统中可以根据需要、喜好选择色彩
RGB <= "000";
END IF;
END IF;
END PROCESS;
根据VHDL语言的规则,一个圆形由4个1/4圆组成,在形成图形时,圆形的周围形成了8条放射线,通过设计了一个正方形与圆形相与将8条放射线去除。
四、图像运行轨迹设计
我们此次的设计中,图像的运动选择了一种最简单的轨迹,即从左向右逐行扫描,当一行运行结束以后,自动进入下一行继续从左向右运动,直到运动到最后一行最后一列,然后再重新跳转到第一行第一列进入下一个循环。
PROCESS(CLK1HZ)
BEGIN
IF CLK1HZ'EVENT AND CLK1HZ = '1' THEN
IF (HMOV < 580) THEN
HMOV <= HMOV + 60; //每秒钟,图像向前运动60个像素点ELSE
HMOV <= (OTHERS => '0');
END IF;
END IF;
END PROCESS;
上面的程序定义了在每一行运动的时序,轨迹。
HMOV为圆形的最左侧端点,在640×480的显示区域内,规定了圆形何时运动到行的最末端跳转。
PROCESS(CLK1HZ)
BEGIN
IF CLK1HZ'EVENT AND CLK1HZ = '1' THEN
IF (HMOV < 580) THEN
VCLK<='0'; //图像没有运行完一行,不进入下一行ELSE
VCLK<='1'; //图像运行完一行,使其得到一个信号上升沿END IF;
END IF;
END PROCESS;
上面的程序用来识别图像有无运行结束一个行周期。
PROCESS(VCLK)
BEGIN
IF VCLK'EVENT AND VCLK = '1' THEN
IF (VMOV < 420) THEN //图像每运行完一行VMOV <= VMOV + 60; //就向下运行60个像素点ELSE
VMOV <= (OTHERS => '0');
END IF;
END IF;
END PROCESS;
上面的程序的作用是,当每得到一个VCLK上升沿信号,如果图像没有运行到最后一行,就向下跳转一行;如果已经运行到最后一行,就全屏幕消隐,过后系统进入下一个程序循环。
第3.3节本章小结
系统的主程序通过例化语句与VGA显示程序相连,完成整个程序的运行。
在实验箱上调试的程序,它的R、G、B三基色信号只有0和1的二元化值,当进行拓展实验时,需要将R、G、B信号定义成4位或者10位的位矢量,每一位赋给不同的0和1值,这样就可以显示更加丰富的色彩。