显示驱动器ic、显示模块以及合并有图形引擎的电子装置的制作方法

文档序号:6408498阅读:301来源:国知局
专利名称:显示驱动器ic、显示模块以及合并有图形引擎的电子装置的制作方法
技术领域
本发明涉及显示驱动器IC、显示模块以及合并有图形引擎的电子装置。
本发明尤其应用于便携式装置或仪表板(console)电子装置中的小面积显示器。存在大量这种装置,如PDA,无绳、移动以及桌式电话,车内信息仪表板,手持电子游戏机,多功能手表等。

背景技术
在现有技术中,通常具有主CPU,该主CPU负责接收显示命令,对它们处理,并采用描述每个显示像素的属性的像素数据来将结果发送到显示模块。发送到显示模块的数据量与显示分辨率和色深度(colourdepth)成比例。例如,具有四级灰度级的96×96像素的小单色显示器只需将相当少量的数据传送给显示模块。但是,这种屏幕不能满足用户对更具吸引力和增加信息的显示的需求。
随着对彩色显示器和对要求更高屏幕分辨率的复杂图形的需求,要由CPU处理然后发送到显示模块的数据量变得更多了。更复杂的图形处理给CPU造成了沉重的负担,并使设备速度变慢,从而显示反应和刷新速率可能变得不可接受。这对于游戏应用尤其成为问题。另一问题是由增加的图形处理产生的功耗,该功耗可以极大地缩短对电池供电装置进行充电的间隔。
在个人计算机和计算机网络的相当不同的技术领域中,通常由处理器单元(processor box)中容纳的附加卡上的或作为主板上的嵌入单元的硬件图形引擎(也称作图形加速器),来解决按可接受的速度来显示复杂图形的问题。所述图形引擎至少接管了主CPU的一些显示命令处理。图形引擎是专门针对图形处理而被开发出来的,从而对于相同的图形任务,它们比CPU更快,并且消耗的功率更少。然后所得视频数据被从处理器单元发送到一分立的“哑”显示模块。
在PC中使用的公知图形引擎被专门设计用于大面积显示器,因此是高度复杂的系统,其对于所用的大量门电路需要分立的硅片。将这些引擎并入到便携式装置中是不实用的,因为这些便携式装置具有小面积显示器,并且在这些便携式装置中,尺寸和重量受到严格限制,而且,其具有有限的电力资源。
而且,PC图形引擎被设计成处理在大面积显示器中使用的数据类型,如复杂图像的多重位图。现在,发送到移动和小面积的显示器的数据可能是矢量图形格式的。矢量图形语言的示例有MacroMediaFlashTM和SVGTM。矢量图形定义还被用于许多游戏应用编程接口(API),例如Microsoft DirectX和Silicon Graphics OpenGL。
在矢量图形中,将图像定义为多个复杂多边形。这使得矢量图形适合于可由数学函数容易地定义的图像,如游戏屏面、文字和GPS导航图。对于这种图像,矢量图形比等同的位图有效得多。即,定义与位图文件(按照每个单独的显示像素)相同的细节(按照复杂多边形)的矢量图形文件含有更少的字节。位图文件是采用像素格式的最终图像数据,其可被直接复制给显示器。
复杂多边形是可以自相交并且在其中具有“孔”的多边形。复杂多边形的示例是诸如“X”和“8”的字母和数字以及日语汉字字符。当然,矢量图形也适用于诸如三角形(其构成用于许多计算机游戏的基本图元)的简单多边形的定义。所述多边形由直边沿或曲边沿以及填充命令(fillcommand)来定义。理论上,对于每个多边形的边沿数没有限制。但是,含有例如复杂景物照片的矢量图形文件将含有比等同的位图多几倍的字节。
已知的还有多种软件图形处理算法,其中一些适用于与小面积显示器采用的高级/矢量图形语言一起使用。例如,可以在“Computer GraphicsPrinciples and Practice”Foley,Van Damn,Feiner,Hughes 1996 Edition,ISBN 0-201-84840-6中找到一些算法。
已知的软件图形算法使用带链表和排序操作的内部动态数据结构。在软件引擎开始再现(根据所接收到的高级命令产生用于显示的图像)之前,必须将所有给出多边形边沿数据的矢量图形命令读入软件引擎,并对其进行存储。将用于每个多边形的命令存储在用于每个多边形边沿的起点和终点的主列表中。由扫描线(scanline)将多边形绘制成扫描线。针对显示器的每个扫描线,所述软件选择哪些多边形边沿与该扫描线相交,然后标识每个选定边沿在何处与该扫描线相交。一旦标识了交点,就可以在这些交点之间填充所述多边形。可以被处理的所述主列表的大小受到软件中的可用存储量的限制。因此,已知的软件算法存在这样的缺点,即,它们需要大存储量,以存储用于再现前的所有复杂多边形的命令。这可使制造商对将矢量图形处理并入到移动装置中抱有偏见。
为了在便携式电子装置中的显示用途,希望克服现有技术中固有的缺点,并且减少CPU负荷和数据传输量。


