CN102004627B - 乘法舍入实现方法和装置 - Google Patents

乘法舍入实现方法和装置 Download PDF

Info

Publication number
CN102004627B
CN102004627B CN2010105320900A CN201010532090A CN102004627B CN 102004627 B CN102004627 B CN 102004627B CN 2010105320900 A CN2010105320900 A CN 2010105320900A CN 201010532090 A CN201010532090 A CN 201010532090A CN 102004627 B CN102004627 B CN 102004627B
Authority
CN
China
Prior art keywords
result
carry
bit
sum
value
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
Application number
CN2010105320900A
Other languages
English (en)
Other versions
CN102004627A (zh
Inventor
周昔平
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
HiSilicon Technologies Co Ltd
Original Assignee
HiSilicon Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by HiSilicon Technologies Co Ltd filed Critical HiSilicon Technologies Co Ltd
Priority to CN2010105320900A priority Critical patent/CN102004627B/zh
Publication of CN102004627A publication Critical patent/CN102004627A/zh
Application granted granted Critical
Publication of CN102004627B publication Critical patent/CN102004627B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Complex Calculations (AREA)

Abstract

本发明公开了一种乘法舍入实现方法和装置。该方法包括:分别获取浮点数进位保留形式的进位结果与和结果;将进位结果与和结果的高位和L位分别采用半加器相加,将R位采用全加器相加,以获取二次进位结果与二次和结果,并同时获取高位相加后的高位溢出值;根据当前舍入模式获取L位的进位值与和位值;将L位的和位值作为舍入结果的L位,当识别到L位的进位值为0时,将二次进位结果与二次和结果的高位相加之和作为舍入结果的高位,当识别到L位的进位值为1时,将二次进位结果与二次和结果的高位相加之和再加1作为舍入结果的高位。本发明能够提高浮点乘法器舍入操作的执行效率,改善浮点处理单元的性能。

Description

乘法舍入实现方法和装置
技术领域
本发明实施例涉及浮点计算技术,尤其涉及一种乘法舍入实现方法和装置。 
背景技术
现代微处理器的浮点处理单元一般都包含一个兼容电气电子工程师协会(Institute of Electrical and Electronics Engineers,简称IEEE)754标准的浮点乘法器。由于30%以上的浮点操作是浮点乘法操作,所以浮点乘法器是决定浮点处理单元性能的关键。 
浮点乘法通常包括译码、生成部分积、部分积压缩、生成结果、以及将结果按规定模式进行舍入这几个步骤。浮点乘法在部分积压缩之后会得到进位保留形式(carry save)的结果,即进位保留进位结果(carry)与和结果(sum)这样两个数字串。现有技术基于进位结果与和结果得到最终舍入结果的方式是直接将进位结果与和结果相加按位相加,而后对相加值进行舍入运算来得到舍入结果。舍入操作通常是根据待截去部分的数值选择是否对未截去部分的最低位执行加1(本文描述技术方案时所列出的数值,若未经特别说明,则均表示为二进制数值)操作来实现的。 
但是,在进行本发明的研究过程中,发明人发现现有技术存在如下缺陷:浮点数的二进制表示形式为01.x-1x-2......x-(n-1)x-(n),其中n为自然数,在单精度计算中,规定n=23,在双精度计算中,规定n=52。浮点数的十进制取值范围为(2,1]。在进位结果与和结果相加后,最高位可能产生进位,即发生溢出的情况。对于不溢出情况则按照上述方案对未截去部分的最低位进行处理,但是当出现溢出情况时,数值需要右移一位,则应该对未截去部分最低位的前一位进行处理。现有技术中,若由于舍入操作而导致溢出,那么就需要再进行一次舍入操作,即将因溢出而右移的一位进行舍入操作,这样导致计算效率较低,影响了浮点处理单元的性能。 
发明内容
本发明实施例提供一种乘法舍入实现方法和装置,以提高浮点乘法器舍入操作的执行效率,改善浮点处理单元的性能。 
本发明实施例提供了一种乘法舍入实现方法,包括: 
分别获取浮点数进位保留形式的进位结果与和结果,其中,所述进位结果与和结果的浮点数分别划分为高位、L位、R位和黏着位,所述L位为保留部分的最低位,所述高位为保留部分除L位以外的其余部分,所述R位为截去部分的最高位,所述黏着位为截去部分除R位以外的其余部分;L为浮点精度值; 
将进位结果与和结果的高位和L位分别采用半加器相加,将R位采用全加器相加,以获取二次进位结果与二次和结果,并同时获取所述高位相加后的高位溢出值Rv,其中,所述全加器采用根据当前舍入模式设定的输入进位值作为输入进位; 
根据当前舍入模式获取L位的进位值与和位值; 
将L位的和位值作为舍入结果的L位,当识别到L位的进位值为0时,将所述二次进位结果与二次和结果的高位相加之和作为舍入结果的高位,当识别到L位的进位值为1时,将所述二次进位结果与二次和结果的高位相加之和再加1作为舍入结果的高位。 
本发明实施例还提供了一种乘法舍入实现装置,包括: 
至少L+2个半加器和一个全加器,用于分别获取浮点数进位保留形式的进位结果与和结果,其中,所述进位结果与和结果的浮点数分别划分为高位、L位、R位和黏着位,所述L位为保留部分的最低位,所述高位为保留部分除 L位以外的其余部分,所述R位为截去部分的最高位,所述黏着位为截去部分除R位以外的其余部分,L为浮点精度值,所述L+2个半加器用于进行所述进位结果与和结果的高位和L位的相加操作,以获取二次进位结果与二次和结果,并同时获取所述高位相加后的高位溢出值,所述全加器用于进行所述进位结果与和结果的R位的相加操作; 
输入进位存储器,用于存储输入进位值,为所述全加器提供输入进位; 
进位与和位获取模块,用于根据当前舍入模式获取L位的进位值与和位值; 
并行前缀加法器,用于计算获取所述二次进位结果与二次和结果的高位相加之和,以及获取所述二次进位结果与二次和结果的高位相加之和加1; 
结果获取模块,用于将L位的和位值作为舍入结果的L位,当识别到L位的进位值为0时,将所述二次进位结果与二次和结果的高位相加之和作为舍入结果的高位,当识别到L位的进位值为1时,将所述二次进位结果与二次和结果的高位相加之和再加1作为舍入结果的高位。 
本发明的技术方案,能够提高浮点乘法器舍入操作的执行效率,改善浮点处理单元的性能。 
附图说明
图1为本发明实施例一提供的乘法舍入实现方法的流程图; 
图2为本发明实施例二提供的乘法舍入实现方法的流程图; 
图3为本发明实施例二提供的乘法舍入实现方法的运算示意图; 
图4为本发明实施例三提供的乘法舍入实现方法中判断平局情况的流程图; 
图5为本发明实施例四提供的乘法舍入实现方法的流程图; 
图6为本发明实施例五提供的乘法舍入实现方法的流程图; 
图7为本发明实施例提供的乘法舍入实现方法的运算示意图。 
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。 
浮点乘法器的舍入操作按照标准数据格式分为单精度浮点舍入和双精度浮点舍入,按照舍入模式则分为舍入到最近(Round to Nearest,简称RN)、舍入到正无穷(Round to+Infinite)、舍入到负无穷(Round to-Infinite)和舍入到零(Round to Zero)。舍入到正无穷即将正数舍入到正无穷,舍入到负无穷即负数舍入到负无穷,由于表示正负的符号不参与舍入操作,所以舍入到正无穷和舍入到负无穷可以统称为舍入到无穷(Round to Infinite,简称RN)。单精度、双精度、以及各种舍入模式都可以通过指令或者预配置来指定,乘法器根据指定的模式进行操作。 
浮点数可以通过指数位和尾数位01.x-1x-2......x-(n-1)x-(n)来表示。按照规定,单精度浮点数的尾数位可以表示为01.x-1x-2......x-22x-23,其浮点精度值的位数为23,双精度浮点数的尾数位可以表示为01.x-1x-2......x-51x-52,其浮点精度值的位数为52。本发明实施例以单精度和双精度浮点数为例进行说明,但是本领域技术人员可以理解对于浮点精度值的位数为其他数值时,本发明的技术方案同样适用。 
本发明实施例主要涉及乘法运算中的舍入操作,可视为已知浮点数进位保留形式的进位结果(carry)与和结果(sum),且舍入操作不受进位结果与和结果获取形式的限制。进位结果与和结果是部分积的压缩结果,其形式通常为x1x0.x-1x-2......x-(2n-1)x-(2n)。 
当两个浮点数相乘之后,其十进制取值范围为(4,1],其形式可以为01.x-1x-2......x-(n-1)x-(n)、11.x-1x-2......x-(n-1)x-(n)或10.x-1x-2......x-(n-1)x-(n)。当部分 积压缩之后的十进制取值范围为(4,2]时,即后两种形式,超出了规定的标准精度数据范围,称之为发生溢出(overflow),需要将进位结果与和结果的相加值右移一位,并对指数位加1。由于结果右移,导致截去部分的位数发生了变化,所以在进行舍入过程中应考虑溢出的情况。 
为描述方便,本文中定义浮点数尾数位的形式为01.x-1x-2......x-(L-1)x-L,浮点精度值的位数为L,因此,浮点数舍入后保留部分的最低位为L位(Low),舍入后截去部分的最高位称为R位(Round),截去部分除R位以外的部分x-(R+1)......x-(2L-1)x-(2L)称为黏着位,保留部分除L位以外的部分01.x-1x-2......x-(L-1)称为高位。具体计算时,黏着位的位数可能更多,最低位的位数会大于2L。例如,双精度部分积的黏着位可以是x-53......x-106x-107,黏着位的最低位并不影响本发明的实现。按照上述四段数位进行并行计算。在溢出情况下,结果会右移,则L位和R位所对应的值也随之变化,将进位结果的L位值和R位值分别记为Lc′和Rc′,将和结果的L位值和R位值分别记为Ls′和Rs′。进位结果与和结果的高位相加后的高位溢出值记为Rv,发生溢出时Rv等于1,不溢出时Rv等于0。 
基于上述设定,通过实施例对本发明的技术方案分别进行详细描述。 
实施例一 
图1为本发明实施例一提供的乘法舍入实现方法的流程图,本实施例的方法具体包括如下步骤: 
步骤110、分别获取浮点数进位保留形式的进位结果与和结果,如前所述,浮点数划分为高位、L位、R位和黏着位,L位为保留部分的最低位,高位为保留部分除L位以外的其余部分,R位为截去部分的最高位,黏着位为截去部分除R位以外的其余部分; 
步骤120、将进位结果与和结果的高位和L位分别采用半加器相加,将R位采用全加器相加,以获取二次进位结果与二次和结果,并同时获取高位相加后的高位溢出值,其中,全加器采用根据当前舍入模式设定的输入进位值 Rin作为输入进位; 
其中,每个半加器仅将两个二进制数相加,而不考虑低位的进位值,相加得到进位值与和位值,进位值进入二次进位结果的高一位,和位值进入二次和结果的当前位。半加器的数量按照高位和L位的位数设置。全加器将三个二进制数相加,其中一个二进制数一般是低位的进位值,作为输入进位来参与相加。通过将低位的进位值设置为0,也可以将全加器作为半加器使用。步骤120为舍入操作的一次压缩。 
步骤130、根据当前舍入模式获取L位的进位值与和位值; 
步骤140、将L位的和位值作为舍入结果的L位,当识别到L位的进位值为0时,将二次进位结果与二次和结果的高位相加之和作为舍入结果的高位,当识别到L位的进位值为1时,将二次进位结果与二次和结果的高位相加之和再加1作为舍入结果的高位。 
在步骤120获取二次进位结果与二次和结果之后,还可以首先采用并行前缀加法器(Parallel-Prefix Adder)来同时计算获取二次进位结果(carryl)与二次和结果(sum1)的高位相加之和(sum1+carry1),以及获取二次进位结果(carry1)与二次和结果(sum1)的高位相加之和再加1(sum1+carry1+1)。 
并行前缀加法器可以一次性得到两数之和,以及两数之和再加1,以供后续根据L位的进位值进行选择即可,提高了计算效率。 
或者,也可以在步骤140中,在识别L位的进位值之后,再计算获取对应的高位相加结果。 
本实施例的技术方案是首先计算得到一个无限精度的数值,再舍入到目标精度,因此能够适用于IEEE754标准的规定。 
本发明的技术方案可具体适用于舍入到最近、舍入到正无穷、舍入到负无穷和舍入到零等多种舍入模式,下面通过实施例分别进行介绍。 
实施例二 
图2为本发明实施例二提供的乘法舍入实现方法的流程图,本实施例具体为浮点数按照舍入到最近模式进行舍入的方法。舍入到最近可以通过舍入到最近的上限(Round to Nearest Up,简称RNU)再修正L位来实现。对于L位的修正,根据发明人在实现本发明过程中的研究发现:舍入到最近可以通过在舍入结果的R位加1,并在舍入结果的黏着位均为0时将舍入结果的L位置0来得到。对于溢出和不溢出的两种情况,不溢出时,应在舍入结果的R位加1;在溢出时,应在L位,即R位的高一位加1,相当于在R位上加10,然后将舍入结果右移一位。本实施例实现在一次压缩过程中执行舍入操作。 
在R位需要加的值可称为输入进位值,记作Rin,在不同舍入模式下,Rin设置为不同数值。在舍入到最近模式下,Rin设定为1。 
上述思路为舍入到最近模式的计算思路,为了提高计算效率,本实施例采用在进位结果与和结果相加的过程中,结合软硬件来进行舍入到最近模式的操作,相加过程如图3所示,具体包括如下流程: 
步骤210、分别获取浮点数进位保留形式的进位结果(carry[1:-2L])与和结果(sum[1:-2L]),如前所述,浮点数划分为高位、L位、R位和黏着位; 
步骤220、将进位结果与和结果的高位(carry[1:-(L-1)])与和结果(sum[1:-(L-1)])和L位(Lc′和Ls′)分别采用半加器相加,将进位结果与和结果的R位(Rc′和Rs′)采用全加器相加,以获取二次进位结果(carry1)与二次和结果(sum1),并同时获取高位相加后的高位溢出值Rv。其中,全加器采用根据当前舍入模式设定的输入进位值Rin作为输入进位,本实施例中,Rin=1; 
在本实施例中,还需要进一步执行: 
步骤230、获取进位结果与和结果的R位相加后的进位值,可称为R位进位输出值,记为Cout[-R]。后续符号Cout[-m]均可表示m位相加所产生的m位进位输出值,m为自然数。R位进位输出值Cout[-R]可以通过超前进位链来生成,这样可以提高速度,避免生成Cout[-R]的逻辑作为关键路径而成为 舍入操作的瓶颈。 
步骤240、根据当前舍入模式获取L位的进位值与和位值,在本实施例中,当识别到当前舍入模式为舍入到最近的模式时,步骤240具体为: 
根据二次进位结果的L位值Lc、二次和结果中的L位值Ls和R位值Rs、高位溢出值Rv、以及R位进位输出值Cout[-R],识别L位的进位值与和位值。 
在上述步骤240中,根据Lc、Ls、R、Rv和Cout[-R]来识别L位的进位值与和位值的操作实际上是进行相加的操作。如图3所示,R、Rv和Cout[-R]所处的位数相同,为相同权重值,R、Rv和Cout[-R]相加所产生的进位值与Lc和Ls的位数相同,为相同权重。L位的进位值,即R、Rv和Cout[-R]相加所产生的进位值再与Lc和Ls相加后最终得到的进位值。因此,L位的进位值可以通过硬件全加器将Lc、Ls、R、Rv和Cout[-R]按照权重相加来获得。为简化硬件,也可以采用查表的方式,在对应关系表中查询获取对应的L位的进位值。在对应关系表中,Rs、Rv和Cout[-R]相加后的进位值,再与Lc和Ls相加获得的进位值与L位的进位值对应。Lc、Ls、R、Rv和Cout[-R]的值与L位的进位值的对应关系如表1所示: 
                   表1 
  Ls   Lc   R   Rv   Cout[-R]  L位的进位值
  0   0   0   0   0  0
  0   0   0   0   1  0
  0   0   0   1   0  0
  0   0   0   1   1  0
  0   0   1   0   0  0
  0   0   1   0   1  0
  0   0   1   1   0  0
  0   0   1   1   1  0
  0   1   0   0   0  0
  0   1   0   0   1  0
  0   1   0   1   0  0
  0   1   0   1   1  1
  0   1   1   0   0  0
[0057] 
  0   1   1   0   1   1
  0   1   1   1   0   1
  0   1   1   1   1   1
  1   0   0   0   0   0
  1   0   0   0   1   0
  1   0   0   1   0   0
  1   0   0   1   1   1
  1   0   1   0   0   0
  1   0   1   0   1   1
  1   0   1   1   0   1
  1   0   1   1   1   1
  1   1   0   0   0   1
  1   1   0   0   1   1
  1   1   0   1   0   1
  1   1   0   1   1   1
  1   1   1   0   0   1
  1   1   1   0   1   1
  1   1   1   1   0   1
  1   1   1   1   1   1
步骤240中获取L位和位值的操作可以经过逻辑基于下述公式单独计算出L位的和位值Lsb(lowest significant bit): 
Lsb=Ls^Lc^(R&Rv|Cout[-R])&Rv|R&Cout[-L] 
其中,^表示异或运算;&表示与运算;|表示或运算;对于双精度计算,-R=-53,对于单精度计算,-R=-24。 
本实施例的技术方案,可以根据进位保留形式的进位结果与和结果的一次相加压缩得到Lc、Ls、R、Rv和Cout[-R],而后根据Lc、Ls、R、Rv和Cout[-R]得到L位的进位值与和位值,L位的进位值是向高位的不同进位(0或者1)。根据L位的进位值在计算得到的两个高位结果中选择一个,即可确定最终的舍入结果。 
步骤250、将L位的和位值作为舍入结果的L位,当识别到L位的进位值为0时,将二次进位结果与二次和结果的高位相加之和(sum1+carry1)作为舍入结果的高位,当识别到L位的进位值为1时,将二次进位结果与二次和 结果的高位相加之和再加1(sum1+carry1+1)作为舍入结果的高位。 
采用本实施例的技术方案,可以实现舍入到最近模式的乘法舍入。 
实施例三 
图4为本发明实施例三提供的乘法舍入实现方法中判断平局情况的流程图,本实施例以实施例二为基础,进一步在舍入到最近模式下考虑平局(tie)情况。所谓tie情况,是指待舍入结果中的截去部分表示的数值是其等位长数值上限和下限的平均值。此时待舍入结果位于两个最接近数值的中间。如二进制110.1000舍入到整数,1000就等于(0+1111)的二分之一。IEEE754标准规定这种情况下舍入到最近的偶数。 
由于实施例二提供的舍入到最近是通过舍入到最近的上限来实现的,因此,当出现tie情况时,仅需要将舍入到最近的上限得到的舍入结果的L位置0即可得到满足上述规定的舍入到最近的结果。本实施例在实施例二的基础上还包括tie情况判断流程,如图4所示,包括如下步骤: 
步骤401、当识别到高位溢出值Rv为0时,确定判断位数K等于R,当识别到高位溢出值Rv为1时,确定判断位数K等于L; 
步骤402、判断黏着位的最低位至K+1位是否全为零,若是,则确定零标志Z等于0,若否,则确定零标志Z等1; 
步骤403、按照如下公式计算平局(tie)判断信号tie_cond: 
tie_cond=~((sum[-K]^carry[-K]^Cout[-K])&Z-(K+1)
其中,~代表非运算;sum[-K]为二次和结果的K位值;carry[-K]为二次进位结果的K位值;Cout[-K])为二次进位结果与二次和结果的最低位至K+1位相加的进位值; 
步骤404、当判断出平局判断信号tie_cond等于1时,即出现tie情况,将舍入结果的L位置0,当判断出平局判断信号tie_cond等于0时,保持舍入结果的L位不变。 
本实施例中,假设进位结果与和结果的黏着位相加 (sum[-(R+1):-2n]+carry[-(R+1):-2n])结果为零标志Z,Z可以通过进位保留形式的进位结果与和结果快速预测得到。黏着位的最低位至K位中各位的快速预测值z[i]进行按照如下公式进行逻辑运算,对结果各位是否全为零的快速预测逻辑表达式如下: 
z[i]=~((sum[i]^carry[i])^(sum[i-1]|carry[i-1]))  -2n<i<-(K+1) 
2n为黏着位最低位的位数值,一般2n≥2L 
而后再对各位的快速预测结果按照如下公式进行按位相与运算得到K+1位的零标志Z: 
Z-(K+1)=&z[-(K+1):-2n]。 
判断平局情况具体又分为溢出和不溢出的情况: 
在不溢出时,依据上述Rs、Rc、Cout[-R]和Z(sum[-(R+1):-2n]+carry[-(R+1):-2n])来判断是否出现tie情况;在溢出时,需要根据移位后的进位结果与和结果来判断,即根据Ls′、Lc′、Cout[-L])和Z(sum[-(L+1):-2n]+carry[-(L+1):-2n])来判断是否出现tie情况。即tie情况信号tie_cond的计算公式如下: 
tie_cond=~((sum[-R]^carry[-R]^Cout[-R])&Z-(R+1))  (Rv=0) 
tie_cond=~((sum[-L]^carry[-L]^Cout[-L])&Z-(L+1))  (Rv=1) 
本实施例的技术方案实现了考虑tie情况的舍入到最近模式。 
实施例四 
图5为本发明实施例四提供的乘法舍入实现方法的流程图,具体为舍入到无穷模式的实现方法。 
舍入到无穷模式可通过对舍入到最近模式的逻辑结构进行改进而得到。舍入到无穷与舍入结果的符号相关,正数舍入到正无穷,负数舍入到负无穷均需要判断是否在L位加1。本实施例中均假设是正数舍入到正无穷,负数舍入到负无穷的情况。在本实施例中,当识别到当前舍入模式为舍入到无穷时,全加器的输入进位值Rin设置为0。 
本实施例的方法包括如下步骤: 
步骤510、分别获取浮点数进位保留形式的进位结果与和结果; 
步骤520、在进位结果与和结果的黏着位的各位分别加1; 
在步骤520中,在黏着位的各位进行加1操作,即加入1111...1111,可称为注入位。对于双精度01.x-1x-2......x-103x-104,其注入位为十进制形式的2-52-2-104,对于单精度01.x-1x-2......x-45x-46,由于其在乘法阵列中是采用小数点对齐运算,因此其注入位为十进制形式的2-23-2-104。 
步骤530、将进位结果与和结果的高位和L位分别采用半加器相加,将R位采用全加器相加,以获取二次进位结果与二次和结果,并同时获取高位相加后的高位溢出值Rv,其中,全加器采用根据当前舍入模式设定的输入进位值作为输入进位,本实施例中,输入进位值Rin=0,则全加器相当于半加器来使用; 
步骤540、根据当前舍入到无穷的舍入模式获取L位的进位值与和位值; 
本实施例中步骤540的根据当前舍入到无穷的舍入模式获取L位的进位值具体可以为: 
根据二次和结果的L位值Ls、高位溢出值Rv、以及二次进位结果与二次和结果最低位至L+1位相加的进位值Cout[-L],在对应关系表中查询获取对应的L位的进位值;该对应关系表中,Ls、Rv和Cout[-L]相加后的进位值与L位的进位值对应。该对应关系表可以如表2所示: 
           表2 
  L   Rv   Cout[-L]  L位的进位值
  0   0   0  0
  0   0   1  0
  0   1   0  0
  0   1   1  1
  1   0   0  0
  1   0   1  1
  1   1   0  1
  1   1   1  1
