VGA学号显示程序实验报告文档格式.docx
- 文档编号:16232624
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:14
- 大小:262.39KB
VGA学号显示程序实验报告文档格式.docx
《VGA学号显示程序实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《VGA学号显示程序实验报告文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
在通用的标准中,VGA的像素输出频率为25.175MHz,行频率是31.496KHz,场频率是59.94Hz。
分辨率为640*480,即每行显示640个像素,每场显示480行。
这640*480是显示器的有效显示区(Visiblearea),除此之外,还有行、场消隐区(BackPorch),以及行、场同步区(SyncPulse)以实现行列的同步操作。
如果利用实验室的液晶屏,可以增加分辨率至800*600,在这个标准下屏幕的刷新频率设为72Hz,行频率是48.08KHz。
FPGA需实现的扫描时序如下图:
显示控制器是一个较大的数字系统,采用模块化设计原则、借鉴自顶向下的程序设计思想,进行功能分离并按层次设计。
利用VHDL硬件描述语言对每个功能模块进行描述,并逐一对每个功能模块进行编译仿真,使顶层VGA显示控制器的模块实体仿真综合得以顺利通过。
VGA显示控制器主要由以下模块组成:
分频模块、VGA时序控制器模块、彩条图形生成模块、VGA显示模块、存储模块等,如图1所示。
图1基于FPGA的VGA显示控制系统框图
3.1.1VGA时序控制器模块
图片想要在显示器上显示出来,它主要需要5个信号,行同步信号(HS)、场同步信号(VS)和RGB三基色信号。
VGA时序控制模块是须严格按照VGA时序标准产生相应的脉冲信号。
对这5个信号的时序驱动,VGA显示器要严格遵守“VGA工业标准”,即640*480*60Hz模式,否则会损坏VGA显示器。
VGA工业标准要求的频率是:
时钟频率为25.175MHz,行频为31469Hz,场频为59.94Hz。
VGA的时序不是直接由模拟信号产生的,而是由数字信号控制的,为了将数字信号变成模拟信号,中间要经过D/A转换器(THS8134)处理。
VGA接口的显示是通过行、场扫描的方式实现对显示器进行扫描控制实现的。
图2为VGA行扫描、场扫描的时序图。
图2VGA行扫描、场扫描时序图
3.1.2彩条图形生成模块
作为测试模式,该模式可以测试所连接的显示器以及整个VGA显示系统是否正常工作。
在彩条生成模块中产生横彩条和竖彩条,横彩条通过场计数器vcnt计数进行控制,以显示相应的颜色。
设计产生16个彩条,将480行的像素16等份,用vcnt来控制计数区域,不同的区域赋予不同的颜色值。
竖彩条的显示原理与横彩条相似,只是使用行计数器hcnt来进行计数,把每行的640个像素16等份。
一帧屏幕的显示是由600行从上至下扫描,800列从左至右填充(这也是为什么每当电脑几乎要当机的时候,视屏显示从上之下的延迟扫描)然而微观上,一行的行扫描是由超过800个列填充完成,一帧图像超过600行扫描。
实际上是VGA的时序在作怪。
上图是有关HSYNC和VSYCNC的时序图,以800x600x60Hz为例,信息如下:
800X600X50HZ
a段
b段
c段
d段
e段总共n个列像素
HSYNCSignal
列像素
128
88
800
40
1056
o段
p段
q段
r段
s段总共n个行像素
VSYNCSignal
行像素
4
23
600
1
628
HSYNCSignal是用来控制“列填充”,而一个HSYNCSignal可以分为4个段,也就是a(同步段),b(后肩段),c(激活段),d(前肩段)。
HSYNCSignal的a是拉低的128个列像素,b是拉高的88个列像素,至于c是拉高的800个列像素,而最后的d是拉高的40个列像素。
一列总共有1056个列像素。
VSYNCSignal是用来控制“行扫描”。
而一个VSYNCSignal同样可以分为4个段,也是o(同步段),p(后肩段),q(激活段),r(前肩段)。
VSYNCSignal的o是拉低的4个行像素,p是拉高的23个行像素,至于q是拉高的600个行像素,而最后的r是拉高的1个行像素。
一行总共有628个行像素。
“一个行像素”是以“列像素为单位”来定义(以800x600x60Hz为例)如下所示:
1个行像素=1056个列像素。
而“一个列像素”是以“时间位单位”来定义(以800x600x60Hz为例),如下所示:
1个列像素=25ns。
1个行像素=1056个列像素=1056x25ns=2.64us。
(以800x600x60Hz为例)上述内容读者可以发现一个事实,要完成一行的扫描,需要1056个列像素,也就是说需要1056x25ns的时间。
如果要完成所有行的扫描的话,需要628x1056x25ns的时间。
很遗憾的是,不是所有时间都用来显示图片,有一部分的时间是用来同步操作。
而HSYNCSignal只有在的C段和VSYNCSignal的q段的激活段,数据的输入才有效。
3.1.3显示模块
显示模块是整个显示控制器的重要组成部分,各个模块的输出数据都要经过模块处理后送到显示器。
显示模块在VGA显示控制器中起至关重要的作用。
显示模块的输出信号通过D/A转换器的转换连到VGA接口,它是控制器和显示器进行通信的桥梁。
该模块以可以VHDL语言实现。
VGA显示器上的每个像素点可有多种颜色,由三基色信号R,G,B组合构成,VGA在指定色版颜色时,一个颜色频道有6个bit,红、绿、蓝各有64种不同的变化,因此总共有262,144种颜色。
在这其中的任何256种颜色可以被选为色版颜色(而这256种的任何16种可以用来显示CGA模式的色彩)。
如R,G,B信号分别用多位表示的话,则屏幕上现实的颜色会大大丰富,但会好用更多的存储空间,另外还需要配置相应D/A转换器。
本例采用三位R,G,B信号。
颜色
黑
蓝
绿
品
红
青
黄
白
R
1
G
B
行扫描时序要求(单位:
像素,即输出一个像素Pixel的时间间隔)
行同步头
行图像
行周期
对应位置
H_tf
H_ta
H_tb
H_tc
H_td
H_te
H_tg
时间Pixels
8
96
40
640
800
场扫描时序要求(单位:
行,即输出一行Line的时间间隔)
V_tf
V_ta
V_tb
V_tc
V_td
V_te
V_tg
时间Lines
2
25
480
525
根据以上的行,场扫描时许的要求,我们可设置两个计数器,一个行扫描计数器hcnt,进行模800计数;
另一个是场扫描计数器vcnt,进行模525计数。
行扫描计数器的驱动时钟频率(像素的输出频率)按照VGA的工业标准的25.175MHZ。
场扫描计数器以行同步信号hs为驱动时钟,当hs下降沿到来时进行计数。
设置完计数器后,就可对行图像H_td和场图像V_td所对应的640*480个点赋值。
具体实现的程序如下:
/*clock50MHZ:
输入时钟,采用50MHZ;
key:
彩条选择信号;
rgb:
输出三基色;
hs:
行同步信号;
vs:
场同步信号
3.1.4存储模块
当VGA显示器要显示一帧图像时,就会需要比较大的数据量,FPGA芯片内置的ROM存储器难以满足这么大的数据存储要求,必须把图像数据放入外部的存储器中。
FPGA的外部存储器可以有多种选择,如ROM、EEPROM、SDRAM等。
采用何种存储器将最终决定读取控制器的数据读取方式。
如ROM可以用直接产生地址信号的方式对芯片进行访问,而SDRAM常常利用DMA控制方式配合CPU进行读写操作。
本设计采用型号为28C040的4MEEPROM外部存储器,可以在单片内存储整个屏幕的图像。
3.2程序设计:
moduleVGA(clk,reset,vs,hs,red,grn,blu);
inputclk;
//输入时钟,20MHz
inputreset;
//复位
outputvs;
outpuths;
outputred;
outputgrn;
outputblu;
regvs=1;
//场同步
reghs=0;
//行同步
regred=0;
//红
reggrn=0;
//绿
regblu=0;
//蓝
reg[15:
0]clkcnt=16'
h0000;
//时钟计数
0]clkcnt2=16'
reg[9:
0]hcnt=10'
b0000000000;
//行计数
always@(posedgeclk)
begin
if(clkcnt==560-1)//560x50ns=28us
begin
clkcnt<
=clkcnt+1;
hs<
=1;
if(hcnt==525-1)//524行,31.76usx524=16.6ms
begin
hcnt<
=0;
vs<
end
else
=hcnt+1;
end
end
elseif(clkcnt==635-1)//635.2x50ns=31.76us
elseclkcnt<
if(!
vs)//31.76usx524=16.6ms
if(clkcnt2==1200-1)//1200x50ns=60us
clkcnt2<
=clkcnt2+1;
if(vs&
&
!
hs&
(hcnt>
220)&
(hcnt<
300)&
(clkcnt!
=100)&
=110)&
=170)&
=180)&
=240)&
=250)&
=310)&
=320)
&
=380)&
=390)&
=450)&
=460)&
=520))
if((((hcnt>
220)&
(hcnt<
300)&
(clkcnt<
40))||(hcnt>
230)&
290)&
(clkcnt>
50)&
90))||((hcnt>
100)&
110))
||((hcnt>
120)&
160))||((hcnt>
170)&
180))||((hcnt>
255)&
190)&
230))
265)&
180)&
230))||((hcnt>
240)&
250))||((hcnt>
250)&
300))
300))||((hcnt>
310)&
320))||((hcnt>
320)&
370))
380)&
390))||((hcnt>
400)&
450))||((hcnt>
390)&
440))
460)&
510))||((hcnt>
450)&
460))||((hcnt>
510))
520)))
red<
grn<
blu<
else
end
endmodule
4、指导老师对实验设计方案的意见:
指导老师签名:
年月日
二、实验结果与分析
1、实验目的、场地及仪器、设备和材料、实验思路等见实验设计方案
2、实验现象、数据及结果
运行图片如下:
编译成功
进行功能仿真,仿真波形如下:
功能仿真详细波形如下:
进行时序仿真,仿真波形如下:
时序仿真详细波形如下:
设计电路图如下:
管脚设置如下:
显示结果如下:
3、对实验现象、数据及观察结果的分析与讨论:
本实验的目的是做出学号显示程序,一开始并没有显示出学号,出现了很多小问题。
但是经过一一排查之后,最终还是显示出了学号。
4、结论:
本实验初步完成任务,显示器显示出出学号。
5、实验总结
⑴本次实验成败之处及其原因分析:
最失败的地方就是一开始在编写程序的时候没有对实验的中数字的各部分有很好的规划,结果在显示屏上的显示比较混乱。
还有比较遗憾的地方是没有显示出姓名。
但是本次试验也有不少值得表扬的地方,比如,实验中,综合了很多网络上的有用资源,比如,看过了很多有关VGA显示原理的文档,最后才总结出显示原理并且运用出来,一步一步接近所要的结果。
⑵本实验的关键环节及改进措施:
做好本实验需要把握的关键环节:
本实验最应该把我的关键环节应该是在实验之前搞清楚VGA显示器的工作原理以及注意事项,还有就是在实验过程中一定不能心烦气躁,要认真有耐性,因为这个实验的程序比较大,所以要完成这项任务还是需要比较大的工程量和耐心的。
若重做本实验,为实现预期效果,仪器操作和实验步骤应如何改善:
如果重做,应在实验之前把数字显示的各部分规划详细的列在草稿纸上,这样在实验的时候才会准确有效。
⑶对实验的自我评价:
本次试验和之前做过的实验3(用VGA显示彩色条纹)看起来差不多,至少原理是一样的,但是真正实施起来相差就比较大了。
虽然在实验的过程中出现了很多大小困难,但是在认真查阅有关资料并且和以前学过知识融汇之后,最终还是基本完成了任务。
正是这些困难和大小错误,使得我们在实验的过程中不断学习,不断提高。
还有就是这个实验很好的考验和提高了我们的耐性,只有在认真耐心的情况下,才能圆满完成实验内容。
指导老师评语及得分:
签名:
年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VGA 学号 显示 程序 实验 报告