数电实验vga图像显示控制Word格式文档下载.docx
《数电实验vga图像显示控制Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数电实验vga图像显示控制Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
扫描完所有行,用场同步信号进行场同步,并使扫描回到屏幕的左上方,同时进行场消隐,并预备进行下一次的扫描。
通过控制扫描计数器不同值时对RGB三原色信号的控制,来完成显示设计。
关键词:
行列扫描行列同步RGB三原色控制
2、设计任务要求
实验目的
1.熟练掌握VHDL语言和QuartusII软件的使用;
2.理解状态机的工作原理和设计方法;
3.掌握利用EDA工具进行自顶向下的电子系统设计方法;
4.熟悉VGA接口协议规范。
实验要求:
设计一个VGA图像显示控制器,达到如下功能:
显示模式为640×
480×
60HZ模式;
用拨码开关控制R、G、B(每个2位),使显示器可以显示64种纯色;
在显示器上显示横向彩条信号(至少6种颜色);
在显示器上显示纵向彩条信号(至少8种颜色);
在显示器上显示自行设定的图形、图像等。
选做:
自拟其它功能。
三、实验原理
1、显示控制原理
常见的彩色显示器一般由阴极射线管(CRT)构成,彩色由GRB(GreenRedBlue)基色组成。
显示采用逐行扫描的方式解决,阴极射线枪发出电子束打在涂有荧光粉的荧光屏上,产生GRB基色,合成一个彩色像素。
扫描从屏幕的左上方开始,从左到右,从上到下,逐行扫描,每扫完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT、对电子束进行消隐,每行结束时,用行同步信号进行行同步;
VGA显示控制器控制CRT显示图象的过程如图1所示
2、VGA时序信号
计算机内部以数字方式生成的显示图像信息,被显卡中的数字/模拟转换器转变为R、G、
B三原色信号和行、场同步信号,信号通过电缆传输到显示设备中。
对于模拟显示设备,如模拟CRT显示器,信号被直接送到相应的处理电路,驱动控制显像管生成图像。
设计VGA控制器的关键是产生符合VGA接口协议规定的行同步和场同步信号,它们的时序关系如下图所示:
h_sync:
水平同步信号(负脉冲),每个水平扫描周期显示器刷新一行;
v_sync:
垂直同步信号(负脉冲),每个垂直扫描周期显示器刷新一帧;
行同步信号(HS)
场同步信号(VS)
时序名称
时钟数(像素数)
行数
前沿
16
10
行同步
96
场同步
2
数据
640
480
后沿
48
33
总像素数
800
总行数
525
按照每秒60帧的刷新速度来计算,所需要的时钟频率为:
频率=60Hz(帧数)×
525(行)×
800(每一行像素数)=25.2MHz
所以我们通过开发系统的50MHz时钟资源,通过时钟分频产生25MHz的频率即可。
虽然没有达到精确的25.2MHz的时钟频率(刷新率可能会是59Hz),但是并不会造成影响。
3、VGA显示器的工作过程
以屏幕左上角的那个像素作为原点(1,1)。
当显示器接收到控制器输出的v_sync信号,则开始一个新的垂直刷新循环,同时控制器输出h_sync信号。
当经过P+Q=1.084ms的时间后,准备开始水平刷新循环,当h_sync信号的下降沿到来时,即开始刷新第一行(行数加1)。
再经过B+C=5.66s的时间后,开始刷新第一行的第一个像素(列数加1),并按照所需的时钟频率,刷新此行中其余像素。
直到显示器接收到下一个h_sync信号,又开始刷新第二行。
重复此过程,直到刷新到屏幕的底部。
当刷新了最下面一行的最后一个像素后,显示器即完成了一帧的刷新,控制器又输出v_sync信号,显示器又开始一个新的垂直刷新循环。
四、系统设计(包括设计思路、总体框图、分块设计)
总体设计思路:
VGA显示器的控制器可划分为3个子模块:
.时钟分频子模块;
.时序控制子模块,提供同步信号(h_sync和v_sync)及像素位置信息;
.生成图形子模块,接收像素位置信息,并输出颜色信息;
由于系统时钟为50MHZ,实验所需频率为25MHZ,故时钟分频模块只需在程序中通过分频语句完成;
生成图形子模块由系统提供;
所以重点设计的模块就是时序控制模块。
总体系统框图如下:
HS
系统时VS
钟R
G
B
时序控制模块设计
Hcnt=639
Hcnt=799
Hcnt=655
Hcnt=751
行同步状态机状态转移图
显示
同步
Vcnt=479
Vcnt=524
Vcnt=489
Vcnt=491
列同步状态机状态转移图
时序控制模块流程图:
五、源程序(含注释)
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityvgacodeis
port(
sw0:
instd_logic;
--拨码开关输入
sw1:
sw2:
sw3:
sw4:
sw5:
sw6:
sw7:
clk:
--系统时钟输入
hsync:
outstd_logic;
--输出行同步、列同步以及R.G.B信号
vsync:
rdata:
gdata:
bdata:
lrdata:
lgdata:
lbdata:
outstd_logic
);
endvgacode;
architecturebehaveofvgacodeis
--horizontaltimingsignals
constanth_data:
integer:
=640;
--VGA时序中几个关键数据
constanth_front:
=16;
constanth_back:
=48;
constanth_sync:
=96;
constanth_period:
=h_sync+h_data+h_front+h_back;
--800
--verticaltimingsignals
constantv_data:
=480;
constantv_front:
=10;
constantv_back:
=33;
constantv_sync:
=2;
constantv_period:
=v_sync+v_data+v_front+v_back;
--525
signalhenable,venable:
std_logic;
signalclk25M:
signalhcnt:
std_logic_vector(9downto0);
--horizontalpixelcounter
signalvcnt:
--verticallinecounter
begin
process(clk)
ifclk'
eventandclk='
1'
then--由系统时钟分频得到25MHZ的频率信号
clk25M<
=notclk25M;
endif;
endprocess;
process(clk25M)---行扫描
begin
if(clk25M'
eventandclk25M='
)then
ifhcnt<
h_periodthen
hcnt<
=hcnt+1;
else
=(others=>
'
0'
);
endif;
process(clk25M)--行同步
if(hcnt>
=(h_data+h_front)
andhcnt<
(h_data+h_sync+h_front))then
hsync<
='
;
else
process(clk25M)--列扫描
ifhcnt=(h_data+h_sync+h_front)then
ifvcnt<
v_periodthen
vcnt<
=vcnt+1;
else
endif;
process(clk25M)--列同步
if(vcnt>
=(v_data+v_front)
andvcnt<
(v_data+v_sync+v_front))then
vsync<
process(clk25M)--行显示
h_datathen
henable<
process(clk25M)--列显示
ifvcnt<
v_datathen