[0096] 本实施例中步骤540的根据当前舍入到无穷的舍入模式获取L位的和位值具体可以为: 
按照如下公式计算L位的和位值Lsb: 
Lsb=Ls^Cout[-L])^Rv 
其中,Ls为二次和结果的L位值;Cout[L)]为二次进位结果与二次和结果的最低位至L+1位相加的进位值;^表示异或运算。 
步骤550、将L位的和位值作为舍入结果的L位,当识别到L位的进位值为0时,将二次进位结果与二次和结果的高位相加之和(sum1+carry1)作为舍入结果的高位,当识别到L位的进位值为1时,将二次进位结果与二次和结果的高位相加之和再加1(sum1+carry1+1)作为舍入结果的高位。 
本实施例可以在上述的舍入到最近逻辑结构基础上增添处理舍入到无穷溢出情况的逻辑。只需在L位再加Rv即可。因此L位需要相加的项是:Ls、Lc、Rv、Cout[-L]。 
对于双精度舍入到无穷,相当于将进位保留形式的待舍入数据分为三段并行处理。即高位(sum[1:-51]和carry[1:-51])、L位(sum[-52]和carry[-52])、黏着位(sum[-53:-107]和carry[-53:-107])三段,R位也归于黏着位之中。高位通过一行半加器压缩,L位通过一个半加器压缩,得到一位Ls。相比于压缩舍入到最近模式,即将R位的全加器的输入进位置为零,不会产生进位。黏着位通过超前进位链生成向L位的进位Cout[-L]。L位压缩得到Ls和Lc。高位压缩后得到二次和结果与二次进位结果的高位(sum1和carry1)。将sum1和carry1送入并行前缀加法器(Parallel-Prefix Adder)相加。得到sum1+carry1和sum1+carry1+1。再用Ls、Rv、Cout[-L]的不同情况,生成L位向高位的不同进位值(0或者1)。根据此进位值选择高位相加的sum1+carry1或sum1+carry1+1结果来做为舍入结果的高位部分。同时经过逻辑单独算出最后一位,即最终结果的L位。 
本实施例中,使用超前进位链来生成Cout[-L]可以提高速度,还可以为集成单精度及舍入到无穷模式提供了便利。 
实施例五 
图6为本发明实施例五提供的乘法舍入实现方法的流程图,本实施例具体为舍入到零模式的实现方法。舍入到零可以通过直接对待舍入结果截去得到。 
当识别到当前舍入模式为舍入到零时,首先将输入进位值R in设置为0。而后具体执行如下操作: 
步骤610、分别获取浮点数进位保留形式的进位结果与和结果; 
步骤620、将进位结果与和结果的高位和L位分别采用半加器相加,将R位采用全加器相加,以获取二次进位结果与二次和结果,并同时获取高位相加后的高位溢出值Rv,其中,全加器采用根据当前舍入模式设定的输入进位值Rin作为输入进位,本实施例中,Rin=0; 
步骤630、根据当前舍入模式获取L位的进位值与和位值; 
630步骤中根据当前舍入到零的舍入模式获取L位的进位值的操作具体如下: 
根据二次进位结果的L位值Lc、二次和结果的L位值Ls和R位值Rs、高位溢出值Rv、以及二次进位结果与二次和结果中的R位进位输出值Cout[-R],在对应关系表中查询获取对应的L位的进位值;该对应关系表中,Rs、Rv和Cout[-R]相加后的进位值,再与Lc和Ls相加获得的进位值与L位的进位值对应,对应关系可参见表1所示。 
630步骤中根据当前舍入到零的舍入模式获取L位的和位值的操作具体如下: 
按照如下公式计算L位的和位值Lsb: 
Lsb=Ls^Cout[-L] 
其中,Ls为二次和结果的L位值;Cout[-L]为二次进位结果与二次和结果的最低位至L+1位相加的进位值;^表示异或运算。 
步骤640、将L位的和位值作为舍入结果的L位,当识别到L位的进位值为0时,将二次进位结果与二次和结果的高位相加之和(sum1+carry1)作为舍入结果的高位,当识别到L位的进位值为1时,将二次进位结果与二次和结果的高位相加之和再加1(sum1+carry1+1)作为舍入结果的高位。 
本实施例的技术方案,在上述舍入到最近和舍入到无穷的逻辑结构基础上,仅需要把输入进位值置0,把注入位置0,且生成结果的最低位不执行判断tie情况的操作即可实现舍入到零模式的操作。 
本发明上述实施例所提供的技术方案既可以适应于单精度,也可以适应于双精度浮点数乘法舍入操作,同时还可以支持舍入到最近、舍入到正无穷、舍入到负无穷和舍入到零这四种常见舍入模式。在部分积压缩的过程中进行舍入操作,考虑了溢出和不溢出的情况,无须在溢出后再次重复执行舍入操作,因此可以提高舍入运算效率,进而能够提高浮点数处理单元的运算效率。 
单精度数据舍入和双精度数据舍入不同的地方是高位、L位、R位和黏着位的位置不同。单精度分别为高位(sum[1:-22]、carry[1:-22])、L位(sum[-23]、carry[-23])、R位(sum[-24]、carry[-24])和黏着位(sum[-25:-107]、carry[-25:-107])四段。双精度分别为高位(sum[1:-51]、carry[1:-51])、L位(sum[-52]、carry[-52])、R位(sum[-53]、carry[-53])和黏着位(sum[-54:-107]、carry[-54:-107])四段。只要相应设置半加器的数量以及全加器的位置即可。上述各实施例的公式中,高位、L位、R位和黏着位的位数设置相应数值即可。 
对于单精度,可以对应双精度的位数设置半加器和全加器,并在单精度的R位,即-24比特位上设置全加器。在进行单精度计算时,仅使用-24比特位之前的半加器和全加器,后续位数均置为零。在进行双精度计算时,使用所有半加器和全加器,且将-24比特位的全加器的输入进位设置为零,相当于半加器来使用。如图7所示,下标sp代表单精度,下标dp代表双精度。 
同时需要生成双精度、单精度两套进位值Cout时,可以用超前进位链由 (sum[-25:-107]、carry[-25:-107])产生进位Cout_sp和Cout_dp。 
如图7所示具体为舍入到最近的模式,经过全加器和半加器的1次压缩后,单精度和双精度被加数以小数点对齐方式进入并行前缀加法器。再得到sum1+carry1+1,以及sum1+carry1。通过Ls、Lc、Rs、Cout[-R]和Rv的取值来选择sum1+carry1+1,或sum1+carry1。对于溢出和不溢出的情况分别处理,溢出时将结果右移一位,并增量指数。而后处理tie情况,最后得到舍入结果。 
本发明的技术方案同时兼容单精度和双精度的浮点处理器,解决了按照IEEE754标准快速舍入的单双精度问题。同时存在单精度、双精度运算的系统能够在数据通路上并行的得到双精度和单精度的舍入结果。 
实施例六 
本发明实施例六提供乘法舍入实现方法中并行前缀加法器的实现方法。前述实施例中,使用并行前缀加法器同时生成sum1+carry1和sum1+carry1+1。并行前缀加法器的基本原理是定义一对进位生成(carry generate)和进位传播(carry propagate)运算符。然后采用这对运算符构成树形结构排列的进位阵列,缩小每个进位生成节点的扇出,同时为版图设计优化排列结构。在这种加法器的最后一级进位生成传播结点上可以很容易的再加上一级同进位相关的逻辑,实现结果再加1,并且不会构成组合回路。 
运算符对·中的进位生成运算符可以定义为逻辑与,传播运算符可以定义为逻辑或。设并行前缀加法器输入为a和b,最后一级生成的进位生成消息为g,进位传播消息为p。通过g和p可以得到a+b。而令g′=g or p,则通过g′和p可以得到a+b+1。 
本发明在一款同时支持单精度和双精度运算并集成浮点乘法运算功能浮点处理单元中,利用最小的硬件代价实现了正确高效的单精度和双精度浮点舍入处理。运算速度快、代价小。紧密结合乘法的部分积译码和部分积压缩,便于构成高速流水线乘法器。引入并行前缀加法器,简化了传统做法中生成 A+B和A+B+1的逻辑结构,减少了该加法器的延时和面积,且便于后端布线。 
最终的舍入结果表示为如表3所示: 
 Inc   Rv   结果
 0   0   {A,dp_lsb}
 0   1   {1’b1,A}
 1   0   {B,dp_lsb}
 1   1   {1’b1,B}
仅将舍入到无穷的注入位放置在乘法器部分积压缩。 
本发明实施例还提供了一种乘法舍入实现装置,包括:至少L+2个半加器和一个全加器、输入进位存储器、进位与和位获取模块、并行前缀加法器和结果获取模块。其中, 
至少L+2个半加器和一个全加器,用于分别获取浮点数进位保留形式的进位结果与和结果,其中,所述浮点数划分为高位、L位、R位和黏着位,所述L位为保留部分的最低位,所述高位为保留部分除L位以外的其余部分,所述R位为截去部分的最高位,所述黏着位为截去部分除R位以外的其余部分,所述L+2个半加器用于进行所述进位结果与和结果的高位和L位的相加操作,以获取二次进位结果与二次和结果,并同时获取所述高位相加后的高位溢出值,所述全加器用于进行所述进位结果与和结果的R位的相加操作。输入进位存储器用于存储所述输入进位值,为所述全加器提供输入进位。进位与和位获取模块,用于根据当前舍入模式获取L位的进位值与和位值。并行前缀加法器用于计算获取所述二次进位结果与二次和结果的高位相加之和,以及获取所述二次进位结果与二次和结果的高位相加之和加1。结果获取模块用于将L位的和位值作为舍入结果的L位,当识别到L位的进位值为0时,将所述二次进位结果与二次和结果的高位相加之和作为舍入结果的高位,当识别到L位的进位值为1时,将所述二次进位结果与二次和结果的高位相加之和再加1作为舍入结果的高位。 
上述装置中,优选是L=52,采用输入进位置0的全加器作为第24个半 加器。 
上述装置中,优选是还包括:注入模块,用于在所述进位结果与和结果的黏着位的各位分别加1。 
本发明所提供的装置可以执行本发明实施例所提供的乘法舍入实现方法,以软件和/或硬件的形式实现相应的功能,具备相应的功能模块,能够提高浮点乘法器舍入操作的执行效率,改善浮点处理单元的性能。 
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。 
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。 

