VGA显示控制
实验五vga图显示控制

实验五 VGA图像显示控制一实验目的1.进一步掌握VGA显示控制的设计原理。
2.了解图像的存储和读取方法。
3.进一步掌握4×4键盘或PS/2键盘接口电路设计方法。
4.掌握状态机设计复杂控制电路的基本方法。
二硬件需求1.EDA/SOPC实验箱一台。
三实验原理VGA图像显示控制利用实验三中学习的《VGA显示控制模块》显示存储于ROM中的图像数据。
要显示的图像是四块64*64像素大小的彩色图片,通过键盘控制可以选择不同的图片显示。
图像可以在屏幕上移动(水平和垂直方向每帧分别移动“H_Step”点和“V_Step”点),通过键盘改变“H_Step”和“V_Step”的值即可改变其移动速度和方向。
图像碰到屏幕边沿会反弹回去。
如图5.1所示H_StepV_Step图5.1 VGA图像显示控制示意图实验中要用到4×4键盘、VGA显示控制、ROM等模块,在《实验三常用模块电路的设计》中已经讲述,可以直接使用已做好的模块(可能需要修改部分代码)。
键盘也可以使用PS/2接口键盘,这样可以输入更多的字符。
四实验内容1、图5.2是整个设计的顶层电路。
图5.2 VGA图像显示控制顶层电路图2、实验三中学习的几个模块①“Read_Keyboard”模块与实验三中的4×4键盘模块一致;②四个ROM模块使用宏功能模块实现,并设置其内存初始化文件分别为“FBB.mif”、“dog.mif”、“cat.mif”、“flower.mif”,如图5.3所示。
当然也可以用其他图片(大小为64*64)使用“BmpToMif”软件生成对应的“mif”文件,如图5.4所示。
图5.3 内存初始化文件设置图5.4 获取内存初始化文件(mif文件)③“VGA”模块与实验三中基本一致,只需要在端口中屏蔽“key”端口,并加入“imag_rgb: in std_logic_vector(2 downto 0);”用于从外部输入图像数据。
VGA图像显示控制器设计报告

摘要本实验报告为VGA显示控制器设计报告。
实验设计了基于VHDL描述的VGA显示控制器,通过FPGA控制CRT显示器显示色彩和图形。
完成的功能包括64种纯色的显示、横向和纵向彩色条幅的显示以及正方形色块的运动与控制。
实验的重心放在了显示控制器的系统层面的设计,采用了自顶向下的思路进行设计,系统的核心为有限状态机。
报告中给出了完整的设计思路和过程,并将系统分模块进行了详细的设计,给出了VHDL语言描述。
完成了状态机和核心模块以及系统整体的仿真验证。
最终下载到实验板上测试通过。
关键词:FPGA;VHDL;VGA显示控制;状态机第一部分任务要求 (1)1.1课题要求 (1)1.2设计目标 (1)第二部分系统设计 (2)2.1设计思路 (2)2.2系统结构设计 (4)2.2.1系统结构框图 (4)2.2.2系统逻辑功能划分 (4)2.2.3层次模块划分 (5)2.2.4模块设计图 (8)2.2.5控制器设计 (8)2.2.6状态机设计 (10)2.2.7基本模式设计 (10)2.2.8用户模式设计 (11)2.3系统硬件语言描述 (14)2.3.1VHDL描述思路 (14)2.3.2总体电路的描述 (14)2.3.3分块电路的描述 (18)2.4系统仿真验证 (31)第三部分结果与分析 (35)3.1实现功能说明 (35)3.2器件资源分析 (36)3.3VHDL设计优化 (38)3.4故障和问题分析 (40)第四部分总结与结论 (41)4.1实验结论 (41)4.2总结体会 (41)第五部分附录部分 (43)5.1元器件和仪表清单 (43)5.2VHDL源代码 (43)5.3电路图 (59)5.4参考文献 (67)第一部分任务要求1.1课题要求设计一个 VGA 图像显示控制器。
1.显示模式为 640×480×60Hz 模式;2.用拨码开关控制 R、G、B(每个2 位),使显示器可以显示64 种纯色;3.在显示器上显示横向彩条信号(至少 6 种颜色);4.在显示器上显示纵向彩条信号(至少 8 种颜色);5.在显示器上显示自行设定的图形、图像等。
VGA 图像显示控制器设计报告

