VGA(Video Graphics Array)是IBM在1987年随PS/2机一起推出的一种视频传输标准,具有分辨率高、显示速率快、颜色丰富等优点,在彩色显示器领域得到了广泛的应用。
VGA技术的应用还主要基于VGA显示卡的计算机、笔记本等设备,而在一些既要求显示彩色高分辨率图像又没有必要使用计算机的设备上,VGA技术的应用却很少见到。本文对嵌入式VGA显示的实现方法进行了研究。基于这种设计方法的嵌入式VGA显示系统,可以在不使用VGA显示卡和计算机的情况下,实现VGA图像的显示和控制。系统具有成本低、结构简单、应用灵活的优点,可广泛应用于超市、车站、飞机场等公共场所的广告宣传和提示信息显示,也可应用于工厂车间生产过程中的操作信息显示,还能以多媒体形式应用于日常生活。
1 显示原理与VGA时序实现
通用VGA显示卡系统主要由控制电路、显示缓存区和视频BIOS程序三个部分组成。控制电路如图1所示。控制电路主要完成时序发生、显示缓冲区数据操作、主时钟选择和D/A转换等功能;显示缓冲区提供显示数据缓存空间;视频BIOS作为控制程序固化在显示卡的ROM中。
1.1 VGA时序分析
通过对VGA显示卡基本工作原理的分析可知,要实现VGA显示就要解决数据来源、数据存储、时序实现等问题,其中关键还是如何实现VGA时序。 VGA的标准参考显示时序如图2所示。行时序和帧时序都需要产生同步脉冲(Sync a)、显示后沿(Back porch b)、显示时序段(Display interval c)和显示前沿(Front porch d)四个部分。几种常用模式的时序参数如表1所示。
1.2 VGA时序实现
首先,根据刷新频率确定主时钟频率,然后由主时钟频率和图像分辨率计算出行总周期数,再把表1中给出的a、b、c、d各时序段的时间按照主计数脉冲源频率折算成时钟周期数。在CPLD中利用计数器和RS触发器,以计算出的各时序段时钟周期数为基准,产生不同宽度和周期的脉冲信号,再利用它们的逻辑组合构成图2中的a、b、c、d各时序段以及D/A转换器的空白信号BLANK和同步信号SYNC。
1.3 读SRAM地址的产生方法
主时钟作为像素点计数脉冲信号,同时提供显存SRAM的读信号和D/A转换时钟,它所驱动的计数器的输出端作为读SRAM的低位地址。行同步信号作为行数计数脉冲信号,它所驱动的计数器的输出端作为读SRAM的高位地址。由于采用两片SRAM,所以最高位地址作为SRAM的片选使用。由于信号经过CPLD内部逻辑器件时存在一定的时间延迟,在CPLD产生地址和读信号读取数据时,读信号、地址信号和数据信号不能满足SRAM读数据的时序要求。可以利用硬件电路对读信号进行一定的时序调整,使各信号之间能够满足读SRAM和为DAC输入数据的时序要求。
1.4 数据宽度和格式
如果VGA显示真彩色BMP图像,则需要R、G、B三个分量各8位,即24位表示一个像素值,很多情况下还采用32位表示一个像素值。为了节省显存的存储空间,可采用高彩色图像,即每个像素值由16位表示,R、G、B三个分量分别使用5位、6位、5位,比真彩色图像数据量减少一半,同时又能满足显示效果。
2 功能单元设计
实现VGA显示,除了实现时序控制,还必须有其他功能单元的支持才能实现完整的图像显示。
(1) 控制器:VGA显示有多种模式,需要通过控制器实现模式间切换,还需要对显示的内容进行接收、处理和显示。所以控制器的性能越高,数据更新和显示效果就越好。
(2) 显示数据缓存区:VGA显示要求显存速度快、容量大。读速度要达到65MHz以卜,存储容量至少要2MB。可采用高速SRAM或SDRAM作为显示数据缓存。
(3) 数模转换器DAC:VGA显示对数模转换DAC有如下要求:一是高速转换,转换的速度应该在80MHz或以上;二是刚步性好,能保证 R、G、B三路信号的同步性;三是有相应的精度。可选择一种包括3路8位高速D/A的专用视频芯片。
(4) 数据源及其接口:要提高VGA显示的效率,就要不断更新数据,同时还要保证实时性,因此需要非常高的接口速度。VGA显示卡虽可达到100Mbps的数据更新速度,但是一般设备、特别是嵌入式设备达不到这么高的速度,而且大多数情况下也不需要这么高的数据更新率。目前常用接口为EPP接口、USB接口、 TCP/IP、RS232C/485等。其中TCP/IP、EPP接口和USB接口是基于计算机的,速度较快;TCP/IP、RS232C/485是基于网络通信的接口,其中RS485速度虽慢,但应用广泛且容易实现远程控制。
在数据源为低速接口时,可以考虑采用 Flash或者SM存储卡等预先存储一些常用的图像显示数据和字库文件,在更新数据时直接应用这些数据,从而加快显示缓存的更新速度。这样既能满足高分辨率图像的显示,又能满足文字信息数据的快速更新。刚时为了存储更多的图像,可以先存储JPEG格式图像,再由控制器解码成BMP位图图像后送到显示缓存显示,这样就相对扩展了Flash的存储空间。同时,由于图像的解码速度要大大快于数据源接口的速度,也就相应提高了显示缓存的数据更新速度。
由各功能单元组成的VGA显示硬件结构框图如图3所示。
3 显存数据更新与显示的同步实现
在VGA显示时,要考虑如何实现显存数据更新与显示的同步进行。解决的方案有以下几种:
(1) 采用具有缓存作用的双口RAM,这种方法使用的器件数量多、功耗大、成本高,基本不可取。
(2) 采用两组SRAM进行乒乓工作模式,一组SRAM用于显示的同时,另一组SRAM用于图像数据的更新,然后在两组SRAM之间切换。这样做会提高一些成本,而且需要更复杂的总线控制。
(3) 利用FPAG/CPLD和SDRAM构造双口SRAM。这种方法实时性好,成本较低,时序控制比较复杂,它是
实现高性能低成本要求的最佳方案。
(4) 采用一组SRAM作为显存,可以简化系统设计、降低成本。这时可以考虑利用行时序和帧时序中SRAM总线空闲的时序段,在不关闭图像显示的情况下实现显存SRAM的数据更新。该方法的更新率与数据写速度密切相关,显存的写数据速度越快,该方法的更新率就越高。
假设CPU的工作时钟最大为60MHz,并采用JPEG解码更新方式。这时如果将解码缓存区分配在CPU片内内存,则更新数据时直接由内存向 SRAM写数据,一次需要0.17μs;如果将解码缓存区分配在片外空间,则更新数据时CPU要先从片外读数据,再向SRAM写数据,这样写一次需要 0.25μs。在相邻显示的两帧图像只存在局部差别或更新文本显示信息时,可使用局部数据更新方法,以提高更新率。表2给出了显示每帧图像包含的总线空闲时间,以及在不同解码缓存区分配方式下图像全部更新和10%局部更新的帧率。这里提到的帧率是指对显存数据的更新速度,而不是指图像的屏幕刷新率,它对刷新率没有影响。
基于以上方案设计的嵌入式VGA显示系统在只有系统控制板和CRT显示器的情况下实现了嵌入式高分辨率VGA显示。
通过对嵌入式VGA显示系统的设计分析和实际使用,得到如下结论:
(1) 由于VGA显示是一个高速过程,所以选择器件时要选择高速器件。
(2) VGA显示时序要求较严格,时序中的前后沿及同步脉冲宽度都要依照严格的参考数据设置。
(3) 在一般情况下,由于数据接口的限制,数据更新率不能达到计算机的水平。通过一些特殊设计,还是能够满足大多数嵌入式VGA的需求。
(4) 性能、成本和复杂度要综合考虑,要以系统的实际需求为目标,采用合理而实用的设计方案。
VGA所使用的视讯内存,透过一个窗口对应于PC的主内存,它们的真实位址为0xA000和0xC000之间的内存。典型地来说位址的开始点是:
* 0xA000 使用于 EGA/VGA 图型模式(64 KiB)
* 0xB000 单色文字模式(32 KiB)
* 0xB800 彩色文字模式和 CGA 相容模式(32 KiB)
由于使用的区段皆不相同,在同一部机器上装置一个单色显卡(MDA)和另一个彩色显卡(VGA、EGA或CGA)是不冲突的。在 1980 年代初,这种典型的搭配方式用于 Lotus 1-2-3 试算表上,一部高解析单色屏幕用来显示文字,而另一部低解析的 CGA 屏幕用来显示图表。许多程式设计师也用这种配置来开发软件,一部屏幕显示 debug 细节,另一部屏幕则显示真正的软件运行画面。许多商业的除错软件都支援这种配置,例如 Borland 的 Turbo Debugger、由 Alan J. Cox 开发的 D86、微软的 CodeView 等,Turbo Debugger 和 CodeView 可以甚至可拿来 debug 微软的 Windows 软件。也有 DOS 驱动程式如ox.sys模拟一个终端机来接受 Windows 的 debug 讯息,而不用真正接上另一个终端机。在 DOS 底下使用“单色模式”指令,使其输出转向单色也是可能的。另外,假如电脑上并无单色显卡,那么可以使用 EMM386.EXE 程序让其他程式可以使用 B000-B7FF 这一段内存。(于 config.sys 档案中加入 "DEVICE=EMM386.EXE I=B000-B7FF")
一个未被纪录但十分广泛使用的技术称作 Mode X(由 Michael Abrash 导入),使程式设计师能够使用在 Mode 13h 之下无法做到的分辨率。他将 256 KiB 连续的视讯内存“解开”并分成四个层次,因此在 256 色模式时全部 256 KiB 的内存都可以使用。技术上这将使得处理变得更复杂,并且效能降低。但在一些特殊情况下,效能损失的情况可以被弥补:
* 单色的多边形填色增快,因为一次写入可以设定四个像素。
* VGA 可以用来协助视讯内存之间的拷贝,有些时候会比使用 8088 或 80286 等慢速 CPU 更快。
* 提供更高的分辨率:16 色可使用 704×528、736×552、768×576、甚至 800×600。诸如 Xlib(1990 年代早期的 C 图形函式库)和 ColoRIX(256 色的图形程式)支援 256 色下的各种分辨率调和:直行 256、320 和 360 个像素,以及水平行 200、240、256、400 和 480 个像素的组合(上限的 640×400 几乎用掉 256 KiB 中每一个 byte)。不过,320×240仍然是最常被使用的,因它为典型的4:3比例,为方形像素。
* multiple video pages 让程序员能够使用双重缓冲(所有的 16 色模式都可),这在 Mode 13h 无法办到。
有时候,显示器必须降低更新频率来满足这些模式,这会造成眼睛的疲劳这样的低分辨率虽然在PC市场早已淡出,但在Pocket PC和PDA市场,它正逐渐成为标准。它也常被用来指称15针的D型接头,这种接头仍然用来传输各式各样分辨率的类比讯号。
曾经IBM官方宣布VGA被XGA标准所取代,但在历史上,它是被其他的OEM制造商使用的所谓SVGA标准取代了。
VGA中的A指的是“阵列(array)”而非“转换器(adapter)”,因为它从一开始就被设计为一个单一的整合芯片,用来取代Motorola 6845和数十个离散的逻辑芯片组合而成的ISA母版,这种设计是之前的MDA、CGA和EGA所使用的。VGA的这个特性允许它轻易的殖入PC的主板之中,只需要额外的视讯内存、振荡器和一个RAMDAC,就具备显示功能。IBM的PS/2电脑系列就是采用将VGA放置于主板上的设计。
VGA的规格表如下:
* 256 KiB 的 Video RAM
* 16 色和 256 色模式
* 总共 262144 种颜色的色版(红、绿、蓝三色各 6 bit,总共 (26)3 种)
* 选择性的 25.2 MHz 或 28.3 MHz 处理频率
* 最多 720 个水平像素
* 最多 480 条线
* 最高 70 Hz 的更新频率
* Vertical Blanking interrupt(不是所有卡都支援)
* 平面模式:最多 16 色(4 bit 面板)
* Packed-pixel 模式:256 色(Mode 13h)
* 顺畅卷动画面的能力
* Some "Raster Ops" support
* Barrel shifter
* 支援分割画面
VGA支援可单独操控像素的APA(All Points Addressable)模式,也支援字母与数字的文字模式。标准的图形模式如下:
* 640×480×16色
* 640×350×16色
* 320×200×16色
* 320×200×256色(Mode 13h)
它也支援用模拟的方式画出以往规格的分辨率:EGA、CGA和MDA。
标准的VGA文字模式使用 80×25 或 40×25 个字母或数字组成的平面。每个字符的块状区域可以选择16种前景色和8种背景色;8种背景色来自bit容量较低的集合(以今天的标准来说,例如 ffffff 或者是 000000)。而字符本身也可设定是否闪烁,而字符的闪烁动作都是同时的。画面的闪烁功能和选择背景颜色的功能是可交换的,换句话说两者只能择一。以上这些选项和IBM先前生产的 CGA 转换器是相同的。
VGA虽然支援黑白和彩色的文字模式,但黑白模式很少使用。大多的VGA在显示黑白模式时使用彩色模式,即是将灰色字画在黑色背景上。而使用VGA 的单色显示器也能很好的支援这样的彩色模式。现代显示器和显卡若连接不当,偶尔会导致显卡的VGA部份侦测显示器为单色的,而这将使BIOS开机显示为黑白模式。通常在加载操作系统和适当的驱动程式以后,显卡的设定被覆盖,显示器就会变回彩色。
在彩色的文字模式中,每个字符其实由两个byte代表。较低的一个byte用来显示字符,而较高的byte就用来代表彩色、闪烁等等属性。这种成对的byte模式是从CGA就一直传续下来的。
VGA的色彩系统可以向前相容于EGA和CGA转换器,而它在其上又新增了一种设定。CGA可以显示16种色彩,EGA则将其扩充成从64种颜色色版选出的16色模式(即红绿蓝各2 bits)。VGA则更将其扩充成256种颜色色版,但为了向前相容,一次只能选择256种之中的64种(例如第一个64种颜色集合、第二个…)。所以一个。它们也不相容于较老旧的显示器,将造成诸如 overscan、闪烁、垂直滚动、缺乏水平同步等等缺点。因为如此,多数的商业软件使用的 VGA 调适都限制在显示器的“安全界线”之下,例如 320×400(双倍分辨率,2 video pages)、320×240(方形像素,3 video pages)和 360x480(最高的相容分辨率,1 video page)。
VGA数据线
VGA数据线是用来连接VGA接口设备的线缆,长度有1.5米,3米,到100多米不等,因为它所采用的线材比较粗象电缆一样因此几十米上百米也不会出现明显的信号减退现象,不过相对于HDMI线就没那么清晰。
一般在VGA接头上,会1,5,6,10,11,15等标明每个接口编号。如果没有,如上图所示编号。
VGA接口15根针,其对应接口定义如下:
1.红基色 red
2.绿基色 green
3.蓝基色 blue
4.地址码 ID Bit(也有部分是RES,或者为ID2显示器标示位2)
5.自测试 ( 各家定义不同 )(一般为GND)
6.红地
7.绿地
8.蓝地
9.保留 ( 各家定义不同 )(KEY··我也不是很理解)
10. 数字地
11.地址码(ID0显示器标示位0)
12.地址码(ID1显示器标示位1)
13.行同步
14.场同步
15.地址码 ( ID3或显示器标示位3 )
VGA(Video Graphics Array)是IBM于1987年提出的一个使用模拟信号的电脑显示标准,这个标准已对于现今的个人电脑市场已经十分过时。即使如此,VGA仍然是最多制造商所共同支援的一个低标准,个人电脑在加载自己的独特驱动程式之前,都必须支援VGA的标准。例如,微软Windows系列产品的开机画面仍然使用VGA显示模式,这也说明其分辨率和载色数的不足。
VGA这个术语常常不论其图形装置,而直接用于指称640×480的分辨率。VGA装置可以同时储存4个完整的EGA色版,并且它们之间可以快速转换,在画面上看起来就像是即时的变色。
除了扩充为256色的EGA式色版,这256种色彩其实可以透过 VGA DAC(Digital-to-analog converter),任意的指定为任何一种颜色。这就程度上改变了原本EGA的色版规则,因为原本在EGA上,这只是一个让程式可以在每个频道(即红绿蓝)在2 bit以下选择最多种颜色的方式。但在VGA下它只是简单的64种颜色一组的表格,每一种都可以单独改变——例如EGA颜色的首两个bit代表红色的数量,在VGA中就不一定如此了。
VGA在指定色版颜色时,一个颜色频道有6个bit,红、绿、蓝各有64种不同的变化,因此总共有 262,144 种颜色。在这其中的任何 256 种颜色可以被选为色版颜色(而这 256 种的任何 16 种可以用来显示 CGA 模式的色彩)。
这个方法最终仍然使了VGA模式在显示EGA和CGA模式时,能够使用前所未有的色彩,因为VGA是使用模拟的方式来绘出EGA和CGA画面。提供一个色版转换的例子:要把文字模式的字符颜色设定为暗红色,暗红色就必须是 CGA 16 色集合中的一种颜色(譬如说,取代 CGA 默认的 7 号灰色),这个 7 号位置将被指定为 EGA 色版中的 42 号,然后 VGA DAC 将 EGA #42 指定为暗红色。则画面上的原本的 CGA 七号灰色,都会变成暗红色。这个技巧在 256 色的 VGA DOS 游戏中,常常被用来表示加载游戏的淡入淡出画面。
总结来说,CGA 和 EGA 同时只能显示 16 种色彩,而 VGA 因为使用了 Mode 13h 而可以一次显示 256 色版中的所有色彩,而这 256 种颜色又是从 262,144 种颜色中挑出的。
高级视频图形阵列(Super Video Graphics Array或Super VGA或SVGA),由VESA为IBM兼容机推出的标准。分辨率为800x600(每像素4比特,16种颜色可选)。
SVGA,属于VGA屏幕的替代品,最大支持800×600分辨率,屏幕大小为12.1英寸,由于像素较低所以目前采用这一屏幕的笔记本也很少了。
肉眼对颜色的敏感远大于分辨率,所以即使分辨率较低图像依然生动鲜明。VGA由于良好的性能迅速开始流行,厂商们纷纷在VGA基础上加以扩充,如将显存提高至1M并使其支持更高分辨率如800X600或1024X768,这些扩充的模式就称之为VESA(Video Electronics Standards Association,视频电子标准协会)的Super VGA模式,简称SVGA,现在的显卡和显示器都支持SVGA模式。不管是VGA还是SVGA,使用的连线都是15针的梯形插头,传输模拟信号。
SVGA、XGA和SXGA是主要的几种分辨率(或解析度)标准。是计算机和投影仪上用以描述常见的几种分辨率的术语。
显示模式:彩色显示器又分为CGA,EGA,VGA,SVGA,TVGA,XGA等VGA的英文全称是Video Graphic Array,即显示绘图阵列。VGA支持在640X480的较高分辨率下同时显示16种色彩或256种灰度,同时在320X240分辨率下可以同时显示256种颜色.肉眼对颜色的敏感远大于分辨率,所以即使分辨率较低图像依然生动鲜明。VGA由于良好的性能迅速开始流行,厂商们纷纷在VGA基础上加以扩充,如将显存提高至1M并使其支持更高分辨率如800X600或1024X768,这些扩充的模式就称之为VESA(Video Electronics Standards Association,视频电子标准协会)的Super VGA模式,简称SVGA,现在的显卡和显示器都支持SVGA模式。不管是VGA还是SVGA,使用的连线都是15针的梯形插头,传输模拟信号。典型的 IBM指标是:CGA为320×200和8色,EGA为640×350和16色,VGA为640×480,SVGA为800×600、1024×768、 1280×1024和1600×1200等。目前的显示都采用VGA以上的显示模式,它们的同屏彩色数可在16、256、16K、32K、64K、16M (所谓真彩色)直到4G中选择。
1.名词定义
高级扩展图形阵列(Super eXtended Graphics Array或Super XGA或SXGA)。一个分辨率为1280x1024的既成事实显示标准,每个像素用32比特表示(真彩色)。这种被广泛采用的显示标准的纵横比是5:4而不是常见的4:3。
2.专用词与分辨率对照表
上述解释最后一句曾经造成误解,让人以为SXGA跟普通显示器不同,是一种特殊规格。后来才发现,SXGA就是分辨率为1280x1024的意思。另外附上其他的专用词对应的分辨率列表。
专用词 | 分辨率 | 像素总数 |
QQVGA (Quarter-Quarter-VGA) | 160×120 | 19,200 |
QVGA (Quarter-VGA) | 320×240 | 76,800 |
WQVGA (Wide Quarter-VGA) | 400×240 | 96,000 |
HVGA (Half VGA) | 640×240 320×480 |
153,600 |
VGA | 640×480 | 307,200 |
SVGA (Super-VGA) | 800×600 | 480,000 |
XGA | 1024×768 | 786,432 |
WXGA (Wide XGA) | 1280×768 1280×800 1366×768 |
983,040 1,024,000 1,049,088 |
WSXGA (Wide Super-XGA) | 1280×854 | 1,093,120 |
Quad-VGA | 1280×960 | 1,228,800 |
WXGA+ (Wide XGA+) | 1440×900 | 1,296,000 |
SXGA (Super-XGA) | 1280×1024 | 1,310,720 |
WXGA++ (Wide XGA++) | 1600×900 | 1,440,000 |
SXGA+ | 1400×1050 | 1,470,000 |
WSXGA+ (Wide Super-XGA+) | 1680×1050 | 1,764,000 |
UXGA (Ultra-XGA) | 1600×1200 | 1,920,000 |
WUXGA (Wide Ultra-XGA) | 1920×1200 | 2,304,000 |
QXGA (Quad-XGA) | 2048×1536 | 3,145,728 |
WQXGA (Wide Quad-XGA) | 2560×1600 | 4,096,000 |
QSXGA (Quad-Super-XGA) | 2560×2048 | 5,242,880 |
QUXGA (Quad-Ultra-XGA) | 3200×2400 | 7,680,000 |
4K2K | 4096×2048 | 8,388,608 |
QUXGA Wide | 3840×2400 | 9,216,000 |