VGA简介
VGA的缩写来自Video Graphics Array(视频图形阵列),是一种使用模拟信号进行视频传输的标准。
VGA标准的引脚定义如下:
上图pin1、2和3是模拟输入(范围0v到0.714v),pin13和pin14是数字信号输入(TTL电平)。
在VGA传输标准中,视频图像由红、绿和蓝三原色信号组成。FPGA端产生的三原色数字信号要经过数模转换过程转换成模拟信号,然后在行同步信号(pin13)和场同步信号(pin14)的同步下在三个通道(pin1、2和3)上独立传输。
VGA彩色原理
像素是产生各种颜色的基本单元。根据混色原理,每个像素的 R、G、B 三基色发光亮度比例不同可以出现不同的颜色。
当然,VGA 可以显示的色彩非常丰富,远不止表格里面这8种。R、G、B三个分量的每个分量都可以通过一个n位的二进制码来编码,二进制码的数值的大小最终反映在电压的大小上,从而控制每个基色的深浅。
一般VGA 显示真彩色需要R、G、B三个分量各8位,也就是24位来表示一个像素值。但为了节省引脚或者节省存储空间,在能满足显示效果的前提下可适当减少位数,比如DE10-Lite和DE0-CV开发板 用R、G、B各4位来表示,这样比真彩色图像数据量少一半多。DE10-Standard、DE1-SOC和DE2-115开发板是RGB三分量各占8位。
VGA 的 R、G、B 三信号都是模拟信号,其电压的高低可以表示颜色的深浅。 所以FPGA 端产生的视频信号需要通过数模转换的过程才能输出到 外部的VGA接口上去。
这个DA转换过程可以用专门的视频转换芯片ADV7123去实现(参考:友晶科技FPGA:基于FPGA和ADV7123的VGA彩条显示(DE10-Standard、DE1-SOC、DE2-115)),也可以用更简单的方案:使用一系列的电阻将数字信号转换撑模拟信号(权电阻网络)。
VGA显示原理
1. 行同步
VGA显示器图像由一个个像素点组成, 显示器电子束从左到右进行扫描。一行扫描结束以后,回到下一行继续扫描。每扫描一行所需的时间称为一个行扫描周期。下图是VGA行同步时序图:
添加图片注释,不超过 140 字(可选)
行同步时序的基本单位是完成一个像素点显示所需要的时间, 所以 a、b、c、d、e 的基本单位 是一个像素的扫描周期。
2. 场同步
当扫描完显示器上所有的行,就形成一帧。每扫描一帧所需的时间称为一个场扫描周期。下图是VGA场同步时序图:
场同步时序的基本单位是完成一行图像显示所需要的时间, 所以 o、p、q、r、s 的基本单位是一个完整的行扫描周期。
3. VGA分辨率
拿640x480@60的举例:
-
640是指VGA显示器每一行有640个有效像素点;
-
480是指VGA显示器每一帧有480个有效行;
-
60 是VGA 显示器每秒钟刷新60次,也就是每秒显示60帧图像。
4. 像素时钟
结合上面的表格,从分辨率和行同步时序以及场同步时序可以计算得到像素的时钟, 比如640*480@60分辨率的像素时钟是:
800*525*60=25.2M
权电阻网络
前面提到FPGA端产生的三原色数字信号要经过数模转换转换成模拟信号传输到VGA显示器进行显示,这个数模转换过程可以用专门的视频转换芯片ADV7123去实现(如开发板DE10-Standard、DE1-SOC 、DE2-115),也可以用一系列并联的电阻来完成转换(如开发板DE10-Lite、DE0-CV),这种电路称之为权电阻网络。下面是一个权电阻网络示意图:
权电阻网络中,并联的电阻之间阻值成倍数关系,且电阻R越大,权值D越小。
根据并联电路计算Rx阻值:
即:
友晶科技的DE10-Lite和DE0-CV开发板的VGA电路都是采用的权电阻网络。
DE10-Lite的VGA电路:
DE0-CV的VGA电路:
拿DE-CV举例,为什么它的权电阻网络选用的是2K排阻和1K排组呢?
因为VGA显示器的VGA接口内部有一个 75ohm的电阻用于阻抗匹配 :
根据权电阻网络要求电阻值成倍数关系,我们可以计算如下:
但选贴片电阻有时可能没有一模一样阻值的电阻, 那就选阻值相近的电阻即可,所以针对2037ohm 近似选择2K的贴片电阻。
代码解析
本设计是在VGA显示器上显示分辨率为640x480@60Hz的三色彩条。
实现方法是在vga_ctrl.v模块里将场同步信号的中间480行依次分成三段,每一段(占160行)显示一种颜色。
1. VGA_top模块
在top层例化PLL和VGA控制模块(vga_ctrl.v)。
2. PLL模块
PLL 参考时钟来自系统50MHz时钟:
根据前面的计算得到640x480@60Hz像素时钟是25MHz:
3. VGA控制模块
先定义640x480@60Hz的行同步和场同步时序的参数:
然后是设计行计数器(计数器满代表一行结束):
以及设计场计数器(计数器满代表一帧结束):
接着就可以按照前面的时序图将行同步信号vga_hs和场同步信号vga_vs设计出来:
产生使能信号,并在使能信号的控制下输出R、G、B三色(根据cnt_vs计数到哪一行产生相应颜色的使能脉冲,然后根据使能脉冲输出相应颜色。):
管脚分配
DE10-Lite VGA管脚分配参考DE10-Lite_User_Manual.pdf 第36页:
DE0-CV的VGA管脚分配参考DE0_CV_User_Manual.pdf 第32页:
测试结果
以DE10-Lite为例进行测试:
源码下载
DE10-Lite工程:http://mail.terasic.com.tw/~dongliu/DE10-Lite/DE10-Lite_VGA.rar
DE0-CV工程:http://mail.terasic.com.tw/~dongliu/DE0-CV/DE0_CV_VGA.rar