学习图像处理的第一步,我想从VGA显示开始。本篇文章基于野火FPGA教程,分享自己在实验过程中的感悟。
何为VGA?
VGA是一种接口,也是一种协议,它共有 3x5 共15个引脚,其中每个引脚的定义如下:
图片来源:野火FPGA
VGA接口看似繁杂,实际上我们只需要重点关注这几个引脚:
- 引脚1、2、3 :红基色,绿基色,蓝基色,输入为三路模拟信号的电压范围为 0V ~ 0.714V,0V 代表无色,0.714V 代表满色。
- 引脚13:行同步信号
- 引脚14:场同步信号
VGA显示的原理
简单概括就是:从左到右,从上到下,逐行扫描,逐帧显示。
VGA的时序标准
VGA的时序主要由两部分组成:显示每一行像素的行同步时序与选定显示行数的场同步时序。
行同步时序:
行同步时序由六部分组成,分别为:Sync(同步)、Back Porch(后沿)、Left
Border(左边框)、“Addressable” Video(有效图像)、Right Border(右边框)、Front
与行同步时序相同,场同步时序也是由类似的六个部分组成,但不同的是 :场扫描周期单位不是像素时钟周期,而是完整的行扫描周期。
刚开始理解可能会有些迷糊,所以咱们来缕一缕这个关系:以640 X 480 的图像为例(一行640个像素,共480行):
一副图像为一帧,对应一个场扫描周期,场扫描周期的最小组成单位为行扫描周期,行扫描周期的最小组成单位为像素时钟周期。
也就是说,场扫描周期的有效周期有480个,对应480行,每个有效周期包含了一个行扫描周期,每个行扫描周期的有效周期包含了640个像素周期,代表一行有640个像素点。
(波形图中,cnt_h为行扫描周期计数,可以看出,一个行扫描周期包含800个像素时钟周期,cnt_v为场扫描周期计数,可以看出,场扫描的最小单位是行扫描周期)
由这个关系我们可以推出像素时钟周期的计算公式:
(注意:扫描周期数是总的周期数,不要只计算有效周期数)
实验接口设计
实验目标
利用FPGA在显示屏上显示彩条。
实验整体框架
(图片来源:野火电子FPGA)
下一篇将结合Verilog代码介绍各个模组的实现,特别鸣谢野火电子提供的参考资料。