CN106970776B - 用于浮点乘法运算的装置和方法 - Google Patents

用于浮点乘法运算的装置和方法 Download PDF

Info

Publication number
CN106970776B
CN106970776B CN201610829762.1A CN201610829762A CN106970776B CN 106970776 B CN106970776 B CN 106970776B CN 201610829762 A CN201610829762 A CN 201610829762A CN 106970776 B CN106970776 B CN 106970776B
Authority
CN
China
Prior art keywords
bit
product
significand
value
rounding
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.)
Active
Application number
CN201610829762.1A
Other languages
English (en)
Other versions
CN106970776A (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.)
ARM Ltd
Original Assignee
ARM 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 ARM Ltd filed Critical ARM Ltd
Publication of CN106970776A publication Critical patent/CN106970776A/zh
Application granted granted Critical
Publication of CN106970776B publication Critical patent/CN106970776B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • G06F7/487Multiplying; Dividing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • G06F7/487Multiplying; Dividing
    • G06F7/4876Multiplying
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/57Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/01Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising
    • G06F5/012Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising in floating-point computations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49942Significance control
    • G06F7/49947Rounding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • G06F7/53Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel

Landscapes

  • Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Nonlinear Science (AREA)
  • Complex Calculations (AREA)
  • Image Generation (AREA)

Abstract

提供用于浮点乘法运算的装置和方法。从两个运算对象有效数生成两个部分有效数。从运算对象的指数值和前导零计数确定无偏结果指数,以及预定的标准格式的预定的最小指数值所需的乘积有效数的移位量和移位方向。针对注入到部分乘积的加法运算中的第一舍入值和第二舍入值,将预定的舍入图案在与移位方向相反方向移位以移位量来生成第一舍入值,并且通过将第一舍入值左移一位给出第二舍入值。将第一、第二部分乘积和第一舍入值一起相加来给出第一乘积有效数,将第一、第二部分乘积和第二舍入值一起相加来给出第二乘积有效数。将这些乘积有效数在移位方向移位以移位量,并且从中选择一个来生成以预定的标准格式的格式化的有效数。

Description

