在帧缓冲器内读取和写入像素分配子帧的方法和装置的制作方法

文档序号:6657067阅读:164来源:国知局
专利名称:在帧缓冲器内读取和写入像素分配子帧的方法和装置的制作方法
技术领域
本发明涉及一种SMID并行处理,尤其涉及执行来自辅助数据流的指令。
背景技术
采用并行度最高的并行处理结构是使用了单指令多数据(SMID)方法以及使用了最简单可行的处理元件(PE)结构一个单比特运算处理器。因为每个PE的处理输出能力很低,PE逻辑的简单性支持用大量的PE来构造处理器阵列。通过把这样大量的PE组合成SIMD处理器阵列,能够获得非常高的处理输出能力。
位串行SIMD结构的一种变体是将PE连接成2维网格,每个PE与阵列内其北面、南面、东面和西面的4个相邻PE相联通。2维结构适用于,但并不限于,处理具有2维结构的数据,例如图像像素数据。

发明内容
本发明的一个方面提供了一种包括一个数据源的数字数据处理系统,适用于提供表示图像分帧行段的像素数据,所述行段包含至少一个数据模块,该模块包含内有按照光栅顺序排列的像素;用于接收行段并从行段中选择像素的装置,其中所选像素包括一个光栅顺序像素组;以及由光栅顺序像素组构成子帧行的装置,所述子帧行包含至少一个数据字,该数据字包含至少2个按照光栅顺序排列的像素。
另一方面,本发明提供了一种可包含一个数据客户的数字数据处理系统,适用于接收表示图像分帧行段的像素数据,所述行段包含至少一个数据模块,该模块内包含有按照光栅顺序排列的像素,其中所选像素包含一个光栅顺序像素组;用于接收包含至少一个数据字的子帧行并从子帧线中选择像素值的装置,该数据字包含至少2个按照光栅顺序排序的像素,其中所选像素包含一个光栅顺序像素组;以及用于由光栅顺序像素组构成行段并把行段传送到所述数据客户的装置。
下面将结合附图描述本发明的各个方面和实施例。


