用于变长编/解码器的可编程数据处理器的制作方法

文档序号:7538085阅读:352来源:国知局
专利名称:用于变长编/解码器的可编程数据处理器的制作方法
技术领域
本发明涉及包括可编程处理器的数据处理电路。本发明还涉及使用这种可编程处理器来执行变长解码的方法以及被编程为执行变长解码的可编程处理器。
背景技术
在德州仪器(Texas Instruments)出版的“Application reportSPRA805”(2002年6月)中的标题为“Variable Length Decoding on theTMS320C6200 DSP platform”的文章中公开了在可编程序信号处理器上对变长解码的实现。
变长编码典型地被用于数据的压缩编码,例如流行的MPEG格式的视频数据。一种已知的变长编码形式是Huffimann编码。在变长编码中,使用具有相互不同的位(bit)数的代码字来编码不同的被编码的数值,因此使用最短的代码字来编码最频繁出现的数值。这减少了在编码数据的存储和/或传输期间的存储需求和/或传输带宽需求。
当一串数值被编码时,一连串这种代码字被连接以形成位串。每个变长代码字由一连串位值(bit value)构成,该变长代码字不在任何其它的比该代码字长的代码字的开始出现。因此,可以根据位串中的从代码字的开始起的位来确定代码字的长度。原则上,可以通过查找机制来实现解码,利用可以出现在代码字中的最大位数,并且使用这些位作为表中的地址以查找代码字的代码字长度和解码字(如果实际的代码字小于最大长度,则表中的、在以所述代码字的位开始的地址处的所有条目都包含相同的代码字长度和被解码的代码字)。
对于实际的代码,可以使用较小的查找表,如“Application reportSPRA805”中所述。为此,从代码字的开始起的前导“0”或“1”的数量的计数被用于形成所述查找表地址。这是基于以下事实,即,实际的代码对于同样长度的代码字一般使用相同的头部(头部由逻辑“1”或“0”组成)。在这种情况下,查找操作使用由该计数结合在代码字中的偏离头部的第一比特之后的位置处的多个位值构成的查找地址。因为可以用比前导“1或“0”的数量更少的位来表示所述计数,因此这减小了查找地址空间。
存在变长解码的多种实现。当然,可以使用用于仅执行解码功能的电路来实现解码处理。然而典型地,使用适当编程的处理器,其还执行被编程的指令以执行除变长解码之外的其它功能(例如,MPEG解码的其它部分)。使用被编程的处理器具有以下优点,即,不需要或仅需很少的额外的电路来执行除这些其它功能之外的变长解码。
“Application report SPRA805”描述了使用“NORM”指令以加速变长解码。在浮点运算中已知NORM指令,其中,其用于确定在数字开始的冗余符号位(连续的1或0)的数量的计数。在变长解码中,该指令可被用于形成查找地址,以检索代码字长度和解码字。
变长解码程序使TMS320C62000 DSP每次将包含连续代码字的位串的下一部分移动到操作数寄存器中。选择这些部分以使得每次它们以下一个代码字的位开始。程序使用NORM指令以获得从操作数的开始起的连续的1或0的计数,并且使用该计数,程序形成查找表中的地址。通过使用这个地址的查找,程序确定代码字的长度,并且根据所述代码字的长度,确定位串中的下一个代码字的开始。然后,根据所述位串形成从下一个代码字开始的新的操作数,之后重复所述处理。
在类似TMS320C62000的DSP(数字信号处理器)中,可以并行地执行来自程序的指令以加速执行。然而,在变长编码的情况下,仅可有限程度地使用其,这是因为必须每次在可以处理下一个代码字之前确定代码字的长度。这使得变长解码效率低。已经发现尚有改进余地。

