专利名称::指令编码方法、指令编码系统及数字信号处理器的制作方法
技术领域:
:本发明涉及指令集体系结构,尤其涉及一种指令编码方法、指令编码系统及采用该指令编码系统的数字信号处理器。
背景技术:
:在处理器中,控制器通常从程序存储器中取出指令,进行解码后,发出相应的控制信号给数据通路和存储器等,以取出相应数据并执行解码出的指令。处理器需要利用各种特定的指令组合来完成要求的应用程序。存储指令代码除了占用内存,还需占用缓存,这些对芯片面积都将造成影响。特别对于单芯片系统,芯片面积是直接决定成本的最重要因素之一,指令集代码的编码效率是设计中面临的非常重要的一个问题。而且,对指令代码进行存取操作需要功耗,指令的长短也直接影响着指令代码存取功耗的大小。在进行指令编码时,指令长度越短,占用的编码空间越大,也就是说,可提供的指令类型越少。例如,对于16位指令,其允许编码的指令类型为2的16次方,而32位指令,其允许编码的指令类型为2的32次方,远大于16位指令。但另一方面,指令长度越长,则占用的存储空间越大,且存取需要的功耗越大。有的处理器采用定长指令,所有的指令均匀编码,每个指令具有固定的长度,例如32位。这种定长指令中,有的指令需要的代码位数比较多,如对长立即数的运算指令,定长指令的长度至少要求满足这些指令必要的代码位数;另有一些指令比较短,例如装载指令(LOAD),但仍要占用固定的长度,需要浪费存储空间和存取功耗。如果采用较短的固定长度,则指令编码空间有限,无法满足指令类型的多样化。有的处理器则采用变长指令来解决这个问题。目前在具有变长指令的处理器中,一般是采用16位和32位两类指令长度,例如专利号为第6,189,090号的美国专利,其名称为"具变长指令的数字信号处理器(Digitalsignalprocessorwithvariablewidthinstructions)"。在第6,189,090号美国专禾U中,提出了一种指令集包括16位和32位两种长度的指令。将大部分指令编入32位长度指令,而少量指令编入16位长度指令。采用这种指令集的确使指令在程序存储器占用的空间减少了。但这种指令集中大多数指令仍旧主要采用32位长度编码,以满足足够的指令类型。并且由于16位的指令应用得比较少,使得16位长度指令数量有限,对指令存储空间的减少所作的贡献也是有限的。数字信号处理器作为一种特殊的处理器,特别用于执行一些快速的运算操作,常常需要设定大量特殊的专门指令,用于各类复杂的运算操作。指令类型数量的增加也为指令存储提出了更大空间的要求。例如,在面向寄存器的数字信号处理器中,通常设置了地址寄存器,在进行存取等操作时,也要设计各种指令类型来完成地址的计算。因此,对于数字信号处理器来说,更应考虑提高指令集代码的编码效率。同时,数字信号处理器特别强调以性能为导向,在保证满足专门应用的各种性能(包括处理速度等)的前提下,要求减少电路实现面积从而降低成本,这样对指令存储空间的压縮也提出了更高的要求。在较多的情况下,两条存储指令和一条计算指令并行,要同时读出和写入,或者同时读出需要用到的数据,或者一条存储指令写回上一条计算完成的数据,另一条存储指令用于读取需要用到的数据。因此,在DSP算法中,一般要求在做计算时,能同时进行两个存储单元的读取或者一个存储单元的读和写。在超长指令字系统中,可以一次发射多条并行的指令,对于仅包含16位和32位两种长度的指令系统,为保证足够的指令类型,大多数指令长度需要编码在32位,也限制了多条指令的并行。
发明内容本发明的目的在于提供一种指令编码方法,该方法可以提高指令集代码的编码效率并同时减少代码空间。本发明的另一目的在于提供一种指令编码系统,对于指令集代码的编码效率进行优化和提高,并使得处理器在存储开销、性能和功耗等各个方面都有显著提升。本发明的另一目的在于提供一种处理器,能够提高指令集代码的编码效率并同时减少代码空间,相应地,减少了存储开销和功耗,提升了性能。根据本发明的第一个方面,提供一种指令编码方法,包括如下步骤将基于长立即数的存取操作指令和计算操作指令压縮在32位长度,作为第一指令;将非基于长立即数的存取操作指令压縮在16位长度,作为第二指令;以及将非基于长立即数的计算操作指令压縮在24位长度,作为第三指令。根据所述的指令编码方法,它还包括将基于长立即数的程序控制指令压縮在32位长度,作为所述第一指令;以及将非基于长立即数的程序控制指令压縮在16位长度,作为所述第二指令。根据所述的指令编码方法,所述长立即数的位数根据相应指令的类型和应用需求综合调整。根据所述的指令编码方法,指令以包含至少一条指令的指令包的形式发射,指令包的长度为16位、24位、32位、40位、48位、56位、64位变长。根据本发明的另一方面,提供一种指令编码系统,包括第一指令编码装置,将基于长立即数的存取操作指令和计算操作指令压縮在32位长度,作为第一指令;第二指令编码装置,将非基于长立即数的存取操作指令压縮在16位长度,作为第二指令;以及第三指令编码装置,将非基于长立即数的计算操作指令压縮在24位长度,作为第三指令。根据所述的指令编码系统,所述第一指令编码装置还将基于长立即数的程序控制指令压縮在32位长度,作为所述第一指令;所述第二指令编码装置还将非基于长立即数的程序控制指令压縮在16位长度,作为所述第二指令。根据所述的指令编码系统,所述长立即数的位数根据相应指令的类型和应用需求综合调整。根据所述的指令编码系统,指令以包含至少一条指令的指令包的形式发射,指令包的长度为16位、24位、32位、40位、48位、56位、64位变长。根据本发明的另一方面,提供一种数字信号处理器,它包括如上所述的白勺指令lg码《统。根据所述的数字信号处理器,所述指令编码系统存放在一存储单元中。本发明由于采用16位/24位/32位三种指令长度进行变长指令编码,取得了非常高的代码压縮率(CodeDensity),显著减少了代码长度(CodeSize)。同时增加了16位长度的指令类型,也从一个方面减少了代码长度。由于取得了很高的指令编码效率,使得处理器在存储开销,性能和功耗方面都得到了很大的优化。另外,本发明利用指令包发射,允许在最大并行度的约束下任意并行计算指令和存取操作指令,使处理器的应用更为方便灵活。以下附图为对本发明示例性实施例的辅助说明,结合以下附图对本发明实施例的阐述,是为进一步揭示本发明的特征所在,但并不限制本发明,图中相同符号代表实施例中相应元件或步骤,其中图1为根据本发明一个实施例的处理器的结构示意图。图2为本发明指令编码方法和指令编码系统的三种指令模式示意图。图3示意性地表示根据本发明的指令编码方法和指令编码系统。图4为根据本发明一个实施例的LDW指令的编码示意图。图5为根据本发明一个实施例的ADDA指令编码示意图。图6为根据本发明一个实施例的MOV指令的编码示意图。图7为根据本发明一个实施例的压栈指令(PUSH)的编码示意图。图8为根据本发明一个实施例的ADD指令编码示意图。图9为根据本发明一个实施例的SFTL指令的编码示意图。图IO为根据本发明一个实施例的INST指令的编码示意图。具体实施例方式根据本发明的一个实施例,参见图l,数字信号处理器(DSP)的指令编码系统111和数据分别存放在存储单元11中,经由总线传送。控制单元12从存储单元11中取出指令并对指令进行译码,再由执行单元13根据译码后的指令从存储单元11中取出数据执行运算。执行单元13包含两个存取单元131、132和一个计算单元133,两个存取单元131和132可以同时进行数据存取操作;计算单元133对取出的数据进行计算。由于数字信号处理器可能处理的计算指令比较复杂,数字信号处理器中还可以设置地址产生单元(未图示),来进行地址的运算。本发明中地址产生单元提供了至少两个地址计算单元,可以同时进行两条不同指令要求的地址计算。在面向寄存器的数字信号处理器中通常还可以包括地址寄存器14和数据寄存器15。在本发明的一个实施例中,地址寄存器和数据寄存器分别为16个,即2的4次方。相应地,在指令编码时,涉及地址寄存器和数据寄存器的操作分别需要在代码中占用4位,才能指定全部的寄存器。也就是说,指定地址寄存器,在指令代码中需要占用4位;同样地,指定数据寄存器在指令代码中也需要占用4位。在本发明的一个实施例中,例如,以Dn泛指某一个数据寄存器。16个数据寄存器为D0D15。每个数据寄存器的宽度为32位。又例如,以An泛指某一个地址指针寄存器。16个地址指针寄存器为A0A15。每个地址指针寄存器的宽度为24位。另外,还可以配置地址偏移寄存器,以Nn泛指某一个地址偏移寄存器。N0N3为ZD4的地址偏移寄存器,一共是4个24位的地址偏移寄存器。其中NO与A0A3搭配使用,Nl与A4A7搭配使用,N2与A8A11搭配使用,N3与A12A15搭配使用。本发明的指令编码系统支持多长度指令编码,如图2所示,本发明的指令集包括三种不同长度的指令,即32位长度的第一指令(图2a)、16位长度的第二指令(图2b)和24位长度的第三指令(图2c)。长立即数的位数根据指令编码系统的指令类型和应用需求综合调整。指令中立即数的位数通常取决于编码空间的大小。在满足指令类型的数量时,需要消耗一定的编码空间,此外,寄存器资源的编码空间也根据具体的硬件资源来考虑,而立即数的位数则可以由剩下的编码空间来决定。这里的短立即数和长立即数也是相对而言。例如,在本发明的一个实施例中,系统的数据寄存器宽度为32位,相应的,长立即数可定义为16位和/或12位长度的立即数。并且,本发明中"基于长立即数"的指令是一个泛化的概念,不但指指令的域中包含一项或一项以上长立即数的所有指令,如果一条指令的域中包含两项或两项以上的短立即数,也可以归类为"基于长立即数"的指令。非基于长立即数的指令,则指基于长立即数的指令之外的指令。非基于长立即数的存取操作指令主要是基于短立即数和各类存储资源的存取操作指令。存储资源可以包括内存(存储器)、数据寄存器、地址寄存器、控制寄存器和其他各种寄存器。短立即数也可以根据指令系统的指令类型和应用需求综合调整。例如,在本发明的一个实施例中,系统的数据寄存器宽度为32位,相应的,短立即数可定义为5位长度的立即数。图3示意性地表示根据本发明的指令编码方法和指令编码系统。参见图3a,步骤310,接收存取操作指令或计算操作指令。步骤311,判断存取操作指令或计算操作指令是否基于长立即数,如是,步骤312,将该存取操作指令或计算操作指令压縮在32位长度,作为第一指令。如否,步骤313,继续判断该非基于长立即数的指令是否为存取操作指令,如是,步骤314,将该非基于长立即数的存取操作指令压縮在16位长度,作为第二指令。如否,步骤315,将该非基于长立即数的计算操作指令压縮在24位长度,作为第三指令。参见图3b,步骤320,接收程序控制指令。步骤321,判断程序控制指令是否基于长立即数,如是,步骤322,将该程序控制指令压縮在32位长度,作为第一指令。如否,步骤323,将该程序控制指令压縮在16位长度,作为第二指令。现在,以部分存取操作指令、计算操作指令和程序控制指令为例,详细描述根据本发明的指令编码方法和指令编码系统。存取操作是处理器中使用频率非常高的一类操作,本发明把存取操作尽可能地压縮在最短的指令长度。这也从一个方面减少了取指令的功耗。此外,在存取密集的处理器(例如DSP)算法中,一般要求在做计算时,能同时进行两个存储单元的读取或者一个存储单元的读和写。而縮短存取操作的指令代码长度,十分有利于两条存取操作指令的并行操作。在本发明的一个实施例中,由于长立即数所占的位数较多,对于基于长立即数的存取操作指令,16位长度代码无法指定长立即数,因此把基于长立即数的存取操作指令压縮在32位,即前文所述的第一指令。把非基于长立即数的存取操作指令压縮在16位,即前文所述的第二指令。相对于现有技术,本发明中增加了16位指令长度的指令类型,尤其是把大多数存取操作指令压縮到了16位长度,从一个方面提高了代码压縮率,减少了代码长度。存取操作指令用于在各类存储资源(包括内存、数据寄存器和地址寄存器)之间进行数据搬运和地址计算等,包括装载/存储指令、地址计算指令和移动指令等多种指令类型,例如LDW、LDB、LDA、STW、STB、STA、ADDA、SUBA、MOV、MOVA等。表一示例性地列出了一些存取操作指令。其中,W表示字(Word),4字节,32位;B表示字节(Byte),8位;HW表示半字(HalfWord),2字节,16位;DW表示双字(DoubleWord),8字节,64位。<table>tableseeoriginaldocumentpage11</column></row><table>表一每种指令类型各自又分别定义了多种类型的指令。下面分别以装载指令LDW、地址计算指令ADDA和移动指令MOV为例进行说明。LDW指令用来执行装载一个字数据到数据寄存器,又分为7种指令类型,分别以LDW.l、LDW.2、.......LDW.7来表示。这七种指令类型主要根据寻址模式来区分,其具体描述如表二所示。<table>tableseeoriginaldocumentpage11</column></row><table><table>tableseeoriginaldocumentpage12</column></row><table>表二图4为七种类型LDW指令的编码示意图,其中包括16位指令(图4a)和32位指令(图4b)。Ax表示源操作数是地址指针寄存器,Dd表示目标操作数是数据寄存器,Simml2表示12位的带符号(Signed)立即数。LDW.1、LDW.2、LDW.3、LDW.4、LDW.6是基于地址寄存器的装载指令,编码为16位长度的指令,[15:8]位为操作码(opcode),可以分别指示不同的指令类型,其中[13]位为联接位(L),用来指示在同一指令包中该条指令之后是否存在后续指令。[7:4]位为源操作数,来自地址指针寄存器,位[3:0]为目标操作数,送往数据寄存器。LDW.5和LDW.7是基于长立即数的装载指令,编码为32位长度的指令,[31:20]位为操作码,可以分别指示不同的指令类型,其中[26]位为联接位(L),用来指示在同一指令包中该条指令之后是否存在后续指令。[19:16]位为源操作数,来自地址指针寄存器。[15:12]位为目标操作数,送往数据寄存器。[ll:O]位为12位的有符号立即数,可以直接参与地址运算,实现强大的位操作能力。ADDA指令用来执行将地址指针寄存器Ax与短立即数/长立即数/目标地址指针寄存器Ad进行加法运算,结果存入目标地址指针寄存器Ad中。ADDA指令又分为3种指令类型,分另廿以ADDA.l、ADDA.2、ADDA.3来表示。这3种指令类型主要根据寻址模式来区分,其具体描述如表三所示。其中,Ax表示源操作数是地址指针寄存器,Ad表示目标操作数是地址指针寄存器,Simml2表示12位的有符号(Signed)立即数。<table>tableseeoriginaldocumentpage13</column></row><table>表三图5为三种类型的ADDA指令编码示意图,其中包括16位指令(图5a)和32位指令(图5b)。ADDA.l是基于短立即数的地址计算指令,编码为16位长度的指令。[15:9]位为操作码(叩code),指示指令类型,其中[13]位为联接位(L),用来指示在同一指令包中该条指令之后是否存在后续指令。[8:4]位为5位的无符号立即数,[3:0]位为目标操作数,送往地址指针寄存器。ADDA.3是基于地址寄存器的地址计算指令,编码为16位长度的指令,[15:8]位为操作码(opcode),指示指令类型,其中[13]位为联接位(L),用来指示在同一指令包中该条指令之后是否存在后续指令。[7:4]位为源操作数,来自地址指针寄存器,[3:0]位为目标操作数,送往地址指针寄存器。ADDA.2是基于长立即数的地址计算指令,编码为32位长度的指令。[3I:20]位为操作码,可以指示指令类型,其中[26]位为联接位(L),用来指示在同一指令包中该条指令之后是否存在后续指令。[19:16]位为源操作数,来自地址指针寄存器。[15:12]位为目标操作数,送往地址指针寄存器。[ll:O]位为12位的立即数,可以直接参与地址运算。MOV指令用来执行将数据寄存器值和别的寄存器(数据寄存器/地址指针寄存器/控制寄存器/标志寄存器)的值进行相互移动。MOV指令又分为5种指令类型,分别以MOV.l、MOV.2、.......MOV.5来表示。这5种指令类型具体描述如表四所示。表中Cx表示源操作数为控制寄存器,Cd表示目标操作数为控制寄存器。Dx表示源操作数是数据寄存器,Dd表示目标操作数是数据寄存器,Ax表示源操作数是地址指针寄存器,Simml2表示12位的有符号(Signed)立即数。<table>tableseeoriginaldocumentpage14</column></row><table>表四图6为5种类型MOV指令的编码示意图,都是编码为16位长度的指令,分别基于地址寄存器、数据寄存器或控制寄存器。[15:8]位为操作码(opcode),可以分别指示不同的指令类型,其中[13]位为联接位(L),用来指示在同一指令包中该条指令之后是否存在后续指令。[7:4]位为源操作数,来自地址寄存器、数据寄存器或控制寄存器。位[3:0]为目标操作数,送往地址寄存器、数据寄存器或控制寄存器。程序控制指令通常也使用较为频繁,在本发明的一个实施例中,把大多数程序控制指令压縮在16位。具体来说,把基于长立即数的程序控制指令压縮在32位,而把除基于长立即数之外的程序控制指令压縮在16位,如压栈指令(PUSH)、出栈指令(POP)、中断操作指令(INT)、从中断返回操作指令(RTI)等都压縮在16位。处理器中通常还会用到一些特殊指令,如调试操作(DEBUG)、停机操作(HALT)、空操作(NOP)等,这些特殊指令也可以压縮在16位指令长度。因此,本发明最大限度地把多种指令类型压縮在16位指令长度,充分压縮了指令代码,减少了指令存储空间和所需功耗。以下以压栈指令(PUSH)为例来进行说明。压栈指令(PUSH)将处理器内部的寄存器资源压栈,这些资源寄存器都当作一个32位的宽度进行压栈,对于不足32位的寄存器,高位进行填充,补足32位后再压栈。压栈前先使程序指针SP自减,使SP:SP-4,然后再进行压栈。表六示例性地列出了三种类型的压栈指令(PUSH)。<table>tableseeoriginaldocumentpage15</column></row><table>表五图7相应指明了三种类型压栈指令(PUSH)的编码。对于基于数据寄存器和地址指针寄存器的PUSH.l和PUSH.2指令,由于数据寄存器和地址指针寄存器都是16个,编码时,[15:4]位为操作码,指明指令操作类型。[3:0]位指明进行压栈操作的寄存器资源。对于地址偏移寄存器压栈指令,例如在本发明一实施例中处理器提供了4个地址偏移寄存器,则只需[1:0]位编码。除了16位和32位的指令长度,本发明的指令编码系统增加了24位的指令长度,把非基于长立即数的计算操作指令压縮在24位,即前文所述的第三指令。非基于长立即数的计算操作指令主要是基于短立即数和各类存储资源的计算操作指令。基于长立即数的计算操作指令,24位长度无法压縮,因此把基于长立即数的计算操作指令压縮在32位。这里通过把大量现有技术中32位长度的指令压縮在24位指令长度,使指令系统取得了非常高的代码压縮率(CodeDensity),显著减少了代码长度(CodeSize),从而减少了代码存储空间和读取指令时的功耗。计算操作指令用于数据的计算,包括算术逻辑运算指令、比特操作指令等多种指令类型,本领域技术人员可以根据实际应用需求增减相应的指令类型。表六示例性地列出了一些计算操作指令。<table>tableseeoriginaldocumentpage16</column></row><table>表六以下以一个算术逻辑运算指令ADD和一个比特操作指令INST为例来进行说明。算术逻辑运算指令ADD用于将数据寄存器Dx与短立即数/长立即数/另一数据寄存器Dy进行加法运算,得到的结果存入目标寄存器Dd中。ADD指令又分为5种指令类型,分别以ADD.l、ADD.2、ADD.3、ADD.4、ADD.5来表示。这5种指令类型具体描述如表七所示。<table>tableseeoriginaldocumentpage16</column></row><table><table>tableseeoriginaldocumentpage17</column></row><table>表七图8为5种类型的ADD指令编码示意图,包括24位指令(图8a)和32位指令(图8b)。其中,Dx表示源操作数1是数据寄存器,Dy表示源操作数2是数据寄存器,Dd表示目标操作数是数据寄存器,Simml6表示16位的有符号(Signed)立即数,Uimm5表示5位的无符号(Unsigned)立即数,SN表示縮放标志符,SS表示左移或者右移16位标志符。ADD.l是基于短立即数的加法操作指令,编码为24位长度的指令。[23:13]位为操作码(叩code),指示指令类型。[12:8]位为5位的无符号立即数,[7:4]位为源操作数,来自数据寄存器Dx,[3:0]位为目标操作数,送往数据寄存器Dd。ADD.2是基于数据寄存器的加法操作指令,编码为24位长度的指令。[23:12]位为操作码(opcode),指示指令类型。[11:8]位为源操作数1,来自数据寄存器Dx,[7:4]位为源操作数2,来自数据寄存器Dy,[3:0]位为目标操作数,送往数据寄存器Dd。ADD.4是基于数据寄存器的加法操作指令,编码为24位长度的指令。[23:14]位为操作码(叩code),指示指令类型。[13:12]位为縮放标志符SN,指示算术移位。[11:8]位为源操作数1,来自数据寄存器Dx,[7:4]位为源操作数2,来自数据寄存器Dy,[3:0]位为目标操作数,送往数据寄存器Dd。ADD.5也是基于数据寄存器的加法操作指令,编码为24位长度的指令,编码细节与ADD.4相似,区别仅在于,[23:13]位为操作码(叩code),指示指令类型。[12]位为左移或者右移16位标志符SS。ADD.3是基于长立即数的地址计算指令,编码为32位长度的指令。[31:24]位为操作码,可以指示指令类型,[23:20]位为源操作数,来自数据寄存器。[19:16]位为目标操作数,送往数据寄存器。[15:0]位为16位的立即数。比特操作指令SFTL用于将一个数据寄存器Dx中的数据进行左移位。SFTL指令分为2种指令类型,分别以SFTL.l和SFTL.2来表示,具体描述见表八。<table>tableseeoriginaldocumentpage18</column></row><table>表八图9为SFTL.l和SFTL.2指令的编码示意图,都是编码为24位长度的指令。SFTL.l是基于短立即数的比特操作指令,[23:13]位为操作码(opcode),指示指令类型。[12:8]位为5位的无符号立即数,[7:4]位为源操作数,来自数据寄存器Dx,[3:0]位为目标操作数,送往数据寄存器Dd。SFTL.2是基于数据寄存器的比特操作指令,[23:12]位为操作码(opcode),指示指令类型。[11:8]位为源操作数1,来自数据寄存器Dy,[7:4]位为源操作数2,来自数据寄存器Dx,[3:0]位为目标操作数,送往数据寄存器Dd。比特操作指令INST用于将一个数据寄存器DX中的从最低位起的某一段数据提取出来,并将其插入到目标寄存器Dd中的特定位置。INST指令分为2种指令类型,分别以INST.l和INST.2来表示,具体描述见表九。Dx为被提取的数据寄存器,Dy中规定了提取的参数,Dy[4:0]为提取数据的长度(Length),Dy[20:16]为提取数据嵌入到目标寄存器中的从左边开始的起始位置(Position)。INST.l类型1Dd=工NST(Dx,Dy)Dx为被提取的数据寄存器,Dy中规定了提取的参数,Dx的数据嵌入到Dd中,Dd中的其他数据保持不变。INST.2类型2Dd=INST(Dx,#imm5,#imm5)Dx为被提取的数据寄存器,提取的参数为5位立即数,Dx的数据嵌入到Dd中,Dd中的其他数据保持不变。表九图IO为INST.l和INST.2指令的编码示意图,分别是24位指令(图10a)和32位指令(图10b)。INST.l是基于数据寄存器的比特操作指令,编码为24位长度的指令。[23:12]位为操作码(opcode),指示指令类型。[11:8]位为数据寄存器Dy,这里数据寄存器Dy为参数寄存器,其中规定了提取的参数。Dy[4:0]为提取数据的长度(Length),Dy[20:16]为提取数据嵌入到目标寄存器中的从左边开始的起始位置(Position)。[7:4]位为数据寄存器Dx,Dx为被提取的数据寄存器。[3:0]位为数据寄存器Dd,Dd为目标寄存器,接受数据的插入INST.l指令将Dx[Length-l:O]的数据嵌入到Dd[Length+Position-l.'Position]中,Dd中的其他数据保持不变。INST.2是基于两项短立即数的指令,按照前文所述的本发明的定义,属于基于长立即数的指令,编码为32位指令。[31:24]位为操作码(opcode),指示指令类型。[23:20]位为数据寄存器Dx,Dx为被提取的数据寄存器。[19:16]位为数据寄存器Dd,Dd为目标寄存器,接受数据的插入。[15:11]位为5位立即数Uimm5(P),给出数据插入Dd的初始位置(Position),[10:6]位为5位立即数Uimm5(L),给出插入Dd的数据的长度(Length)。[5:0〗位可保留。INST.2指令将Dx[Length-l:O]的数据嵌入到Dd[Length+Position-l:Position]中,Dd中的其他数据保持不变。在本发明的一个实施例中,指令体系采用了超长指令字,存储单元可以以包含至少一条指令的指令包的形式发射指令。指令包的长度是可变的。指令包的长度的变化可以是为16位/24位/32位/40位/48位/56位/64位变长。对于16位、24位和32位这三类长度的指令,基本可以以任何一种方式并行,其限制主要在于总线宽度。例如,当总线宽度为64位时,指令包长度最大为64位。此外,指令包中并行指令要跟硬件结构相对应,并行的计算指令的数量不超过计算单元的数量,并行的存取操作指令的数量不超过存储单元的数量。例如,在本发明的一个实施例中,包含两个存取单元和一个计算单元,因此,一个指令包中,只限于最多一次并行两条存取操作指令和一条计算指令。可以理解的是,改变存取单元和计算单元的数量,一个指令包中并行指令的最大并行度也会有相应变化。例如在提供三个存取单元的情况下,一个指令包中最多可以并行三条存取操作指令。本发明采用16位、24位和32位这三类长度的指令,最大限度地允许指令包长度的变化,使得并行指令包的效率得到了优化和提高,也从一个方面提高了处理器的性能。总而言之,本发明由于采用16位/24位/32位三种指令长度进行变长指令编码,实现了代码压縮率(CodeDensity)最大化,并取得了很高的指令编码效率,使得处理器在存储开销,性能和功耗方面都得到了很大的优化。并且,本发明把指令集中较为常用的基于寄存器的指令编码为16位或24位长度,如基于寄存器的存取操作指令编码为16位,基于寄存器的计算操作指令编码为24位;而把较不常用的基于长立即数的指令编码为32位,包括基于长立即数的存取操作指令和基于长立即数的计算操作指令都编码为32位。这也进一步改善了处理器的性能和功耗。本发明并不限于实施例所做的阐述,任何基于本发明的修改和本发明的等同物都应涵盖在本发明的权利要求的精神和范围之内。权利要求1.一种指令编码方法,包括如下步骤将基于长立即数的存取操作指令和计算操作指令压缩在32位长度,作为第一指令;将非基于长立即数的存取操作指令压缩在16位长度,作为第二指令;以及将非基于长立即数的计算操作指令压缩在24位长度,作为第三指令。2.如权利要求l所述的指令编码方法,其特征在于还包括将基于长立即数的程序控制指令压縮在32位长度,作为所述第一指令;以及将非基于长立即数的程序控制指令压縮在16位长度,作为所述第二指令。3.如权利要求1或2所述的指令编码方法,其特征在于,所述长立即数的位数根据相应指令的类型和应用需求综合调整。4.如权利要求1或2所述的指令编码方法,其特征在于,指令以包含至少一条指令的指令包的形式发射,指令包的长度最大为总线宽度,指令包中可以任意并行计算指令和存取操作指令,并行的计算指令的数量不超过计算单元的数量,并行的存取操作指令的数量不超过存储单元的数量。5.如权利要求4所述的指令编码方法,其特征在于,所述指令包的长度为16位、24位、32位、40位、48位、56位、64位变长。6.—种指令编码系统,包括第一指令编码装置,将基于长立即数的存取操作指令和计算操作指令压縮在32位长度,作为第一指令;第二指令编码装置,将非基于长立即数的存取操作指令压縮在16位长度,作为第二指令;以及第三指令编码装置,将非基于长立即数的计算操作指令压縮在24位长度,作为第三指令。7.如权利要求6所述的指令编码系统,其特征在于所述第一指令编码装置还将基于长立即数的程序控制指令压縮在32位长度,作为所述第一指令;以及所述第二指令编码装置还将非基于长立即数的程序控制指令压縮在16位长度,作为所述第二指令。8.如权利要求6或7所述的指令编码系统,其特征在于,所述长立即数的位数根据相应指令的类型和应用需求综合调整。9.如权利要求6或7所述的指令编码系统,其特征在于,指令以包含至少一条指令的指令包的形式发射,指令包的长度最大为总线宽度,指令包中可以任意并行计算指令和存取操作指令,并行的计算指令的数量不超过计算单元的数量,并行的存取操作指令的数量不超过存储单元的数量。10.如权利要求9所述的指令编码系统,其特征在于,所述指令包的长度为16位、24位、32位、40位、48位、56位、64位变长。11.一种数字信号处理器,其特征在于包括如权利要求6所述的指令编码系统。12.如权利要求11所述的数字信号处理器,其特征在于所述指令编码系统存放在一存储单元中。全文摘要指令编码方法和指令编码系统包括将基于长立即数的存取操作指令和计算操作指令压缩在32位长度,作为第一指令;将非基于长立即数的存取操作指令压缩在16位长度,作为第二指令;以及将非基于长立即数的计算操作指令压缩在24位长度,作为第三指令。根据所述的指令编码方法和系统,还可以将基于长立即数的程序控制指令压缩在32位长度,作为所述第一指令;将非基于长立即数的程序控制指令压缩在16位长度,作为所述第二指令。本发明的数字信号处理器包括如上所述的的指令编码系统。由于采用16位/24位/32位三种指令长度进行变长指令编码,取得了非常高的代码压缩率,显著减少了代码长度。文档编号G06F9/38GK101382884SQ200710045699公开日2009年3月11日申请日期2007年9月7日优先权日2007年9月7日发明者周振亚,张亚林申请人:上海奇码数字信息有限公司