一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

数据压缩和打包的制作方法

2022-06-05 03:15:54 来源:中国专利 TAG:


1.本发明涉及数据压缩和打包。


背景技术:

2.数据压缩,无论是无损的还是有损的,在许多应用中都是人们所期望的,其中数据将被存储在存储器中和/或从存储器中读取。通过在将数据存储在存储器中之前压缩数据,可以减少传输到存储器的数据量。数据压缩对其而言特别有用的数据的示例是图像数据,诸如要存储在深度缓冲器中的深度数据,要存储在帧缓冲器中的像素数据和要存储在纹理缓冲器中的纹理数据。这些缓冲器可以是任何合适类型的存储器,例如高速缓冲存储器、单独的存储器子系统、共享存储器系统中的存储区域或它们的某种组合。
3.图形处理单元(gpu)可以用于处理图像数据,以便确定要存储在帧缓冲器中的图像的像素值,以输出到显示器。gpu通常具有高度并行化的结构,用于并行处理大型数据块。要想使gpu(特别是那些打算在移动设备上实现的gpu)以较低的功率水平运行,存在着巨大的商业压力。与此相悖的是,希望在更快的gpu上使用更高质量的渲染算法,因而对相对有限的资源(存储器带宽)造成了压力。然而,增大存储器子系统的带宽可能不是有吸引力的解决方案,因为将数据移入和移出gpu,甚至在gpu内移动数据,会消耗gpu的大部分功率预算。对于其他处理单元,例如中央处理单元(cpu)以及gpu,可能面临着相同的问题。
4.下面描述的实施方案仅以举例的方式提供,而不限制解决已知数据压缩和解压缩方法的任何或所有缺点的实现方式。


技术实现要素:

