mingle
驱动牛犊
驱动牛犊
  • 注册日期2002-03-03
  • 最后登录2004-05-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1505回复:10

关于显示芯片的一系列问题

楼主#
更多 发布于:2003-02-16 13:37
1 如果要用单片机把数据变成文字显示在VGA的显示器上,肯定要
  用一个类似PC机显卡功能的芯片。请告诉有什么芯片可用?在
  什么地方有关于显示芯片的资源。
2 PC机和显卡要同时访问显存,他们之间是如何协调的?
  如果在场逆程期间传送数据,那CPU在场正程会插入等待吗?
  当在DOS下用C把内存拷贝到显存,CPU自动用DMA方式吗?
  
我终于会使用签名档了
X_ray
驱动中牛
驱动中牛
  • 注册日期2003-02-03
  • 最后登录2004-07-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-02-17 04:06
现在的显卡芯片都是显卡厂用FPGA或CPLD设计好后委托芯片厂加工.
以前的低分辨率显卡都用专用芯片.这类芯片不少,但是估计现在买不到了.
CPU和显卡(在显示一个象素的间隔内)用时间分割分享MEMORY,不用等待.
CPU是不会自动DMA的.
joe_zhao
驱动牛犊
驱动牛犊
  • 注册日期2003-02-10
  • 最后登录2007-01-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-02-17 10:01
请问:你对显示速度有如同VGA卡的要求吗?有解决的方法。
Email:joe_zhao@sina.com.cn
mingle
驱动牛犊
驱动牛犊
  • 注册日期2002-03-03
  • 最后登录2004-05-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-02-17 19:58
现在的显卡芯片都是显卡厂用FPGA或CPLD设计好后委托芯片厂加工.
以前的低分辨率显卡都用专用芯片.这类芯片不少,但是估计现在买不到了.
CPU和显卡(在显示一个象素的间隔内)用时间分割分享MEMORY,不用等待.
CPU是不会自动DMA的.

我算了一下,640 X 480 X 256C X 60Hz大概的行频是32KHz。那么每一行周期大概是30us,在30us中,显卡的DAC要读显存640次,那么访问一个像素的时间大概是50ns。而ET4000显卡的显存是70ns的。要在50ns的时间内,还要让CPU来共享。这好象不太可能。这样算起来,ET4000的显卡根本不能工作在这个模式下,显存太慢了。
以前在DOS下编图形程序,总是在内存在开辟一块区域,处理好后,再用MEMCPY函数拷贝到OXA000000000L。CPU不用DMA方式,难道它一个字节一个字节传过去啊。
TO joe_zhao
你有什么解决方法啊。保密吗?
要求当然和VGA差不多了。但要显示图象。
我只是对这个问题感兴趣,没打算进行生产。

昨天我去了www.vesa.org,看到很多协议,当然有用的都不是免费的。找了半天也没找到有哪些站点有免费的下。我想我自己用存储器加控制电路和电阻网络,做个64色显示的。不知道是不是可行。
我终于会使用签名档了
X_ray
驱动中牛
驱动中牛
  • 注册日期2003-02-03
  • 最后登录2004-07-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-02-18 11:02
一次要读8位,有几百ns.
X_ray
驱动中牛
驱动中牛
  • 注册日期2003-02-03
  • 最后登录2004-07-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-02-18 11:11
DMA有专用的DMA控制器,CPU设定好SOURCE,DESTINATION和LENGTH后交出总线控制权.
mingle
驱动牛犊
驱动牛犊
  • 注册日期2002-03-03
  • 最后登录2004-05-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-02-18 20:10
一次要读8位,有几百ns.

因为256色模式下,一个点就是8位。
在640 X 480 X 256C模式下要307K的显存。
我终于会使用签名档了
X_ray
驱动中牛
驱动中牛
  • 注册日期2003-02-03
  • 最后登录2004-07-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-02-19 01:29
256色是8位,但这8位在8个页(每页表示不同的颜色)的同一位置,而不是连着的。你最好先找一些显卡的硬件资料读一读。
mingle
驱动牛犊
驱动牛犊
  • 注册日期2002-03-03
  • 最后登录2004-05-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-02-20 03:50
