一种用于将浮点操作数相乘的数据处理装置和方法

xiaoxiao2020-10-23  19

一种用于将浮点操作数相乘的数据处理装置和方法
【技术领域】
[0001]本发明涉及用于浮点操作数相乘的数据处理装置和方法。
【背景技术】
[0002]数据处理系统具有操作浮点数的能力是众所周知的。用于执行浮点乘法的硬件机制通常使用乘法器和被乘数以生成很多部分乘积。然后,各种形式的进位保留加法器被用来将这些部分乘积减少至两个部分乘积。该最终的两个部分乘积被相加然后被舍入以生成最终乘积结果。
[0003]伴随上述内容的问题在于如何处理非规格化的结果。非规格化的结果是指数值具有最小允许值,并且有效数字(也被称作尾数)小于一,例如,0.001101。非规格化数的本质为本技术领域技术人员所熟知。一种处理非规格化数的方式是将它们看作例外,并在软件中操作对它们的处理。这是一种低性能的解决方案。如果非规格化数待在硬件中被处理,则问题是加法器的来自两个部分乘积的输出不可能被恰当对齐以用于舍入。这需要加法器输出被移位,然后使用另一加法器进行舍入。移位加法器和用于舍入的另一加法器引入了不期望的额外的硬件和延迟。
[0004]共同拥有的美国专利8,463,834,其全部内容被并入此案以供参考,该专利提出了一种用于浮点操作数相乘的改进机制,同时能够处理非规格化的结果,该专利所述的机制使用附加的乘法循环以在部分乘积相加和舍入之前对该部分乘积进行左移或右移。通过这种方法,可使舍入常数总是被注入在固定位置,从而显著地简化了舍入过程。然而,尽管该方法简化了处理非规格化结果内的舍入问题,但是其需要为部分乘积使用额外的移位阶段,该阶段会不利地影响性能。
[0005]因而,非常期望提供一种当浮点操作数相乘时提供改进的性能、同时对非规格化结果仍能够正确舍入的机制。

【发明内容】