5.提供本发明内容是为了以简化的形式介绍下文在具体实施方式中进一步描述的一系列概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
6.描述了一种数据压缩方法。所述方法包括以光栅扫描顺序接收数据块的输入像素数据,其中所述像素数据包括每个像素的至少红色通道数据、绿色通道数据和蓝色通道数据。使用基于块的编码方案来压缩所述像素数据,然后基本上以光栅扫描顺序输出压缩的像素数据。
7.描述了一种数据解压缩方法。所述方法包括基本上以光栅扫描顺序接收压缩像素数据,以及确定与一行像素相对应的压缩数据的位数。然后,对于该行中的每个像素组,所述方法标识所述像素组的基于块的解码方案,并且使用标识的方案对所述像素组解码。
8.第一方面提供一种数据压缩方法,包括:以光栅扫描顺序接收数据块的输入像素数据,所述像素数据包括每个像素的至少第一通道数据、第二通道数据和第三通道数据;使用基于块的编码方案基本上以光栅扫描顺序压缩所述像素数据;以及基本上以光栅扫描顺序输出压缩的像素数据。
9.第二方面提供一种数据压缩硬件,包括:输入端,所述输入端用于以光栅扫描顺序
接收数据块的输入像素数据,所述像素数据包括每个像素的至少第一通道数据、第二通道数据和第三通道数据;硬件逻辑,所述硬件逻辑被布置为使用基于块的编码方案基本上以光栅扫描顺序压缩所述像素数据;以及输出端,所述输出端用于基本上以光栅扫描顺序输出压缩的像素数据。
10.第三方面提供一种数据解压缩方法,包括:基本上以光栅扫描顺序接收压缩的像素数据;确定与一行像素相对应的压缩数据的位数;以及对于所述行中的每个像素组,标识所述像素组的基于块的解码方案,并且使用标识的方案解码与所述像素组相对应的所述压缩数据,其中行中的每个像素组包括来自部分块的行中的那些像素,图像数据块被细分为多个部分块,并且每个部分块包括多于一行的像素,并且其中标识所述像素组的基于块的解码方案包括标识所述部分块的编码型式的预定义集合中的一个编码型式。
11.对于部分块中的偶数行,所述压缩数据可以包括输出两个解压缩的输出像素所需的所有所述像素数据,并且对于所述编码型式的子集,还包括用于解压缩相同部分块的后续行中的像素对的推进数据。
12.每个像素组可以包括相邻像素对,并且其中每个像素或相邻像素对的编码数据包括p的倍数位的序列,其中p是整数。
13.压缩的图像数据可以包括压缩图像数据块,并且所述压缩图像数据块可以包括:压缩像素数据块;以及控制数据块,并且其中所述方法包括使用所述控制数据块确定与一行像素相对应的压缩数据的位数。
14.所述方法可以包括:基于所述控制数据块中的控制位或所述压缩的像素数据内的控制位来标识所述像素组的基于块的解码方案。
15.所述方法可以包括基本上并行地解码多个像素组。
16.第四方面提供一种数据解压缩硬件,包括:输入端,所述输入端用于基本上以光栅扫描顺序接收压缩的图像数据;控制硬件,所述控制硬件被布置为确定与一行像素相对应的压缩数据的位数;以及解码硬件,所述解码硬件被布置为解码像素组,其中所述控制硬件或所述解码硬件还被布置为,对于所述行中的每个像素组,标识所述像素组的基于块的解码方案,并且其中所述解码硬件被布置为,对于每个像素组,使用标识的方案解码与所述像素组相对应的压缩数据,其中行中的每个像素组包括来自部分块的行中的那些像素,图像数据块被细分为多个部分块,并且每个部分块包括多于一行的像素,并且其中标识所述像素组的基于块的解码方案包括标识所述部分块的编码型式的预定义集合中的一个编码型式。
17.对于部分块中的偶数行,所述压缩数据可以包括输出两个解压缩的输出像素所需的所有所述像素数据,并且对于所述编码型式的子集,还可以包括用于解压缩相同部分块的后续行中的像素对的推进数据。
18.压缩的图像数据可以包括压缩图像数据块,并且所述压缩图像数据块可以包括:压缩像素数据块;以及控制数据块。
19.所述数据解压缩硬件还可以包括:拆包硬件,所述拆包硬件被布置为将所述控制数据块传递到所述控制硬件,并且其中所述控制硬件被布置为通过分析所述控制数据来确定与未压缩图像数据块中的一行像素相对应的压缩数据的位数。
20.所述控制硬件还可以被布置为将所述位数传送到所述拆包硬件;并且所述拆包硬
件还可以被布置为将与一行像素相对应的像素数据传递到所述解码硬件。
21.所述控制硬件可以被布置为,对于所述行中的每个像素组,基于所述控制数据块标识所述像素组的基于块的解码方案。
22.所述解码硬件可以被布置为,对于所述行中的每个像素组,基于嵌入所述压缩的像素数据内的控制位并且可选地基于由所述控制硬件提供的数据来标识所述像素组的基于块的解码方案。
23.所述控制硬件还可以被布置为从所述控制数据块提取标识所述压缩的像素数据内的任何嵌入控制位的位置的信息,并且将标识所述压缩的像素数据内的任何嵌入控制位的位置的信息提供给所述解码硬件。
24.所述解码硬件可以包括多个解码单元,每个解码单元被布置为在像素行内的不同位组上并行地操作。
25.行中的每个像素组的所述压缩数据可以包括p的倍数位,其中p是整数。
26.行中的每个像素组的所述压缩数据可以包括一个或两个编码像素值。
27.每个编码像素值可以是编码输入像素值或两个输入像素值的编码平均值。
28.所述解码硬件可以被布置为以光栅扫描顺序输出解压缩的像素数据。
29.所述硬件可以在无需对所述压缩的像素数据进行任何缓冲的情况下实现。
30.第五方面提供一种图形处理系统,其包括如上文详述的数据解压缩硬件。
31.第六方面提供一种图形处理系统,其被配置为执行如上文详述的方法。
32.第七方面提供一种计算机可读代码,其被配置为当所述代码被运行时致使如上文详述的方法被执行。
33.第八方面提供一种计算机可读存储介质,其上存储有集成电路的计算机可读描述,所述计算机可读描述在集成电路制造系统中被处理时致使所述集成电路制造系统制造如上文详述的数据解压缩硬件。
34.第九方面提供一种集成电路制造系统,其包括:计算机可读存储介质,所述计算机可读存储介质上存储有集成电路的计算机可读描述,所述计算机可读描述对如上文详述的数据解压缩硬件进行描述;布局处理系统,所述布局处理系统被配置为处理所述集成电路描述,以便生成体现所述数据解压缩硬件的集成电路的电路布局描述;以及集成电路生成系统,所述集成电路生成系统被配置为根据所述电路布局描述制造所述数据解压缩硬件。
35.如本文所述的数据压缩和/或解压缩单元可以在集成电路上的硬件中实现。可以提供一种在集成电路制造系统中制造如本文所述的数据压缩和/或解压缩单元的方法。可以提供集成电路定义数据集,当在集成电路制造系统中被处理时,该集成电路定义数据集将系统配置为制造如本文所述的数据压缩和/或解压缩单元。可以提供一种非暂时性计算机可读存储介质,其上存储有集成电路的计算机可读描述,当被处理时,该计算机可读描述使得布局处理系统生成在集成电路制造系统中使用的电路布局描述以制造如本文所述的数据压缩和/或解压缩单元。
36.可以提供一种集成电路制造系统,包括:非暂时性计算机可读存储介质,其上存储有计算机可读集成电路描述,其描述了如本文所述的数据压缩和/或解压缩单元;布局处理系统,其被配置为处理集成电路描述,以便生成体现如本文所述的数据压缩和/或解压缩单元的集成电路的电路布局描述;以及集成电路生成系统,其被配置为根据电路布局描述来
制造如本文所述的数据压缩和/或解压缩单元。
37.可以提供用于执行本文所述的任一种方法的计算机程序代码。可以提供非瞬态计算机可读存储介质,所述非瞬态计算机可读存储介质上存储有计算机可读指令,所述计算机可读指令在计算机系统处执行时使计算机系统执行本文所述的任一种方法。
38.如对本领域的技术人员显而易见的,上述特征可以适当地组合,并且可以与本文所述的示例的任何方面组合。
附图说明
39.现在将参考附图详细描述示例,在附图中:
40.图1示出了图形渲染系统;
41.图2是示例性数据压缩方法的流程图;
42.图3是两个不同格式输入块的示意图;
43.图4是被配置为实现图2的方法的示例性压缩硬件的示意图;
44.图5是被配置为解压缩使用图2的方法生成的压缩数据的示例性解压缩硬件的示意图;
45.图6是可以通过图5的硬件实现的数据解压缩的示例的流程图;
46.图7是示例性压缩数据块的示意图;
47.图8是压缩子块的示例性方法的流程图;
48.图9是示出了可以在图8的方法中使用的编码型式的示意图;
49.图10是可以在图2的方法中使用的编码方法的流程图;
50.图11是将10位数据转换为8位数据的第一示例性方法的流程图;
51.图12是将a位数转换为b位数的示例性方法的流程图,其中a》b;
52.图13是另一个示例性数据压缩方法的流程图;
53.图14和图15示出了确定是使用恒定的α模式还是可变的α模式的两个不同的示例性实现方式;
54.图16示出了实现数据压缩和/或解压缩单元的计算机系统;以及
55.图17示出了用于生成体现如本文所述的数据压缩和/或解压缩单元的集成电路的集成电路制造系统。
56.附图示出了各种示例。技术人员将理解,附图中所示的元素边界(例如,框、框的组,或其它形状)表示边界的一个示例。在一些示例中,情况可能是一个元素可以被设计为多个元素,或者多个元素可以被设计为一个元素。在适当的情况下,贯穿各附图使用共同的附图标记来指示类似的特征。
具体实施方式
57.通过示例的方式给出以下描述,以使本领域的技术人员能够制造和使用本发明。本发明不限于本文描述的实施例,并且对所公开的实施例的各种修改对于本领域的技术人员将是显而易见的。
58.现在仅通过示例的方式来描述实施例。
59.如上所述,存储器带宽是处理单元(例如,cpu或gpu)内的相对有限的资源,类似
地,存储器空间也是有限的资源,因为增大它会对设备的物理尺寸和功耗都有影响。通过在将数据存储在存储器中之前使用数据压缩,可节省存储器带宽和存储器中的空间。
60.数据压缩技术可以是无损的或有损的。利用无损压缩技术,可以从压缩的数据完美地重建原始数据。相反,在使用有损压缩技术的情况下,不能完美地从压缩数据重建数据,相反,解压缩数据仅是原始数据的近似值。有损压缩技术通常可以比无损压缩技术更大程度地压缩数据(即,实现更小的压缩比)。使用无损压缩技术可以实现的压缩量取决于正被压缩的数据的性质,其中一些数据比其他数据更容易压缩。
61.通过压缩技术(无论是无损还是有损)实现的压缩量可以用在此称为压缩比的百分比来表示,并由下式给出:
[0062][0063]
这意味着,压缩比为100%表示没有实现压缩,压缩比为50%表示数据已压缩到其原始、未经压缩大小的一半,并且压缩比为25%表示数据已被压缩到其原始、未经压缩大小的四分之一。
[0064]
应当理解,存在限定压缩比的其它方式,并且存在表示压缩量的其它方式,其可以通过数据压缩方法来实现,诸如通过参考压缩数据块的大小(例如,就字节数而言)。
[0065]
可以实现的压缩量的可变性(取决于正在被压缩的实际数据的特性)对存储器带宽和存储器空间两者都有影响,并且可能意味着实现的压缩的全部好处就这两个方面中的一方面或两方面而言并不会完全实现,如下所述。
[0066]
在许多用例中,需要对原始数据进行随机存取。通常对于图像数据而言,为了实现这一点,在进行压缩之前,将图像数据分成独立的、非重叠的矩形块。如果每个压缩块的大小因块中数据的性质而变化(例如,所有相同颜色的块可能比包含大量细节的块压缩得多得多),以至于在某些情况下块可能根本不会被压缩,那么,为了保持随机存取压缩数据块的能力,可以分配存储器空间,好像数据根本没有压缩一样。替代性地,有必要维护一个索引,在该索引中,有每个块的标识该块的压缩数据驻留在存储器中的位置的条目。这需要存储器空间来存储索引(可能相对较大),并且存储器存取(在索引中执行查找)会增加系统的等待时间。例如,在能够随机存取每个压缩数据块很重要以及不使用索引的系统中,即使实现50%的平均压缩比(针对所有数据块),仍然需要假定压缩比为100%来分配存储器空间,因为对于某些块,可能无法使用无损压缩技术来实现任何压缩。
[0067]
此外,由于数据到存储器的传输是以固定大小的突发脉冲(例如,以64字节的突发脉冲形式)发生的,因此对于任何给定的块,只有一组离散的有效压缩比适用于将数据传输到存储器。例如,如果一个数据块包含256个字节并且数据传输是以64字节的突发脉冲发生的,则数据传输的有效压缩比为25%(如果块从256字节压缩到不超过64字节,因此只需要一个突发脉冲),50%(如果块被压缩成65-128字节因此需要两个突发脉冲),75%(如果块被压缩成129-192字节,因此需要三个突发脉冲)和100%(如果块根本没有压缩或被压缩成193或更多字节,因此需要四个突发脉冲)。这意味着,如果将包括256个字节的数据块压缩到129-192字节范围内的任何值,则压缩块需要三个突发脉冲,而未压缩块需要四个突发脉冲,这使得用于存储器传输的有效压缩比为75%,同时实现的实际数据压缩可以低得多(例如,如果压缩到129字节,则低至50.4%)。类似地,如果压缩只能将块压缩为193字节,则存
储器传输看不到使用数据压缩的好处,因为仍需要四个突发脉冲来将压缩数据块传输到存储器。在其他示例中,数据块可以包括不同数量的字节,并且到存储器的突发脉冲可以包括不同数量的字节。
[0068]
压缩的数据可以在被传送到存储器或另一设备之前被打包成数据结构(其可以被称为压缩数据块)。作为数据解压缩过程的一部分,压缩的数据在被解压缩之前被拆包(例如,从数据结构提取)。将压缩的数据打包成数据结构的方式(即,位被放入数据结构中的顺序)可以影响压缩和解压缩硬件的操作(特别是所需的缓冲量),因此可以影响该硬件的大小及其操作的效率(例如,在速度、处理功率、功耗等方面)。
[0069]
本文描述了执行像素数据(例如,rgb/rgba/argb像素数据)的数据压缩和数据打包的方法,以及提供压缩操作和解压缩操作的改进效率的对应的数据拆包和解压缩方法,例如,压缩和解压缩操作可以在硬件中高效地实现(例如,硬件的大小较小)。例如,压缩硬件可以在硬件中高效地实现,因为所需的多路复用硬件量减少,并且解压缩硬件可以出于相同原因并且也因为所需的缓冲量减少而在硬件中高效地实现。这在空间有限的实现方式中可以是特别有用的(例如,移动式/便携式/手持式计算设备,诸如智能手机、平板电脑、便携式游戏设备、智能手表等)。本文所述的方法可以用于提供保证压缩比(例如50%)或固定压缩块大小(其中这可以按照位数/字节,例如128字节,或每个像素的位数,例如16位来定义)。在各种示例中,本文所述的方法提供了压缩数据的打包方案,其已经容易地确定不同像素(或像素组,诸如像素对)的数据之间的边界,这引致解压缩过程的拆包和解码操作的效率进一步提高(并且因此解压缩硬件不太复杂且更高效)。
[0070]
如下文更详细描述的,执行像素数据的数据压缩和数据打包的方法的方法涉及未压缩图像数据的输入块的细分。细分可以是一个步骤过程(其将一个块分为多个子块)、两个步骤过程(其将块分为多个子块,然后将每个子块分为多个迷你块),或者可以包括多于两个的步骤(其中所得块仍被称为迷你块)。无论细分步骤的数目如何,输入块都被细分成多个较小块,所述较小块可被统称为“部分块”。因此,术语“部分块”可以指子块或迷你块。
[0071]
图1示出了可以在诸如移动设备之类的电子设备中实现的图形渲染系统100。图形渲染系统100包括主机cpu 102、gpu 104和存储器106(例如图形存储器)。cpu 102被布置为与gpu 104进行通信。可以是压缩数据的数据可以在gpu 104和存储器106之间沿任一方向传输。
[0072]
gpu 104包括渲染单元110、压缩/解压缩单元112、存储器接口114和显示器接口116。系统100被布置为使得数据可在任一方向上在(i)cpu 102与渲染单元110之间传递;(ii)cpu 102与存储器接口114之间传递;(iii)渲染单元110与存储器接口114之间传递;(iv)存储器接口114与存储器106之间传递;(v)渲染单元110与压缩/解压缩单元112之间传递;(vi)压缩/解压缩单元112与存储器接口114之间传递;以及(vii)存储器接口114与显示器接口之间传递。系统100还被布置为使得数据可以从压缩/解压缩单元112传递到显示器接口116。由gpu 104渲染的图像可以从显示器接口116发送到显示器以在其上显示。
[0073]
在操作中,gpu 104对图像数据进行处理。例如,渲染单元110可以使用诸如深度测试(例如,用于隐藏表面移除)和纹理化和/或明暗运用之类的已知技术来执行诸如三角形和线之类的图形基元的扫描转换。渲染单元110可以包含高速缓存单元以减少存储器流量。一些数据由渲染单元110经由存储器接口单元114(可以包括高速缓存)读取或写入到存储
器106中,但是对于其他数据,例如要存储在帧缓冲器中的数据,数据优选地从渲染单元110经由压缩/解压缩单元112传输到存储器接口114。压缩/解压缩单元112通过压缩数据来减少要通过外部存储器总线传输到存储器106的数据量,如下面更详细描述的。
[0074]
显示器接口116将完成的图像数据发送到显示器。可以直接从存储器接口单元114存取未压缩的图像。可以经由压缩/解压缩单元112存取压缩数据,并将其作为未压缩数据发送到显示器108。在替代性示例中,压缩数据可以直接发送到显示器108,并且显示器108可以包括用于以与压缩/解压缩单元112的解压缩等效的方式来解压缩已压缩数据的逻辑。尽管示为单个实体,但是出于增强性能原因,压缩/解压缩单元112可以包含多个并行压缩和/或解压缩单元。
[0075]
图2示出可由压缩/解压缩单元112执行的第一示例性压缩方法。如图2中所示,该方法将未压缩图像数据即连接的像素值的块作为输入。该图像数据可以是rgb或rgba数据,或者呈通道为不同顺序的对应格式(例如argb数据)。示例性格式包括rgb888格式、rgba8888格式、argb8888格式、rgba1010102格式和argb2101010格式。所述方法还可以用于其它类型的图像数据(例如,yuv数据);然而,当所述方法利用通道之间的颜色相关性时,对于存在较少相关性的一些格式,所述方法可引入一些误差。接收到的每个图像数据块与n
×
m像素块(其中n和m是整数)有关,并且该块也可以被称为像素的平铺块(例如,在使用基于平铺块的渲染技术的图形处理装置中),例如,包括8
×
8像素的块/平铺块302(n=m=8)或包括16
×
4像素的块/平铺块304(n=16,m=4),如图3所示,并且在以下描述中可以同义使用术语“平铺块”和“块”。以光栅扫描顺序接收图像数据,即逐行接收像素值,从第一行(第0行)中的最低有效位(lsb)开始,并以最后一行(第7行平铺块302,以及第3行平铺块304)中的最高有效位(msb)结束,如图3中的箭头所示。
[0076]
如图2中所示,数据的输入块被细分为子块(块202),每个子块包括n乘m像素,其中n和m是大于一的整数,并且其中n和m可以不同或相同。对于包括8
×
8像素或16
×
4像素的输入块(或平铺块)302、304,该块可以被细分为子块,每个子块包括4
×
4像素(n=m=4)。在各种示例中,这些子块可以进一步被细分为迷你块,每个迷你块包括n’乘m’像素,其中n’和m’是整数,m’大于一个,并且其中n’和m’可以不同或相同。在各种示例中,n’也可以大于一。例如,4
×
4子块可以被细分为四个迷你块,每个迷你块包括2
×
2像素(n’=m’=2)。
[0077]
在将数据块分成子块(框202中)之后,然后使用基于块的编码方案来执行压缩(框204)。压缩(框204中)涉及对子块执行的一些分析,该分析用于标识要用于每个子块的特定编码方案(或型式);然而,压缩基本上以光栅扫描顺序执行。当子块被细分为迷你块时,分析可以逐个迷你块地而不是逐个子块地实现。任何合适的基于块的压缩方案可以用于执行框204中的输入图像数据的压缩。
[0078]
术语“基本上以光栅扫描顺序”在本文中用于指像素数据的排序,其对于大多数编码方案而言确切地为光栅扫描顺序(其中光栅扫描顺序由图3中的两个示例中的箭头指示);然而,在一小部分编码方案中(例如,在所有使用的编码方案中的仅一个编码方案中),可以根据确切的光栅扫描顺序将隔离的像素值输出到其应被输出到的位置之前。这种排序与按子块或按迷你块排序非常不同,如图3中可以看到的。参考图3中的第二示例304,其中块包括四个块,可以看到,以光栅扫描顺序输出来自每个子块的第一行、第0行(以lsb开始)的像素,然后输出每个子块的第二行、第1行等。相比之下,按子块排序将引致这样的顺序:
遍历第一子块的第一行、第0行,随后是第一子块的第二行、第三行和第四行,然后是第二子块的第一行、第0行,随后是第二子块的第二行、第三行和第四行等。
[0079]
在各种示例中,压缩(框204中)包括分析每个子块或迷你块的像素数据,以选择有待用于该子块或迷你块的编码方案和/或型式(框204a),然后使用所选的编码方案和/或型式压缩该子块/迷你块中的像素数据(框204b)。在此类示例中,分析(框204a中)可以逐个子块地(或逐个迷你块地)执行,而像素数据的编码(框204b中)可以使用在分析阶段中确定的所选的编码方案和/或型式基本上以光栅扫描顺序对输入数据执行。不同的编码方案和/或型式可以被称为不同的压缩模式。下文例如参考图8至图10详细描述基于型式的压缩方法的各种示例。
[0080]
在执行压缩(框204中)之后,压缩的数据然后被打包成图像数据的压缩块,其中压缩的像素数据不按逐个子块(或逐个迷你块)的顺序排列,而是基本上以光栅扫描顺序排列(框206),即压缩的像素值基本上以与其被接收在原始未压缩数据中的顺序相同的顺序首先从第一行和lsb开始逐行地被输出。
[0081]
打包数据以形成压缩数据块(框206中)可以包括基本上以光栅扫描顺序连接压缩的像素数据(框206b),然后将压缩的像素数据与控制数据的一个或多个位连接(框206c)。与控制数据(框206c中)的这种连接可以包括附加控制数据的一个或多个位(例如,作为lsb)或前置控制数据的一个或多个位(例如,作为msb)。在各种示例中,打包还可以包括在连接(框206b中)之前将控制数据的一个或多个位嵌入像素数据内(框206a)。任何控制位是否被嵌入(例如,框206a是否被省略)以及确切地添加哪些控制位及添加在压缩的像素数据(框206a中)内的哪个位置可以取决于用于特定子块或迷你块的特定编码方案和/或型式和/或输入数据的格式,将在下文更详细地描述这样的示例。
[0082]
在各种示例中,压缩的数据可以确切地以光栅扫描顺序输出(打包成每个输入块的压缩数据块);然而,在一些示例中,可能存在非常少量的压缩模式(例如,编码方案和/或型式),这引致仅对少量像素(例如,每个迷你块一个像素)的光栅扫描顺序进行轻微修改。在此类示例中,隔离的像素值可以在根据确切的光栅扫描顺序应输出的位置之前被输出,并且在这些情况下,压缩的像素数据仍不以逐个子块(或逐个迷你块)的顺序而基本上以光栅扫描顺序被输出。下文详细描述了引致与确切的光栅扫描顺序具有较小差异的示例性压缩模式。特别地,使用本文所述的压缩和打包方法,解压缩操作总是具有足够的数据以光栅扫描顺序解压缩(例如解码)下一个像素,并且不需要在等待接收数据(例如,在后续行中)时存储压缩值以启用解码。
[0083]
当基本上以光栅扫描顺序而不是逐个子块地输出压缩的数据(以该顺序打包成每个输入块的压缩数据块)时,这减少了作为解压缩操作的一部分所需的缓冲量。
[0084]
图4示出了被配置为实现图2的方法并且可以在压缩/解压缩单元112内实现的示例性压缩硬件400的示意图。压缩硬件400包括分析管道402、缓冲器404(其可以是fifo)、编码硬件406、子块打包硬件408和平铺块打包硬件410。
[0085]
分析管道402包括被配置为以光栅扫描顺序接收未压缩的输入图像数据的输入端,并且管道被布置为容纳整个输入块的像素数据(例如,图3中所示的示例中的8
×
8或16
×
4像素的像素数据)。输入数据可以例如以每个时钟周期8像素的速率被输入到分析管道402,并且如果分析管道中的阶段容纳的像素少于整个输入块,则分析管道402可以在其输
出端处包括输出缓冲器(例如,呈具有读写指针的fifo的形式)。在其它示例中,缓冲器可以附加地或取代地被并入分析管道402的另一位置(例如在其输入端处),使得整个输入块(例如整个平铺块)的像素数据可以被容纳在分析管道402内。
[0086]
分析管道402被布置为执行将像素的输入块细分为子块,并且在一些情况下,执行将子块进一步细分为迷你块(框202)。如上所述,每个子块和每个迷你块包括多于一行的像素(即,m》1且m’》1)。分析管道402被进一步布置为分析子块或迷你块中的像素的像素数据,并且标识每个子块或每个子块内的每个迷你块的编码方案和/或型式(框204a)。分析管道402不对像素数据进行重新排序,因此,在分析后,其被布置为以光栅扫描顺序将像素数据输出到编码硬件406。
[0087]
除了输出像素数据之外,分析管道402还被布置为生成和输出编码硬件406所使用的一些控制数据,并且该控制数据可以被直接输出到编码硬件406,或者分析管道402可以被配置为将控制数据写入缓冲器404中。控制数据包括标识有待用于每个子块或迷你块的编码方案和/或型式的数据,并且还可以包括编码操作中所使用的其它参数。在各种示例中,分析管道402被布置为计算用于编码数据但基于来自输入数据块中的不同行的像素或光栅扫描顺序中不相邻的像素而计算的任何参数。这是因为只有分析管道402具有同时可用的该数据。相比之下,编码硬件406以光栅扫描顺序处理像素。所生成的参数形成输出到编码硬件406或写入缓冲器404的控制数据的一部分。
[0088]
在各种示例中,分析管道402可以实现为大型移位寄存器,其中功能块被布置为执行比较(例如,在图8的框804中)和求平均值(例如,在图8的框808中)。
[0089]
编码硬件406包括用于从分析管道402以光栅扫描顺序接收输入像素数据的输入端和用于从缓冲器404接收控制数据的输入端。由编码硬件406从缓冲器404读取的控制数据可以包括标识有待用于每个子块或迷你块的编码方案和/或型式的数据,并且可以包括其它控制数据,诸如调色板颜色数据(如下所述)。编码硬件406被布置为根据特定子块或迷你块的所标识的编码方案和/或型式对像素数据进行编码,其中像素是生成压缩的像素数据的一部分(框204b)。编码硬件406以光栅扫描顺序而不是逐个子块或逐个迷你块地操作。编码硬件406包括用于基本上以光栅扫描顺序将压缩的像素数据输出到子块打包硬件408的输出端,并且还可以包括用于将控制数据输出到平铺块打包硬件410的输出端。
[0090]
编码硬件406、子块打包硬件408和平铺块打包硬件410可以被布置为将压缩的像素数据(在编码硬件406中生成)集体打包成数据结构(框206),并且在各种示例中,这些单独的元件可以组合成单个编码和打包硬件元件412。在各种示例中,编码硬件406还可以被布置为在基本上以光栅扫描顺序输出压缩的像素数据(具有任何嵌入的控制位)之前将一个或多个控制位嵌入像素数据内(框206a)。在各种示例中,也可以嵌入一个或多个填充位。
[0091]
子块填充硬件408包括用于接收由编码硬件406输出的压缩的像素数据(其可以包括一些嵌入的控制和/或填充位)的输入端。如上文详述的,压缩的像素数据基本上以光栅扫描顺序从编码硬件406被接收;然而,当编码硬件406减小每个像素的数据的大小(即,位数)时,压缩的像素数据之间的数据字中存在“间隙”(例如,未使用的位)。子块打包硬件408被布置为连接压缩的像素数据(框206b),使得数据基本上保持光栅扫描顺序,即,打包硬件被配置为执行打包但不对压缩的像素数据重新排序。该打包操作包括移除“间隙”并将所有已使用的位(即,压缩的像素数据的位)打包在一起,而不改变压缩的像素数据的顺序。
[0092]
平铺块填充硬件410包括用于接收由子块填充硬件408生成的压缩的像素数据块以及可以从缓冲器404读取或从编码硬件406接收的控制数据的一个或多个输入端(如图4中的虚线箭头所示)。平铺块填充硬件410被布置为组装控制数据块704,并将其附加到压缩的像素数据块702以形成压缩图像数据块700(框206c)。与压缩像素数据块702不同,控制数据块704可以逐个子块地进行布置,如图7所示(例如,具有与输入块中的每个子块有关的控制数据块704的单独部分706-712)。平铺块填充硬件410还包括用于输出压缩图像数据块的输出端。控制块704中的控制数据包括与像素数据块702内的任何嵌入的控制位不同的数据。
[0093]
图5示出了示例性解压缩硬件500的示意图,其被配置为解压缩使用图2的方法压缩的数据,并且可以在压缩/解压缩单元112内实现。解压缩硬件500被配置为实现图6中所示的解压缩方法,并且包括拆包硬件502、控制硬件504和解码硬件506。
[0094]
拆包硬件502包括用于接收压缩图像数据块700的输入端。压缩数据块可以不作为单个块被接收,但是可以在若干时钟循环中(例如,取决于突发脉冲大小)递增地被接收。拆包硬件502被布置为将控制数据块704(其是待接收的压缩数据块的第一部分)传递至可实现为状态机的控制硬件504。控制硬件504被布置为分析控制数据,并且基于该分析来确定像素数据块702中与输入块中的每行像素相对应的位数(框602)。控制硬件504被配置为将该信息传回到拆包硬件502,并且作为响应,拆包管道被配置为继而将与输入块的每行相对应的像素数据(例如,输入平铺块)传递至解码硬件506。
[0095]
控制硬件504和/或解码硬件506被布置为确定对每行中每个像素组所使用的编码方案和/或型式,以及因此需要用于解码那些像素的解码方案和/或型式(框604),其中一行中的像素组包括属于同一子块(其中逐个子块地执行编码)或迷你块(其中逐个迷你块地执行编码)的行中的那些像素。解码方案和/或型式的标识可以由控制硬件504基于控制数据块704执行,或者由解码硬件506基于基于嵌入压缩的像素数据702内的控制位以及可选地基于由控制硬件504提供的数据执行。在由控制硬件504执行标识的情况下,控制硬件504被配置为向解码硬件506提供该信息,并且在该示例或其它示例中,控制硬件504可以被配置为向解码硬件506提供其已从控制数据块提取的其它数据。在由解码硬件506执行标识的情况下,控制硬件504可以被配置为向解码硬件506提供标识压缩的像素数据内任何嵌入的控制位的位置的信息。
[0096]
解码硬件506被布置为使用所标识的解码方案和/或型式将对应的像素数据以光栅扫描顺序解码(框606)并输出为解压缩的像素数据。在各种示例中,解码硬件506被布置为附加地使用由控制硬件504提供的其它数据来执行解码。对于引致偏离严格的光栅扫描顺序的特定编码方案和/或型式(如上所述),解码硬件506被布置为以光栅扫描顺序存储在其正确位置之前被接收到的像素数据,使得其随后可以确切的光栅扫描顺序被输出。在此类示例中,解码硬件506可以被布置为存储编码的像素数据,使得其以光栅扫描顺序被解码,或者解码硬件506可以被布置为以编码的像素数据被接收到的顺序执行解码,然后在以确切的光栅扫描顺序输出之前存储解码的像素数据。如上所述,本文所述的压缩方法确保解码硬件506始终具有足够的数据以光栅扫描顺序解码下一个像素,并且不需要等待数据被无序提供。
[0097]
通过使用本文描述的方法,在各种示例中,解压缩硬件500可以在不缓冲压缩的像
素数据而是仅具有管道级控制定时的情况下实现。控制硬件504可以包括缓冲器以存储解码硬件506所使用的控制数据;然而,与压缩的像素数据的量相比,控制数据的大小较小。
[0098]
在各种示例中,上述解码硬件506可以包括在像素行内的不同位上并行操作的多个相同硬件单元。在编码方案和/或型式基于每个迷你块(其中每个迷你块包括n’x m’个像素)被标识的情况下,可能存在n/n’个解码硬件单元(例如,8
×
8平铺块302的4个解码硬件单元和16
×
4平铺块304的8个解码单元,使得对于输入平铺块的行中的每个迷你块而言都存在解码硬件单元),其中每个都被配置为解码来自不同迷你块的行内的那些n’个像素。类似地,在子块未被细分为迷你块的情况下,可能存在n/n个解码硬件单元(例如,8
×
8平铺块302的2个解码硬件单元和16
×
4平铺块304的4个解码单元),其中每个都被配置为解码来自不同子块的行内那些n个像素。
[0099]
为了进一步提高压缩/解压缩单元112的效率,像素或像素对(即,来自相同行和相同子块/迷你块的相邻像素对)的压缩的像素数据可以布置为总是为p的倍数位(其中p是整数,例如p=10)。这可以作为编码方案和/或型式的一部分(例如,由框204b中的编码硬件406)和/或打包过程的一部分来实现(框206中)。在各种示例中,这可以通过嵌入控制位(例如,通过框206a中的编码硬件406)和/或一个或多个填充位(例如,通过框206a之前、之后或替代该框的编码硬件406)来实现。
[0100]
通过将每个像素或像素对压缩成p的倍数位,用于实现打包操作的硬件(框206中,并且特别是框206b中)被简化,因为存在较少的可变性(即,每个像素或像素对可写入较少的可能位的位置),并且因此效率更高(例如,其可以在较小的硬件中实现,因为需要的多路复用硬件数量减少)。类似地,拆包操作(框602中)被简化,因为每个像素的压缩数据之间的边界的位置数量显著减少(例如,按p或p/2的系数)。特别地,在存在多个相同的解码硬件单元的情况下,这降低了将压缩的像素数据分布到每个解码硬件单元的硬件的复杂性(例如,当总是将p的倍数位输入到每个解码硬件单元时)。参考图4,从编码硬件406传递到子块打包硬件408的数据可以总是为p的倍数位,并且参考图5,从拆包硬件502传递到解码硬件506的数据可以总是为p的倍数位。
[0101]
如上所述,像素数据的压缩(框204中)可以使用预定义的编码型式的集合中的一个编码型式,并且可以按每个子块或按每个迷你块确定编码型式(框204a中,并且由分析管道402)。图8是分析像素数据以选择编码型式以用于2
×
2迷你块上的示例性方法的流程图。该方法可以由分析管道402实现,并且可以替代性地针对较大的迷你块或子块而非2
×
2迷你块进行修改以供使用,但这可引致在从其中选择一个编码型式的预定义的编码型式的集合中产生显著较多数目的编码型式。如上文所述,当按每个子块/迷你块选择编码型式时,以光栅扫描顺序执行实际编码。
[0102]
如图8所示,该方法包括计算2
×
2迷你块中的每个像素对的色差(框802),其中最相似的像素与特定像素具有最小的色差,并且其中像素与邻近像素之间(即像素对之间)的色差可以计算为:
[0103]
|红色色差| |绿色色差| |蓝色色差| |α色差|
[0104]
在计算了三个色差(每个像素对一个色差)之后(框802中),使用迷你块中的任何像素对的最小色差来确定所使用的迷你块编码模式(框802)。在该示例中,根据最小色差(迷你块中的任何像素对之间)是否超过阈值(例如可以设置在范围0-50中的某个值,例如
40),使用两种不同类型的迷你块编码模式。如果最小色差未超过阈值(框804中为“是”),则选择六个预定义的三色编码型式902-912中的一个(框806),并且计算一种平均调色板颜色(框808)。然而,如果最小色差超过阈值(框804中为“否”),则选择四色模式914(框810)。这些不同的迷你块模式902-914在图9中示出。编码型式依赖于这样的假设:在大多数迷你块中,存在不超过三种不同的颜色,并且在这种情况下,迷你块可以由三种调色板颜色以及像素到调色板条目的指派来表示。存在四色模式来处理除此以外的例外情况,并且阈值(框804中所使用的)提供近似值以选择误差最小的模式。
[0105]
如上所述,阈值的值可以在0-50的范围内。在各种示例中,它可以是在设计时设置的固定值。替代性地,它可以是存储在全局寄存器中的变量,并且每次在执行图8的方法时读取它。这使得阈值能够动态地或至少周期性地改变。在各种示例中,可以基于来自训练阶段的结果来设置阈值的值。训练阶段可以使用图像质量度量,例如峰值信噪比(psnr)或结构相似性度量(ssim)来评估一组使用三色模式902-912或四色模式914中的每一种模式压缩的图像,然后可以选择阈值,使得总体上获得最高图像质量度量。应当理解,在其它示例中,框804可以被不同的测试替换。
[0106]
如图8所示,如果最小色差小于或等于阈值(框804中为“是”),使得可以使用三色编码型式,则基于具有最小色差的像素对(在迷你块中),从如图9所示的六种指派型式的集合中选择所使用的特定型式(框806)。在图9中的每种型式中,示出为阴影的两个像素是具有最小色差的两个像素。如果像素对ab具有最小色差,则所选模式是被称为“顶部”的模式902。如果像素对cd具有最小色差,则所选模式是称为“底部”的模式904。如果像素对ac具有最小色差,则所选模式是称为“左侧”的模式906。如果像素对bd具有最小色差,则所选模式是称为“右侧”的模式908。如果像素对ad具有最小色差,则所选模式是称为“diag1”的模式910。如果像素对bc具有最小色差,则所选模式是称为“diag2”的模式912。
[0107]
在选择了三色编码模式(框806中)之后,通过对像素对中两个像素的源像素颜色与最小色差求平均值来计算新的像素颜色(框808)。在各种示例中,新像素颜色可以5555格式计算,并且这提供了50%的压缩比。在需要其它压缩比的情况下,可以用不同的位深度计算平均像素数据。以下伪代码示出了该计算的示例性实现方式,其中像素对中的两个像素被表示为pix1和pix2,并且rgba值被表示为.red、.grn、.blu和.alp。
[0108][0109]
虽然以上伪代码包括α值,其中α模式具有恒定值或所使用的压缩模式涉及恒定α
值,但可以使用相同技术但省略α通道。下文更详细地描述了恒定α值的使用。类似地,在不存在α通道的情况下(例如,对于rgb数据),这从计算中被省略。
[0110]
在选择三色模式的情况下计算的平均像素数据(框810中)由分析管道402生成,然后可以被写入缓冲器404,使得其随后可以由编码硬件406读取并在编码像素数据时被使用(框204b中)。平均像素数据由分析管道402计算(框810中)作为选择编码型式的一部分(框204a中),而不是由编码硬件406计算,因为编码硬件406基本上以光栅扫描顺序处理像素数据。这意味着当编码硬件406编码来自一行的像素时,编码硬件406无权存取来自后续行的像素数据,并且因此无法计算六色模式906-912中的四种模式的平均像素数据。因此,平均像素数据形成由分析管道402生成的控制数据的一部分(如上所述)。
[0111]
类似地,在选择“顶部”模式902的情况下(框806中),输入像素c的值被写入缓冲器404,使得其随后可以由编码硬件406读取并在编码像素数据时被使用(框204b)。如上所述,编码硬件406基本上以光栅扫描顺序处理像素数据,并且因此当编码硬件406编码来自一行的像素时,编码硬件406无权存取来自后续行的像素数据。如果选择“顶部”模式,则输入像素c的值因此形成由分析管道402生成的控制数据的一部分(如上所述)。当输入像素c的值被写入缓冲器时,其可以在被写入之前被转换为不同的格式(例如,从8888格式转换为5555格式),或者替代性地,在已从缓冲器读取该值之后,可以由编码硬件406执行任何格式转换。
[0112]
在选择预定义编码模式中的一种模式(框204a中,例如如图8中所示)之后,编码操作(框204b中)将取决于所选模式、输入数据格式,并且在各种示例中,还取决于其他因素,诸如所需的压缩比。rgba8888或argb8888格式数据的示例在图10中示出,并且还在下表中列出,其提供50%的压缩比。在需要不同压缩比的示例中,可以相应地修改转换阶段(框1004和1012中)。下表(表1)阐述了对于每种编码模式和每个输入像素而言,编码的像素数据(其可被表示为输出像素a-d)包括的内容。如表1中可以看到的,对于三色模式,输出像素c或输出像素d包含数据(而不是两者都包含)。
[0113]
表1:
[0114][0115]
如上表和图10中所示,该方法将单个像素的像素数据作为输入。以光栅扫描顺序接收该像素数据,并且每个像素属于迷你块且是该迷你块中的像素a、b、c或d且作为该迷你块的一部分,并且其在该迷你块中的位置(即,作为像素a、b、c或d)将影响像素数据被编码的方式。像素a和b形成偶数行(第0行、第2行、...)的一部分,其中在光栅扫描顺序中像素a位于像素b之前,并且像素c和d形成奇数行(第1行、第3行、...)的一部分,其中在光栅扫描顺序中像素c位于像素d之前。
[0116]
如果所选模式是该像素是其一部分的迷你块的四色模式(框1002中为“是”),则无论输入像素是否位于迷你块中的位置a、b、c或d,编码操作(框204a中)都通过将8888格式数据转换为4434格式数据而以相同方式进行(框1004)。然而,如果所选模式是三色模式,则编码操作将基于像素在迷你块中的位置和所选编码模式而不同,并且对于每一奇数行,仅存在编码数据输出的单个像素(例如,输出像素c或输出像素d)。这是因为在此类模式中仅输出三种颜色。
[0117]
如果像素处于迷你块中的位置a(框1006中为“是”),则如果所选模式为顶部902、左侧906或diag1 910(框1008中为“是”),那么编码操作包括从缓冲器404读取平均像素值(框1010)。取决于模式,不同的平均值将如上文详述的先前由分析管道402计算并被写入缓
冲器404。否则,编码操作包括将像素数据从8888格式转换为5555格式(框1012)。
[0118]
如果像素处于迷你块中的位置b(框1006中为“否”,框1014中为“是”),则如果所选模式为右侧908或diag2 912(框1016中为“是”),那么编码操作包括从缓冲器404读取平均像素值(框1010)。取决于模式,不同的平均值将如上文详述的先前由分析管道402计算并被写入缓冲器404。如果所选模式是底部904、左侧906或diag1 910(框1018中为“是”),则编码操作包括将像素数据从8888格式转换为5555格式(框1012)。否则,编码操作包括从缓冲器404读取输入像素c数据(框1019),并且如果这在数据被存储在缓冲器中之前没有完成,则将像素数据从8888格式转换为5555格式(框1012)。
[0119]
如果像素处于迷你块中的位置c(框1006和1014中为“否”,框1020中为“是”),则如果所选模式是底部904(框1022中为“是”),那么编码操作包括从缓冲器404读取平均像素值(框1010)。取决于模式,不同的平均值将如上文详述的先前由分析管道402计算并被写入缓冲器404。如果所选模式为右侧908或diag1 910(框1024中为“是”),则编码操作包括将像素数据从8888格式转换为5555格式(框1012)。否则,不针对该像素数据执行编码操作,并且丢弃像素数据(框1026)。
[0120]
最后,如果像素处于迷你块中的位置d(框1006、1014和1020中为“否”),则如果所选模式为顶部902、左侧906或diag2 912(框1028中为“是”),那么编码操作包括将像素数据从8888格式转换为5555格式(框1012)。否则,不针对该像素数据执行编码操作,并且丢弃像素数据(框1026)。
[0121]
应当理解,图10中的决策可以不同方式组织,同时仍实现相同结果(例如,上表1中所示的结果)。
[0122]
图10的方法将每个像素或像素对压缩成p的倍数位,其中p=10。在四色模式中,每个压缩像素对包括30位,在三色模式中,每个压缩像素包括20位,并且在两色模式中,每个压缩像素包括30位。如下文所述,通过确保每个像素或像素对被压缩成p的倍数位,简化了打包操作且因此简化了打包硬件。
[0123]
在上文描述中,存在七种不同的编码型式或模式902-914(六种三色模式和一种四色模式),如图9所示。在各种示例中,可以存在一种附加的两色模式,其中像素a和b共享作为像素a和b的平均值的调色板颜色,并且像素c和d共享作为像素c和d的平均值的调色板颜色。由于仅两种调色板颜色被存储(与其它编码模式中的三种或四种相比),因此可以更高精度存储调色板颜色(例如rgba7878)。该两调色板颜色模式可以例如在像素a和b之间的色差以及像素c和d之间的色差都小于预定义阈值的情况下被使用。
[0124]
在使用该两调色板颜色模式的情况下,可以在图8中的框802和804之间插入针对预定义阈值(其可以与框804中使用的阈值不同)的附加测试。如果测试通过,则选择两色模式,并且计算两种平均像素颜色并将其写入缓冲器(例如,以与框808类似的方式)。替代性地,可以在正在对同一行中的两个相邻像素求平均值时在编码硬件406中执行求平均值;然而,这将需要对编码硬件406以及分析管道402内的硬件求平均值,并且因此在硬件大小方面可能不太高效。应当理解,在其它示例中,可以存在附加的两色模式(例如,其中不同像素对共享调色板颜色,诸如像素a和c以及像素b和d)。
[0125]
在编码操作中(框204b中)以及在使用两色模式的情况下,在上表1中添加了表2下文提供的附加行。类似地,可以修改图10以包括附加的决策块,使得如果已经对于位置a或c
中的像素选择了两色模式,则从缓冲器读取平均值(框1010),并且对于位置b或d中的像素不针对该像素数据执行编码操作并丢弃像素数据(框1026),即对于每一行(无论是偶数还是奇数),对于来自同一迷你块的每个输入像素对仅输出单个编码数据像素(例如,对于偶数行输出像素a,并且对于奇数行输出像素c,其中在每行中,输出像素是该行中两个输入像素的平均值)。
[0126]
表2:
[0127][0128]
在各种示例中,编码模式中的每种模式可以由下表(表3)中详述的3位编码值标识,并且这三个位可以由分析管道402写入缓冲器404,并且由编码硬件406在编码输入像素数据时使用。在各种示例中,这些值可以被包括在由平铺块填充硬件410添加到(例如,附加或前置)编码的像素数据的控制数据块704内(框206c中),并且在其它示例中,这些值可以被嵌入像素数据中(框206a中)。
[0129]
表3:
[0130]
编码模式编码值编码模式编码值四色101两色100顶部000底部001左侧010右侧011diag1110diag2111
[0131]
如图7中所示,在各种示例中,子块706-712的控制数据730可以包括子块中的四个迷你块中的每个迷你块的连接的编码值714-720。例如,如果子块0的控制数据包括连接的编码值:111011000010,则已使用左侧编码模式编码迷你块p,已使用顶部编码模式编码迷你块q,已使用右侧编码模式编码迷你块r,并且已使用diag2编码模式编码迷你块s。子块的控制数据内可以存在一个或多个附加位722(例如,2个附加位)。下文描述子块706-712的控制数据740的另一个示例。
[0132]
上文结合8888格式数据描述了图8和图10的方法。该方法还可以通过以下方式用于rgba1010102格式或argb2101010格式数据:首先应用预处理步骤,该预处理步骤将源数据分别转换为888z或z888格式数据加标志位,其中z是不大于8的整数,然后调整框808、1004和1012。在框808中,在求平均值之前,如果设置标志,则8位值被转换为至多9位值,然后取代以5555格式计算新像素颜色,以rgba6652或argb2665格式计算新像素数据。在框1004中,取代将像素数据转换为rgba4434或argb4443格式,将像素数据转换为rgba4442或argb2444格式。在框1012中,取代将像素数据转换为5555格式,将像素数据转换为rgba6652或argb2665格式。
[0133]
一种示例性预处理方法在gb2575436中有描述,如图11所示。图11的方法将像素数据从rgba1010102格式转换成rgba8883或从argb2101010格式转换成argb3888格式(即z=3),并设置标志的值。如图11所示,检查每个rgb通道的msb(框1102),并且如果这三个msb中的一个或多个都等于一(在框1102中为“是”),则设置标志(框1104),否则不设置标志。该标
志可以被称为高动态范围(hdr)标志,因为如果至少一个msb等于一,那么像素数据可能是hdr数据。hdr图像可以表示比非hdr图像更大的亮度水平范围,并且hdr图像通常通过合并多个低或标准动态范围(ldr或sdr)照片或通过使用特殊图像传感器来创建。混合对数γ是hdr标准,它定义了一个非线性传递函数,其中信号值的下半部分(这是该范围的sdr部分)使用x2曲线,信号值的上半部分(这是该范围的hdr部分)使用对数曲线,并且白信号标准电平设置为0.5信号值。在r/g/b数据的10位中,最高有效位指出值是在范围的下半部分(sdr部分)还是在范围的上半部分(hdr部分)。
[0134]
除了设置标志与否之外,取决于rgb通道的一个或多个msb是否为一,像素数据以不同的方式从10位减少到8位。如果三个msb中没有一个等于一(在框1102中为“否”),则通过移除msb(已知为零)和lsb两者来截断rgb通道的每个10位值(框1110)。如果三个msb中的任何一个都等于一(在框1102中为“是”),则存在两种不同的方式可以将10位值减少到8位(在框1106中)。在第一示例中,可以从每个10位值中移除两个lsb,并且在第二示例中,可以使用如图12所示的方法。
[0135]
图12是将输入a位数转换为b位数的示例性方法,其中a和b是整数且a》b。如图12中所示,该方法包括接收输入a位数a,并且将该数从a位截断至b位(框1202)。然后基于输入a位数a来确定调整值(框1204),并且这可以使用多个and和or门来实现。这些and和or逻辑门(或替代性的功能上等效的替代逻辑布置)将输入a位数的位的多个预定子集与固定功能电路中的预定值进行比较,并且基于比较的结果确定调整值,然后将该调整值添加到来自块1202的截断值(框1206)。调整值的值为零、一或负一。
[0136]
在使用图12的方法预处理rgba1010102或argb2101010格式数据的情况下,a=10且b=8,并且以下示例性vhdl示出了如何计算调整值(框1204中):
[0137]
[0138][0139]
估计需要大约25个and/or门来确定a=10和b=8的调整值的值(框1204中)。
[0140]
不管像素的rgb通道的三个msb的值如何,以相同的方式修改2位α通道值。如图11所示,hdr标志被附加到现有的2位值(框1108),使得输出α通道值为3位。
[0141]
图11的方法可以按每个像素地实现,但是在该方法的变型中,引起设置hdr块的决策(框1102中)可以替代性地被执行得较不频繁,例如,按每个子块地或按每个迷你块地。
[0142]
在各种示例中,为了将每个像素或像素对压缩成p的倍数位,其中对于rgba1010102格式或argb2101010格式数据p=10,编码和/或打包操作可以包括添加一个或多个填充位。在四色模式中,每个压缩像素对包括30位,并且因此不需要填充位。在三色模式中,每个压缩像素包括20位,并且再次不需要填充位;然而,在两色模式中,每个压缩像素包括27位,因此可以添加三个填充位(例如,000),使得每个压缩像素包括30位。如下文所述,通过确保每个像素或像素对被压缩成p的倍数位,简化了打包操作且因此简化了打包硬件。还简化了拆包操作(和硬件)。
[0143]
在所有上述示例中,像素数据包括四个通道:红色、绿色、蓝色和α(尽管它们可以处于不同的顺序),并且这些压缩方法可以集体地被描述为可变α模式。这并不意味着α必须在像素之间变化,但其意味着α对于每个像素被单独指定并且因此可以变化。然而,在其它示例中,可以取代地使用多个恒定α压缩模式中的一种模式,并且对于每种上述可变α模式可以存在对应的恒定α模式。在恒定α模式中,使用上述方法压缩的像素数据仅包括三个通道:红色、绿色和蓝色,并且分别处理α通道值。
[0144]
在可变和恒定α模式均可用于选择的各种示例中(框204中),可以包括附加阶段,如图13中所示。如图13中所示,在为子块或迷你块选择编码模式之前(框204a中),按每个子块地确定子块是使用可变α模式还是使用恒定α模式压缩子块(框1302)。在使用恒定α模式
和可变α模式两者的情况下,控制块704可以包括数据字段722(例如,在控制块704内的每个子块706-712的数据开始时,如图7所示),其指示可变或恒定α模式是否正用于每个子块,并且在各种示例中,这可以是每个子块2位字段。
[0145]
在图14和图15中示出且在下文描述了确定使用恒定α还是可变α的两个示例性方法(框1302中)。在第一示例性方法中,如图14中所示,分析子块内每个像素的α值,并计算两个参数:minalpha和maxalpha,它们是子块中所有像素的α的最小值和最大值(框1402)。这些可以以任何方式来确定,包括例如使用循环(如下面的伪代码示例,或其功能等同物中)或使用测试树,第一步确定像素对的最大和最小α值,然后,第二步确定第一步的输出对的最大和最小α值等。然后,这两个参数(minalpha和maxalpha)用于随后的决策过程(框1404),并且在确定应选择恒定α模式的情况下,确定应当用于子块的α的值(框1406-1408)。
[0146]
关于使用恒定的还是可变的α的决策包括针对阈值alphadifftol评估子块上的α值的范围(框1404)。该测试确定范围是否大于通过使用(最佳情况)可变α模式会引入的误差(例如,由于将应用于像素数据以实现相同压缩比的附加压缩的结果),并且这些误差的大小被表示为alphadifftol并且可以是预定的。alphadifftol的值可以通过在训练过程中比较由可变α模式中的不同方法(即带有4位α的4色编码或带有5位α并且带有共享相同颜色的两个像素的3色编码)引起的质量损失来确定(因此使用上面的表述“最佳情况”)。替代性地,可以通过针对大的测试图像集来评估不同的候选值来确定alphadifftol的值(也是在训练过程中),以使用视觉比较或图像差异度量来找到提供最佳结果的候选值。alphadifftol的值可以是固定的或可以是可编程的。
[0147]
响应于确定该范围大于通过使用(最佳情况)可变α模式会引入的误差(框1404中为“是”),对该子块应用可变α压缩模式。然而,响应于确定该范围不大于通过使用(最佳情况)可变α模式会引入的误差(框1404中为“是”),对该子块应用恒定α压缩模式。在后一种情况下,可以使用两个另外的决策操作(框1406、1408)来确定用于整个子框的α的值。如果maxalpha的值是α的最大可能值(例如,0xff,框1406中为“是”),则将在恒定α模式中使用的α值(constalphaval)设置为该最大可能值(框1410)。这确保了如果存在任何完全不透明的像素,则在压缩数据并随后解压缩之后它们保持完全不透明。如果minalpha的值为零(例如,0x00,框1408中为“是”),则将恒定α模式中使用的α值(constalphaval)设置为零(框1412)。这确保了如果存在任何完全透明的像素,则在压缩数据并随后解压缩之后它们保持完全透明。如果这些条件都不成立(在框1406和1408中为“否”),则对子块中的像素计算α的平均值(框1414),并且在恒定α模式中使用该平均值。
[0148]
例如,以下伪代码(或其功能等同物)可用于实现图14中所示的分析,在此代码中,p.alp是正在考虑的像素p的α值:
[0149][0150][0151]
应当理解,虽然决策过程在图14中示出为以特定顺序应用,但在其它示例中,可以不同顺序应用相同的测试(例如,假设alphadifftol《254,框1406和1408可以互换)。此外,应当理解,框1404中的测试可以替代性地是maxalpha》(minalpha alphadifftol)。
[0152]
图15中示出了分析阶段(框1302)的替代性示例实现方式。在该示例中,参数constalphaval最初被设置为子块内的预定义位置处的像素的α值(框1502)。例如,可以将constalphaval设置为子块左上角的像素的α值(即子块中的第一像素)。然后,将子块中的其他像素的所有α值与该constalphaval进行比较(框1504中)。在所有α值都与constalphaval非常相似的情况下(例如在
±
5的范围内,框1504中为“是”),则使用恒定α模式,但是在它们的变化大于此的情况下(框1504中为“否”),则使用可变α模式。然后,对于恒定α模式,以与图14的方法类似的方式计算参数constalphaval。在图15中,这包括将其设置为零(框1508中)或最大值(框1512中),其中所有像素几乎完全透明(constalphaval《5,框1506中为“是”)或几乎完全不透明(constalphaval》250,框1510中为“是”)。应当理解,图15
中用作分析的一部分的特定值(例如,在框1504、1506和1510中)仅作为示例提供,而在其他示例中,这些值可能略有不同。
[0153]
与图14的方法相比,图15的方法不需要确定minalpha和maxalpha,这减少了执行分析所需的计算工作量。然而,图15的方法可能会产生一些可见伪像(例如混叠),特别是当对象在屏幕上缓慢移动,并且由于使用预定义位置作为α值的中心而不太可能检测到“恒定α”平铺块时。
[0154]
无论如何计算恒定α值(由分析管道402),该值接着被写入缓冲器404,使得其随后可以被包括在由平铺块填充硬件410添加(例如,附加或前置)的控制数据块704内(框206c中)。
[0155]
在确定使用恒定还是可变的α(框1302)之后,压缩子框数据的方法继续进行,如图13中所示。对于每个子块或迷你块,继续对像素数据进行分析以选择编码型式(框204a),并且这可以如上文参考图8所述的来实现,其中唯一的差别在于,计算的色差和平均像素数据(框802和808中)不包括对α通道的任何考虑,并且以较高分辨率确定平均像素数据,例如rgb676格式而不是rgba5555。在还使用两色模式的情况下,以较高分辨率确定平均像素数据,并且将该平均像素数据与可变α等价物进行比较,例如rgb888格式而不是rgba8787。
[0156]
在选择预定义编码模式中的一种模式(框204a中,例如,如图8中所示)之后,编码操作(框204b中)将取决于所选模式、输入数据格式,并且在各种示例中,还取决于其他因素,诸如所需的压缩比。与图10中所示的rgba8888或argb8888格式数据和可变α的示例相比,在使用恒定α模式取代可变α模式的情况下仅存在较小变化,并且下文针对rgb888数据对其进行描述,并且还在下表4中列出(针对每个编码模式和每个输入像素列出,编码像素数据包括这些并且还包括图10中未示出的两种颜色模式)。
[0157]
如下文表4所示,在选择四色模式的情况下,在框1004的变型中,将像素数据从rgb888转换为rgb554格式,并且在选择三色模式并且转换像素数据的情况下,在框1012的变型中,将像素数据从rgb888转换为rgb676格式。
[0158]
表4:
[0159][0160]
在使用恒定α模式的情况下,将数据打包成数据结构的方式(框206中)可以与使用可变α模式的方式不同,并且添加的(例如附加的或前置的)控制数据704的性质(框206c中)也可以不同。如图7中所示,在各种示例中,用于子块706-712的控制数据740可以包括字段722,其标识用于子块724的α模式(如上所述)、恒定α值constalphaval、以及指示对于子块中的每个迷你块是否已选择两色模式或四色模式的字段集合726(例如,四个1位字段)。这继而提供每行迷你块的位数的指示。在各种示例中,如果已经使用两色模式或四色模式,则该字段可以包括一,而如果已经使用三色模式,则包括零。在使用如上文提供的和表3中示出的编码值的示例中,该位值可以如下确定:
[0161]
ev[2]and not ev[1]
[0162]
其中编码值的三位表示为ev[2]、ev[1]和ev[0],其中ev[2]为msb且ev[0]为lsb。
[0163]
控制数据740的示例可以用于rgb888和rgb8888格式数据,其中存在恒定的α。相比之下,对于具有可变α的rgb888和rgb8888格式数据,以及对于rgba1010102和argb2101010格式数据,无论α是恒定的还是可变的,都可以使用控制数据730的示例(先前描述)。
[0164]
如上文所述,为了进一步提高压缩/解压缩单元112的效率,像素或像素对(即,来自相同行和相同子块/迷你块的一对相邻像素)的压缩像素数据可以被布置为总是为p的倍数位(其中p是整数,例如p=10)。在使用恒定α模式的情况下,图10的方法不会将每个像素或像素对压缩成p的倍数位。在四色模式中,每个压缩像素包括14位,在三色模式中,每个压缩像素包括19位,并且在两色模式中,每个压缩像素包括24位。为了提高效率,一个或多个
控制位以及在一些情况下的填充位可以被嵌入像素数据内(框206a中),使得像素或像素对的压缩数据是p的倍数位。
[0165]
在示例中,在p=10的情况下,将一个控制/填充位添加到每个压缩像素中,使得在四色模式中,一对压缩像素总计为30位,并且在三色模式中,每个压缩像素包括20位。通过向每个像素添加一个控制/填充位,两色模式中每个像素的总位数从24增加到25,因此添加另外五位(例如,一个控制位和四个填充位或五个填充位),使得每个压缩像素包括30位。
[0166]
除了提高效率之外,通过确保每个像素或像素对是p的倍数位,嵌入的控制位也有助于解压缩操作。添加的控制位可以是编码值、ev、位,其中编码值的两个位被嵌入每偶数行(第0行、第2行、...)像素数据中,并且编码值的其余位被嵌入后续奇数行(第1行、第3行、...)中的像素数据中,如下表5所示。
[0167]
表5:
[0168][0169]
通过嵌入这些编码值位,它们可以由解压缩硬件502在解压缩数据时结合控制数据中的一位字段进行使用,以区分编码模式(框604中),如下表6所示。
[0170]
表6:
[0171]
控制数据中的位被嵌入偶数行中的控制位编码模式101四色100两色000顶部001底部010左侧或diag1011右侧或diag2
[0172]
而在两个场景中,不可能根据与被嵌入偶数行中的控制位相结合的控制数据中的位来区分两种不同的三色编码模式,这不会影响解压缩操作,因为对于左侧和diag1模式两者(嵌入的位=10),以相同方式解压缩偶数行(例如,压缩像素a对应于用于解压缩像素a和奇数行中的一个像素两者的平均值,并且压缩像素b对应于解压缩像素b),并且类似地,对于右侧和diag2模式两者(嵌入的位=11),以相同方式解压缩偶数行(例如,压缩像素a对应于解压缩像素a,并且压缩像素b对应于用于解压缩像素b和奇数行中的一个像素的平均值)。当解压缩奇数行中的像素时,解压缩操作使用被嵌入奇数行中的控制位(ev[2])来区分左侧和diag1模式以及右侧和diag2模式。
[0173]
下表(表7)示出了可以针对各种打包模式以及针对偶数行和奇数行嵌入控制位的位置的示例。如下表所示,两色模式和四色模式的嵌入的控制位的位置相同。这是为了辅助
解压缩操作,因为控制块704中的位仅标识已经使用两色模式还是四色模式,并且第一嵌入控制位ev[0]标识已经使用两种模式中的哪种模式(即,如果ev[0]为一,则使用四色模式来压缩像素数据,并且如果ev[0]为零,则使用两色模式)。
[0174]
表7:
[0175][0176]
表7还说明了标识何时使用两色模式/四色模式的控制数据块704中所包括的位还标识与一行像素相对应的压缩位数的方式(框602中)。在该示例中,对于两色模式/四色模式,每个迷你块行包括30位,并且对于三色模式,偶数行包括50位且奇数行包括20位。
[0177]
虽然上表7示出了迷你块的压缩像素数据如何被打包成像素数据块(框206中),但如上文详述的,压缩像素数据基本上以光栅扫描顺序而不是迷你块顺序被打包。对于8
×
8平铺块302,使用符号[sb,mb,r]如下打包像素数据,其中sb标识子块,其中sb=[0,1,2,3],mb标识迷你块,其中mb=[p,q,r,s],并且r标识行,其中r=[e,o],e=偶数,o=奇数:
[0178]
[0,p,e],[0,q,e],[1,p,e],[1,q,e],
[0179]
[0,p,o],[0,q,o],[1,p,o],[1,q,o],
[0180]
[0,r,e],[0,s,e],[1,r,e],[1,s,e],
[0181]
[0,r,o],[0,s,o],[1,r,o],[1,s,o],
[0182]
[2,p,e],[2,q,e],[3,p,e],[3,q,e],
[0183]
[2,p,o],[2,q,o],[3,p,o],[3,q,o],
[0184]
[2,r,e],[2,s,e],[3,r,e],[3,s,e],
[0185]
[2,r,o],[2,s,o],[3,r,o],[3,s,o].
[0186]
类似地,对于16
×
8平铺块304,像素数据打包如下:
[0187]
[0,p,e],[0,q,e],[1,p,e],[1,q,e],[2,p,e],[2,q,e],[3,p,e],[3,q,e],
[0188]
[0,p,o],[0,q,o],[1,p,o],[1,q,o],[2,p,o],[2,q,o],[3,p,o],[3,q,o],
[0189]
[0,r,e],[0,s,e],[1,r,e],[1,s,e],[2,r,e],[2,s,e],[3,r,e],[3,s,e],
[0190]
[0,r,o],[0,s,o],[1,r,o],[1,s,o],[2,r,o],[2,s,o],[3,r,o],[3,s,o].
[0191]
在输入数据为rgba1010102格式或argb2101010且使用恒定α模式的情况下,可以使用与rgba8888或argb8888格式数据相同的方法,但在实施图8和图10的方法之前,可以使用预处理步骤(如上文所述),该步骤将源数据分别转换为888格式数据加标志位。附加地,平均函数有变化:如上所述,在求平均值之前,如果设置标志(以根据hdr值重新对齐值),则8位值被转换为至多9位值。对于rgba8888或argb8888格式数据,无需对上述压缩方法进行其他更改。
[0192]
在各种示例中,为了将每个像素或像素对压缩成p的倍数位,其中对于rgba1010102格式或argb2101010格式数据p=10,并且在使用恒定α模式的情况下,编码和/或打包操作可以包括添加一个或多个填充位。在四色模式中,每个压缩像素对包括30位,并且不需要填充位。在三色模式中,每个压缩像素包括20位,并且再次不需要填充位;然而,在两色模式中,每个压缩像素包括25位,并且因此添加五个填充位(例如,00000),使得每个压缩像素包括30位。
[0193]
在所有上述示例中,p=10。在其它示例中,可以通过改变所使用的位深度(例如,图10中)和/或添加不同数目的填充位来使用p的不同值。类似地,可以通过修改所使用的位深度将上述方法应用于rgba/rgb/argb数据的其它格式。
[0194]
上述示例全部涉及rgba或argb数据。在输入数据是rgb数据(即不存在α通道)的情况下,则可以使用上述恒定α模式(在框1302中省略决策点),而不计算或存储恒定α值。
[0195]
在以上描述中,描述了各种压缩方法,并且为了解压缩数据,使用了上述方法的逆(例如,在框606中,在框604中标识了相关编码模式)。返回参考示出图10的实现方式及其变型的表1、2和4,对于四色模式914,解压缩包括将四种颜色中的每种颜色的减小的位深度数据转换回到所需格式,并且可以使用任何合适的方法。对于两色模式,接收一个平均编码像素颜色,并且该像素颜色用于两个相邻像素,然后可以再次被转换数据格式。对于三色模式,对于每对像素,在偶数行中接收到两个编码像素值,并且在奇数行中接收到一个编码像素值,并且取决于特定编码模式,这些像素颜色以不同方式被指派给解压缩像素,并且再次可以被转换数据格式。
[0196]
下表8示出了哪些解压缩像素值用于迷你块中的解压缩输出像素a、b、c和d中的每个像素。与先前表格一样,虽然这是按每个迷你块示出的,但像素以光栅扫描顺序被解压缩和输出,使得在偶数行中,像素a和b被解压缩和输出,并且在奇数行中,像素c和d被解压缩和输出。如上所述,偶数行总是包括每个迷你块的两个压缩像素值,而奇数行可以包括每个迷你块的一个或两个压缩像素值。这意味着,当执行解压缩时,偶数行中的像素数据始终包括输出该行中的两个解压缩输出像素所需的所有像素数据,并且还可以包括用于解压缩同一迷你像素的后续行中的像素对的一些推进数据。该推进数据可被存储在解码硬件506内。不存在无法以光栅扫描顺序发生解压缩的情况,因为解压缩所需的数据稍后被存储在数据流中。
[0197]
表8:
[0198][0199]
图16示出了计算机系统,其中可以实现本文所述的数据压缩和解压缩方法和装置。计算机系统包括cpu 1602、gpu 1604、存储器1606和其他设备1614,诸如显示器1616、扬声器1618以及相机1620。在gpu 1604上实现数据压缩和/或解压缩块1621(其可以实现如本文所述的任何方法)。在其他示例中,数据压缩和/或解压缩块1621可以在cpu 1602上实现。计算机系统的部件可经由通信总线1622彼此通信。
[0200]
图4和图5的数据压缩硬件被示出为包括多个功能块。这仅是示意性的,并不旨在限定此类实体的不同逻辑元件之间的严格划分。每个功能块可以任何合适的方式提供。应当理解,本文所述的由数据压缩硬件形成的中间值不需要由数据压缩硬件在任何时间点物理地生成,并且可以仅表示方便地描述数据压缩硬件在其输入和输出之间执行的处理的逻辑值。
[0201]
本文所述的数据压缩和解压缩硬件(包括被布置为实现上述任何方法的任何硬件)可以在集成电路上的硬件中实现。本文所述的数据压缩和解压缩硬件可以被配置为执行如本文所述的任何方法。一般来讲,上文所述的功能、方法、技术或部件中的任一者可在软件、固件、硬件(例如,固定逻辑电路系统)或其任何组合中实现。本文可以使用术语“模块”、“功能”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或其任何组合。在软件实施方案的情况下,模块、功能、部件、元件、单元、块或逻辑表示程序代码,所述程序码在处理器上执行时执行指定任务。本文中所描述的算法和方法可以由执行码的一个或多个处理器执行,所述码使处理器执行算法/方法。计算机可读存储介质的示例包含随机存取存储器(ram)、只读存储器(rom)、光盘、闪存存储器、硬盘存储器以及可以使用磁性、光学和其它技术来存储指令或其它数据并且可以由机器存取的其它存储器装置。
[0202]
如本文中所使用的术语计算机程序代码和计算机可读指令是指供处理器执行的任何种类的可执行代码,包含以机器语言、解释语言或脚本语言表达的代码。可执行代码包含二进制代码、机器代码、字节代码、定义集成电路的代码(例如硬件描述语言或网表),以及用例如c、java或opencl等编程语言码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其它软件环境中被适当地执行、处理、解释、编译、运行时,这些软件、固件、脚本、模块或库使支持可执行代码的计算机系统的处理器执行由
所述代码指定的任务。
[0203]
处理器、计算机或计算机系统可以是任何种类的装置、机器或专用电路,或其集合或一部分,它具有处理能力使得可以执行指令。处理器可以是任何种类的通用或专用处理器,例如cpu、gpu、片上系统、状态机、媒体处理器、专用集成电路(asic)、可编程逻辑阵列、现场可编程门阵列(fpga)、物理处理单元(ppu)、无线电处理单元(rpu)、数字信号处理器(dsp)、通用处理器(例如通用gpu)、微处理器、旨在加速cpu之外的任务的任何处理单元等。计算机或计算机系统可以包括一个或多个处理器。本领域技术人员将认识到,这种处理能力被结合到许多不同的设备中,因此术语“计算机”包括机顶盒、媒体播放器、数字收音机、pc、服务器、移动电话、个人数字助理和许多其它设备。
[0204]
本发明还意图涵盖限定如本文中所描述的硬件的配置的软件,例如hdl(硬件描述语言)软件,用于设计集成电路或用于配置可编程芯片以执行期望功能。也就是说,可以提供一种计算机可读存储介质,其上编码有集成电路定义数据集形式的计算机可读程序代码,当在集成电路制造系统中被处理(即运行)时,这种集成电路定义数据集将该系统配置为制造被配置为执行如本文所述的任何方法的数据压缩和/或解压缩硬件,或者制造包括如本文所述的任何装置的数据压缩和/或解压缩硬件。集成电路定义数据集可以是例如集成电路描述。
[0205]
因此,可以提供一种在集成电路制造系统中制造如本文所述的数据压缩和/或解压缩硬件的方法。此外,还可以提供集成电路定义数据集,当在集成电路制造系统中被处理时,该集成电路定义数据集使得制造数据压缩和/或解压缩硬件的方法被执行。
[0206]
集成电路定义数据集可呈计算机代码形式,例如作为网表、用于配置可编程芯片的代码,作为在任何层级定义集成电路的硬件描述语言,包含作为寄存器传输级(rtl)代码、作为高级电路表示诸如verilog或vhdl,以及作为低级电路表示诸如oasis(rtm)和gdsii。在逻辑上定义集成电路的更高级表示法(诸如rtl)可以在配置为在软件环境的上下文中生成集成电路的制造定义的计算机系统处处理,所述软件环境包括电路元件的定义和用于组合那些元件以便生成由表示定义的集成电路的制造定义的规则。如通常软件在计算机系统处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机系统配置为生成集成电路的制造定义,以执行定义集成电路以便生成集成电路的制造定义的码。
[0207]
现在将参考图17描述在集成电路制造系统处处理集成电路定义数据集以便将该系统配置为制造数据压缩和/或解压缩硬件的示例。
[0208]
图17示出了集成电路(ic)制造系统1702的示例,其被配置为制造如本文任一示例中所描述的数据压缩和/或解压缩硬件。特别地,ic制造系统1702包括布局处理系统1704和集成电路生成系统1706。ic制造系统1702被配置为接收ic定义数据集(例如,定义如本文的任何示例中描述的数据压缩和/或解压缩硬件),处理ic定义数据集,并根据ic定义数据集来生成ic(例如,其体现如本文任何示例中所述的数据压缩和/或解压缩硬件)。通过对ic定义数据集的处理,将ic制造系统1702配置为制造体现如本文任何示例中描述的数据压缩和/或解压缩硬件的集成电路。
[0209]
布局处理系统1704被配置为接收和处理ic定义数据集以确定电路布局。根据ic定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成rtl代码以确
定待生成的电路的门级表示,例如就逻辑部件(例如,nand、nor、and、or、mux和flip-flop部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理系统1704已经确定电路布局时,其可将电路布局定义输出到ic生成系统1706。电路布局定义可以是例如电路布局描述。
[0210]
如本领域中已知的,ic生成系统1706根据电路布局定义来生成ic。举例来说,ic生成系统1706可实现生成ic的半导体装置制造工艺,其可涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩模的形式,其可以在光刻工艺中用于根据电路定义来生成ic。替代地,提供给ic生成系统1706的电路布局定义可呈计算机可读代码的形式,ic生成系统1706可使用所述计算机可读代码来形成用于生成ic的合适的掩码。
[0211]
由ic制造系统1702执行的不同过程可全部在一个位置例如由一方来实施。替代地,ic制造系统1702可以是分布式系统,使得一些过程可在不同位置执行,并且可由不同方来执行。例如,以下阶段中的一些可以在不同位置以及/或者由不同方来执行:(i)合成表示ic定义数据集的rtl码,以形成待生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩模;以及(iv)使用掩模来制造集成电路。
[0212]
在其他示例中,通过在集成电路制造系统处对集成电路定义数据集的处理,可以将系统配置为制造数据压缩和/或解压缩硬件,而不对ic定义数据集进行处理以便确定电路布局。例如,集成电路定义数据集可以定义可重新配置的处理器诸如fpga的配置,并且对该数据集的处理可以将ic制造系统配置为(例如,通过将配置数据加载到fpga)生成具有该定义的配置的可重新配置的处理器。
[0213]
在一些实施方案中,当在集成电路制造系统中处理时,集成电路制造定义数据集可以使集成电路制造系统生成如本文中描述的装置。例如,通过集成电路制造定义数据集,以上文关于图17描述的方式对集成电路制造系统的配置,可制造出如本文中所描述的装置。
[0214]
在一些示例中,集成电路定义数据集可以包括在数据集处定义的硬件上运行的软件,或者与在数据集处定义的硬件组合运行的软件。在图17中示出的示例中,ic生成系统可由集成电路定义数据集进一步配置为在制造集成电路时根据在集成电路定义数据集处定义的程序代码将固件加载到该集成电路上,或者以其他方式向集成电路提供与集成电路一起使用的程序代码。
[0215]
本领域技术人员将认识到用来存储程序指令的存储设备可分布在网络上。例如,远程计算机可以将所描述的过程的示例存储为软件。本地或终端计算机可以访问远程计算机,并下载软件的一部分或全部以运行程序。替代地,本地计算机可以根据需要下载软件的片段,或者在本地终端处执行一些软件指令,而在远程计算机(或计算机网络)处执行另一些软件指令。本领域技术人员还将认识到通过利用本领域技术人员已知的常规技术,软件指令的全部或一部分可以由诸如dsp、可编程逻辑阵列等的专用电路执行。
[0216]
申请人据此独立地公开了本文中所描述的每个单独的特征以及两个或更多个此类特征的任意组合,到达的程度使得此类特征或组合能够根据本领域的技术人员的普通常识基于本说明书整体来实行,而不管此类特征或特征的组合是否解决本文中所公开的任何
问题。鉴于前文描述,本领域的技术人员将清楚,可以在本发明的范围内进行各种修改。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献