电子设计自动化课程设计报告Word文件下载.docx
《电子设计自动化课程设计报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《电子设计自动化课程设计报告Word文件下载.docx(20页珍藏版)》请在冰豆网上搜索。
VGA接口是一种D型接口,上面共有15针空,分成三排,每排五个。
VGA接口是显卡上应用最为广泛的接口类型,绝大多数的显卡都带有此种接口。
表1VGA管脚定义
管脚
定义
1
红基色red
2
绿基色green
3
蓝基色blue
4
地址码IDBit
5
自测试(各家定义不同)
6
红地
7
绿地
8
蓝地
9
保留(各家定义不同)
10
数字地
11
地址码
12
13
行同步
14
场同步
15
地址码(各家定义不同)
通过模拟VGA接口和计算机连接的显示器的工作原理,是计算机内部以数字方式生成的显示图像信息,被显卡中的数字/模拟转换器转变为R、G、B三原色信号和行、场同步信号,信号通过电缆传输到显示设备中。
对于模拟显示设备,如模拟CRT显示器,信号被直接送到相应的处理电路,驱动控制显像管生成图像。
而对于LCD、DLP等数字显示设备,显示设备中需配置相应的A/D(模拟/数字)转换器,将模拟信号转变为数字信号。
在经过D/A和A/D2次转换后,不可避免地造成了一些图像细节的损失。
VGA接口应用于CRT显示器无可厚非,但用于连接液晶之类的显示设备,则转换过程的图像损失会使显示效果略微下降。
CRT显示器因为设计制造上的原因,只能接受模拟信号输入,也就是我们为什么在CRT显示器上只看到VGA接口的原因。
四、VGA显示接口原理
计算机显示器的显示有许多标准,常见的有VGA、SVGA等。
本系统采用FPGA来实现图像显示控制器,这在产品开发设计中有许多实际应用。
常见的彩色显示器,一般由CRT(阴极射线管)构成,彩色是由G、R、B(绿:
Green,红:
Red,蓝:
Blue)三基色组成。
显示是用逐行扫描的方式解决,阴极射线枪发出电子束打在涂有荧光粉的荧光屏上,产生GRB三基色,合成一个彩色像素。
扫描从屏幕的左上方开始,从左到右,从上到下,进行扫描,每扫完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT对电子束进行消隐,每行结束时,用行同步信号进行行同步;
扫描完所有行,用场同步信号进行场同步,并使扫描回到屏幕的左上方,同时进行场消隐,预备下一场的扫描。
对于普通的VGA显示器,其引出线共含5个信号:
G、R、B:
三基色信号;
HS:
行同步信号;
VS:
场同步信号。
对于5个信号的时序驱动,对于VGA显示器要严格遵循“VGA工业标准”,即640×
480×
60Hz模式。
通常我们用的显示器都满足工业标准,因此我们设计VGA控制器时要参考显示器的技术规格。
图5是VGA行扫描、场扫描的时序图:
图5VGA行扫描、场扫描时序图
表2VGA参考时序设计
VGA工业标准所要求的频率:
时钟频率(Clockfrequency):
25.175MHz(像素输出的频率);
行频(Linefrequency):
31469Hz;
场频(Fieldfrequency):
59.94Hz(每秒图像刷新频率)。
五、FPGA的设计实现
设计VGA图像显示控制需要注意两个问题:
一个是时序的驱动,这是完成设计的关键,时序稍有偏差,显示必然不正常,甚至会损坏彩色显示器;
另一个是VGA信号的电平驱动。
显示控制器设计提示:
显示器的技术规格提供的行频一般都满足在30-45KHz(保守数据),场频一般满足在50-75Hz(保守数据),针对以上保守数据,我们以30KHz的行频进行扫描时所需时钟频率为:
30KHz×
800(行周期)=24MHz,则场频为:
30KHz÷
525(场周期)=57.14Hz,针对实验箱的条件,可以用12MHz的信号经过倍频(EP1K30QC208-2芯片特有的功能,在MaxPlusII软件中调用参数可设置兆功能元件库mega_lpm的CLKLOCK元件来倍频)来产生24MHz的时钟频率,参考设计的顶层文件如下图所示:
图6.VGA接口实现顶视图
VGACORE模块包含了扫描时序产生模块、图像描述模块。
时序产生模块的设计可参考图5所示来设计,图像描述模块主要通过640×
480个像素点来描述图像。
如本项设计的彩条信号发生器可通过图像描述模块产生如下表所示的3种显示模式,共6种显示变化的图像。
表3VGA图形编码
行彩条
1:
白黄青绿品红蓝黑
2:
黑蓝红品绿青黄白
竖彩条
棋盘格
棋盘格显示模式1
棋盘格显示模式2
上表颜色对应的编码为:
表4VGA颜色编码
颜色
黑
蓝
红
品
绿
青
黄
白
G
R
B
在设计完彩条信号发生器的基础上很容易完成汉字/图像的设计。
由于本设计是对视频数据进行处理,用普通的设计方法(不使用专用芯片),在单芯片上实现是不可思议的,而在此用FPGA设计,轻松地达到了面积和速度上的要求。
六、程序及仿真
(一)、管脚分配
本设计采用主板上的VGA接口
实验模式:
模式5
时钟及控制
clk----->
pin_29clock9实验要求采用12M的时钟
rst----->
pin_240键8,低电平有效,作为使能信号
MD----->
pin_233键1,模式选择信号,共有6种模式
显示器输出
R----->
pin_180PIO29
G----->
pin_181PIO30
B----->
pin_182PIO31
HS----->
pin_183PIO32
VS----->
pin_185PIO34
(二)、彩条发生器程序实现及仿真
1、主程序
modulevga(clk_25m,rst_n,//系统控制
hsync,vsync,vga_rgb,MD//VGA控制
);
inputclk_25m;
//25MHz
inputrst_n;
//低电平复位
inputMD;
//FPGA与VGA接口信号
outputhsync;
//行同步信号
outputvsync;
//场同步信号
output[2:
0]vga_rgb;
//--------------------------------------------------
//坐标计数
reg[9:
0]x_cnt;
//行坐标
0]y_cnt;
//列坐标
always@(posedgeclk_25mornegedgerst_n)
if(!
rst_n)x_cnt<
=10'
d0;
elseif(x_cnt==10'
d799)x_cnt<
elsex_cnt<
=x_cnt+1'
b1;
rst_n)y_cnt<
elseif(y_cnt==10'
d524)y_cnt<
d799)y_cnt<
=y_cnt+1'
//产生VGA场同步,行同步信号
reghsync_r,vsync_r;
rst_n)hsync_r<
=1'
d0)hsync_r<
b0;
//产生hsync信号
d96)hsync_r<
rst_n)vsync_r<
d0)vsync_r<
//产生vsync信号
d2)vsync_r<
assignhsync=hsync_r;
assignvsync=vsync_r;
//有效显示标志位产生
regvalid_yr;
//行显示有效信号
rst_n)valid_yr<
d32)valid_yr<
d512)valid_yr<
wirevalid_y=valid_yr;
regvalid_r;
//VGA有效显示区标志位
rst_n)valid_r<
elseif((x_cnt==10'
d141)&
&
valid_y)valid_r<
d781)&
wirevalid=valid_r;
wire[9:
0]x_dis;
//横坐标显示有效区域相对坐标值0-639
0]y_dis;
//竖坐标显示有效区域相对坐标值0-479
assignx_dis=x_cnt-10'
d142;
assigny_dis=y_cnt-10'
d33;
//---------------------------------------------
reg[2:
0]cnt;
always@(posedgeMDornegedgerst_n)begin
if(!
rst_n)
cnt<
=3'
elseif(cnt==3'
d5)
cnt<
=3'
else
=cnt+3'
d1;
end
//--------------------------------------------------
//VGA色彩信号产生
/*
RGB=000黑色RGB=100红色
=001蓝色=101紫色
=010绿色=110黄色
=011青色=111白色
*/
//----------------------------------------------------
always@(posedgeclk_25m)begin
valid)vga_rgb<
elsebegin
if(cnt==3'
d0)begin//竖彩条模式
if(x_dis>
d0&
x_dis<
10'
d80)vga_rgb<
elseif(x_dis>
d80&
d160)vga_rgb<
d160&
d240)vga_rgb<
d2;
d240&
d320)vga_rgb<
d3;
d320&
d400)vga_rgb<
d4;
d400&
d480)vga_rgb<
d5;
d480&
d560)vga_rgb<
d6;
d560&
d640)vga_rgb<
d7;
end
d1)begin//竖彩条模式
if(cnt==3'
d2)begin//横彩条模式
if(y_dis>
y_dis<
d60)vga_rgb<
elseif(y_dis>
d60&
d120)vga_rgb<
d120&
d180)vga_rgb<
d180&
d300)vga_rgb<
d300&
d360)vga_rgb<
d360&
d420)vga_rgb<
d420&
d3)begin//横彩条模式
d4)begin//棋盘格模式
case(x_dis)
d0:
begin
d80,10'
d160,10'
d240,10'
d320,10'
d400,10'
d480,10'
d560,10'
d640:
vga_rgb<
=vga_rgb+3'
//每80个横坐标像素点后显示色彩数据增1变化
default:
;
endcase
d5)begin//棋盘格模式
endmodule
2、验证程序
`timescale1ns/1ps
moduletb_vga();
regt_clk_25m;
regt_rst_n;
wiret_hsync;
wire[2:
0]t_vga_rgb;
wiret_vsync;
wiret_MD;
vgahctdut(.clk_25m(t_clk_25m),
.hsync(t_hsync),
.rst_n(t_rst_n),
.vga_rgb(t_vga_rgb),
.vsync(t_vsync),
.MD(t_MD)
);
initial
begin
t_clk_25m=0;
t_rst_n=1;
t)MD=0;
#20;
t_rst_n=0;
#50;
$display("
Runningtestbench"
#10000000000$stop;