发明内容
在独立权利要求中限定了本发明,现在应对其进行说明。在独立权利要求中限定了有利的特征。
根据本发明的一个实施例,提供了一种显示驱动器IC,其用于连接到小面积显示器,所述IC包括一硬件实现的图形引擎,其用于接收矢量图形命令和根据所接收到的命令来再现用于显示像素的图像数据,并且,所述IC还包括显示驱动器电路,其用于根据由所述图形引擎所再现的图像数据来驱动所连接的显示器。
根据本发明的另一实施例,提供了一种用于合并到便携式电子装置中的显示模块,其包括 显示器; 硬件实现的图形引擎,用于接收矢量图形命令和根据所接收到的命令再现用于显示像素的图像数据;以及 显示驱动器电路,连接到所述图形引擎和所述显示器,用于根据由所述图形引擎所再现的图像数据来驱动所述显示器。
尽管个人计算机(PC)解决方案广泛用于具有“哑”显示模块、分立的处理器单元以及固定电源的应用,但是对于CPU与显示器之间的流量对功耗有很大影响的便携式装置,不能利用个人计算机解决方案来克服图形处理的困难。这是由于从处理器区发送到哑显示器的数据不受PC图形引擎的引入的影响。与以前一样,将RGB信号从所述处理器单元发送到所述显示器。因此,到所述显示器的高数据流量和所产生的功耗没有变化。
发明人首次认识到图形引擎不需要设置在装置的CPU部分中,而可以保持在所述显示模块中。他们已经能够设计出足够简单的硬件图形引擎,其可嵌入用于小面积显示器的显示驱动器IC中或嵌入用于便携式电装置的显示模块中。由于所述图形引擎位于所述显示模块中,所以在CPU与移动装置的显示部分之间传输的是高级图形命令,而不是像素数据。与未加速的CPU处理相比,图形引擎的使用降低了功耗。在显示模块中使用图形引擎使得在几乎相同大小和重量的装置中可以节省相当多的功率。
因此,本发明的实施例使得便携式电子装置可以配备有一种显示器,该显示器能够根据矢量图形命令来显示图像,同时保持快速的显示刷新和响应时间以及长电池寿命。
这里指的小面积显示器包括具有用于便携式电子装置的大小的显示器,而不包括例如用于PC的显示器。
这里指的便携式装置包括足够小且轻以便能由用户携带的手持、佩戴、袋装以及仪表板装置等。
优选地,所述图形引擎包括控制电路/逻辑,其用于一次读入一条矢量图形命令,将所述命令转换为空间图像信息,然后在类似地处理下一命令之前丢弃原命令。例如,所述引擎可以一次读入用于待显示图像的一个多边形边沿的一条边沿绘制命令,或者读入一条填充命令以对已被读入所述引擎的多边形进行着色。
在优选实施例中,所述图形引擎包括连接到一(具有有限分辨率的)边沿缓冲区(edge buffer)的边沿绘制逻辑/电路,所述边沿缓冲区用于为读入所述引擎中的任何多边形(的多个边沿)存储空间信息。该逻辑和边沿缓冲区的布置不仅使得一旦已将用于每个边沿的数据读入所述缓冲区中时可以丢弃原数据,而且与先前的软件引擎相比,它还具有这样的优点,即,它对待绘制的多边形的复杂性没有限制,这可能与现有技术的高级命令的链表存储的情况相同。
所述边沿缓冲区可以具有比所述显示存储器的前缓冲区(frontbuffer)更高的分辨率。例如,可以将所述边沿缓冲区配置成存储子像素(与单个显示像素对应的多个子像素)。优选地,所述子像素在置位状态与复位状态之间进行切换,以存储所述空间信息。子像素(对显示器的每个对应像素都有一个以上子像素)的采用使得在合并成显示器大小之前,便于采用扩展的空间形式来操纵数据和抗混叠。每个对应显示像素的子像素的数目确定了可以获得的抗混叠程度。复位和置位状态的使用仅意味着所述边沿缓冲区对于每个子像素需要一位的存储空间。
优选地,所述边沿缓冲区将每个多边形边沿存储为多个边界子像素,该多个边界子像素是置位的,并且它们在所述边界缓冲区中的位置与在最终图像中的边沿位置有关。更优选地,所述边沿绘制逻辑包括裁剪器(clipper)单元,以防止对落在显示区之外的任何多边形边沿或多边形边沿部分进行处理。
所述图形引擎可以包括填充器电路/逻辑,其用于对边沿已被存储在所述边沿存储器中的多边形进行填充。该双通道方法具有如下的简单性方面的优点在给出填充多边形的颜色的步骤之前,重用了所述边沿缓冲区格式。不需要将所得的置位子像素重新存储在所述边沿缓冲区中,而是可以将其直接用于过程的随后步骤。
优选地,所述图形引擎包括一后缓冲区(back buffer),其用于在向显示驱动器存储器的前缓冲区进行传输前存储图像的一部分或全部。后缓冲区的使用避免了直接对所述前缓冲区进行再现,并且可以防止显示图像中的闪烁。
优选地,所述后缓冲区具有与所述显示存储器的前缓冲区相同的分辨率。即,所述后缓冲区中的每个像素被映射到所述前缓冲区的对应像素。优选地,所述后缓冲区具有与所述前缓冲区相同的用于表示像素的颜色和深度(RGBA值)的位数/像素。
可以提供组合逻辑/电路,以顺序地将由所述填充器电路产生的每个填充多边形组合到所述后缓冲区中。通过这种方式,在向用于显示的所述前缓冲区进行传输之前,就在所述后缓冲区中逐多边形地构建了图像。
有利的是,根据正被处理的多边形中的像素的颜色、所述像素被所述多边形覆盖的百分比、以及在所述后缓冲区中的对应像素中已经存在的颜色,来确定存储在所述后缓冲区中的每个像素的颜色。该混色步骤适合于抗混叠。
在一个优选的实现中,所述边沿缓冲区按对于每个显示像素具有一平方数个子像素的栅格的形式存储多个子像素。例如,所述边沿缓冲区中的4×4个子像素的栅格可以对应于一个显示像素。根据待要绘制的边沿对每个子像素进行置位或复位。
在一另选实施例中,不使用所述边沿缓冲区中相隔一个的子像素,以为每个显示像素提供所述平方数个子像素中的一半。在该实施例中,如果所述边沿绘制电路要求一未使用的子像素是置位的,那么将相邻(被使用)的子像素置于其位置处。该另选实施例具有这样的优点,即,对于每个显示像素,在所述边沿缓冲区中需要更少的位,但是稍微降低了抗混叠的质量。
可以根据边沿端点来计算每条多边形边沿的斜度,然后沿着连线对所述栅格的子像素进行置位。优选地,利用以下规则来对子像素进行置位 对于每条多边形边沿,只为所述子像素栅格的每条水平线置位一个子像素; 从顶部到底部(在Y方向上)对所述多个子像素进行置位; 不对所述线的最后一个子像素进行置位; 反转在所述线下置位的任何子像素。
在该实现中,所述填充器电路可以包括充当用于横贯(traverse)所述子像素栅格的虚拟笔(子像素状态设置填充器)的逻辑/代码,所述笔最初是关闭的,并且每当它遇到一置位子像素时,就在关闭与打开状态之间进行切换。优选地,将所得的数据馈送给合并电路,其用于将与每个像素相对应的所述多个子像素进行组合。
优选地,所述虚拟笔对所述多个边界子像素内的所有子像素进行置位,并且所述虚拟笔包括右手边界的多个边界像素,并对左手边界的多个边界像素进行复位,或者反过来。这避免了使数学上不重迭的多边形的子像素发生交迭。
优选地,所述虚拟笔的横贯受到限制,以便不需考虑位于所述多边形边沿之外的子像素。例如,可以提供一包围所述多边形的边界框。
优选地,在组合到所述后缓冲区之前,将与单个显示像素相对应的多个子像素(来自所述填充器电路)合并成单个像素。合并使得所述后缓冲区可以具有比所述边沿缓冲区更小的容量,因此降低了存储器需求。
可以设置组合电路,以进行向所述后缓冲区的组合,每个合并像素被所述填充多边形覆盖的子像素的数目确定了一用于将所述合并像素组合到所述后缓冲区中的混合系数(blending factor)。
一旦已完全再现了所述显示器的一部分上的、所述后缓冲区为其保持信息的所述图像,就将所述后缓冲区拷贝到所述显示存储器的所述前缓冲区。事实上,所述后缓冲区可以具有与所述前缓冲区相同的大小,并且为整个显示器保持信息。另选地,所述后缓冲区可以比所述前缓冲区小,并且只为所述显示器的一部分存储信息,所述前缓冲区中的图像是在一系列外部通道中从所述后缓冲区中来构建的。
在该后一另选中,如果在(到所述CPU的)每个外部通道中只将与待保持在所述后缓冲区中的所述图像的所述部分相关的命令发送到所述图形引擎,就缩短了所述过程。
可以为所述图形引擎配备各种附加特征,以提高其性能。
所述图形引擎还可以包括一曲线阶化器(tesselator),以将任何曲形多边形边沿划分为多个直线段,并且将所得到的多个直线段存储在所述边沿缓冲区中。
可以对所述图形引擎进行调整,以使所述后缓冲区保持一个或更多个图形(预定图像元素),所述一个或更多个图形被传输到所述前缓冲区中的由所述高级语言确定的一个或更多个位置处。所述图形可以是静态的或运动的图像(子图形(sprite)),或者甚至是文本字母。
可以为所述图形引擎配备一细线(hairline)模式,其中,通过对一位图中的多个子像素进行置位并将所述位图存储在所述边沿缓冲区中的多个位置处以形成一连线,来将多条细线存储在所述边沿缓冲区中。这种细线限定了一个像素深度的连线,并且经常用于绘制多边形轮廓。
当被实现在硬件中时,所述图形引擎可以在大小上少于100K个门,并且优选地,少于50K个门。
可以利用本发明的图形引擎来增强任何适于使用矢量图形的显示器。在优选实施例中,所述显示器是LCD或基于LED的显示器,并且所述驱动器电路是源驱动器电路。
优选地,所述显示驱动器电路是只用于显示器的一个方向(即,用于行或者用于列)的驱动器电路。其还可以包括用于控制所述显示器的控制电路。这通常是非晶TFT LCD显示器的源驱动器的情况。
所述显示驱动器电路还可以包括还包括驱动器控制电路,其用于连接到用于另一方向的独立显示驱动器。在非晶TFT LCD显示器中,所述源驱动器通常对选通驱动器进行控制。
可以为每个驱动器IC设置一个图形引擎。但是,在所述图形引擎未设置在所述驱动器IC上的情况下,所述图形引擎可以伺服所述显示模块中的多个IC,如用以驱动稍大些的显示器的多个源IC。可以为该情况下的图形引擎设置其自己的独立IC,或者可以将所述图形引擎嵌入控制其余源驱动器的主源驱动器中。
所述显示驱动器/模块还可以包括显示存储器;解码器和显示锁存器;定时、数据接口逻辑;控制逻辑;以及电源管理逻辑。
当需要矢量图形处理时(可能还有其他图形处理),本发明还可应用于具有显示单元的更大的电子装置,如PC和膝上型电脑。
本发明还涉及一电子装置,其包括 处理单元;以及 具有显示器的显示单元; 其中所述处理单元将高级(矢量)图形命令发送到所述显示单元,并且在所述显示单元中设有一本发明所述的图形引擎,以根据所述高级命令来再现用于显示像素的图像数据。
所述图形引擎不需实现在硬件中,而是另选地可以是一软件图形引擎。在该情况下,可以将必要的编码逻辑(如果需要的话)连同用于以上细述的任何优选特征的足够的代码/存储器保持在CPU中。对于如上所述的电路,本领域的技术人员容易理解,可在软件实现的代码部分中提供同样的功能。
所述图形引擎可以是程序,优选地被保持在一处理单元中,或者可以是载体上的记录或者可以采用信号的形式。
所述图形引擎的逻辑结构具有几个具体优点。一个优点是,一旦已将多边形边沿或填充命令读入所述引擎中,就不需要存储器来保持所述多边形边沿或填充命令。可以大大节省存储器,使得所述图形引擎尤其适于与便携式电子装置一起使用,而且还可用于不一定是便携式的较大的电子装置。



