数据处理系统中的算术运算的制作方法

文档序号:6419252阅读:198来源:国知局
专利名称:数据处理系统中的算术运算的制作方法
技术领域
本发明涉及数据处理系统。更具体来说,本发明涉及用于执行适合执行饱和算术运算的算术运算的数据处理系统。
许多DSP算法使用有时被称作Q15算术和Q31算术的算术。Q15数是普通的16位的二进制补码整数(2’s complement integer),但被视为代表该整数除以215。因为一个16位的二进制补码整数能表示范围在-215至+215-1的数,所以一个Q15能表示范围在-1至+(1-2-15)的数。
类似地,Q31数是普通的32位二进制补码整数,被视为代表该整数除以231,能表示范围在-1至+(1-2-31)的数。对于任何其它值N可以类似地定义(N+1)位的QN数。
Q15和Q31算术的一个重要特点是,它们是“饱和的”。如果某运算的数学运算结果超过最大正值(+1-2-N),则该饱和结果就是该最大正值;类似地,如果数学结果小于-1,则该饱和结果就是-1。例如,在Q15算术中,如果A=0×8000(代表-1),B=0×C000(代表-0.5),则A与B相加生成的结果将是0×8000(代表-1),而不是正常的16位二进制补码结果0×4000。
在DSP算法中一个非常需要的并且经常出现的运算是“乘-累加”,即两个操作数相乘后接着加上第三个操作数结果=(A*B)+C如果希望为饱和(有时称为剪切)算术提供这种乘-累加指令,会产生严重问题。对QN数进行运算时尤其如此。
为了适应饱和及非饱和形式的各种不同类型的指令,要求有相当大的操作码位空间。此外,在寻求提供单一周期乘法性能(singlecycle multiply performance)时,不得不适应对饱和及相关调整的要求,这额外的负担使得时钟速度受最坏情况饱和乘法指令的不利限制。
从一方面来看,本发明提供的数据处理装置包含一个响应数据处理指令字而生成处理控制信号的指令译码器;和由所述处理控制信号控制的、对数据操作数字执行数据处理操作的处理逻辑;其中所述指令译码器响应一个第一指令字而生成控制信号,以控制所述处理逻辑对第一个N位数据操作数字P和第二个N位数据操作数字Q执行数据处理操作,生成如下式给出的结果N位数据字RR=Sat(Fun(p)+Q),其中Sat(X)是一个返回X的饱和值的函数;Fun(X)是一个对至少那些可以由N/2位乘以N/2位的带符号乘法生成的X值操作的函数,用于返回一个通过把X移位某移位量而生成一个移位字并饱和所述移位字而获得的值。
本发明认识到,提供适于应付饱和乘-累加运算的需要的专用指令,具有显著的优点。更具体来说,对标准的所需单一周期乘法的定时要求,因处理在随后执行累加运算的指令中使用的周期中更容易适应的运算的饱和性质所需的调整而得到缓解。新指令也能取代对-定义若干乘法指令的饱和版本,由此节省操作码位空间和支持饱和运算所需其它开销-的需要。最后,在系统内已经设置的硬件的基础上,增加少量额外的硬件就可以实现新指令,以处理不饱和和饱和运算的其它方面。
当然,用来实现新指令的硬件可采取不同的形式。可以把产生最后结果N位数据字所需的不同指令以各种不同的方式分组,由不同的电路单元执行。这些使用单一指令产生与以上给出的相同的最后值的结果N位数据字的各种不同选择方案,都是本发明的实施例。
也可以用与上述的用于饱和乘-累加运算的指令类似的方式,提供支持饱和乘-减运算的类似指令。
由本发明的指令应用的移位量可以具有各种不同的值。不过,使得被移位字是第一个N位数据操作数字P的两倍的移位量特别有用。
如果对两个Q15数进行整数乘法,正常生成的结果是个32位的“类Q30的”数-对应其的普通32位带符号二进制补码值被视为被除以230,由此表示范围在-2至+(2-2-30)的数。也可以把类Q30的数看作是有30个二进制位置的32位带符号定点数。不过,在这种情况中进行进一步处理所需的是一个Q31数。为了处理这个问题,可以在一个标准整数乘法之后执行本发明的指令,先用移位量把整数乘法的结果加倍,将其从类Q30形式变成Q31形式,再把其饱和以及进行累加或减少。
用于执行饱和的逻辑电路能采取许多不同的形式。然而,在本发明的最佳实施例中,饱和所述移位字包含检测所述第一个N位数据操作数字P的预定特征,如果检测到,就把所述移位值替换为准许值的范围的一个相应的端点值。
这个特点考虑到,在有些情况中,饱和能通过检测第一个N位数据操作数字P的特征而提供,这是因为,要对其进行的操作,是相对受限制的形式的,所以,可以具体地检测能导致要求饱和的上溢或下溢的情况,使硬件要求有总体的降低。
特别是,如果所施加的移位量使第一个N位数据操作数字P加倍,则通过比较第一个N位数据操作数字P的两个最高有效位,就能简单地检测到对饱和的需要。
与比较受限制的能导致Fun(X)指令的上溢或下溢的情况的范围相比,Sat(X)函数的上溢或下溢会更普遍地发生,所以本发明的最佳实施例要使得Sat(X)包含检测X是否在准许值的范围之外,如果检测到,则把X替换为准许值的所述范围的一个相应的端点值,以生成所述N位结果数据字R。
尽管本发明的新指令本身是有益的,如上所述,它们特别适合于其中为执行第二指令字而提供通过将第三个N/2位数据操作数字A与第四个N/2位数据操作数字B相乘生成一个生成第一个N位操作数数据字的乘法的实施例。
有可能将本发明的指令用于任何类型的操作数。然而,该指令特别适用的实施例中,所述第一个N位操作数数据字P、所述第二个N位操作数数据字Q和所述结果N为数据字R是有符号的定点数据字,该定点在最高有效位位置的右边,使得-1<=P<+1,-1<=Q<+1,-1<=R<+1,且Sat(X)的变量范围是-1<=X<+1。
如上所述,这种QN类型的操作数要求的调整和饱和,可以由本发明的指令有效地提供,而不过分地影响数据处理系统的其余部分。
第一个N位操作数数据字P的最通常的有用值是那些能由N/2位乘N/2位的符号乘法生成的值。然而,本发明的最佳实施例能扩展Fun(X)的功能,使得它能移位和饱和所有N位可能值X。
可将本发明能用于其中N有各种不同值的系统。然而,本发明对其特别有用的类型的DSP操作通常要求N的值例如是N=32。
本发明当然可以以包含分立的部件的系统的形式实现,但数据处理装置最好是以集成电路的形式实现。
从另一个方面来看,本发明提供一种处理数据的方法,所述方法包含以下步骤响应数据处理指令字,生成处理控制信号;在所述处理控制信号的控制下对数据操作数字执行数据处理操作;其中响应第一个指令字,生成控制信号,以控制所述处理逻辑对第一个N位操作数数据字P和第二个N位操作数数据字Q执行数据处理操作,以生成结果N位数据,后者由下述公式给出R=Sat(Fun(P)+Q),其中,Sat(X)是一个返回X的饱和值的函数;Fun(X)是一个对至少那些可以由N/2位乘以N/2位的带符号乘法生成的X值操作的函数,用于返回一个通过把X移位某移位量而生成一个移位字并饱和所述移位字而获得的值。
也提供了本发明的附加方法,其中,指令进行减法而不是加法运算。
现在将结合附图来说明仅作为例子的本发明的一个实施例。