用于浮点乘法运算的装置和方法
技术领域
本公开涉及数据处理装置。更具体地,它涉及数据处理装置中的浮点乘法运算。
背景技术
在数据处理装置中可以提供浮点乘法运算能力。支持数字的浮点格式很有用,尤其是考虑到它能够表示的大范围数值。相应地,数据处理装置可以具有浮点乘法器,其特别针对处理这种浮点值的乘法运算的目的而被提供。然而这种浮点乘法器的实施的各方面是有意义的,尤其是如果该乘法器快速且高效地运算,并且乘法器接收的针对浮点乘法运算的运算对象的表示中允许越高的灵活性,则复杂度越高。例如,可以通过将输入运算对象的表示约束为正规化的输入来简化浮点乘法器的结构,然而更一般地,数据处理装置被要求来处理的浮点值将不一定符合这种正规化的表示,因此在该乘法器的输入阶段需提供额外的能力来将非正规化的输入转变为正规化的表示。期望在数据处理装置中针对处理浮点乘法运算的改进技术可以被提供。
发明内容
至少一个实施例提供用于浮点乘法运算的装置,该装置包括:部分乘积生成电路,用于将第一浮点运算对象的有效数与第二浮点运算对象的有效数相乘来生成第一部分乘积和第二部分乘积;指数计算电路,用于根据第一浮点运算对象和第二浮点运算对象的前导零计数和指数值来计算乘法运算的结果的无偏指数值,并且根据预定的标准格式的预定的最小指数值确定针对乘积有效数的移位量和移位方向,该乘积有效数是由对第一部分乘积和第二部分乘积的加法运算生成;舍入注入电路,用于针对加法运算中的注入生成第一舍入值和第二舍入值,其中舍入注入电路包括舍入移位电路,该舍入移位电路通过将预定的舍入图案在与移位方向相反的方向移位以移位量来生成第一舍入值,并通过将第一舍入值左移一位来生成第二舍入值;第一加法器电路,用于针对加法运算将第一部分乘积、第二部分乘积以及第一舍入值一起相加来生成第一乘积有效数;第二加法器电路,用于针对加法运算将第一部分乘积、第二部分乘积以及第二舍入值一起相加来生成第二乘积有效数;有效数移位电路,用于将第一乘积有效数和第二乘积有效数中的至少一个在移位方向移位以移位量;以及选择电路,用于选择第一乘积有效数和第二乘积有效数之一来以预定的标准格式生成格式化的有效数。
至少一个实施例提供用于浮点乘法运算的装置,该装置包括:用于将第一浮点运算对象的有效数与第二浮点运算对象的有效数相乘来生成第一部分乘积和第二部分乘积的装置;用于根据第一浮点运算对象和第二浮点运算对象的前导零计数和指数值来计算乘法运算的结果的无偏指数值,并且根据预定的标准格式的预定的最小指数值确定针对乘积有效数的移位量和移位方向的装置,该乘积有效数是由对第一部分乘积和第二部分乘积的加法运算生成;用于针对到加法运算中的注入生成第一舍入值和第二舍入值的装置,其中用于生成第一舍入值和第二舍入值的装置包括通过将预定的舍入图案在与移位方向相反的方向移位以移位量来生成第一舍入值的装置以及通过将第一舍入值左移一位来生成第二舍入值的装置;用于针对加法运算将第一部分乘积、第二部分乘积以及第一舍入值一起相加来生成第一乘积有效数的装置;用于针对加法运算将第一部分乘积、第二部分乘积以及第二舍入值一起相加来生成第二乘积有效数的装置;用于将第一乘积有效数和第二乘积有效数中的至少一个在移位方向移位以移位量的装置;以及用于选择第一乘积有效数和第二乘积有效数之一来以预定的标准格式生成格式化的有效数的装置。
至少一个实施例提供对用于执行浮点乘法运算的数据处理装置进行操作的方法,包括:将第一浮点运算对象的有效数与第二浮点运算对象的有效数相乘来生成第一部分乘积和第二部分乘积;根据第一浮点运算对象和第二浮点运算对象的前导零计数和指数值来计算乘法运算的结果的无偏指数值,并且根据预定的标准格式的预定的最小指数值确定针对乘积有效数的移位量和移位方向,该乘积有效数是由对第一部分乘积和第二部分乘积的加法运算生成;针对加法运算中的注入生成第一舍入值和第二舍入值,其中生成第一舍入值和第二舍入值包括通过将预定的舍入图案在与移位方向相反的方向移位以移位量来生成第一舍入值,并通过将第一舍入值左移一位来生成第二舍入值;针对加法运算将第一部分乘积、第二部分乘积以及第一舍入值一起相加来生成第一乘积有效数;针对加法运算将第一部分乘积、第二部分乘积以及第二舍入值一起相加来生成第二乘积有效数;将第一乘积有效数和第二乘积有效数中的至少一个在移位方向移位以移位量;以及选择第一乘积有效数和第二乘积有效数之一来以预定的标准格式生成格式化的有效数。
附图说明
仅通过示例的方式并参照附图中示出的示例的实施例进一步描述本技术,其中:
图1A示出了在一个实施例中当两个输入运算对象都是正规的时,针对乘积有效数在范围内的情形以及乘积有效数溢出的情形的乘积有效数内的位位置;
图1B示出了在一个实施例中当运算对象之一是次正规的时,针对乘积有效数在范围内的情形以及乘积有效数溢出的情形的乘积有效数内的位位置;
图2示意性地示出了一个实施例中的用于浮点乘法运算的装置;
图3示意性地示出了一个实施例中的舍入注入电路;
图4示意性地示出了在一个实施例中用于确定乘积有效数的溢出是否发生的电路;
图5示意性地示出了在一个实施例中当乘积有效数将被左移并溢出时用来确定所使用的最后位、保护位和粘滞位的电路;
图6示意性地示出了在一个实施例中当乘积有效数将被左移并不溢出时用来确定所使用的最后位、保护位和粘滞位的电路;
图7示意性地示出了在一个实施例中当乘积有效数将被右移时,用来确定最后位、保护位和粘滞位的电路;
图8A示意性地示出了在一个实施例中当应用RNE舍入时所使用的舍入修正电路;
图8B示意性地示出了在一个实施例中用来检测结果是精确的还是非精确的舍入修正电路;
图9A示意性地示出了一个实施例中的下溢检测电路;
图9B示意性地示出了一个实施例中的清零电路;以及
图10A-C示出了当根据一个实施例的执行方法时所采取的一系列步骤。
具体实施方式
至少一些实施例提供用于浮点乘法运算的装置,该装置包括:部分乘积生成电路,用于将第一浮点运算对象的有效数与第二浮点运算对象的有效数相乘来生成第一部分乘积和第二部分乘积;指数计算电路,用于根据第一浮点运算对象和第二浮点运算对象的前导零计数和指数值来计算乘法运算的结果的无偏指数值,并且根据预定的标准格式的预定的最小指数值确定针对乘积有效数的移位量和移位方向,该乘积有效数是由对第一部分乘积和第二部分乘积的加法运算生成;舍入注入电路,用于针对加法运算中的注入生成第一舍入值和第二舍入值,其中舍入注入电路包括舍入移位电路,该舍入移位电路通过将预定的舍入图案在与移位方向相反的方向移位以移位量来生成第一舍入值,并通过将第一舍入值左移一位来生成第二舍入值;第一加法器电路,用于针对加法运算将第一部分乘积、第二部分乘积以及第一舍入值一起相加来生成第一乘积有效数;第二加法器电路,用于针对加法运算将第一部分乘积、第二部分乘积以及第二舍入值一起相加来生成第二乘积有效数;有效数移位电路,用于将第一乘积有效数和第二乘积有效数中的至少一个在移位方向移位以移位量;以及选择电路,用于选择第一乘积有效数和第二乘积有效数之一来以预定的标准格式生成格式化的有效数。
本技术认识到用于浮点乘法运算的改进装置(尤其在能够以其生成两个输入浮点运算对象的乘积的速度方面)通过布置该装置在乘法运算过程中尽早(在还未明确知道乘积有效数内的注入舍入应该在哪里发生(即,在哪一位上)的阶段)执行注入舍入被提供,即使没有对输入运算对象被接收的格式的约束(尤其它们不需被正规化)。本质上这是因为在乘法运算的早期阶段还不知乘积的前导位将在哪里,本技术还认识到在一位位置内计算该位置是可能的。基于这种认识,本技术提供舍入注入电路,该电路针对注入舍入构造两个舍入常量,这两个常量接下来在两个加法器电路中分别被用于注入舍入,其中一个加法器电路被提供来处理发生溢出(因此乘积的前导位将会高一位)的乘积有效数而另一个加法器电路被提供来处理不发生溢出(仅来自第一部分乘积和第二部分乘积的相加)时(因此乘积的前导位将在比溢出情况低一位)的乘积有效数。然而,除了乘积有效数的前导位位置的这种一位不确定性,输入运算对象的形式也在确定注入舍入应该发生的适当位置中起着重要的作用。这是由于这样一个事实,即如果两个输入是正规的,则未舍入的乘积将呈现前导位,该前导位在乘积有效数格式(允许溢出)的最高有效位位置或者在最高有效位位置的低一位位置处(当溢出未发生)。然而,当输入运算对象之一是次正规时(即,具有多个前导零),则相应地在无溢出乘积中有一样数目的前导零,在溢出的乘积中有比该数目少一个的前导零。应注意,在两个输入运算对象都是次正规的情况下,将产生无法表示的小乘积并且生成的输出值将不会取决于输入运算对象的值,而仅仅由舍入模式确定。
在这种环境中,接下来,为了生成第一舍入值和第二舍入值,本技术提供指数计算电路来确定移位量和移位方向,其中,该第一舍入值和第二舍入值将被分别注入到由第一加法器电路和第二加法器电路执行的加法运算中,该指数计算电路检查两个输入运算对象的指数值并且确定它们各自的前置零计数,该移位量和移位方向将使得乘法运算的结果以期望的预定标准格式呈现(例如在可能的情况下并使用偏置指数被正规化,如根据IEEE754-2008 FP标准生成浮点值时所常见的)。基于这种针对乘积有效数确定的移位量和移位方向,舍入注入电路通过将预定的舍入图案在与移位方向相反的方向的移位以移位量来生成第一舍入值和第二舍入值。通过将第一舍入值左移一位来生成第二舍入值。换言之,基础舍入注入(即,将应用于为了以预定的标准格式被呈现而不需要移位的乘积有效数的情况的注入)被确定并且它然后在相反的方向被移位以与随后所要求的有效数移位相同的量。这允许舍入注入被加到未被移位并且舍入发生在正确地方的有效数。应注意的是,它使舍入注入能够在乘法运算过程中尽早发生,使得在由第一加法器电路和第二加法器电路进行的第一部分乘积和第二部分乘积的加法运算之后,有效数移位电路可应用这种被确定需要的移位来以预定的标准格式生成需要的格式化的有效数,而不需要在其后执行舍入注入。
第一加法器电路和第二加法器电路可以采取各种不同的形式,但在一个实施例中,第一加法器电路具有生成的第一乘积有效数比由第二加法器电路生成的第二乘积有效数少一位的配置。换言之,由第一加法器电路支持的最大位宽比由第二加法器支持的位宽少一位。这种特定布置的配设是基于以下认知,即:第一部分乘积和第二部分乘积的总和将会有固定的针对两个加法器都相同的最大位宽,但是第二舍入值的引入(通过将第一舍入值左移一位生成)在一些情况下针对第二加法器电路可以导致向额外的(更高的)位位置的进位。虽然第一加法器电路和第二加法器电路可以都可以被提供成实质相同,并且被配置成处理允许这种进位的相同位宽,此实施例实现了对用来提供第一加法器电路的面积(即门的数目)的减小。
预定的舍入图案可以采取各种不同的形式,尤其是根据应该被应用于乘法运算的舍入类型。在一些实施例中,预定的舍入图案具有与格式化的有效数匹配的长度,并且当装置的舍入模式是就近舍入偶数优先(RNE)时包括由多个复位位跟随的置位位,并且当舍入模式是向上舍入(RU)时包括所有置位位,并且当相反方向是向左并且舍入模式是向上舍入时,由移位量给定的多个较低有效位位置被置位,并且当相反方向是向右时,由移位量给定的多个最高有效位位置被复位。因此,例如,在装置被配置为对IEEE 754-2008格式的具有23个小数位的单精度浮点数执行浮点乘法运算的情况下,预定的舍入图案是被22个零跟随的一(针对RNE舍入)或者被22个一跟随的一(针对RU舍入)。如果乘积有效数需要被右移,则舍入常量被左移,其中在右侧的位被RU位(即如果向上舍入则是1)替换并且左移的舍入常量变成48位的值。相反地,如果乘积有效数将被左移,则舍入常量(以预定的舍入图案开始)被右移,其中左侧的位被零替换。右移的舍入常量仍是23位的值。
根据以上讨论将会清楚的是,确定由两个部分乘积相加生成的乘积有效数是否溢出很有用,以便最终确定乘积有效位内的某些位位置,其数值被需要来确定其最终输出形式。此外,虽然这种溢出状态的确定可以通过在移位电路将乘积有效位移位之后检查乘积有效位,然后检查最高有效位(例如在SP乘法器情况中的位47)是否被置位来确定,本技术提供的是,通过溢出掩码的使用这种溢出识别可以发生的更快,该溢出掩码通过从预定的掩码图案被生成来识别溢出位位置,其中该预定的掩码图案被右移以移位量并且接下来被应用于未被移位的第二乘积有效数。相应地,在一些实施例中,装置包括掩码生成电路,该掩码生成电路用于生成识别第二乘积有效数的溢出位位置的溢出掩码,其中掩码生成电路被布置为通过将预定的掩码图案右移以移位量来生成溢出掩码;以及比较电路,该比较电路用于对第二乘积有效数应用溢出掩码来提取溢出位位置处的溢出值,其中该比较电路被布置为在有效数移位电路对第一乘积有效数和第二乘积有效数中的至少一个进行移位之前提取溢出值。通过这种方式,溢出值的确定明显比通过上述的首先将乘积移位接着检查最高有效位是否被置位的技术要早。这意味着移位一被完成,就可以选择乘法运算的最终结果,因为溢出值已经可获得。
预定的掩码图案可以采取各种不同的形式,但是在一个实施例中,当第二乘积有效数未被移位时,预定的掩码图案包括在第二乘积有效数的未被移位的溢出位位置处的置位位。因此该“置位位”可以在移位前和然后当右移被应用于预定的掩码图案这两种情况下在第二乘积有效数内被识别并跟踪溢出位位置,使得该溢出位位置能够在任何需要的移位被应用于第二乘积有效数之前被识别。
应了解的是,它通常作为溢出可以导致的被左移的乘积有效数结果,本技术还认识到被右移的乘积有效数在某些情况下可以溢出到正规空间。相应地在一些实施例中,指数计算电路包括右移溢出确定电路,用于在移位方向是向右以及以下两者中的任一者时识别右移溢出情况:第二乘积有效数的最高有效位被置位并且移位量是二,或第二乘积有效数的次最高有效位被置位并且移位量是一;并且指数计算电路响应于右移溢出的情况来将乘法运算结果的偏置指数值置为一。换言之,被认知的是,针对这两种明确的情况溢出可以被直接识别,即当第二乘积有效数的最高有效位被置位并且移位量是二,或者第二乘积有效数的次最高有效位被置位并且右移位量是一。因此,在这两种右移溢出情况下,结果的偏置指数将被置为一。应注意,所有其他的右移的偏置指数都是零。
有效数移位电路可以采取各种不同的形式,但是在一个实施例中包括:左移移位电路,用于将第一乘积有效数和第二乘积有效数左移以移位量来给出第一左移乘积有效数和第二左移乘积有效数;右移移位电路,用于将第二乘积有效数右移以移位量来给出右移乘积有效数,其中左移移位电路和右移移位电路被布置为彼此并行地执行它们各自的移位;并且所述选择电路响应于移位方向和溢出值来选择第一左移乘积有效数、第二左移乘积有效数以及右移乘积有效数之一作为格式化的有效数,并且在格式化有效数中选择预定数目的最高有效位来输出。相应地,虽然也可以提供可将所需的第一乘积有效数或第二乘积有效数进行左移或者右移的通用有效移位电路,本技术提供专用左移移位电路和专用右移移位电路,它们被布置为彼此并行地执行各自的移位,使得第一乘积有效数和第二乘积有效数被左移而第二乘积有效数被并行地右移,并且其后的选择电路然后选择这三种移位的结果之一。根据被识别的移位方向和溢出值做出这个选择,即,溢出值实现在第一左移乘积有效数和第二左移乘积有效数间做出选择,而移位方向实现在左移乘积有效数和右移乘积有效数间做出选择。此外,选择电路可以输出格式化的有效数中的预定数目的最高有效位,这然后可以减小有效数的位数,例如在输出SP浮点值的示例中,其中被舍入的有效数有23位,但第一乘积有效数和第二乘积有效数分别有48位和49位,但是在所选择的被移位的乘积有效数内可以有任何其他数目的位。
例如,浮点乘法运算可以形成融合乘加运算的一部分,并且相应地在一个实施例中,第一舍入值和第二舍入值被置为零并且装置具有向加法器转发乘法运算的未被舍入的结果作为融合乘加的一部分的配置。换言之,根据此技术,舍入注入被抑制并且格式化的有效数然后例如可以包括适于向加法器提供尽可能大的精度的乘积有效数的所有可获得的位。
当执行注入舍入时,当以RNE(就近舍入,偶数优先)模式执行舍入时,会有需要针对某些总和进行修正的情况。为了确定此修正,则需要格式化有效数的最后(L)位值、跟随其后的保护(G)位值、以及跟随在其后的粘滞(S)位组的值。为了使这些值能够被尽早确定,使得以上讨论的能够更快地执行舍入的优势不至于因为对舍入的修正只能够在有效数乘积被移位后L、G、S值被确定之后被执行而被丢失,本技术还进一步提供可以生成最后位掩码的掩码生成电路,该最后位掩码使得能够在移位发生前找到最后位位置,并且因此可以在该移位发生前确定最后位值。
相应地,在一些实施例中掩码生成电路被布置为生成识别第一乘积有效数内被格式化的有效数的最后位的最后位位置的最后位掩码,并且其中掩码生成电路被布置为生成最后位掩码包括将预定的最后位掩码图案在与移位方向相反的方向移位以移位量,并且还包括比较电路对第一乘积有效数应用最后位掩码来提取在最后位位置处的最后位值。换言之,当指数计算电路确定需要将乘积有效数左移给定数目的位,掩码生成电路将最后位图案右移以相同数目的位。相反地,当指数计算电路确定需要右移时,掩码生成电路将最后位图案左移以所需数目的位。然后比较电路可以在第一乘积有效数自身被移位前对第一乘积有效数应用(已被移位的)最后位掩码来确定在最后位位置处的最后位值。因此,如以上的关于舍入值和溢出掩码的使用的情况中,本文所提的关于最后位掩码的技术允许最后位位置的及早确认(不需等待移位电路对第一乘积有效数和第二乘积有效数执行移位)并且因此提高了乘法器的整体速度。
针对最后位掩码的掩码生成电路可以以各种不同的方式被提供,但在一些实施例中,掩码生成电路被布置为生成左移最后位掩码和右移最后位掩码,其中比较电路响应于移位方向是向左的方向来使用左移最后位掩码提取最后位值,并且响应于移位方向是向右的方向来使用右移最后位掩码提取最后位值。因此,一旦移位方向和移位量被建立,虽然原则上可以视所需要的移位方向的情况只生成最后位掩码,但所采用的本技术通过彼此并行地生成左移最后位掩码和右移最后位掩码两者并且根据已被确定的移位方向在它们之间做出选择来实现并行化。由于可以提前准备这些左移最后位掩码和右移最后位掩码,这还提高了减少由装置生成结果所需的时间的机会。
如上讨论,乘积有效数的位位置也根据该乘积有效数是否溢出而变化。因此,这也影响乘积有效数的最后位的位位置。该装置可以被配置来以多种方式处理这种情况,但在一些实施例中,掩码生成电路被布置为生成两个左移最后位掩码,其中掩码生成电路被布置为通过将第一左移最后位掩码右移一位来生成第二左移最后位掩码,并且比较电路被布置为对第一乘积有效数应用第一左移最后位掩码,并对第二乘积有效数应用第二左移最后位掩码,并且该比较电路响应于指示第二乘积有效数溢出的溢出值来选择通过使用第一左移最后位掩码提取的最后位值,以及响应于指示第二乘积有效数无溢出的溢出值来选择通过使用第二左移最后位掩码提取的最后位值。
本技术认识到,通过应用一位移位来从一个生成另一个,针对乘积有效数的左移(被认识到,这通常是可以生成溢出的乘积有效数的左移)生成的最后位掩码(适用于在溢出的情况下识别最后位)可以从适于在无溢出时识别最后位的最后位掩码生成,反之亦然。此外,如上所述,这种掩码可以在有效数移位电路对乘积有效数应用所要求的移位之前被生成,并且因此乘法运算的此特征不会因为等待该移位的发生而被延迟,乘法器的整体处理速度因此被提高。
在一些实施例中,当移位方向是向左的方向时,预定的最后位掩码图案包括被预定数目的置位位跟随的复位位,其中预定数目的置位位比以预定的标准格式的格式化的有效数的位数多一位,并且掩码生成电路被布置为从基础移位掩码生成第一左移最后位掩码,其中基础移位掩码通过将预定的最后位掩码图案右移以移位量并将由移位量给定的多个复位位添加到已被右移的预定的最后位掩码图案的前面来生成。虽然预定的最后位掩码图案(被用生成基础移位掩码,从该基础移位掩码可以容易地识别最后位位置)可以以多种方式被定义,这种如以上定义的置位位跟随复位位的配置方式呈现了位图案,在移位被应用之后,它通常具有直到并包括最后位的复位位(比如零)以及之后的置位位(比如一)。例如在产生两个24位有效数的乘积的情况下,导致48或49位的乘积,然后这可以是被24个连续的一跟随的零。当该位图案被右移时,零则填充左侧。这种特定的配置不仅针对识别最后位位置本身很有用,根据正被应用的舍入图案,它还对识别舍入修正所需的保护位位置和粘滞位位置也很有用。这种情形尤其如此,因为可以容易地使用被移位的图案来构建掩码来分别挑选这些最后位位置、保护位位置和粘滞位位置。
类似地,在一些实施例中,当移位方向是向右的方向时,预定的最后位掩码图案包括由预定数目的置位位跟随的复位位序列,其中预定数目的置位位是以预定的标准格式的格式化的有效数位数,并且掩码生成电路被布置为从基础移位掩码生成右移最后位掩码,其中基础移位掩码通过将预定的最后位掩码图案左移以移位量以及将由移位量给定的多个置位位添加到已被左移的预定的最后位掩码图案的后面来生成。在此实例中,被发现十分有用的特定未移位图案是被一系列置位位(比如一)跟随的一系列复位位(比如零)。例如在产生两个24位有效数乘积结果为48位或49位乘积的情况下,这然后可以是被23个连续的一跟随的26个连续的零。当这个位图案被左移时,在右侧填充额外的一。类似地,通过使用从该被移位的右移掩码生成的进一步的掩码,不仅可以使最后位位置能够被容易地识别,还可以使保护位位置和粘滞位位置也能够被容易地识别。
如上所述,可能需要识别结果有效数内的保护位,因此在一些实施例中掩码生成电路被布置为生成保护位掩码,其中该保护位掩码在保护位位置处有置位位,该保护位位置比第一乘积有效数内的格式化的有效数的最后位位置低一位,并且比较电路被布置为对第一乘积有效数应用保护位掩码来提取保护位位置处的保护位值。例如可以通过反转最后位掩码并然后对该被反转的最后位掩码和未被反转的最后位掩码执行按位与来生成保护位掩码,其中被反转的最后位掩码和未被反转的最后位掩码的位对齐被选择为使得所产生的输出仅有用地在保护位所处位置具有置位位(例如一)并且其他处是零。此外,本技术还认识到可以通过右移一位此保护位掩码来得到针对第二乘积有效数的进一步的保护位掩码。同样地,本技术也认识到可以通过同样的过程来产生针对被右移的第二乘积有效数的进一步的保护位掩码,即:反转右移最后位掩码,将这两者以一位偏移量对齐,并执行按位与。
类似地,在一些实施例中掩码生成电路被布置为生成粘滞位掩码,其中该粘滞位掩码在低于保护位位置的所有位置处具有置位位,并且比较电路被布置为对第一乘积有效数应用粘滞位掩码来提取一组粘滞位值并且计算作为该组粘滞位值的逻辑或的整体粘滞位值。因此,通过使用此粘滞位掩码,可以识别第一乘积有效数的粘滞位(或者更通常地,多个粘滞位),并且接下来计算出整体粘滞位值。例如,可以通过适当的位选择来从预定的最后位掩码图案中生成粘滞位掩码,该位选择不包括最后位和保护位,例如在预定的掩码图案针对所有的粘滞位位置具有置位位的情况下。本技术通过应用相反的移位确保这些粘滞位在第一乘积有效数中被正确地识别,并且粘滞位掩码接下来可以直接识别所有这些粘滞位的位置并且整体S值可以被计算。
如上所述,根据舍入模式,可能需要对L和G进行一些修正,则相应地在一些实施例中装置还包括修正电路,该修正电路响应于装置的舍入模式是就近舍入偶数优先(RNE)来计算作为保护位值的逆的被修正的保护位值,并计算作为保护位值和整体粘滞位值的逻辑或值与最后位值的逻辑与的被修正的最后位值。因此,当在RNE舍入模式时,可以进行适当的修正。
可能会有这种情形,为了指示可能作为浮点乘法运算一部分出现的各种不同的情况,装置需要生成各种不同的异常标志。它们中之一是针对乘法运算的不精确检测,本技术针对此提供了新的方法,其中在一个实施例中,装置还包括非精确检测电路,当被修正的保护位值或者整体粘滞位值非零时,该电路响应于装置的舍入模式不是向上舍入(RU)来生成非精确标志。类似地,在一些实施例中,装置还包括非精确检测电路,当溢出值被置位,第一舍入值与第一乘积有效数的对应的较低的部分不是每一位完全相同时,非精确检测电路响应于装置的舍入模式是向上舍入(RU)来将非精确标志置位,并且当溢出值未被置位,第二舍入值与第二乘积有效数的对应的较低的部分不是每一位完全相同时,非精确检测电路响应于装置的舍入模式是向上舍入(RU)来将非精确标志置位。换言之,在RU模式中使用的该技术是用来检查乘积的较低位(对G和S有贡献的位)并且将它们与舍入注入相比较。如果这些位未改变则舍入注入不会改变乘积,并且其结果是精确的。
更进一步,在一些实施例中,装置包括下溢检测电路,当格式化的有效数是零、乘法运算的结果的偏置指数是一以及非精确标志被置位时,该电路将下溢标志置位。此下溢检测电路的配设十分有用,因为用于执行浮点乘法运算的方法定义下溢应该在舍入前被检测,并且根据以上所讨论的尽早注入舍入技术,并不会有被预先舍入的乘积。有疑问的情形是将次正规乘积变成最小正规乘积的舍入注入,在此情形中,小数全是零而偏置指数从零变为一。因此,下溢检测电路可以通过确定格式化的有效数是否是零并且偏置指数是否是一,并且进一步观看结果是否精确来检测这种情形。如果结果是非精确的,则舍入导致溢出到正规数,并且下溢标志然后被置位,即使乘法运算的结果事实上将是正规的。
此外,在一些实施例中,装置包括清零标志生成电路,当乘法运算结果的偏置指数是零并且指数不溢出或者指数由于舍入溢出时,该电路将清零标志置位。如以上所应用的针对检测溢出的相似原理也被应用来确定何时来刷新至零,其中,如果指数是零并且(i)指数不溢出或者(ii)指数由于舍入溢出时,清零标志被置位。
至少一些实施例提供用于浮点乘法运算的装置,该装置包括:用于将第一浮点运算对象的有效数与第二浮点运算对象的有效数相乘来生成第一部分乘积和第二部分乘积的装置;用于根据第一浮点运算对象和第二浮点运算对象的前导零计数和指数值来计算乘法运算的结果的无偏指数值,并且根据预定的标准格式的预定的最小指数值确定针对乘积有效数的移位量和移位方向的装置,该乘积有效数是由对第一部分乘积和第二部分乘积的加法运算生成;用于针对到加法运算中的注入生成第一舍入值和第二舍入值的装置,其中用于生成第一舍入值和第二舍入值的装置包括通过将预定的舍入图案在与移位方向相反的方向移位以移位量来生成第一舍入值的装置以及通过将第一舍入值左移一位来生成第二舍入值的装置;用于针对加法运算将第一部分乘积、第二部分乘积以及第一舍入值一起相加来生成第一乘积有效数的装置;用于针对加法运算将第一部分乘积、第二部分乘积以及第二舍入值一起相加来生成第二乘积有效数的装置;用于将第一乘积有效数和第二乘积有效数中的至少一个在移位方向移位以移位量的装置;以及用于选择第一乘积有效数和第二乘积有效数之一来以预定的标准格式生成格式化的有效数的装置。
至少一些实施例提供对用于执行浮点乘法运算的数据处理装置进行操作的方法,包括:将第一浮点运算对象的有效数与第二浮点运算对象的有效数相乘来生成第一部分乘积和第二部分乘积;根据第一浮点运算对象和第二浮点运算对象的前导零计数和指数值来计算乘法运算的结果的无偏指数值,并且根据预定的标准格式的预定的最小指数值确定针对乘积有效数的移位量和移位方向,该乘积有效数是由对第一部分乘积和第二部分乘积的加法运算生成;针对加法运算中的注入生成第一舍入值和第二舍入值,其中生成第一舍入值和第二舍入值包括通过将预定的舍入图案在与移位方向相反的方向移位以移位量来生成第一舍入值,并通过将第一舍入值左移一位来生成第二舍入值;针对加法运算将第一部分乘积、第二部分乘积以及第一舍入值一起相加来生成第一乘积有效数;针对加法运算将第一部分乘积、第二部分乘积以及第二舍入值一起相加来生成第二乘积有效数;将第一乘积有效数和第二乘积有效数中的至少一个在移位方向移位以移位量;以及选择第一乘积有效数和第二乘积有效数之一来以预定的标准格式生成格式化的有效数。
现根据附图描述一些具体的实施例。
浮点数包括符号位、指数位以及小数位。例如以IEEE 754-2008格式的单精度(SP)浮点数由包含单个符号位、8个指数位以及23个小数位的32位给定。当在两个这种浮点数之间执行乘法运算时,小数位必须一起被相乘,同时指数位被相加,但是当然,小数位乘法运算的结果可以根据结果浮点数值应被呈现的特定格式来要求对结果指数进行修正。在此例中,以标准SP浮点格式产生浮点结果值是十分有用的,其中有效数(小数)乘积被正规化(在可能的情况下),或者如果乘积是次正规(subnormal)的,则有效数乘积有多个前导零。
当两个正规有效数相乘,1.a*1.b,乘积可以在范围[1,2)内(即,精确地从1到2,但不包括2)或者[2,4)(即,精确地从2到4,但不包括4)。例如:
1.00*1.01=1.0100,其在[1,2)内且未溢出,以及
1.10*1.10=10.1000,其在[2,4)内且已溢出。
图1A示出了针对两个正规的23位有效数的乘积的两种可能的位位置结果,其中乘积将在范围[1,2)内且乘积的位47将是0,或者乘积将在溢出范围[2,4)内且乘积的位47将是1。乘积的第一位被标注为i(整数位),并且接下来的22位被标注为f(小数位)。最终的小数位被标注为L(最后位),随后的位是G(保护位),所有剩下的位被标注为s(粘滞位)。单个二进制值S被定义成所有s位的逻辑或。换言之,当此47位或48位乘积作为23位浮点有效数被返回时,L是截断值的最低有效位,G是接下来的最高有效位(即,未被包含在截断内的第一位),而S是所有剩下的、不是截断的一部分的位的逻辑或。这三个值可被要求来根据被实施的特定舍入模式对被注入舍入的乘积有效数进行修正,下面将进一步对其进行描述。
图1B示出了在输入运算对象之一是次正规的(有k个前导零)情形下,这些被命名的位的位置。如可以从图1B中看出的,在无溢出乘积中有k个前导零而溢出乘积中有k-1个前导零。相应地,从图1A和1B以及关于这些附图的以上描述中应了解的是,在接受可以是正规化的或可以是次正规的输入运算对象的浮点乘法器中以上所提的特定位(i,f,L,G和s)出现的位置可以根据输入运算对象的性质(正规的或次正规的)以及乘积有效数是否溢出而变化很大。应注意,两个输入运算对象都是次正规的情形在本文中是不重要的,这是由于它会产生不具代表性的很小的乘积,因为相关联的指数(在此SP示例中)是-254或更小并且最终结果仅由舍入模式决定。
以上参考图1A和图1B的讨论仅考虑浮点输入运算对象有效数并且不涉及指数。定义:
expa=运算对象a的无偏指数,
expb=运算对象b的无偏指数,
clza=a的有效数中的前导零数目,
clzb=b的有效数中的前导零数目,
并且使clz为clza和clzb的逻辑或,则移位之前无偏结果指数是
result_exp=expa+expb-clz。
基于此计算出的结果指数,48位乘积有效数可以要求移位使得位[47:0]表示标准形式的乘积,或者在乘积是正规的的情况下被正规化,或者在乘积是次正规的情况下具有正确数目的前导零。此移位可以是两种方向中的任一方向,即:
1)当result_exp小于无偏指数值-126时右移。在所有这种情形中,为了达到最小无偏指数值-126,乘积有效数被右移以一位或多位。
2)当有一个次正规输入并且result_exp大于-126时左移。在这种情形中,乘积有效数被移位零或多位,直到(无论哪个先发生)a)与被移位的值对应的指数等于-126,或者b)乘积有效数变成正规的(即,i位在位置46上)。
图2示意性地示出一个实施例中的浮点乘法器装置10。运算对象“a”opa[31:0](被标注为12)由符号位signa、指数位expa[7:0]和小数位fraca[22:0]组成,运算对象“b”opb[31:0](被标注为14)也具有相似的分解。在第一阶段(周期)V1,fraca和fracb在23*23的阵列16中被相乘,在此之后通过使用3∶2压缩器20和22将23个部分乘积规约到两个(48位)部分乘积。
在规约过程中,指数计算电路(示出为组件24的一部分)检查expa和expb看他们是否是非零的。非零expa意味着a的隐含的整数位被置位,在这种情形下指数计算电路24向规约阵列(部件18)发信号表示另一个因数fracb将被添加到规约中。类似地,非零expb意味着b的隐含的整数位被置位,所以在这种情形中另一个因数fraca将被添加到规约中。最终,与隐含的整数位的乘积对应的单个位被添加到规约阵列18中。当进行阵列规约时,指数计算电路也对有效数opa和opb执行前导零计数(CLZ)操作,并计算出乘积指数、移位量和移位方向(稍后描述)。舍入注入电路(在此图中作为组件24的一部分被示出)针对注入舍入构造两个舍入常量。应注意(由于以上关于图1A和图1B给出的原因),在此阶段并不知道乘积有效数的前导零会在哪里,虽然它可以在一位位置内被计算出,因此出于该原因针对两个候选乘积有效数的每个舍入常量被生成。通过使用3∶2进位-总和-加法器(CSA)20和22将舍入常量(ovfl_round和round)添加到部分乘积,并且然后48位加法器24和49位加法器26产生两个候选乘积有效数(ovfl_prod[47:0]和prod[48:0])。部分乘积的总和永远符合48位,虽然在一些情形中舍入项向第49位引入进位。
在第二阶段(周期)V2,基于由指数计算电路确定的左移量(ls[4:0])38和右移量(rs[4:0])40,被存放在寄存器28和30中的两个候选乘积有效数被移位器32、34和36左移或右移。针对每个移位结果的最终指数被产生,并且最后,根据从指数计算电路20接收的移位方向(rs/ls)信号、溢出标志和特殊标志,多路选择器42在四种可能中作选择,即被左移的溢出有效数(ovfl_prod)、被左移的无溢出有效数(prod)、被右移的无溢出有效数(prod)或特殊值。当确定需要特别定义的输出(比如NaN、无穷大和零)时,预先定义的特殊值则被选择。有效数以标准的23位SP格式被输出,除非该相乘是融合乘加(FMA)的一部分,在此情形下,两个舍入常量将被覆盖(使得实际上无舍入注入发生)并且完整的47位小数被转发。
也在第二阶段(周期)V2中,比较电路44和46使用由掩码生成电路构造的掩码在被左移的有效数上检测溢出,并且确定针对被左移的有效数和被右移的有效数的异常标志掩码和舍入修正。在候选乘积有效数被左移移位器32、34和右移移位器36移位前,可直接对候选乘积有效数应用这些被生成的掩码。
对图2所示的具有图示的周期边界的浮点乘法器装置10的概述允许对本技术的效果的理解,即具有注入舍入的浮点乘法运算被提供,它导致完全舍入的结果(或者融合乘加的相乘部分),其可以在不到两个周期内被执行,实际上只需要1.5个周期。应注意,即使半周期的加速也十分有用,由于它允许零周期转发。
图3示意性地示出了一个实施例中的舍入注入电路50。舍入常数开始是一跟随有22个零(针对RNE舍入)或者22个一(针对RU舍入)。接下来左移移位器52将此基础舍入图案左移以由指数计算电路确定的右移移位量并且右移移位器54将此基础舍入图案右移以由指数计算电路确定的左移移位量。左移移位量和右移移位量在这里是5位的值,所以这些移位可以在从0到31位的任何位置。被左移的舍入常量56(在该情况下如果处于UR模式中则出现在右侧的位被填充以一)因此最后会是48位的值。被右移的舍入常量58左侧的位被替换成零因此仍然是23位的值。左移舍入值和右移舍入值都被生成,但是只有合适的一个会被使用,这由指数计算电路生成的左移(ls)信号或右移(rs)信号确定。因此生成的舍入常量针对图2中的“prod”加法器26是正确的,同时针对图2中的“ovfl_prod”加法器24,一位左移移位器60将舍入常量左移一位,并用RU位(即RU模式时是一)填充最低位。接下来通过使用图2中相应的3∶2CSA 20和22来将两个舍入常量ovfl_round 62和round 64添加到部分乘积。应注意,图3也示出了融合乘加(FMA)覆盖信号,该信号使得两个舍入常量被置为零,因此当乘法运算形成融合乘加运算的一部分时,无注入舍入发生。因此,计算基础舍入注入(该注入将被应用于未被移位的有效数)并且接下来在相反的方向并以与随后的有效数移位相同的幅值对其进行移位,这允许舍入注入被加到未被移位并且舍入发生在正确地方的有效数。
图4示意性地示出由图2中的掩码生成电路24和比较电路46的组合所确定的溢出。溢出掩码初始被构造为由在位置47处的一和剩余位的零组成。接下来(右移移位器70)将该溢出掩码以乘积将被左移的相同移位量右移。该右移在(加法器26)产生49位的乘积有效数之前发生,并且溢出由掩码72与乘积74的逻辑与76和紧接着的规约或78检测出。这允许在完成候选有效数乘积的左移(通过左移移位器32和34)之前对溢出的检测。图4的逻辑电路的类似Verilog的版本是:
ls_overflow=|(ovfl_mask[47:16]&prod[47:16]);
应注意,不是乘积prod的所有位都会被检测,因为左移的最大量被限制到31。图4也示出了右移溢出检测电路80,该电路被提供来检测受限的情形,在该情形中,溢出可以发生在被右移的乘积中,即当被注入舍入的乘积的位47被置位并且右移量是1,或者当被注入舍入的乘积的位48被置位并且右移量是2时。在这两种情形中,右移溢出检测电路都会将偏置指数置为1。所有其他的右移的偏置指数是零。
针对计算最后位(L)值、保护位(G)值和粘滞位(S)值有三组掩码,现将参照图5、6和7来讨论其生成和使用,其中图5、6和7示意性地示出了与图2中的掩码生成电路24以及比较电路44和46对应的电路。
图5示出了左移溢出的情形,其中初始掩码图案被初始化为零跟随有24个连续一,接下来(右移移位器90)将该掩码右移以左移位量,在左侧填充零。这生成25位掩码lomask[24:0]92,它直到并包括L位都是零,G和S位是一。从由掩码操纵电路94构建的该特定掩码中挑选出L、G和S。由掩码操纵电路94实施的逻辑电路的相对应的类似Verilog的版本是:
logmask[23:0]=~lomask[24:1]&lomask[23:0];
使得logmask 98的G位所在位置处是一,其他地方是零;
lolmask[24:0]={logmask[23:0],1’b0};
使得lolmask 96的L位所在位置处是一,其他地方是零;以及
losmask[22:0]=lomask[22:0]&~lolmask[22:0]&~logmask[22:0];
使得losmask 100的每个粘滞位位置处都是一,其他地方是零。
由电路102、104和106直接对溢出乘积有效数ovfl_prod 108应用这些掩码来获得(从或门110、112和114)针对被左移的溢出乘积的L、G和S。对应的类似Verilog的版本是:
lovl=|(lolmask[24:0]&ovfl_prod[24:0]);//左溢出L
lovg=|(logmask[23:0]&ovfl_prod[23:0]);//左溢出G
lovs=|(losmask[22:0]&ovfl_prod[22:0]);//左溢出S
针对无溢出左移的情形的掩码是通过将左移溢出掩码右移一位而被创建。这在图6中被示出,其中可以看出掩码生成电路生成llmask 126、lgmask 128和lsmask 130,这通过根据如下的类似Verilog的描述将相应的左移溢出掩码120、122、124(的位选择)进行移位来完成:
llmask[23:0]=lolmask[24:1];
lgmask[22:0]=lolmask[23:1];
lsmask[21:0]=lolmask[22:1];
在最终阶段,与电路132、134和136直接对无溢出乘积prod应用这些掩码来(从或门138、140和142)获得针对被左移的无溢出乘积的L、G和S。对应的类似Verilog的版本是:
ll=|(llmask[23:0]&prod[23:0]);//左L
lg=|(lgmask[22:0]&prod[22:0]);//左G
ls=|(lsmask[21:0]&prod[21:0]);//左S
图7示出了右移掩码的使用和结构。乘积将被右移以右移位量,为了计算L、G和S,通过将其以相同的移位量左移来构建掩码。初始掩码是26个连续零跟随23个连续一,并且(左移移位器150)将此掩码左移以右移位量,并在右侧填充额外的一,产生rmask[48:0]152,。掩码操纵电路从该特定掩码构建156、158和160以从中挑选出L、G和S。对应的由掩码操纵电路154实施的Verilog版本是:
rgmask[47:22]=~rmask[48:23]&rmask[47:22];
rlmask[48:23]=~rgmask[47:22];
rsmask[47:0]=rmask[48:1];
并且通过与电路162、164和166对无溢出乘积prod应用这些掩码来(从或门168、170和172)获得针对被右移的乘积的L、G和S,L、G和S以与左移情形相同的方式被计算。对应的类似Verilog版本是:
rl=|(rlmask[48:23]&prod[48:23]);//右L
rg=|(rgmask[47:22]&prod[47:22]);//右G
rs=|(rsmask[47:0]&prod[47:0]);//右S
在以上所有情形(图5-7所示)中基础掩码在V1中被构建,针对L、G和S的特定掩码在V2开始时被产生。由于由这点可知如果乘积有效数被左移或右移,并且溢出被确定,可以仅从三个计算出的版本中选择适合的L、G和S。
图8A示意性地示出了一个实施例中的修正电路180。该修正电路被提供是因为当应用RNE舍入时,L和G的值需要最终的修正。S保持不变。这是因为在G位置处已被注入置位位,所以G的真值是计算出的G的逆,并且L可能也会被注入改变。给定L、G和S(注入后)的值,舍入结果的被修正的最后位(“被修正的L”)由L&(G|S)给出。
图8B示意性地示出检测非精确结果的电路。如图8B中所示的非精确检测电路,当装置在RU模式中执行舍入时,对乘积的低位(对G和S有贡献的位)执行位比较(使用位比较电路184),并且将它们与舍入注入相比较。如果这些位未改变则舍入注入不改变乘积,结果是精确的。如果被修正的G或S是非零的,针对非RU舍入模式,非精确检测电路182被布置为将非精确标志置位。对应的非精确检测电路的类似Verilog版本是:
ru_exact=&((prod[47:0]&round[47:0])|~round[47:0]);
oru_exact=&((ovfl_prod[47:0]&oround[47:0])|~oround[47:0]);
ixc_ru=(overflow&~oru_exact)|(~overflow&~ru_exact);
图9A示意性地示出用于下溢检测的电路,使用该电路是因为用于浮点乘法运算的方法被定义为使得下溢检测应该在舍入之前发生,并且当然,伴随着尽早的注入舍入,无预先被舍入的乘积。这里被认知的是,有问题的情形是将次正规乘积变为最小的正规乘积的舍入注入,因为在这种情形中小数全部是零并且偏置指数从零变为一。相应地,下溢检测电路186通过检查乘积小数(其必须是零)来检测这种类型的下溢,如果是这样的话并且如果偏置指数是一并且非精确标志被置位,则接下来舍入导致溢出到正规数中,并且下溢(ufc)的标志被置位,即使最终结果实际上将是正规的。
图9B示意性地示出了清零检测电路188,在装置中提供该电路使得当启用清零模式时,在舍入前是次正规的结果被清零。与以上关于用于检测下溢的图9A所述的相似的逻辑适用于此,因为如果指数是零并且(i)指数不溢出或者(ii)指数由于舍入溢出,清零发生。这个清零标志导致输出覆盖,其中无论计算出的值是什么,输出值被清零。
图10A、10B和10C示出在一个实施例的方法中所采用的一系列步骤。流程被看作在步骤200处开始,流程200中输入运算对象opa和opb存在于输入寄存器中。接下来在步骤202处,在乘法器阵列中开始小数部分fraca和fracb的乘法运算。在此同时(在204处)开始对运算对象的指数部分进行检查以确定每个运算对象的无偏指数和每个运算对象的前导零计数,使得可以对将被要求的移位(在量和方向两者上)做出确定。在步骤206处确定opa是否有非零指数,若有,则流程通过步骤208前进,在步骤208中,将另一个因数fracb添加到规约阵列中。类似地,在步骤210处确定opb是否有非零指数,若有,则流程通过步骤212前进,在步骤212中,将另一个因数fraca添加到规约阵列中。最后,在步骤214处,针对任何隐含的整数位的乘积将单个位添加到规约阵列。接下来在步骤216处,基于已确定的移位量,分别通过将基础舍入值右移和左移以移位量来生成左移舍入值和右移舍入值。然后在步骤218处通过将舍入常量左移一位来创建针对溢出乘积有效数加法器的舍入值。接下来通过使用3∶2压缩器将这两个舍入常量添加到部分乘积中,除非乘法运算是融合乘加运算的一部分,在此情形中舍入常量被强制置零。然后在步骤222处通过使用相应的48位加法器和49位加法器来完成部分乘积加法运算。
在步骤224处,通过将初始溢出掩码图案右移以移位量来针对被左移的有效数创建溢出掩码。接着在步骤226处,对无溢出乘积有效数应用该溢出掩码来确定溢出状态。接下来在步骤228处,对乘积有效数和溢出乘积有效数应用L、G和S掩码来根据移位方向和溢出状态确定这些L、G和S位的值。然后在步骤230处将溢出乘积有效数左移,并且通过相应的移位器对无溢出乘积有效数进行左移和右移。然后在步骤232处,基于被移位方向和溢出值,在被移位的乘积有效数中选择将输出的乘积有效数,除非它被特殊值覆盖。在步骤234处,基于舍入模式应用任何必要的舍入修正,并且接下来在步骤236处,通过对乘积有效数的低位与其舍入注入的比较,执行非精确检测。在步骤238处从为零的乘积有效数、为一的偏置指数以及被置位的非精确标志中检测下溢。最终在步骤240处,如果装置在清零模式,如果偏置指数是零并且无指数溢出或者指数由于舍入溢出,则执行清零。该流程在步骤242处结束。
以简短的方式整体总结,本技术提供用于浮点乘法运算的装置和方法。从两个运算对象有效数生成两个部分有效数。从运算对象的指数值和前导零计数确定无偏结果指数,以及预定的标准格式的预定的最小指数值所需的乘积有效数的移位量和移位方向。针对注入到部分乘积的加法运算中的第一舍入值和第二舍入值,将预定的舍入图案在与移位方向相反方向移位以移位量来生成第一舍入值,并且通过将第一舍入值左移一位给出第二舍入值。将第一、第二部分乘积和第一舍入值一起相加来给出第一乘积有效数,将第一、第二部分乘积和第二舍入值一起相加来给出第二乘积有效数。将这些乘积有效数在移位方向移位以移位量,并且从中选择一个来生成以预定的标准格式的格式化的有效数。尽早的注入舍入提供了更快的浮点乘法器
在本申请中,词语“被配置”或者“被布置”被用来表示装置的元件具有能够执行所定义操作的配置。在此上下文中,“配置”的意思是软件或硬件的互连的布置或方式。例如,装置可以具有提供所定义操作的专用硬盘,或被编程为执行功能的处理器或其它处理设备。“被配置为”或者“被安排为”不意味着装置元件需要以任何方式被改变来提供定义操作。
虽然在此参照附图详细地描述本发明实施例,应理解本发明不限于这些精确实施例,并且本领域技术人员可实现各种不同的改变、补充和修改而不背离如所附权利要求定义的发明范围。例如,可以将独立权利要求的特征与从属权利要求的特征做出各种不同的组合而不背离本发明范围。