为了更好地理解本发明,下面将结合描述了本发明的各个实施例的附图详细说明本发明,其中图1A是根据本发明建立的图像处理系统的示意图;图1B是根据本发明建立的SIMD阵列处理器的示意图;图2是帧缓冲器内像素数据存储格式的图示;图3是示出了封装码控制信号定义的表格;图4是表示存储在帧缓冲器内的图像帧中的子帧位置和选择的图示;图5是图像帧内重叠子帧的图示;图6是存储在帧缓冲器内的数据单元的名称和组成列表;图7是图6中列出的数据单元的图示,其示出了帧缓存和组序列;图8是示出了cache_cmd控制信号定义的表格;图9是使用RMA SIMD高速缓存来构造子帧行的图示;图10是使用WMA SIMD高速缓存存储器来构造帧缓冲器脉冲串对的图示;图11是与子帧相关的脉冲串对的组序列的图示;图12是与子帧相关的脉冲串对的组序列的图示,其中使用了打乱(swizzling);以及图13是列出和定义了子帧I/O命令分量的表格。
具体实施例方式
本发明涉及数字数据的并行处理,尤其涉及数字图像像素数据。尽管本文公开的实施例涉及了图像像素数据的特定情况,需要理解的是,像素数据可以被任意数字数据替代,而不会偏离本发明的范围和主旨。
本发明的示例性实施例是主要用于处理像素数据的图像处理系统的一部分。参见图1A,根据本发明建立的一个示例性系统包括SIMD阵列处理器2000,SIMD卷绕器100,存储控制器600和帧缓冲器900。SIMD阵列处理器2000提供像素数据的处理。SIMD卷绕器100封装SIMD阵列处理器,并提供与系统内其他元件的接口。SIMD卷绕器100也集成了本发明的许多功能方式。存储控制器600提供系统和帧缓冲器900之间的数据读取和写入的直接控制。帧缓冲器900提供图像帧数据的存储,用于由图像处理系统进行处理。
现在参照图1B,SIMD阵列处理器2000提供用于对像素数据执行操作的计算逻辑。像素操作是在处理元件(PE)的SIMD(单指令多数据)阵列上执行的。为了执行这些操作,PE阵列1000需要一个指令源,支持像素数据移入和移出该阵列。
SIMD阵列处理器2000包括一个程序序列发生器300,用于向PE阵列1000提供指令流。还提供像素I/O单元800,用于控制像素数据移入和移出PE阵列1000。
SIMD阵列处理器2000可用于执行对阵列形式的图像区段的计算。一个示例性实施例的阵列尺寸是64列×48行。SIMD阵列处理器2000是系统控制处理器的从属设备,本文称为“CPU”。如图1A所示,CPU I/F 120是SIMD阵列处理器2000和CPU之间的接口,并由CPU提供示例性SIMD阵列处理器2000的初始化和控制。
像素I/O单元800提供控制,用于将像素数据通过被称为“ImgBus”的图像总行在PE阵列1000和外部存储器之间的移动。像素数据的移动和PE阵列计算同时进行,从而提供更大的像素数据处理输出能力。像素I/O单元800将图像数据在打包帧缓冲像素格式和PE阵列1000所需处理格式之间进行转换。
SIMD阵列处理器2000处理被称为“子帧”的阵列形式的区段中的图像数据。一种典型的情况中,帧缓冲器900内的图像帧的尺寸比PE阵列1000大得多。图像帧的处理通过依次处理子帧图像区段来完成,直到图像帧被全部处理。
在使用SIMD阵列处理器2000的一个示例系统中,帧缓冲器900对SIMD阵列处理器2000外部的图像数据提供存储。帧缓冲器900通过SIMD卷绕器100内的Img Bus与SIMD阵列处理器2000进行通信。为了满足带宽需求,Img Bus接口的宽度是64位。帧缓冲器900被组织成使得数据字的逻辑宽度是64位。
如图2所示,像素数据被存储在64位多像素字内。许多打包格式都能够得到支持,例如每字2个像素(30或32位像素数据),每字3个像素(20位),以及每字4个像素(16位)。打包格式用图3所示的封装码来表示。
像素用连续水平扫描顺序被打包。在数据字内,较早的像素被放置朝向字的最大有效位一端。像素通过比特0即字的最小有效位一端来对齐,因此任何未使用的位处在最大有效位一端。
在子帧数据输入和输出时,数据字按照水平扫描行顺序移动。因此,数据字的最小有效位一端上的像素之后是图像帧中的下一个像素,其被顺序存储在朝向下一个数据字的最大有效位一端。
SIMD阵列处理器2000处理的每个子帧行的第一数据字被对齐,使得子帧行的第一个像素就是数据字的第一个像素。即,子帧行不是从数据字的中间开始的。可以通过把子帧边界的粒度限制到帧缓冲器900内2,3或4像素(取决于像素打包)来实现对齐。作为替代,在该示例性实施例中,SIMD卷绕器逻辑电路执行像素重新打包的功能,以确保每个子帧行的对齐。
帧缓冲器900内,像素打包在每个图像帧行的开始处被“调整”,即每一条行的第一个像素被存储在该帧行的第一个数据字的最大有效位一端。在这个示例性实施例中,帧行也在32字节(4个字)脉冲串边界处被对齐。因为这种对齐,一些未使用的数据也出现在每个帧行的末端。
这里描述的像素打包方法是一个示例性实施例所遵循的方法。其他像素顺序和存储限制也可以应用于所述的整个数据处理方案,并且没有偏离本发明的范围。
图4中示出了图像帧存储的一个实例。该实例中,阴影区域表示的图像帧包含160×160个像素。封装码是2(如上所述),指定了20位的像素。虚行周长的白色矩形所示的一个48×64子帧被任意放置在X偏移量为17、Y偏移量为40的位置处。
在该图中,64位字边界用虚的垂直行表示,脉冲串(每个包括4个字)用实的垂直行表示。因为该实例中每个字中有3个像素,一个脉冲串包含12个像素。因此160个像素的帧行需要14个脉冲串(160/12=1313)]]>。如阴影区域所示,仅有1/3的最终脉冲串被用于图像帧数据。帧的“间距”用每个帧行的脉冲串的数目来表示,也即该实例中的14。
对于大多数用途来说,图像帧完全由帧地址、封装码和间距值指定。示例性的子帧位于Y偏移量为40,X偏移量为17的位置处。X偏移量和Y偏移量表示子帧的左上角相对于图像帧的起始地址(左上角)的位置。偏移量用像素表示,X偏移量从左至右增加,Y偏移量从上至下增加。
示例性的SIMD阵列处理器2000处理被称为子帧的48×64图像区段。所有图像数据以子帧的形式输入和输出。因此图像帧的处理通过依次处理子帧区段实现,直到完成整个图像帧的处理。
对于160×160的图像帧的实例,使用图5所示的子帧图样。可以看出子帧互相重叠。这是必然的结果,因为64位宽的子帧不能平均跨越160位宽的帧,48位宽的子帧也不能平均跨越160位宽的帧。实际上,子帧重叠对于去除由于处理引入的边缘效应而产生的无效像素也是必要的。
图5的实例中,阴影子帧用48的X偏移量和38的Y偏移量确定。假设光栅顺序处理,子帧的最后10行随后会被稍后的子帧重写。因此向帧缓冲器900写入这10行是冗余的。为了避免这些冗余写入,可规定一个38的“Y行”参数。Y行参数确定了在子帧输出过程中要写入帧缓冲器900的子帧行的个数。写入任何超过Y行个数的子帧行被SIMD卷绕器100抑制。
交错子帧的处理有时是必需的,其中一个区域的子帧只由偶数帧线组成,另一个区域的子帧只由奇数帧线组成。“步长”参数允许编程者在子帧行之间规定一个偏移量,用图像帧行表示。一个示例性实施例中,步长可以是0到31之间的任何值,尽管1(未交错)和2(交错)是常用的可选值。
十进制特征增加了子帧输入的处理输出能力。“Dec_cmd”参数确定十进制是有效(1)或无效(0)。十进制只被应用到20位像素数据。十进制方法组合了3个像素值,根据下列公式产生一个单个的20位像素像素i=(字i[59:40]*20+字i[39:40]*24+字i[19:0]*20)/64十进制在字的基础上应用,每64位字的3个像素被组合产生一个子帧像素。帧缓冲器900内的X偏移必须在字边界上。从帧缓冲器900中读取的子帧的大小是48×192像素,同时SIMD阵列处理器2000接收的子帧是普通的48×64子帧。对于十进制子帧输入没有提供高速缓存支持。
一个子帧完全由X偏移量、Y偏移量、Y行、步长和Dec_cmd参数确定。
现在参照图9和图10的示例性实施例,SIMD卷绕器100提供控制和暂时数据存储,用于在子帧I/O过程中在帧缓冲器900和SIMD阵列处理器2000之间的像素数据传输。读取存储器代理(RMA)400控制帧缓冲器900向SIMD阵列处理器2000的数据传输,如果需要就使用RMA SIMD高速缓存,并通过Img Bus构造一个重新对齐的子帧行用于传输。写入存储器代理(WMA)500控制SIMD阵列处理器2000向帧缓冲器900的数据传输,使用WMA SIMD高速缓存520用于接合,并构造一个帧缓冲器对齐的数据流以写入帧缓冲器900。
该示例性实施例中对于其帧缓冲器使用了一个DDR(双倍数据率)存储器。DDR的物理数据路径有128位宽。DDR存储器的物理寻址以脉冲串为单位。每个脉冲串是一个32字节的数据模块,包含2个物理字(即数据总线上传输的被称为“mem_dat”的2次数据传输)。每个物理字包含2个逻辑字,即本说明书中前面部分所述的64位数据字。图6和图7示出了这些数据单元的总和。
示例性的DDR存储器的内部被分区为4组,标记为A、B、C和D。所述组结构为地址序列每计数2次就跨过一个组段。换句话说,如图7所示,地址0和1指向组A,2和3指向组B,依次类推。
为了获得最优性能,要遵循一组规则。首先是访问属于序列内同一组的脉冲串对。因此,读取地址0之后应读取地址1,依次类推。第二个规则是访问一个组的脉冲串对之后应该访问下一个组的脉冲串对。通常来说,为了获得最优性能,所述的组必须被顺序访问。只要顺序访问地址,就能够保持最优的存储性能。非顺序的访问仍然能够最优的执行,只要所述的组是被顺序访问的。因此,地址2,3(组B)的脉冲串对之后是地址12,13的脉冲串对(组C),而不会发生性能恶化。
每个存储器代理采用SIMD高速缓存来减少冗余帧缓冲传输,并在WMA的情况下,还提供输出数据的接合。在一个示例性实施例中,每个SIMD高速缓存最高可支持4个有效子帧I/O处理。每个“逻辑高速缓存”提供3K字节的存储,每个高速缓存总共12K字节。逻辑高速缓存对于一个子帧的每48行存储2个脉冲串。示例性的RMA SMID高速缓存420被设置成一个128×768的RAM,示例性的SIMD高速缓存520被设置成一个64×1536的RAM。
在子帧I/O期间,SIMD高速缓存为每个子帧行写入最后两个脉冲串。(该脉冲串对被限制为一个奇偶对,从而属于同一个DDR组)。在传输给定子帧的过程中写入SIMD高速缓存的数据被读出,并由高速缓存在传输给定图像帧的下一个子帧的过程中使用。为了正确使用高速缓存,子帧必须依照光栅序列被传输,使得从给定子帧被写入高速缓存的数据可以从高速缓存中被读出,并用于顺序传输下一个子帧。
为了执行接合,子帧输出需要使用WMA SIMD高速缓存520。为子帧输入使用RMA SIMD高速缓存420是可选的,尽管使用该高速缓存提供了更好的性能。对于给定子帧行的第一个子帧,没有执行对SIMD高速缓存的读取,因为行内没有前一个子帧提供数据。对于该子帧,仅执行一次高速缓存写入。对于子帧行的最后一个子帧,没有写入高速缓存,因为没有随后的子帧使用数据。对于该子帧,仅执行一次高速缓存读取。对于所有“中间”子帧,既执行SIMD高速缓存的读取也执行其写入。
每个子帧I/O任务包括一个cache_cmd控制和一个cache_select控制。cache_cmd确定将子帧判定为“第一”子帧(1),“中间子帧”(2),“最后”子帧(3)还是在所有(0)处不执行高速缓存。Cache_select确定从0到3中哪个逻辑高速缓存用于子帧I/O任务。
RMA 400封装将子帧数据从帧缓冲器900传输到SIMD阵列处理器2000所需的数据对齐逻辑、控制和RMA SIMD高速缓存420。RMA 400的操作如图9的实例所示。该实例阐释了20位数据的子帧行的读取。该子帧被假设为“中间”或普通子帧,因此执行SIMD高速缓存的读取和写入访问。
帧缓冲器900内指定的X偏移和Y偏移处示出了该子帧的第一子帧行。行的阴影部分表示要读取的像素数据。因为是20位数据,其最多跨过了3个脉冲串对。所示外部矩形表示3个脉冲串对,虚行表示每个脉冲串的边界。应该观察到,如果子帧行位于和脉冲串对不同的地方,它可以跨过4个脉冲串对部分。
由于假设是一个中间子帧,每行的第一脉冲串对驻留在RMASIMD高速缓存器420内,不需要从帧缓冲器900中读出。因此该实例中,每个子帧行仅需要读出2个脉冲串对。
当从帧缓冲器900中读取每个子帧行时,读取SIMD高速缓存器内相应的入口,与帧缓冲器900数据相结合,提供包含子帧行的全部3个脉冲串对。当子帧行的最后的脉冲串对已经从帧缓冲器900中被读出时,其被写入SIMD高速缓存器。
重建的子帧行被重新排列,使得生成64位打包像素的22个数据字。数据被对齐,使得子帧行的第一像素在第一个字的最大有效位一端被调整,如图9所示。这是SIMD阵列处理器2000所需的对齐。22个字按照光栅顺序被发送到SIMD阵列处理器2000的像素I/O单元800。
如果该实例中的子帧行是一个“第一”子帧(或者如果cache_cmd=0,表示没有高速缓存),则没有高速缓存数据和帧缓冲数据相结合。必须从帧缓冲器900读取所有3个脉冲串对,生成重新对齐的子帧行,以发送到像素I/O单元800。如果子帧行是“最后”一个子帧,就简单地忽略向SIMD高速缓存的数据写入。
很明显,对于读取和写入访问一个给定的子帧行,SIMD高速缓存地址是相同的,因为逻辑缓存和子帧行分别是相同的。新缓存(写入)数据替换了旧(读取)数据,而旧数据被用于构造子帧行。因为读取发生在子帧行的起始处,写入发生在行的末端,不会产生存储器访问冲突或读写顺序混乱。
WMA500封装将子帧数据从SIMD阵列处理器2000传输到帧缓冲器900所需的数据对齐逻辑、控制、以及WMA SIMD高速缓存520。图10所示的实例给出了WMA的操作。该实例阐释了20位数据的子帧行写入。子帧被假设为“中间”或普通子帧,因此执行SIMD高速缓存的读取和写入。
第一子帧行的目的地在帧缓冲器900内指定的X和Y偏移处示出。行的阴影部分表示要写入的像素数据。因为是20位数据,其最多跨过了3个脉冲串对。所示外部矩形表示3个脉冲串对,虚行表示每个脉冲串的边界。
因为子帧行以光栅顺序从像素I/O单元被接收,数据被重新对齐,使得数据适当地位于要写入帧缓冲器900的脉冲串对内。重新对齐可能会产生最后脉冲串对内的未使用的数据,其是零缓冲的。重新对齐的数据的最后脉冲串对被写入WMA SIMD高速缓存器520,由下一个子帧使用。此时,最后脉冲串对没有写入帧缓冲器900。
构成要写入帧缓冲器900的第一脉冲串对的数据包括当前子帧行的启始点之前的数据。在没有高速缓存器的情况下,数据必须从帧缓冲器900中读出,“接合”到子帧行,以生成一个有效的第一脉冲串对。但是,WMA SIMD高速缓存器520使用前一子帧的缓存数据,以提供该数据。脉冲串对从SIMD高速缓存器中读出,起始子帧行之前的部分被提取,并被连接(或接合)到子帧行数据,产生第一脉冲串对。该实例中,重新对齐的数据的前两个脉冲串对被写入帧缓冲器900。
在一方面,本发明的这个实例中WMA 500与RMA 400的不同之处在于子帧重叠的处理。如本说明书前面所述,子帧重叠能够消除边缘效应。对于子帧输入,通过仅仅为待读取的所希望的子帧指定X和Y偏差而处理子帧重叠,不用考虑前一子帧的位置。然而,对于子帧输出,WMA500需要了解该重叠,从而可以确定当前子帧的有效部分。
输出子帧必须位于帧缓冲器900中,使得上升沿与在先子帧的下降沿相邻接,如果重叠是已知的,则只能确定前一子帧的下降沿。例如,子帧从100的X偏移开始,并且重叠为10,则下降沿是100+64-10-1,或者是153。下一个被输出的子帧必须被写入到一个100+64-10或154的X偏移处。由于X偏移由程序员提供,下一个子帧的定位不是问题。
然而,无论X偏移是多少,WMA500有确切的责任将数据接合到子帧的上升沿处。只有当高速缓冲器中具有正确的数据时,才能够做到这一点。WMA必须了解该重叠来确定当前子帧的下降沿的位置,从而将知道为了接合下一个子帧,应将哪个脉冲串对写入到高速缓冲器。
在所示实例中,该重叠并不影响写入哪个脉冲串对的确定。然而,一般情况下,在重叠调整之后,可以使全部子帧的下降沿落入与该子帧下降沿不同的脉冲串内。
如果这个实例中的子帧行是“第一”子帧(或者如果cache_cmd=0表示没有高速缓冲),则没有高速缓冲数据和子帧行相结合。由于一个图像帧的帧地址和间距被限制在脉冲串的边界,则一个子帧行的第一子帧总是脉冲串对准的,并且因此不需要接合。
如果子帧行为“最后”一个子帧,则简单地省略对SIMD高速缓冲器的数据写入,因为在该行内没有其他子帧要求数据接合。最后的脉冲串被写入到帧缓冲器900。
为了实现具有不同像素大小的实例,仅需要观察每个子帧行的字数量的改变(对于16位数据是16个字,对于32位是32个字),这会影响每个子帧行的脉冲串对的数量。存储器控制逻辑和重新对齐功能必须考虑像素尺寸来产生正确的重新对齐的子帧行。
存储控制器600响应系统内的客户请求,通过图像处理系统提供帧缓冲器访问的直接控制。SIMD卷绕器100是由存储控制器600提供服务的其中一个用户。
RMA400或WMA500提供的帧缓冲器地址是基于如下子帧参数计算出来的FB Addr=floor(X_offset/(pixels_per_word*4))+(Y_offset*Pitch)+Frame AddressWMA使用“even_floor”代替“floor”来提供脉冲串对的对齐如前所述,最优性能要求依照组顺序访问帧缓冲器900。对于大多数用户,普通的光栅顺序的数据存储能够确保最优性能。例如,图11中示出了每行跨过8个脉冲串的一幅图像的前8个行。访问这个图像会产生所需的A-B-C-D组顺序。
但是,使用这个存储器结构会产生SIMD阵列图像的次优结果。一个原因是,需要序列访问的子帧行的部分(也就是子帧行少于高速缓存数据)通常少于4个脉冲串对。如果图12的灰色部分表示SIMD阵列图像的前8个行,可以看出访问顺序是A-B-C-A-B-C而不是A-B-C-D。由于C-A存储单元的顺序是不符合次序的,会为每个顺序的出现插入一个等待状态。
为减少由于等待状态造成的性能损失,采用了一种叫作“打乱(swizzling)”的技术。打乱数据是用无序序列写入帧缓冲器900的数据,使得SIMD阵列处理器2000的访问会导致顺序的组访问。由于SIMD阵列处理器2000有特殊的要求,子帧行以多个8行模式被访问。如果按照这个要求,图12示出了所期望的步长为1的组访问次序的打乱模式。可以看出,由于子帧行被顺序访问(0,8,16,等等),始终保持A-B-C-D的组顺序。
在用户访问期间,存储控制器600被告知待访问数据是否被打乱。对于存储控制器600,对打乱数据的处理是产生一个地址。对于普通(未被打乱的)数据,帧缓冲器地址可以被计算出来ADR[27:0]=BASE_ADR+Y*PITCH+X--其中Y是Y偏移,X是X偏移,单位是脉冲串对于打乱数据的访问,按照下列公式计算地址ORIG_ADR=BASE_ADR+Y*PITCH+XORIG_BANK=ORIG_ADR[7:6]if(BANK_SWIZZLE_EN=1)thenif(STRIDE=1)thenY_LINE=Y[4:3]elsif(STRIDE=2)thenY_LINE=Y[5:4]elsif(STRIDE=4)thenY_LINE=Y[6:5]elsif(STRIDE=8)thenY_LINE=Y[7:6]elsif(STRIDE=16)thenY_LINE=Y[8:7]endifelseY_LINE=0endifif(Y_LINE=1)thenBANK=ORIG_BANK+3elsif(Y_LINE=2)then
BANK=ORIG_BANK+2elsif(Y_LINE=3)thenBANK=ORIG_BANK+1els BANK=ORIG_BANKendifADR[27:5]=ORIG_ADR[27:8]&BANK&ORIG_ADDR[5]可以看出只有2阶步长值支持打乱。
如图13所示,由一个子帧I/O指令描述了一个子帧I/O任务。SIMD阵列处理器2000向SIMD卷绕器100分配一个子帧I/O指令,以简化子帧输入/输出任务的开始。I/O指令提供的信息完全规定了从子帧中所选定的帧、子帧自身、以及所采用的高速缓存控制。
I/O方向字段(图13中的比特66)确定了任务是用于子帧的输入(dir=1)还是输出(dir=0)。方向是相对于SIMD阵列处理器2000。
图像帧用帧地址、间距和封装码参数规定。帧地址为帧缓冲器900内的图像帧提供基地址。封装码确定一个字是包含两个30/32位像素(pack=1)、三个20位像素(pack=2)还是四个16位像素(pack=3)。一个帧行所需的存储器是由帧的宽度(以像素为单位)确定的,并且像素被打包成字。行宽用图像帧的间距表示。帧地址和间距的单位是32字节的脉冲串。
子帧由X偏移量、Y偏移量、Y行、步长和Dec_cmd参数确定。X偏移量和Y偏移量确定帧内子帧的X(列)和Y(行)位置。X和Y偏移量用单个像素单位表示。图像帧内的编号从左上角(行0,列0)开始。当任务为输出时,Y行参数可以用来规定待写子帧行的数量。为了支持子帧数据的交错存储,一个步长参数用来确定图像帧内各个子帧行之间的Y偏移量。尽管步长通常是1(未交错)或2(交错),有效的步长值的范围从0到31均可。需要注意的是步长为0能够根据帧缓冲器900中数据的单个子帧行生成垂直的条纹模式。Dec_cmd确定在子帧输入过程中是否采用十进制(0=no,1=yes)。十进制只用于子帧输入,仅用于20位像素数据,并且可仅用于字调整X偏移量。
Cache_select参数确定使用4个高速缓冲器中哪一个执行子帧任务。Cache_cmd确定是没有高速缓存(0)还是将子帧当作“第一”子帧(1)、一个中间或“普通”子帧(2)或者“最后”子帧(3)。重叠值表示序列中当前子帧和下一个子帧之间水平重叠的像素数量。
对于本领域的技术人员,本发明的许多修正和其他实施例能够被想到。因此,可以理解本发明不局限于所公开的特定实施例,其他修正和实施例也应该包括在所附权利要求的范围内。
权利要求
1.一种数字数据处理系统,其包括一个数字源,适用于提供表示图像分帧行段的像素数据,所述行段包含至少一个数据模块,该数据模块内包含有按照光栅顺序排列的像素;用于接收行段并从行段中选择像素值的装置,其中所选像素包括一个光栅顺序像素组;以及用于由光栅顺序像素组构成子帧行的装置,所述子帧行包括至少一个数据字,该数据字包含至少2个按照光栅顺序排列的像素。
2.如权利要求1所述的系统,其中每个数据模块是固定尺寸,并包含可选择数量的像素,所述系统还包括用于确定每个数据模块内像素个数的装置。
3.如权利要求1所述的系统,其中每个数据字是固定尺寸,并包含可选择数量的像素,所述系统还包括用于确定每个数据字内像素个数的装置。
4.如权利要求1所述的系统,还包括从所述至少一个数据模块中选择两个或更多个像素的装置,所述系统对两个或更多个所选像素值做出响应,生成一个单个的像素,以结合到所述子帧行中。
5.如权利要求1所述的系统,其中每个行段的最后一个数据模块包含结合到所述子帧行中的像素以及结合到后面一个子帧行内的像素,所述系统还包含用于存储最后一个数据模块的高速缓存;以及用于在构造所述后面的子帧行的过程中从高速缓冲存储中读取最后一个数据模块而不是从数据源接收最后一个数据模块的另一个拷贝的装置。
6.如权利要求5所述的系统,还包括用于确定是否执行从高速缓存的读取的装置。
7.如权利要求5所述的系统,还包括用于确定是否执行对高速缓存的写入的装置。
8.如权利要求5所述的系统,其中所述后面的子帧行的起始与所述子帧行的末端重叠,从而在所述子帧行和所述后面的子帧行之间重复了至少一个像素值,所述系统还包括用于确定所述子帧行和所述后面的子帧行之间重叠程度的重叠控制装置;以及选择装置,耦合到并响应于重叠控制装置,用于选择所述行段的一个数据模块,所述行段包含了包括后面的子帧行的起始处的像素,还用于将所选的数据模块而不是所述最后的数据模块存储到高速缓存内。
9.如权利要求1所述的系统,其中数据源是用于存储图像帧的存储器,所述系统还包括用于指定图像帧的基地址的基地址控制装置。
10.如权利要求9所述的系统,其中每个数据模块是固定尺寸的,并包含数量可选的像素,所述系统还包含封装控制装置,用于确定每个数据模块的像素个数。
11.如权利要求10所述的系统,还包括用于指定所述图像帧的间距的装置,该间距表示连续图像帧行的相应像素之间的地址偏移量。
12.如权利要求11所述的系统,还包括用于指定图像帧行数量的装置,以及用于根据基地址控制装置、封装控制装置、图像间距、以及图像帧行的数量来计算图像帧行的起始地址的装置。
13.如权利要求12所述的系统,还包括用于指定表示从图像帧行的起始处发生像素偏移的像素个数,精度为单个像素,所述系统还包括用于根据所述图像帧行起始地址和像素数量来计算包含所述像素的数据模块地址的装置。
14.如权利要求12所述的系统,还包括用于按照包含N个路径的非连续顺序访问图像分帧行的装置,每个路径包括图像帧行的顺序访问,相互之间的偏移量是N条行,并且每个路径从与前一个路径的起始点偏移一个帧行处开始。
15.如权利要求14所述的系统,其中N是8。
16.如权利要求11所述的系统,还包括用于指定图像区域的步长的装置,其表示图像帧的行个数,将每个行分隔开以结合到该图像区域中。
17.如权利要求16所述的系统,还包括用于指定图像区域行个数的装置,还包括用于根据基地址控制装置、封装控制装置、图像间距、跨度和图像区域行个数来计算图像区域行的起始地址的装置。
18.如权利要求17所述的系统,还包括用于指定表示从图像区域行的起始处发生像素偏移的像素个数,所述偏移具有单个像素的精度,所述系统还包括用于根据所述图像区域行起始地址和像素个数来计算包含所述像素的数据模块地址的装置。
19.如权利要求9所述的系统,其中存储器被分区为组,当顺序访问存储器的组时,不需要插入等候状态就能提供顺序访问,所述系统还包括用于把图像帧数据按照顺序存入存储器内的装置,当访问连续行段时允许连续访问所述组。
20.一种数字数据处理系统,其包括一个数据客户端,用于接收表示图像帧行段的像素数据,所述行段包含至少一个数据模块,该数据模块内包含有按照光栅顺序排列的像素;用于接收包含至少一个数据字的子帧行并从子帧行选择像素值的装置,所述数据字包含至少2个按照光栅顺序排列的像素,其中所选像素包含一个光栅顺序的像素组;以及用于由光栅顺序像素组构成行段并把行段传送到所述数据客户端的装置。
21.如权利要求20所述的系统,其中每个数据模块是固定尺寸,包含数量可选的像素,所述系统还包括用于确定每个数据模块的像素个数的装置。
22.如权利要求20所述的系统,其中每个数据字是固定尺寸,包含数量可选的像素,所述系统还包括用于确定每个数据字内像素个数的装置。
23.如权利要求20所述的系统,其中每个行段的最后一个数据模块包含从所述子帧行中选出的像素以及将要从后面一个子帧行中选出的像素,所述系统还包括高速缓存,用于在处理所述子帧行的过程中存储最后一个数据模块的部分构建的拷贝;以及用于从高速缓冲存储中读取最后一个数据模块的拷贝并在处理所述后面的子帧行时完整构建所述最后一个数据模块的装置。
24.如权利要求23所述的系统,还包括用于确定是否执行从高速缓存的读取的装置。
25.如权利要求23所述的系统,还包括用于确定是否执行对高速缓存的写入的装置。
26.如权利要求23所述的系统,其中所述后面的子帧行的起始处与所述子帧行的末端重叠,从而在所述子帧行和所述后面的子帧行之间重复了至少一个像素,所述系统还包括用于确定所述子帧行和所述后面的子帧行之间重叠程度的重叠控制装置;以及选择装置,耦合到并响应于重叠控制装置,用于选择所述行段的一个数据模块,其包含了后面的子帧行的起始处的像素,还用于将所选的数据模块而不是所述最后的数据模块存储到高速缓存内。
27.如权利要求20所述的系统,其中数据客户端是用于存储图像帧的存储器,所述系统还包括用于指定图像帧的基地址的基地址控制装置。
28.如权利要求27所述的系统,其中每个数据模块是固定尺寸,包含数量可选的像素,所述系统还包括打包控制装置,以确定每个数据模块的像素个数。
29.如权利要求28所述的系统,还包括用于指定所述图像帧的间距的装置,所述间距表示连续图像帧行的相应像素之间的地址偏移量。
30.如权利要求29所述的系统,还包括用于把行段序列存储在所述存储器内的装置,所述序列包含表示位于图像帧内的固定尺寸的矩形图像部分的一个子帧,其位于距离图像基地址的可选的行和像素偏移处,所述像素偏移具有单个像素的精度。
31.如权利要求30所述的系统,还包括用于确定要写入所述存储器内的子帧行个数的装置。
全文摘要
用于在并行处理系统中从帧缓冲器读取和写入像素对齐后的子帧的系统及方法。帧缓冲器的最优带宽访问要求数据可以被移入具有多个数据字的脉冲串内。子帧被指定在图像帧内X和Y位置处,精度为一个像素。另外,一行内的子帧互相重叠,而且连续的子帧行也可能重叠。本发明的存储控制逻辑提供了像素打包和拆包,并把所选择的像素数据存储在一个高速缓存内。对于帧缓冲器的读取和写入使得能够最佳地使用帧缓冲器的内部结构。存储控制逻辑的其他性能包括像素数据在输入过程中的十进制、抑制向帧缓冲器的冗余写入、以及用交错方式访问图像帧数据。
文档编号G06F15/16GK101084493SQ200580034450
公开日2007年12月5日 申请日期2005年8月23日 优先权日2004年8月31日
发明者伍德罗·L·梅克, 克拉拉·嘉·华·孙, 卡尔·A·莫里斯 申请人:硅奥普迪思公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1