[0006]从第一方面来看,本发明提供了用于使第一和第二被规格化的浮点操作数相乘以生成结果的数据处理装置,每一个被规格化的浮点操作数包括有效数字和指数,该数据处理装置包括:指数确定电路,该指数确定电路被配置成为规格化版的结果计算结果指数;舍入值生成电路,该舍入值生成电路被配置成通过将舍入常数在第一方向上移动移位量以生成舍入值,其中移位量取决于结果指数;部分乘积生成电路,该部分乘积生成电路被配置成将第一和第二被规格化的浮点操作数的有效数字相乘以生成第一和第二部分乘积;加法器电路,该加法器电路被配置成将第一和第二部分乘积与舍入值相加以生成被规格化的结果有效数字;以及移位电路,该移位电路被配置成将被规格化的结果有效数字在与所述第一方向相反的第二方向上移动所述移位量以便于生成经舍入的结果有效数字。
[0007]根据本发明,结果指数被计算用于规格化版的结果(即,结果的有效数字是1.F的形式,其中F是该结果的小数部分),然后通过将舍入常数在第一方向上移动移位量来生成舍入值。第一方向是朝向最高有效位的方向,而在第一方向上移动通常是通过执行左移来实现的。一旦两个部分乘积在乘法处理期间被生成,则在将第一和第二部分乘积相加的处理期间这两个部分乘积加上舍入值以便于生成被规格化的结果有效数字。其后,被规格化的结果有效数字在与第一方向相反的第二方向上被移位(通常通过执行右移),同样,所应用的移动的量仍由移位量决定,其后结果有效数字是经舍入的结果有效数字(取决于舍入模式,该被规格化的结果有效数字受到基于保护位和粘贴位而进行的任何可能需要的调整)。
[0008]通过根据规格化版的结果的结果指数确定的移位量,以其后向舍入常数应用该移位量以便于生成舍入值(从而舍入常数处于正确的舍入位置),这使得当生成被规格化的结果有效数字时,能够确定用于与第一和第二部分乘积相加的正确的舍入位。从而,此机制能够适应非规格化结果的各种性质的舍入位置,该技术对于规格化浮点数和非规格化浮点数二者来说都能够以非常有效的方式获得正确的结果。
[0009]通过上述机制生成的结果有效数字可能需要依据保护位元和粘贴位元做出调整。在一个实施例中,本发明提供了用于在被规格化的结果有效数字内正确捕获保护位元和粘贴位元的机制,以使得它们能够被用于确定任何所需的调整。具体来说,在一个实施例中,数据处理装置还包括掩码生成电路以及保护位元和粘贴位元检测电路,该掩码生成电路被配置成通过将掩码常数在第一方向上移动移位量来生成掩码值,该保护位元和粘贴位元检测电路被配置成向被规格化的结果有效数字应用掩码值以识别出在该被规格化的结果有效数字中的保护位元和粘贴位元。继而结果调整电路被配置成依据该保护位元和粘贴位元调整经舍入的结果有效数字。因此,与舍入值一样,掩码值也是通过将常数(在此情况中是掩码常数)在第一方向上移动移位量(如前所述,移位量取决于规格化版的结果的结果指数)来确定的。因而,考虑到结果是非规格化的情况下的指数的大小,掩码值被正确地对齐以捕捉保护位元和粘贴位元。上述方法提供了用于从被规格化的结果有效数字中提取正确的保护位元和粘贴位元的尤其有效的机制。
[0010]在一个实施例中,如果结果指数在规格化的范围中,则移位量被设置成识别零移位。从而,当生成被规格化的结果有效数字时,无移位版的舍入常数将被输入至加法器电路,并且当生成经舍入的结果有效数字时,将不需要对被规格化的结果有效数字进行后续移位。然而,当结果是非规格化的时候,移位量将是非零的,并且所应用的移位的范围将取决于非规格化指数的大小,从而能够以有效的方式捕捉用于舍入的正确的输入,其中该方式能够适应非规格化结果的舍入位置的可变性。
[0011]在一个实施例中,数据处理装置还包括用于接收第一和第二输入浮点操作数的输入接口,其中该第一和第二浮点操作数被用于组成所述第一和第二被规格化的浮点操作数,该数据处理装置包括:规格化电路,该规格化电路被配置成响应于所述第一和第二输入浮点操作数之一为非规格化操作数,形成所对应的被规格化的浮点操作数以具有通过将该非规格化的操作数的有效数字在所述第一方向上移动规格化量而形成的有效数字,以及具有通过依照所述规格化量来调整的非规格化操作数的指数而形成的指数。尽管所接收的第一和第二输入浮点操作数可能均为规格化的浮点操作数,其中取决于输入浮点操作数的指数的大小,仍存在结果是非规格化的可能性,但是,另一情况也能够产生非规格化的结果,其中该结果仍能够在用于表达非规格化结果的有效范围之内,该情况是输入浮点操作数之一为非规格化的情况。在这种实例中,上面提到的规格化电路将在乘法操作被执行前创建规格化版的该浮点操作数。由于需要正确地识别将由该装置使用的移位量,这还保证了之后指数确定电路能够为规格化版的结果计算结果指数。
[0012]在一个实施例中,该装置还包括移位量生成电路,该移位量生成电路被配置成生成所述移位量,从而如果结果指数为非规格化的,则该移位量取决于结果指数和最小规格指数值之间的差。具体来说,在结果指数和最小规格指数值之间的差越大,则移位量增加。
[0013]在一个实施例中,移位量生成电路被配置成限制移位量不超过预定最大移位量。浮点数的存储格式是这样的:存在所能表达的最小非规格化值,并且如果浮点值小于该最小非规格化值,则该浮点值将被视为零值。在一个实施例中,预定最大移位量考虑到根据存储格式所能表示的最小非规格化浮点操作数而被确定,并且考虑到参照存储格式所能表达的非规格化值在实践中能够被应用的移位的最大量,该预定最大移位量保证提供在该装置内的移位电路能够被限制为适当的大小。
[0014]在一个实施例中,舍入常数取决于由数据处理装置所使用的舍入模式。例如,在向最近偶数舍入模式中,舍入常数将与凑整舍入模式所使用的舍入常数不同。
[0015]在一个实施例中,当将舍入常数在所述第一方向上移动所述移位量时,舍入值生成电路被配置成将舍入常数从其移动的最低有效位位置设置为预定位元值,并且该电路被配置成将那些最低有效位位置和移位后的舍入常数一起包括在舍入值中。此外,在一个实施例中,预定位元值取决于由数据处理装置所使用的舍入模式。
[0016]在一个实施例中,掩码常数的每一位均被设置为预定位元值,并且当将掩码常数在所述第一方向上移动所述移位量时,掩码生成电路被配置成将掩码常数从其移动的最低有效位位置设置为所述预定位元值,并且该电路被配置成将那些最低有效位位置和移位后的掩码常数一起包括在掩码值中。
[0017]从第二方面来看,本发明提供了操作数据处理装置以使第一和第二被规格化的浮点操作数相乘以便于生成结果的方法,每一个被规格化的浮点操作数包括有效数字和指数,该方法包括:为规格化版的结果计算结果指数;通过将舍入常数在第一方向上移动移位量来生成舍入值,其中移位量取决于结果指数;将第一和第二被规格化的浮点操作数的有效数字相乘以生成第一和第二部分乘积;将第一和第二部分乘积与舍入值相加以生成被规格化的结果有效数字;以及将被规格化的结果有效数字在与第一方向相反的第二方向上移动所述移位量以便于生成经舍入的结果有效数字。
[0018]从第三方面来看,本发明提供了用于将第一和第二被规格化的浮点操作数相乘以生成结果的数据处理设备,每一个被规格化的浮点操作数均包括有效数字和指数,该数据处理设备包括:用于为规格化版的结果计算结果指数的指数确定装置;用于通过将舍入常数在第一方向上移动移位量来生成舍入值的舍入值生成装置,其中移位量取决于结果指数;用于将第一和第二被规格化的浮点操作数的有效数字相乘以生成第一和第二部分乘积的部分乘积生成装置;用于将第一和第二部分乘积与舍入值相加以生成被规格化的结果有效数字的加法器装置 ;以及用于将被规格化的结果有效数字在与所述第一方向相反的第二方向上移动所述移位量以便于生成经舍入的结果有效数字的移位装置。
【附图说明】
[0019]参考如附图所说明的实施例,本发明将仅以示例的方式被进一步地描述,其中:
[0020]图1A和IB示出了浮点数是如何分别按照单精度格式和双精度格式被存储在寄存器或存储器中的;
[0021]图2是根据一个实施例的被提供在数据处理装置内的组件的框图,具体示出了根据该实施例的有效数字处理路径;
[0022]图3示出了根据一个实施例的被用于确定计算指数的电路;
[0023]图4示出了根据一个实施例的用以计算移位量的电路;
[0024]图5A示出了在不同的舍入模式中所用的舍入常数,以及图5B示出了根据一个实施例的舍入值生成电路;
[0025]图6示出了根据一个实施例的掩码生成电路;
[0026]图7A示出了根据一个实施例的保护位掩码和粘贴位掩码的生成,图7B示出了根据一个实施例的被用于生成保护位元的组件,以及图7C示出了根据一个实施例的被用于生成粘贴位元的组件;以及
[0027]图8是示出了在结果指数是非规格化的情况下,图2中的电路的运算的流程图。
【具体实施方式】
[0028]在浮点表示法中,通过使用符号位、指数位E和小数位F来表示数字。有效数字是数字1.F或0.F,这取决于指数E的值,即如果E为零,则是0.F,反之则是1.F。有效数字的整数部分(0.或1.)在IEEE-754标准中并未被明确地存储,但是乘法所需要的。符号位表示浮点数是正的或负的,有效数字表示浮点数的有效位数,以及指数表示与有效数字有关的小数点的位置(也被称为二进制小数点)。通过改变指数的值,小数点能够在有效数字内向左和向右“浮动”。这意味着对于预定数量的位元,浮点表示法能够表示比定点表示法(其中小数点在有效数内具有固定的位置)更宽的范围的数字。然而,由于一些位元被用于存储指数,达到额外的范围是以降低精度为代价的。有时,浮点算术运算生成的结果具有比有效数字所用的位数更多的有效位。如果发生了这种情况,则结果被舍入为所能通过使用可用数量的有效位来表示的值。
[0029]图1A和IB示出了浮点数如何被存储在寄存器或存储器中。在如图1A所示的单精度表示法中,32位被用于存储浮点数10。一位被用作符号位S 20,八位被用于存储指数E 30,以及23位被用于存储有效数字的小数部分F 40。对于规格化的值,小数部分F的23位与具有值“一”的隐含位一起组成24位的有效数字1.Fo小数点最初被认定置于隐含位和有效数字的23个存储位之间。所存储的指数E被偏离固定值127以使得在所表示的浮点数中,如果E-127为负,则小数点从它的初始位置被左移E-127个位置(例如,如果E-127 = -2,则1.01的有效数表示0.0101),或者如果E-127为正,则从它的初始位置右移E-127个位置(例如,如果E-127 = 2,则1.01的有效数表示101)。该偏离被用于使得比较两个浮点数值的指数更加简单,像那样小数点的负移和正移均能够由所存储的E的正值来表示。如图1所示,所存储的表达式S[31],E[30:23],F[22:0]表示具有值(_1)S*1.F[22:O]*2 (E_127)的数值。这种形式的单精度浮点数被认为是“规格化的”。如果所计算出的浮点值不是规格化的(例如,它被生成为小数点不在有效数字的最左两位之间的位置),则通过将有效数字向左或向右移动并且相应地调整指数直到该数为(_l)s*l.F[22:0]*2(e_127)的形式来将该浮点值规格化。
[0030]如图1B所示还提供了双精度格式50,其中通过使用64个存储位来表示有效数字和指数。64个存储位包括一位符号位60,11位指数70和53位有效数字1.F中的52位小数部分F。在双精度格式中,指数E被偏离了值1023。因此,在双精度格式中,所存储的表达式 S [63],E [62:52],F[51:0]表示浮点值(_1)S*1.F[51:0] *2(E_1CI23)。
[0031]除了规格化的浮点值外,浮点表示法还能够表示其他量。如果一个值的指数E的所有位元均被设置成1,则这表示特殊值,诸如无穷值和“非数值”(NaN),这是不能通过使用实数来表示的结果,诸如负数的平方根、除式0/0、使用无穷的计算结果以及函数被应用于该函数被定义的范围之外的值的结果(例如,小于-1或大于+1的数字的反正弦或反余弦)。当指数的所有位均等于I时,无穷通常由有效数字位F全部等于O来表示,而其他非数值由有效数字的非零值表示。处理无穷和非数值的技术是众所周知的并且任何现有技术均能够被使用。因此对这些数字的处理将不在本文做详细讨论。
[0032]当指数E的所有位均等于零时,这表示零或者非规格化数。如果浮点值的有效数字位F全部为零,则该浮点值等于零。如果有效数字的任何位元等于1,则该数是非规格化数。非规格化数的有效数字的隐含位等于零,而不是如在规格化数的情况中的那样隐含位等于一。这使得值能够小于使用规格化数所表示的最小数。例如,在单精度的情况中,通过使用规格化数所能表示的最小值为1.0*2_126,而如果使用非规格化数,则所能表示的最小值为2_149(0.00000000000000000000001*2_126),这是由于前导一现在能够处于24位小数F的最低有效位。
[0033]当执行浮点操作数的乘法时,该乘法通过将有效数字相乘并且将指数相加来实现。如果指数和e小于最小的规格化指数n,则有效数字乘积必须被右移(n-e)位。在双精度(DP)浮点的情况下,η为-1022。如果考虑两个规格化的浮点数2_5°°和2 _54°相乘的示例,这将产生非规格化的乘积2.°,并且相应地在该示例中有效数字乘积将必须被右移-1022—1040 = 18 位。
[0034]当试图执行注入舍入时,此右移会造成问题。双精度有效数字具有53位,所以注入舍入发生在被规格化的106位乘积的第53位。如果此乘积被右移18位,则作为替代舍入需要发生在第35位。
[0035]在已公开的美国专利申请US-A-2006/0117080和US-A-2006/0136543中描述了注入舍入。这两篇较早的申请的内容被全部通过引用合并入本文。
[0036]下面所描述的实施例的技术提供了用于在正确的(非固定的)位置处执行注入舍入的机制,并且该机制还用于计算用于确定不精确的标记和舍入校正的保护位元和粘贴位
J L.ο
[0037]图2示意性地示出了浮点乘法器管线。需要理解的是此浮点乘法器管线通常是诸如被体现为集成电路的处理器内核的数据处理装置的一部分。由处理器执行的程序指令能够指定待被执行的浮点乘法运算。这种类型的对总体系统内的浮点乘法器的使用对于本领域技术人员来说是熟知的。下面将从如部分IEEE 754标准所定义的对双精度数字的操作的角度进行描述。需要理解的是本技术可与其他形式的浮点数一起使用。
[0038]待被乘在一起的两个浮点操作数被接收在输入寄存器100、105中。在第一阶段Vl中执行任何所需的输入操作数A和B的规格化。具体来说,每个操作数的有效数字从该操作数的小数部分被创建,如果指数为非零,则有效数字为1.F,如果指数为零,则有效数字为0.Fo前导零计数(CLZ)电路110、120被用于确定从有效数字的最高有效位开始的连续数位位置的数量(例如,分别为CLZ sig a和CLZ sig b),连续数位位置包括逻辑零值。如果输入操作数为规格化的浮点操作数,则应当理解的是将不存在前导零,因此由电路110、120输出的前导零计数将标识无前导零。而对于非规格化的数,将存在至少一个前导零,并且取决于有效数字的小数部分的值可能潜在地存在更多前导零。然后,前导零计数从CLZ电路110、120被转发至所对应的左移电路125、135,其中取决于来自CLZ电路的输出,相关的有效数字被左移。其后,来自左移电路125、135的输出表示被规格化的有效数字。
[0039]由左移电路125输出的被规格化的有效数字被存储在寄存器145内。而由左移电路135输出的被规格化的有效数字首先受到电路140中的布斯编码(Booth encoding)以便于建立布斯乘法项,其后这些项被存储在寄存器155内。在给定的示例中使用了基数8布斯编码,但是应当理解的是如果需要也可以使用其他形式的布斯编码。当使用基数8布斯编码时,从左移电路135输出的被规格化的有效数字被认为是三位每次,并被表示为在+4和-4之间的操作数A的有效数字(例如,sig a)的倍数。尽管0、1、2和4的倍数能够通过标准移位运算被容易地获得,但是单独计算操作数A的有效数字的三倍(例如,3x sig a)是有益的,并且这是由电路115执行的,其后取决于由电路110输出的前导零计数(例如,CLZ),输出受到由电路130执行的左移,然后该被规格化的三倍有效数字(例如,被规格化的3x sig a)被存储在寄存器150中。
[0040]在周期V2中,通过使用复用器电路160来执行有效数字的乘法,然后包括3: 2压缩器的电路165被用于将部分乘积缩减到两个106位的部分乘积,其后这两个部分乘积被存储在寄存器170、175内。本领域的技术人员将很容易理解布斯乘法,因此将不做进一步地讨论。还应当理解的是布斯乘法对于本技术而言不是必要的,并且任何产生两个部分乘积的乘法方法均可被使 用。
[0041]同样在阶段V2中,在图2中由框180表示的各种电路组件被用于生成所需的用来对规格化乘积和非规格化乘积均正确执行舍入的多个值。具体来说,对于非规格化乘积,所生成的值能够使得在考虑到对该非规格化指数的值需被执行的右移的情况下在所需的位元位置执行注入舍入。
[0042]电路180接收在阶段Vl期间在指数处理管线中生成的计算指数。尽管计算指数能够以多种方式被生成,但是在图3中示出了一种可能被用于生成计算指数的方法。具体来说,通过使用加法器300将由电路110输出的前导零计数从操作数A的指数ea中减去,与之类似,通过使用加法器305将来自电路120的前导零计数从操作数B的指数eb中减去。这导致了两个被规格化的指数的输出,其后这两个被规格化的指数由加法器310相加在一起以便于生成计算指数(ecomp)。如果两个输入操作数均为规格化的浮点数,则应当理解的是CLZ电路110、120 二者均会输出零值,因此在加法器310将指数加在一起之前,加法器300、305将不执行调整。然而,如果输入操作数之一为非规格化的,则来自CLZ电路110、120之一的输出将为非零,并且在加法器310内执行加法之前,将对指数之一做出调整。尽管原则上,两个输入操作数均能够是非规格化的,但当执行两个非规格化操作数的乘法时,结果指数将超出图1B中所讨论的用于在双精度格式内表达的范围,从而乘法的结果将为零。因此出于本文所描述的技术的角度,这是一个不感兴趣的情况。
[0043]—旦计算指数已被生成为对电路180的输入,在电路框180内的移位量生成电路被用于生成移位量值,其后该移位量值被存储在寄存器195中。在所描述的实施例中,移位量值为六位值。尽管移位量可能以多种方式被生成,但是图4示出了能够被用于从计算指数生成移位量的组件的一种布局。首先,加法器320被用于执行计算-ecomp-1022以产生大小为12位的内部移位量值。鉴于输入的大小为11位,输出的大小为12位以使该加法的所有潜在的数位均能够被捕获。然而,出于由移位量生成电路执行处理的目的,开头两位被忽略,那些位被用于捕获符号信息。
[0044]由加法器320输出的内部移位量的较低的六位被发送至六位成对逻辑或电路330。位元6至9在电路325中受到逻辑或运算,以使得如果那些位元中的任何位元被设置为逻辑一值,则逻辑一值被输出。该值被提供在该六位成对逻辑或电路330的每一个输入或门的另一输入处。因此,需要理解的是如果位元9至6中的任何位元被设置,则来自电路330的输出将是全部由一组成的六位值,从而确定出最大移位值。反之,从加法器320输出的原始最低有效数字的六位将在未被修改的情况下被转发作为来自六位成对逻辑或电路330的输出。
[0045]然后,在计算指数表明被规格化的乘积是非规格的情况下,来自电路框330的输出表示待被使用的移位量值。然而,如果被规格化的乘积在规格范围内,则移位量被清除为逻辑零值。在一个实施例中,这是通过电路335检测计算指数是否表明被规格化的乘积是非规格化的来实现的,在那种情况下该电路产生逻辑一值,反之则产生逻辑零值。六位成对逻辑与运算由组件340执行以便于在该被规格化的乘积是非规格化的情况下将来自电路框330的输出未经修改地传递出去,否则(即,如果被规格化的乘积在规格范围内)将导致移位量被清除为全部为零。
[0046]舍入模式是乘法运算的输入,并且在一个实施例中可以是RZ(无舍入)、RN(舍入到最接近的偶数)或RU(向上舍入)。如图5A示意性所示,在电路框180内生成52位舍入常数。具体来说,对于舍入到最接近的偶数模式,舍入常数是逻辑一值后面跟着51个逻辑零值。如果替代地选择向上舍入模式,则舍入常数是逻辑一值后面跟着51个逻辑一值。对于RZ模式,舍入常数被设置等于52个逻辑零值。
[0047]然后,舍入值生成电路被用于生成待被存储在寄存器185内的舍入值。图5B示出了在一个实施例中舍入值是如何被生成的。具体来说,舍入常数被输入至左移电路350,该电路基于先前所计算的移位量执行左移运算以便于产生106位舍入值。在输入处,在舍入常数左边的位元全部为逻辑零值。由于左移被执行,舍入常数从其被移动的最低有效位位置被逻辑零值(对于舍入到最接近的偶数模式而言)或逻辑一值(对于向上舍入模式而言)填满。对于RZ模式,舍入常数全部为零,并且舍入值也被设置成全部为零以标识未执行舍入。溢出舍入值也被产生并被存储在寄存器190内。溢出舍入值被用在溢出和路径中,并且该溢出和路径仅被用于规格化乘积。通过将存储在寄存器185内的溢出值左移一位来计算溢出舍入值。
[0048]如图2所示,电路180还被用于生成用来存储在寄存器200中的掩码值,其后该掩码值在最终阶段中被用于获取检测任何必要的舍入调整和用于设置诸如不精确的标记的标记所需的保护位元和粘贴位元。图6示出了掩码生成电路,该电路可被包括在电路框180内以生成掩码值。具体来说,52位掩码常数被生成为全部由逻辑一值组成。其后,该掩码常数基于移位量受到电路360的左移运算。这产生了 106位掩码值。在左移运算被执行前,掩码常数左边的所有位元均被设置成逻辑零值。由于左移被执行,掩码常数从其被移动的任何最低有效位均被逻辑一值填充。
[0049]在最终阶段V3中,从寄存器170、175读取两个部分乘积,并将该两个部分乘积与两个舍入值相加在一起。具体来说,在溢出和路径中,通过使用加法器电路205、210,将部分乘积与来自寄存器190的溢出舍入值相加在一起以便于生成溢出和值。同样地,在标准和路径内,这两个部分乘积与舍入值185在加法器电路215、220内被加在一起以生成和值。由加法器220输出的和通过使用右移电路230被右移移位量。此外,由加法器210输出的溢出和通过使用右移电路225被右移“移位量-1”。
[0050]如之前所提到的,对于非规格化乘积,所使用的最终和将从标准和路径的输出中导出。由于舍入值被确定的方式,应当理解的是,在和的生成期间,考虑到将需要由电路230执行的右移以便使相关的和去规格化,舍入值被合并在正确的位元位置处以便生成结果的正确的有效数(考虑到内部表示法将需要指数被调整为所能表示的最小指数值的事实,在双精度数字的特定示例中,即为-1022)。
[0051]尽管和被右移,掩码被应用于来自加法器210、220的输出以便于捕获保护位元和粘贴位元。如本领域技术人员将理解的,保护位元和粘贴位元被用于校正每两个和中的低阶位元,必要的校正被包含在框245、250内以便于生成经舍入的溢出和以及经舍入的和。相关符号和指数值也被包含在此处,然后基于来自标准和加法器220的输出的最高有效位是否被设置,选出适当的结果。如果最高有效位被设置,则选择溢出乘积,反之则选择标准乘积。应当理解的是诸如NaN和无穷之类的特殊值被单独处理,并且如图2所示,基于适当的控制信号那些特殊值能够由复用器255选择。对于非规格化数字,应当理解的是来自加法器220的输出的最高有效位将不会被设置,因而来自电路250的输出将总是被选作为结果O
[0052]来自加法器210、220的106位输出和将最终浮点有效数字包含在它们的较高位上。紧挨着结果右侧的位元是保护位元,并且保护位元右边的所有位元的逻辑或组成了粘贴位元。如本领域技术人员将理解的,保护位元和粘贴位元被用于对到最接近的偶数舍入模式的舍入进行舍入校正,并且它们还被用于计算不精确的标记。这些处理在最末位和标记电路235、240内被执行。
[0053]考虑到最末位和标记电路240,图7A示出了保护掩码(本文也被称为G_mask)和粘贴掩码二者是如何从存储在寄存器200中的掩码值生成的。具体来说,逻辑与电路370接收掩码值和第二值,其中该第二值的最高有效位被设置成零,并且它的其余位元由掩码值的位元105至I的求反组成。这导致了 106位G-mask的生成,其中该G_mask除了一个位元位置包含逻辑一值,其余位置全部为零,此逻辑一值识别保护位置。粘贴掩码由106位值组成,其中该106位值的最高有效位被设置成零,并且它的其他位元由掩码值的位元105至一组成。应当理解的是其后粘贴掩码所有包含最终和的位元位置以及保护位元位置包含逻辑零值,但是和内包含粘贴位元的所有位元位置均为逻辑一值。
[0054]然后,如图7B所示,电路240能够生成保护位元。具体来说,和与G_mask被输入至与函数375,其中该函数产生106位输出。由于G-mask的性质,应当理解的是如果在和内的保护位元为零,则这106位将全部为零,但是如果在和内的保护位元被设置成逻辑一值,则这106位将包括逻辑一值。因此,在该106位上执行逻辑或函数380以便于生成保护位元(例如,G BIT) ο如图7C所示,通过使用和与粘贴掩码能够以相似的方式生成粘贴位元。同样,由电路385执行逻辑与函数,这导致了 106位值的生成。如果任何粘贴位元处于逻辑一值,则来自与门的输出中至少存在一个逻辑一值,从而逻辑或函数390被执行以便于生成粘贴位元(其中该粘贴位元将具有零值或者一值)。
[0055]在最末位和标记电路235内生成的与溢出和有关的保护掩码和粘贴掩码对于非规格化结果保持不变,而对于规格化结果则被左移一位。因此,那两个掩码的生成能够被表达如下:
[0056]govfl_mask = (g_mask[105:0] & {106 {exp_zero}})
[0057]I ({g_mask[104:0],I,b0} &{106{?exp_zero}});
[0058]ovfl_sticky_mask = (sticky_mask[105:0]&{106{exp_zero}})
[0059]I ({sticky_mask[104:0],I,bl}&{106{?exp_zero}});
[0060]其后通过使用与图7B和7C中所述的相同的技术,这些溢出掩码被应用至溢出和以便于获取用于溢出和的保护位元和粘贴位元。
[0061]和与溢出和对于除了舍入至最接近的偶数(RNE)之外的任何舍入模式都将是正确的。对于RNE,最末位可能需要被校正,但是通过使用上面所计算的保护位元和粘贴位元,这将很容易实现。保护位元和粘贴位元也被用于确定是否设置不精确的标记。这些技术对于浮点电路设计者而言将是很容易理解的,因而在此将不做进一步讨论。
[0062]图8是示出了当所计算的结果指数为非规格化时,图2中的运算的流程图。在步骤400处,操作数A (OPA)和操作数B (OPB)的有效数字根据阶段Vl的需要被规格化。并且,在步骤405处,如之前就图3所做的讨论,为规格化版的结果确定计算指数。
[0063]在步骤410处,使第一和第二被规格化的浮点操作数的有效数字相乘以便于生成第一和第二部分乘积,这发生在阶段V2期间。此外,在阶段V2期间,在步骤415处,(例如,通过使用图4中所述的技术)移位量被生成,然后(例如,通过使用图5A和5B中所述的技术)舍入常数被左移该移位量以生成舍入值。
[0064]在步骤420处,在阶段V3期间,第一和第二部分乘积与舍入值相加在一起以便于生成从加法器220输出的被规格化的结果有效数字。
[0065]在步骤425处,例如,通过使用之前就图6所描述的技术,通过将掩码常数移动移位量来生成掩码值。在一个实施例中,步骤425被执行在阶段V2中。
[0066]在步骤430处,例如,通过使用图7A至7C中所描述的技术,掩码值被应用于被规格化的结果有效数字以便于确定保护位元和粘贴位元。此外,在步骤435处,被规格化的结果有效数字被右移移位量以便于创建初始结果有效数字。
[0067]此后,在步骤440处,基于在步骤430所生成的保护位元和粘贴位元执行任何所需的对初始结果有效数字的最低有效位(LSB)的校正。这导致了在步骤445处结果有效数字的输出,其后该结果有效数字能够与符号和指数值相结合以便于生成乘积结果。对于非规格化乘积,最终乘积指数将全部为零以便于表示最小指数-1022。因此,对于非规格化乘积,计算指数被这个值覆盖。在一个实施例中,步骤430至445被执行在阶段V3期间。
[0068]上面所描述的技术提供了一种用于对可能是非规格化的被规格化的乘积进行舍入的低延迟的方法。具体来说,它使注入舍入能够被正确地用于对可能为非规格化的被规格化的乘积进行舍入,并且它能够考虑到当处理非规格化乘积时,需要在该处执行注入舍入的非固定位置。图2中所描述的技术提供了一种性能尤其高的技术,该技术能够实现在任何模式下,在任何输入的三个周期内执行包括所需的注入舍入的乘法。它还提供了相对紧凑,因而相对容易实现的解决方案。
[0069]尽管本文已经描述了具体的实施例,但是应当理解是本发明不被限制于此,并且在本发明的范围内可对此做出许多修改和添加。例如,在不背离本发明的范围的情况下,下面的从属权利要求的特征能够与独立权利要求的特征做出各种结合。
【主权项】
1.一种用于使第一和第二被规格化的浮点操作数相乘以生成结果的数据处理装置,每一个被规格化的浮点操作数包括有效数字和指数,所述数据处理装置包括: 指数确定电路,该指数确定电路被配置成为规格化版的所述结果计算结果指数; 舍入值生成电路,该舍入值生成电路被配置成通过将舍入常数在第一方向上移动移位量来生成舍入值,其中所述移位量取决于所述结果指数; 部分乘积生成电路,该部分乘积生成电路被配置成将所述第一和第二被规格化的浮点操作数的有效数字相乘以生成第一和第二部分乘积; 加法器电路,该加法器电路被配置成将所述第一和第二部分乘积与所述舍入值相加以生成被规格化的结果有效数字;以及 移位电路,该移位电路被配置成将所述被规格化的结果有效数字在与所述第一方向相反的第二方向上移动所述移位量以便于生成经舍入的结果有效数字。2.根据权利要求1所述的数据处理装置,还包括: 掩码生成电路,该掩码生成电路被配置成通过将掩码常数在所述第一方向上移动所述移位量以生成掩码值; 保护位元和粘贴位元检测电路,该保护位元和粘贴位元检测电路被配置成向所述被规格化的结果有效数字应用所述掩码值以识别在所述被规格化的结果有效数字内的保护位元和粘贴位元;以及 结果调整电路,该结果调整电路被配置成依据所述保护位元和粘贴位元调整所述经舍入的结果有效数字。3.根据权利要求1所述的数据处理装置,其中所述移位量被设置成:如果所述结果指数在规格范围内,则标识零移位。4.根据权利要求1所述的数据处理装置,还包括用于接收第一和第二输入浮点操作数的输入接口,其中所述第一和第二输入浮点操作数被用于形成所述第一和第二被规格化的浮点操作数,所述数据处理装置包括: 规格化电路,该规格化电路被配置成响应于所述第一和第二输入浮点操作数之一为非规格化的操作数形成相对应的被规格化的浮点操作数以具有通过将所述非规格化的操作数的有效数字在所述第一方向上移动规格化量而形成的有效数字以及具有通过依据所述规格化量对所述非规格化的操作数的指数进行调整而形成的指数。5.根据权利要求1所述的数据处理装置,还包括: 移位量生成电路,该移位量生成电路被配置成生成所述移位量以使得:如果所述结果指数是非规格化的,则所述移位量取决于所述结果指数和最小规格化指数值之间的差。6.根据权利要求5所述的数据处理装置,其中所述移位量生成电路被配置成限制所述移位量不超过预定最大移位量。7.根据权利要求1所述的数据处理装置,其中所述舍入常数取决于所述数据处理装置所使用的舍入模式。8.根据权利要求1所述的数据处理装置,其中当将所述舍入常数在所述第一方向上移动所述移位量时,所述舍入值生成电路被配置成将所述舍入常量从其被移动的最低有效位位置设置为预定位元值,并且所述舍入值生成电路被配置成将那些最低有效位位置和移位后的舍入常数一起包括在所述舍入值中。9.根据权利要求8所述的数据处理装置,其中所述预定位元值取决于所述数据处理装置所使用的舍入模式。10.根据权利要求2所述的数据处理装置,其中所述掩码常数的每个位元均被设置成预定位元值,并且当将所述掩码常数在所述第一方向上移动所述移位量时,所述掩码生成电路被配置成将所述掩码常数从其被移动的最低有效位位置设置成所述预定位元值,并且所述掩码生成电路被配置成将那些最低有效位位置和移位后的掩码常数一起包括在所述掩码值中。11.一种操作数据处理装置以使第一和第二被规格化的浮点操作数相乘以便于生成结果的方法,每一个被规格化的浮点操作数包括有效数字和指数,所述方法包括: 计算规格化版的所述结果的结果指数; 通过将舍入常数在第一方向上移动移位量来生成舍入值,其中所述移位量取决于所述结果指数; 将所述第一和第二被规格化的浮点操作数的所述有效数字相乘以生成第一和第二部分乘积; 将所述第一和第二部分乘积与所述舍入值相加以生成被规格化的结果有效数字;以及 将所述被规格化的结果有效数字在与所述第一方向相反的第二方向上移动所述移位量以便于生成经舍入的结果有效数字。12.—种用于将第一和第二被规格化的浮点操作数相乘以生成结果的数据处理设备,每一个被规格化的浮点操作数包括有效数字和指数,所述数据处理设备包括: 指数确定装置,该指数确定装置用于计算规格化版的所述结果的结果指数; 舍入值生成装置,该舍入值生成装置用于通过将舍入常数在第一方向上移动移位量来生成舍入值,其中所述移位量取决于所述结果指数; 部分乘积生成装置,该部分乘积生成装置用于将所述第一和第二被规格化的浮点操作数的有效数字相乘以生成第一和第二部分乘积; 加法器装置,该加法器装置用于将所述第一和第二部分乘积与所述舍入值相加以生成被规格化的结果有效数字;以及 移位装置,该移位装置用于将所述被规格化的结果有效数字在与所述第一方向相反的第二方向上移动所述移位量以便于生成经舍入的结果有效数字。
【专利摘要】本发明提供了一种用于将浮点操作数相乘的数据处理装置和方法,每一个相乘的被规格化的浮点操作数均包括有效数字和指数。指数确定电路被用于为规格化版的结果计算结果指数,然后舍入值生成电路通过将舍入常数在第一方向上移动取决于结果指数的移位量来生成舍入值。部分乘积生成电路将第一和第二被规格化的浮点操作数的有效数字相乘以生成第一和第二部分乘积,然后该第一和第二部分乘积连同舍入值被加在一起,以便于生成被规格化的结果有效数字。然后,被规格化的结果有效数字在与第一方向相反的第二方向上被移动移位量以便于生成经舍入的结果有效数字。这提供了用于浮点数相乘的尤其有效的机制,同时在结果是非规格化的情况下正确地舍入该结果。
【IPC分类】G06F7/57
【公开号】CN104899004
【申请号】CN201510092044
【发明人】大卫·雷蒙德·鲁茨, 内尔·伯吉斯
【申请人】Arm 有限公司
【公开日】2015年9月9日
【申请日】2015年2月28日
【公告号】US20150254066

最新回复(0)