Claims (20)

1.用于浮点乘法运算的装置,包括:
部分乘积生成电路,用于将第一浮点运算对象的有效数与第二浮点运算对象的有效数相乘来生成第一部分乘积和第二部分乘积;
指数计算电路,用于根据所述第一浮点运算对象和所述第二浮点运算对象的前导零计数和指数值来计算所述乘法运算的结果的无偏指数值,并且根据预定的标准格式的预定的最小指数值确定针对乘积有效数的移位量和移位方向,所述乘积有效数是由对所述第一部分乘积和所述第二部分乘积的加法运算生成;
舍入注入电路,用于针对到所述加法运算中的注入生成第一舍入值和第二舍入值,其中所述舍入注入电路包括舍入移位电路,所述舍入移位电路通过将位的预定的舍入图案在与所述移位方向相反的方向移位以所述移位量来生成第一舍入值,并通过将所述第一舍入值左移一位来生成所述第二舍入值;
第一加法器电路,用于针对所述加法运算将所述第一部分乘积、所述第二部分乘积以及所述第一舍入值一起相加来生成第一乘积有效数;
第二加法器电路,用于针对所述加法运算将所述第一部分乘积、所述第二部分乘积以及所述第二舍入值一起相加来生成第二乘积有效数;
有效数移位电路,用于将所述第一乘积有效数和所述第二乘积有效数中的至少一个在所述移位方向移位以所述移位量;以及
选择电路,用于选择所述第一乘积有效数和所述第二乘积有效数之一来以所述预定的标准格式生成格式化的有效数。
2.如权利要求1所述的装置,其中所述第一加法器电路具有生成的所述第一乘积有效数比由所述第二加法器电路生成的所述第二乘积有效数少一位的配置。
3.如权利要求1所述的装置,其中所述预定的舍入图案具有与所述格式化的有效数匹配的长度,并且当所述装置的舍入模式是就近舍入偶数优先(RNE)时,所述预定的舍入图案包括由多个复位位跟随的置位位,当所述舍入模式是向上舍入(RU)时,所述预定的舍入图案包括所有置位位,并且
当所述相反方向是向左并且所述舍入模式是向上舍入时,由所述移位量给定的多个较低有效位位置被置位,并且
当所述相反方向是向右时,由所述移位量给定的多个最高有效位位置被复位。
4.如权利要求1所述的装置,包括掩码生成电路,用于生成识别所述第二乘积有效数的溢出位位置的溢出掩码,其中所述掩码生成电路被布置为通过将位的预定的掩码图案右移以所述移位量来生成所述溢出掩码;以及
比较电路,用于对所述第二乘积有效数应用所述溢出掩码来提取所述溢出位位置处的溢出值,其中所述比较电路被布置为在所述有效数移位电路对所述第一乘积有效数和所述第二乘积有效数中的至少一个进行移位之前提取所述溢出值。
5.如权利要求4所述的装置,其中当所述第二乘积有效数未被移位时,所述预定的掩码图案包括在所述第二乘积有效数的未被移位的溢出位位置处的置位位。
6.如权利要求1所述的装置,其中所述指数计算电路包括右移溢出确定电路,用于在所述移位方向是向右以及以下两者中的任一者时识别右移溢出情况:
所述第二乘积有效数的最高有效位被置位并且所述移位量是二;或者
所述第二乘积有效数的次最高有效位被置位并且所述移位量是一;并且
所述指数计算电路响应于所述右移溢出情况来将所述乘法运算结果的偏置指数值置为一。
7.如权利要求4所述的装置,其中所述有效数移位电路包括:
左移移位电路,用于将所述第一乘积有效数和所述第二乘积有效数左移以所述移位量来给出第一左移乘积有效数和第二左移乘积有效数;
右移移位电路,用于将所述第二乘积有效数右移以所述移位量来给出右移乘积有效数,其中所述左移移位电路和所述右移移位电路被布置为彼此并行地执行它们各自的移位;并且
所述选择电路响应与所述移位方向和所述溢出值来选择所述第一左移乘积有效数、所述第二左移乘积有效数以及所述右移乘积有效数之一作为所述格式化的有效数,并且在所述格式化的有效数中选择预定数目的最高有效位来输出。
8.如权利要求7所述的装置,其中所述第一舍入值和所述第二舍入值被置为零并且所述装置具有向加法器转发所述乘法运算的未被舍入的结果作为融合乘加的一部分的配置。
9.如权利要求4所述的装置,其中所述掩码生成电路被布置为生成识别所述第一乘积有效数内的所述格式化的有效数的最后位的最后位位置的最后位掩码,并且其中所述掩码生成电路被布置为生成所述最后位掩码包括将位的预定的最后位掩码图案在与所述移位方向相反的方向移位以所述移位量,并且还包括:
比较电路,用于对所述第一乘积有效数应用所述最后位掩码来提取在所述最后位位置处的最后位值。
10.如权利要求9所述的装置,其中所述掩码生成电路被布置为生成左移最后位掩码和右移最后位掩码,其中所述比较电路响应于所述移位方向是向左的方向来使用所述左移最后位掩码提取所述最后位值,并且响应于所述移位方向是向右的方向来使用所述右移最后位掩码提取所述最后位值。
11.如权利要求10所述的装置,其中所述掩码生成电路被布置为生成两个左移最后位掩码,其中所述掩码生成电路被布置为通过将第一左移最后位掩码右移一位来生成第二左移最后位掩码,并且
所述比较电路被布置为对所述第一乘积有效数应用所述第一左移最后位掩码,并对所述第二乘积有效数应用所述第二左移最后位掩码,并且
所述比较电路响应于指示所述第二乘积有效数溢出的所述溢出值来选择通过使用所述第一左移最后位掩码提取的所述最后位值,并且响应于指示所述第二乘积有效数无溢出的所述溢出值来选择通过使用所述第二左移最后位掩码提取的所述最后位值。
12.如权利要求11所述的装置,其中,当所述移位方向是所述向左的方向时,所述预定的最后位掩码图案包括被预定数目的置位位跟随的复位位,其中所述预定数目的置位位比以所述预定的标准格式的所述格式化的有效数的位数多一位,并且
所述掩码生成电路被布置为从基础移位掩码生成所述第一左移最后位掩码,其中所述基础移位掩码通过将所述预定的最后位掩码图案右移以所述移位量以及将由所述移位量给定的多个复位位添加到已被右移的所述预定的最后位掩码图案的前面来生成。
13.如权利要求10所述的装置,其中,当所述移位方向是所述向右的方向时,所述预定的最后位掩码图案包括由预定数目的置位位跟随的复位位序列,其中所述预定数目的置位位是以所述预定的标准格式的所述格式化的有效数的位数,并且
所述掩码生成电路被布置为从基础移位掩码生成所述右移最后位掩码,其中所述基础移位掩码通过将所述预定的最后位掩码图案左移以所述移位量以及将由所述移位量给定的多个置位位添加到已被左移的所述预定的最后位掩码图案的后面来生成。
14.如权利要求9所述的装置,其中所述掩码生成电路被布置为生成保护位掩码,其中所述保护位掩码在保护位位置处具有置位位,所述保护位位置比所述第一乘积有效数内的所述格式化的有效数的最后位位置低一位,
并且所述比较电路被布置为对所述第一乘积有效数应用所述保护位掩码来提取所述保护位位置处的保护位值。
15.如权利要求14所述的装置,其中所述掩码生成电路被布置为生成粘滞位掩码,其中所述粘滞位掩码在低于所述保护位位置的所有位位置处具有置位位,
并且所述比较电路被布置为对所述第一乘积有效数应用所述粘滞位掩码来提取一组粘滞位值并计算作为该组粘滞位值的逻辑或的整体粘滞位值。
16.如权利要求15所述的装置,还包括修正电路,所述修正电路响应于所述装置的舍入模式是就近舍入偶数优先(RNE)来计算作为保护位值的逆的被修正的保护位值,并计算作为所述保护位值和所述整体粘滞位值的逻辑或值与所述最后位值的逻辑与的被修正的最后位值。
17.如权利要求16所述的装置,还包括非精确检测电路,当所述被修正的保护位值或者所述整体粘滞位值非零时,所述非精确检测电路响应于所述装置的舍入模式不是向上舍入(RU)来生成非精确标志。
18.如权利要求4所述的装置,还包括非精确检测电路,当所述溢出值被置位,所述第一舍入值与所述第一乘积有效数的对应的较低的部分不是每一位完全相同时,所述非精确检测电路响应于所述装置的舍入模式是向上舍入(RU)来将非精确标志置位,
并且当所述溢出值未被置位,所述第二舍入值与所述第二乘积有效数的对应的较低的部分不是每一位完全相同时,所述非精确检测电路响应于所述装置的舍入模式是向上舍入(RU)来将所述非精确标志置位。
19.如权利要求1所述的装置,还包括下溢检测电路,当所述格式化有效数为零、所述乘法运算的结果的偏置指数是一以及非精确标志被置位时,所述下溢检测电路将下溢标志置位。
20.如权利要求1所述的装置,还包括清零标志生成电路,用于当所述乘法运算结果的偏置指数是零以及以下两者中的任一者时将清零标志置位:
所述指数不溢出;
或者所述指数由于舍入溢出。
CN201610829762.1A 2015-09-25 2016-09-18 用于浮点乘法运算的装置和方法 Active CN106970776B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/865,342 2015-09-25
US14/865,342 US9823897B2 (en) 2015-09-25 2015-09-25 Apparatus and method for floating-point multiplication