下面将参照附图仅仅通过示例来描述本发明的优选特征,其中 图1是表示一优选图形引擎的功能模块的框图; 图2是示出一优选图形引擎的操作的流程图; 图3是一个边沿缓冲区的示意图,其示出了要绘制的多边形的边沿和产生该多边形的绘制命令; 图4是一个边沿缓冲区的示意图,其示出了用于每个边沿命令的子像素置位; 图5是一个边沿缓冲区的示意图,其示出了一填充多边形; 图6是图5中所示的填充多边形的合并像素视图的示意图; 图7a和7b分别示出了二次贝塞尔曲线和三次贝塞尔曲线; 图8示出了根据本发明实施例的曲线阶化(tessellation)过程; 图9示出了直线和放射状梯度的四个示例; 图10示出了一标准梯度正方(gradient square); 图11示出了一待绘制在所述边沿缓冲区中的细线; 图12示出了用以在所述边沿缓冲区中绘制细线的初始圆形及其移动后的位置; 图13示出了当已经绘制了一细线时所述边沿缓冲区的最终内容; 图14示出了演示所述边沿缓冲区、后缓冲区和前缓冲区的内容的序列,其中在每个通道中所述后缓冲区都保持了显示图像的1/3; 图15示出了被拷贝到在所述前缓冲区中的两个位置处的位于所述后缓冲区中的一个子图形。
图16示出了其中再现了数百个小的2D子图形以仿真多个小颗粒的喷射的示例; 图17示出了用于所述图形引擎的硬件实现; 图18是根据本发明实施例的图形引擎的示意图,该图形引擎被集成在一用于LCD或等效类型显示器的源IC中; 图19是根据本发明实施例的图形引擎的示意图,该图形引擎被集成在一显示模块中,并且伺服用于LCD或等效类型显示器的两个源IC; 图20是合并有一图形引擎的源驱动器IC及其到CPU、显示区以及选通驱动器IC的连接的示意图; 图21示出了带有一合并图形引擎的IC驱动器的功能模块; 图22示出了TFT型结构和寻址以及用于选通驱动器IC的典型定时图; 图23示出了对LCD显示器的源驱动,其中将来自前缓冲区的颜色信息发送到所述显示器; 图24示出了一去除了奇数XY位置的单个显示像素; 图25示出了用于忙屏示例的在CPU与显示器之间经由图形引擎的数据传输和功率使用;以及 图26示出了用于旋转三角形示例的在CPU与显示器之间经由图形引擎的数据传输和功率使用。

