执行饱和乘法和饱和乘加运算的算术处理单元及方法

文档序号:6349636阅读:876来源:国知局
专利名称:执行饱和乘法和饱和乘加运算的算术处理单元及方法
技术领域
本发明大体上涉及数据处理装置,确切地说,涉及算术处理装置。
背景技术
数据处理装置可包括专门的算术处理单元,如整数或浮点处理装置。算术处理单元尤其适用于执行与图形处理、数字信号处理和科学应用相关的任务。算术处理单元通常执行指令,其中一项指令与特定数学计算相关。例如,算术处理单元可包括一些指令,以执行算术运算,如乘法、加法、乘加、矩阵计算等。算术处理单元通常 使用二进制浮点格式、二进制整数格式或两种格式的组合来表示数字。浮点数字和整数数字均具有相关精度,并可表示由用于表示数字的二进制位数确定的特定范围的值。算术处理单元可使用饱和运算来表示超出支持范围的数学运算结果。饱和运算是算术的一种,其算术运算结果限制于最小值和最大值之间的固定范围内。此外,如果运算结果大于最大值,即称为上溢的条件发生,那么算术处理单元会提供与可表示的最大值对应的结果。如果运算结果小于最小值,即称为下溢的条件发生,那么算术处理单元会提供与可表示的最小值对应的结果。使用饱和运算可降低在计算结果造成上溢条件或下溢条件发生时可能出现的错误的严重性。例如,算术处理单元不使用饱和即可在计算结果上溢出支持范围时提供负值结果。但不幸的是,如果检测到已发生饱和,由此算术处理单元可提供正确的饱和结果,那么这可能会对该单元的计算性能产生不利影响。这对于其中结果大小(二进制位数,用于表示某个数字)限制为与被乘数、乘数或加数相同的乘加运算尤其如此。