Publications (2)

Publication Number Publication Date
CN106970776A CN106970776A (zh) 2017-07-21
CN106970776B true CN106970776B (zh) 2021-12-14

Family

ID=56894789

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610829762.1A Active CN106970776B (zh) 2015-09-25 2016-09-18 用于浮点乘法运算的装置和方法

Country Status (4)

Country Link
US (1) US9823897B2 (zh)
KR (1) KR102627299B1 (zh)
CN (1) CN106970776B (zh)
GB (1) GB2542652B (zh)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11023230B2 (en) * 2015-10-24 2021-06-01 Alan A. Jorgensen Apparatus for calculating and retaining a bound on error during floating-point operations and methods thereof
US10303438B2 (en) 2017-01-16 2019-05-28 International Business Machines Corporation Fused-multiply-add floating-point operations on 128 bit wide operands
US10241756B2 (en) * 2017-07-11 2019-03-26 International Business Machines Corporation Tiny detection in a floating-point unit
TWI638313B (zh) 2017-11-07 2018-10-11 瑞昱半導體股份有限公司 浮點數運算電路及方法
CN109783055B (zh) * 2017-11-10 2021-02-12 瑞昱半导体股份有限公司 浮点数运算电路及方法
CN112732221A (zh) * 2019-10-14 2021-04-30 安徽寒武纪信息科技有限公司 用于浮点运算的乘法器、方法、集成电路芯片和计算装置
US11188304B1 (en) 2020-07-01 2021-11-30 International Business Machines Corporation Validating microprocessor performance
US20230297337A1 (en) * 2020-07-21 2023-09-21 The Governing Council Of The University Of Toronto System and method for accelerating training of deep learning networks
US20230035159A1 (en) * 2021-07-23 2023-02-02 Arm Limited Tininess detection
WO2023113445A1 (ko) * 2021-12-14 2023-06-22 서울대학교산학협력단 부동 소수점 연산 방법 및 장치
CN114371735B (zh) * 2022-01-07 2023-11-03 广东汇天航空航天科技有限公司 一种飞行器地理围栏数据处理方法及系统
WO2024117562A1 (ko) * 2022-11-29 2024-06-06 한국전자통신연구원 곱셈 누적 연산 방법 및 장치
CN117687596A (zh) * 2023-12-20 2024-03-12 摩尔线程智能科技(北京)有限责任公司 运算装置及方法、芯片和电子设备

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0820005A1 (en) * 1990-08-24 1998-01-21 Matsushita Electric Industrial Co., Ltd. Method and apparatus for computing floating point data
CN1831753A (zh) * 2005-03-08 2006-09-13 中国科学院计算技术研究所 一种浮点乘法器及其兼容双精度和双单精度计算的方法
CN101093442A (zh) * 2007-07-18 2007-12-26 中国科学院计算技术研究所 一种浮点乘加器及其乘法csa压缩树的进位校验装置
CN101174200A (zh) * 2007-05-18 2008-05-07 清华大学 一种浮点乘加融合单元的五级流水线结构
CN101692202A (zh) * 2009-09-27 2010-04-07 北京龙芯中科技术服务中心有限公司 一种64比特浮点乘加器及其浮点运算流水节拍处理方法
CN102004627A (zh) * 2010-11-01 2011-04-06 深圳市海思半导体有限公司 乘法舍入实现方法和装置
CN104899004A (zh) * 2014-03-07 2015-09-09 Arm有限公司 一种用于将浮点操作数相乘的数据处理装置和方法

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1998006029A1 (en) 1996-08-07 1998-02-12 Valery Yakovlevich Gorshtein Apparatus and methods for execution of computer instructions
US6490607B1 (en) * 1998-01-28 2002-12-03 Advanced Micro Devices, Inc. Shared FP and SIMD 3D multiplier
KR20030078541A (ko) * 2002-03-30 2003-10-08 삼성전자주식회사 Dsp에서 가드 비트 처리가 간단한 연산 장치 및 상기연산 장치에서 가드 비트 처리 방법
US7912887B2 (en) * 2006-05-10 2011-03-22 Qualcomm Incorporated Mode-based multiply-add recoding for denormal operands
US8463834B2 (en) 2009-11-03 2013-06-11 Arm Limited Floating point multiplier with first and second partial product shifting circuitry for result alignment
US8996600B1 (en) 2012-08-03 2015-03-31 Altera Corporation Specialized processing block for implementing floating-point multiplier with subnormal operation support

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0820005A1 (en) * 1990-08-24 1998-01-21 Matsushita Electric Industrial Co., Ltd. Method and apparatus for computing floating point data
CN1831753A (zh) * 2005-03-08 2006-09-13 中国科学院计算技术研究所 一种浮点乘法器及其兼容双精度和双单精度计算的方法
CN101174200A (zh) * 2007-05-18 2008-05-07 清华大学 一种浮点乘加融合单元的五级流水线结构
CN101093442A (zh) * 2007-07-18 2007-12-26 中国科学院计算技术研究所 一种浮点乘加器及其乘法csa压缩树的进位校验装置
CN101692202A (zh) * 2009-09-27 2010-04-07 北京龙芯中科技术服务中心有限公司 一种64比特浮点乘加器及其浮点运算流水节拍处理方法
CN102004627A (zh) * 2010-11-01 2011-04-06 深圳市海思半导体有限公司 乘法舍入实现方法和装置
CN104899004A (zh) * 2014-03-07 2015-09-09 Arm有限公司 一种用于将浮点操作数相乘的数据处理装置和方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
"浮点32位并行乘法器设计与研究";张菁;《万方学位论文库》;20071029;第4章 *