Claims (15)

1.一种乘法舍入实现方法,其特征在于,包括:
分别获取浮点数进位保留形式的进位结果与和结果,其中,所述进位结果与和结果的浮点数分别划分为高位、L位、R位和黏着位,所述L位为保留部分的最低位,所述高位为保留部分除L位以外的其余部分,所述R位为截去部分的最高位,所述黏着位为截去部分除R位以外的其余部分;L为浮点精度值;
将进位结果与和结果的高位和L位分别采用半加器相加,将R位采用全加器相加,以获取二次进位结果与二次和结果,并同时获取所述高位相加后的高位溢出值Rv,其中,所述全加器采用根据当前舍入模式设定的输入进位值作为输入进位;
根据当前舍入模式获取L位的进位值与和位值;
将L位的和位值作为舍入结果的L位,当识别到L位的进位值为0时,将所述二次进位结果与二次和结果的高位相加之和作为舍入结果的高位,当识别到L位的进位值为1时,将所述二次进位结果与二次和结果的高位相加之和再加1作为舍入结果的高位。
2.根据权利要求1所述的方法,其特征在于,在获取所述二次进位结果与二次和结果之后,还包括:
采用并行前缀加法器同时计算获取所述二次进位结果与二次和结果的高位相加之和,以及获取所述二次进位结果与二次和结果的高位相加之和加1。
3.根据权利要求1所述的方法,其特征在于,还包括:
当识别到当前舍入模式为舍入到最近时,将输入进位值设置为1;
当识别到当前舍入模式为舍入到零时,将输入进位值设置为0。
4.根据权利要求3所述的方法,其特征在于,根据当前舍入模式获取L位的进位值包括: 
根据二次进位结果的L位值Lc、二次和结果的L位值Ls和R位值Rs、所述高位溢出值Rv、以及二次进位结果与二次和结果中的R位进位输出值Cout[-R],在对应关系表中查询获取对应的L位的进位值;所述对应关系表中,所述Rs、Rv和Cout[-R]相加后的进位值,再与所述Lc和Ls相加获得的进位值与所述L位的进位值对应。
5.根据权利要求3所述的方法,其特征在于,根据当前舍入到最近的舍入模式获取L位的和位值包括:
按照如下公式计算所述L位的和位值Lsb:
Lsb=Ls^Lc^(R&Rv|Cout[-R])&Rv|R&Cout[-R]
其中,Ls为二次和结果的L位值;Lc为二次进位结果的L位值;Rv为所述高位溢出值;Rs为二次和结果的R位值;Cout[-R]为二次进位结果与二次和结果的R位相加的进位值;^表示异或运算;&表示与运算;|表示或运算。
6.根据权利要求3所述的方法,其特征在于,根据当前舍入到零的舍入模式获取L位的和位值包括:
按照如下公式计算所述L位的和位值Lsb:
Lsb=Ls^Cout[-L]
其中,Ls为二次和结果的L位值;Cout[-L]为二次进位结果与二次和结果的最低位至L+1位相加的进位值;^表示异或运算。
7.根据权利要求3所述的方法,其特征在于,当识别到当前舍入模式为舍入到最近时,在获取所述舍入结果之后,还包括:
当识别到所述高位溢出值为0时,确定判断位数K等于R,当识别到所述高位溢出值为1时,确定所述判断位数K等于L;
判断所述黏着位的最低位至K+1位是否全为零,若是,则确定零标志Z等于0,若否,则确定零标志Z等1;
按照如下公式计算平局判断信号tie_cond:
tie_cond=~((sum[-K]^carry[-K]^Cout[-K])&Z_(K+1))
其中,~代表非运算;sum[-K]为二次和结果的K位值;carry[-K]为二次进位结果的K位值;Cout[-K])为二次进位结果与二次和结果的最低位至K+1位相加的进位值;
当判断出所述平局判断信号tie_cond等于1时,将所述舍入结果的L位置0,当判断出所述平局判断信号tie_cond等于0时,保持所述舍入结果的L位不变。
8.根据权利要求7所述的方法,其特征在于,在获取所述舍入结果之后,判断所述黏着位的最低位至K+1位是否全为零,若是,则确定零标志Z等于0,若否,则确定零标志Z等1包括:
按照如下公式计算所述黏着位的最低位至K位中各位的快速预测值z[i]:
z[i]=~((sum[i]^carry[i])^(sum[i-1]|carry[i-1])) -2n<i<-(K+1)
其中,2n为所述黏着位最低位的位数值;
按照如下公式进行按位相与运算得到K+1位的所述零标志Z:
Z-(K+1)=&z[-(K+1):-2n]。
9.根据权利要求1所述的方法,其特征在于:
还包括:当识别到当前舍入模式为舍入到无穷时,将输入进位值设置为0;
且在获取到浮点数进位保留形式的进位结果与和结果之后,还包括:在所述进位结果与和结果的黏着位的各位分别加1。
10.根据权利要求9所述的方法,其特征在于,根据当前舍入到无穷的舍入模式获取L位的进位值包括:
根据二次和结果的L位值Ls、高位溢出值Rv、以及二次进位结果与二次和结果最低位至L+1位相加的进位值Cout[-L],在对应关系表中查询获取对应的L位的进位值;所述对应关系表中,所述Ls、Rv和Cout[-L]相加后的进位值与所述L位的进位值对应。
11.根据权利要求9所述的方法,其特征在于,根据当前舍入到无穷的舍入模式获取L位的和位值包括: 
按照如下公式计算所述L位的和位值Lsb:
Lsb=Ls^Cout[-L])^Rv
其中,Ls为二次和结果的L位值;Cout[-(L+1)]为二次进位结果与二次和结果的最低位至L+1位相加的进位值;^表示异或运算。
12.根据权利要求4~8、10~11任一所述的方法,其特征在于:所述Cout[i]值采用超前生成链计算获取,其中,i为自然数。
13.一种乘法舍入实现装置,其特征在于,包括:
至少L+2个半加器和一个全加器,用于分别获取浮点数进位保留形式的进位结果与和结果,其中,所述进位结果与和结果的浮点数分别划分为高位、L位、R位和黏着位,所述L位为保留部分的最低位,所述高位为保留部分除L位以外的其余部分,所述R位为截去部分的最高位,所述黏着位为截去部分除R位以外的其余部分,L为浮点精度值,所述L+2个半加器用于进行所述进位结果与和结果的高位和L位的相加操作,以获取二次进位结果与二次和结果,并同时获取所述高位相加后的高位溢出值,所述全加器用于进行所述进位结果与和结果的R位的相加操作;
输入进位存储器,用于存储输入进位值,为所述全加器提供输入进位;
进位与和位获取模块,用于根据当前舍入模式获取L位的进位值与和位值;
并行前缀加法器,用于计算获取所述二次进位结果与二次和结果的高位相加之和,以及获取所述二次进位结果与二次和结果的高位相加之和加1;
结果获取模块,用于将L位的和位值作为舍入结果的L位,当识别到L位的进位值为0时,将所述二次进位结果与二次和结果的高位相加之和作为舍入结果的高位,当识别到L位的进位值为1时,将所述二次进位结果与二次和结果的高位相加之和再加1作为舍入结果的高位。
14.根据权利要求13所述的装置,其特征在于:L=52,采用输入进位置0的全加器作为第24个半加器。
15.根据权利要求13所述的装置,其特征在于,还包括:
注入模块,用于在所述进位结果与和结果的黏着位的各位分别加1。 
CN2010105320900A 2010-11-01 2010-11-01 乘法舍入实现方法和装置 Expired - Fee Related CN102004627B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2010105320900A CN102004627B (zh) 2010-11-01 2010-11-01 乘法舍入实现方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2010105320900A CN102004627B (zh) 2010-11-01 2010-11-01 乘法舍入实现方法和装置