O~P:场消隐期即同步,相当于还原扫描坐标吧
P~Q:场消隐后肩相当于准备开始扫描吧
Q~R:场显示期扫描中,数据有效区域
R~S:场消隐前肩完成扫描,相当于准备同步
以下是行扫描,场扫描HS,VS时序图:
图6
如上图所示:VGA一直在扫描,每一场的扫描包括了若干行扫描,反复循环。且在640*480@60Hz的标准下,每秒需要输出25.175M像素,即每秒输出31469行,也即每秒输出60张图。其工业标准如下图所示:
图7
此部分代码见附录。原理图如下:
图8
3、
数据存储模块调用LPM_ROM模块。具体设置如下:
图9
该模块用于存储图像数据。数据位宽为3,地址线为32768.
原理图如下:
图10
存储与该ROM的图像数据原为BMP格式,为使其可以存储于ROM内部,需要使用软件将信息转换。本实验使用3位数据存储颜色信息,因此仅能显示8中颜色,具体对应关系如下表所示:
显示带宽:带宽指的显示器可以处理的频率范围。如果是60Hz刷新频率的VGA,其带宽达640x480x60=18.4MHz,70Hz的刷新频率1024x768分辨率的SVGA,其带宽达1024x768x70=55.1MHz。
时钟频率:以640x480@59.94Hz(60Hz)为例,每场对应525个行周期(525=10+2+480+33),其中480为显示行。每场有场同步信号,该脉冲宽度为2个行周期的负脉冲,每显示行包括800点时钟,其中640点为有效显示区,每一行有一个行同步信号,该脉冲宽度为96个点时钟。由此可知:行频为525*59.94=31469Hz,需要点时钟频率:525*800*59.94约25MHz
VGA简单图像显示控制模块设计

VGA简单图像显示控制模块设计一、实验目的随着数字图像处理的应用领域的不断扩大,其实时处理技术成为研究的热点。
EDA (电子设计自动化)技术的迅猛发展为数字图像实时处理技术提供了硬件基础。
其中FPGA 的特点适用于进行一些基于像素级的图像处理。
LCD 和CRT 显示器作为一种通用型显示设备,如今已经广泛应用于工作和生活中。
与嵌入式系统中常用的显示器件相比,它具有显示面积大、色彩丰富、承载信息量大、接口简单等优点,如果将其应用到嵌入式系统中,可以显著提升产品的视觉效果。
为此,尝试将VGA 显示的控制转化到FPGA 来完成实现。
利用可编程器件CPLD/FPGA实现VGA彩色显示控制器在工业现场中有许多实际应用。
以硬件描述语言VHDL对可编程器件进行功能模块设计、仿真综合,可实现VGA显示控制器显示各种图形、图像、文字,并实现了动画效果。
二、实验概要1、VGA输出利用FPGA 设计一个类似点阵LCD 显示的VGA 显示控制器,可实现文字及简单的图表显示。
工作时只需将要显示内容转换成对应字模送入FPGA,即可实现相应内容的显示。
2、LCD1602显示显示VGA图像输出信息。
3、按键控制选择要显示的图片或内容等等。
4、声光提示LED与蜂鸣器,用于警告提示或其他功能标识。
5、 VGA 接口及设计参数VGA接口是与显示器进行通信的唯一接口。
通过CPLD/FPGA器件对RGB信号、行同步信号、场同步信号等信号的控制,并参照有关标准,可以实现对VGA显示器的控制。
由此可见,了解接口标准,控制时序和设定恰当的参数是系统设计的关键。
参照VGA主要参数的工业标准,像素输出频率为25.175MHz;行频(线频率)为31.469KHz;场频(刷新率)为59.94Hz。
参数设计原理以及行同步信号(Ts)与显示信号(Tdis)的关系如图1所示。
6、 VGA 图像控制器的设计方案VGA图像控制器是一个较大的数字系统。
采用模块化设计原则,借鉴自顶而下的程序设计思想,进行功能分离并按层次设计。
vga图像显示控制