图1是集成电路内的指令译码器和处理逻辑;图2、3和4是表示为支持饱和算术而提供的指令的操作的流程图。
图1表示集成电路2(类似于英国剑桥的ARM有限公司生成的ARM9TDMI微处理器的一部分)的一个局部,包含指令译码器4和处理逻辑6。处理逻辑6由许多不同、独立的功能单元组成。寄存器组8存储待处理的数据操作数字(P、Q)。这些字可以从寄存器组8读出,通过多路转换器10、12、14提供给处理逻辑6内的其它各种处理单元。提供一个整数乘法器16,用于执行带符号整数乘法以及其它功能。提供一个加法器18,用于执行不饱和乘-累加操作,并用于把乘法器的结果由进位保留转换成二进制补码格式。也提供一个移位器20和一个算术逻辑单元22。处理逻辑6的上述基本部件是普通已知的。指令译码器4发出的控制信号24被施加到处理逻辑6内的各种单元,控制和协调它们的操作。更具体来说,当指令被指令译码器解译时,控制信号24被输出,去开关处理逻辑6内部的各种多路转换器,以选择所需的数据路径,启动和配置处理逻辑6内的各种处理单元,以便执行所译码指令规定的操作。为简洁起见,图中省略了连接各个部件与指令译码器的信号线。
为了支持用于饱和算术(QDADD、QDSUB和QDRSB)的另外的指令,在算术逻辑单元22的上游设置一个移位和饱和单元26,在算术逻辑单元22运行所在的流水线阶段之后的下一个流水线阶段的通往寄存器组8的反馈路径上设置一个完全饱和单元28。操作中,移位和饱和单元26首先检查、确定它的32位的数据字输入的最高有效两位是否不相等。如果检测到这个条件,则当该输入数据字代表一个要通过左移转换成Q31字的类Q30的字时,左移一位将导致上溢或下溢。如果这两个最高有效位是“01”,则移位和饱和单元26输出代表准许值的范围的最大端点的0×7FFFFFFF。类似地,如果这两个最高有效位是“10”,则移位和饱和单元26输出代表准许值的范围的最小端点的0×80000000。如果这些条件哪一个都未检测到,则移位和饱和单元26把输入二进制值数据值左移一位-相当于将其值加倍,相应地把通过Q15与Q15数的相乘所获得的类Q30的表示转换成进一步处理(例如累加)和饱和所需的Q31表示。
移位和饱和单元26配有一个旁接通路,这样,如果被解译的特定指令不需要这种操作时,就能响应来自指令译码器4的相应控制信号24而关闭移位和饱和单元26的操作。移位和饱和单元26位于A总线上,这个总线的定时约束条件一般比B总线的少,因为B总线包含位移器20。相应地,移位和饱和单元26不引起任何其它严重的定时问题。
在返回路径上设置一个完全饱和单元28,供在算术逻辑单元22执行了所需的加法或减法后使用。完全饱和单元28能按已知的原理操作,检测由算术逻辑单元22产生的有符号结果的上溢和下溢并把它更正成准许值的范围的相应的最大或最小端点值。同移位和饱和单元26一样,完全饱和单元28也配有一个旁接通路,这样,如果不需要这种饱和时,就能响应来自指令译码器4的相应控制信号24而关闭其操作。因为完全饱和单元28位于一个一般对加法和减法指令不起作用的流水线阶段,所以该单元不增添任何定时问题。不过它要求,如果饱和指令的结果被紧接的指令使用,则处理器要联动一个周期。这个联动的处理方式,类似于许多处理器上在由加载指令加载的值被紧接的指令使用时所产生的联动。
在总体操作中,为了与一个Q31累加操作一起执行一个Q15乘以Q15的乘法,处理如下地进行。一开始把Q15值从寄存器组8读出到总线A和总线B上,作为输入发送到单周期整数乘法器16。将类Q30形式的结果,反馈到寄存器组8。在随后一个处理周期,执行新指令的其中一个(例如QDADD指令),把类Q30的乘法结果读出到A总线上,把Q31累加值读出到B总线上。然后把类Q30值左移一位,或者由移位和饱和单元26饱和,作为一个输入提供给算术逻辑单元22。把B总线上的Q31值作为另一个输入提供给算术逻辑单元22-通过用适当的控制信号24使移位器20不移位其输入值。移位和饱和单元26已经把类Q30值更正成所需的饱和Q31值,然后由算术逻辑单元22将该值与B总线上的Q31值相加。然后将算术逻辑单元22的输出提供到完全饱和单元28,在这里,通过检测来自算术逻辑单元22的上溢和下溢标志及其它标准条件,它必须得到一次Q31饱和,然后才能被存储回寄存器组8中。可以不用执行加法的算术逻辑单元22,而由适当的控制信号24控制,把QDRSB指令中的B总线值减去A总线值,或者把QDSUB指令中的A总线值减去B总线值。算术逻辑单元22根据指令译码器的适当控制信号24执行减法的配置,可以以各种标准方式实现。
根据以上叙述将看到,由QDADD、QDSUB和QDRSB指令执行的操作,已经以不同方式在处理逻辑内的各种功能单元之间被划分。本领域的熟练人员将认识到,这些操作在各种单元之间的划分,可以以不同的方式进行,而仍然产生相同的最终结果。
图2是表示在QDADD指令中执行的处理步骤流程图。在步骤40中,检测第一个32位操作数数据字的两个最高有效位是否等于“01”。如果是这样,则左移一位将导致上溢,于是用步骤42来把该值设置成最大准许正值(+1-231)。类似地,步骤44检查两个最高有效位是否等于表示左移一位将导致下溢的“10”。在这种情况下,如果检测是,则把该值设置成最小准许值-1。
如果既没有检测到上溢条件也没有检测到下溢条件,则把第一个32位操作数数据字左移一位,由此将其从类Q30的形式转换成Q31的形式。步骤40至48的操作对应于移位和饱和单元26所提供的功能和前文所述的Fun(X)功能。
在步骤50,执行一个加法。该加法对应于图1中算术逻辑单元22所执行的加法。
步骤52和54检测并处理因加法步骤50而产生的饱和值中的上溢。类似地,步骤56和58处理下溢。如果既没有检测到上溢也没有检测到下溢,则不作更正。在步骤60将QDADD指令的结果R存储回寄存器组8内的寄存器中。
步骤52至58的操作对应于图1中完全饱和单元28所提供的功能和前文所述的Sat(X)功能。
图3表示一个类似的、但是是表示QDSUB指令的流程图。在这个指令中,图2的步骤50被替换为步骤62,在该步骤中,把移位并饱和过的第一操作数数据字P减去第二32位操作数数据字Q。
图4与图3类似,但图4的步骤64中掉换了图3的步骤62中进行的减法的顺序。
权利要求
1.一种数据处理装置,包含一个响应数据处理指令字而生成处理控制信号的指令译码器;和由所述处理控制信号控制的、对数据操作数字执行数据处理操作的处理逻辑;其中所述指令译码器响应一个第一指令字而生成控制信号,以控制所述处理逻辑对第一个N位数据操作数字P和第二个N位数据操作数字Q执行数据处理操作,生成如下式给出的结果N位数据字RR=Sat(Fun(P)+Q),其中Sat(X)是一个返回X的饱和值的函数;Fun(X)是一个对至少那些可以由N/2位乘以N/2位的带符号乘法生成的X值操作的函数,用于返回一个通过把X移位某移位量而生成一个移位字并饱和所述移位字而获得的值。
2.一种数据处理装置,包含一个响应数据处理指令字而生成处理控制信号的指令译码器;和由所述处理控制信号控制的、对数据操作数字执行数据处理操作的处理逻辑;其中所述指令译码器响应一个第一指令字而生成控制信号,以控制所述处理逻辑对第一个N位数据操作数字P和第二个N位数据操作数字Q执行数据处理操作,生成如下式给出的结果N位数据字RR=Sat(Fun(P)-Q),其中Sat(X)是一个返回X的饱和值的函数;Fun(X)是一个对至少那些可以由N/2位乘以N/2位的带符号乘法生成的X值操作的函数,用于返回一个通过把X移位某移位量而生成一个移位字并饱和所述移位字而获得的值。
3.一种数据处理装置,包含一个响应数据处理指令字而生成处理控制信号的指令译码器;和由所述处理控制信号控制的、对数据操作数字执行数据处理操作的处理逻辑;其中所述指令译码器响应一个第一指令字而生成控制信号,以控制所述处理逻辑对第一个N位数据操作数字P和第二个N位数据操作数字Q执行数据处理操作,生成如下式给出的结果N位数据字RR=Sat(Q-Fun(P)),其中Sat(X)是一个返回X的饱和值的函数;Fun(X)是一个对至少那些可以由N/2位乘以N/2位的带符号乘法生成的X值操作的函数,用于返回一个通过把X移位某移位量而生成一个移位字并饱和所述移位字而获得的值。
4.如权利要求1、2、3中任一项的数据处理装置,其中,所述移位量使得所述移位字是所述第一个N位数据操作数字P的加倍。
5.如前面任一项权利要求的数据处理装置,其中,饱和所述移位字包含检测所述第一个N位数据操作数字P的预定特征,如果检测到,就把所述移位值替换为准许值的范围的一个相应的端点值。
6.如权利要求4和5的数据处理装置,其中,所述第一个N位数据操作数字P是个有符号值,所述预定特征是所述第一个N位数据操作数字P的两个最高有效位不相等。
7.如前面任一项权利要求的数据处理装置,其中,Sat(X)包含检测X是否在准许值的范围之外,如果检测到,则把X替换为准许值的所述范围的一个相应的端点值,以生成所述N位结果数据字R。
8.如前面任一项权利要求的数据处理装置,其中,所述处理逻辑包含一个乘法器,所述第一个N位操作数数据字是根据第二指令字将第三个N/2位数据操作数字A与第四个N/2位数据操作数字B进行有符号乘法而生成的乘法结果。
9.如前面任一项权利要求的数据处理装置,其中,所述第一个N位操作数数据字P、所述第二个N位操作数数据字Q和所述结果N为数据字R是有符号的定点数据字,该定点在最高有效位位置的右边,使得-1<=P<+1,-1<=Q<+1,-1<=R<+1,且Sat(X)的变量范围是-1<=X<+1。
10.如前面任一项权利要求的数据处理装置,其中,Fun(X)是个对所有N位值X操作的函数,用于返回一个通过把X移位某移位量而生成一个移位字并饱和所述移位字而获得的值。
11.如前面任一项权利要求的数据处理装置,其中,N=32。
12.如前面任一项权利要求的数据处理装置,其中,所述数据处理装置包含一个集成电路。
13.一种数据处理方法,所述方法包含响应数据处理指令字,生成处理控制信号;和在所述处理控制信号控制下,对数据操作数字执行数据处理操作;其中响应一个第一指令字而生成控制信号,以控制所述处理逻辑对第一个N位数据操作数字P和第二个N位数据操作数字Q执行数据处理操作,生成如下式给出的结果N位数据字RR=Sat(Fun(P)+Q),其中Sat(X)是一个返回X的饱和值的函数;Fun(X)是一个对至少那些可以由N/2位乘以N/2位的带符号乘法生成的X值操作的函数,用于返回一个通过把X移位某移位量而生成一个移位字并饱和所述移位字而获得的值。
14.一种数据处理方法,所述方法包含响应数据处理指令字,生成处理控制信号;和在所述处理控制信号控制下,对数据操作数字执行数据处理操作;其中响应一个第一指令字而生成控制信号,以控制所述处理逻辑对第一个N位数据操作数字P和第二个N位数据操作数字Q执行数据处理操作,生成如下式给出的结果N位数据字RR=Sat(Fun(P)-Q),其中Sat(X)是一个返回X的饱和值的函数;Fun(X)是一个对至少那些可以由N/2位乘以N/2位的带符号乘法生成的X值操作的函数,用于返回一个通过把X移位某移位量而生成一个移位字并饱和所述移位字而获得的值。
15.一种数据处理方法,所述方法包含响应数据处理指令字,生成处理控制信号;和在所述处理控制信号控制下,对数据操作数字执行数据处理操作;其中响应一个第一指令字而生成控制信号,以控制所述处理逻辑对第一个N位数据操作数字P和第二个N位数据操作数字Q执行数据处理操作,生成如下式给出的结果N位数据字RR=Sat(Q-Fun(P)),其中Sat(X)是一个返回X的饱和值的函数;Fun(X)是一个对至少那些可以由N/2位乘以N/2位的带符号乘法生成的X值操作的函数,用于返回一个通过把X移位某移位量而生成一个移位字并饱和所述移位字而获得的值。
全文摘要
在总体操作中,为了与一个Q31累加操作一起执行一个Q15乘法,处理如下进行:一开始把Q15值从寄存器组(8)读到总线A和总线B,作为输入发送到单周期整数乘法器(16)。将类Q30形式的结果,反馈到寄存器组(8)。在随后一个处理周期,执行新指令的其中一个(例如QDADD指令),把类Q30的乘法结果读到A总线,把Q31累加值读到B总线。然后把类Q30值左移一位,或者由移位和饱和单元(26)进行饱和,作为一个输入提供给算术逻辑单元(22)。
文档编号G06F7/544GK1326565SQ9981352
公开日2001年12月12日 申请日期1999年5月26日 优先权日1998年11月20日
发明者D·J·西尔 申请人:Arm有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1