CN101382884B - 指令编码方法、指令编码系统及数字信号处理器 - Google Patents
指令编码方法、指令编码系统及数字信号处理器 Download PDFInfo
- Publication number
- CN101382884B CN101382884B CN200710045699A CN200710045699A CN101382884B CN 101382884 B CN101382884 B CN 101382884B CN 200710045699 A CN200710045699 A CN 200710045699A CN 200710045699 A CN200710045699 A CN 200710045699A CN 101382884 B CN101382884 B CN 101382884B
- Authority
- CN
- China
- Prior art keywords
- instruction
- length
- immediately
- register
- bit lengths
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Executing Machine-Instructions (AREA)
Abstract
指令编码方法和指令编码系统包括:将基于长立即数的存取操作指令和计算操作指令压缩在32位长度,作为第一指令;将非基于长立即数的存取操作指令压缩在16位长度,作为第二指令;以及将非基于长立即数的计算操作指令压缩在24位长度,作为第三指令。根据所述的指令编码方法和系统,还可以将基于长立即数的程序控制指令压缩在32位长度,作为所述第一指令;将非基于长立即数的程序控制指令压缩在16位长度,作为所述第二指令。本发明的数字信号处理器包括如上所述的的指令编码系统。由于采用16位/24位/32位三种指令长度进行变长指令编码,取得了非常高的代码压缩率,显著减少了代码长度。
Description
技术领域
本发明涉及指令集体系结构,尤其涉及一种指令编码方法、指令编码系统及采用该指令编码系统的数字信号处理器。
背景技术
在处理器中,控制器通常从程序存储器中取出指令,进行解码后,发出相应的控制信号给数据通路和存储器等,以取出相应数据并执行解码出的指令。处理器需要利用各种特定的指令组合来完成要求的应用程序。存储指令代码除了占用内存,还需占用缓存,这些对芯片面积都将造成影响。特别对于单芯片系统,芯片面积是直接决定成本的最重要因素之一,指令集代码的编码效率是设计中面临的非常重要的一个问题。而且,对指令代码进行存取操作需要功耗,指令的长短也直接影响着指令代码存取功耗的大小。
在进行指令编码时,指令长度越短,占用的编码空间越大,也就是说,可提供的指令类型越少。例如,对于16位指令,其允许编码的指令类型为2的16次方,而32位指令,其允许编码的指令类型为2的32次方,远大于16位指令。但另一方面,指令长度越长,则占用的存储空间越大,且存取需要的功耗越大。
有的处理器采用定长指令,所有的指令均匀编码,每个指令具有固定的长度,例如32位。这种定长指令中,有的指令需要的代码位数比较多,如对长立即数的运算指令,定长指令的长度至少要求满足这些指令必要的代码位数;另有一些指令比较短,例如装载指令(LOAD),但仍要占用固定的长度,需要浪费存储空间和存取功耗。如果采用较短的固定长度,则指令编码空间有限,无法满足指令类型的多样化。
有的处理器则采用变长指令来解决这个问题。目前在具有变长指令的处理器中,一般是采用16位和32位两类指令长度,例如专利号为第6,189,090号的美国专利,其名称为“具变长指令的数字信号处理器(Digital signalprocessor with variable width instructions)”。在第6,189,090号美国专利中,提出了一种指令集包括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位变长。
根据本发明的另一方面,提供一种数字信号处理器,它包括如上所述的的指令编码系统。
根据所述的数字信号处理器,所述指令编码系统存放在一存储单元中。
本发明由于采用16位/24位/32位三种指令长度进行变长指令编码,取得了非常高的代码压缩率(Code Density),显著减少了代码长度(Code Size)。同时增加了16位长度的指令类型,也从一个方面减少了代码长度。由于取得了很高的指令编码效率,使得处理器在存储开销,性能和功耗方面都得到了很大的优化。另外,本发明利用指令包发射,允许在最大并行度的约束下任意并行计算指令和存取操作指令,使处理器的应用更为方便灵活。
附图说明
以下附图为对本发明示例性实施例的辅助说明,结合以下附图对本发明实施例的阐述,是为进一步揭示本发明的特征所在,但并不限制本发明,图中相同符号代表实施例中相应元件或步骤,其中:
图1为根据本发明一个实施例的处理器的结构示意图。
图2为本发明指令编码方法和指令编码系统的三种指令模式示意图。
图3示意性地表示根据本发明的指令编码方法和指令编码系统。
图4为根据本发明一个实施例的LDW指令的编码示意图。
图5为根据本发明一个实施例的ADDA指令编码示意图。
图6为根据本发明一个实施例的MOV指令的编码示意图。
图7为根据本发明一个实施例的压栈指令(PUSH)的编码示意图。
图8为根据本发明一个实施例的ADD指令编码示意图。
图9为根据本发明一个实施例的SFTL指令的编码示意图。
图10为根据本发明一个实施例的INST指令的编码示意图。
具体实施方式
根据本发明的一个实施例,参见图1,数字信号处理器(DSP)的指令编码系统和数据分别存放在存储单元11中,经由总线传送。控制单元12从存储单元11中取出指令并对指令进行译码,再由执行单元13根据译码后的指令从存储单元11中取出数据执行运算。执行单元13包含两个存取单元131、132和一个计算单元133,两个存取单元131和132可以同时进行数据存取操作;计算单元133对取出的数据进行计算。由于数字信号处理器可能处理的计算指令比较复杂,数字信号处理器中还可以设置地址产生单元(未图示),来进行地址的运算。本发明中地址产生单元提供了至少两个地址计算单元,可以同时进行两条不同指令要求的地址计算。
在面向寄存器的数字信号处理器中通常还可以包括地址寄存器14和数据寄存器15。在本发明的一个实施例中,地址寄存器和数据寄存器分别为16个,即2的4次方。相应地,在指令编码时,涉及地址寄存器和数据寄存器的操作分别需要在代码中占用4位,才能指定全部的寄存器。也就是说,指定地址寄存器,在指令代码中需要占用4位;同样地,指定数据寄存器在指令代码中也需要占用4位。在本发明的一个实施例中,例如,以Dn泛指某一个数据寄存器。16个数据寄存器为D0~D15。每个数据寄存器的宽度为32位。又例如,以An泛指某一个地址指针寄存器。16个地址指针寄存器为A0~A15。每个地址指针寄存器的宽度为24位。另外,还可以配置地址偏移寄存器,以Nn泛指某一个地址偏移寄存器。N0~N3为ZD4的地址偏移寄存器,一共是4个24位的地址偏移寄存器。其中N0与A0~A3搭配使用,N1与A4~A7搭配使用,N2与A8~A11搭配使用,N3与A12~A15搭配使用。
本发明的指令编码系统支持多长度指令编码,如图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表示半字(Half Word),2字节,16位;DW表示双字(Double Word),8字节,64位。
LDW | 装载一个字数据到数据寄存器 |
LDB | 装载一个字节数据到数据寄存器 |
LDA | 装载一个字数据到地址寄存器 |
STW | 存储一个字数据 |
STB | 存储一个字节数据 |
STA | 存储一个地址寄存器到一个字的内存空间 |
ADDA | 地址指针寄存器加法 |
SUBA | 地址指针寄存器减法 |
MOV | 数据寄存器移动 |
MOVA | 地址寄存器移动 |
表一
每种指令类型各自又分别定义了多种类型的指令。下面分别以装载指令LDW、地址计算指令ADDA和移动指令MOV为例进行说明。
LDW指令用来执行装载一个字数据到数据寄存器,又分为7种指令类型,分别以LDW.1、LDW.2、......、LDW.7来表示。这七种指令类型主要根据寻址模式来区分,其具体描述如表二所示。
LDW.1 | 类型1 | 基本寻址模式 | 输出地址为Ax,不改变Ax寄存器的值。 |
LDW.2 | 类型2 | 增量寻址模式 | 输出地址为Ax,同时使用后加方式使Ax=Ax+4/-4,[Ax]+,[Ax]-增量为4。 |
LDW.3 | 类型3 | 增量寻址模式 | 输出地址为Ax,同时使用后加方式使Ax=Ax+4/-4,[Ax]+,[Ax]-增量为4。 |
LDW.4 | 类型4 | 寄存器偏移寻址模 | 输出地址为Ax,同时使用后加方式使Ax=Ax+N。N中存放的数为有符号的数。 |
式 | |||
LDW.5 | 类型5 | 立即数偏移寻址模式 | 输出地址为Ax,同时使用后加方式使Ax=Ax+#s12,其中#s12是12位有符号立即数。 |
LDW.6 | 类型6 | 寄存器基址寻址模式 | 输出地址为Ax+N,不改变Ax寄存器的值。N中存放的数为有符号的数。 |
LDW.7 | 类型7 | 立即数基址寻址模式 | 输出地址为Ax+#s12,不改变Ax寄存器的值。其中#s12是12位有符号立即数。 |
表二
图4为七种类型LDW指令的编码示意图,其中包括16位指令(图4a)和32位指令(图4b)。Ax表示源操作数是地址指针寄存器,Dd表示目标操作数是数据寄存器,Simm12表示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]位为目标操作数,送往数据寄存器。[11:0]位为12位的有符号立即数,可以直接参与地址运算,实现强大的位操作能力。
ADDA指令用来执行将地址指针寄存器Ax与短立即数/长立即数/目标地址指针寄存器Ad进行加法运算,结果存入目标地址指针寄存器Ad中。ADDA指令又分为3种指令类型,分别以ADDA.1、ADDA.2、ADDA.3来表示。这3种指令类型主要根据寻址模式来区分,其具体描述如表三所示。其中,Ax表示源操作数是地址指针寄存器,Ad表示目标操作数是地址指针寄存器,Simm12表示12位的有符号(Signed)立即数。
ADDA.1 | 类型1 | Ad=Ax+#u5 | 地址指针寄存器Ax与短立即数进行加法运算,结果存入目标地址指针寄存器Ad。短立即数为无符号的5位立即数。 |
ADDA.2 | 类型2 | Ad=Ax+#s12 | 地址指针寄存器Ax与长立即数进行加法运算,结果存入目标地址指针寄存器Ad。长立即数为有符号的12位立即数。 |
ADDA.3 | 类型3 | Ad=Ax+Ad | 地址指针寄存器Ax与目标地址指针寄存器Ad进行加法运算,结果存入目标地址指针寄存器Ad。 |
表三
图5为三种类型的ADDA指令编码示意图,其中包括16位指令(图5a)和32位指令(图5b)。ADDA.1是基于短立即数的地址计算指令,编码为16位长度的指令。[15:9]位为操作码(opcode),指示指令类型,其中[13]位为联接位(L),用来指示在同一指令包中该条指令之后是否存在后续指令。[8:4]位为5位的无符号立即数,[3:0]位为目标操作数,送往地址指针寄存器。ADDA.3是基于地址寄存器的地址计算指令,编码为16位长度的指令,[15:8]位为操作码(opcode),指示指令类型,其中[13]位为联接位(L),用来指示在同一指令包中该条指令之后是否存在后续指令。[7:4]位为源操作数,来自地址指针寄存器,[3:0]位为目标操作数,送往地址指针寄存器。ADDA.2是基于长立即数的地址计算指令,编码为32位长度的指令。[31:20]位为操作码,可以指示指令类型,其中[26]位为联接位(L),用来指示在同一指令包中该条指令之后是否存在后续指令。[19:16]位为源操作数,来自地址指针寄存器。[15:12]位为目标操作数,送往地址指针寄存器。[11:0]位为12位的立即数,可以直接参与地址运算。
MOV指令用来执行将数据寄存器值和别的寄存器(数据寄存器/地址指针寄存器/控制寄存器/标志寄存器)的值进行相互移动。MOV指令又分为5种指令类型,分别以MOV.1、MOV.2、......、MOV.5来表示。这5种指令类型具体描述如表四所示。表中Cx表示源操作数为控制寄存器,Cd表示目标操作数为控制寄存器。Dx表示源操作数是数据寄存器,Dd表示目标操作数是数据寄存器,Ax表示源操作数是地址指针寄存器,Simm12表示12位的有符号(Signed)立即数。
MOV.1 | 类型1 | 将数据寄存器Dx的值移动到数据寄存器Dd中。 |
MOV.2 | 类型2 | 将地址指针寄存器Ax的24位移动到数据寄存器Dd的低24位中,数据寄存器的高8位进行无符号扩展(Unsigned Extension)。 |
MOV.3 | 类型3 | 将数据寄存器Dx的低24位移动到地址指针寄存器Ad中。 |
MOV.4 | 类型4 | 将控制寄存器Cx的32位值移动到数据寄存器Dd中。 |
MOV.5 | 类型5 | 将数据寄存器Dx的32位值移动到控制寄存器Cd中。 |
表四
图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)。
PUSH.1 | 类型1 | PUSHDx | 将数据寄存器压栈 |
PUSH.2 | 类型2 | PUSHAx | 将地址指针寄存器压栈 |
PUSH.1 | 类型1 | PUSHDx | 将数据寄存器压栈 |
PUSH.3 | 类型3 | PUSHNx | 将地址偏移寄存器压栈 |
表五
图7相应指明了三种类型压栈指令(PUSH)的编码。对于基于数据寄存器和地址指针寄存器的PUSH.1和PUSH.2指令,由于数据寄存器和地址指针寄存器都是16个,编码时,[15:4]位为操作码,指明指令操作类型。[3:0]位指明进行压栈操作的寄存器资源。对于地址偏移寄存器压栈指令,例如在本发明一实施例中处理器提供了4个地址偏移寄存器,则只需[1:0]位编码。
除了16位和32位的指令长度,本发明的指令编码系统增加了24位的指令长度,把非基于长立即数的计算操作指令压缩在24位,即前文所述的第三指令。非基于长立即数的计算操作指令主要是基于短立即数和各类存储资源的计算操作指令。基于长立即数的计算操作指令,24位长度无法压缩,因此把基于长立即数的计算操作指令压缩在32位。这里通过把大量现有技术中32位长度的指令压缩在24位指令长度,使指令系统取得了非常高的代码压缩率(Code Density),显著减少了代码长度(Code Size),从而减少了代码存储空间和读取指令时的功耗。
计算操作指令用于数据的计算,包括算术逻辑运算指令、比特操作指令等多种指令类型,本领域技术人员可以根据实际应用需求增减相应的指令类型。表六示例性地列出了一些计算操作指令。
ABS | 绝对值运算 |
ADC | 带进位加运算 |
ADD | 加法运算 |
AND | 逻辑与运算 |
CLR | 清零运算 |
MPY | 乘法运算 |
OR | 逻辑或运算 |
SUB | 减法运算 |
BSET | 设置寄存器的某些位为1的操作 |
INST | 在寄存器中插入某些位的操作 |
ABS | 绝对值运算 |
SFTL | 左移位运算 |
SFTR | 右移位运算 |
表六
以下以一个算术逻辑运算指令ADD和一个比特操作指令INST为例来进行说明。
算术逻辑运算指令ADD用于将数据寄存器Dx与短立即数/长立即数/另一数据寄存器Dy进行加法运算,得到的结果存入目标寄存器Dd中。ADD指令又分为5种指令类型,分别以ADD.1、ADD.2、ADD.3、ADD.4、ADD.5来表示。这5种指令类型具体描述如表七所示。
ADD.1 | 类型1 | Dd=Dx+#u5 | 将5位无符号(Unsigned)立即数与Dx相加。 |
ADD.2 | 类型2 | Dd=Dx+Dy | 将两个数据寄存器Dx与Dy相加,Dx和Dy可以是同一个数 |
据寄存器。 | |||
ADD.3 | 类型3 | Dd=Dx+#s16 | 将16位有符号(signed)立即数与Dx相加。 |
ADD.4 | 类型4 | Dd=(Dx+Dy)<<<(-2|-1|1|2) | 将两个数据寄存器Dx与Dy相加,并将结果算术左移1/2位或者算术右移1/2位之后,再将结果放入目标寄存器Dd中。 |
ADD.5 | 类型5 | Dd=Dx<<<(-16|16)+Dy | 将Dx算术左移16位或者算术右移16位之后与另一数据寄存器Dy相加,再将结果放入目标寄存器Dd中。 |
表七
图8为5种类型的ADD指令编码示意图,包括24位指令(图8a)和32位指令(图8b)。其中,Dx表示源操作数1是数据寄存器,Dy表示源操作数2是数据寄存器,Dd表示目标操作数是数据寄存器,Simm16表示16位的有符号(Signed)立即数,Uimm5表示5位的无符号(Unsigned)立即数,SN表示缩放标志符,SS表示左移或者右移16位标志符。ADD.1是基于短立即数的加法操作指令,编码为24位长度的指令。[23:13]位为操作码(opcode),指示指令类型。[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]位为操作码(opcode),指示指令类型。[13:12]位为缩放标志符SN,指示算术移位。[11:8]位为源操作数1,来自数据寄存器Dx,[7:4]位为源操作数2,来自数据寄存器Dy,[3:0]位为目标操作数,送往数据寄存器Dd。ADD.5也是基于数据寄存器的加法操作指令,编码为24位长度的指令,编码细节与ADD.4相似,区别仅在于,[23:13]位为操作码(opcode),指示指令类型。[12]位为左移或者右移16位标志符SS。ADD.3是基于长立即数的地址计算指令,编码为32位长度的指令。[31:24]位为操作码,可以指示指令类型,[23:20]位为源操作数,来自数据寄存器。[19:16]位为目标操作数,送往数据寄存器。[15:0]位为16位的立即数。
比特操作指令SFTL用于将一个数据寄存器Dx中的数据进行左移位。SFTL指令分为2种指令类型,分别以SFTL.1和SFTL.2来表示,具体描述见表八。
SFTL.1 | 类型1 | Dd=Dx<<#u5 | 将数据寄存器Dx的值按比特左移,最低D[0]位移入的补0,同时最高位D[23]移出的位填入控制寄存器C,将结果写入数据寄存器Dd。移位的数目为5bit无符号数,当#uimm 5=0,没影响。 |
SFTL.2 | 类型2 | Dd=Dx<<(Dy&0x1f) | 将数据寄存器Dx的值按比特左移,最低位D[0]移入的补0,同时最高位D[23]移出的位填入控制寄存器C,将结果写入Dd。移位的数目为数据寄存器Dy低5位,移位范围为[0,23]。 |
表八
图9为SFTL.1和SFTL.2指令的编码示意图,都是编码为24位长度的指令。SFTL.1是基于短立即数的比特操作指令,[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.1和INST.2来表示,具体描述见表九。Dx为被提取的数据寄存器,Dy中规定了提取的参数,Dy[4:0]为提取数据的长度(Length),Dy[20:16]为提取数据嵌入到目标寄存器中的从左边开始的起始位置(Position)。
INST.1 | 类型1 | Dd=INST(Dx,Dy) | Dx为被提取的数据寄存器,Dy中规定了提取的参数,Dx的数据嵌入到Dd中,Dd中的其他数据保持不变。 |
INST.2 | 类型2 | Dd=INST(Dx,#imm5,#imm5) | Dx为被提取的数据寄存器,提取的参数为5位立即数,Dx的数据嵌入到Dd中,Dd中的其他数据保持不变。 |
表九
图10为INST.1和INST.2指令的编码示意图,分别是24位指令(图10a)和32位指令(图10b)。INST.1是基于数据寄存器的比特操作指令,编码为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.1指令将Dx[Length-1:0]的数据嵌入到Dd[Length+Position-1: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-1:0]的数据嵌入到Dd[Length+Position-1:Position]中,Dd中的其他数据保持不变。
在本发明的一个实施例中,指令体系采用了超长指令字,存储单元可以以包含至少一条指令的指令包的形式发射指令。指令包的长度是可变的。指令包的长度的变化可以是为16位/24位/32位/40位/48位/56位/64位变长。对于16位、24位和32位这三类长度的指令,基本可以以任何一种方式并行,其限制主要在于总线宽度。例如,当总线宽度为64位时,指令包长度最大为64位。此外,指令包中并行指令要跟硬件结构相对应,并行的计算指令的数量不超过计算单元的数量,并行的存取操作指令的数量不超过存储单元的数量。例如,在本发明的一个实施例中,包含两个存取单元和一个计算单元,因此,一个指令包中,只限于最多一次并行两条存取操作指令和一条计算指令。可以理解的是,改变存取单元和计算单元的数量,一个指令包中并行指令的最大并行度也会有相应变化。例如在提供三个存取单元的情况下,一个指令包中最多可以并行三条存取操作指令。本发明采用16位、24位和32位这三类长度的指令,最大限度地允许指令包长度的变化,使得并行指令包的效率得到了优化和提高,也从一个方面提高了处理器的性能。
总而言之,本发明由于采用16位/24位/32位三种指令长度进行变长指令编码,实现了代码压缩率(Code Density)最大化,并取得了很高的指令编码效率,使得处理器在存储开销,性能和功耗方面都得到了很大的优化。
并且,本发明把指令集中较为常用的基于寄存器的指令编码为16位或24位长度,如基于寄存器的存取操作指令编码为16位,基于寄存器的计算操作指令编码为24位;而把较不常用的基于长立即数的指令编码为32位,包括基于长立即数的存取操作指令和基于长立即数的计算操作指令都编码为32位。这也进一步改善了处理器的性能和功耗。
本发明并不限于实施例所做的阐述,任何基于本发明的修改和本发明的等同物都应涵盖在本发明的权利要求的精神和范围之内。
Claims (12)
1.一种指令编码方法,包括如下步骤:
将基于长立即数的存取操作指令和计算操作指令压缩在32位长度,作为第一指令;
将非基于长立即数的存取操作指令压缩在16位长度,作为第二指令;以及
将非基于长立即数的计算操作指令压缩在24位长度,作为第三指令。
2.如权利要求1所述的指令编码方法,其特征在于还包括:
将基于长立即数的程序控制指令压缩在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所述的数字信号处理器,其特征在于所述指令编码系统存放在一存储单元中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200710045699A CN101382884B (zh) | 2007-09-07 | 2007-09-07 | 指令编码方法、指令编码系统及数字信号处理器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200710045699A CN101382884B (zh) | 2007-09-07 | 2007-09-07 | 指令编码方法、指令编码系统及数字信号处理器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101382884A CN101382884A (zh) | 2009-03-11 |
CN101382884B true CN101382884B (zh) | 2010-05-19 |
Family
ID=40462741
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200710045699A Expired - Fee Related CN101382884B (zh) | 2007-09-07 | 2007-09-07 | 指令编码方法、指令编码系统及数字信号处理器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101382884B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104025042A (zh) * | 2011-12-30 | 2014-09-03 | 英特尔公司 | 编码以增加指令集密度 |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102098510B (zh) * | 2010-11-25 | 2014-07-09 | 深圳市融创天下科技股份有限公司 | 解码、编码音视频数据的方法及装置 |
CN102141903B (zh) * | 2011-03-22 | 2014-02-12 | 杭州中天微系统有限公司 | 用于16/32位混合指令的对称编码装置与译码装置 |
CN102207882B (zh) * | 2011-05-27 | 2013-07-24 | 杭州中天微系统有限公司 | 一种risc处理器应用程序编译中立即数的锚地址装载方法 |
CN102508455B (zh) * | 2011-09-26 | 2014-07-09 | 深圳市锦瑞电子有限公司 | 生化分析仪的控制方法及系统 |
CN104331269B (zh) * | 2014-10-28 | 2017-08-15 | 中国科学院自动化研究所 | 一种嵌入式系统可执行代码压缩方法及代码解压缩系统 |
US10761850B2 (en) * | 2017-12-28 | 2020-09-01 | Texas Instruments Incorporated | Look up table with data element promotion |
CN111209041B (zh) * | 2019-12-31 | 2022-05-17 | Oppo广东移动通信有限公司 | 神经网络处理器、片上系统及电子设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6189090B1 (en) * | 1997-09-17 | 2001-02-13 | Sony Corporation | Digital signal processor with variable width instructions |
US6701515B1 (en) * | 1999-05-27 | 2004-03-02 | Tensilica, Inc. | System and method for dynamically designing and evaluating configurable processor instructions |
CN1204490C (zh) * | 1998-11-13 | 2005-06-01 | 坦斯利卡公司 | 高数据密度risc处理器 |
US20050257027A1 (en) * | 2002-08-16 | 2005-11-17 | Leijten Jeroen A J | Processing apparatus, processing method and compiler |
-
2007
- 2007-09-07 CN CN200710045699A patent/CN101382884B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6189090B1 (en) * | 1997-09-17 | 2001-02-13 | Sony Corporation | Digital signal processor with variable width instructions |
CN1204490C (zh) * | 1998-11-13 | 2005-06-01 | 坦斯利卡公司 | 高数据密度risc处理器 |
US6701515B1 (en) * | 1999-05-27 | 2004-03-02 | Tensilica, Inc. | System and method for dynamically designing and evaluating configurable processor instructions |
US20050257027A1 (en) * | 2002-08-16 | 2005-11-17 | Leijten Jeroen A J | Processing apparatus, processing method and compiler |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104025042A (zh) * | 2011-12-30 | 2014-09-03 | 英特尔公司 | 编码以增加指令集密度 |
Also Published As
Publication number | Publication date |
---|---|
CN101382884A (zh) | 2009-03-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101382884B (zh) | 指令编码方法、指令编码系统及数字信号处理器 | |
US6418527B1 (en) | Data processor instruction system for grouping instructions with or without a common prefix and data processing system that uses two or more instruction grouping methods | |
EP3629157B1 (en) | Systems for performing instructions for fast element unpacking into 2-dimensional registers | |
CN107851014B (zh) | 用于转换存储器与多个向量寄存器之间的多个数据结构的设备及方法 | |
JP5844882B2 (ja) | データ要素のストライドパターンギャザーおよびデータ要素のストライドパターンスキャッタのためのシステム、装置、および方法 | |
CN101488084B (zh) | 用于执行屏蔽加载和存储操作的设备、方法和系统 | |
JP5699554B2 (ja) | ベクトル処理回路、命令発行制御方法、及びプロセッサシステム | |
US7581082B2 (en) | Software source transfer selects instruction word sizes | |
EP3757769B1 (en) | Systems and methods to skip inconsequential matrix operations | |
CN109952559B (zh) | 具有单独可选元素及成组复制的流式传输引擎 | |
JP2014510352A (ja) | レジスタをアライメントするためのシステム、装置、および方法 | |
CN105993000B (zh) | 用于浮点寄存器混叠的处理器和方法 | |
EP3343360A1 (en) | Apparatus and methods of decomposing loops to improve performance and power efficiency | |
CN102270112A (zh) | Risc微处理器指令译码电路 | |
JP2022546615A (ja) | 圧縮支援命令 | |
US7389408B1 (en) | Microarchitecture for compact storage of embedded constants | |
EP3929732A1 (en) | Matrix data scatter and gather by row | |
CN1331043C (zh) | 在移动微处理器中支持mmx指令的方法及扩展的微处理器 | |
US8898433B2 (en) | Efficient extraction of execution sets from fetch sets | |
US11449336B2 (en) | Method of storing register data elements to interleave with data elements of a different register, a processor thereof, and a system thereof | |
CN118012575A (zh) | 一种面向国产化平台的多媒体数据解包的软件模拟方法 | |
Simonen et al. | Advanced instruction set architectures for reducing program memory usage in a DSP processor | |
GB2586258A (en) | Efficient processor machine instruction handling | |
TW201017527A (en) | Instruction encoding method, instruction encoding system, and digital signal processor |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20100519 Termination date: 20120907 |