VGA图像显示控制器一、摘要和关键词摘要:VGA显示屏显示采用逐行扫描的方式解决,阴极射线枪发出电子束打在涂有荧光粉的荧光屏上,产生GRB基色,合成一个彩色像素。
扫描从屏幕的左上方开始,从左到右,从上到下,逐行扫描,每扫完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT对电子束进行消隐,每行结束时,用行同步信号进行行同步;扫描完所有行,用场同步信号进行场同步,并使扫描回到屏幕的左上方,同时进行场消隐,并预备进行下一次的扫描。
通过控制扫描计数器不同值时对RGB三原色信号的控制,来完成显示设计。
关键词:行列扫描行列同步RGB三原色控制二、设计任务要求实验目的1. 熟练掌握VHDL 语言和QuartusII 软件的使用;2. 理解状态机的工作原理和设计方法;3. 掌握利用EDA 工具进行自顶向下的电子系统设计方法;4. 熟悉VGA 接口协议规范。
实验要求:设计一个VGA 图像显示控制器,达到如下功能:显示模式为640×480×60HZ 模式;用拨码开关控制R、G、B(每个2 位),使显示器可以显示64种纯色;在显示器上显示横向彩条信号(至少6 种颜色);在显示器上显示纵向彩条信号(至少8 种颜色);在显示器上显示自行设定的图形、图像等。
选做:自拟其它功能。
三、实验原理1、显示控制原理常见的彩色显示器一般由阴极射线管(CRT)构成,彩色由GRB(Green Red Blue)基色组成。
显示采用逐行扫描的方式解决,阴极射线枪发出电子束打在涂有荧光粉的荧光屏上,产生GRB基色,合成一个彩色像素。
扫描从屏幕的左上方开始,从左到右,从上到下,逐行扫描,每扫完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT、对电子束进行消隐,每行结束时,用行同步信号进行行同步;扫描完所有行,用场同步信号进行场同步,并使扫描回到屏幕的左上方,同时进行场消隐,并预备进行下一次的扫描。
VGA显示控制器控制CRT显示图象的过程如图1所示2、VGA时序信号计算机内部以数字方式生成的显示图像信息,被显卡中的数字/模拟转换器转变为R、G、B 三原色信号和行、场同步信号,信号通过电缆传输到显示设备中。
VGA显示控制_常熟理工学院

课程设计报告课程EDA课程设计题目VGA显示控制院系物理与电子工程学院年级2011级专业电子科学与技术班级电科112学号050211202050211207050211208050211210学生姓名陈启、李伟阳、李钟奇、刘贵晶指导教师张惠国设计时间目录第1章绪论 (1)1.1EDA技术的发展 (1)1.2课程设计的任务 (2)第2章课题背景 (2)2.1选题背景 (2)2.2国内外文献综述 (3)2.2.1显示技术发展史 (3)2.2.2各种显示器的显示原理 (3)2.2.3显示标准的发展 (6)2.2.4VGA概述及其接口 (7)第3章VGA显示控制的相关理论 (9)3.1VGA显示控制 (9)3.2RGB颜色模型 (11)第4章VGA显示控制器的VHDL设计 (11)4.1显示控制器的整体设计 (11)4.2彩条信号发生器设计 (12)第5章VGA实验实现的结果 (15)5.1VGA显示输出 (15)5.1.1VGA显示的竖直彩条信号 (15)5.1.2VGA显示的横向彩条信号 (15)参考文献 (16)总结体会 (16)第1章绪论1.1EDA技术的发展我们已经进入数字化和信息化的时代,其特点就是各种数字产品的广泛应用。
现代数字产品在性能提高复杂度增大的同时,更新换代的速度也越来越快,实现这种进步的因素在于芯片制造技术和设计技术的进步。
前者以微细加工技术为代表,目前已进展到深亚微米阶段,可以在几平方厘米的芯片上集成数千万个晶体管。
后者的核心就是EDA技术,EDA是指以计算机为工作平台,融合应用电子技术、计算机技术、智能化技术最新成果而研制成的电子CAD 通用软件包。
在现代数字系统的设计中,EDA技术已成为一种普遍的工具。
对设计者而言,熟练的掌握EDA技术,可以极大的提高工作效率,起到事半功倍的效果。
无论是设计集成电路还是普通设计的电子线路,没有EDA工具的支持是难以完成的。
EDA技术的使用包括电子工程师进行电子系统的开发的全过程,以及进行开发设计涉及的各个方面。
VGA显示控制器设计——功能设计

