VGA接口时序以及FPGA实现

开发平台:vivado 2020.1
芯片:xc7k410tffv900-2


一、引言

  VGA (Video Graphics Array)视频图形阵列是BM 于1987 年提出的一个使用模拟信号的电脑显示标准。VGA接口即电脑采用 VGA 标准输出数据的专用接口。VGA 接口共有15 针,分成3 排,每排5个孔,早期在显卡上应用最为广泛的接口类型。它传输红、绿、蓝模拟信号以及同步信号(水平和垂直信号)。如图所示:

在这里插入图片描述
每个管脚具体的作用如下:

  1. 红基色 red
  2. 绿基色 green
  3. 蓝基色 blue
  4. 地址码 ID Bit
  5. 自测试( 各家定义不同 )
  6. 红接地
  7. 绿接地
  8. 蓝接地
  9. 保留 ( 各家定义不同 )
  10. 数字接地
  11. 地址码
  12. 地址码
  13. 行同步
  14. 场同步
  15. 地址码

二、显示原理以及时序

  VGA 显示关键的是三个颜色,即红基色、绿基色和蓝基色,就是我们物理课上常说的三原色。
在这里插入图片描述

  VGA 的显示效果取决于RGB 三个分量的位数(即:色深),最高24位(即RGB各8位),16位(即R5位,G6位,B6位),12位(即RGB各4位) 。色深越高能显示的颜色就越多,显示图片越鲜艳,现在主流的手机和电脑显示器都是8bit色深和10bit色深。

RGB信号在使用时的位宽有三种常见格式,具体跟显示器的设置有关:
1.RGB332,即R: G: B = 3: 3: 2
2. RGB565,即R: G: B = 5: 6: 5
3. RGB888,即R: G: B = 8: 8: 8
(ps:本次显示器支持的是RGB888)

所以想要正确的显示图像,只需要在显示器每个像素点上给出正确的RGB数值,就能达到想要的显示效果。

  显示器能显示的原理是根据电子束扫描的方式:逐行扫描是扫描从屏幕左上角第一点开始,从左至右逐点扫描,每扫描完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT 对电子束进行消隐,每行结束时,用行同步信号进行同步;当扫描完所有的行,形成一帧,用场同步信号进行帧同步,并使扫描回到屏幕左上方,同时进行场消隐,开始下一帧。
在这里插入图片描述

  那么我要显示一个19201080的画面,那只需要扫描19201080次吗? 因为根据显示器扫描原理可知道,电子束每扫描一行或者一帧后,都需要时间进行消隐(我个人的理解就是电子束需要时间重置位置),所以实际上的扫描次数大于1920*1080次,时序图如下:
在这里插入图片描述

  • sync是同步信号长度,hsync为行同步信号,vsync就为场同步信号
  • backporch是后沿消隐长度
  • active video 就是实际的显示画面长度
  • front porch 是前沿消隐长度

  其中,vsync是由hsync组成:
在这里插入图片描述
  所以一幅图像在显示器真实的情况是这样:
在这里插入图片描述
  不同分辨率的不同参数不同,大致分辨率表如下:

显示模式 时钟/Mhz 行同步hsync 行后沿 行有效 行前沿 行总共 场同步vsync 场后沿 场有效 场前沿 场总共
640×480@60Hz 25.2 96 48 640 16 800 2 33 480 10 525
800×600@60Hz 40 128 88 800 40 1056 4 23 600 1 628
1024×768@60Hz 65 136 160 1024 24 1344 6 29 768 3 806
1280×720@60Hz 74.25 40 220 1280 110 1650 5 20 720 5 750
1280×1024@60Hz 108 112 248 1280 48 1688 3 38 1024 1 1066
1920×1080@60Hz 148.5 44 148 1920 88 2200 5 36 1080 4 1125
3840×2160@60Hz 594 88 296 3840 196 4400 10 72 2160 8 2250

  时钟怎么算的呢?比如1920×1080@60hz的时钟=2200×1125×60=148.5M,其他的同理。

三、FPGA实现

  本次显示RGB888,1920×1080@60Hz的纯色绿画面,所以外部输入时钟为148.5M。

 //显示纯绿色图片
module vga_ctrl
(
    input                              clk ,    //输入148.5M时钟
		
    output  reg                        vs  ,	//输出vsync信号
    output  reg                        hs  ,	//输出hsynv信号
    output  reg     [23:0]             data 	//输出RGB数据,共24位  
    );
    
    parameter       hcnt_max=2200;	//行扫描计数器等于行同步+行前沿+行有效+场后沿
    parameter       vcnt_max=1125;	//列扫描计数器等于场同步+场前沿+场有效+场后沿

	parameter       H_SYNC_TIME     =<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱奔跑的虎子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值