VGA接口实验1--时序分析
---->>> VGA驱动主要涉及到以下几个技术方面:
(1)像素映射(像素填充)
(2)颜色平面
(3)水平、垂直同步信号
---->>> 以640*480(即VGA显示标准)刷新率60Hz 为例,来讲解时序实现。
--->>> 这个网站中有各种显示模式下的时序参数
http://www.tinyvga.com/vga-timing
要得到一个正确的VGA输出,其关键问题就是要有精确的时序与数据定义。
--------------------------------------------------------------------------------------------------->>>>
VGA时序实现
首先,根据刷新频率确定主时钟频率,然后由主时钟频率和图像分辨率计算出行总周期数,
再把各时序段的时间按照主计数脉冲源频率折算成时钟周期数。在CPLD/FPGA中利用计数器,
以计算出的各时序段时钟周期数为基准,产生不同宽度和周期的脉冲信号,再利用它们的逻辑
组合构成各时序段以及D/A转换器的空白信号BLANK和同步信号SYNC。
----------------------------------------------------------------------------------------------------->>>
a (行消隐) , b(行消隐后沿),c(行显示),d(行消隐前沿)
--------------------------------------------------------------------------------------------------->>>>>
水平同步信号HSYNC使用一个负同步脉冲表示一行像素的开始时刻,到下一个负脉冲出现为一行像素的结束时刻。
实际的一行有效图像数据是在25.422us的时间窗口内发送的,而水平同步信号之间的间隔是31.77us。
没有图像数据发送的这段时间定义为消隐区,此时的图像为黑色。
---------------------------------------------------------------------------------------------------->>>>
a (行消隐) , b(行消隐后沿),c(行显示),d(行消隐前沿)
---------------------------------------------------------------------------------------------------->>>
垂直同步信号VSYNC与水平同步信号相似,只不过其同步负脉冲表示整个一帧图像的开始和结束。
一帧图像的有效图像数据是在15.253227408143ms的时间窗口内发送的,而同步信号之间的间隔是16.683217477650ms。
---------------------------------------------------------------------------------------------------->>>
针对行同步信号
如果有25.422us的时间段来输出一行有效图像数据,做一些计算如下,640*480的VGA显示模式下
亦即待填充的640个像素需要在25.422us内发送给显示器。即每个像素的时间为 25.422us/640 = 39.71875ns。
可以算得最小时间单位是 25.175MHZ如上图参数所示,这个即驱动VGA时FPGA所需要的时钟频率.
注意:25.175MHZ的时钟不好配置,实际上用PLL配置成25M即可..
------------------------------
针对列同步信号
同理,如果有15.253227408143ms的时间段来输出一帧有效图像数据,做计算如下,640*480的VGA显示模式下
15.253227408143ms/480 = 0.031777557100ms。
可以算得完成填充一行640个有效像素数据的时间为0.031777557100ms,即每一行的频率为31.46875Khz,如上图所示。
----------------------------------------------------------------------------------------------------->>>>
--->> 不显示像素数据或电子束退回到行首开始新的水平扫描时,RGB信号需要置为黑色,即全为零。
--->> 一位网友提出的疑问关于VGA的显示问题如下
--->> http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4555878&bbs_page_no=1&bbs_id=1029
--->> 无论是行同步信号还是列同步信号,数据有效区并不是所有 区间而只是中间的一部分区间,所以应该设置
一个valid信号用来表示计数到多少时,开始进入 显示数据有效区, 而在数据无效区间(消隐区间),VGA三个基色信号必须全部置0.