VGA显示控制器设计主要功能及技术指标:1 可实现系统复位和清零,复位后屏幕显示为黑色。
2 支持多种简单彩色背景更换,利用拨码开关,可以更换背景。
3 实现在背景上显示字符串功能4 条件允许的情况下可以支持字符串以一定的路径循环展示的功能。
设计目标:1 设置复位和清零的按键,复位后屏幕显示黑色,清零后,屏幕不显示。
2 背景颜色:纯色显示,彩色条纹显示,文字显示;(三种模式);设置三个开关,分别控制三种显示模式。
3 设置拨码开关,用来切换屏幕背景的颜色。
纯色显示:拨码开关控制屏幕背景的颜色;显示8种颜色彩色条纹显示:拨码开关控制彩色条纹的形式;横状条纹,竖状条纹;文字显示:拨码开关控制文字显示形式;A 屏幕中心显示不动B 左右平移运动C 上下平移运动4字符显示文字显示3种子模式:1)子模式1是沿固定轨迹运动模式,固定图形沿水平方向运动,行运动到边界后折回到下一行继续水平运动;2)子模式2是反弹球模式,固定图形在矩形屏幕做内直线运动,到边界后沿反射角方向反弹,周而复始;3)子模式3是受控运动模式,使用上下左右4个按键控制固定图形在屏幕内的运动方向;基本设计思路:1 根据功能选择硬件电路的设计和选择。
2 将功能分为各个模块,编程实现各部分的功能。
3 下载仿真验证。
主要问题:1 VGA显示器的选择 CRT LED LCD(工作原理和显示方式不同,但控制信号和控制方式是相同的。
)芯片选择分屏显示技术、矩阵切换技术2 模块划分分频模块显示模块控制模块字符编码模块设计思路:1 系统功能分析和描述2 系统层次模块划分3 硬件语言描述4 仿真验证功能状态设计三种显示模式:Sw1-sw0 控制三种模式的切换s0 s1 s21 纯色//8种纯色显示:红绿青蓝紫黄白黑Sw7-sw2 每两位分别控制RGB显示64种纯色拨动开关更换颜色2 彩色条纹横条纹和竖条纹条纹颜色:红绿青蓝紫黄白黑Sw8拨动开关控制条纹样式的显示状态us0 us13 文字静止显示上下滚动左右滚动Sw9 sw10 拨动开关控制文字显示样式状态 usw0 usw1 usw2。
VHDL语言VGA显示控制