Also Published As

Publication number Publication date
GB201610092D0 (en) 2016-07-27
GB2542652B (en) 2018-04-18
KR102627299B1 (ko) 2024-01-22
GB2542652A (en) 2017-03-29
US20170090868A1 (en) 2017-03-30
CN106970776A (zh) 2017-07-21
US9823897B2 (en) 2017-11-21
KR20170037518A (ko) 2017-04-04

Similar Documents

Publication Publication Date Title
CN106970776B (zh) 用于浮点乘法运算的装置和方法
JP6360450B2 (ja) 浮動小数点オペランドを乗算するためのデータ処理装置及び方法
JP6001276B2 (ja) 浮動小数点加算を実行するための装置および方法
JP5996946B2 (ja) 浮動小数点加算器
US8046399B1 (en) Fused multiply-add rounding and unfused multiply-add rounding in a single multiply-add module
CN107769791B (zh) 用于定点到浮点的转换的装置和方法及2的负幂检测器
US8463834B2 (en) Floating point multiplier with first and second partial product shifting circuitry for result alignment
US9696964B2 (en) Multiply adder
US20060117082A1 (en) Data processing apparatus and method for performing floating point multiplication
CN107608655B (zh) 微处理器中执行fma指令的方法和微处理器
US5993051A (en) Combined leading one and leading zero anticipator
US10338889B2 (en) Apparatus and method for controlling rounding when performing a floating point operation
US20160070573A1 (en) Condition code generation
US9836279B2 (en) Apparatus and method for floating-point multiplication
US20050114422A1 (en) High performance implementation of exponent adjustment in a floating point design
US6571266B1 (en) Method for acquiring FMAC rounding parameters
US8015231B2 (en) Data processing apparatus and method for performing floating point multiplication
JP7044528B2 (ja) リーディングゼロ予想
KR101922462B1 (ko) 데이터 처리장치 및 이진수에 대해 시프트 기능을 수행하는 방법
US20060173946A1 (en) Common shift-amount calculation for binary and hex floating point
US7640286B2 (en) Data processing apparatus and method for performing floating point multiplication
US20240004611A1 (en) Tininess detection
KR20230015844A (ko) 극소 검출

Legal Events

Date Code Title Description
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant