VGA的显示系统
显存与显示
在VGA显示时,要考虑如何实现显存数据更新与显示的同步进行。解决的方案有以下几种:
(1) 采用具有缓存作用的双口RAM,这种方法使用的器件数量多、功耗大、成本高,基本不可取。
(2) 采用两组SRAM进行乒乓工作模式,一组SRAM用于显示的同时,另一组SRAM用于图像数据的更新,然后在两组SRAM之间切换。这样做会提高一些成本,而且需要更复杂的总线控制。
(3) 利用FPGA/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 图型模式(4 KB)
* 0xB000 单色文字模式(2 KB)
* 0xB800 彩色文字模式和 CGA 相容模式(2 KB)
由于使用的区段皆不相同,在同一部机器上装置一个单色显卡(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 KB 的内存都可以使用。技术上这将使得处理变得更复杂,并且效能降低。但在一些特殊情况下,效能损失的情况可以被弥补:
* 单色的多边形填色增快,因为一次写入可以设定四个像素。
* 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。