用于执行十进制除法的系统和方法

文档序号:6554491阅读:228来源:国知局
专利名称:用于执行十进制除法的系统和方法
技术领域
本发明涉及十进制除法(decimal division),更具体地说,涉及对于二进制编码十进制数(BCD)格式的两个十进制运算数(operand)的十进制除法。
背景技术
过去,利用编程计算机进行长除法的简单方法从被除数中减去除数,直到减法运算的结果为负值为止。减法的次数减1得到商。通过把除数与负的结果相加,确定除法的余数。
另一方面,反复从包含被除数的若干相同前导数位的一部分被除数中减去除数。如果第一次减法为负,那么从若干相同的前导被除数数位加1中减去除数。否则,一旦减法的结果为负,那么不进行进一步的减法,除数被加入到为负的结果中,从而获得余数。减法的次数减1构成商的第一位。在从余数中减去除数,并通过添加原始被除数的其它数位以等于除数数位的数目来修改除数的情况下,重复该过程。这种减法的数目减1被附加为商的下一位。这种确定除法运算的商的改进方法仍然费时,因为当用相对较小的除数去除大的被除数时,必须进行大量的减法运算。
另一种方法称为非复原(non-restoring)除法算法。非复原除法算法产生保存的倍数,并进行重复减法来计算商。一般来说,进行非复原除法算法分四部分1)商选择;2)除数倍数产生;3)从先前的余数中减去除数倍数,形成新的余数;和4)商累积。对于十进制除法,用于典型的非复原除法算法的商逻辑的规模可能变得很大,并且所述逻辑可能过大,以致不能在性能和空间要求内实现。最理想的是能够按照更有效的方式进行非复原十进制除法。

发明内容
本发明的例证实施例包括一种执行十进制除法的方法。所述方法包括接收缩放的除数和被除数,并存储缩放的除数的倍数(multiple)子集。累积商被初始化成等于0,第一个当前余数被初始化成等于缩放的被除数,第二个当前余数被初始化成等于缩放的被除数减去缩放的除数。执行下述操作,直到产生选定数目的商位(quotient digit)为止。根据第一个当前余数的第一位计算估计的下一商位。根据估计的下一商位,临时余数被选择成第一个当前余数或第二个当前余数。通过从临时余数中减去存储的倍数之一,计算第一个下一余数,其中根据第一个当前余数的第一位选择存储的倍数。通过从临时余数中减去另一个存储的倍数,计算第二个下一余数,其中根据第一个当前余数的第一位和第二位选择所述另一个存储的倍数。根据估计的下一商位、第一个当前余数和第一个下一余数,计算实际的商位。用实际的下一商位更新累积的商。最后,第一个当前余数被设置成等于第一个下一余数,第二个当前余数被设置成等于第二个下一余数。
另外的例证实施例包括一种执行十进制除法的系统。所述系统包括保存缩放的除数和缩放的被除数的输入寄存器,两周期加法器,和多个倍数寄存器,用于存储缩放的除数的倍数子集。所述系统还包括响应缩放的除数和缩放的被除数,计算商位的流水线机构,其中用三个时钟周期计算每个商位。所述计算包括选择新的商位,并利用两周期加法器计算新的余数。给所述两周期加法器的输入包括出自缩放除数寄存器的一个或多个倍数的数据。
另外的例证实施例包括一种执行十进制除法的系统。所述系统包括保存缩放的除数和缩放的被除数的输入寄存器,两周期加法器,和多个倍数寄存器,用于存储缩放的除数的倍数子集。所述系统还包括把缩放的除数和被除数接收到输入寄存器中,并把缩放的除数的倍数子集保存到倍数寄存器中的机构。累积商被初始化成等于0,第一个当前余数被初始化成等于缩放的被除数,第二个当前余数被初始化成等于缩放的被除数减去缩放的除数。执行下述操作,直到产生选定数目的商位为止。根据第一个当前余数的第一位计算估计的下一商位。根据估计的下一商位,临时余数被选择成第一个当前余数或第二个当前余数。通过从临时余数中减去存储的倍数之一,利用两周期加法器计算第一个下一余数,其中根据第一个当前余数的第一位选择存储的倍数。通过从临时余数中减去另一个存储的倍数,利用两周期加法器计算第二个下一余数,其中根据第一个当前余数的第一位和第二位选择所述另一个存储的倍数。根据估计的下一商位、第一个当前余数和第一个下一余数,计算实际的商位。用实际的下一商位更新累积商。最后,第一个当前余数被设置成等于第一个下一余数,第二个当前余数被设置成等于第二个下一余数。
通过本发明的技术,实现其它特征和优点。这里详细说明了本发明的其它实施例和方面,所述其它实施例和方面被看作要求保护的本发明的一部分。为了在优点和特征方面更好地理解本发明,参见下面的说明和附图。