发明内容
本发明的一个目的是提供一种处理器,其支持有效率的变长解码的编程。
本发明的一个目的是提供一种处理器,其被编程以高效地执行变长解码。
本发明的一个目的是提供一种方法,其高效地执行变长解码。
根据本发明的处理器在权利要求1中说明。根据本发明,所述处理器被构造为在它的指令集中包括SNORM指令,该SNORM指令具有位串操作数和位置操作数,所述位串操作数包含位串,所述位置操作数指示所述位串中的位置。所述处理器被构造为返回长度代码,其表示从所述位串中的指示位置开始直到所述位串偏离预定模式的第一后续位置为止的多个位的计数,所述预定模式例如全“1”或全“0”的模式。
众所周知,处理器的指令集告知技术人员哪些类型的功能电路必须包含在处理器中。指令集是处理器可以执行的,来自程序的不同种类指令的集合。通常作为指令集的一部分的已知的通用指令类型包括象ADD、SHIFT、LOAD、STORE等等这样的指令。根据本发明,提供在其指令集中包括SNORM指令的处理器。
当处理器被编程来执行变长解码时,SNORM指令可用于获得代码字的引导部分的长度代码,而无需首先分离指令以利用从下一个代码字开始的位串的一部分形成操作数。或者,位置操作数用来指示现有的位串操作数中的代码字的开始,并且获得该位串操作数的可选内部部分的长度代码。仅仅需要为连续代码字更新位置操作数。位串不必被更新,直到代码字穿过位串操作数中的位串的边界。
优选地,仅仅来自位置操作数的预定数量的最低位确定开始计算位的位置,所述位置操作数的高位被忽略。优选地,所使用的最低位的数量对应于位串操作数的位长。通过这种方式,用于提供位置操作数的寄存器可以包含指向位流中的不同字的高位,所述位流包含连接的变长代码字。
优选地,SNORM指令引用至少两个分开可选的寄存器,其包含位串操作数,所述位串操作数包含位串的连续部分。在这种情况下,处理器优选地用于获得直到第一后续位置的代码字的引导部分的长度代码,在所述第一后续位置,所述位串偏离预定模式,当模式从一个位串操作数持续到另一个时,计算来自多于一个位串操作数的引导部分中的为止。
同样优选地,SNORM指令返回一额外的结果,该额外的结果包含来自所述位串操作数的,从与所述第一位置有关的预定的相对位置开始的位,其中,在所述第一位置,所述位串偏离预定模式(一般从该第一位置开始)。变长解码程序优选地使用该额外的结果,结合长度代码以形成查找表地址。在另一实施例中,处理器用于执行SNORM指令,因此长度代码和额外的结果的预定数量的位被返回作为查找表地址(在这种情况下,处理器不必响应于所述SNORM指令返回用于所述长度代码和所述额外的结果的分离的结果)。这减少了必须为变长解码而执行的指令的数量。然而,使用对于长度代码和额外的结果的SNORM指令的分离的结果输出具有以下优点,其使得处理器相对于可以被解码的不同的变长代码更灵活。