EDA大作业实验报告基于VHDL语言的VGA显示与控制1111000079 田宇1111000081 王坤目录1.VGA显示原理 (3)1. 1 VGA逐行扫描显示 (3)1. 2 VGA时序分析 (3)2.时序部分的代码实现 (3)2.1时序部分主要代码 (3)2.2时序部分的实现 (4)2.2. 1 行时序 (4)2.2.2场时序 (5)3.控制部分的代码实现 (5)3.1控制部分主要代码 (5)3.2控制部分的实现 (12)3.2.1彩条与彩格 (12)3.2.2字体显示 (12)4.硬件平台实验 (12)1- VGA显示原理1.1 VGA逐行扫描显示逐行扫描是扫描从屏幕左上角一点开始,从左像右逐点扫描,每扫描完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT对电子束进行消隐,每行结束时,用行同步信号进行同步:当扫描完所有的行,形成一帧,用场同步信号进行场同步,并使扫描回到屏幕左上方,同时进行场消隐,开始下一帧。
1.2 VGA时序分析9.水-麻------------ f荷同步r_ IVGA的行时序\同歩1同步~1牀冲8睐冲.| ------场消(ft何隔VGA的场时序0-1)2.时序部分的代码实现2.1时序部分主要代码if eve nt and ck=,T then H<=H+1 oif H>15 and H<110 then Hs<=> T。
elsif H>=110 then Hs<= 0J。
if H>=160 and H<800 then Hen<=, T。
elsif H=800 then Hen<=,O'。
H<=Ooend ifoend ifoend ifoif Hs' event and Hs=,T then V<=V+1oif V>11 and V<14 then Vs<=, 1'。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于FPGA 的VGA显示控制摘要VGA(Video Graphics Array)即视频图形阵列,是IBM公司1987年推出的一种传输标准,具有分辨率高、显示速率快、颜色丰富等优点,在彩色显示器领域得到了广泛应用。
本次课程设计是基于FPGA和主芯片为 EP4CE30F23C8N的ALTER公司的开发板Cyclone IV来实现的。
数字图像信息在VGA接口显示器正确、完整地显示,涉及到时序的构建和数字图像信息的模拟化两方面,提出一种能够广泛应用的VGA显示接口方案,详细阐述了数字图像数据DA转化并输出到VGA接口显示器显示的方法,其中包括接口的硬件设计、视频DA转换器的使用方法、通过FPGA构造VGA时序信号的方法等等。
方案可以应用于各种仪器,数字视频系统、高分辨率的彩色图片图像处理、视频信号再现等。
课设主要用到的芯片是ADV7123,它是一款高速、高精度数模转换芯片。
拥有三路十位D/A转换器,能够将代表颜色的数据锁存到数据寄存器中,然后通过D/A 转换器转换成模拟信号输出,得到我们要的色彩。
VGA显示的硬件设计和原理1.1 FPGA主芯片课程设计所用开发板的主芯片是EP4CE30F23C8N——Cyclone IV,其由Altera公司开发,值得注意的是该开发板所支持的QUARTUS II的版本较高,并且11.0的版本较12.0的版本编译好的程序更好下载。
图-11.2 ADV7123实现VGA的控制显示主要用到的芯片就是ADV7123,ADV7123由完全独立的三个I0位高速D/A转换器组成,RGB(红绿蓝)视频数据分别从R9~R0、G9~G0、B9~B0输入,在时钟CLOCK的上升沿锁存到数据寄存器中,然后经告诉D/A转换器转换成模拟信号。
三个独立的视频D/A转换器都是电流型输出,可以接成差分输出,也可以接成单端输出。
DE2-115上按单端输出,在模拟输出端用75欧姆电阻接地,以满足工业标准。
低电平有效的BLANK信号为复合消隐信号,当BLANK为低电平时,模拟视频输出消隐电平,此时从R9~R0,G9~G0,B9~B0输入的所有数据被忽略。
BLANK和SYNC都是在CLOCK 的上升沿被锁存的。
图-2是ADV7123的功能原理图:图-2图-3是它的引脚图:图-3引脚功能描述:G0-G9,B0-B9,R0-R9:像素数据输入端口,上升沿来临锁存数据;BLANK:复合空白信号控制输入;CLOCK:65MHz时钟输入端口;IOB,IOG,IOR:像素实时输出端口;SYNC:复合同步控制输入。
图-4是ADV7123 的时序图:图-4开发板与显示器的端口连接:连接头如图-5所示,15个管脚里面5个是最重要的,他们包括三个基本红、绿、蓝三条基本色彩线和水平与垂直两条控制线,有这5条控制线,我们可以在屏幕上显示多种颜色,在开发板上,红、绿、蓝三条基本色彩每条都由10条输入线控制,课设中用到其中8条,可以实现显示真彩色BMP图像图-5图-6是原理图:图-62.同步时序的实现2.1 VGA时序原理我们常把要显示的数据如图像处理结果存放到存储器里,如果要把显示存储器里的图像在VGA接口显示器显示,大多情况下,扫描时序是需要我们构造的。
以1024@768,59.94 Hz(60 Hz)为例。
VGA工业标准规定,如图2,每场信号对应806个行周期,其中768行为图像显示行,每场有场同步信号,该脉冲宽度为6个行周期的负脉冲;每显示行包括1344点时钟,其中1024点为有效显示区,每行有一个行同步信号负脉冲,该脉冲宽度为136个点时钟。
这样我们可以知道,行频为1344@59.94 Hz即80559 Hz,需要的点时钟频率为:806@1344@59.94 Hz约65 MHz。
图7 、8行场同步信号时序图图-7图-8同步信号,如场同步、行同步、符合同步信号可以在FPGA里构建。
选取65 MHz 的晶振作为点时钟CLOCK输入,将CLOCK输入到模等于1344的像素脉冲计数器中,当像素脉冲计数在0到136脉冲间输出低电平,其它输出高电平,以此作为行同步信号Hsys;然后以vga_hs行节拍为单位进行计数,当计到0到6时输出低电平,其它输出高电平,当计了806个行同步信号时,计数器清0,以此作为场同步信号vga_vs。
根据图-9,可以控制在屏幕上显示不同的图形,要注意行消隐和场消隐时间。
图-9其中行时序和场时序都要产生同步脉冲(sync a)、显示后沿(back porch b)、显示时序段(displayinterval c)和显示前沿4个部分,各部分所占的时间如上图所示。
2.2软件实现(1)产生hs行同步脉冲,宽度136pix;if(hcnt[10:8]==3'd0&&(hcnt[7]==1'b0||hcnt[7:4]==4'd0)) //-- 0~135beginvga_hs <= 1'b0;endelsebeginvga_hs <= 1'b1;end(2)产生vs场同步脉冲, 宽度 6个vgahs宽度;if(vcnt[9:3]==7'd0&&vcnt[2:1]!=2'b11) //-- 0~5beginvga_vs <= 1'b0;endelsebeginvga_vs <= 1'b1;end3.总体设计总体设计一共包含4个模块,包含2个分频模块,1个计数模块,1个控制显示模块,具体设计如下:(1)由于系统时钟为50MHz,但是要65MHz的输入时钟,可以通过锁相环,比例为13/10,具体方法:Tools->MagaWizard Plug-In Manager->Create a new custom megafuctionvariation->ALTPLL->Verilog HDL另外还要设计一个50M分频来控制每幅画面显示的时间,代码如下:module div50M(clkin,clkout);input clkin;output clkout;reg clkout;reg [25:0]cnttemp;always @(posedge clkin )beginif(cnttemp==49999999)begincnttemp <= 1'b0;endelsebeginif(cnttemp==25000000)beginclkout <= 1'b1;endelsebeginclkout <= 1'b0;endcnttemp <= cnttemp+1'b1;endend(2)计数模块长度为3位,从000到111一共8种情况。
连接50M分频,计数器左边接50M分频,每当上升沿来临时,计数器加1,通过输出值得不同展现不同画面。
(3)控制模块包括时序的控制以及同步、显示的时间的设计,同时为了得到不同的颜色,根据不同颜色相加可以配成第三种颜色,下图为配色方案,具体可以通过程序来实现,因为分别采用的是8位来表示三基色,每一种三基色都有1到255种情况,因此可以配出多种颜色,图-10为配色方案:图-10设计好这四个模块,画出原理图-11:图-114.程序调试将画好的原理图分配好引脚,进行编译,以下是我在调试中遇到的问题,以及解决方法。
(1)刚开始会出现很多语法错误的问题,这需要认真检查源程序,比如有些地方一句话结束,没有加分号,还有的符号用的中文符号,也会出编译错误;有的地方如一个if必须对应一个else,一个begin对应一个end,这些基本的错误要认真检查。
(2)行同步与场同步的时间要严格控制,如果控制不当有可能会损坏显示器,这个要根据图-9,找到1024*768@60的相应时序设计。
(3)关于计数参数vga_en的case语句,一个要注意语法问题,另外就是通过case语句控制显示不同画面,如显示横条或是竖条怎么设计,要明白这个语句的作用是控制显示的位置。
这里要注意的是通过hcnt和vcnt控制显示那些行和哪些列,只要该行不显示,则不管它对应的列是显示还是不显示,该行都不显示。
(4)关于行像素点计数参数hpixcnt的case语句,hpixcnt是一个位宽为10位的矢量,当取最高位为0时在行像素点0到512显示一种颜色,取1时在行像素点513到1024可以显示另一种颜色,当取高两位时有四种选择,高三位则有8中颜色选择。
显示的部分图像如下:5.课设总结经过两周的课设,使我对FPGA有了更深刻的理解,从选择课题,到着手设计以及出现效果,这过程中需要不断改进,不断获取信息,深刻理解其工作原理,才能找到实现的方法。
刚开始,对视频显示没有多少了解,通过看芯片资料,网上查阅论文资料,才慢慢对其有一定了解,然后是研究其显示原理,以及时序的相关问题。
由于对verilog语言不是很了解,还需要了解其基本语法,掌握基本的分频、计数模块的设计方法。
但是这些还不够,最最重要的的是控制模块,这个过程我借鉴了一些其它资源,研究它的原理、作用。
然后通过不断地调试得到自己想要的效果。
在调试的过程中,首先就是要小心,避免一些基本语法的错误,然后就是要根据时序的关系,控制显示输出,不仅要考虑到显示的的位置,显示的色彩,还要控制显示的时间等问题。
在今后的学习中,要谨慎治学,多思考,多翻阅书籍。
遇到不懂的问题应该多渠道查找信息,平时多练习,培养研究能力,只有这样才能在今后的学习中不断进步。
这次课程设计也是汲取经验的过程,通过不断积累经验,才能更好地解决问题。
6.主要程序清单`timescale 1ns / 1psmodule vga_top(clk65M,//输入时钟rstn, //复位vga_en, //0到7计数,显示8帧不同画面vga_hs, //行同步信号vga_vs, //场同步信号vga_r,vga_g,vga_b,vga_blk, //复合空白信号vga_syn, //复合同步信号控制输出vga_clk //输出时钟);input c lk65M;input r stn;input [2:0]vga_en;output vga_hs;output vga_vs;output [7:0]vga_r; //要显示真彩色BMP图像,r,g,b三个分量各需要8位 output [7:0]vga_g;output [7:0]vga_b;output vga_blk;output vga_syn;output vga_clk;reg vga_vs;reg[7:0] vga_r; //声明一个8位的矢量寄存器变量reg[7:0] vga_g;reg[7:0] vga_b;wire vga_blk;wire vga_syn;wire vga_clk;reg [10:0]hcnt; //声明一个11位的矢量寄存器变量,行的像素点计数reg [9:0]vcnt; //行计数reg vgahs1;reg hdisply; //控制行各点的显示reg vdisply; //控制行的显示reg frminit;assign vga_clk = clk65M;assign vga_syn = 1'b0;//--assign vga_blk = vga_vs&vga_hs;assign vga_blk = vdisply&hdisply; //将vdisplay和hdisplay相与赋给vga_blk always @(posedge clk65M or negedge rstn)beginif(!rstn)//rstn低电平复位,重新扫描beginhcnt <= 11'd0;vcnt <= 10'd0;vga_hs <= 1'b1;vga_vs <= 1'b1;vgahs1 <= 1'b0;hdisply <= 1'b0;vdisply <= 1'b0;frminit <= 1'b0;elsebeginif(hcnt==11'd1343) // 1344pix;有效显示宽度为1024pix beginhcnt <= 11'd0;endelsebeginhcnt <= hcnt + 1'b1;endif(hcnt[10:8]==3'd0&&(hcnt[7]==1'b0||hcnt[7:4]==4'd0)) //-- 0~135beginvga_hs <= 1'b0; //-- 产生hs行同步脉冲,宽度136pix;endelsebeginvga_hs <= 1'b1;endcase(vga_en)3'b000:beginif((hcnt[10:0]>295)&&(hcnt[10:0]<1320))beginhdisply <= 1'b1;endelsebeginhdisply <= 1'b0;if((vcnt[9:0]>28)&&(vcnt<803))beginvdisply <= 1'b1;endelsebeginvdisply <= 1'b0;endend3'b001:beginif((hcnt[10:0]>295)&&(hcnt[10:0]<1320)) beginhdisply <= 1'b1;endelsebeginhdisply <= 1'b0;endif((vcnt[9:0]>28)&&(vcnt<413))beginvdisply <= 1'b1;endelsebeginvdisply <= 1'b0;endend3'b010:if((hcnt[10:0]>295)&&(hcnt[10:0]<1320)) beginhdisply <= 1'b1;endelsebeginhdisply <= 1'b0;endif((vcnt[9:0]>28)&&(vcnt<803))beginvdisply <= 1'b1;endelsebeginvdisply <= 1'b0;endend3'b011:beginif((hcnt[10:0]>295)&&(hcnt[10:0]<1320)) beginhdisply <= 1'b1;endelsebeginhdisply <= 1'b0;endif((vcnt[9:0]>28)&&(vcnt<797))beginvdisply <= 1'b1;elsebeginvdisply <= 1'b0;endend3'b100:beginif((hcnt[10:0]>295)&&(hcnt[10:0]<1320)) beginhdisply <= 1'b1;endelsebeginhdisply <= 1'b0;endif((vcnt[9:0]>28)&&(vcnt<803))beginvdisply <= 1'b1;endelsebeginvdisply <= 1'b0;endend3'b101:beginif((hcnt[10:0]>295)&&(hcnt[10:0]<1320)) beginhdisply <= 1'b1;endbeginhdisply <= 1'b0;endif((vcnt[9:0]>220)&&(vcnt<420))beginvdisply <= 1'b1;endelsebeginvdisply <= 1'b0;endend3'b110:beginif((hcnt[10:0]>295)&&(hcnt[10:0]<551)) beginhdisply <= 1'b1;endelsebeginhdisply <= 1'b0;endif((vcnt[9:0]>419)&&(vcnt<611))beginvdisply <= 1'b1;endelsebeginvdisply <= 1'b0;end3'b111:beginif((hcnt[10:0]>807)&&(hcnt[10:0]<1320)) beginhdisply <= 1'b1;endelsebeginhdisply <= 1'b0;endif((vcnt[9:0]>35)&&(vcnt<797))beginvdisply <= 1'b1;endelsebeginvdisply <= 1'b0;endendendcasevgahs1 <= vga_hs;if(vga_hs==1'b0&&vgahs1==1'b1)beginif(vcnt==10'd805)beginvcnt <= 10'd0;frminit <= 1'b1;endelsevcnt <= vcnt + 1'b1;endendelsebeginfrminit <= 1'b0;endif(vcnt[9:3]==7'd0&&vcnt[2:1]!=2'b11)beginvga_vs <= 1'b0;endelsebeginvga_vs <= 1'b1;end endendreg [9:0]hpixcnt;reg [7:0]frmdtmp;always @(posedge clk65M or negedge rstn)beginif(!rstn)beginvga_r <= 8'd0;vga_g <= 8'd0;vga_b <= 8'd0;hpixcnt <= 10'd0;frmdtmp <= 8'd100;endbeginif(hdisply==1'b1)beginhpixcnt <= hpixcnt + 1'b1; endelsebeginhpixcnt <= 10'd0;end if(frminit==1'b1)beginfrmdtmp <= frmdtmp + 1'b1;endcase(vga_en)3'b000:beginvga_r <= 8'd250;vga_g <= 8'd100;vga_b <= 8'd50;end3'b001:begincase(hpixcnt[9])1'd1:beginvga_r <= 8'd100;vga_g <= 8'd250;vga_b <= 8'd0;end1'd0:vga_r <= 8'd100;vga_g <= 8'd250;vga_b <= 8'd200;endendcaseend3'b010:beginvga_r <= 8'd250;vga_g <= 8'd0;vga_b <= 8'd250;end3'b011:begincase(hpixcnt[9:8])2'd0:beginvga_r <= 8'd250;vga_g <= 8'd200;vga_b <= 8'd0;end2'd1:beginvga_r <= 8'd0;vga_g <= 8'd250;vga_b <= 8'd200; end2'd2:beginvga_r <= 8'd200;vga_g <= 8'd0;vga_b <= 8'd250; end2'd3:beginvga_r <= 8'd250;vga_g <= 8'd250;vga_b <= 8'd250; endendcaseend3'b100:begincase(hpixcnt[9:7])3'b000:beginvga_r <= 8'd250;vga_g <= 8'd200;vga_b <= 8'd0;end3'b001:beginvga_r <= 8'd0;vga_g <= 8'd250;vga_b <= 8'd200; end3'b010:beginvga_r <= 8'd200;vga_g <= 8'd0;vga_b <= 8'd250; end3'b011:beginvga_r <= 8'd250;vga_g <= 8'd250;vga_b <= 8'd250; end3'b100:beginvga_r <= 8'd250;vga_g <= 8'd200;vga_b <= 8'd0;end3'b101:beginvga_r <= 8'd0;vga_g <= 8'd250;vga_b <= 8'd200; end3'b110:beginvga_r <= 8'd200;vga_g <= 8'd0;vga_b <= 8'd250; end3'b111:beginvga_r <= 8'd250;vga_g <= 8'd250;vga_b <= 8'd250;endendcaseend3'b101:beginvga_r <= 8'd250;vga_g <= 8'd250;vga_b <= 8'd0;end3'b110:beginvga_r <= 8'd250;vga_g <= 8'd0;vga_b <= 8'd0;end3'b111:beginvga_r <= 8'd250;vga_g <= 8'd100;vga_b <= 8'd50;endendcase endendendmodule26。