当说明书完结时,在权利要求中特别指出并且明确主张被认为是本发明的主题。结合附图,根据下面的详细说明,本发明的前述及其它目的,特征和优点是明显的,其中图1是本发明的例证实施例利用的十进制除法过程的流程图;图2是本发明的例证实施例用于计算商位的表;图3是本发明的例证实施例用于选择商位的表;图4描述根据本发明的例证实施例被流水线化的十进制除法;图5是本发明的例证实施例可用于执行十进制除法的电路的方框图;详细说明将参考附图,举例说明本发明的优选实施例,以及优点和特征。
具体实施例方式
本发明的例证实施例包括结合关于二进制的一些公知程序和关于十进制的一些新思想,从而产生高速实现的十进制除法算法。以前的实现产生存储的倍数,并进行重复减法来计算商。如上所述,进行非复原除法算法分四部分1)商选择;2)除数倍数产生;3)从先前的余数中减去除数倍数,形成新的余数;4)商累积。本发明的例证实施例利用公知的技术来简化商选择,但是减小创建除数倍数的硬件区。另外,本发明的例证实施例把创新的技术用于累积商的传输中(on the fly)校正。
存在两三种公知的商选择技术。选择的商估计值是部分余数和除数的函数,在本发明的例证实施例中出自集合{-9,-8,-7,-6,-5,-4,-3,-2,-1,0,+1,+2,+3,+4,+5,+6,+7,+8,+9}。对于多数处理器来说,直接实现所需的查寻表太大,以致不能实现。本发明的例证实施例利用称为预先缩放(pre-scaling)的技术。预先缩放除数和被除数的表规模小得多。在预先缩放的除法中,依据“1/除数”的近似值缩放除数和被除数。借助一个两位的索引(index)和一个两位的预先比例系数(pre-scale),能够把除数缩放到大于或等于1.0并且小于1.1(即,1.0≤除数<1.1)。当除数局限于该范围时,商近似等于部分余数的最高有效位。从而,商选择逻辑非常简单和快速,不需要独立的查寻表。部分余数的最高有效位变成下次迭代的商选择。
本发明的例证实施例减少了不得不保存或创建的除数的倍数的数目。和用于基(radix)2的Booth再编码类似的再编码技术被用于对基10商再编码。再编码技术的这种新应用只需要保存从0-5的倍数,而不是保存从0-9的所有倍数。另外,商累积技术便于保持精确截断的商(truncated quotient)。
图1是本发明的例证实施例用于执行等式商(Q)=被除数(N)/除数(D)的十进制除法过程的流程图。在步骤102,利用查寻表缩放除数(D),以便得到为“1/D”的近似值的值“T”。在本发明的例证实施例中,查寻表由D的前两位索引。T*D的结果在下述范围内1.0≤T*D<1.1。另外,在步骤102,被除数(N)也按T被预先缩放(即N<-T*N)。在步骤104,预先缩放的除数的倍数被保存。保存的倍数包括1D、2D、3D、4D和5D。对于负的倍数,进行加法运算而不是减法运算。在图1的步骤106,第一个余数(Ri)(这里也称为第一个当前余数)被设置成预先缩放的被除数的值。另外在图1中的步骤106,第二个余数(R′i)(这里也称为第二个当前余数)被设置成预先缩放的被除数减去预先缩放的除数的值。
在图1中的步骤108,商(Qi)的第一位的值的估计值(这里也称为估计的下一商位)被设置成第一个余数(Ri)的最高有效位。根据Qi的值和图2中描绘并且下面说明的表,选择余数和倍数以便在步骤110计算下一余数。即,Rtemp(这里也称为临时余数)被设置成Ri或R′i,q被设置成0,1,2,3,4或5。在步骤112,第一个下一余数Ri+1被计算成Ri-q*D,其中q*D等于保存的倍数之一。另外在步骤112,第二个下一余数R′i+1被计算成Ri-(q+/-1)*D,其中(q+/-1)*D等于保存的倍数之一。在断定是使用+1还是-1方面存在一定的复杂性。图2中描绘并且下面说明的表被用于根据Ri的值和符号,确定是利用q+1还是q-1来计算R′i+1。
在步骤114,根据Qi的符号和Ri+1的符号,计算截断的商位(这里也称为实际的下一商位)的值。下面描述的图3描绘如何计算截断的商位。累积商(Q)随后被左移一位,截断的商位被插入累积商的最低有效位。在步骤116,当前余数被设置成等于下一余数。即,Ri<-Ri+1,R′i<-R′i+1。随后在步骤108继续进行处理。继续从步骤108到步骤116的该循环,直到产生所需数目的商位为止。所需数目的商位可以预先选择和/或以可用于保存商的二进制位的数目为基础。
图2是本发明的例证实施例用于计算商位的表。第i次迭代的余数的最高有效位被用于选择商,如图2中表中所示。第一列(被标记为R)表示十进制带符号格式的余数,第二列(被标记为二进制)表示该十进制带符号数位的二进制表示。第三列(被标记为q)表示在图1中的步骤108中用于计算Ri+1的商选择。注意该十进制位被再编码成包含{-5,-4,-3,-2,-1,0,+1,+2,+3,+4,+5}的数位集合。从而,下两列(被标记为qh和ql)表示呈该再编码格式的商的两位表示。第一位被用10加权,第二位被用1加权。如果第一位为0,那么Rtemp等于Ri,否则它等于R′i。
一个例子是+9现在由对(+1,-1)表示,其中第一位中的+1表示+10,第二位中的-1表示-1。+10和-1的和为+9。迭代A计算第一个余数Ri+1,等于(Ri-QiD),迭代B计算第二个余数R′i+1,等于(Ri-(Qi+1)D)。为了应用为+9的商估计值,会选择来自在先迭代(即R′i)的迭代B的结果,因为它应用如对应于“+9”行的qh列中的“1”所指示的Q+1。-1的商估计值会被选择,-1*D的倍数会从R′i中被减除。注意在先迭代中的Q+1表现为当前迭代中的Q+10,因为迭代按10的不同次幂被加权。选择在先迭代中的Q+1和当前迭代中的Q=-1等同于从R中减去9*D。在本发明的例证实施例中,介于6*D和9*D之间的倍数不需要,并且不需要被计算或保存。
第六列(被标记为迭代B)表示对于R′计算应选择哪个商。商将是为迭代A选择的商加1或减1。当第i次迭代的余数介于6和9之间,或者介于-6和-9之间时,需要检查该余数的更多位。需要检查余数的下一位以查看其是小于5,还是大于或等于5。因此,需要检查该余数的两位,不过在迭代A的创建R的关键路径中只检查一位,在迭代B的创建R′的关键路径中检查两位。
图3是本发明的例证实施例用于选择截断商位的表。即使非复原算法产生再编码数位集合中的舍入商,也产生截断商。通过检查要累积的估计商位的符号和余数的符号,可根据四种可能性确定截断商q,q-1,q′或q′+1,其中q′代表9的补数(或者9-q)。图3中的表表示了正确的选择。一个例子如下计算的商 101 -0 -6 2 2 -0 -7 3商符号 +++ -- + + -- +余数符号 ++- -+ + - -+ +选择 qqq-1q′ q′+1 q q-1 q′ q′+1 q
截断商 1 0 0 9 4 2 1 9 3 3本发明的例证实施例把这种独特的方法用于数字从+9~-9的十进制格式的商的传输中校正。
图4描述根据本发明的例证实施例被流水线化的十进制除法。BCD格式化数据的加法相对缓慢,十进制浮点运算数一般为16或34位。本发明的例证实施例假定加法需要两个周期,每个周期所述加法可被流水线化。从而,完成加法运算的等待时间是两个周期,但是每个周期可启动新的加法运算。在这种实现中,本发明的例证实施例每三个周期完成一次迭代,它产生一个数位,如图4中所示。
图4中,Qsel代表商选择和除数的正确倍数的倍增。在选择了除数的倍数之后,加法器在图1的步骤108进行迭代A,计算Ri+1=R-q*D。在交错的加法器周期中,在图1的步骤108进行迭代B,以计算R′i+1=R-(q″1)*D,从而减小所需的倍数。注意迭代A(Ri+1)或者迭代B(R′i+1)的结果被选择,以便返回到下一R-q*D计算。
图5是可由本发明的例证实施例用于响应除数和被除数,执行十进制除法的电路的方框图。图5包括倍数寄存器500,商选择部件510,倍增器520,余数寄存器530,两周期加法器540,商累积器550和余数选择组件560。在本发明的一个例证实施例中,倍数寄存器500保存除数的5个倍数(1,2,3,4和5)。商选择部件510根据余数寄存器中的数据,选择新的商位,商选择部件510根据下一商位的估计值,选择哪个倍数将被输入两周期加法器540。图1中的步骤108对应于利用来自余数寄存器530和倍数寄存器500的输入,在两周期加法器540中进行的处理。图1中的步骤110和114由商选择部件510执行。商累积器550接收图1中的步骤112的输出,并且一旦产生了所需数目的商位,商累积器550就包含最终的商。余数选择组件560在R和R′间进行选择以便计算下一余数。
本发明的新颖性在于在加法需要2个周期的设计中,它把十进制除法迭代减少到仅仅3个周期。本发明的其它优点在于为了加速该运算,只需要保存介于1倍和5倍之间的除数的倍数。通过在加法器的未使用的流水线级中计算第二个余数,减少了倍数而不存在任何加法时延。另外,表示了即使使用介于+9和-9之间的商位集合,也能够在传输中产生截断商的方法。本发明存在把除数缩放到介于1.0和1.1之间的启动代价,但是该时延由每产生一个商位,仅仅需要3个周期的极快迭代克服。比起加法和乘法所需的硬件来,这种除法算法所需的唯一额外硬件是商选择表、预先比例系数表、商累积数位校正硬件和选择余数的控制电路。
可用软件、固件、硬件或者它们的某一组合实现本发明的能力。
作为一个例子,本发明的一个或多个方面可被包括在具有例如计算机可用介质的制造产品(例如一个或多个计算机程序产品)中。所述介质中包含例如提供并简化本发明的能力的计算机可读程序代码装置。所述制造产品可被包括为计算机系统的一部分或者单独销售。
另外,能够提供至少一个机器可读的程序存储装置,所述程序存储装置确实包含可由机器执行,从而实现本发明的能力的指令的至少一个程序。
这里描述的流程图只是例子。在不脱离本发明的精神的情况下,可对这里描述的这些图或步骤(或操作)做出许多改变。例如,可按照不同的顺序执行这些步骤,或者可以增加、删除或修改步骤。所有这些变化都被认为是要求保护的发明的一部分。
虽然参考例证实施例说明了本发明,但是本领域的技术人员会明白在不脱离本发明的范围的情况下,可以做出各种改变,并且等同物可以替代其元件。另外,可按照本发明的教导做出各种修改,以适应特定的情形或材料,而不脱离本发明的基本范围。于是,本发明并不局限于作为预期的实现本发明的最佳方式而公开的特定实施例,相反本发明包括落入附加权利要求的范围内的所有实施例。此外,术语第一、第二等的使用并且表示任何次序或重要性,相反,术语第一、第二等被用于把一个元件和另一元件区别开。
权利要求
1.一种执行十进制除法的系统,所述系统包括存储缩放的除数和缩放的被除数的输入寄存器;两周期加法器;多个倍数寄存器,用于存储缩放的除数的倍数子集;和用于执行下述操作的机构把缩放的除数和被除数接收到输入寄存器中;把缩放的除数的倍数子集存储到倍数寄存器中;把累积商初始化成等于0;把第一个当前余数初始化成等于缩放的被除数;把第二个当前余数初始化成等于缩放的被除数减去缩放的除数;和执行下述操作,直到产生选定数目的商位为止根据第一个当前余数的第一位计算估计的下一商位;根据估计的下一商位,把临时余数选择成第一个当前余数或第二个当前余数;利用两周期加法器,通过从临时余数中减去存储的倍数之一,计算第一个下一余数,其中根据第一个当前余数的第一位选择存储的倍数;利用两周期加法器,通过从临时余数中减去存储的倍数中的另一个,计算第二个下一余数,其中根据第一个当前余数选择所述另一个存储的倍数;根据估计的下一商位、第一个当前余数和第一个下一余数,计算实际的下一商位;用实际的下一商位更新累积商;和把第一个当前余数设置成等于第一个下一余数,把第二个当前余数设置成等于第二个下一余数。
2.按照权利要求1所述的系统,其中倍数的子集包括1倍、2倍、3倍、4倍和5倍的缩放除数。
3.按照权利要求1所述的系统,其中如果估计的下一商位等于+6,+7,+8,+9,-6,-7,-8或-9,那么所述另一个存储的倍数的值基于第一个当前余数的前两位,否则所述另一个存储的倍数的值基于第一个当前余数的第一位。
4.按照权利要求1所述的系统,其中缩放的除数大于或等于1并且小于1.1。
5.按照权利要求1所述的系统,其中计算实际的下一商位包括如果第一个当前余数和第一个下一余数都大于或等于0,那么把实际的下一商位设置成估计的商位;如果第一个当前余数大于或等于0,并且如果第一个下一余数小于0,那么把实际的下一商位设置成比估计的商位小1;如果第一个当前余数和第一个下一余数都小于0,那么把实际的下一商位设置成9减估计商位的绝对值;和如果第一个当前余数小于0,并且第一个下一余数大于或等于0,那么把实际的下一商位设置成10减估计商位的绝对值。
6.按照权利要求1所述的系统,其中用实际的下一商位更新累积商包括把累积商左移一位,并把实际的下一商位插入累积商的最低有效位中。
7.按照权利要求1所述的系统,其中每三个时钟周期执行实际的下一商位的计算。
8.一种执行十进制除法的系统,所述系统包括存储缩放的除数和缩放的被除数的输入寄存器;两周期加法器;多个倍数寄存器,用于存储缩放的除数的倍数子集;响应缩放的除数和缩放的被除数,计算商位的流水线机构,其中在三个时钟周期中计算每个商位,所述计算包括选择新的商位;和利用两周期加法器计算新的余数,其中给所述两周期加法器的输入包括来自一个或多个倍数寄存器的数据。
9.一种执行十进制除法的方法,所述方法包括接收缩放的除数和被除数;存储缩放的除数的倍数子集;把累积商初始化成等于0;把第一个当前余数初始化成等于缩放的被除数;把第二个当前余数初始化成等于缩放的被除数减缩放的除数;和执行下述操作,直到产生选定数目的商位为止根据第一个当前余数的第一位计算估计的下一商位;根据估计的下一商位,把临时余数选择成第一个当前余数或第二个当前余数;通过从临时余数中减去存储的倍数之一,计算第一个下一余数,其中根据第一个当前余数的第一位选择存储的倍数;通过从临时余数中减去存储的倍数中的另一个,计算第二个下一余数,其中根据第一个当前余数选择所述另一个存储的倍数;根据估计的下一商位、第一个当前余数和第一个下一余数,计算实际的下一商位;用实际的下一商位更新累积商;把第一个当前余数设置成等于第一个下一余数,把第二个当前余数设置成等于第二个下一余数。
10.按照权利要求9所述的方法,其中倍数的子集包括1倍、2倍、3倍、4倍和5倍的缩放除数。
11.按照权利要求9所述的方法,其中如果估计的下一商位等于+6,+7,+8,+9,-6,-7,-8或-9,那么所述另一个存储的倍数的值基于第一个当前余数的前两位,否则所述另一个存储的倍数的值基于第一个当前余数的第一位。
12.按照权利要求9所述的方法,其中缩放的除数大于或等于1并且小于1.1。
13.按照权利要求9所述的方法,其中计算实际的下一商位包括如果第一个当前余数和第一个下一余数都大于或等于0,那么把实际的下一商位设置成估计的商位;如果第一个当前余数大于或等于0,并且如果第一个下一余数小于0,那么把实际的下一商位设置成比估计的商位小1;如果第一个当前余数和第一个下一余数都小于0,那么把实际的下一商位设置成9减估计商位的绝对值;和如果第一个当前余数小于0,并且第一个下一余数大于或等于0,那么把实际的下一商位设置成10减估计商位的绝对值。
14.按照权利要求9所述的方法,其中用实际的下一商位更新累积商包括把累积商左移一位,并把实际的下一商位插入累积商的最低有效位中。
全文摘要
执行十进制除法的方法,包括接收缩放的除数和被除数,存储缩放的除数的倍数子集。累积商被初始化成0,第一个当前余数被初始化成等于缩放的被除数,第二个当前余数被初始化成等于缩放的被除数减缩放的除数。执行下述循环,直到产生选定数目的商位。计算估计的下一商位。根据估计的下一商位,把临时余数选择成第一或第二个当前余数。通过从临时余数中减去存储的倍数之一,计算第一个下一余数。通过从临时余数中减去存储的倍数中的另一个,计算第二个下一余数。根据估计的下一商位、第一个当前余数和第一个下一余数,计算实际的商位。用实际的下一商位更新累积商。分别把第一、第二个当前余数设置成等于第一个、第二个下一余数。
文档编号G06F7/535GK1818852SQ20061000669
公开日2006年8月16日 申请日期2006年2月8日 优先权日2005年2月10日
发明者斯蒂文·R.·卡卢格, 鲍罗米·米达吉亚, 李何雯, 埃里克·M.·施瓦茨 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1