将使用参照下列附图描述的非限定性的例子来说明本发明的这些以及其它的目的和优点。
图1显示了处理器电路;图2显示了功能单元的一部分;图3显示了替代功能单元的一部分;图4显示了另外的功能单元的一部分。
具体实施例方式
图1显示可编程处理器电路的一个例子。该电路包含指令发射单元10、功能单元12a、b以及寄存器堆14。指令发射单元具有用于发射指令代码和寄存器选择代码的输出端120,寄存器堆14具有用于接收寄存器选择代码的输入端,还具有用于将操作数数据从所选择的寄存器输出的输出端122以及用于接收将被写入所选择的寄存器的结果数据的输入端124。功能单元12a、b具有用于接收指令代码和操作数数据的输入端,以及用于输出运算结果的输出端。
在运算指令发射单元10中,其可以包含指令存储器以及程序计数器(未显示),其产生必须连续执行的程序的指令。指令发射单元从指令导出命令,并且将根据该命令的操作码应用到功能单元12a、b,并且将寄存器选择代码应用到寄存器堆14。寄存器选择代码包括从命令导出的操作数寄存器选择代码以及从该命令导出的结果寄存器选择代码。响应于操作数寄存器选择代码,寄存器堆14从由操作数寄存器选择代码选择的寄存器中获取操作数数据,并且将该数据应用到功能单元12a、b。操作码选择必须由功能单元12a、b执行的操作。在操作码的控制下,功能单元12a、b使用操作数数据执行所选择的操作并产生结果数据。寄存器堆14从功能单元接收结果数据,并且将该结果数据存储在由结果寄存器选择代码标识的寄存器中。
虽然显示了可编程处理器电路的具体的例子,应该了解到本发明不局限于该例子。例如,寄存器堆14可以包含多个寄存器堆,操作数数据可以从其加载或者结果数据可以被存储到其中。此外,虽然功能单元12a、b显示为分别具有三个和两个操作数输入端,并且分别具有两个和一个结果输出端,但是很清楚,具有其它数量的操作数输入端和/或结果输出端的功能单元也是可能的。此外,虽然未对定时进行详细说明,很清楚将使用典型的流水线操作,因此,来自指令的操作数寄存器选择代码将被应用于寄存器堆14,同时功能单元12a、b执行由先前的指令选择的操作,并且结果寄存器选择代码仅可以被随后应用。然而,在不偏离本发明的情况下,可以使用其它形式的定时。
此外,可以使用任意数量的功能单元12a、b,例如仅一个功能单元或更多的功能单元。下面,可编程处理器的程序将被描述为一连串的连续指令。但是很清楚,最好使用多个功能单元12a、b,从而使得只要指令之间的数据相关性允许,就可以由不同的功能单元12a、b并行地执行连续指令中的不同的指令。必须包含在处理器中的功能电路由处理器电路的指令集确定。指令集是处理器可以将其作为来自程序的指令而执行的不同种类指令(这里还称作“命令”)的集合。(当在这里使用时,指令(或命令)是机器可执行程序的不可分的“原子单位”,因此,在这种意义上讲,指令(或命令)不能被划分为可以被发射到处理器以用于执行的次级指令(sub-instruction))。程序中的每个指令的指令类型通常由该指令的操作码字段的内容来表示,处理器使用其控制操作。通常作为指令集的一部分的已知的通用指令类型包括象ADD、SHIFT、LOAD、STORE等等这样的指令。在可编程处理器中,来自指令集的指令可以在程序中的任一点彼此替代地使用。根据本发明,提供其指令集包括SNORM指令的处理器,处理器如下所述响应该指令。
根据本发明的一个方面,至少一个功能单元12a被用来支持将被符号化地表示为SNORM R1,R2,R3,R4,R5的指令。
该命令具有三个操作数,分别由寄存器引用R1、R2和R3标识,他们引用存储三个操作数的寄存器。该命令产生两个结果。寄存器引用R4、R5表示对必须存储结果的寄存器的引用。典型地,命令与存储在指令存储器中一样,包含相应的字段,其标识指令(SNORM)、操作数寄存器地址(R1-3)以及结果寄存器地址(R4-5)。
当执行包含SNORM命令的程序时,指令发射单元10取出表示该命令的指令(其可以是多个并行取回的指令中的一个),并且作为响应,将标识SNORM指令的操作码应用到功能单元12a。同样,指令发射单元10将对应于在指令中标识的寄存器R1-5的代码应用到寄存器堆14。
构造功能单元12a的电路,以使得响应于SNORM操作码,功能单元12a产生一长度代码,其表示在头两个操作数的位串的连接中,从由第三个操作数指示的位置开始的,具有彼此相同的位值的连续位的数量的计数。此外,指令功能单元12a产生对所述连接移动多个位位置后得到的版本,其中,移动的位位置的数量等于第三操作数加上所述连续位的数量的计数。
为了说明,在一例子中,操作数可以具有八位的长度,在这种情况下,开头两个操作数(通过R1、R2引用)可以包含例如以下位串
0010 1011和1110 0101应该认识到,在实践中,最好在每个操作数中使用更多数量的位,例如在每个操作数中有十六或三十二位,或六十四位。使用八位操作数仅仅是为了说明。利用例子中的操作数,连接后的位串是0010 1011 1110 0101现在,如果第三个操作数(通过R3引用)具有值6,那么将返回数字5的长度代码(到寄存器R4),它是所述连接中的,从第六位的位置(连接中最左边的位置是“零”位,从左至右增大)开始的逻辑“1”的数量。在所述例子中,从左侧开始计算位的位置,即从最高位开始,然而,显然,位的位置也可以替代地从右边开始计算,即,从最低位的位置开始。移动后的输出(在寄存器R5中)具有值0010 1000这些是所述连接的位串的最后五位的值,再加上替代在右边的三个“0”值。
优选地,第三操作数的最高位在操作执行期间被忽略,以使得位置不会超过一个操作数的长度。这相当于使用当用第三操作数除以第一操作数的长度时所得到的余数(在所述例子中,是第三操作数除以八所得的余数)。
根据对SNORM指令的操作数以及效果的描述,本领域技术人员将能够确定可以用来实现指令集中包含该指令的处理器的电路。将描述这种处理器的一个例子。
图2说明当执行SNORM命令的操作码被用于功能单元12a时启动的功能单元12a的一部分的实施例。所述部分包含第一桶形移位器20、符号长度计算单元22以及第二桶形移位器24。第一桶形移位器20具有耦合到功能单元12a的两个操作数数据输入端的移位数据输入端,用于接收通过两个寄存器引用R1、R2引用的操作数数据。第一桶形移位器20具有耦合到通过第三寄存器引用R3引用的寄存器堆14的第三操作数数据输入端的移位控制输入端。第一桶形移位器20具有耦合到符号长度计算单元22的输入端的输出端。符号长度计算单元22具有耦合到用于功能单元12a的结果的第一输出端的输出端,以及耦合到第二桶形移位器24的移位控制输入端的输出端。第二桶形移位器24具有耦合到第一桶形移位器20的输出端的移位数据输入端,以及耦合到用于功能单元12a的结果的第二输出端的输出端。
应该认识到,仅显示了功能单元12a的一部分。在实践中,功能单元可以包含更多用于响应于其它的操作码而执行其它操作的电路,或者桶形移位器20、24以及/或符号长度计算单元22可以属于还能够执行其它操作的更大的电路。此外,可以提供多路电路,以选择从哪个电路提供各种数据或向哪个电路提供各种数据。此外,可以提供解码电路,其用于启动功能单元的所选择的部分,或者用于根据已接收的命令控制多路电路。为了清楚,仅显示了SNORM指令的执行中所涉及的部分电路。
构造第一桶形移位器20,以产生包含第一和第二操作数数据R1、R2的连接的移位后版本的输出位串。在如上所述的八位操作数的例子中,桶形移位器20的移位数据输入端将接收操作数数据位串0010 1011和1110 0101移位的数量通过第三操作数数据R3选择。在该例子中,移位控制输入端将接收值6,第一桶形移位器20将产生输出串1111 1001 0100 0000在此处,第一桶形移位器将所述连接向左移动了6位,并且在右侧添加了6个“0”。桶形移位器电路本身是已知的。因此不对详细的电路实现进行说明。所使用的特定的实现与本发明无关。
优选地,第三操作数的最高位在操作执行期间被忽略,以使得移位的量不会超过一个操作数的长度。这相当于使用第三操作数除以第一操作数的长度(例如十六、三十二或六十四)所得的余数。
符号长度计算单元22确定在输入位串中,从输入中的第一个位置开始具有彼此相同的位值的连续位的数量的计数,在该例子中,计数为5,这是因为在输入中有五个连续的逻辑“1”。
所使用的符号长度计算单元22的特定实现与本发明无关。在浮点运算电路中可以找到实现的例子,其中,长度计算用来规格化算术运算的结果(即,将以最后的符号位开始的结果的一部分移动到预定位置)。
第二桶形移位器24将第一桶形移位器20的输出位串向左再移动多个位的位置。另外移动的位置的数量由符号长度计算单元22输出的计数来控制。在功能单元12a的输出端,仅该操作的结果的最左边的字被输出到寄存器堆14。在该例子中,结果将是0010 1000在该例子中,字尺寸是八位,但是当然,如果操作数和结果具有更大的字尺寸,例如使用十六位、三十二位或六十四位,则可以输出更大的位数。
当然,功能单元12a的其它实现可以用来实现相同的效果。例如,第二桶形移位器24和符号长度计算单元22的功能可以通过组合电路来执行,并且/或者可以使用在第三操作数的控制下,直接对功能单元12a的操作数数据执行符号长度计算单元22的功能的电路。
SNORM指令可用于提高可以解码连续的变长代码字的速度。以下是可用于执行解码的程序的例子bptr=0;wptr=0;word0=buf[wptr];word1=buf[wptr+1];while(wptr<end){ nrm,sucbits=OP_SNORM(word0,wordl,bptr);index=getIndex(nrm,sucbits);len=lenTable[index];dec=codeTable[index];bptr=bptr+len;wptr=bptr>>5;word0=buf[wptr];word1=buf[wptr+1];}
以伪代码语句来表示该程序,其很大程度上符合已知的C语言语句(在该语言中,[]表示数组的索引,>>表示右移)。应该理解,选择C语言仅仅为了清楚,以描述一连串对应的机器指令。对OP_SNORM的函数调用语句引用之前已经描述的SNORM指令的执行。
在该程序中,“buf”表示存储单元数组,其中存储连续的字(32位的值),它们形成位流,该位流包含来自变长代码的连接的代码字。使用指针变量bptr和wptr。wptr指示来自“buf”的、包含当前代码字的开始的字的位置。变量word0和word1(其值保存在寄存器堆14的相应的寄存器中)分别包含来自“buf”的该字的副本以及来自“buf”的下一个字的副本。bptr的最低位指示变量word0中的当前代码字的第一位的位置。bptr的最高位对应于wptr。
虽然为了清楚,程序使用命名变量保存数据,但是很清楚,这些名字一般代表其中存储对应数据的寄存器。
虽然程序被表示为一连串指令,但是要强调的是,当处理器包含多个功能单元以及可以向该多个单元并行地发射指令的指令发射单元时,可以尽可能地在满足数据相关性的约束的情况下,由不同的功能单元并行地执行该程序的不同的指令。此外,如果与数据相关性保持一致,指令的执行序列可以与在程序中的序列不同。
“while”循环执行变长解码。然而,为了清楚,已经从循环中省略了使用解码字的指令(这种指令将解码字存入数组)。在循环中的第一指令中,执行SNORM指令。这包括确定在word0和word1的连接中,从由bptr指示的位置开始的彼此相等的位值的数量的长度代码。在优选实施例中,当使用32位操作数时,功能单元仅使用bptr的最低5位用于该目的(如果操作数更长则用更多位,操作数更短则用更少位)。当然,如果功能单元不这样做,这些位还可以通过程序中的指令从bptr中通过掩码得出,或者可以使用值不超过31的分离指针。
得到的长度代码被存储在由变量“nrm”表示的寄存器中。此外,word0和word1的连接被移动nrm+(bprt模32)位,结果被存储在由变量“sucbits”表示的寄存器中。
在“while”循环中的第二个指令中,根据长度代码和变量“sucbits”的内容的开始形成索引值。该索引值被用作索引以从长度表“lenTable”中检索代码字的长度并且从代码表“codeTable”中检索解码的代码字。接下来,通过增加所检索到的长度来增加变量bptr。同样,检索对于新的bptr值的word0和word1的值。然后重复循环。
应该强调的是,程序仅仅用于说明SNORM操作的使用。可能存在许多替代版本的具有SNORM指令的程序。
在所描述的优选实施例中,通过功能单元12a执行SNORM指令产生从bptr所指的位的位置开始直到遇到第一个下一个位位置是不同的位值的,具有彼此相同的位值的连续位的数量的计数。即,计数一连串逻辑0或逻辑1中的位的数量。然而,本发明不局限于该实施例。在另一个实施例中,功能单元12a产生仅仅一串逻辑“1”的计数,在又一个实施例中,功能单元12a仅计数一连串逻辑0。在另一个实施例中,功能单元12a计数从由bptr所选择的位置开始,直到发现偏离预定序列的第一个位值时的位的位置的数量。利用功能单元的适当的实现,该预定序列可以是任何预定序列,不仅仅是一连串逻辑“1”或一连串逻辑“0”。如果使用变长编码,那么使用这种序列是有用的,其中,从这种序列偏离用于指示不多于代码字的预定数量的位将接着。因此,本发明不局限于对全“1”或者全“0”的预定序列计算位位置。
优选地,长度代码“nrm”可以返回的最大长度限制于至多为变长代码字的最大长度。如果遇到多于根据预定模式的预定数量的连续位,那么返回预定的最大长度代码。
优选地,长度代码“nrm”通过处理器对所有数字使用的、相同的传统数字表示,来表示长度。但是不是必需的。对于程序实例,任意的代码可以用来区别不同的长度,这是因为代码仅用于形成在表lenTable、codeTable中使用的索引。这些表中的条目可以被重新排列以容纳任何种类的代码。
然而,无论使用什么代码,长度代码“nrm”中的位数N最好比长度代码所表示的最大长度L短很多。通过这种方式,使用长度代码nrm作为用于在表中查找解码字和代码字长度的索引的一部分,会显著地减小所需要的查找表的尺寸。优选地,编码长度代码L,以使得L等于2的N次幂,因此只需要最小尺寸的查找表。例如,为了表示最大十六位的长度,仅仅四位的长度代码就足够了。
应该认识到,本发明不局限于以上所描述的SNORM指令。例如,代替产生长度代码“nrm”的SNORM指令,可以使用直接产生索引值的指令。或者,另外的指令可以包含在指令集中以计算索引值。在一个实施例中,可以通过将结果变量“sucbits”的预定的第一数量的位连接到长度代码nrm之后来形成索引值。在一例子中,sucbits的预定数量是四,索引值的计算对应于(以C语言代码表示)index=(nrm<<4)|(sucbits>>(32-4))当然,可以使用其它的计算索引值的方法。该实例假定使用变长代码,其中,在最初偏离预定位串之后,至多四个来自代码字的额外位就足够区别代码字。如果需要更少或更多额外的位则可以使用不同的索引值,或者来自nrm以及“sucbits”的信息可以被以不同的方式组合。
在一实施例中,一指令包含在指令集中以计算索引值,该指令可以被符号化的描述为INDX R1,R2,R3,R4这里,R1-3引用包含nrm、sucbits以及必须包含在索引值中的来自R2的位数(例如4)的操作数寄存器。索引值被写入寄存器R4。可选地,可以省略第三个操作数(如果例如使用默认数量)。
图3显示一种功能单元的实例,设置其以输出索引值作为SNORM指令的结果。添加组合电路30以根据来自符号长度计算单元22和第二桶形移位器24的输出端的长度代码形成索引结果。应该认识到,组合电路30非常简单它仅仅包括符号长度计算单元22和第二桶形移位器24的输出端到结果输出端的预定位线的连接。
利用该功能单元,仅需要一个到寄存器堆14的结果输出端连接,并且来自指令发射单元10的命令仅需要寻址一个结果寄存器。很清楚,组合电路30可以容易地与功能单元的剩余部分的任何实现结合在一起。然而,缺点是功能单元变得专用于特定类型的变长代码(这是由于用于形成结果的桶形移位器的输出的预定位数)。
在另一个实施例中,使用不同的SNORM指令,其中,仅产生长度代码“nrm”作为结果。在该实施例的实现中,可以省略第二桶形移位器以及它的结果输出。在这种情况下,程序优选地包含一个或多个指令以根据word0、word1、nrm和bptr来计算索引值。在另一个实施例中,设置功能单元以支持用于该目的的另外的专用指令。在第一实施例中,响应于该另外的指令执行的功能包括例如,从第一操作数和第二操作数(word0和word1)的连接中,从由第三操作数指示的位位置开始,选择预定数量的连续位。该功能的结果对应于concatenation(R1,R2)<<R3在该实施例中,通过将bptr和nrm相加来计算第三个操作数。该结果相当于之前描述的“sucbits”结果。
在另一个实施例中,在一专用指令中,除word0和word1之外,nrm和bptr都被用作操作数。在该实施例中,指令的执行包括将nrm与bptr相加以确定移位的量,并且nrm可以用来与移位结果相结合形成索引。这种功能的结果对应于例如(以C代码表示)(nrm<<4)|(concatenation(R1,R2)<<(28-(R3+R4)))这里,数量28等于字长(32)与在索引中使用的连接的位数(4)之间的差。当然,可以使用不同的数量,这依赖于变长代码。
在一实施例中,处理器用来支持仅有两个操作数的SNORM指令,仅仅一个操作数被用于提供包含变长代码字的位串。第二操作数指向位串操作数中的位置。优选地,仅仅使用一部分第二操作数,其指向位串操作数的一半之内。在该实施例中,响应于SNORM指令,处理器返回从位串操作数的上一半中的位置开始的一连串位的长度代码,所述位置由第二操作数指示。
图4显示支持仅有两个操作数的SNORM指令的实施例的功能单元的实施例。在该实施例中,使用单个长度的第一桶形移位器20。第二操作数被施加到该第一桶形移位器20的移位控制输入端,并且优选地,仅该操作数的值的最低位部分(其选择一半操作数之内的位置)被用于控制第一桶形移位器20。
以下是使用这种SNORM指令的程序的例子,其针对变长代码字不长于一半操作数的情况。
bptr=0;wptr=0;top0=buf[wptr];word0=buf[wptr];word1=buf[wptr+1];while(wptr<end){ nrm,sucbits=OP_SNORM(top0,bptr);aux=(word0<<16)|((word1>>16)&0xffff);index=getIndex(nrm,sucbits);len=lenTable[index];dec=codeTable[index];bptr=bptr+len;wptr=bptr>>5;word0=buf[wptr];word1=buf[wptr+1];if(bptr&31>16)top0=aux;else top0=word0;}应该注意,在这种情况下,仅仅单个具有位串的变量top0被用作SNORM指令的操作数。添加了移位运算,以将变量word1的一半移入可以被用作SNORM指令的操作数的变量aux。当变量bptr指向位串操作数的下一半时,使用来自变量aux的值。应该注意,使用预定的半个字的移位距离(在该例子中为十六),因此在已知代码字的长度之前可以执行所需的移位操作(与其它的操作相并行)。仅需推迟位串操作数的选择,直到已知长度之后。
显然,本发明将所选择的指令添加到处理器的指令集以支持变长解码。相应于指令的功能描述为本领域的技术人员说明了必须在处理器中使用的电路的功能。所添加的指令优选地减少了执行变长解码所需的连续指令的数量,并且另一方面,添加所添加的指令优选地需要尽可能少地添加额外的硬件来执行指令。如果变长解码所需执行的连续指令的数量未减少,或者至少所需要的指令周期的数量未减少,或者所需要的寄存器的数量未减少,那么相比于仅具有通用指令类型的处理器并没有优点。另一方面,如果额外的指令将需要这么多额外的硬件,那么实现完全专用的变长解码电路将更便宜,与这种专用的变长解码电路相比没有优点。
虽然已经描述了将本发明应用到变长解码,但是应该认识到,SNORM指令的实施例还可以被用于变长编码,例如确定必须被编码的数字的符号位的数量。在这种情况下,符号位的数量可用于简化代码字的查找。
权利要求
1.一种数据处理电路,包括具有指令集的可编程处理器(12a、b),所述指令集包括一指令,所述指令具有引用位串的第一操作数以及引用所述位串中的位置的第二操作数,所述可编程处理器(12a、b)用于返回一代码作为执行所述指令的结果,所述代码指示从所述位串中的所述位置开始直到从所述位置开始的位串偏离预定的位模式为止出现的多个位的计数。
2.根据权利要求1所述的数据处理电路,其中,所述指令具有第三操作数,该第三操作数引用用于扩展所述位串的另一位串,其中,当从所述位置开始直到所述位串的末端为止的位不偏离所述模式时,在所述计数中计算的位包括从所述位置开始,并且从所述位串的末端持续到所述另一位串的开始的位。
3.根据权利要求1所述的数据处理电路,其中,所述处理器(12a、b)用于响应于所述指令返回额外的结果,所述额外的结果包含所述位串中从一预定的相对位置开始的后续位,所述相对位置与第一位位置有关,在所述第一位位置,在所述位置之后的位偏离预定模式。
4.根据权利要求1所述的数据处理电路,其中,所述处理器(12a、b)用于仅使用第二操作数中的预定数量的最低位,以控制开始计算所述位的所述位置。
5.根据权利要求1所述的数据处理电路,其被用程序编程以执行变长代码字的解码,所述程序包含对所述指令的调用,之后跟随有另一指令,所述另一指令使用从由所述指令产生的所述长度代码得出的索引来查找所述代码字的长度。
6.根据权利要求1所述的数据处理电路,其中,所述程序包含多次调用所述指令的指令,每次利用相同的第一操作数,每次利用第二操作数的连续值,所述连续值指示连续代码字在所述位串中开始的连续位置。
7.根据权利要求2所述的数据处理电路,其被用程序编程以执行变长代码字的解码,所述程序包含预备指令,以将包含变长代码字的位流的连续部分加载到相应的寄存器中,所述程序包含对所述指令的调用,其中,使用相应的寄存器作为第一和第三操作数,在所述调用之后跟随有另一指令,其使用所述长度代码来查找所述代码字的长度。
8.根据权利要求3所述的数据处理电路,其被用程序编程以执行变长代码字的解码,所述程序包含对所述指令的调用,之后跟随有另一指令,所述另一指令使用从所述长度代码和所述指令的所述额外的结果得出的索引来查找所述代码字的长度。
9.一种使用包含多个寄存器的可编程处理器来解码来自位流的变长代码字的方法,所述方法包括执行指令以将所述位流中从预定位置开始的位串加载到所述多个寄存器的第一个中;将指向所述位串中的当前代码字的开始的指针保存在所述多个寄存器的第二个中;使用所述多个寄存器中的所述第一个和第二个作为操作数来执行指令,所述指令产生一代码,该代码指示从所述位串中的所述位置开始直到从所述位置开始的所述位串的引导部分偏离预定位模式为止出现的多个位的计数;使用对查找表进行索引的长度代码来查找所述当前代码字的长度。
10.一种计算机程序产品,其包含程序的指令,当所述程序被执行时,使处理器执行权利要求9所述的方法。
全文摘要
一种数据处理电路,包括具有指令集的可编程处理器(12a、b),所述指令集包括一新类型的指令。所述指令具有引用位串的第一操作数以及引用所述位串中的位置的第二操作数。所述可编程处理器(12a、b)用于执行该指令,以返回一代码作为结果,所述代码指示从所述位串中的所述位置开始直到从所述位置开始的位串偏离预定的位模式为止出现的多个位的计数。
文档编号H03M7/00GK101023675SQ200580031369
公开日2007年8月22日 申请日期2005年9月15日 优先权日2004年9月20日
发明者科内利斯·迈因德斯 申请人:皇家飞利浦电子股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1