mingle摘录:显卡工作原理
  显示卡负责的的工作及其进行的程序究竟是怎样的呢?

  我们必须了解,资料 (data) 一旦离开 CPU,必须通过 4 个 步骤,最后才会到达显示屏:

  1、从总线 (bus) 进入显卡芯片 -将 CPU 送来的资料送到显卡芯片里面进行处理。 (数位资料)

  2、从 video chipset 进入 video RAM-将芯片处理完的资料送到显存。 (数位资料)

  3、从显存进入 Digital Analog Converter (= RAM DAC),由显示显存读取出资料再送到 RAM DAC 进 行资料转换的工作(数位转类比)。 (数位资料)

  4、从 DAC 进入显示器 (Monitor)-将转换完的类比资料送到显示屏 (类比资料)

  如同你所看到的,除了最后一步,每一步都是关键,并且对整体的显示效能 (graphic performance) 关系十分重大。

  注: 显示效能是系统效能的一部份,其效能的高低由以上四步所决定,它与显示卡的效能 (video performance) 不太一样,如要严格区分,显示卡的效能应该受中间两步所决定,因为这两步的资料传输都是在显示卡的内部。第一步是由 CPU 进入到显示卡里面,最后一步是由显示卡直接送资料到显示屏上,这点要了解。

  最慢的步骤就是整体速度的决定步骤 (注: 例如四人一组参加 400 公尺接力,其中有一人跑的特别慢,全组的成绩会因它个人而被拖垮,也许会殿后。但是如果他埋头苦练,或许全队可以得第一,所以跑的最慢的人是影响全队成绩的关键,而不是哪些已经跑的很快的人)。

  现在让我们来看看每一步所代表的意义及实际所发生的事情:

  CPU 和显卡芯片之间的资料传输

  这受总线的种类和总线的速度(也就是外频),主机板和他的芯片组所决定。 目前最快的总线是 PCI bus,而 VL bus, ISA, EISA and NuBus (Macs 专用) 效能就比较低。

  现在流行的AGP并不是一种总线,而只是一种接口方式(注: PCI bus 是 32 bit data path,也就是说 CPU 跟 显示卡之间是以一次 4 byte 的资料在对传,其他的 bus 应该是 16 bit data path)。

  PCI bus 的最快速度是 33 MHz 。

  显卡芯片和显存之间的资料传输以及从显存到 RAM DAC 的资料传输

  我把这两步放在一起是因为这里是影响显示卡效能的关键所在, 假如你不考虑显卡芯片的个别差异。

  显示卡最大的问题就是,可怜的显存夹在这两个非常忙碌的装置之间 (显卡芯片和 RAMDAC),必须随时受它们两个差遣。

  每一次当显示屏画面改变,芯片就必须更改显示显存里面的资料 (这动作是连续进行的,例如移动滑鼠游标,键盘游标......等等)。 同样的,RAM DAC 也必须不断地读取显存上的资料,以维持画 面的刷新。 你可以看到,显存在他们之间被捉的牢牢的。

  所以后来出现了一些聪明的做法,像是使用 VRAM, WRAM, MDRAM, SGRAM, EDO RAM, 或增加 video bus 的大小如 32 bit, 64bit, 还有现在刚出现的 128 bit。

  解析度越高,从芯片传到显存的资料就越多。 而 RAM DAC 从显存读取资料的速度就要更快才行。 你可以看到,芯片和和RAM DAC 随时都在对显存 进行存取的工作。

  一般 DRAM 的速度只能被存取到一个最大值(如 70ns 或 60ns),所以 在芯片结束了存取 (read/write) 显存之后, 才能换 RAM DAC 去读取显存,如此一直反覆不断。

  显示卡制造商想到叁种不同的方法来对付这个问题:

  首先出现的是,将显存设计成 dual port (注: dual port 意指两个出入口或通道),具有两个不同的资料通道 (data path)。也就是说,芯片透过一个 port 读写显存,但 RAM DAC 透过第二个独立的 port 读取显存。芯片不用再等 RAM DAC,RAM DAC 也不用再等芯片,这种显存称做 VRAM。

  dual port 的设计明显地更为复杂,所以生产成本较高。这就是为什么 VRAM 显示卡较贵但也较快的原因。

  WRAM 只被使用在 Matrox 的显示卡上(注: 这是 Matrox 自己研发的),它也具有 dual port 的设计,但是结构更加精密,所以它比 VRAM 还快,但是生产成本却比它少 20%。(但是买不到 - 我也一样)。

  可能你还搞不清楚,为什么提供高刷新率和高解析度的显示卡通常都是使用这两种显存?

  你应该好好想想以下的事情,显示屏刷新率 (refresh rate) 较高的意思也就是说 RAM DAC 将一张全显示屏的画面资料送给显示器的频率比在低刷新率时要更加频繁。因此 RAM DAC读取显存的次数会更加频繁(注: 显示屏刷新率越高,越不易感觉到显示屏的闪烁,对眼睛比较好)。

  这只能透过使用 VRAM/WRAM 来解决,因为他们可以透过第二个 port 来读取显存, 不然的话,使用 DRAM/EDO 的显示卡,你就会看到显示的效能就会降的非常多。

  你不相信? 好吧,只要跑一下你最喜欢的显示测试软件就知道了,首先先在低刷新率,然后再跳到高刷新率-假如你的卡是 DRAM/EDO 显示卡,你将看到有很明显的差别。 这在较高的色彩之下也同样适用。

  在 256 色(8bit)及解析度 1024x768 的显示屏上,RAM DAC 需要读取显存资料 786432 bytes 送到显示器以在显示屏上形成一个完整的画面。(注: 8 bit=1 bytes,1024x768=786432 点,所以一个整个显示屏的画面共需 786432x1=786432 bytes)

  而在 1677 万色(24bit),RAM DAC 就需要读取 2359296 byte,这要花更多的时间。所以你那便宜的卡从低色彩调到全彩的时候,你常常无法使用跟低色彩一样高的刷新率,原因就在这里。 (注: 例如你使用 75 和 90 MHz 的显示屏刷新率,去跑 xing 算张数,你会看到很明显的差别, 用低解析度跟高解析度去跑,情况也是一样)

  其他对付这个问题的方法是增加video memory bus size。 三年前每个人都对刚推出的 32 bit 显示卡感到非常地震惊。 这些卡在显卡芯片、显存和 RAM DAC 之间具有 32 bit data path。 有了这个 32 bit 的 data path,你一次可以传输 4 byte(32 bit/8=4 byte)。

  后来出现了 64 bit 的显示卡,等於一次同时可传输 8 byte,这是目前的标准。 而且就在最近不久,有一些新的显卡芯片问世,具有 128 bit 的 data path ,等於一次传输 16 byte。

  由此可知,使用 VRAM/WRAM 和具有宽 data path 的显示卡效能最好。 如果显示卡的芯片具有 128 bit data path,一定要使用 VRAM/WRAM。 ET6000 芯片 就是一个很好的例子。

  在对这个 128 bit data path 感到高兴之馀, 我们不应该忘记一件非常重要的事情: 一般用在大部分显示卡上 8x1Mbit 显存只具有 32 bit 的 data path !!! 因此,128 bit 的芯片如果配上这种显存,一次也只能存取32bit!!!

  这就是为什么所有的 64 bit 显示卡假如只内建 1 MB 的显存,效能就会慢非常多。 不要买这种显示卡!!!! (注: 这里的 1MB 是指 8 块 1Mbit 显存芯片所组成的 1 MB, 这是过去的显示卡可见到,如VESA,VL-bus,或早期的 PCI 显示卡。 这种卡市面上已经买不到,除非你买中古货。 现在市面上的 PCI 显示卡内建 1MB 的显存, 但是他的 1MB 是由 2 个 512K 的 DRAM 或 EDO 所组成的, 而且都可以升级到 2MB 或更高, 这些显存的 data path 为 64 bit,正好配上 64 bit 的芯片组,例如 S3 trio64+)。

  具有128 bit data path的ET6000芯片需要特殊的显存搭配才能发挥他的128 bit data path的功能,这就是 MDRAM(multi bank DRAM)。

  这种显存跟一般的DRAM在结构上有所不同,所以透过interleaving和其他技巧一次可以被存取128bit,即使卡上只有 2 或 2.25 MB 的显存。 (注: 这就是为何 ET6000 显示卡的显存有 2.25 这种奇怪的数字) Number Nine Imagine 128 使用这种芯片,但是却内建 4MB 显存,否则就无法使用 128 bit data path。

  第三个让显存存取更快速的很明显的方法就是直接增加 video chipset/video RAM/RAM DAC 的频率(clock speed) (注: 意思也就是增加外频)。

  在很多年以前,显卡芯片的速度早就可以跑的比主机板显存的总线速度还快。 现在 ET6000 芯片很快就可以跑 100 MHz ( Tseng 现在对这个还有问题,目前最快的是 90 MHz 而且其他显卡芯片甚至跑的还更快。 为此(使用较高的外频),很明显地你也需要特殊的显存, 因为我们都知道,我们的 Pentium 板子上的主显存最大只跑 66 MHz 的 clock speed(有的例外 75, 有的还有 83)。

  MDRAM 可以办到,而且现在最新的显示显存就是 SDRAM。 SGRAM 不过是 SDRAM (synchronous DRAM) 的「显示版本」而已,所以我们知道它的速度可以高达 125 MHz !!!

  总结以上所有的观点,我们发现,要有最理想的效能, PCI 系统应该要使用最新的芯片组并且具备更高的PCI clock (也就外频越高越好)。还有显示卡上要有高效能的芯片或 VRAM/WRAM的显存或宽的data path,或最好三者兼具!

--------------------------------------------------------
本人有一块ET4000的显卡可以做研究。芯片组是ET4000AX,反正它的资料是查不到了。有两片动态RAM,型号是M514260B。容量是512K,结构是256K X 16bit。这样两片RAM就是1MB。RAM的数据线和地址线根本没和ISA(应该是EISA吧)总线相连。的确是ET4000AX芯片与ISA相连。两片RAM的地址和数据线也没有复用,分别接到了ET4000AX上。资料上说ET4000是32位的显卡。而ISA总线是16位。CPU每次传数据是传一个字给ET40000,ET4000的DAC却是一次读32位。这样算起来,30uS的行周期就只用读640/4=160次(假设一个点用一个字节)每次可以用180nS来读取。所以70nS的芯片可以做显存。因为这个RAM是普通的动态存储器,ET4000AX访问和DAC访问要分时进行。假设80NS的时间给DAC,那么剩下的100NS的时间也只能供ET4000AX访问一次。这样180NS的时间,ET4000AX最快送4字节的数据给RAM。但CPU送一次数据要100NS以上吗?否则就要等待。因此CPU、CHIPSET和DAC之间的协调真是让人不理解。关于DMA方式,我是一点都不懂。不知道是不是还有其他的方法。
从这上面来看,显卡上根本没“页”这个概念。你所指的页应该是一种逻辑上的页。但硬件根本不会去管你的逻辑上是怎样划分的。而且256色模式,数据只是指向一个CHIPSET的24位调色板的指针。你可以修改任何一个调色板索引的颜色。并非是页的上面存储了颜色值。
我终于会使用签名档了
X_ray
驱动中牛
驱动中牛
  • 注册日期2003-02-03
  • 最后登录2004-07-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-02-20 14:07
页(BANK)当然是逻辑上的,随着显示模式变化而变化。例如640*480,如果第一页为地址0,则第二页在0+640*480的地方。无任是8,16,32还是64位原理都一样。显存上的一个字节,字或双字总是对应屏幕上连续的点。
link_bridge
驱动巨牛
驱动巨牛
  • 注册日期2002-11-28
  • 最后登录2011-05-15
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望13点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-02-24 11:12
good!
游客

返回顶部