Publications (2)

Publication Number Publication Date
CN102004627A CN102004627A (zh) 2011-04-06
CN102004627B true CN102004627B (zh) 2012-11-21

Family

ID=43812013

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2010105320900A Expired - Fee Related CN102004627B (zh) 2010-11-01 2010-11-01 乘法舍入实现方法和装置

Country Status (1)

Country Link
CN (1) CN102004627B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9461667B2 (en) * 2013-12-30 2016-10-04 Samsung Electronics Co., Ltd. Rounding injection scheme for floating-point to integer conversion
CN104238992A (zh) * 2014-09-09 2014-12-24 南京航空航天大学 一种高性能非精确浮点加法器及其应用方法
GB2539265B (en) * 2015-06-12 2020-07-29 Advanced Risc Mach Ltd Apparatus and method for controlling rounding when performing a floating point operation
US9823897B2 (en) * 2015-09-25 2017-11-21 Arm Limited Apparatus and method for floating-point multiplication
CN106802783B (zh) * 2017-01-23 2019-04-23 青岛专用集成电路设计工程技术研究中心 一种小数加法结果圆整方法与装置
CN111596888A (zh) * 2020-03-02 2020-08-28 成都优博创通信技术股份有限公司 一种在低位宽mcu上实现32位无符号数整型乘法运算的方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1570846A (zh) * 2004-05-12 2005-01-26 中国人民解放军国防科学技术大学 并行粘接位计算部件设计方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7398289B2 (en) * 2002-12-13 2008-07-08 Smi Stmicroelectronics S.R.L Method and device for floating-point multiplication, and corresponding computer-program product

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1570846A (zh) * 2004-05-12 2005-01-26 中国人民解放军国防科学技术大学 并行粘接位计算部件设计方法