具体实施例方式 功能概述 图1中的功能框例示了一示例性图形引擎1的主要的逻辑门电路模块。开始,将矢量图形命令通过输入/输出部10馈送给曲线阶化器11,该曲线阶化器11将任何曲边沿划分成多个直线段。所述信息传到边沿和细线绘制逻辑模块12,其将结果存储在边沿缓冲区13中,在此情况下,该边沿缓冲区13具有16位每显示像素。将所述边沿缓冲区信息馈送给扫描线填充器14部分,以按矢量图形语言的填充命令所要求的那样填充多边形。将该填充多边形信息传送到后缓冲区15(在该情况下,又是16位每显示像素),其又将所述图像转送到图像传送模块16,以将所述图像传送到所述前缓冲区。
图2中所示流程图概要示出了对于已填充多边形的全部再现过程。多边形边沿限定数据按一次一条边沿(以一条线或曲线的形式)的方式进入所述引擎。典型地,所述命令语言从后往前定义所述图像,以将图像的背景定义在前景中的多边形之前(因而读取过程同此)。若有曲线,则在将边沿存储在边沿缓冲区中之前对曲线进行阶化。一旦存储了边沿,就丢弃用于绘制所述边沿的命令。
在矢量图形中,在填充一多边形之前,由诸如“move(移动)”、“line(连线)”和“curve(曲线)”命令的命令来定义所述多边形的所有边沿,以重复进行阶化和连线绘制循环(称为第一通道),直到读取一填充命令。然后该过程转到以边沿缓冲区格式来填充多边形颜色。这称为第二通道。下一步是将所述多边形颜色与后缓冲区中的相同位置处已存在的颜色进行合成。将已填充多边形按一次一个像素的方式添加到后缓冲区。只将后缓冲区的相关像素(被所述多边形覆盖的像素)与边沿缓冲区进行合成。
一旦将一个多边形存储在后缓冲区中,所述过程就返回以如上所述读入下一多边形。将该下一多边形(其位于前一多边形的前面)按序合成到后缓冲区中。一旦已绘制出所有多边形,就将该图像从后缓冲区传送到前缓冲区,所述前缓冲区例如可以位于LCD显示器的源驱动器IC中。
边沿缓冲区 出于示例的目的,图3中所示的边沿缓冲区具有缩小的容量,并且是针对显示器的30个像素(6×5)。所述边沿缓冲区具有与显示器的每个像素相对应的4×4个子像素(16位)的子像素栅格。每个子像素只需要一位,每个子像素采用复位(默认)或置位的值。
虚线20表示待根据下面所示的命令来绘制的多边形的边沿。
●Move To(12,0)(移动到(12,0)) ●Line To(20,19)(连线到(20,19)) ●Line To(0,7)(连线到(0,7)) ●Line To(12,0)(连线到(12,0)) ●Move To(11,4)(移动到(11,4)) ●Line To(13,12)(连线到(13,12)) ●Line To(6,8)(连线到(6,8)) ●Line To(11,4)(连线到(11,4)) ●Fill(black)(填充(黑色)) 所述命令语言引用子像素坐标,这通常用于对角部的精确定位。将除填充命令以外的所有命令处理为第一通道的一部分。所述填充命令启动了第二通道,以填充所述多边形并将其组合到后缓冲区中。
图4示出了用于每个连线命令的子像素置位。出于图示目的,只沿着所述虚线示出了置位的子像素21。由于缩小的容量,它们不能准确地表示将利用下面示出的命令或规则和代码来置位的子像素。
按在所述命令语言中定义的顺序将边沿绘制到边沿缓冲区中。对于每条连线,根据其端点计算出斜度,然后沿着所述连线对子像素进行置位。每时钟周期对一个子像素进行置位。
使用以下规则来对子像素进行置位 对于每条多边形边沿,只对所述子像素栅格的每条水平连线的一个子像素进行置位; 从顶部到底部(在Y方向上)对子像素进行置位; 反转任何在所述连线下置位的子像素; 不对所述连线的最后一个子像素进行置位。
反转规则用来处理诸如在字符“X”中的复杂多边形的自相交。若没有所述反转规则,那么准确的相交点可能只有一个置位子像素,这将使后述填充算法变得混乱。无疑,所述反转规则的必要性使得避免多个边沿的端点的重迭变得重要。由于反转,任何这种点将消失。
为避免这种在同一多边形上的连续连线的端点的重迭,不对最低的子像素进行置位。
例如,根据命令序列 Moveto(0,0)(移动到(0,0)) Lineto(0,100)(连线到(0,100)) Lineto(0,200)(连线到(0,200)) 实际上从0,00到0,99绘制了第一边沿,而第二连线从0,100开始到01,99。结果是一实线。由于是从顶部到底部绘制所述连线的,所以最后一个子像素也是最低子像素(除非连线是完全水平的,如在该情况中)。
以下代码部分实现了用于根据以上规则对边界子像素进行置位的算法。“for(iy=y0+1;iy<y1;iy++)”循环之前的代码对于每条边沿运行一次,并且“for(iy=y0+1;iy<y1;iy++)”循环中的代码在每个时钟周期中都运行。
void edgedraw(int x0,int y0,int x1,int y1){float tmpx,tmpy;float step,dx,dy;int iy,ix;int bit,idx;∥Remove non visible linesif((y0==y1)) return; ∥Horizontal lineif(y0<0)&amp;&amp;(y1<0))return; ∥Out top<!-- SIPO <DP n="13"> --><dp n="d13"/>if(x0>(176*4))&amp;&amp;(x1>(176*4)))return; ∥Out rightif(y0>(220*4))&amp;&amp;(y1>(220*4)))return; ∥Out bottom∥Always draw from top to bottom(Y Sort)if(y1<y0){tmpx=x0;x0=x1;x1=tmpx;tmpy=y0;y0=y1;y1=tmpy;}∥Init linedx=x1-x0;dy=y1-y0;if(dy==0)dy=1;step=dx/dy;∥Calculate slope of the lineix=x0;iy=y0;∥Bit order in sbuf(16 sub-pixels per pixel)∥0123∥4567∥89ab∥cdef∥Index=YYYYYYYXXXXXXXyyxx∥four lsb of indx used to index bits within the unsigned shortif(ix<0)ix=0;<!-- SIPO <DP n="14"> --><dp n="d14"/>if(ix>(176*4))ix=176*4;if(iy>0){idx=((ix>>2)&amp;511)|((iy>>2)<<9); ∥Integer partbit=(ix&amp;3)|(iy&amp;3)<<2;sbuf[idx&amp;262143]^=(1<<bit);}for(iy=y0+1;iy<y1;iy++){if(iy<0)continue;if(iy>220*4)continue;ix=x0+step*(iy-y0);if(ix<0)ix=0;if(ix>(176*4))ix=176*4;idx=((ix>>2)&amp;511)|((iy>>2)<<9); ∥Integer partbit=(ix&amp;3)|(iy&amp;3)<<2;sbuf[idx&amp;262143]^=(1<<bit);}} 图5示出了子像素分辨率下的填充多边形。暗的子像素是置位的。这里应当注意,由填充器电路来执行所述填充过程,并且无需将结果重新存储在边沿缓冲区。该图只是发送到所述过程中的下一步骤的置位子像素的表示。所述多边形由一横跨子像素栅格进行移动的虚拟标记器或笔来填充,该笔最初是关闭的,并且每当其遇到一置位子像素时,就在关闭与打开状态之间进行切换。在该示例中,所述笔每次一个子像素从左向右移动。如果所述笔在上方并且子像素是置位的,则使所述像素保持置位,并且所述笔对随后的像素进行置位,直到它到达另一置位像素。将该第二置位像素复位,并且所述笔保持在上方并继续向右。
该方法包括所述多边形的左部的边界子像素,但是略去了右边界上的子像素。其原因是,如果两个邻接多边形共有同一边沿,那么对于将任何给定子像素指配给哪个多边形,必须具有一致性,以避免对于在数学上不重迭的多边形出现重迭的子像素。
一旦已填充完边沿缓冲区中的多边形,就可以合并属于每个像素的多个子像素并将其组合到后缓冲区中。每个4×4的小栅格的覆盖率给出了颜色的浓度。例如,在最上一行像素中从左侧起的第三个像素具有12/16的置位像素。其覆盖率为75%。
组合到后缓冲区中 图6示出了待组合到后缓冲区中的每个像素及其根据图5中所示的每个像素的置位子像素计算出的4位(0...F,十六进制数)混合系数。每个时钟周期将一个像素组合到后缓冲区中。只有在边沿缓冲区中存储的是非0值时才对像素进行组合。
后缓冲区不需要与边沿缓冲区在大小上相同,而是可以更小,例如与显示器的显示尺寸或一部分相对应。
在该示例中,后缓冲区中的多边形的分辨率是其在边沿缓冲区中的大小的四分之一。所述双通道方法和在将多边形存储在后缓冲区中之前进行合并的好处是显著地减少了要求所需的总存储量。对于置位和复位值,边沿缓冲区需要1位每子像素。但是,后缓冲区需要16位每像素,以表示要显示的阴影,并且,如果将后缓冲区用来对边界子像素进行置位并填充所得到的多边形,那么需要的存储量将是边沿缓冲区和后缓冲区的组合的八倍,即,需要十六个16位缓冲区,而不是两个16位缓冲区。
将边沿缓冲区压缩到8位 以上,将边沿缓冲区描述成具有一被组织为4×4位的16位值。一另选排列通过将每像素的边沿缓冲数据减少到8位,可以将需要的存储器减少50%。
这是通过从单个显示像素的4×4布局中去除奇数XY位置来实现的,如图24中所示。
如果一待绘制到边沿缓冲区的子像素具有属于没有位存储的位置的坐标,那么将其右移一步。例如,将在以上所示的局部栅格中的右上子像素右移到下一显示像素的局部栅格。将以下代码行添加到以上所示的代码中。
if((LSB(X)xor LSB(Y))=1)Y=Y+1;∥LSB()returns the lowest bit of acoordinate 这使得在可以容纳子像素的4×4布局中只留有8个位置。将这些位置包装成8位数据,并且和前面一样,存储到所述边沿缓冲区。
8位每像素的边沿缓冲区是另选的,而不是对16位每像素的缓冲区的替换。图形保真质量下降很少,因此减少50%存储器的好处可能比该缺点重要。
曲线的绘制 图7a和7b分别示出了二次和三次贝塞尔曲线。对于对称的控制点排列,这两者总是对称的。这种曲线的多边形绘制是通过将该曲线切分成多个短线段(阶化)来实现的。将所述曲线数据作为矢量图形命令发送到图形引擎。在所述图形引擎中而不是在CPU中进行阶化,减少了对于每个多边形发送到显示模块的数据量。图7a中示出的二次贝塞尔曲线具有3个控制点。可以将其定义为Moveto(x1,y1)、CurveQto(x2,y2,x3,y3)。
三次贝塞尔曲线总是经过端点,并且与最后两个控制点和最初两个控制点之间的连线相切。可以将三次贝塞尔曲线定义为Moveto(x1,y1)、CurveCto(x2,y2,x3,y3,x4,y4)。
以下代码示出了两个函数。在阶化过程中,每个函数被调用N次,其中N是产生的线段的数目。函数Bezier3用于二次曲线,函数Bezier4用于三次曲线。输入值p1-p4是控制点,而mu是在阶化过程中从0到1增加的数。mu值为0时返回p1,而mu值为1时返回最后一个控制点。
XY Bezier3(XY p1,XY p2,XY p3,double mu){<!-- SIPO <DP n="17"> --><dp n="d17"/>double mum1,mum12,mu2;XY p;mu2=mu*mu;mum1=1-mu;mum12=mum1*mum1;p.x=p1.x*mum12+2*p2.x*mum1*mu+p3.x*mu2;p.y=p1.y*mum12+2*p2.y*mum1*mu+p3.y*mu2;return(p);}XY Bezier4(XY p1,XY p2,XY p3,XY p4,double mu){double mum1,mum13,mu3;XY p;mum1=1-mu;mum13=mum1*mum1*mum1;mu3=mu*mu*mu;p.x=mum13*p1.x+3*mu*mum1*mum1*p2.x+3*mu*mu*mum1*p3.x+mu3*p4.x;p.y=mum13*p1.y+3*mu*mum1*mum1*p2.y+3*mu*mu*mum1*p3.y+mu3*p4.y;return(p);} 以下代码是一如何对由三个控制点(sx,sy),(x0,y0)以及(x1,y1)定义的二次贝塞尔曲线进行阶化的示例。阶化计数器x从1开始,因为如果其是零的话,所述函数将返回到第一个控制点,其结果是一零长度的连线。
XY p1,p2,p3;p1.x=sx;p1.y=sy;p2.x=x0;p2.y=y0;p3.x=x1;p3.y=y1;#define split 8for(x=1;x<=split;x++){p=Bezier3(p1,p2,p3,x/split);∥Calculate next point on curve pathLineTo(p.x,p.y);∥Send LineTo command to EdgeDraw unit} 图8示出了在上述代码段中定义的曲线阶化过程,并且返回了N个线段。中心循环对每个线段都重复执行。
填充类型 采用高级语言定义的多边形的颜色可以是单色,即,对于整个多边形,是一个恒定的RGBA(红、绿、蓝、透明度)值,或者可以具有一放射状或线性梯度。
梯度可以具有多达八个控制点。在所述控制点之间对颜色进行插值,以产生颜色过渡区(colour ramp)。每个控制点由一比值和一RGBA颜色来定义。所述比值确定该控制点在所述梯度中的位置,而所述RGBA值确定其颜色。
无论是何种填充类型,当将所填充的多边形组合到后缓冲区中时,都将在所述混合过程中计算每个像素的颜色。所述放射状或线性梯度仅仅是需要更复杂的处理,以沿着所述颜色过渡区合并每个单独像素的位置。
图9给出了四个线状和放射状梯度的示例。可以将所有这些结合本发明的图形引擎一起来自由地使用。
图10示出了一标准梯度正方。所有梯度被定义在一称为梯度正方的标准空间中。所述梯度正方以(0,0)为中心,并且从(-16384,-16384)延伸到(16384,16384)。
在图10中,将一线状梯度映射到一直径为4096单位并且圆心在(2048,2048)处的圆上。该映射所需的2×3矩阵为0.1250.0000.0000.1252048.0002048.000 即,将所述梯度缩为其原尺寸的八分之一(32768/4096=8),并且平移到(2048,2048)。
图11示出了待绘制在边沿缓冲区中的细线23。细线是具有一个像素的宽度的直线。所述图形引擎以一种特殊的方式来支持细线的再现。当打开细线模式时,边沿绘制单元不应用针对普通边沿绘制所描述的四个特殊规则。而且,对所述边沿缓冲区的内容进行不同的处理。将所述细线绘制到边沿缓冲区,同时立即(on the fly)执行填充操作。即,不存在独立的填充操作。因此,一旦为当前绘制图元(例如,多边形轮廓)绘制出所有细线,边沿缓冲区中的每个像素就包含了填充子像素,该填充子像素可用于由扫描线填充器对置位子像素进行计算以得到覆盖率信息和对所述像素进行常规颜色操作(混合到后缓冲区)。这里使用的连线步进(line stepping)算法是一种标准的和公知的具有子像素级步进的Bresenham线算法。
对于每一步,都将一实心圆的4×4像素图像24(利用“或”操作)绘制到边沿缓冲区。这是图11中所示的较暗的形状。由于该4×4子像素的偏移并不总是与所述边沿缓冲区中的4×4子像素精确地对准,所以可能有必要将多达四次读取-修改-写入循环用于所述边沿缓冲区,在所述边沿缓冲区中,将数据在X和Y方向上按位来移动,以校准位置。
实现Bresenham算法的逻辑非常简单,并且可以将其作为独立模块提供在所述边沿绘制单元内。在常规多边形再现操作中,该逻辑将是空闲的。
图12示出了原始圆形及其移动后的位置。左手侧的图像示出了用于将所述连线“画”到边沿缓冲区中的4×4子像素形状。右侧的图像是向右移动了三步并且向下移动了两步的移动后的位图的示例。需要四次存储器访问来将全部形状绘制到存储器中。
可以利用相同的概念来绘制宽度大于一个像素的连线,但是效率会显著降低,这是因为所述形状与较早绘制出的形状的交迭区将变大。
图13示出了边沿缓冲区的最终内容,其具有如上所述同时地绘制和填充的子像素细线25。接下来的步骤是向后缓冲区的合并和组合。
以下是采用Pascal语言实现的Bresenham连线算法的通用示例。在每个时钟周期中,都执行以注释“{Draw the pixels}”开始的代码,而其余代码每次子像素连线执行一次。
procedure Line(x1,y1,x2,y2integer;colorbyte);var i,deltax,deltay,numpixels,d,dinc1,dinc2,x,xinc1,xinc2,y,yinc1,yinc2integer;begin{Calculate deltax and deltay for initialisation}deltax=abs(x2-x1);<!-- SIPO <DP n="21"> --><dp n="d21"/>deltay=abs(y2-y1);{Initialize all vars based on which is the independent variable}if deltax>=deltay thenbegin{x is independent variable}numpixels=deltax+1;d=(2*deltay)-deltax;dinc1=deltay Shl 1;dinc2=(deltay-deltax)shl 1;xinc1=1;xinc2=1;yinc1=0;yinc2=1;endelsebegin{y is independent variable}numpixels=deltay+1;d=(2*deltax)-deltay;dinc1=deltax Shl 1;dinc2=(deltax-deltay)shl 1;xinc1=0;xinc2=1;yinc1=1;yinc2=1;end;{Make sure x and y move in the right directions}<!-- SIPO <DP n="22"> --><dp n="d22"/>if x1>x2 thenbeginxinc1=-xinc1;xinc2=-xinc2;end;if y1>y2 thenbeginyinc1=-yinc1;yinc2=-yinc2;end;{Start drawing at}x=x1;y=y1;{Draw the pixels}for i=1 to numpixels dobeginPutPixel(x,y,color);if d<0 thenbegind=d+dinc1;x=x+xinc1;y=y+yinc1;endelsebegind=d+dinc2;x=x+xinc2;<!-- SIPO <DP n="23"> --><dp n="d23"/>y=y+yinc2;end;end;end; 后缓冲区大小 理想地,其中在向显示模块进行传输前存储所有多边形的后缓冲区与前缓冲区大小相同(并且具有显示模块分辨率,即,在任何时候所述后缓冲区的一个像素总与所述显示器的一个像素相对应)。但是在某些配置中,由于大小/成本的原因,不可能具有实际大小的后缓冲区。
可以在硬件实现之前选择后缓冲区的大小。其始终与前缓冲区的大小相同或者比前缓冲区更小。如果它较小,那么它通常与整个显示宽度相对应,但是只与显示高度的一部分相对应,如图14中所示。在该情况下,边沿缓冲区13无需具有与前缓冲区相同的大小。在任何情况下,都要求所述后缓冲区的每个像素具有一个子像素栅格。
如果如图14中所示,后缓冲区15比前缓冲区17要小,那么在多个外部通道中执行再现操作。这意味着在主机CPU上运行的软件必须将至少一些所述数据重新发送到所述图形引擎,这将增加为相同的所得图像传送的数据的总量。
图14的示例示出了一在垂直方向上是前缓冲区17的1/3的后缓冲区15。在该示例中,只再现了一个三角形。在三个通道中对所述三角形进行再现,在三个步骤中对所述前缓冲区进行填充。重要的是,在将所述后缓冲区拷贝到所述前缓冲区之前,对所述后缓冲区中的图像部分中的所有内容完全地进行再现。因此,无论最终图像的复杂程度(多边形的数目)如何,在该示例配置中,总是将最多三个图像从所述后缓冲区传送到所述前缓冲区。
不必将含有所有moveto、lineto、curveto命令的主机应用中的整个数据库发送到所述图形引擎三次。而只需要位于所述图像的当前区域内的命令、或者与当前区域的上边沿或下边沿相交的命令。因此,在图14的示例中,无需为顶部区域发送限定所述三角形的左下边沿的lineto命令,因为该lineto命令不接触第一(顶部)区域。在第二区域中,由于所有连线都接触所述区域,所以必须发送所有三条lineto命令。而在第三区域中,不必传送所述三角形的左上部的lineto。
很清楚,在不发送该代码选择的情况下,最终结果也将是正确的,但是该选择减少了对CPU与所述图形引擎之间的带宽要求。例如,在一在屏幕上再现许多文本的应用中,对要再现的每个文本串的边界框(bounding box)的快速检查将使得可快速舍弃许多再现命令。
子图形 既然已经例示了容量较小的后缓冲区的概念及其向前缓冲区的传输,就容易理解如何将类似的过程用于再现2D或3D图形或子图形。子图形通常是运动图像,如游戏中的角色或图标。所述子图形是被按限定位置传送到所述前缓冲区的完整实体。因此,在后缓冲区比前缓冲区小的情况下,可以将每个通道中的后缓冲区内容看作一个2D子图形。
可以要么利用多个多边形,要么通过简单地从CPU传送一位图,来再现子图形的内容。由于2D子图形具有可配置的宽度、高度和XY偏移量来指示将后缓冲区的哪个部分传送到前缓冲区中的哪个XY位置,所以可将2D子图形传送到所述前缓冲区。
图14的示例实际上是将三个子图形再现到前缓冲区,其中所述子图形的大小是完整的后缓冲区,并且将目标位置的偏移从顶部向底部移动,以覆盖完整的前缓冲区。而且,在图像传送之间对所述子图形(后缓冲区)的内容进行再现。
图15示出了将后缓冲区中的一个子图形拷贝到前缓冲区中的两个位置。由于可以配置所述子图形的宽度、高度和XY偏移量,所以也可以在后缓冲区中存储多个不同的子图形,并且将它们按任何顺序绘制到前缓冲区中的任何位置处,并且在不需将所述子图形位图从主机上载到图形引擎的情况下,可以对其进行多次绘制。这种操作的一个实用示例是将一字体集的每个字符的小位图存储在后缓冲区中。然后通过从CPU发出图像传送命令,可以将位映像文本/字体绘制到前缓冲区中,其中为每个字母限定了源(后缓冲区)的XY偏移量。
图16示出了其中对数百个小的2D子图形进行再现以仿真多个小颗粒的喷射的示例。
图形引擎的硬件实现 如图17中所示,实现了一硬件实现。该图示出了所述实现的内部单元的更详细的框图。
边沿绘制电路由图17中所示的边沿绘制单元以及边沿缓冲存储器控制器来形成。
填充电路被示出为扫描线填充器,其带有蒙板生成器单元中的虚拟笔和合并逻辑(用于将子像素合并成对应的像素)。后缓冲存储器控制器将所合并的像素组合到所述后缓冲区中。
在该硬件实现中,使用“裁剪器”装置来去除不可见连线。其目的是裁剪多边形边沿,以在保持连线的斜度和位置的同时,使得多边形边沿的端点始终位于屏幕区内。这基本上是一性能最优化模块,并且将其功能实现为edgedraw函数中的以下四个if子句 if(iy<0)continue; if(iy>220*4)continue; if(ix<0)ix=0; if(ix>(176*4))ix=176*4; 如果两个端点在同一侧处于显示屏幕区的外面,那么不处理该边沿;否则,对于任何位于所述屏幕区外的端点,裁剪器都计算边沿在何处与屏幕相交,然后只从该交点处对所述边沿的“可见”部分进行处理。
在硬件中,如上所述地裁剪端点更有意义,而不是去除单个子像素,这是因为如果边沿非常长,并且延伸到屏幕之外很远处,那么所述硬件将花费很多时钟周期而不生成可用的子像素。将这些时钟周期花在裁剪上更好。
填充横贯单元从边沿缓冲区读取数据,然后将读入的数据发送到蒙板生成器。所述填充横贯无需横穿整个子像素栅格。例如,它可以只处理属于包围整个多边形的矩形(边界框)的所有像素。这保证了所述蒙板生成器接收到多边形的所有子像素。在某些情况下,该边界框可能远离最优横贯图案。理想地,填充横贯单元应当略去位于所述多边形之外的子像素。有多种方法来向所述填充横贯单元添加智能,以避免这种从边沿缓冲区读取空子像素的操作。这种最优化的一个示例是对于每条扫描线(或子像素的水平线),存储发送到边沿缓冲区的最左端和最右端子像素,然后只在这些最左端与最右端之间进行横贯。
蒙板生成器单元仅仅含有用于对读入的边沿缓冲区子像素进行填充操作的“虚拟笔”以及用于计算所得覆盖率的逻辑。然后将该数据发送到用于组合到后缓冲区(混色)的后缓冲存储器控制器。
下表示出了所述图形引擎内的各种单元的近似门数以及与前面的适当位置处的描述有关的注释。单元名门数注释输入fifo3000优选地,实现为RAM阶化器5000-8000如上所述的曲线阶化器控制1400Ysort和斜度划分6500作为以上边沿绘制代码部的开始Fifo3300同时进行排序和裁剪工作裁剪器8000删除屏幕之外的边沿边沿横贯1300横穿子像素栅格,以对合适的子像素进行置位填充横贯2200边界框横贯。当被优化成跳过未覆盖的区域时,需要更多的门。蒙板生成器1100当加入了线性和放射状梯度逻辑时,需要更多选通门边沿缓冲存储器控制器2800包括最后数据高速缓存后缓冲存储器控制器4200包括透明度混合总数~40000 将图形引擎集成到显示模块 图18是根据本发明实施例的包括图形引擎1的显示模块5的示意图,该图形引擎1被集成到用于LCD或等效类型的显示器8的源IC3中。CPU2被示出为远离显示模块5。将所述引擎直接与所述源驱动器IC集成在一起有多个特殊优点。尤其是,在同一硅结构内进行互连,这使得该连接比分立封装更省电。而且,无需专门的I/O缓冲区和控制电路。无需独立的制造和测试,并且重量和尺寸的增加最小。
该图示出了一典型布置,其中LCD显示器的源IC还充当用于选通IC4的控制IC。
图19是根据本发明实施例的包括图形引擎1的显示模块5的示意图,该显示模块5被集成到所述显示模块中,并且伺服用于LCD或等效类型的显示器的两个源IC3。可以将所述图形引擎设置在一图形引擎IC上,该图形引擎IC待与显示控制IC相邻地安装在显示模块的反面上。它将占用装置壳中的最小额外空间,并且是显示模块封装的一部分。
在该示例中,源IC3再次充当用于选通IC4的控制器。将CPU命令馈送到所述图形引擎,并且在所述引擎中将所述CPU命令分成用于每个源IC的信号。
图20是带有嵌入式源驱动器IC的显示模块5的示意图,所述嵌入式源驱动器IC合并有一图形引擎及其到CPU、显示区以及选通驱动器IC的连接的。该图更详细地示出了这些部分之间的通信。同时作为驱动器IC和控制器IC的源IC具有一用于控制所述选通驱动器的控制电路、LCD驱动器电路、接口电路以及图形加速器。接口电路与源驱动器之间的直接连接(绕开所述图形引擎)使得所述显示器可以在没有所述图形引擎的情况下工作。
图21示出了所述显示驱动器IC中的组件模块。
没有示出电源电路。其可以被集成,或者作为一分立装置。该电源电路取决于所用显示器的类型。
而且,没有示出所述选通(Y/行方向)驱动器电路的任何细节,因为其情况与所述电源电路的类似,并且选通驱动器的类型和本发明无关。
应该注意,显示控制IC(源驱动器)和图形引擎的组合并不必定排除现有显示控制IC的任何功能性。
带有FIFO的接口电路 所使用的接口类型可能取决于终端客户需求(例如8位并行、16位并行、各种控制信号)。接口10具有控制双向数据流的能力。数据流主要来自CPU,但是,也存在从显示存储器(前缓冲区)读回数据的可能性。直接读/写可以用于低级指令或低级CPU交互(BIOS级等)。
所述FIFO接口可以与例如Intel或Motorola标准外设接口总线或任何自定义类型总线相兼容/适应。
控制信号用于为沿任一方向的数据传输执行信号交换(handshaking)。例如,数据传输可以是向控制寄存器(控制逻辑)的写入操作以指示所述电路进行操作,或者可以是对控制/状态寄存器的读取操作以校验所述电路的状态或操作执行的状态(完成或未完成)。
通常,所述接口电路有两种与数据流有关的操作模式 a)基本模式,其绕开图形加速,(经由数据接口逻辑)向显示存储器直接进行写入操作,或 b)加速模式,其将高级命令发送到所述图形加速器以对它们进行解译。
所述基本模式(直接写入显示存储器)可以用于以下情形 在上电期间,(由主机CPU执行的)低层初始化例程可能清除或初始化显示存储器,以显示低层(BIOS类型)消息,或者显示标识或其他图形。
无论是否存在图形加速,主机CPU都可以直接访问显示存储器,以按向上兼容(legacy compatible)模式(如在现有技术中一样)使用所述电路。如果必要,可以出于兼容性的原因而使用此模式。
主机CPU在需要信息以对当前所显示的图像执行变换的情况下,可以读出所述显示存储器的内容。
在以上情况下使用的基本模式是基于位像数据格式的。其中将采用高级命令形式的数据(经由命令缓冲区/FIFO)发送到所述图形加速器的第二加速模式(b)),是这里描述的带来关键益处的模式。
前面已经参照图1到16对曲线阶化器11、边沿绘制部12、边沿缓冲存储器13、扫描线填充器14以及后缓冲区模块进行了详细描述。
控制逻辑&电源管理 该中央单元7控制电路的总体操作。其与所述接口电路和LCD定时控制逻辑相连接,并且对图形加速的所有单元、与主机CPU的数据交换以及对显示存储器的访问进行控制。
控制/状态寄存器组用于控制电路的操作。主机CPU(经由所述接口电路)将值写入控制寄存器,以指配操作模式并且指示电路要对随后来自主机CPU的数据作何处理。相应地,使用状态寄存器组来表示先前发出的指令的当前状态和进度/完成程度。
该单元还为图形加速器、数据接口逻辑的所有模块以及LCD定时控制逻辑模块生成控制和定时信号。这些信号对在图形加速器部分中的所有活动进行控制,并且将独立模块之间的数据传输向上导向数据接口逻辑。
而且,该模块对LCD定时控制逻辑模块的操作特性进行控制,该LCD定时控制逻辑模块对与显示器上的图像刷新相关的所有定时进行控制。显示刷新定时和图形加速器的操作所需的定时信号可以是同步的,但通常不同步。因此数据接口逻辑具有仲裁逻辑,以使得可以平滑两个时钟域之间的数据传输。
电源管理功能 通常有两种模式有助于在操作过程中和在待机模式中省电a)在对数据进行操作期间的动态时钟门控(clock gating),以及b)在待机模式期间的静态模式。
动态电源管理模式(a)以这样的方式来对到每个独立模块的所有定时/时钟信号进行控制,即,只将时钟分配/使能给对数据执行操作所需的模块。将用于所有其他模块的时钟信号停止(保持高电平或低电平)。这防止了电路在空闲级中的不必要的时钟控制,因此节省了功率。该技术称为时钟门控。对活动的检测是在所述控制逻辑和电源管理单元之中进行的,并非一定需要CPU交互。
静态省电模式(b)主要用在待机期间(移动装置的大部分时间),由此延长了待机时间。这是通过以下方式来实现的即,将所述电路的在待机期间不使用的所有单元/模块(例如所述图形加速器电路周围的所有单元/模块)设置在带有独立电源插脚的隔离区域中。所述区域仍可位于同一硅片上,但是,可以通过取消对该隔离部分的供电来将其关闭。这通常是利用间接主机CPU交互来完成的,因为所述CPU知道移动装置的状态/模式。
数据接口逻辑 数据接口逻辑模块16选择要写入显示存储器或从其中读取的数据。在CPU需要将图像的一些或全部读回到CPU存储器中的情况下,一条路径(绕开所述图形引擎)将主机CPU数据馈送到所述显示存储器或周围的其他通路。另一路径将计算后的图像数据从所述图形加速器传送到显示存储器中。
该模块还用来在两个不同时钟域的电路之间进行判优。LCD驱动器部分根据使能合适的显示更新/刷新频率(例如60Hz)的时钟(或多个时钟)来进行处理和操作。另一方面,图形加速器操作以及与主机CPU的连接伴随一时钟运行,该时钟使得可以实现足够的加速性能以及与主机CPU的平滑连接。无论数据的来源(来自CPU或来自图像加速器),仲裁使得可以实现到/从显示存储器的平滑且(对于显示器)无闪烁的图像数据传输。
显示存储器 该存储器部分17也称作帧缓冲区或前缓冲区。其保持用于显示的图像数据。主机CPU或者来自所述图形加速器的数据对该存储器的内容进行更新。LCD定时控制逻辑使得可以对所述内容进行定期刷新并将其发送到所述显示器。对于任何动画内容,新的图像数据将被写入显示存储器中,并且在下一刷新时段(LCD定时控制逻辑)内,该图像将出现在显示器上。对于静态图像,或对于待机操作(也是静态图像),所述显示存储器的内容将不改变。所述内容只会由于显示器的刷新而被定期读出。
这意味着在待机模式中,或对于静态图像,可以将显示存储器之前的所有模块切换到空闲状态。只需运行(控制逻辑&电源管理中的)轮询/监控功能,以在主机CPU发送一新命令时使操作继续执行。
存储器大小一般是X*Y*CD(显示器按像素计量的X尺寸、Y尺寸,CD是色深度/对于65k种颜色是16位)。
解码器&显示锁存器 解码器&显示锁存器18将存储在显示存储器中的位图像数据转化为列格式。像素的每列基本上包含三个(子)列(RGB)。另外,将来自所述显示存储器的数字图像信息转化为模拟信号。
由于显示驱动器信号(源输出)是振幅和电平与逻辑电路中使用的振幅和电平不同的模拟信号,所以要在该模块中执行电平移动(levelshifting)。
最后,数据锁存器进行寄存,以将信息保持刷新一条线所需的时间(如果我们以1列来论述的话,基本上是1个像素)。在此其间,LCD定时&控制逻辑准备待锁存和显示的来自显示存储器的下一数据组(下一条线)。
LCD驱动器电路 LCD驱动器电路19准备待施加到显示器的电信号。它是模拟类型的电路,并且其实际结构很大程度上依赖于显示器类型。
LCD定时控制逻辑 LCD定时控制逻辑单元20生成用于对显示器进行图像刷新的所有定时和控制信号。其生成恰当的寻址和控制信号,以利用存储在显示存储器中的内容来定期更新显示图像。其对从显示存储器读出的数据进行初始化(一次一条线),并且将所述数据经由解码器&显示数据锁存器进行传送,以对所述数据进行解码,并且接着将所述数据传过LCD驱动器电路。该模块的时钟定时和频率使所述显示器可以具有适当的刷新速率(例如,60Hz)。该模块通常具有自己的振荡器,并且其与所述图形加速器周围的电路的其余部分不同步。
选通驱动器控制 驱动器控制模块21表示与所述选通驱动器IC的接口。其将信号提供给所述选通驱动器IC以使得可以进行适当的刷新。该模块的确切的细节取决于所使用的显示器的类型。
该部分的主要功能是顺序地对所有线(行)进行扫描,以与由源驱动器所提供的信息相组合来生成图像。对于非晶TFT型显示器,用以驱动栅(行)条纹的电压电平可以在+/-15V的范围内。这要求以不同的工艺/技术来实现所述选通驱动器IC。不是所有显示器类型都要求这个电压范围的,在没有这种要求的情况下,可以在一个硅片(IC)上实现所述选通驱动器和源驱动器的集成版。
所述选通驱动器的主要部分是一移位寄存器,其用于顺次将一脉冲从显示器的起始位置移位/移动到末端位置(从顶端条纹向下移位/移动到底端条纹)。该部分还包括由于某些诸如脉冲选通和整形的附加功能,以获得恰当的定时(以避免交迭等)。所有定时和脉冲信息都来自所述显示驱动器IC,并且与所述显示驱动器IC完全同步。
TFT操作 适合与本发明一起使用的显示器可以具有TFT(薄膜晶体管)结构。TFT显示器具有带X(选通/行)和Y(源/列)导电条纹的矩阵(X-Y)可寻址显示场。所述X条纹与Y条纹之间的电压差对背光透射度进行控制。在彩色显示器中,对于每个像素有3个垂直(Y)条纹,以控制RGB合成。图22示出了TFT型结构和寻址以及用于所述选通驱动器IC的典型定时图。
图22中所示的显示器以一次寻址一条线(选通/行)的方式来进行操作,,由此继续到下一条线并且顺序地到达显示器的端部(通常是底部),然后从顶部重新开始。刷新的速度称为刷新率,并且可以在60Hz(刷新次数/秒)的范围内。
源驱动器电路 图23示出了用于LCD显示器的源驱动器,其中将来自前缓冲区的颜色信息发送到所述显示器。从显示存储器读取用于整行/线的像素信息,并且将其施加给DAC转换器,如在图21中标号18所示的解码器。图23中的MUX选通选择器充当DAC。所需DAC转换器的数目是显示器像素分辨率(RGB)的三倍。在该情况下,所述DAC转换器还充当一模拟多路复用器/选择器。施加给DAC的数字值选择由灰度级生成器所生成的一个灰度级。例如,选择“低亮度”将给出一暗图像,而选择“高亮度”将给出一亮图像。在显示器上按与在CRT显像管中类似的方式来合成颜色。该过程对每条扫描线重复进行。
由于用于逻辑部分的电压通常比驱动显示器的源线所需的电压低,所以所述MUX选通选择器还可以用作一电平移动器。用于源驱动的电压范围在0V-5V的范围内。所述灰度级生成器和MUX/选择器利用弱信号(确定强度)进行工作,并且最终将由所述MUX/选择器所选择的信号适当地放大(AMP)以驱动所述源条纹。
尽管图19到23专门针对LCD显示器,但是本发明决不限于单一显示类型。本领域的技术人员已知许多合适的显示器类型。这些都具有X-Y(列/行)寻址,并且仅仅在驱动器实现和术语上与以上所示的具体LCD实现不同。本发明当然适用于所有LCD显示器类型,如STN、非晶TFT、LTPS(低温多晶硅)以及LCoS显示器。本发明还可用于基于LED的显示器,如OLED(有机LED)显示器。
例如,本发明的一个具体应用可能出现在用于移动装置的附件中,该移动装置由用户佩戴或保持并采用远程显示器的形式。可以通过蓝牙或类似的无线协议来将所述显示器连接到所述装置。
在许多情况下,移动装置本身是如此之小,以至于要添加高分辨率屏幕是不可行的(或是不希望的)。在这种情况下,分立的靠近眼睛的(NYE)显示器或其他显示器(可能在用户的头戴式耳机或用户眼镜上)可能尤其具有优势。
显示器可以是LCoS型的,其适用于NTE应用中的可佩戴显示器。NTE应用使用带有放大镜的单个LCoS显示器,所述放大器置于靠近眼睛处,以产生放大的虚像。带有这种显示器的具有网络功能的无线装置使得用户可以将web页面当作一大的虚像来观看。
示例 显示变量,其中 显示描述了显示器的分辨率(X*Y) 像素是显示器上的像素数(=X*Y) 16个色位(color bit)是用以刷新/绘制全屏的实际数据量(采用16位来描述每个像素的属性) 帧频@25Mb/s描述了当采用25Mb/s的数据传输速率时,每秒可以刷新显示器的次数 Mb/s@15fps表示为确保每秒更新全屏15次所需要的数据传输速率。 显示 像素 16个色位帧频@25Mb/sMb/s@15fps 128×128 16384 26214495.43.9 144×176 25344 40550461.76.1 176×208 36608 58572842.78.8 176×220 38720 61952040.49.3 176×240 42240 67584037.010.1 240×320 76800 122880020.318.4 320×480 153600 245760010.236.9 480×640 307200 49152005.173.7 对于不同接口的功耗的示例 CMADSi/f @25Mb/s 0.5mW →20uW/Mb CMOSi/f@25Mb/s 1mW →40uW/Mb 以下是4个总线流量示例,其展示了在CPU→显示器总线上的流量减少 (注意这些示例只展示了总线流量,而没有展示CPU负载) 示例1全屏日本汉字文本(静态) 代表了一种复杂情况,对于176*240的显示器尺寸,结果是42240个像素,或84480个字节(16位/像素=2字节/像素)。对于一个日本汉字字符,采用最小的16×16个像素,这使得每屏将给出165个日本汉字。一个日本汉字平均可用约223个字节来表示,由此得到总量为36855个字节的数据。
字节 84480 像素 42240 16<--X*Y(对于一个日本汉字) Y-像素24015 X-像素 17611 5 165<--#全屏日本汉字 显示器 223<-- 字节/日本汉字 (SVG) 流量流量 位图SVG 84480 36855 在该特定情况下,使用SVG加速器将需要传输36k字节,而对于位图刷新(=在不使用加速器的情况下全屏的刷新或绘制),结果是需要传输84k字节数据(减少了56%)。
在字符数相同的情况下,不管屏幕分辨率是多少,由于SVG的基本特性(可缩放),所以36k字节的数据保持不变。在位映射系统中不是这样的,在位映射系统中,流量随像素数(X*Y)成比例地增长。
示例2动画(@15fps)忙屏(165个日语汉字字符)(显示器176×240) 8448036855 fps 15 1267200 552825位 μW 40 50.7 22.1μW (针对总线) 40表示40μW/m位的数据。图25示出了CPU与图形引擎之间以及图形引擎与显示器之间的数据传输和对应的功耗。
示例3全屏上的填充三角形 全屏 -位映射(=没有加速器)84480字节数据(屏幕176×240,16位颜色) -对于SVG加速器,只有16字节(减少了99.98%) 示例4动画(@15fps)旋转填充三角形(显示器176×240)84480 16 fps 15 1267200240位 μW 40 50.7 0.01μW(针对总线) 40表示40μW/m位的数据。图26示出了CPU与图形引擎之间以及图形引擎与显示器之间的数据传输和对应的功耗。
该最后一个示例表明所述图形引擎适合在游戏中使用,如适用于基于动画Flash(TM Macromedia)的游戏。
权利要求
1、一种显示驱动器集成电路,用于连接到小面积显示器,所述集成电路包括一硬件实现的图形引擎,其用于接收矢量图形命令和根据所接收到的命令来再现用于显示像素的图像数据,并且,所述集成电路还包括显示驱动器电路,其用于根据由所述图形引擎所再现的图像数据来驱动所连接的显示器。
2、一种用于合并到便携式电子装置中的显示模块,其包括
显示器;
硬件实现的图形引擎,用于接收矢量图形命令和根据所接收到的命令来再现用于显示像素的图像数据;以及
显示驱动器电路,连接到所述图形引擎和所述显示器,用于根据由所述图形引擎所再现的图像数据来驱动所述显示器。
3、如权利要求1或2所述的显示驱动器或显示模块,其中所述图形引擎包括控制电路,其用于一次读入一条矢量图形命令,将所述命令转换为空间图像信息,然后丢弃原命令。
4、如前述任一权利要求所述的显示驱动器或显示模块,其中所述图形引擎包括连接到一边沿缓冲区的边沿绘制电路,所述边沿缓冲区用于顺序地存储被读入所述引擎中的任何多边形的边沿。
5、如权利要求4所述的显示驱动器或显示模块,其中所述边沿缓冲区被配置成存储子像素,其中多个子像素与每个显示像素相对应。
6、如权利要求5所述的显示驱动器或显示模块,其中每个子像素可在置位状态与复位状态之间进行切换,并且其中,所述边沿缓冲区将每个多边形边沿存储为多个边界子像素,所述多个边界子像素是置位的,并且其在所述边沿缓冲区中的位置与在最终图像中的边沿位置相对应。
7、如权利要求4到6中的任何一项所述的显示驱动器或显示模块,其中所述图形引擎包括填充器电路,其用于对边沿已被存储在所述边沿缓冲区中的多边形进行填充。
8、如前述任一权利要求所述的显示驱动器或显示模块,其中所述图形引擎包括一后缓冲区,其用于在将图像的一部分或全部传输到所述显示存储器的前缓冲区之前对其进行存储。
9、如权利要求8所述的显示驱动器或显示模块,其中所述后缓冲区的每个像素被映射到所述前缓冲区中的一像素,并且优选地,所述后缓冲区具有与所述前缓冲区相同的用于表示每个显示像素的颜色的位数每像素,所述颜色为RGBA值。
10、如权利要求8或9所述的显示驱动器或显示模块,其中所述图形引擎包括组合电路,其用于从所述填充器电路将每个填充多边形顺序地组合到所述后缓冲区中。
11、如权利要求8到10中的任何一项所述的显示驱动器或显示模块,其中根据正被处理的多边形中的像素的颜色、所述像素被所述多边形覆盖的百分比、以及在所述后缓冲区中的对应像素中已经存在的颜色,来确定存储在所述后缓冲区中的每个像素的颜色。
12、如权利要求3到11中的任何一项所述的显示驱动器或显示模块,其中所述边沿缓冲区按对于每个显示像素具有一平方数个子像素的栅格的形式包括多个子像素。
13、如权利要求12所述的显示驱动器或显示模块,其中不使用所述边沿缓冲区中相隔一个的子像素,以为每个显示像素提供所述平方数个子像素中的一半。
14、如权利要求12或13所述的显示驱动器或显示模块,其中根据多个边沿端点来计算每条多边形边沿的斜度,然后沿着连线对所述栅格的多个子像素进行置位。
15、如权利要求13或14所述的显示驱动器或显示模块,其中利用以下规则来对多个子像素进行置位
对于每条多边形边沿,只为所述子像素栅格的每条水平线置位一个子像素;
从顶部到底部(在Y方向上)对所述多个子像素进行置位;
不对所述线的最后一个子像素进行置位;
反转在所述线下置位的任何子像素。
16、如权利要求12到15中的任何一项所述的显示驱动器或显示模块,其中所述填充器电路包括充当用于横贯所述子像素栅格的虚拟笔的逻辑,所述笔最初是关闭的,并且每当它遇到一置位子像素,就在关闭与打开状态之间进行切换。
17、如权利要求16所述的显示驱动器或显示模块,其中所述虚拟笔对所述多个边界子像素内的所有子像素进行置位,并且所述虚拟笔包括右手边界的多个边界像素,并对左手边界的多个边界像素进行复位,或者反过来。
18、如权利要求10到17中的任何一项所述的显示驱动器或显示模块,其中对应于一个显示像素的来自所述填充器电路的所述多个子像素,在组合到所述后缓冲区之前,被合并成单个像素。
19、如权利要求12到18中的任何一项所述的显示驱动器或显示模块,其中每个合并像素中被所述填充多边形覆盖的子像素的数目确定了用于将所述合并像素组合到所述后缓冲区中的混合系数。
20、如权利要求8或其任何从属权利要求所述的显示驱动器或显示模块,其中一旦已完全再现了所述显示器的部分上的、所述后缓冲区为其保持信息的所述图像,就将所述后缓冲区拷贝到所述显示存储器的所述前缓冲区。
21、如权利要求8或其任何从属权利要求所述的显示驱动器或显示模块,其中所述后缓冲区具有与所述前缓冲区相同的大小,并且为所述整个显示器保持信息。
22、如权利要求8或其任何从属权利要求所述的显示驱动器或显示模块,其中所述后缓冲区比所述前缓冲区小,并且只为所述显示器的一部分存储信息,所述前缓冲区中的图像是在一系列外部通道中根据所述后缓冲区来构建的。
23、如权利要求22所述的显示驱动器或显示模块,其中只有与待保持在所述后缓冲区中的所述图像的所述部分相关的命令,被在每个外部通道中发送到所述图形引擎。
24、如权利要求4或其任何从属权利要求所述的显示驱动器或显示模块,其中所述图形引擎还包括一曲线阶化器,其用于将任何曲形多边形边沿划分为多个直线段,并且将所得到的多个直线段存储在所述边沿缓冲区中。
25、如权利要求8或其任何从属权利要求所述的显示驱动器或显示模块,其中所述图形引擎被调整为使所述后缓冲区可以保持一个或更多个预定图像元素,所述一个或更多个预定图像元素被传输到所述前缓冲区中的由所述高级语言确定的一个或更多个位置处。
26、如权利要求4或其任何从属权利要求所述的显示驱动器或显示模块,其中所述图形引擎可在细线模式下进行操作,在该细线模式中,通过对一位图中的多个子像素进行置位并将所述位图存储在所述边沿缓冲区中的多个位置处以形成一连线,来将多条细线存储在所述边沿缓冲区中。
27、如前述任一权利要求所述的显示驱动器或显示模块,其中所述图形引擎在大小上少于100K个门,优选地,少于50K个门。
28、如前述任一权利要求所述的显示驱动器或显示模块,其中所述显示驱动器电路只用于所述显示器的一个方向。
29、如前述任一权利要求所述的显示驱动器或显示模块,其中所述显示驱动器电路还包括用于控制所述显示器的控制电路。
30、如权利要求29所述的显示驱动器或显示模块,其中所述显示器控制电路还包括驱动器控制电路,其用于连接到用于另一方向的独立显示驱动器。
31、如权利要求2或其任何从属权利要求所述的显示驱动器或显示模块,其中所述图形引擎为多个显示驱动器集成电路再现图像数据。
32、如前述任一权利要求所述的显示驱动器或显示模块,其中所述显示驱动器还包括显示存储器;解码器和显示锁存器;定时、数据接口逻辑;控制逻辑和电源管理电路。
33、一种电子装置,包括
处理单元;以及
具有显示器的显示单元;
其中所述处理单元将高级图形命令发送到所述显示单元,并且一硬件实现的图形引擎设置在所述显示单元中,以根据所述高级命令来再现用于显示像素的图像数据。
34、如权利要求33所述的电子装置,其还合并有前述权利要求的任何特征。
35、实质上根据本发明所述的和/或在附图中示出的多个实施例中的一个的显示驱动器IC模块或装置。
全文摘要
本发明提供了一种显示驱动器集成电路,其用于连接到小面积显示器,所述集成电路包括一硬件实现的图形引擎,其用于接收矢量图形命令和根据所接收到的命令来再现用于显示像素的图像数据,并且,所述集成电路还包括显示驱动器电路,其用于根据由所述图形引擎所再现的图像数据来驱动所连接的显示器。在另一方面中,将所述图形引擎保持在显示模块中,但不嵌入在所述显示驱动器集成电路中。本发明提供了图形加速,其提高了显示性能,但没有显著地增加制造成本。与非加速CPU图形处理相比,降低了功耗。
文档编号G06T15/00GK1653488SQ0381058
公开日2005年8月10日 申请日期2003年5月9日 优先权日2002年5月10日
发明者梅托德·科舍利亚, 米卡·图奥米 申请人:比特波伊斯有限责任公司, 日本电气电子株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1