FPGA——VGA协议
VGA协议
- VGA简介
- 接口及引脚定义
- 显示原理
- 显示电路原理
- VGA协议电压标准
- 数字信号转化标准模拟信号方案
- 数字信号时序标准
- 模块设计
VGA简介
VGA,英文全称“Video Graphics Array”,译为视频图形阵列,是一种使用模拟信号进行视频传输的标准协议,由 IBM 公司于 1987 年推出,因其分辨率高、显示速度快、颜色丰富等优点,广泛应用于彩色显示器领域。由于 VGA 接口体积较大,与追求小巧便携的笔记本电脑背道而驰,在笔记本电脑领域,VGA 接口已被逐渐淘汰,但对于体积较大的台式机,这种情况并未发生,虽然 VGA 标准在当前个人电脑市场中已经过时,但因其在显示标准中的重要性和良好的兼容性,VGA 仍然是最多制造商所共同支持的一个标准,个人电脑在加载自己独特驱动程序之前,都必须支持 VGA 的标准。
接口及引脚定义
引脚 | 定义 | 引脚 | 定义 |
---|---|---|---|
1 | 红基色(RED) | 9 | 保留(各厂家使用) |
2 | 绿基色(GREEN) | 10 | 数字地(GND) |
3 | 蓝基色(BLUE) | 11 | 地址码0(ID BIT0) |
4 | 地址码 2(ID BIT2) | 12 | 地址码 1(ID BIT1) |
5 | 保留(各厂家使用) | 13 | 行同步(HSYNC) |
6 | 红色地(RGND) | 14 | 场同步(VSYNC) |
7 | 绿色地(GGND) | 15 | 地址码3(ID BIT3) |
8 | 蓝色地(BGND) |
显示原理
VGA 显示器显示图像,是采用扫描的方式,将构成图像的像素点,在行同步信号和场同步信号的同步下,按照从上到下、由左到右的顺序扫描到显示屏上。
在VGA标准刚兴起的时候,彩色显示器通常基于CRT技术实现,其中色彩由RGB三基色组成。显示过程采用逐行扫描的方式,即阴极射线枪发出的电子束打击涂有荧光粉的荧光屏,产生RGB三基色,这些颜色合成一个彩色像素。扫描从屏幕的左上方开始,从左到右、从上到下进行。每扫完一行后,电子束回到下一行的左边起始位置继续扫描。
在扫描过程中,为了防止电子束在回到左上方的过程中破坏已有图像,需要进行行消隐和场消隐。行消隐是在每行结束时通过行同步信号进行同步,而场消隐则是在扫描完所有行后,通过场同步信号进行同步,并使扫描回到屏幕的左上方。
随着显示技术的发展,虽然出现了液晶显示器等新技术,但为了兼容传统的显示接口,液晶显示器通过内部电路实现了对VGA接口的完全兼容。这意味着,只要显示器带有标准的VGA接口,就可以直接使用标准的VGA时序来驱动显示器,而无需关心其内部的成像原理。
显示电路原理
VGA协议电压标准
由于是模拟信号,三色模拟信号分别对应颜色及电压值为:
R | G | B | 颜色 |
---|---|---|---|
0.714V | 0V | 0V | 红色 |
0V | 0.714V | 0V | 绿色 |
0V | 0V | 0.714V | 蓝色 |
0V | 0V | 0.357V | 深蓝色 |
0V | 0V | 0V | 黑色 |
数字信号转化标准模拟信号方案
有两个方案:
- 一种是采用AD高速数模转化芯片——ADV7123芯片
- 另一种是采用低成本权电阻网络
采用AD芯片的会有官方文档讲解外围电路,本文在此处讲解权电阻网络。
为了让权重分配符合二进制数值权值,讲电阻设计为2的倍数。根据电流比例计算,由于
D
0
D_0
D0输出电压为VCC,
D
1
D_1
D1输出电压也为VCC,因此根据电阻大小比值
I
1
=
2
I
0
I_1=2I_0
I1=2I0,则数值全值表如下:
{D1,D0} | I I I |
---|---|
2’b00 | 0 |
2’b01 | I I I |
2’b10 | 2 I 2I 2I |
2’b11 | 3 I 3I 3I |
由表可知,该设计完美符合对模拟数值的二进制编码设计。于是,完整RGB565接口(除此之外,还有24位颜色RGB888,8位颜色显示RGB332,区别是颜色显示数量的不同)一共需要16根信号线,565也分别对应Red信号线5根,Green信号线6根,Blue信号线5根,其信号图如下。
由于VGA内部接口含有75欧姆的电阻,用于检测红绿蓝三种颜色对应的电压。如下图。
由此可以计算,对应所需的权电阻网络基础数值。先计算权值网络的等效电阻
R
x
R_x
Rx
1
R
x
=
1
R
+
1
2
R
+
1
4
R
+
1
8
R
+
1
16
R
\frac{1}{R_x}=\frac{1}{R}+\frac{1}{2R}+\frac{1}{4R}+\frac{1}{8R}+\frac{1}{16R}
Rx1=R1+2R1+4R1+8R1+16R1
再计算最大电压
V
r
=
0.714
V
V_r=0.714V
Vr=0.714V。
V
r
=
75
V
c
c
R
x
+
75
V_r=\frac{75V_{cc}}{R_x+75}
Vr=Rx+7575Vcc
计算得:
R
=
500
Ω
R=500\varOmega
R=500Ω
计算得R后,根据R数值可以计算出其他对应的电阻。由于,电阻阻值可能选择相近的数值,因此,Vr、Vg、Vb可能最大值并不相同,因此,也会影响显示器的RGB显示范围。如使用AD芯片可以使得RGB动态显示范围更为精准。
到此,模拟部分电路讲解完毕。
数字信号时序标准
为了适应匹配不同厂家的 VGA 显示器,VGA 视频传输接口有自己的一套 VGA 时序标准,只有遵循 VGA 的时序标准,才能正确的进行图像信息的显示。由显示原理,我们可以知道,显示时序应该会分为行扫描和列扫描。在术语里,列扫描叫做场扫描。
行扫描周期包含:同步、后沿、左边框、有效图像、右边框、前沿。基本单位是一个时钟周期。
场扫描周期同样包含:同步、后沿、上边框、有效图像、底边框、前沿。基本单位是一个行的时钟周期。
实际参数表如下:
由相关数据,行扫描周期x场扫描周期x刷新率=时钟频率,因此,640x280
@60hz的时钟计算为:800x525x60=25.2MHz。在此处,由于25.2Mhz或者25.175不便于生成,因此通常使用25Mhz的时钟频率,则对应的显示帧率59.5hz。
模块设计
clk_gen:时钟生成模块,为了讲FPGA内部时钟进行分频或者倍频处理得到模块所需的时钟信号。(可以由PLL锁相环生成)
vga_pic模块:用于生成图像数据,得到对应点的坐标来产生对应位置的图像数据。
vga_ctrl模块:VGA驱动模块,用于生成VGA驱动信号及rgb颜色数据。