通过参考附图可更深入地理解本发明,且所属领域一般技术人员可显而易见地了解本发明的许多特征和优点,其中图I所示为可根据已知技术执行饱和运算的传统算术处理单元的方框图;图2所示为根据本发明的一项实施例的可执行饱和运算的算术处理单元的方框图;图3所示为图2所示偏差产生器的局部示意图和局部方框图;图4所示为根据本发明的另一项实施例的可执行饱和运算的算术处理单元的方框图;图5所示为图4所示偏差加数产生器的局部示意图和局部方框图;以及图6所示为根据本发明的又一项实施例的可对压缩的操作数执行饱和运算的算术处理单元的方框图。在不同附图中使用相同的参考标号表示类似或相同的物品。为清楚起见,相同的名称指代信号、传输信号的节点和信号所表示的信息。
具体实施例方式图I所示为可根据已知技术执行饱和运算的传统算术处理单元100的方框图。算术处理单元100通过将两个操作数相乘得到乘积,然后将乘积与第三个操作数相加得到中间结果来执行乘加运算。饱和检测电路接收中间结果,并提供最终计算结果。算术处理单元100包括标记为“A”的被乘数操作数112、标记为“B”的乘数操作数114、标记为“C”的加数操作数116、提供中间结果的乘加模块120以及提供标记为“RESULT”的最终结果的饱和模块190。乘加模块120具有用于接收操作数112的第一输入端、用于接收操作数114的第二输入端、用于接收操作数116的第三输入端以及输出端。饱和模块190具有与乘加模块120的输出端连接的输入端和用于提供信号RESULT的输出端。算术 处理单元100还可通过将之前计算出的乘加结果作为随后的乘加运算中的加数来执行乘加运算。算术处理单元100接收操作数A、B和C,这三个操作数均为16位有符号整数。乘加模块120提供的中间结果包括附加位,用于精确表示乘加运算的结果。在图I所示的本实例中,饱和模块190提供的最终结果是32位有符号整数。饱和模块190检测乘加模块120提供的中间结果的值是否超过32位有符号整数可表示的范围,即称为上溢或下溢的条件。如果发生上溢,那么饱和模块190会产生表示32位有符号正整数最大值的信号RESULT,其二进制表示为01111. .. 1111。如果发生下溢,那么饱和模块190会产生表示32位有符号负整数最小值的信号RESULT,其二进制表示为100. . . 0000。如果乘加模块120提供的中间结果在支持范围内,那么饱和检测模块190会提供输出时未更改的中间结果。饱和模块190根据每个操作数的相应符号和中间结果的符号来确定上溢或下溢条件是否发生。但是,如果最终结果表示限制为16位有符号整数,那么饱和模块190中的运算就更为复杂和耗时。因此,算术处理单元100的计算性能会降低。乘加运算的上溢和下溢根据运算的最终结果进行确定。因此,执行饱和乘加运算在数学上并不等同于先执行饱和乘法运算,再执行饱和加法运算。例如,乘法运算本身所产生的乘积超过支持范围,但加上加数则可能使最终乘加结果返回至可由受支持的二进制位数表示的值。乘加运算存在以下四种情况1)乘法运算的乘积超过所分配用于表示结果的位数,且加上加数不会使最终结果返回到支持范围内;2)乘法运算的乘积超过所分配用于表示结果的位数,但加上加数会使最终结果返回到支持范围内;3)乘法运算的乘积未超过所分配用于表示结果的位数,但加上加数所得到的值超过支持范围;以及4)乘法运算未超过所分配用于表示结果的位数,但加上加数所得到的值未超过支持范围。图2所示为根据本发明的一项实施例的可执行饱和运算的算术处理单元200的方框图。算术处理单元200执行乘加运算,并包括用于提供偏差值的偏差产生器。将偏差值、中间乘积和加数操作数相加,这样,可快速执行的简单多路复用运算就可替代由图I所示饱和模块190执行的复杂且耗时的函数,且不会像图I所示算术处理单元100那样大大延迟结果。算术处理单元200包括标记为“A”的被乘数操作数212、标记为“B”的乘数操作数214、标记为“C”的加数操作数216、乘法器220、偏差产生器240、扩展逻辑250、加法器230以及输出选择电路260。乘法器220具有用于接收操作数212的第一输入端、用于接收操作数214的第二输入端、用于提供标记为“CARRY”的信号的第一输出端,以及用于提供标记为“SUM”的信号的第二输出端。偏差产生器240具有用于接收与操作数212的符号对应且标记为“SIGNA”的信号的第一输入端,用于接收与操作数214的符号对应且标记为“SIGNB”的信号的第二输入端,用于提供标记为“BIAS”的信号的输出端,以及用于提供表示操作数212与操作数214的乘积符号且标记为“SIGN PROD”的信号的输出端。扩展逻辑250具有用于接收操作数216的第一输入端,以及用于提供标记为“CEXT”的信号的输出端。加法器230具有用于接收信号CARRY的第一输入端,用于接收信号SUM的第二输入端,用于接收信号BIAS的第三输入端,用于接收信号CEXT的第四输入端,以及用于提供标记为“IR”的中间结果的输出端。选择电路260具有用于接收中间结果信号IR的第一输入端,用于接收信号SIGNPR0D的第二输入端,以及用于提供标记为“RESULT”的最终结果的输出端。操作数212、214和216均为16位有符号整数。乘法器220接收操作数212和操作数214,然后以信号CARRY所表示的32位进位值,以及信号SUM所表示的32位总和值的形式提供乘积。 偏差产生器240根据被乘数操作数212与乘数操作数214的乘积符号来提供由信号BIAS表不的偏差值。乘积符号根据信号SIGNA和信号SIGNB所表不的每个操作数的符号进行确定。信号BIAS包括32位的信息,其中17个高阶位是有效位,15个低阶位均为零位。扩展逻辑250对加数操作数216进行符号扩展,以提供32位信号CEXT,从而与信号SUM、CARRY和BIAS中每个信号的相关位数对应。加法器230将32位偏差值(信号BIAS)、经符号扩展的32位加数(信号CEXT)和两个32位乘法结果(信号CARRY和信号SUM)相加,然后提供信号IR所表示的32位中间结果。在一项实施例中,加法器230包括一个或多个进位存储加法器(CSA)级和最终进位传递加法器(CPA)。在另一项实施例中,加法器230上包括的CSA级可与乘法器220中包括的CSA级进行共享。因此,32位偏差值和经符号扩展的加数可添加(压缩)到乘法器220中包括的一个或多个CSA级中。如果任何结果超过16位有符号整数的相关范围,但在32位有符号整数的范围内,那么偏差值会强制此类结果提供信号IR所表示的32位中间结果的上溢或下溢指示。具体而言,16位有符号整数的上溢或下溢可只根据32位中间结果的符号以及操作数212和214的乘积符号来确定。输出选择电路260通过操作数212和操作数214的乘积符号,其由信号SIGN PROD表示,中间结果的符号,其由信号IR的最高有效位表示,来确定乘加运算是否产生上溢或下溢条件。由于中间结果加入了偏差值,因此输出选择电路260可根据32位中间结果较为容易地检测出与所需的16位结果对应的上溢和下溢条件。如果操作数212和操作数214的乘积符号为一(负),中间结果的符号为零(正),则发生下溢,且输出选择电路260将信号RESULT设为以16位有符号整数表示的最小负值,其二进制表示为1000 0000 0000 0000。如果操作数212和操作数214的乘积符号为零(正),中间结果的符号为一(负),则发生上溢,且输出选择电路260将信号RESULT设为以十六位有符号整数表示的最大正值,其二进制表示为0111 1111 1111 1111。如果上溢和下溢均未发生,则输出选择电路260根据中间结果的一部分来提供输出结果。具体而言,未发生饱和时,最终结果等于位15反转后信号IR所表示的中间结果的16个低阶位。图3所示为图2所示偏差产生器240的局部示意图和局部方框图。偏差产生器240包括负偏差值242、正偏差值244、异或非门/同或门246和多路复用器248。异或非门/同或门246具有用于接收信号SIGN A的第一输入端、用于接收信号SIGN B的第二输入端和用于提供信号SIGN PROD的输出端。多路复用器248具有用于接收负偏差值242的第一数据输入端、用于接收正偏差值244的第二输入端、用于接收信号SIGN PROD的控制输入端和用于提供信号BIAS的输出端。如果信号SIGN PROD处于逻辑高电平(负),那么多路复用器248选择负偏差值242,然后产生带有如下二进制值的信号BIAS 1000 0000 0000 0000 1000 0000 0000 0000如果信号SIGN PROD处于逻辑低电平(正 ),那么多路复用器248会选择正偏差值244,然后产生带有如下二进制值的信号BIAS 0111 1111 1111 1111 1000 0000 0000 0000图4所示为根据本发明的一项实施例的可执行饱和运算的算术处理单元400的方框图。算术处理单元400可执行乘加运算。与图2所示算术处理单元200不同,算术处理单元400将偏差产生器240和扩展逻辑250的函数组合到单个模块中,从而形成标记为“BIASED ADDEND”的偏差加数。算术处理单元400包括标记为“A”的被乘数操作数412、标记为“B”的乘数操作数414、标记为“C”的加数操作数416、包括布斯(Booth)编码器422和CSA阵列424的乘法器模块420、偏差加数产生器440、包括3:2压缩器432和进位传递加法器434的加法器430,以及包括最小饱和值462、最大饱和值464、多路复用器466、反相器450和选择逻辑468的输出选择电路460。乘法器420具有用于接收操作数412的第一输入端、用于接收操作数414的第二输入端、用于提供标记为“CARRY”的信号的第一输出端和用于提供标记为“SUM”的信号的第二输出端。偏差加数产生器440具有用于接收与操作数412的符号对应且标记为“SIGNA”的信号的第一输入端,用于接收与操作数414的符号对应且标记为“SIGN B”的信号的第二输入端,用于接收标记为“ADDEND”的信号所表示的加数操作数416的输入端,用于提供标记为“BIASED ADDEND”的信号的第一输出端,以及用于提供与操作数412和操作数414的乘积符号对应且标记为“SIGN PROD”的信号的第二输出端。加法器430具有第一输入端,用于接收信号CARRY ;第二输入端,用于接收信号SUM ;第三输入端,用于接收信号BIASEDADDEND ;第一输出端,用于提供标记为“IR”的中间结果,该中间结果与CPA 434提供的32位中间结果中16个最低有效位对应;以及第二输出端,用于提供标记为“SIGN IR”的信号,该信号与CPA 434所提供的32位中间结果的符号对应。反相器450具有输入端,用于接收信号IR的位15 ;以及输出端。多路复用器466具有用于接收最小饱和值462的第一输入端、用于接收最大饱和值464的第二输入端、用于接收16位非饱和结果的第三输入端、用于接收标记为“SELECT”的信号的控制输入端和用于提供标记为“RESULT”的输出端。16位非饱和结果的最高有效位由反相器450提供,16位非饱和结果的位14到零位由信号IR提供(14:0)。选择逻辑468具有用于接收信号SIGN IR的第一输入端、用于接收信号SIGN PROD的第二输入端和用于向多路复用器466提供信号SELECT的输出端。操作数412、414和416均为16位有符号整数。乘法器420接收操作数412和操作数414,并以信号CARRY所表示的32位进位值,以及信号SUM所表示的32位总和值的形式提供乘积。在称作布斯(Booth)重编码的过程中,乘法器420使用布斯(Booth)编码器422来提供部分乘积。CSA阵列424在连续CSA级中将这些部分乘积减少至两个部分乘积,以提供信号CARRY和SUM。偏差加数产生器440产生偏差值,并将该偏差值与加数操作数416合并,从而提供32位信号BIASED ADDEND。下文将参考图5进一步说明偏差加数产生器440的运算。压缩器432接收信号CARRY、SUM和BIASED ADDEND,然后向CPA 434提供32位进位信号和32位总和信号所表示的相应值的总和。CPA434将压缩器432所产生的进位/总和表示转换成由单个32位二进制整数表示的结果,然后通过信号IR向多路复用器466提供该值中16个最低有效位。如果选择模块468 确定上溢和下溢条件未发生,则信号IR所表示的值等于乘加计算的最终结果。多路复用器466和选择模块468的运算与参考图2的输出选择电路260描述的相同,其他详情如下所示。如果选择模块468检测到上溢条件,那么选择模块468会通过信号SELECT配置多路复用器466,以通过信号RESULT提供最大饱和值464作为最终结果。如果选择模块468检测到下溢条件,那么选择模块468会配置多路复用器466,以通过信号RESULT提供最小饱和值462作为最终结果。如果选择模块468未检测到上溢和下溢条件,那么选择模块468会配置多路复用器466,以提供非饱和结果作为最终结果。图5所示为图4所示偏差加数产生器440的局部示意图和局部方框图。偏差加数产生器440组合由图2的偏差产生器240和扩展逻辑250执行的运算,以提供单个偏差加数,而非提供偏差值和单独的经符号扩展的加数。此特征可使加法器430只计算三个值的总和,而图2的加法器230必须计算四个值的总和。偏差加数产生器440包括第一偏差值510、第二偏差值520、第三偏差值530、第四偏差值540、异或非门/同或门550和多路复用器560。异或非门/同或门550具有用于接收信号SIGN A的第一输入端、用于接收信号SIGN B的第二输入端和用于提供信号SIGNPROD的输出端。多路复用器560具有用于接收偏差值510的第一数据输入端,用于接收偏差值520的第二数据输入端,用于接收偏差值530的第三数据输入端,用于接收偏差值540的第四数据输入端,用于接收信号SIGN PROD的第一控制输入端,用于接收表示加数操作数416的符号且标记为“SIGN C”的信号的第二控制输入端,以及用于提供标记为“BIAS”的信号的输出端。信号BIAS是17位二进制值,且提供32位信号BIASED ADDEND中17个高阶位部分。信号BIASEDADDEND中15个最低有效位根据信号ADDEND中的15个最低有效位来确定。偏差加数产生器的运算如下表所示
权利要求
1.一种乘加器(400),其包括 乘法器(420),其具有用于接收第一操作数和第二操作数的第一输入端和第二输入端、用于提供总和信号的第一输出端,以及用于提供进位信号的第二输出端; 偏差加数产生器(440),其具有用于接收所述第一操作数和所述第二操作数的符号位的第一输入端和第二输入端、用于接收第三操作数的第三输入端、用于提供偏差加数信号的第一输出端,以及用于提供表示所述第一操作数和所述第二操作数的乘积符号的信号的第二输出端; 加法器(430),其具有耦接到所述乘法器的所述第一输出端和所述第二输出端的第一输入端和第二输入端、用于接收所述偏差加数信号的第三输入端,以及用于提供表示所述第一输入端、所述第二输入端和所述第三输入端总和的信号的输出端; 多路复用器(466),其具有耦接到所述加法器的所述第一输出端的第一输入端、用于接收最小饱和值的第二输入端、用于接收最大饱和值的第三输入端、控制输入端,以及使用饱和信号提供乘加结果的输出端;以及 选择逻辑(468),其具有耦接到所述偏差产生器的所述第二输出端的第一输入端、用于接收表示所述总和的符号的信号的第二输入端,以及耦接到所述多路复用器的所述控制输入端的输出端。
2.根据权利要求I所述的乘加器(400),其中所述乘法器的表征为使用布斯(Booth)重编码(422)的进位存储乘法器阵列(424)。
3.根据权利要求I所述的乘加器(400),其中所述偏差加数信号包括与所述总和信号和所述进位信号相同的位数。
4.根据权利要求1、2、3和5所述的乘加器(400),其中所述第一操作数、所述第二操作数和所述第三操作数均包括有符号整数。
5.根据权利要求3所述的乘加器(400),其中所述偏差加数产生器(440)包括 逻辑门(550),其具有第一输入端,用于接收所述第一操作数的符号位;第二输入端,用于接收所述第二操作数的符号位;以及输出端,用于提供表示所述第一操作数和所述第二操作数的所述乘积的所述符号的符号信号;以及 多路复用器(560),其具有用于接收第一偏差的第一输入端、用于接收第二偏差的第二输入端、用于接收第三偏差的第三输入端、用于接收第四偏差的第四输入端、耦接到所述逻辑门的所述输出端的第一控制输入端、用于接收所述第三操作数的所述符号的第二控制输入端,以及耦接到用于提供所述偏差加数信号的所述加法器的所述第三输入端的输出端。
6.根据权利要求1、2、3和5所述的乘加器(400),其中所述第一操作数和所述第二操作数包括已压缩的操作数,且所述乘加器包括可产生类似多个饱和结果的多个部分。
7.一种算术处理单元(200),其包括 乘法器(220),其用于提供表示第一操作数和第二操作数乘积的总和信号和进位信号; 加法器(230),其用于提供表示所述总和信号、所述进位信号和偏差信号总和的中间结果信号; 偏差产生器(240),其用于提供具有由所述第一操作数和所述第二操作数的乘积符号确定的值的所述偏差信号;以及输出选择电路(260),其响应于所述乘积的所述符号和所述中间结果的符号,选择所述加法器的所述第一输出信号的一部分、最小饱和值和最大饱和值中的一个。
8.根据权利要求7所述的算术处理单元(200),其中所述加法器根据经符号扩展的加数进一步提供所述中间结果信号。
9.根据权利要求8所述的算术处理单元(200),其进一步包括符号扩展逻辑(250),用于对第三操作数进行符号扩展,以提供所述经符号扩展的加数。
10.根据权利要求7、8、9、11和13所述的算术处理单元(200),其中所述第一操作数、所述第二操作数和所述第三操作数均包括有符号整数。
11.根据权利要求9所述的算术处理单元(200),其中所述偏差产生器(240)响应于所述第一操作数和所述第二操作数的所述乘积的所述符号,提供负偏差和正偏差中的一个作为所述偏差号。
12.根据权利要求7、8、9、11和13所述的算术处理单元(200),其中所述第一操作数(612)和所述第二操作数(614)包括已压缩的操作数,且算术处理单元包括可产生类似多个饱和结果(618)的多个部分。
13.根据权利要求7所述的算术处理单元(200),其中所述输出选择电路(260、460)进一步反转(450)所述第一输出信号的所述部分的最高有效位。
14.一种方法,其包括 形成表示第一操作数(212)和第二操作数(214)的乘积的总和信号和进位信号; 形成具有由所述第一操作数和所述第二操作数的乘积符号确定的值的偏差信号(240); 响应于所述总和信号、所述进位信号、经符号扩展的加数和所述偏差信号的相加(230),提供第一输出信号;以及 响应于所述乘积的所述符号和所述第一输出信号的符号,在所述第一输出信号的一部分、最小饱和值(462)和最大饱和值(464)中选择一个作为最终结果。
15.根据权利要求14所述的方法,其中形成所述总和信号和所述进位信号进一步包括使用进位存储乘法器阵列(424)和布斯(Booth)重编码(422)来形成所述总和信号和所述进位信号。
16.根据权利要求14所述的方法,其进一步包括对第三操作数(216)进行符号扩展(250),以匹配所述总和信号和所述进位信号中每个信号的位大小。
17.根据权利要求16所述的方法,其中形成所述偏差信号进一步包括响应于以下方面形成所述偏差信号 所述第一操作数(212)的符号位, 所述第二操作数(214)的符号位, 根据所述第一操作数和所述第二操作数来确定所述乘法运算的所述乘积的所述符号;以及 根据所述乘积的所述符号选择(248)负偏差(242)或正偏差(244)。
18.根据权利要求14、15、16和17所述的方法,其中所述最终结果包括与所述第三操作数相同的二进制位数。
19.根据权利要求14所述的方法,其中形成所述总和信号和所述进位信号包括形成已压缩的总和信号和已压缩的进位信号,此类信号可表示所述第一已压缩的操作数和所述第二已压缩的操作数的乘积。
20.根据权利要求14、15、16和17所述的方法,其中提供所述第一输出信号包括提供所述第一输出信号作为所述总和信号、所述进位信号、所述经符号扩展的加数和所述偏差信号的总和,且其中所述最终结果所包括的二进制位数少于所述总和的二进制位数。
全文摘要
形成表示第一操作数(212)和第二操作数(214)的乘积的总和信号和进位信号。形成(240)具有由所述第一操作数和所述第二操作数的乘积符号确定的值的偏差信号。根据所述总和信号、所述进位信号、经符号扩展的加数和所述偏差信号的相加(230),提供输出信号。根据所述乘积的所述符号和所述输出信号的符号,在所述输出信号的一部分、最小饱和值(462)或最大饱和值(464)中选择一个作为最终结果。
文档编号G06F7/499GK102804128SQ201080026278
公开日2012年11月28日 申请日期2010年5月24日 优先权日2009年5月27日
发明者凯文·A·赫德, 斯科特·A·希尔克 申请人:超威半导体公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1