Also Published As

Publication number Publication date
CN102004627A (zh) 2011-04-06

Similar Documents

Publication Publication Date Title
CN105468331B (zh) 独立的浮点转换单元
US11249726B2 (en) Integrated circuits with modular multiplication circuitry
US8805915B2 (en) Fused multiply-add apparatus and method
KR101616478B1 (ko) 프로그램가능한 프로세서 상에서의 임의의 갈루아 필드 산술연산의 구현
CN102004627B (zh) 乘法舍入实现方法和装置
CN100570552C (zh) 一种并行浮点乘加单元
CN107305485B (zh) 一种用于执行多个浮点数相加的装置及方法
US8788561B2 (en) Arithmetic circuit, arithmetic processing apparatus and method of controlling arithmetic circuit
CN1928809A (zh) 用于执行浮点运算的系统、设备和方法
CN1818851A (zh) 用于执行浮点算术运算的系统和方法
CN106951211A (zh) 一种可重构定浮点通用乘法器
CN100555212C (zh) 一种浮点乘加器及其乘法csa压缩树的进位校验装置
EP3769208B1 (en) Stochastic rounding logic
CN101295237B (zh) 求商和余数的高速除法器
CN100382011C (zh) 蒙哥马利乘法器中的流水线内核
CN1258710C (zh) 用于高效模数归约和模数乘法的电路和方法
JP4273071B2 (ja) 除算・開平演算器
GB2511314A (en) Fast fused-multiply-add pipeline
US8909689B2 (en) Arithmetic device
CN108897526B (zh) 一种基于多次平方运算的复合有限域求逆器及其求逆方法
US20060277242A1 (en) Combining circuitry
CN102646033A (zh) 模乘运算的实现方法和装置
US7266578B2 (en) Method and hardware for computing reciprocal square root and program for the same
JPS6285333A (ja) 浮動小数点乗算器丸め処理方式
CN103176768A (zh) 计算经典模乘的模乘方法以及可扩展模乘器

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
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20121121

Termination date: 20171101