CN116382628A - 具有减少1求补延迟的浮点融合乘加 - Google Patents

具有减少1求补延迟的浮点融合乘加 Download PDF

Info

Publication number
CN116382628A
CN116382628A CN202211709536.1A CN202211709536A CN116382628A CN 116382628 A CN116382628 A CN 116382628A CN 202211709536 A CN202211709536 A CN 202211709536A CN 116382628 A CN116382628 A CN 116382628A
Authority
CN
China
Prior art keywords
sign
output
response
bit
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.)
Pending
Application number
CN202211709536.1A
Other languages
English (en)
Inventor
G·J·莱斯
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.)
Texas Instruments Inc
Original Assignee
Texas Instruments Inc
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 Texas Instruments Inc filed Critical Texas Instruments Inc
Publication of CN116382628A publication Critical patent/CN116382628A/zh
Pending legal-status Critical Current

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/50Adding; Subtracting
    • G06F7/505Adding; Subtracting in bit-parallel fashion, i.e. having a different digit-handling circuit for each denomination
    • G06F7/506Adding; Subtracting in bit-parallel fashion, i.e. having a different digit-handling circuit for each denomination with simultaneous carry generation for, or propagation over, two or more stages
    • G06F7/507Adding; Subtracting in bit-parallel fashion, i.e. having a different digit-handling circuit for each denomination with simultaneous carry generation for, or propagation over, two or more stages using selection between two conditionally calculated carry or sum values
    • 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/544Methods 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 for evaluating functions by calculation
    • G06F7/5443Sum of products
    • 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/4824Methods 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 using signed-digit representation
    • 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/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49905Exception handling
    • G06F7/4991Overflow or underflow
    • G06F7/49915Mantissa overflow or underflow in handling floating-point numbers
    • 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

Landscapes

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

Abstract

本申请案的实施例涉及具有减少1求补延迟的浮点融合乘加。一种方法(500)包含接收对应于加法器的输入的第一部分的进位‑和值(502)及接收对应于所述加法器的输入的不与所述第一部分重叠的第二部分的第二值(504)。方法包含提供所述进位‑和值的进位与和值的中间和,其产生进位输出(Cout)(506)。方法包含:确定递增第二值的符号及非递增第二值的符号(510);响应于递增结果的符号而对所述递增结果求补或使所述递增结果通过作为第一输出(512);响应于非递增结果的符号而对所述非递增结果求补或使所述非递增结果通过作为第二输出(514)。

Description

具有减少1求补延迟的浮点融合乘加
技术领域
本申请案的实施例涉及具有减少1求补延迟的浮点融合乘加。
背景技术
处理器可经配置以对浮点数执行算术运算。在浮点表示法中,数字由尾数1.F、指数E及符号位S表示。尾数1.F表示浮点数的有效数字且指数E表示二进制小数点(例如小数点)相对于尾数的位置。符号位S(如果使用)指示浮点数是正(例如,符号位S等于0)还是负(例如,符号位S等于1)。浮点算术运算可产生比尾数可用位数具有更多有效位的结果。因此,此一结果经舍入(例如,舍入到可使用可用尾数位数表示的有效位数)。
发明内容
根据本公开的至少一个实例,一种方法包含:由加法器接收对应于所述加法器的输入位的第一部分的进位-和格式值,所述进位-和格式值包含进位值及和值;由所述加法器接收对应于所述加法器的输入位的不与输入位的所述第一部分重叠的第二部分的第二值;及提供所述进位值与所述和值的中间和。提供所述中间和产生进位输出位。所述方法还包含:使所述第二值递增以产生递增结果,其中所述所接收第二值是非递增结果;确定所述递增结果的符号及所述非递增结果的符号;响应于所述递增结果的所述符号而对所述递增结果求补或使所述递增结果通过以提供第一输出;响应于所述非递增结果的所述符号而对所述非递增结果求补或使所述非递增结果通过以提供第二输出;响应于所述进位输出位、所述递增结果的所述符号及所述非递增结果的所述符号而对所述中间和求补或使所述中间和通过以提供第三输出;响应于所述进位输出位而选择所述第一及第二输出中的一者;及提供包括所述第三输出及所述第一及第二输出中的所述选定者的最终和。
根据本公开的另一实例,一种方法包含:由加法器接收对应于所述加法器的输入位的第一部分的进位-和格式值,所述进位-和格式值包含进位值及和值;由所述加法器接收对应于所述加法器的输入位的不与输入位的所述第一部分重叠的第二部分的第二值;及提供所述进位值及所述和值的较高有效部分的第一中间和。提供所述第一中间和产生进位输出高位。所述方法还包含提供所述进位值及所述和值的较低有效部分的第二中间和。提供所述第二中间和产生进位输出低位。所述方法进一步包含:使所述第二值的较高有效部分递增以产生第一递增结果,其中所述所接收第二值的所述较高有效部分是第一非递增结果;使所述第二值的较低有效部分递增以产生第二递增结果,其中所述所接收第二值的所述较低有效部分是第二非递增结果;确定所述第一递增结果的符号、所述第一非递增结果的符号、所述第二递增结果的符号及所述第二非递增结果的符号;及进行以下中的每一者:响应于所述第一递增结果的所述符号而对所述第一递增结果求补或使所述第一递增结果通过以提供第一输出;响应于所述第一非递增结果的所述符号而对所述第一非递增结果求补或使所述第一非递增结果通过以提供第二输出;响应于所述第二递增结果的所述符号而对所述第二递增结果求补或使所述第二递增结果通过以提供第三输出;及响应于所述第二非递增结果的所述符号而对所述第二非递增结果求补或使所述第二非递增结果通过以提供第四输出。所述方法还包含:响应于所述进位输出高位、所述第一递增结果的所述符号及所述第一非递增结果的所述符号而对所述第一中间和求补或使所述第一中间和通过以提供第五输出;响应于所述进位输出低位、所述第二递增结果的所述符号及所述第二非递增结果的所述符号而对所述第二中间和求补或使所述第二中间和通过以提供第六输出;响应于所述进位输出高位而选择所述第一及第二输出中的一者;响应于所述进位输出低位而选择所述第三及第四输出中的一者;及提供包括所述第五输出及所述第一及第二输出中的所述选定者的第一最终和;及提供包括所述第六输出及所述第三及第四输出中的所述选定者的第二最终和。
根据本公开的又一实例,一种装置包含具有进位输入、和输入、进位输出输出及中间输出的加法单元。所述加法单元经配置以:在所述进位输入处接收进位-和格式值的进位值;在所述和输入处接收所述进位-和格式值的和值;及在所述中间输出处提供所述进位值与所述和值的中间和,其中所述加法单元对应于加法器的输入位的第一部分。所述装置还包含具有递增器输入及递增器输出的递增器电路,其中所述递增器电路经配置以:在所述递增器输入处接收第二值;及响应于所述第二值而在所述递增器输出处提供递增结果,其中所述所接收第二值是非递增结果,且其中所述递增器电路对应于所述加法器的输入位的不与输入位的所述第一部分重叠的第二部分。所述装置还包含:第一1求补电路,其具有第一1补码输入、第一1补码输出及第一控制输入,其中所述第一1补码输入耦合到所述递增器输出;第二1求补电路,其具有第二1补码输入、第二1补码输出及第二控制输入,其中所述第二1补码输入耦合到所述递增器输入;及第三1求补电路,其具有第三1补码输入、第三1补码输出及第三控制输入,其中所述第三1补码输入耦合到所述中间输出。所述装置进一步包含具有第一及第二预计算输入及第一及第二预计算输出的第一预计算电路,其中所述第一预计算输入耦合到所述递增器输出,其中所述第二预计算输入耦合到所述递增器输入,其中所述第一预计算输出耦合到所述第一控制输入,且其中所述第二预计算输出耦合到所述第二控制输入。此外,所述装置包含具有第三、第四及第五预计算输入及第三预计算输出的第二预计算电路,其中所述第三预计算输入耦合到所述递增器输出,其中所述第四预计算输入耦合到所述递增器输入,其中所述第五预计算输入耦合到所述进位输出输出,且其中所述第三预计算输出耦合到所述第三控制输入。所述装置还包含具有第一及第二多路复用器输入、多路复用器控制输入及多路复用器输出的多路复用器(mux),其中所述第一多路复用器输入耦合到所述第一1补码输出,其中所述第二多路复用器输入耦合到所述第二1补码输出,且其中所述多路复用器控制输入耦合到所述进位输出输出。所述x位加法器的最终和是与所述多路复用器输出级联的所述第三1补码输出。
附图说明
为了详细描述各种实例,现将参考附图,其中:
图1是根据各种实例的融合乘加(FMA)单元的示意性框图;
图2是根据各种实例的图1的FMA单元的尾数加法器的示意性框图;
图3是根据各种实例的具有1求补逻辑的图2的尾数加法器的示意性框图;
图4是根据各种实例的具有减少1求补延迟的图2的尾数加法器的示意性框图;
图5是根据各种实例的用于执行具有减少1求补延迟的FMA运算的尾数加法的方法的流程图;
图6A到6C是根据各种实例的FMA运算中用于归一化的实例左移的示意图;
图7是根据各种实例的合并2求补及舍入电路的示意性框图;
图8是根据各种实例的经配置以在FMA运算中提供粘贴位的电路的示意图;
图9是根据各种实例的在FMA运算中归一化之后完成2求补的实例;
图10是根据各种实例的经配置以在FMA运算中提供粘贴位及1位的电路的示意图;
图11是根据各种实例的用于合并舍入及2补码+1运算的方法的流程图;
图12是经配置以实施双精度及双单精度算术右移两者的电路的示意图;
图13是根据各种实例的经配置以用减少延迟实施双精度及双单精度算术右移两者的电路的示意图;
图14是根据各种实例的用于展示图13的算术右移电路的功能性的各种算术右移运算的实例;及
图15是根据各种实例的用于执行算术右移的方法的流程图。
具体实施方式
在一些情况中,处理器使用融合乘加(FMA)运算来改进浮点算术处理。FMA运算组合浮点乘法运算及浮点加法运算以执行为单个指令。FMA运算产生等于(A*B)+C的结果,用单个舍入步骤。通过在单个指令中执行两个运算,FMA运算减少执行时间且增加吞吐量。FMA运算还提高精度,因为其使用单个舍入步骤而非两个舍入步骤(例如,第一舍入步骤用于乘法运算且第二舍入步骤用于随后加法运算)。因此,提高FMA运算的效率及/或性能是有用的。
图1是FMA单元100的示意性框图,其在一些实例中是处理器的硬件功能单元,其经配置以对浮点操作数A、B及C实施FMA运算以提供等于(A*B)+C的浮点结果。FMA单元100经配置以对单精度(SP)浮点值及双精度(DP)浮点值两者进行运算。例如,SP浮点值包含76位尾数且DP浮点值包含163位尾数。在一个实例中,FMA单元100经配置以对双SP浮点值进行运算;即,FMA单元100经配置以并行地对两组SP操作数执行FMA运算。
无论FMA单元100是对SP还是DP浮点值进行运算,FMA单元100包含经配置以使A与B操作数相乘且以进位-和格式提供结果的乘法器102。例如,由乘法器102提供的结果包含和值(SUM)及进位值(CARRY)。
FMA单元100还包含经配置以基于A、B及C的指数差来对准C操作数的移位计算器104及移位器106。例如,C操作数与乘积A*B的加法响应于C操作数及乘积A*B的尾数的对准而执行,使得其指数相同。移位计算器104经配置以接收A、B及C的指数部分以确定移位幅度来使C操作数与乘积A*B对准。移位计算器104将幅度提供到移位器106,移位器106响应于从移位计算器104接收的幅度而对C操作数执行算术右移。移位器106经配置以提供移位C操作数(例如移位从移位计算器104接收的幅度的C操作数)作为其输出。在此实例中,移位计算器104及移位器106使C操作数对准,同时乘法器102确定乘积A*B。
FMA单元100还包含第一指数计算器108。第一指数计算器108经配置以接收A、B及C的指数部分且确定C的指数或乘积A*B的指数中的较大者。第一指数计算器108经配置以提供两个指数中的较大者作为其输出。
FMA单元100包含压缩器110,其经配置以接收移位C操作数与A*B的进位-和格式乘积的和且压缩与A*B的进位-和格式乘积的进位及和结果对准的重叠结果(例如移位C操作数)。此将后续加法单元(例如尾数加法器112)的输入数目从三个减少到两个。压缩器110提供进位-和格式的压缩输出,其和部分标记为P_S且其进位部分标记为P_C。
FMA单元100包含从压缩器110接收进位-和格式的压缩输出的尾数加法器112。尾数加法器112还接收移位C操作数的非重叠部分且提供作为移位C操作数与A*B尾数结果的和的输出。例如,由移位器106执行的C操作数的对准产生163位向量,而A*B结果是106位向量。压缩器110将其三个输入减少到对应于三个输入的重叠部分的两个输出(例如,其中C与进位-和格式的A*B对准)。因此,移位C操作数也提供到尾数加法器112,因为移位C操作数的非重叠位没有反映在压缩器110的输出中,而是应为由尾数加法器112实施的加法运算的部分。
如下文描述,在一些实例中,尾数加法器112包含进位传播加法器(例如128位进位传播加法器)。然而,在其中尾数是163位值的实例中,整个163位结果向量无法适应128位进位传播加法器,且因此尾数加法器112还包含增量电路。对于双SP FMA运算,两个增量电路(例如,每一SP运算一个增量电路)用于确定结果的高位。对于DP FMA运算,两个增量电路经组合以确定结果的高位。对于SP及DP FMA运算,结果的低位由进位传播加法器确定。在一些实例中,尾数加法器112还经配置以产生1补码输出(例如和)以促进后续2求补运算,使得FMA运算的结果呈2补码格式。例如,因为浮点格式包含与尾数分离的符号位,所以尾数表示为正数,即使产生所述尾数的结果是负(例如,符号位表示结果的负面,而尾数表示为正数)。因此,FMA运算的负结果的尾数经2求补(例如,通过下文描述的舍入单元120)以产生具有正值的尾数,且结果的负性反映在FMA运算的浮点结果的符号位中。
FMA单元100还包含可与尾数加法器112并行提供的前导零预测器(LZA)114。在一些实例中,尾数加法器112的结果在其舍入之前归一化,因为舍入位的位置至今未知。因此,LZA 114也接收相同于尾数加法器112的输入且确定结果的最高有效位(MSB)的位置。例如,LZA 114经配置以将进位及和位编码成预测结果,预测结果提供到前导零检测器(LZD)以确定预测结果中第一“1”的位置。LZD及因此LZA 114的结果是可用于在舍入之前归一化FMA运算的结果的左移量。
FMA单元100包含经配置以接收来自LZA114的左移量及来自尾数加法器112的和结果的归一化器116。归一化器116经配置以响应于左移量而归一化和结果且将归一化结果提供到舍入单元120。舍入单元120经配置以使归一化结果舍入以获得FMA运算的最终尾数。如描述,舍入经执行使得FMA运算的结果可符合具有特定有限位数的特定数据格式。如上文简要及下文更详细描述,舍入单元120还可经配置以对来自尾数加法器112的1求补结果完成2求补(例如通过递增),使得FMA运算的结果的尾数视需要呈2补码格式(例如,其中结果是负值,其由上述符号位及正尾数反映)。第二指数计算器118经配置以从第一指数计算器108接收选定指数且从LZA 114接收左移量。第二指数计算器118经配置以通过从先前指数结果减去左移量来确定FMA运算的最终指数。
如上文描述,提高FMA运算的效率及/或性能是有用的。因此,本描述的实例包含FMA单元100且更特定来说,尾数加法器112的此类改进。在以下实例中,为了便于解释及/或展示各种电路功能性,有时参考具有特定位数的各种值。然而,除非明确说明,否则本描述的范围不限于具有此类特定位数的值。此外,在以下实例中,参考逻辑门的某些布置及/或逻辑功能的实施。然而,除非明确说明,否则此类逻辑功能在其它实例中可不同实施(例如,使用不同逻辑门及/或逻辑门组合),且本描述的范围不限于逻辑门的特定布置。
图2是一个实例中尾数加法器112的示意性框图。在此实例中,尾数加法器112经配置以并行执行两个SP浮点加法运算或执行DP浮点加法运算。为DP浮点加法运算提供163位尾数结果(例如DP_out),而为SP浮点加法运算提供76位尾数结果(或为双SP浮点加法运算提供两个76位尾数结果,例如SP1_out及SP0_out),以便符合IEEE浮点算术及舍入标准。在图2的实例中,结果DP_out仅展示为162位值,因为在此图中省略符号位;类似地,结果SP0_out仅展示为75位值,因为在此图中省略符号位。SP1_out大于76个位,且因此SP1_out的某些较高有效位可由FMA单元100中的后续框丢弃或否则忽略。尾数加法器112接收进位-和格式的压缩输出(例如,标记为P_S及P_C以反映上述压缩器110的输出),其反映A*B的进位-和格式乘积及与A*B结果重叠或对准的C操作数的部分。尾数加法器112还接收非重叠移位C操作数位(例如,为简单起见,标记为C)且提供作为移位C操作数与进位-和格式的压缩输出的和的输出。
对于FMA单元100的上下文中的DP及SP浮点加法运算两者,加法的高位部分可由递增器电路处置,因为在此高位范围内,仅存在移位C操作数(例如非重叠值)作为尾数加法器112的输入。高位部分是尾数加法器112的较高有效部分。例如,在DP浮点加法运算中,尾数的55个高位可使用递增器电路计算,而在SP浮点加法运算中,两个尾数中的每一者的26个高位可使用递增器电路计算。然而,在图2的特定实例中,提供128位加法单元202。因此,对于DP浮点加法运算,127个低位使用加法单元202确定,而剩余35个位使用递增器电路204确定。如上文描述,标记为DP_out的输出展示为包含162个位,因为已省略符号位。类似地,对于SP浮点加法运算,两个尾数中的每一者的63个低位使用加法单元202确定(例如,分别为位0到62及位64到126),而剩余12个位使用递增器电路204确定。加法单元202因此处置尾数加法器112的较低有效部分。如上文描述,标记为SP0_out的输出展示为包含75个位,因为已省略符号位。
递增器电路204因此分割成第一23位递增器电路206(例如递增器A 206)及第二12位递增器电路208(例如递增器B 208)。全35位递增器电路204用于DP浮点加法运算,而递增器A 206用于第一SP浮点加法运算且递增器B 208用于第二SP浮点加法运算。
在此实例中,加法单元202经实施为树形加法器,其是相对较高性能加法器架构。加法单元202使用传播-产生(PG)逻辑210的一个级、分组PG逻辑212的log(n)个级(例如,其中在此实例中n是128)及和逻辑214的一个级来执行加法。尽管为简单起见图2中未展示,但尾数加法器112通过对每一位位置的输入位执行异或(XOR)运算来计算128低位中的每一者的部分和。例如,通过执行P_C[0]^P_S[0]来计算位位置0的部分和,加法单元202的其它位位置依此类推。
PG逻辑210及分组PG逻辑212经配置以计算每一位位置的进位值,且和逻辑214经配置以组合每一位位置的进位值及部分和以提供加法单元202的结果。
PG逻辑210提供加法单元202的每一位位置的传播及产生值。当不管进位输入值如何,要产生进位输出时,断言产生信号。因此,产生信号响应于断言所述位位置的两个输入而断言。当所述位位置的进位输入将传播到下一位位置时,断言传播信号。因此,传播信号响应于断言所述位位置的输入中的一者且取消断言所述位位置的另一输入而断言。在一些实例中,当不管进位输入值如何,不会产生进位输出时,断言取消信号。因此,取消信号响应于取消断言所述位位置的两个输入而断言。
产生信号可作为AND门的输出提供,AND门接收所述位位置的两个输入位作为其输入。传播信号可作为XOR门的输出提供,XOR门接收所述位位置的两个输入位作为其输入。传播信号也可作为OR门的输出提供,因为当断言对应产生信号时,传播信号对输出没有影响。取消信号可作为NOR门的输出提供,NOR门接收所述位位置的两个输入位作为其输入。在一些实例中,反相产生及/或传播信号可用于PG逻辑210中,因为NAND及NOR门通常比AND及OR门更快。
分组PG逻辑212可取决于所实施的特定树形加法器结构来使用不同架构实施。在一个实例中,分组PG逻辑212使用斯克兰斯基(Sklansky)加法器架构实施。不管分组PG逻辑212的特定架构如何,分组PG逻辑212中的每一级经配置以从PG逻辑210(例如分组PG逻辑212的第一级)或分组PG逻辑212的前一级接收传播及产生值。例如,分组PG逻辑212的第二级从分组PG逻辑212的第一级接收传播及产生信号。分组PG逻辑212提供加法单元202的每一位位置的进位输出信号。
和逻辑214从分组PG逻辑212接收加法单元202的每一位位置的进位输出信号。和逻辑214还接收上述部分和(例如P_C^P_S)。和逻辑214经配置以通过针对每一位位置使部分和与进位输入信号(例如来自前一数值较低的位位置的进位输出信号)进行XOR运算来计算加法单元202的最终和。在实例中,加法单元202的最终和也称为中间和,因为其随后与递增器206、208的结果级联以产生尾数加法器112的输出。
递增器206、208经配置以提供其输入位的递增和(例如用于DP FMA运算的移位C操作数的高位或用于并行SP FMA运算的移位C操作数中的每一者的高位)。
第一多路复用器(mux)216具有经配置以接收递增器A 206的输入位的第一输入及经配置以接收来自递增器A206的输出位的第二输入。第一多路复用器216经配置以接收控制信号。第一多路复用器216经配置以响应于控制信号为‘0’而提供递增器A 206的输入位作为第一多路复用器216输出及响应于控制信号为‘1’而提供来自递增器A 206的输出位作为第一多路复用器216输出。
第二多路复用器218具有经配置以接收递增器B 208的输入位的第一输入及经配置以接收来自递增器B 208的输出位的第二输入。第二多路复用器218经配置以接收控制信号。第二多路复用器218经配置以响应于控制信号为‘0’而提供递增器B 208的输入位作为第二多路复用器218输出及响应于控制信号为‘1’而提供来自递增器B 208的输出位作为第二多路复用器218输出。
因此,第一多路复用器216及递增器A206用于计算递增和及非递增和两者,其中的一者响应于来自加法单元202的进位输出位而选择。类似地,第二多路复用器218及递增器B208用于计算递增和与非递增和两者,其中的一者响应于来自加法单元202的进位输出位而选择。如下文进一步描述,执行这些选择的特定进位输出位可基于FMA单元100(及因此尾数加法器112)是执行SP FMA运算还是DP FMA运算来改变。在这些实例中,标记为SP的信号响应于执行SP FMA运算而断言,而标记为DP的信号响应于执行DP FMA运算而断言。信号SP及DP是互补的。
在一些实例中,加法单元202的少于所有位用于计算和。在SP FMA运算中,第一及第二SP运算共享加法单元202的128位宽度。为了确保第二SP运算的加法不影响第一SP运算的加法,在位位置63处插入两个运算之间的间隙。因此,来自第二SP运算的进位输出(例如,来自加法单元202的低位)不传播到第一SP运算的结果中(例如,到加法单元202的高位中)。为了一致性,加法单元202的MSB(位127)也可留空。因此,128位加法单元202使用126个位来对每一SP运算的63低位求和(例如,第二SP运算使用位0到62,第一SP运算使用位64到126)。类似地,DP FMA运算不利用加法单元202的MSB(位127)以简化第一多路复用器216的选择逻辑(例如,DP使用位0到126)。
在这些实例中,对于DP FMA运算,位127的进位输入(例如,更一般来说,Ci[127]或Ci[upper])用于选择递增器A206及递增器B 208的递增或非递增输出(例如,用于加法的35个高位)。例如,Ci[127]选择第二多路复用器218的输入中的一者(例如来自递增器B 208的递增结果或作为输入提供到递增器B 208的非递增结果),且来自递增器B 208的进位输出选择第一多路复用器216的输入中的一者(例如来自递增器A 206的递增结果或作为输入提供到递增器A206的非递增结果)。
对于SP FMA运算,位63的进位输入(例如,更一般来说,Ci[63]或Ci[lower])用于选择递增器B 208的递增或非递增输出,且Ci[127]用于选择递增器A 206的递增或非递增输出。
由于Ci[127]及Ci[63]的不同使用情况取决于是执行SP还是DP FMA运算,额外AOI21门220及OAI21门230与和逻辑214并行实施。提供到第一多路复用器216的控制信号是IncrA_sel且提供到第二多路复用器218的控制信号是IncrB_sel。
当断言DP且断言Ci[127]时或当断言SP且断言Ci[63]时,IncrB_sel被断言(例如,为‘1’且因此选择递增器B 208的递增输出)。因此,IncrB_sel可表示为:
IncrB_sel=(Ci[127]&&DP)||(Ci[63]&&SP)
德摩根(DeMorgan)定理可应用于上式以导致:
IncrB_sel=~((~Ci[127]||SP)&&~(Ci[63]&&SP))
部分~(Ci[63]&&SP)能够由NAND门240实施,同时加法单元202的高位(例如位64到127)完成分组PG逻辑212。因此,此部分可由项‘A’替代以导致:
IncrB_sel=~((~Ci[127]||SP)&&A)
上式由OAI21门230实施。此外,项~Ci[127]可用作分组PG逻辑212的进位输出,因为在一些实例中,分组PG逻辑212的级用交替OAI21及AOI21复合门实施(例如,以减少或移除每一逻辑级处的反相器),且因此Ci[127]位于一级上,使得实际值反相且因此为~Ci[127]。
a)当断言DP且断言Ci[127]及递增器B 208的进位输出(例如IncrB_Co)两者时或b)当断言SP且断言Ci[127]时,IncrA_sel被断言(例如,为‘1’且因此选择递增器A 206的递增输出)。因此,IncrA_sel可表示为:
IncrA_sel=(DP&&Ci[127]&&IncrB_Co)||(SP&&Ci[127])
反向分布可应用于上式以导致:
IncrA_sel=Ci[127]&&((DP&&IncrB_Co)||SP)
如上文描述,DP及SP是互补的,且因此~DP可替代SP:
IncrA_sel=Ci[127]&&((DP&&IncrB_Co)||~DP)
上式可通过应用(x+~x&y)=x+y的规则来进一步简化以导致:
IncrA_sel=Ci[127]&&(IncrB_Co||~DP)
最后,德摩根定理可应用于上式以导致:
IncrA_sel=~(~Ci[127]||(~IncrB_Co&&DP))
上式由AOI21门220实施。
在一些实例中,分组PG逻辑212的连续级使用交替互补逻辑实施以减少由使用非必要反相器导致的延迟。例如,分组PG逻辑212的第一级产生反相结果。然而,不是引入反相器来“校正”反相结果,而是设计分组PG逻辑212的第二后续级接受反相结果且提供非反相结果,其避免通过用反相器校正分组PG逻辑212的第一级的结果引入的延迟。在IncrB_sel的上式中,Ci[63]由分组PG逻辑212作为非反相值提供,而Ci[127]由分组PG逻辑212作为反相值提供。因此,式可使用Ci[63]及~Ci[127]来减少总延迟,因为在关键路径上没有使用反相器来校正任一值。
如上文描述,第一多路复用器216及第二多路复用器218分别响应于IncrA_sel及IncrB_sel信号而选择移位C操作数的高位的递增或非递增值。然而,因为尾数加法器112支持SP及DP FMA运算两者,所以这些高位的进位选择信号(例如IncrA_sel及IncrB_sel信号)相对于和逻辑214延迟AOI21/OAI21门延迟(例如来自AOI21门220及OAI21门230)。
图3是在实例中具有额外1求补逻辑302的图2的尾数加法器112的示意性框图。如上文描述,第一多路复用器216及第二多路复用器218的结果(例如和的高位)相对于和逻辑214延迟OAI21门延迟。在图3的实例中,1求补逻辑302经配置以接收来自第一多路复用器216及第二多路复用器218的输出作为输入且提供接收输入位的1补码输出或使接收输入位通过作为1求补逻辑302的输出。类似地,1求补逻辑304经配置以接收来自和逻辑214的输出作为输入且提供接收输入位的1补码输出或使接收输入位通过作为1求补逻辑304的输出。例如,1求补逻辑302、304可实施为每一位位置的XOR门,其接收输入位以及控制信号。在实例中,控制信号响应于来自和逻辑214(及多路复用器216、218)的结果的符号为负而断言。所述位位置的XOR门响应于控制信号为‘0’(例如,未对正结果执行1求补)而使输入位通过到达XOR输出。所述位位置的XOR门响应于控制信号为‘1’(例如,对负结果执行1求补)而将输入位的1补码(例如反相)提供到XOR输出。
然而,由于由AOI21门220及OAI21门230引入的延迟及1求补逻辑302在进位选择电路(例如第一多路复用器216及第二多路复用器218)之后,低位的和逻辑214及1求补逻辑304等待进位选择电路及1求补逻辑302完成。因此,尾数加法器112延迟也增加。
图4是根据各种实例的具有减少1求补延迟的图2的尾数加法器112的示意性框图。在图4的实例中,移位C操作数的高位(例如未由加法单元202计算的位)的1求补运算在由第一多路复用器216及第二多路复用器218实施的进位选择电路之前执行。此使移位C操作数的高位的1求补运算能够在其中图2及3的实例等待分别从AOI21门220及OAI21门230提供的进位选择位IncrA_sel及IncrB_sel的时段期间执行。
在图4中,来自分组PG逻辑212的进位输出位(例如Ci[127]及对于SP FMA运算,Ci[63])用于选择正确1补码值。相比之下,在图2及3的实例中,来自分组PG逻辑212的进位输出位用于选择1补码随后自其确定的递增或非递增值。
在图4中,加法的低位(例如加法单元202的和逻辑214的结果)经1求补,同时进位选择电路由第一多路复用器216及第二多路复用器218实施。为促进低位的1补码,最终加法结果的符号在其原本从进位选择逻辑(例如,进位选择逻辑是AOI21门220及OAI21门230的输出)取得之前确定。在一些实例中,最终加法结果的符号与和逻辑214并行确定。
为促进尾数加法器112的上述延迟减少及性能提高,提供各种预计算逻辑电路。预计算逻辑电路用于确定尾数加法器112的结果的高位及低位是否应由1求补电路反相或通过。
在以下实例中,IncrA_in表示递增器A206的输入(例如非递增值)且IncrA_out表示递增器A206的输出(例如递增值)。IncrB_in表示递增器B 208的输入(例如非递增值)且IncrB_out表示递增器B 208的输出(例如递增值)。
第一预计算电路402(例如预计算A 402)经配置以提供信号来控制IncrA_out及IncrA_in是否分别由1求补逻辑404、406反相或通过。在此实例中,由预计算A 402针对IncrA_out(例如递增值)提供到1求补逻辑404的控制信号是Sign_IncrA_out,且由预计算A402针对IncrA_in(例如非递增值)提供到1求补逻辑406的控制信号是Sign_IncrA_in。
如上文描述,1求补逻辑404、406可实施为包含每一位位置的XOR门的硬件电路,其接收输入位以及控制信号。所述位位置的XOR门响应于控制信号为‘0’而使输入位通过到达XOR门输出。所述位位置的XOR门响应于控制信号为‘1’而将输入位的1补码(例如反相)提供到XOR输出。
无论是执行SP还是DP FMA运算,IncrA_in及IncrA_out的符号位位于所述相应值的MSB处。因为负数(例如具有‘1’的符号位)反相,而正数(例如具有‘0’的符号位)通过,所以预计算A402经配置以响应于所述MSB值而提供Sign_IncrA_out及Sign_IncrA_in:
Sign_IncrA_out=IncrA_out[MSB]
Sign_IncrA_in=IncrA_in[MSB]
一个式(例如提供控制信号)用于递增及非递增值中的每一者以有条件地对所述值进行1求补,因为任一值可由第一多路复用器216选择作为最终和输出的部分。
第二预计算电路412(例如预计算B 412)经配置以提供信号来控制IncrB_out及IncrB_in是否分别由1求补逻辑414、416反相或通过。在此实例中,由预计算B 412针对IncrB_out(例如递增值)提供到1求补逻辑414的控制信号是Sign_IncrB_out,且由预计算B412针对IncrB_in(例如非递增值)提供到1求补逻辑416的控制信号是Sign_IncrB_in。
如上文描述,1求补逻辑414、416可实施为包含每一位位置的XOR门的硬件电路,其接收输入位以及控制信号。所述位位置的XOR门响应于控制信号为‘0’而使输入位通过到达XOR输出。所述位位置的XOR门响应于控制信号为‘1’而将输入位的1补码(例如反相)提供到XOR输出。
对于DP FMA运算,IncrB_in及IncrB_out的符号位分别位于IncrA_in及IncrA_out的MSB处。对于SP FMA运算,确定IncrB_out(例如递增值)及IncrB_in(例如非递增值)是否应反相的符号分别是IncrB_out及IncrB_in的MSB,类似于预计算A 402逻辑。以下是控制信号Sign_IncrB_in及Sign_IncrB_out的非简化式:
Sign_IncrB_in=(DP&&IncrA_in[MSB])||(~DP&&IncrB_in[MSB])
Sign_IncrB_out=(DP&&((IncrB_out[carry]&&IncrA_out[MSB])||(~IncrB_out[carry]&&IncrA_in[MSB])))||(~DP&&IncrB_out[MSB])
如上,一个式(例如提供控制信号)用于递增及非递增值中的每一者以有条件地对所述值进行1求补,因为任一值可由第二多路复用器218选择作为最终和输出的部分。
Sign_IncrB_in式将响应于执行DP FMA运算及IncrA_in的MSB为“1”(指示负数)而断言以对非递增值(IncrB_in)进行1求补。Sign_IncrB_in式也将响应于执行SP FMA运算及IncrB_in的MSB为‘1’(指示负数)而断言以对IncrB_in进行1求补。
对于DP FMA运算,移位C操作数的高位的符号由23位递增或非递增结果(例如分别为递增器A206的输出或输入)的MSB指示。例如,如果第二多路复用器218选择非递增值或递增器B 208的输入,那么第一多路复用器216也选择非递增值或递增器A206的输入。为了使第二多路复用器218选择非递增值或递增器B 208的输入,可没有来自由加法单元202执行的低位的加法的进位输出(例如Ci[127]=0)。因为递增器B 208输入位不递增,所以没有进位输出传播到递增器A 206。因此,符号由IncrA_in[MSB]指示。
类似逻辑适用于SP FMA运算。例如,为了使第二多路复用器218选择非递增值或递增器B 208的输入,可没有来自由加法单元202执行的低位的加法的进位输出(例如Ci[127]=0)。因此,符号由IncrB_in[MSB]指示。
Sign_IncrB_out式还利用以下事实:响应于来自由加法单元202执行的低位的加法的进位输出为高或断言(例如Ci[127]=1),第二多路复用器218选择递增值或递增器B208的输出。
Sign_IncrB_out式可描述为:如果执行DP FMA运算且IncrB_out向递增器A 206传播进位输出(例如,IncrB_out[carry]被断言),那么Sign_IncrB_out是递增器A 206的输出的MSB(例如递增值)。另外,如果执行DP FMA运算但进位输出没有传播(例如,IncrB_out[carry]未断言)到递增器A206,那么Sign_IncrB_out是递增器A 206的输入的MSB(例如非递增值)。最后,如果执行SP FMA运算,那么Sign_IncrB_out将响应于IncrB_out的MSB为‘1’(指示负数)而断言以对递增值(IncrB_out)进行1求补。
在一些实例中,减少或最小化预计算逻辑的式以在进位选择信号(例如AOI21门220及OAI21门230的输出)可用于分别从第一多路复用器216及第二多路复用器218选择之前提供足够时间来对结果进行1求补是有用的。预计算A 402相对简单且因此能够响应于递增器A206提供输出而完成。预计算B 412的第一式Sign_IncrB_in可实施为2:1多路复用器,其中DP信号作为控制信号提供到2:1多路复用器,其也足够快(例如,可在OAI21门230将其输出提供到第二多路复用器218之前评估)。然而,预计算B 412的第二式Sign_IncrB_out可进一步减少。
在实例中,溢出是不可能的。因此,当断言IncrA_out[MSB]时,也断言IncrA_in[MSB],因为递增值总是大于非递增值。如果较大值为负,那么较小值也为负,且因此只检查IncrA_out[MSB]。此外,对于其中非递增值为负且递增值为正(例如,-1递增到0)的情况,评估IncrA_in[MSB]。因此,Sign_IncrB_out式可改写为:
Sign_IncrB_out=(DP&&(IncrA_out[MSB]||(~IncrB_out[carry]&&IncrA_in[MSB])))||(~DP&&IncrB_out[MSB])
上式中的DP项可分配到内项以导致:
Sign_IncrB_out=(DP&&IncrA_out[MSB])||(DP&&~IncrB_out[carry]&&IncrA_in[MSB])||(~DP&&IncrB_out[MSB])
项(DP&&~IncrB_out[carry]&&IncrA_in[MSB])及(~DP&&IncrB_out[MSB])在IncrA_out[MSB]可用之前可各自评估。因此,为简单起见,这些项可用‘A’及‘B’替代:
Sign_IncrB_out=(DP&&IncrA_out[MSB])||A||B
德摩根定理可应用于上式以导致:
Sign_IncrB_out=~((~DP||~IncrA_out[MSB])&&~A&&~B)
此最终式可使用OAI211复合逻辑门确定。
如上文描述,一旦确定所有符号信号(例如Sign_IncrA_in、Sign_IncrA_out、Sign_IncrB_in、Sign_IncrB_out),则1求补逻辑404、406、414、416使用XOR门使相应输入位反相或通过。
用于和(例如和逻辑214的输出)的低位的1求补逻辑304仍在尾数加法器112的最终逻辑级执行,类似于图3。因此,额外时间可用于计算确定1求补逻辑304是使其相应输入位反相还是通过的符号信号(例如Sign_upper及Sign_lower)。在此实例中,第三预计算电路422(例如预计算C 422)及第四预计算电路432(例如预计算D 432)经配置以提供信号来控制和逻辑214输出的高位(例如位64到126)及/或低位(例如位0到62)是由1求补逻辑304反相还是通过。在此实例中,由预计算D 432针对和逻辑214输出的高位提供到1求补逻辑304的控制信号是Sign_upper,且由预计算D 432针对和逻辑214输出的低位提供到1求补逻辑304的控制信号是Sign_lower。
Sign_upper及Sign_lower可用于处置上述DP及SP FMA运算两者,因为Sign_upper对应于加法单元202输出的上半部且Sign_lower对应于加法单元202输出的下半部,其是不同SP值。不管是执行DP还是SP FMA运算,Sign_upper及Sign_lower取决于由分组PG逻辑212产生的进位输出位。因此,预计算C 422及预计算D 432经分叉以能够满足下述某些时序约束。
例如,Sign_upper响应于以下条件为真而断言以对和逻辑214输出的高位进行1求补:如果断言来自加法单元202的高位部分的进位输入位(例如,更一般来说,Ci[127]或Ci[upper]),那么对于SP FMA运算,高位SP结果的递增输出的符号(例如IncrA_out[MSB])提供Sign_upper的值。如果断言Ci[upper],那么对于DP FMA运算,确定进位输入(例如Ci[upper])是否传播(例如IncrB_out[carry]断言)到递增器A 206。如果确定断言IncrB_out[carry],那么高位DP结果的递增输出的符号(例如IncrA_out[MSB])提供Sign_upper的值。如果确定未断言IncrB_out[carry],那么高位DP结果的非递增输出的符号(例如IncrA_in[MSB])提供Sign_upper的值。最后,如果未断言Ci[upper],那么高位SP结果或高位DP结果的非递增输出的符号(例如IncrA_in[MSB])提供Sign_upper的值。因此,Sign_upper可表示为:
Sign_upper=Ci[upper]&&((~DP&&IncrA_out[MSB])||(DP&&((IncrB_out[carry]&&IncrA_out[MSB])||(~IncrB_out[carry]&&IncrA_in[MSB]))))||(~Ci[upper]&&IncrA_in[MSB])
分组PG逻辑212直到和逻辑214级开始才可提供高位部分进位输入位(例如,更一般来说,Ci[127]或Ci[upper])。如上文描述,和逻辑214是一个深度或延迟XOR门。在一些实例中,Sign_upper信号应与和逻辑214级并行产生以在大致相同于和逻辑214的结果或输出的时间可用于1求补逻辑304。因此,Sign_upper的式减少为大致等于(或快于)XOR门的逻辑。
Sign_upper的式可使用上述相同溢出改进来改写:
Sign_upper=Ci[upper]&&((~DP&&IncrA_out[MSB])||(DP&&(IncrA_out[MSB]||(~IncrB_out[carry]&&IncrA_in[MSB]))))||(~Ci[upper]&&IncrA_in[MSB])
如果断言IncrA_out[MSB],那么当断言Ci[upper]时,SP及DP FMA运算两者的式变为真。因此,可移除IncrA_out[MSB]对~DP及DP信号的依赖:
Sign_upper=Ci[upper]&&(IncrA_out[MSB]||(DP&&(~IncrB_out[carry]&&IncrA_in[MSB])))||(~Ci[upper]&&IncrA_in[MSB])
此外,如果在断言Ci[upper]时检查的条件(例如(IncrA_out[MSB]||(DP&&(~IncrB_out[carry]&&IncrA_in[MSB]))))也为真,那么在未断言Ci[upper]时检查的条件(例如IncrA_in[MSB])为真。因此,可移除断言Ci[upper]项,因为其无法在未断言Ci[upper]时错误地发信号通知真:
Sign_upper=(IncrA_out[MSB]||(DP&&(~IncrB_out[carry]&&IncrA_in[MSB])))||(~Ci[upper]&&IncrA_in[MSB])
最后,项(IncrA_out[MSB]||(DP&&(~IncrB_out[carry]&&IncrA_in[MSB])))不取决于Ci[upper]且因此可在Ci[upper]可用之前各自评估。因此,为简单起见,这些项可用‘C’替代:
Sign_upper=C||(~Ci[upper]&&IncrA_in[MSB])
替代项‘C’可在Ci[upper]可从分组PG逻辑212取得之前由预计算C 422执行。接着,响应于Ci[upper]可从分组PG逻辑212取得,预计算D 432可使用由预计算C 422提供的结果C及来自分组PG逻辑212的Ci[upper]来提供最终Sign_upper。在实例中,预计算D 432经配置以与和逻辑214并行地使用AOI21或OAI21门(例如,通过应用德摩根定理)来提供Sign_upper。在一些实例中,AOI21及/或OAI21门比XOR门更快,且因此预计算D 432能够满足时序约束以允许1求补逻辑304在和逻辑214输出的高位变得可用时对所述高位执行1求补(例如反相或通过)。
继续上述实例,预计算C 422及预计算D 432还应满足相同时序约束以针对和逻辑214输出的低位将Sign_lower提供到1求补逻辑304。
Sign_lower响应于以下条件为真而断言以对和逻辑214输出的低位进行1求补:对于DP FMA运算,如果断言来自加法单元202的高位部分的进位输入位(例如,更一般来说,Ci[127]或Ci[upper]),那么相同确定执行如上。例如,如果进位输入(例如Ci[upper])传播到递增器A 206(由断言IncrB_out[carry]指示),那么高位DP结果的递增输出的符号(例如IncrA_out[MSB])提供Sign_lower的值。否则,如果未断言IncrB_out[carry],那么高位DP结果的非递增输出的符号(例如IncrA_in[MSB])提供Sign_lower的值。此外,对于DP FMA运算,如果未断言Ci[upper],那么用于高位DP结果的非递增输出的符号(例如IncrA_in[MSB])提供Sign_lower的值。
对于SP FMA运算,如果断言来自加法单元202的低位部分的进位输入位(例如,更一般来说,Ci[63]或Ci[lower]),那么低位SP结果的递增输出的符号(例如IncrB_out[MSB])提供Sign_lower的值。否则,对于SP FMA运算,如果未断言Ci[lower],那么低位SP结果的非递增输出的符号(例如IncrB_in[MSB])提供Sign_lower的值。因此,Sign_lower可表示为:
Sign_lower=(Ci[upper]&&DP&&((IncrB_out[carry]&&IncrA_out[MSB])||(~IncrB_out[carry]&&IncrA_in[MSB])))||(~Ci[upper]&&DP&&IncrA_in[MSB])||(Ci[lower]&&~DP&&IncrB_out[MSB])||(~Ci[lower]&&~DP&&IncrB_in[MSB])
Sign_lower的式可使用上述相同溢出改进来改写,其中如果断言IncrA_out[MSB],那么也断言IncrA_in[MSB]:
Sign_lower=(Ci[upper]&&DP&&(IncrA_out[MSB]||(~IncrB_out[carry]&&IncrA_in[MSB])))||(~Ci[upper]&&DP&&IncrA_in[MSB])||(Ci[lower]&&~DP&&IncrB_out[MSB])||(~Ci[lower]&&~DP&&IncrB_in[MSB])
类似于上文,如果在断言Ci[upper]且其为DP FMA运算时检查的条件(例如(IncrA_out[MSB]||(~IncrB_out[carry]&&IncrA_in[MSB])))也为真,那么在未断言Ci[upper]时检查的条件(例如IncrA_in[MSB])为真。因此,可移除Ci[upper]项,因为其无法在未断言Ci[upper]时错误地发信号通知真:
Sign_lower=(DP&&(IncrA_out[MSB]||(~IncrB_out[carry]&&IncrA_in[MSB])))||(~Ci[upper]&&DP&&IncrA_in[MSB])||(Ci[lower]&&~DP&&IncrB_out[MSB])||(~Ci[lower]&&~DP&&IncrB_in[MSB])
接着,如果在断言Ci[lower]且其为SP FMA运算时检查的条件(例如IncrB_out[MSB])也为真,那么在未断言Ci[lower]时检查的条件(例如IncrB_in[MSB])为真。因此,可移除断言Ci[lower]项,因为其无法在未断言Ci[lower]时错误地发信号通知真:
Sign_lower=(DP&&(IncrA_out[MSB]||(~IncrB_out[carry]&&IncrA_in[MSB])))||(~Ci[upper]&&DP&&IncrA_in[MSB])||(~DP&&IncrB_out[MSB])||(~Ci[lower]&&~DP&&IncrB_in[MSB])
同样类似于上文,各种项不取决于Ci[upper]或Ci[lower]且因此可在Ci[upper]或Ci[lower]可用之前评估。例如,‘A’替代项(DP&&(IncrA_out[MSB]||(~IncrB_out[carry]&&IncrA_in[MSB]))),‘B’替代项(DP&&IncrA_in[MSB]),‘C’替代项(~DP&&IncrB_out[MSB]),且‘D’替代项(~DP&&IncrB_in[MSB]):
Sign_lower=A||(~Ci[upper]&&B)||C||(~Ci[lower]&&D)
A及C替代经合并且用‘E’替换:
Sign_lower=E||(~Ci[upper]&&B)||(~Ci[lower]&&D)
最后,E替代与(~Ci[lower]&&D)合并且用‘F’替换。此最终替换是可能的,因为~Ci[lower]可用,Ci[upper]之前的一个分组PG逻辑212级。分组PG逻辑212使用OAI21及AOI21门,且因此F可用具有大致相等于Ci[upper]的延迟的OAI21门产生:
Sign_lower=F||(~Ci[upper]&&B)
替代项‘F’可在Ci[upper]可从分组PG逻辑212取得之前由预计算C 422执行。接着,响应于Ci[upper]可从分组PG逻辑212取得,预计算D 432可使用由预计算C 422提供的结果F及来自分组PG逻辑212的Ci[upper]来提供最终Sign_lower。在实例中,预计算D 432经配置以与和逻辑214并行地使用AOI21或OAI21门(例如,通过应用德摩根定理)来提供Sign_lower。在一些实例中,AOI21及/或OAI21门比XOR门更快,且因此预计算D 432能够满足时序约束以允许1求补逻辑304在和逻辑214输出的低位变得可用时对所述低位执行1求补(例如反相或通过)。
通过提供上述预计算电路402、412、422、432,尾数加法器112能够提供最终结果,包含适当执行1求补,相对于其中在计算全和结果之后执行1求补的尾数加法器112具有减少延迟。此外,上述预计算电路402、412、422、432促进SP FMA运算(例如,其中尾数加法器112基于来自加法单元202及递增器B 208输入/输出的低位提供一个SP结果(SP0_out)及基于来自加法单元202及递增器A 206输入/输出的高位提供另一SP结果(SP1_out))及DP FMA运算(例如,其中尾数加法器112提供来自加法单元202及组合递增器A206及递增器B 208输入/输出位的DP_out结果)两者的此减少延迟。例如,对于SP FMA运算,来自1求补逻辑304的低位与第二多路复用器218的输出(例如递增器B 208输入/输出,任选地经1求补)级联以提供SP0_out最终和,而来自1求补逻辑304的高位与第一多路复用器216的输出(例如递增器A206输入/输出,任选地经1求补)级联以提供SP1_out最终和。对于DP FMA运算,来自1求补逻辑304的位与第一及第二多路复用器216、218的输出(例如组合递增器A 206及递增器B 208输入/输出,任选地经1求补)级联以提供DP_out最终和。
图5是根据本描述的实例的用于执行具有减少1求补延迟的DP FMA运算的尾数加法的方法500的流程图。方法500也可经修改用于双SP FMA运算,如下文关于各个框描述。方法500开始于框502:由加法器接收对应于加法器的输入位的第一部分的进位-和格式值,进位-和格式值包含进位值及和值。方法500还包含在框504接收对应于加法器的输入位的不与位的第一部分重叠的第二部分的第二值。例如,尾数加法器接收进位-和格式的压缩输出(例如P_S及P_C),其反映A*B的进位-和格式乘积及与A*B结果重叠或对准的C操作数的部分。尾数加法器112还接收非重叠移位C操作数位(例如,为简单起见,标记为C)且提供作为移位C操作数与进位-和格式的压缩输出的和的输出。
方法500继续框506:提供进位值与和值的中间和,其中提供中间和产生进位输出位。例如,加法单元202提供从压缩器110接收的P_S与P_C的中间和。在双SP FMA运算实例中,框506经修改以包含提供进位值及和值的较高有效部分(例如分组PG逻辑212及和逻辑214的高位部分)的第一中间和,其产生进位输出高位(例如Ci[127])。框506还经修改以包含提供进位值及和值的较低有效部分(例如分组PG逻辑212及和逻辑214的低位部分)的第二中间和,其产生进位输出低位(例如Ci[63])。
方法500继续框508:使第二值递增以产生递增结果,其中所接收第二值是非递增结果。例如,递增器206、208经配置以提供其输入位(例如移位C操作数的非重叠高位)的递增和。在双SP FMA运算实例中,框508经修改以包含使第二值的较高有效部分递增以产生第一递增结果,其中所接收第二值的较高有效部分是第一非递增结果。框508还经修改以包含使第二值的较低有效部分递增以产生第二递增结果,其中所接收第二值的较低有效部分是第二非递增结果。
方法500继续框510:确定递增结果的符号(例如Sign_IncrA_out及/或Sign_IncrB_out)及非递增结果的符号(例如Sign_IncrA_in及/或Sign_IncrB_in)。在一些情况中,递增结果的符号及非递增结果的符号在框506中提供中间和之前确定。在双SP FMA运算实例中,框510经修改以包含确定第一递增结果的符号、第一非递增结果的符号、第二递增结果的符号及第二非递增结果的符号。
方法500继续框512:响应于递增结果的符号,对递增结果求补或使递增结果通过以提供第一输出(例如1求补逻辑404、414)。在一些情况中,框512在框506中提供中间和之前执行。
方法500继续框514:响应于非递增结果的符号,对非递增结果求补或使非递增结果通过以提供第二输出(例如1求补逻辑406、416)。在一些情况中,框514在框506中提供中间和之前执行。在双SP FMA运算实例中,框512及514经修改以包含以下中的每一者:响应于第一递增结果的符号,对第一递增结果求补或使第一递增结果通过以提供第一输出(例如1求补逻辑404);响应于第一非递增结果的符号,对第一非递增结果求补或使第一非递增结果通过以提供第二输出(例如1求补逻辑406);响应于第二递增结果的符号,对第二递增结果求补或使第二递增结果通过以提供第三输出(例如1补码414);及响应于第二非递增结果的符号,对第二非递增结果求补或使第二非递增结果通过以提供第四输出(例如1求补逻辑416)。
方法500继续框516:响应于进位输出位、递增结果的符号及非递增结果的符号,对中间和求补或使中间和通过以提供第三输出(例如1求补逻辑304)。在双SP FMA运算实例中,框516经修改以包含:响应于进位输出高位、第一递增结果的符号及第一非递增结果的符号,对第一中间和求补或使第一中间和通过以提供第五输出(例如1求补逻辑304(高位));及响应于进位输出低位、第二递增结果的符号及第二非递增结果的符号,对第二中间和求补或使第二中间和通过以提供第六输出(例如1求补逻辑304(低位))。
方法500继续框518:响应于进位输出位而选择第一及第二输出中的一者(例如多路复用器216及/或多路复用器218)。在双SP FMA运算实例中,框518经修改以包含:响应于进位输出高位(例如多路复用器216)而选择第一及第二输出中的一者(例如来自1求补逻辑404、406);及响应于进位输出低位(例如多路复用器218)而选择第三及第四输出中的一者(例如来自1求补逻辑414、416)。
方法500继续框520:提供包括第三输出及第一及第二输出中的选定者的最终和。例如,尾数加法器112的最终和通过使多路复用器216及/或多路复用器218的输出与来自1求补逻辑304的输出级联来提供,如上文描述。
如上文描述,提高FMA运算的效率及/或性能是有用的。因此,本描述的其它实例包含FMA单元100且更特定来说,归一化器116及/或舍入单元120的此类改进。如同上述实例,为了便于解释及/或展示各种电路功能性,某些以下实例有时涉及具有特定位数的各种值。然而,除非明确说明,否则本描述的范围不限于具有此类特定位数的值。此外,在以下实例中,参考逻辑门的某些布置及/或逻辑功能的实施。然而,除非明确说明,否则此类逻辑功能在其它实例中可不同实施(例如使用不同逻辑门及/或逻辑门组合)且本描述的范围不限于逻辑门的特定布置。
如上文描述,尾数加法器112经配置以产生1补码输出(例如和)以促进后续2求补运算,使得FMA运算的结果呈2补码格式。因为浮点格式包含与尾数分离的符号位,所以尾数表示为正数,即使产生所述尾数的结果为负(例如,符号位表示结果的负面,而尾数v表示为正数)。因此,FMA运算的负结果的尾数经2求补以产生具有正值的尾数,且结果的负性反映在FMA运算的浮点结果的符号位中。
在一些情况中,如果尾数加法器112的结果需要经2求补(例如,1求补由尾数加法器112执行),那么尾数加法器112的结果递增,接着由归一化器116归一化,且接着由舍入单元120舍入。然而,在这些情况中,2补码递增在关键路径上执行且因此增加由FMA单元100执行的FMA运算的延迟。
因此,本描述的实例合并2求补运算(例如递增)与由舍入单元120实施的舍入逻辑。因为2求补及舍入运算两者通过+1来修改(如果有的话)结果(例如舍入单元120的输入),所以附加到粘贴逻辑以计算粘贴位的逻辑经提供以确定是否将1加到结果。这些及其它实例将在下文进一步描述。
如上文描述,如果在尾数加法器112中获得负结果,那么执行2求补。例如,负结果引起尾数加法器112执行所描述的1求补,使得尾数值为正,而符号反映在浮点值的符号位中。因此,为了完成2求补,来自尾数加法器112的结果递增。本描述的实例利用舍入单元120中的舍入逻辑来响应于执行2求补而选择舍入(例如递增)结果。舍入单元120中的舍入逻辑经配置以对归一化尾数值进行运算(例如舍入),归一化尾数值在一些实例中可为24位(SP)或53位(DP)值(例如1个隐含位及23或52个尾数位)。然而,对来自尾数加法器112的全宽76位(SP)或163位(DP)值完成2求补。
作为舍入单元120的功能的额外上下文,图6A到6C是根据各种实例的由归一化器116在FMA运算中实施的实例归一化左移的示意图。归一化器116经配置以接收来自尾数加法器112的结果且执行来自尾数加法器112的结果左移(例如归一化)为24位值(SP)或53位值(DP)。左移量响应于来自尾数加法器112的结果中“前导位”的位置或具有值1的最高有效位位置而确定。归一化器116有效地丢弃大于前导位的位,其具有值0。归一化器116还经配置以提供24或53位值之后的下一较低有效位,且此位称为舍入位。归一化器116还有效丢弃低于舍入位的LSB,因为这些比尾数表示所限定的大小更低有效。如下文进一步描述,舍入位可用于确定在各种舍入模式中是上舍入还是下舍入。
图6A展示归一化DP_out浮点值的实例。如上文描述,对于DP FMA运算,尾数加法器112的输出包括来自加法单元202的Sum[126:0]及来自递增器电路204的选定23位及12位输出。在图6A中,前导位位于Sum[126:0]部分中,且归一化器116经配置以使包含前导位的53个位+作为舍入位的下一较低有效位(例如第54位)左移,使得前导位与尾数加法器112输出的MSB对准。在其中存在60个0大于前导位的实例中,归一化器116经配置以使54个位(例如53位未舍入尾数+舍入位)左移60。归一化器116经配置以提供移位54个位作为其输出。
图6B展示归一化SP1_out浮点值的实例。如上文描述,对于SP FMA运算,尾数加法器112的SP1_out包括来自加法单元202的Sum[126:64]及来自递增器电路204的选定23位输出。在图6B中,前导位位于Sum[126:64]部分中,且归一化器116经配置以使包含前导位的24个位+作为舍入位的下一较低有效位(例如第25位)左移,使得前导位与尾数加法器112输出的SP1_out部分的MSB对准。在其中存在40个0大于前导位的实例中,归一化器116经配置以使25个位(例如24位未舍入尾数+舍入位)左移40。归一化器116经配置以提供移位25个位作为其输出。
图6C展示归一化SP0_out浮点值的实例。如上文描述,对于SP FMA运算,尾数加法器112的SP0_out包括来自加法单元202的Sum[62:0]及来自递增器电路204的选定12位输出。在图6C中,前导位是选定12位输出的MSB,且因此无需移位(例如,24位未舍入尾数无法进一步左移)。在此实例中,归一化器116经配置以使SP0_out的24个最高有效位通过作为其输出,包含前导位+作为舍入位的下一较低有效位(例如第25位)。
归一化器116还经配置以产生粘贴位,其是比舍入位更低有效的LSB的OR归约。粘贴位提供追踪是否存在任何断言(例如具有值1)位比舍入位更低有效的能力。例如,如果舍入位表示值0.5,那么断言粘贴位指示大于0.5的结果。
在一些实例中,归一化器116的24或53位结果或输出不是准确值。在这些实例中,准确结果无法适应输出宽度,且因此不准确结果根据舍入模式舍入。在一些实例中,舍入模式是用户可选择的,且舍入单元120因此经配置以实施多种舍入模式中的一者(例如目前由用户选择的舍入模式)。
因为浮点值以符号及幅度形式表示,所以下舍入类似于完全未执行舍入。例如,下舍入导致丢弃舍入位且忽略含于粘贴位中的信息。舍入结果实际上经下舍入,因为其幅度小于(或等于)未舍入结果的准确值。另一方面,上舍入通过使24或53位未舍入结果递增来执行,因为此相对于未舍入结果增大舍入结果的幅度。上舍入负值变得更负,而上舍入正值变得更正。
在一些实例中,舍入单元120支持四种符合IEEE的舍入模式。第一舍入模式是就近舍入,绑定到偶数(RNE)。RNE舍入到最近值,而当断言舍入位且未断言粘贴位时,发生绑定。在绑定情境中,未舍入结果恰好在可表示值之间(例如,舍入位是1,但所有较低有效位是0)。在绑定情境中,24或53位未舍入结果的LSB控制舍入行为。响应于未舍入结果是奇数(例如,LSB等于1),结果上舍入到下一偶数值。响应于未舍入结果是偶数(例如,LSB等于0),结果“下舍入”(例如,保持在已为偶数的值)。
第二舍入模式是舍入到零(RD)。RD总是幅度下舍入。在此舍入模式中,丢弃或否则忽略舍入及粘贴位。
第三舍入模式是向正无穷大舍入(RPI)。RPI响应于未舍入结果为正且不准确(例如舍入及/或粘贴位1)而上舍入。RPI响应于未舍入结果为负而不舍入,因为不舍入减小(或维持)舍入结果相对于未舍入结果的幅度,且如果符号为负,那么减小舍入结果的幅度是向正无穷大舍入。
第四舍入模式是向负无穷大舍入(RNI)。RNI响应于未舍入结果为负且不准确(例如舍入及/或粘贴位1)而上舍入。RNI响应于未舍入结果为正而不舍入,因为不舍入减小(或保持)舍入结果相对于未舍入结果的幅度,且如果符号为正,那么减小舍入结果的幅度是向负无穷大舍入。
在一些实例中,舍入单元120支持FMA运算的额外IEEE舍入模式,其称为就近舍入,绑定到最大幅度(RMM)。RMM类似于RNE,只是RMM的绑定情境总是导致上舍入到下一最高幅度值。
图7是根据各种实例的合并2求补及舍入电路(例如舍入单元120)的示意性框图。图7继续图6B的归一化实例,且因此涉及对24位未舍入SP结果进行运算。然而,舍入单元120也包含类似于对53位未舍入DP结果进行运算的功能性。
如描述,舍入单元120经配置以从归一化器116接收未舍入、归一化结果。在图7的SP实例中,舍入单元120因此接收25个位(例如24位未舍入尾数+舍入位)。舍入单元120包含24位递增器702,其从归一化器116接收24位未舍入结果且提供24位递增结果作为其输出。存在其中递增传播通过所有尾数位及隐含位以产生进位输出的边角案例,其将使所得浮点值的指数递增。为简单起见,进位输出未展示于图7中。舍入单元120还包含舍入选择逻辑704,其确定舍入单元120是提供递增(例如上舍入)还是非递增(例如下舍入)结果作为其输出。例如,舍入选择逻辑704经配置以提供舍入输出(round_up),其响应于确定递增器702的递增输出将作为舍入单元120输出提供而断言及响应于确定非递增输出(例如递增器702的输入)将作为舍入单元120输出提供而取消断言。
为实施此选择,舍入单元120包含多路复用器706。多路复用器706具有经配置以接收递增器702的输入(例如来自归一化器116的非递增、未舍入尾数结果)的第一输入。多路复用器706还具有经配置以从递增器702接收输出位的第二输入。多路复用器706经配置以接收舍入输出(round_up)作为控制信号。多路复用器706经配置以响应于round_up为0而提供来自归一化器116的非递增、未舍入尾数结果及响应于round_up为1而提供来自递增器702的递增、舍入尾数结果。
在其中2求补完成不与由舍入单元120实施的舍入合并的实例中,舍入选择逻辑704根据下式实施上述五种舍入模式RNE、RD、RPI、RNI、RMM中的一者:
1.RNE:round_up=round&&(sticky||LSB)
2.RD:round_up=0
3.RPI:round_up=~sign&&(round||sticky)
4.RNI:round_up=sign&&(round||sticky)
5.RMM:round_up=round
在上式中,round是舍入位(例如低于来自归一化器116的未舍入结果的LSB的位),sticky是粘贴位,LSB是来自归一化器116的未舍入尾数结果的LSB,且sign是所得浮点符号位。
如上文描述,粘贴位是小于来自归一化器116的舍入位的LSB的OR归约。图8是根据各种实例的经配置以在FMA运算中提供粘贴位的粘贴逻辑800的示意性电路图。粘贴逻辑800与归一化器116并行提供(例如作为归一化器116的部分)。
在图8的实例中,粘贴逻辑800用于一个移位级,用于4的归一化移位。在此实例中,粘贴逻辑800接收31位输入802(例如来自前一移位级)且将未移位值(例如input[30:4])提供到多路复用器804的第一输入及将左移值(例如input[26:0])提供到多路复用器804的第二输入。“移位”信号作为控制信号提供到多路复用器804,且移位响应于确定要执行此左移级而断言,如上文描述。
OR归约网络806经配置以接收输入802的LSB,其将在移位中丢失或响应于执行左移(例如移位为1)而移入到多路复用器804的所得输出中。在此实例中,OR归约网络806因此接收输入802位3到0且提供作为输入802位3到0的OR归约的输出。
反相器809经配置以接收移位信号作为其输入且提供反相移位信号作为其输出。AND门808接收OR归约网络806的输出作为第一输入且接收反相器809的输出作为第二输入。因此,响应于执行移位(例如,断言移位且取消断言反相器809的输出),OR归约网络806不修改粘贴位的值,因为输入802的所有LSB移入到多路复用器的所得输出中。然而,响应于未执行移位(例如,取消断言移位且断言反相器809的输出),OR归约网络806检查输入802位3到0中的任何者是否为1,且如果是,那么这些位通过OR门810包含到粘贴位计算中。例如,OR门810接收AND门808的输出作为第一输入且接收前一移位级粘贴计算(标记为prev_sticky)作为第二输入。OR门810的输出是当前级的粘贴计算(标记为new_sticky),且当当前级是最后移位级时,OR门810的输出是提供到舍入单元120的舍入选择逻辑704的粘贴位。
在一些情况中,2求补可通过使预归一化结果(例如尾数加法器112的输出)递增(如果需要)来完成。然而,如上文描述,此递增将在关键路径上且因此增加FMA单元100的延迟。因此,本文中描述的实例对后归一化结果完成2求补作为舍入单元120中舍入逻辑的部分。例如,如果预归一化递增已传播通过归约到粘贴位中的所有位及舍入位,那么可通过仅使后归一化值递增来对后归一化值完成2求补。此条件响应于在粘贴计算中归约的所有位经断言或为1且舍入位也经断言或为1而发生。图9是满足此条件的实例900。
因此,本描述的实例包含类似于OR归约806但对小于来自归一化器116的舍入位的LSB执行AND归约的额外逻辑。图10是根据各种实例的逻辑1000的示意性电路图,其经配置以在FMA运算中提供粘贴位(如上文描述)且还在FMA运算中提供all_ones位。逻辑1000与归一化器116并行提供(例如作为归一化器116的部分)。
逻辑1000包含上述粘贴逻辑800。例如,元件802、804、806、808、809及810在图10中以相同方式标记且如上文图8中所描述那样发挥功能。同样类似于图8,在图10的实例中,逻辑1000用于一个移位级,用于4的归一化移位。除提供当前级的粘贴计算(或当当前级是最后移位级时,提供到舍入选择逻辑704的粘贴位)之外,逻辑1000还提供当前级的all_ones位(或当当前级是最后移位级时,提供到舍入选择逻辑704的all_ones位)。
例如,OR归约网络806的输入再用作AND归约网络1006的输入。在此实例中,AND归约网络1006因此接收输入802位3到0且提供作为输入802位3到0的AND归约的输出。
OR门1008接收AND归约网络1006的输出作为第一输入且接收反相器809的输入作为第二输入。AND门1010接收OR门1008的输出作为第一输入且接收前一移位级all_ones计算(标记为prev_AND)。AND门1010的输出是当前级的all_ones计算(标记为new_AND),且当当前级是最后移位级时,AND门1010的输出是提供到舍入选择逻辑704的all_ones位。
在此实例中,响应于未执行移位(例如,取消断言移位且断言反相器809的输出),输入802位3到0经丢弃且因此用于粘贴计算中。输入802位3到0也由AND归约网络1006归约。因为取消断言移位,所以如果输入802位3到0中的任何者为0,那么OR门1008的输出也为0,其有效取消prev_AND信号且new_AND为0。如果所有输入802位3到0为1,那么OR门1008的输出也是1且因此new_AND将等于prev_AND。然而,响应于执行移位(例如,断言移位且取消断言反相器809的输出),粘贴计算不消耗任何位且AND归约网络1006通过与在此情况中断言的移位信号进行OR运算来有效取消。因此,响应于执行移位,new_AND将等于prev_AND。
再次参考图7,舍入选择逻辑704经配置以从归一化器116的输出(例如舍入单元120的输入)接收舍入位。舍入选择逻辑704还经配置以从归一化器116接收粘贴位及all_ones位,例如由逻辑1000提供。舍入选择逻辑704进一步经配置以接收尾数加法器112的结果是否为负且因此是否经1求补的指示。此指示标记为2s_comp,其响应于尾数加法器112的结果为负而断言及响应于尾数加法器112的结果为正而取消断言。
2s_comp信号仅指示来自完成2求补的递增可影响舍入单元120的舍入结果。因此,额外信号由舍入选择逻辑704用于确定使用多路复用器706选择递增还是非递增结果。在下式中,
Partial_2s_comp=2s_comp&&all_ones;及
Complete_2s_comp=round&&partial_2s_comp
在一些实例中,舍入选择逻辑704计算这些额外中间信号。在其它实例中,归一化器116向舍入选择逻辑704提供partial_2s_comp及complete_2s_comp而非2s_comp信号。
根据本描述的实例,除上述正常舍入之外,舍入选择逻辑704还经配置以在2补码递增(例如+1)将传播通过所有粘贴位及舍入位到来自归一化器116的未舍入结果的LSB中时选择递增结果。
在其中2求补完成与由舍入单元120实施的舍入合并的这些实例中,舍入选择逻辑704根据下式实施上述五种舍入模式RNE、RD、RPI、RNI、RMM中的一者:
1.RNE:round_up=
(round||partial_2s_comp)&&(LSB||(sticky&&~(partial_2s_comp&&~round)))
2.RD:round_up=complete_2s_comp
3.RPI:round_up=(~sign||complete_2s_comp)&&(round||sticky)
4.RNI:round_up=(sign||complete_2s_comp)&&(round||sticky)
5.RMM:round_up=round||partial_2s_comp
在上式中,round是舍入位(例如低于来自归一化器116的未舍入结果的LSB的位),sticky是粘贴位,LSB是来自归一化器116的未舍入结果的LSB,sign是所得浮点符号位,且partial_2s_comp及complete_2s_comp如上文表示。
在上式中,取决于特定舍入模式,由舍入单元120实施的舍入决策可受2补码递增影响,即使舍入位未经断言(例如,complete_2s_comp不为真)。因此,partial_2s_comp信号用于解决此情境。如描述,partial_2s_comp响应于2补码+1传播通过所有粘贴位但不一定传播通过舍入位而断言。例如,如果舍入位已为0,那么partial_2s_comp经断言指示所得舍入位将为1。尽管2补码+1不会传播到最终尾数结果,但2补码+1会修改舍入位。如上文描述,取决于舍入模式,舍入位从0到1可改变由舍入单元120实施的舍入决策。
RNE舍入模式提供第一实例。在更新式中,舍入位与partial_2s_comp进行OR运算,因为partial_2s_comp将在舍入位最初为0时断言舍入位。如果舍入位已为1,那么整个式应评估为真(例如产生1),因为2补码+1传播到最终结果中且因此应选择来自多路复用器706的递增值作为舍入结果。
RNE更新式的部分(sticky&&~(partial_2s_comp&&~round))是有用的,因为如果partial_2s_comp条件发生,那么2补码+1传播通过所有粘贴位。在此情形中,+1传播通过粘贴位将使粘贴位从1翻转为0。在其中舍入位为0且partial_2s_comp为真的情况中,舍入位经断言为1,但粘贴位经清除或取消断言为0。因此,舍入将仅响应于当前未舍入结果为奇数(例如LSB==1)而发生,因为准确值绑定于两个值之间。然而,在其中complete_2s_comp为真的情况中,应选择舍入(例如递增)值来完成2求补。式的额外(&&~round)部分解决此情形,因为RNE round_up式将响应于complete_2s_comp为真而总是评估为真。
对剩余舍入模式决策进行类似更新。例如,RD舍入模式在任何情形中不上舍入。然而,因为舍入单元120合并2求补完成与舍入,所以更新RD舍入模式式导致响应于断言complete_2s_comp而“上舍入”(例如完成2求补)。
作为另一实例,更新RPI及RNI舍入模式式响应于断言complete_2s_comp而断言,因为断言complete_2s_comp指示粘贴也经断言。
作为又一实例,更新RMM式类似于更新RNE式,因为partial_2s_comp可断言舍入位,其应导致上舍入。因此,更新RMM式也响应于断言partial_2s_comp而断言。因为当断言complete_2s_comp时partial_2s_complement总是经断言,所以更新RMM式也响应于断言complete_2s_comp而断言。
对于上述五种舍入模式,不存在其中上舍入及完成2补码+1传播两者发生的条件(例如,不存在其中来自归一化器116的未舍入尾数结果递增两次的情况)。例如,当2补码+1传播通过粘贴位及舍入位时,所有粘贴位及舍入位变成0。当舍入位及粘贴位两者为0时,没有一个原始舍入式评估为真。另外,complete_2s_comp为真有效取消断言舍入位及粘贴位;因此,结果变得准确,且准确结果上不发生舍入。
因此,舍入单元120且特定来说,舍入选择逻辑704使多种舍入模式能够与完成2补码+1运算合并。2补码+1(例如递增)移出关键路径,且因此舍入单元120减少FMA单元100的总延迟。此外,通过再用舍入单元120的递增器702来完成2求补,可相对于用单独递增器电路完成2补码的FMA运算实现面积节省。
图11是根据本描述的实例的用于合并舍入及2补码+1运算的方法1100的流程图。方法1100开始于框1102:接收未舍入尾数值及与未舍入尾数值相关联的舍入位。例如,舍入单元120经配置以从归一化器116接收未舍入、归一化结果。在SP实例中,舍入单元120因此从归一化器116接收25个位(例如24位未舍入尾数+舍入位)。在DP实例中,舍入单元120因此从归一化器116接收54个位(例如53位未舍入尾数+舍入位)。
方法1100继续框1104:接收指示未舍入尾数值是否由1求补运算导致的2补码信号(2s_comp)。例如,舍入选择逻辑704经配置以接收尾数加法器112的结果是否为负且因此是否经1求补的指示。此指示标记为2s_comp,其响应于尾数加法器112的结果为负而断言及响应于尾数加法器112的结果为正而取消断言。
方法1100进一步继续框1106:使未舍入尾数值递增以提供递增值,其中未舍入尾数值是非递增值。例如,舍入单元120包含从归一化器116接收未舍入尾数值的递增器702(例如用于处置SP尾数的24位递增器及/或用于处置DP尾数的53位递增器)。递增器702提供递增值作为其输出。
接着,方法1100继续框1108:响应于2补码信号而提供递增值或非递增值中的一者作为舍入尾数值。例如,舍入单元120包含舍入选择逻辑704,其确定舍入单元120是提供递增(例如上舍入)还是非递增(例如下舍入)结果作为其输出。例如,舍入选择逻辑704经配置以提供输出round_up,其响应于确定递增器702的递增输出将作为舍入单元120输出提供而断言及响应于确定非递增输出(例如递增器702的输入)将作为舍入单元120输出提供而取消断言。round_up信号作为控制信号提供到多路复用器706,多路复用器706经配置以响应于round_up为0而提供来自归一化器116的非递增、未舍入尾数结果及响应于round_up为1而提供来自递增器702的递增、舍入尾数结果。
如上文描述,2求补完成与由舍入单元120实施的舍入合并,且舍入选择逻辑704经配置以响应于2s_comp信号等而实施各种舍入模式。因此,方法1100使多种舍入模式能够与完成2补码+1运算合并。2补码+1(例如递增)移出关键路径,因此减少FMA单元100的总延迟。
除上述实例之外,在本描述的其它实例中,FMA单元100的移位计算器104及/或移位器106经配置以提供提高由FMA单元100执行的FMA运算的效率及/或性能的功能性。如同上述实例,为了便于解释及/或展示各种电路功能性,某些以下实例有时涉及具有特定位数的各种值。然而,除非明确说明,否则本描述的范围不限于具有此类特定位数的值。此外,在以下实例中,参考逻辑门的某些布置及/或逻辑功能的实施。然而,除非明确说明,否则此类逻辑功能在其它实例中可不同实施(例如使用不同逻辑门及/或逻辑门组合)且本描述的范围不限于逻辑门的特定布置。
如上文描述,特别对于浮点FMA运算,C加数与A*B乘法的乘积移位对准,使得C可与乘积A*B相加。在本文中描述的实例中,移位器106经配置以支持DP及双SP FMA运算两者。为简单起见,DP FMA运算包含使DP操作数或输入(例如具有1个隐含位及52个尾数位的DP_in)移位,而双SP FMA运算包含使高位及低位SP操作数或输入(例如,分别为各自具有1个隐含位及23个尾数位的SP1_in及SP0_in)移位。如上文描述,DP FMA运算使用163位尾数,而SPFMA运算使用76位尾数。因此,为了支持DP及双SP FMA运算两者(例如,对于单指令多数据(SIMD)架构),移位器106包含“高位”移位逻辑及“低位”移位逻辑。在一个实例中,低位移位逻辑经配置以提供76位输出且高位移位逻辑经配置以提供87位输出。在此实例中,低位移位逻辑及高位移位逻辑中的每一者提供至少为SP FMA运算的位数的输出位数。此外,所组合的低位移位逻辑及高位移位逻辑提供至少为DP FMA运算的位数的输出位数。
一般来说,对于双SP FMA运算,高位移位逻辑对高位SP操作数SP1_in执行移位,而低位移位逻辑对低位SP操作数SP0_in执行移位。对于DP FMA运算,高位移位逻辑及低位移位逻辑一起用于对DP_in操作数执行移位。为了便于可视化,在图12及13中,高位移位逻辑(例如高位移位电路)经实施为左列多路复用器且低位移位逻辑(例如低位移位电路)经实施为右列多路复用器。此外,移位器106包含中间列多路复用器以促进其中位从高位移位电路移位到低位移位电路的DP FMA运算情况。
然而,在一些情况中,在DP FMA运算中,高位移位电路与低位移位电路之间可响应于使位从高位移位电路通过中间列多路复用器移位到低位移位电路而存在额外移位延迟。例如,图12是经配置以实施DP及双SP算术右移两者的算术右移电路1200的示意图。电路1200包含左列多路复用器1202(也称为高位移位电路1202)、中间列多路复用器1204及右列多路复用器1206(也称为低位移位电路1206)。一般来说,左列多路复用器1202实施高位移位逻辑且右列多路复用器1206实施低位移位逻辑。中间列多路复用器1204使位能够从高位移位电路1202移位到低位移位电路1206,例如在DP FMA运算中。在SP FMA运算中,中间列多路复用器1204使符号位移位到低位移位电路1206。
在图12的实例中,高位移位电路1202包含多路复用器MH7到MH0,且低位移位电路1206包含多路复用器ML7到ML0。多路复用器MH7到MH0中的每一者分别提供相应输出H7到H0。多路复用器ML7到ML0中的每一者分别提供相应输出L7到L0。
由SH0到SH7表示的高位移位值提供到高位移位电路1202。在此实例中,移位值因此为8位向量,其中SH0及SL0分别表示高位及低位移位值的位0,且SH7及SL7分别表示高位及低位移位值的位7。移位值的位是提供到高位移位电路1202及低位移位电路1206中的对应多路复用器的控制信号。例如,SH7是MH7的控制信号,SL7是ML7的控制信号,等等。
在图12(及下述图13)中,Verilog型语法说明用于形成各种输入向量的级联。例如,由逗号分隔的{}内部的项级联成单个向量。电路1200经配置以接收输入imp1、man1、imp0、man0及DP_sel。imp1是单个位,其是高位单精度操作数(SP1_in)或双精度操作数DP_in的隐含位。imp0是单个位,其是低位单精度操作数(SP0_in)的隐含位。man1是52位向量,其是用填充于LSB部分中的29个符号位填充的DP_in尾数或23位SP1_in尾数。man0是23位向量,其是SP0_in尾数。SP1_in或DP的符号位为sign1,且SP0_in的符号位为sign0。DP_sel指示是否执行DP操作,且响应于执行DP操作而断言及响应于执行双SP运算而取消断言。电路1200还接收高位移位值SHx及低位移位值SLx。在一些实例中,对于DP移位运算,SLx=SHx。
高位移位电路1202及低位移位电路1206中的每一级多路复用器经配置以实施2移位的降幂。例如,响应于断言SH6,MH6提供右移64的前一级输出H7作为H6;响应于取消断言SH6,MH6使前一级输出H7通过作为H6。MH5类似地响应于SH5而发挥功能,只是右移量为32,而MH4提供右移量16,依此类推到MH0提供右移量1。
低位移位电路1206的多路复用器类似地响应于低位移位值SLx而发挥功能,只是响应于断言信号SLx,对应多路复用器MLx从中间列多路复用器1204引入数个位。对于双SP移位运算,中间列多路复用器1204将符号位提供到低位移位电路1206。对于DP移位运算,中间列多路复用器1204促进位从高位移位电路1202移出进入低位移位电路1206。在一些实例中,对于DP移位运算,sign0=sign1。
因此,电路1200通过再用逻辑对DP移位运算及双SP移位运算两者实施算术右移来减小面积,其在SIMD架构中是有用的。然而,尽管电路1200减小面积,但中间列多路复用器1204在关键路径上增加多路复用器(例如引入额外延迟)以允许位从高位移位电路1202移位到低位移位电路1206用于DP移位运算。例如,如由箭头1212指示,SH7的输出(H7)在提供到ML6用于由低位移位电路1206进一步移位之前由中间列多路复用器1204延迟。
本描述的实例通过检测位是否从高位移位电路传递到低位移位电路(例如在DP移位运算中)且经由不包含高位移位电路的路径提供适当输入及控制信号值来解决上述问题。图13是经配置以实施DP及双SP算术右移两者的算术右移电路1300的示意图。然而,与电路1200不同,图13的算术右移电路1300经配置以检测其中位从高位移位电路传递到低位移位电路或可从高位移位电路传递到低位移位电路的右移情况。因此,右移电路1300经配置以减少由位通过中间列多路复用器1204从高位移位电路1202移位到低位移位电路1206导致的上述延迟。
右移电路1300还布置成左列多路复用器1302(也称为高位移位电路1302)、中间列多路复用器1304(也称为中间移位电路1304)及右列多路复用器1306(也称为低位移位电路1306)。类似于关于图12描述,高位移位电路1302由SHx控制,且低位移位电路1306由SLx控制。高位移位电路1302提供双精度结果的87个MSB,而低位移位电路1306提供双精度移位结果的76个LSB(例如用于DP FMA运算)。
在图13中,中间移位电路1304也由SLx控制(不同于图12中由DP_sel控制的中间列1204,DP_sel指示移位运算是否为DP移位运算)。在DP移位运算中,中间移位电路1304提供从高位移位电路1302移位到低位移位电路1306的位。如同图12,电路1300也经配置以执行双SP移位运算,其中中间移位电路1304提供移位到低位移位电路1306中的符号位。对于双SP移位运算,SP1_in的算术移位由高位移位电路1302执行,而SP0_in的算术移位由低位移位电路1306执行(使用由中间移位电路1304提供的符号位)。因此,为简洁起见,以下实例主要关于DP移位运算来描述,因为电路1300减少上文关于图12描述的延迟,延迟由位在DP移位运算中通过中间列多路复用器1204从高位移位电路1202移位到低位移位电路1206引起。
在一些实例中,通过使用至多为输出宽度一半的输入宽度来促进检测其中位从高位移位电路1302传递到低位移位电路1306的移位情况。因此,为说明起见,53位DP输入(imp1+52个man1位)可被视为64个位,且高位移位电路1302的87位输出可被视为128个位。更一般来说,输入及输出宽度上舍入到2的下一幂(如果任一者已不是2的幂)。当考虑具有此关系的输入及输出大小时,其中高位移位电路1302的输入将或可传递或移位到低位移位电路1306的情况是当最大移位位为0(指示不执行对应移位)且次大移位位为1(指示执行对应移位)时。
图14是根据各种实例的展示图13的算术右移电路1300的功能性的各种算术右移运算的实例1400。特定来说,继续上文数字实例,其中输入是64个位,且高位移位电路1302的输出是128个位。为了一般性,高位移位电路1302及低位移位电路1306各自包含N=8个多路复用器级。高位移位电路1302及低位移位电路中的每一者的输出宽度是2N-1=128个位。因此,高位移位电路1302及低位移位电路1306中的每一者可接收高达2N-2=64个位的输入(例如相应移位电路的输出宽度的一半)。右移电路1300的输出可高达2N=256个位。因此,对于DP移位运算,DP_in操作数提供到高位移位电路1302且可移位高达2N-1=255个位。对于双SP移位运算,SP1_in操作数提供到高位移位电路1302且可移位高达2N-1–1=127个位,且SP0_in操作数提供到低位移位电路1306且可移位高达2N-1-1=127个位(例如,SH7及SL7不用于SP移位运算)。以下实例涉及DP移位运算。
在第一实例1402中,如果最大移位位为1(例如SL7=1),那么不会有位从高位移位电路1302传递到低位移位电路1306,因为第一级多路复用器使整个64位输入从高位移位电路1302移位到低位移位电路1306(例如,ML7提供具有LSB填充的DP_in值作为其输出L7)。即,后续移位(如果有)完全发生在低位移位电路1306中。
在第二实例1404中,最大两个移位位为0(例如,SL7=0且SL6=0)。在第二实例1404中,没有位可从高位移位电路1302传递到低位移位电路1306,因为最大可能剩余移位是2N-2-1(例如,在此特定实例中是63个位)。考虑到2N-2的实例输入大小(例如64个位)及2N-1的高位移位电路1302输出宽度(例如128个位),即使最大剩余移位也将含有高位移位电路1302输出的输入位。
因此,在第三实例1406中,最大移位位为0(例如SL7=0)且次大移位位为1(例如SL6=1)。如描述,此为其中输入位可从高位移位电路1302移位到低位移位电路1306的唯一情况,例如通过中间移位电路1304的后续(例如视觉低位)层。
再次参考图13,第三实例1406条件由中间移位电路1304中将控制信号提供到顶部或第一多路复用器1310的NOR3门1308检测。特定来说,NOR3门1308接收~DP_sel、SL7及~SL6作为输入且根据式~(~DP_sel||SL7||~SL6)提供输出。因此,第一多路复用器1310响应于执行DP移位运算、SL7=0及SL6=1而仅提供man1(具有sign1 LSB填充)作为其输出。在所有其它情况中,第一多路复用器1310提供sign0位作为其输出。在实例中,第一多路复用器1310不提供隐含位imp1(例如,连同man1及sign1 LSB填充)作为其输出,因为man1及符号填充的11个位表示63个位,其也是第一多路复用器1310的输出可经受的最大剩余移位(例如响应于断言SL5到SL0)。因此,即使作为输出M6的部分提供,但imp1无法移位到低位移位电路1306中且因此第一多路复用器1310的宽度可因不包含imp1而减小。
在一些实例中,为了促进电路1300的SIMD功能性,对于DP移位运算,sign0经设置为等于sign1,且imp0及man0用sign1位替换。对于单独SP移位运算,sign1、imp1及man1无需替换,因为其不会被选择,因为SP移位运算的SL7无法断言(例如,SP移位运算的SL7会产生太大移位)。
如上文描述,电路1300经配置以接收两个移位值SHx及SLx作为输入。SHx是高位移位值,其含有N个移位级的N个位。SLx是低位移位值,其也含有N个移位级的N个位。在图13的实例中,N=8。SHx对应于SP1_in操作数或DP_in操作数的移位量。SLx对应于SP0_in操作数的移位量或DP_in操作数的偏移移位量。
例如,在DP移位运算中,SLx等于SHx+移位偏移,且因此SLx为偏移移位量。移位偏移响应于高位移位电路1302输出的实际向量宽度而确定。在图13的特定实例中,电路1300的总输出是163位向量,其中高位移位电路1302输出提供87个高位,且低位移位电路1306提供76个低位。因此,对于此实例,移位偏移经确定为2N-1减高位移位电路1302输出的宽度(例如,对于图13的特定实例,128-87=41)。
移位偏移用于更容易检测87位移位。例如,如果SHx大于或等于87,那么SLx大于或等于128(例如87+41=128),且因此断言SL7。因为高位移位电路1302的宽度是87个位,所以SHx大于或等于87对应于输入位(例如imp1及man1)完全移出高位移位电路1302。即,后续移位(如果有,由于SHx大于87)完全发生在低位移位电路1306中,其是实例1402中展示的条件。
移位偏移还用于更容易检测23位移位。例如,如果SHx小于23,那么SLx小于64(例如23+41=64),且因此未断言SL6。因为高位移位电路1302的输入位包含34个符号填充位作为LSB,所以SHx小于23指示即使最大可能剩余移位量也不会使输入位(例如imp1及man1)移位到低位移位电路1306中,其是实例1404中展示的条件。即,小于23的任何移位仅使符号位移位到低位移位电路1306中。
在其中SHx大于或等于23且小于87的情况中,断言SL6且未断言SL7,其是实例1406中展示的条件。此范围内的SHx移位值可导致位从高位移位电路1302移位到低位移位电路1306中。因此,对于DP移位运算在SLx中包含移位偏移促进电路1300检测两个输出宽度(例如高位移位电路1302的两个输出宽度)的非完美幂的情况,其等效于关于图14描述的实例1402(SHx大于或等于87)、1404(SHx小于23)及1406(SHx大于或等于23且小于87)中的情况。
应用于低位移位电路1306的剩余SLx值经校正以提供适当移位输出,即使移位偏移与SHx相加以提供SLx。例如,SL7有效执行87位移位,因为响应于断言SL7,DP输入(例如imp1、man1及填充位)作为ML7多路复用器输出L7提供。因此,响应于断言SL7且仅执行87位移位而非128位移位而有效减去偏移,使得后续SLx移位是适当量(例如,使得最终移位是由SHx指定的值,不包含加到SLx的偏移)。
在另一实例中,当未断言SL7时,断言SL6(例如,断言NOR3门1308的输出)有效执行23位移位,因为多路复用器1310选择具有少于23个符号填充位(例如11{sign1}而非34{sign1}提供到MH7多路复用器)的DP输入作为输出M6。因此,后续SLx移位是适当量,因为偏移由多路复用器1310响应于取消断言SL7及断言SL6而有效减去。
最后,当未断言SL7及SL6两者时,预期低位移位电路1306提供所有符号位。不管SLx的余数的值如何,ML7及ML6多路复用器分别响应于取消断言SL7及SL6而提供符号位作为输出L7、L6。多路复用器1310也提供所有符号位作为其输出M6。因此,在其中取消断言SL7及SL6的此情况中,低位移位电路1306的输出适当为全符号位。
在第一说明实例中,右移电路1300执行DP移位运算且SHx等于100。如上文描述,在其中高位移位电路1302是87个位宽的实例中,SLx等于SHx+移位偏移41或等于141。因为高位移位电路1302是87个位宽,所以SHx等于100引起高位移位电路1302移出输入位,使得高位移位电路1302的输出(例如H0)仅含有移入符号位。参考低位移位电路1306,SLx等于141导致SL7(例如移位128)为真或经断言。ML7使53位输入(例如imp1及man1)与低位移位电路1306的MSB对准,有效实施上述87位移位,消除偏移41。此外,移位13由SLx的余数实施(例如,由SL7实施的141-128为真)。因此,低位移位电路1306的余数使ML7、L7的输出移位13个位,其是从中间移位电路1304移入的符号位。因此,低位移位电路1306的输出(例如L0)是13个移入符号位,53位输入,其中LSB是经填充符号位。响应于H0及L0作为右移电路1300的最终结果级联,最终结果含有100个符号位(例如来自H0的87个符号位及来自L0的MSB的13个符号位)、53位输入及经填充符号位。因此,根据SHx的值,最终结果移位100个位。
在第二说明实例中,右移电路1300执行DP移位运算且SHx等于10。如上文描述,在其中高位移位电路1302是87个位宽的实例中,SLx等于SHx+移位偏移41或等于51。SHx等于10引起高位移位电路1302移入10个sign1位,使得H0含有10个符号位、53位输入及经填充符号位。参考低位移位电路1306,SLx等于51导致SL7及SL6(例如移位128或64)为假或取消断言。因此,低位移位电路1306不使用来自上半部(例如移位电路的输入)的任何位且提供输出L0作为经填充符号位(例如从中间移位电路1304移入的符号位或来自低位移位电路1306的符号位,因为sign0等于sign1,且对于DP移位运算,imp0及man0用sign1位替换)。右移电路1300的最终结果包含由高位移位电路1302移入的10个符号位、53位输入及经填充符号位。因此,根据SHx的值,最终结果移位10个位。
在第三说明实例中,右移电路1300执行DP移位运算且SHx等于40。如上文描述,在其中高位移位电路1302是87个位宽的实例中,SLx等于SHx+移位偏移41或等于81。因为高位移位电路1302是87个位宽,所以SHx等于40引起高位移位电路1302移出一些输入位(例如man1的6个LSB外加34个sign1位),其因此应提供到低位移位电路1306。因此,高位移位电路1302的输出(例如H0)是40个移入sign1位后接imp1及man1的47个MSB,而6个LSB及34个sign1位响应于移位40而移出高位移位电路1302。
参考低位移位电路1306,SLx等于81导致SL7为假或取消断言且SL6为真或断言。此是由NOR3门1308检测的条件,NOR3门1308断言其输出作为响应且引起第一多路复用器1310提供52位man1值及11个sign1位作为其输出M6。如描述,M6包含比多路复用器MH7的输入(其包含34个sign1位)少23个的sign1位,且因此响应于断言SL6而有效实施23位移位(例如而非64位移位)以消除偏移41,如上文描述。此外,移位17由SLx的余数实施(例如,由SL6实施的81-64为真),且因此断言SL4(例如移位16)及SL0(例如移位1)。
断言SL4引起多路复用器ML4提供{M5[15:0],L5[75:16]}作为其输出L4。M5[15:0]包含man1的5个LSB后接11个sign1位,而L5[75:16]包含60个sign1位。在此实例中,L1=L2=L3=L4,因为SL1-SL3=0。断言SL0引起多路复用器ML0提供{M1,L1[75:1]}作为其输出。M1包含man1的次低LSB(例如,由于SL4引起M4等于M5[30:16],其中M5[15]是提供给L4的MSB),而L1[75:1]包含man1的5个LSB后接70个sign1位。因此,低位移位电路1306的输出(例如L0)包含man1的6个LSB后接经填充符号位。响应于H0及L0作为右移电路1300的最终结果级联,最终结果含有由高位移位电路移入的40个符号位、imp1及man1的47个MSB(例如,来自H0)、man1的6个LSB(例如,来自L0)及经填充符号位。因此,根据SHx的值,最终结果移位40个位。
在此第三说明实例中,因为第一多路复用器1310响应于其中位可从高位移位电路1302移位到低位移位电路1306的条件(例如,由NOR3门1308检测,~(~DP||SL7||~SL6))而控制,所以避免由使位从高位移位电路通过中间列多路复用器传递到低位移位电路引入的延迟,例如在图12中。例如,在图12中,SH7的输出(H7)在提供到ML6用于由低位移位电路1206进一步移位之前由中间列多路复用器1204延迟。然而,根据本公开的实例,中间移位电路1304响应于断言NOR3门1308的输出而提供man1输入位且不引入此延迟。
在一些情况中,高位移位电路1302具有小于或等于2N-1的宽度,如上文描述。在图13的特定实例中,高位移位电路1302的宽度因此可保持为87个位,而低位移位电路1306的宽度因此可保持为76个位。因此,右移电路1300经配置以执行DP移位运算及双SP移位运算两者。在一些实例中,中间移位电路1304的宽度可在每一级改变以例如减小实施中间移位电路1304所需的面积。例如,中间移位电路1304的宽度响应于每一级处的最大剩余移位而在所述级改变。中间移位电路1304的第一级(例如多路复用器1310)的宽度是2N-2-1=63,因为响应于多路复用器1310输出M6的最大剩余移位是63个位。最大剩余移位在每一连续级减小2的幂。因此,中间移位电路1304的宽度可由2N-M-2-1给出,其中N是移位级的数目(例如高位移位电路1302及低位移位电路1306中的级数),且M是先前中间逻辑级的数目。下表展示图13的实例中的中间移位电路1304的不同级的宽度:
N M 中间逻辑宽度
6(例如1310) 8 0 63
5 8 1 31
4 8 2 15
3 8 3 7
2 8 4 3
1 8 5 1
在一些实例中,移位计算器104经配置以提供加到SHx的偏移以在DP移位运算期间产生偏移移位值SLx值。例如,移位计算器104可经配置以在SHx及SLx计算期间提供指数偏置常数。因此,移位计算器104可经配置以修改在SLx计算期间使用的偏置常数值以含有用于DP移位运算的额外偏移(例如,在上述实例中为+41)。
图15是根据本描述的实例的用于执行算术右移的方法1500的流程图。方法1500开始于框1502:由高位移位电路及低位移位电路中的每一者接收算术右移运算的操作数。例如,在上述DP移位运算中,操作数包含man1(及任选地imp1)。高位移位电路1302接收操作数作为多路复用器MH7的输入,而低位移位电路1306接收操作数作为多路复用器ML7的输入。高位移位电路1302经配置以提供高位输出(例如H0)且低位移位电路1306经配置以提供低位输出(例如L0)。算术右移运算的结果(例如右移电路1300的输出)是与L0级联的H0,如图13中展示。
方法1500继续框1504:接收算术右移运算的移位值。例如,SHx及SLx由右移电路1300(例如算术移位器106)从移位计算器104接收。在例如其中高位移位电路1302输出的宽度是2的幂的一些实例中,SLx等于SHx。然而,在其中高位移位电路1302的宽度不是2的幂的其它实例中,SLx等于SHx+偏移(例如,SLx是偏移移位值)。如上文描述,偏移等于高位移位电路1302的宽度与2的次大幂之间的差。
方法1500继续框1506:响应于移位值而检测移位条件。移位条件是其中操作数的一部分而非全部可移位到对应于低位输出(例如L0)的位中的条件。移位条件是实例1406中展示的条件,其中额外移位将使输入(例如操作数)位移位到低位输出中。相比之下,在实例1402中,初始移位使所有输入位移位到低位输出中,且因此后续移位(如果有)不使输入位从高位移位电路1302移位到低位移位电路1306。此外,在实例1404中,最大剩余移位值不足以使输入位移位到低位输出中,且因此后续移位(如果有)也不使输入位从高位移位电路1302移位到低位移位电路1306。在一些实例中,移位条件响应于取消断言移位值或偏移移位值(例如SLx)的MSB且断言移位值或偏移移位值(例如SLx)的下一MSB而检测。在其它实例中,移位条件也响应于操作数是双精度操作数(例如,所执行的移位运算是DP移位运算)而检测。如描述,NOR3门1308检测移位条件,且中间移位电路1304响应于NOR3门1308的输出而控制。
因此,方法1500继续框1508:响应于检测到移位条件,将操作数的至少一部分提供(例如通过中间移位电路1304)到低位移位电路1306作为可选输入。例如,响应于断言NOR3门1308的输出(例如检测到移位条件),中间移位电路1304的第一多路复用器1310提供操作数man1作为其输出M6,其可由低位移位电路1306的多路复用器ML5选择。如上文描述,此减少或消除与使位从高位移位电路通过中间列多路复用器传递到低位移位电路相关联的延迟,例如在图12中。响应于取消断言NOR3门1308的输出(例如未检测到移位条件),中间移位电路1304的第一多路复用器1310提供符号位作为其输出M6,其可由低位移位电路1306的多路复用器ML5选择。
如上文描述,SHx是作为控制信号提供到高位移位电路1302的移位值。SLx是作为控制信号提供到低位移位电路1306的移位值,且SLx的至少一部分作为控制信号提供到中间移位电路1304。对于双SP移位运算,SHx用于控制高位移位电路1302对第一SP操作数(例如man1)执行算术右移,且SLx用于控制低位移位电路1306对第二SP操作数(例如man0)执行算术右移。
贯穿本说明书使用术语“耦合”。术语可涵盖实现与本描述一致的功能关系的连接、通信或信号路径。例如,如果装置A产生信号来控制装置B执行动作,那么在第一实例中,装置A耦合到装置B,或在第二实例中,如果中介组件C未大体上更改装置A与装置B之间的功能关系,那么装置A通过中介组件C耦合到装置B,使得装置B经由装置A提供的控制信号由装置A控制。
“经配置以”执行任务或功能的装置可在制造时由制造商配置(例如,编程及/或硬连线)以执行功能,及/或可在制造之后由用户配置(或重新配置)以执行功能及/或其它额外或替代功能。配置可通过装置的固件及/或软件编程、通过装置的硬件组件及互连件的构造及/或布局或其组合。
本文中描述为包含某些组件的电路或装置可代以适于耦合到所述组件以形成所描述的电路系统或装置。例如,描述为包含一或多个半导体元件(例如晶体管)、一或多个无源元件(例如电阻器、电容器及/或电感器)及/或一或多个源(例如电压及/或电流源)的结构可代以仅包含单个物理装置(例如半导体裸片及/或集成电路(IC)封装)内的半导体元件且可适于在制造时或在制造之后例如由终端用户及/或第三方耦合到至少一些无源元件及/或源以形成所描述的结构。
尽管某些组件在本文中可描述为具有特定工艺技术,但这些组件可更换为其它工艺技术的组件。本文中描述的电路可重新配置以包含替换组件以提供至少部分类似于组件替换之前可用的功能性的功能性。除非另有说明,否则展示为电阻器的组件通常表示经串联及/或并联耦合以提供由所展示电阻器表示的阻抗量的任何一或多个元件。例如,本文中展示及描述为单个组件的电阻器或电容器可代以分别为并联耦合于相同节点之间的多个电阻器或电容器。例如,本文中展示及描述为单个组件的电阻器或电容器可代以分别为串联耦合于相同于单个电阻器或电容器的两个节点之间的多个电阻器或电容器。
以上描述中使用的短语“接地电压电势”包含底盘接地、地面接地、浮动接地、虚拟接地、数字接地、共接地及/或适用于或适合于本描述的教示的任何其它形式的接地连接。除非另有说明,否则在值之前的“约”、“近似”或“大体上”意味着所述值的+/-10%。所描述实例可修改,且其它实例可在权利要求书的范围内。

Claims (20)

1.一种方法,其包括:
由加法器接收对应于所述加法器的输入位的第一部分的进位-和格式值,所述进位-和格式值包含进位值及和值;
由所述加法器接收对应于所述加法器的输入位的不与输入位的所述第一部分重叠的第二部分的第二值;
提供所述进位值与所述和值的中间和,其中提供所述中间和产生进位输出位;
使所述第二值递增以产生递增结果,其中所述所接收第二值是非递增结果;
确定所述递增结果的符号及所述非递增结果的符号;
响应于所述递增结果的所述符号而对所述递增结果求补或使所述递增结果通过以提供第一输出;
响应于所述非递增结果的所述符号而对所述非递增结果求补或使所述非递增结果通过以提供第二输出;
响应于所述进位输出位、所述递增结果的所述符号及所述非递增结果的所述符号而对所述中间和求补或使所述中间和通过以提供第三输出;
响应于所述进位输出位而选择所述第一及第二输出中的一者;及
提供包括所述第三输出及所述第一及第二输出中的所述选定者的最终和。
2.根据权利要求1所述的方法,其中所述递增结果的所述符号及所述非递增结果的所述符号在提供所述中间和之前确定。
3.根据权利要求1所述的方法,其中所述第一及第二输出在提供所述中间和之前提供。
4.根据权利要求1所述的方法,其中所述第一部分是所述输入位的较低有效部分且其中所述第二部分是所述输入位的较高有效部分。
5.根据权利要求1所述的方法,其进一步包括:
响应于断言所述进位输出位,响应于所述递增结果的所述符号为负而对所述中间和求补或响应于所述递增结果的所述符号为正而使所述中间和通过;及
响应于未断言所述进位输出位,响应于所述非递增结果的所述符号为负而对所述中间和求补或响应于所述非递增结果的所述符号为正而使所述中间和通过。
6.根据权利要求1所述的方法,其进一步包括:
响应于所述递增结果的所述符号为负而对所述递增结果求补或响应于所述递增结果的所述符号为正而使所述递增结果通过;及
响应于所述非递增结果的所述符号为负而对所述非递增结果求补或响应于所述非递增结果的所述符号为正而使所述非递增结果通过。
7.根据权利要求1所述的方法,其进一步包括
响应于断言所述进位输出位而选择所述第一输出;及
响应于未断言所述进位输出位而选择所述第二输出。
8.一种方法,其包括:
由加法器接收对应于所述加法器的输入位的第一部分的进位-和格式值,所述进位-和格式值包含进位值及和值;
由所述加法器接收对应于所述加法器的输入位的不与输入位的所述第一部分重叠的第二部分的第二值;
提供所述进位值及所述和值的较高有效部分的第一中间和,其中提供所述第一中间和产生进位输出高位;
提供所述进位值及所述和值的较低有效部分的第二中间和,其中提供所述第二中间和产生进位输出低位;
使所述第二值的较高有效部分递增以产生第一递增结果,其中所述所接收第二值的所述较高有效部分是第一非递增结果;
使所述第二值的较低有效部分递增以产生第二递增结果,其中所述所接收第二值的所述较低有效部分是第二非递增结果;
确定所述第一递增结果的符号、所述第一非递增结果的符号、所述第二递增结果的符号及所述第二非递增结果的符号;
进行以下中的每一者:
响应于所述第一递增结果的所述符号而对所述第一递增结果求补或使所述第一递增结果通过以提供第一输出;
响应于所述第一非递增结果的所述符号而对所述第一非递增结果求补或使所述第一非递增结果通过以提供第二输出;
响应于所述第二递增结果的所述符号而对所述第二递增结果求补或使所述第二递增结果通过以提供第三输出;及
响应于所述第二非递增结果的所述符号而对所述第二非递增结果求补或使所述第二非递增结果通过以提供第四输出;
响应于所述进位输出高位、所述第一递增结果的所述符号及所述第一非递增结果的所述符号而对所述第一中间和求补或使所述第一中间和通过以提供第五输出;
响应于所述进位输出低位、所述第二递增结果的所述符号及所述第二非递增结果的所述符号而对所述第二中间和求补或使所述第二中间和通过以提供第六输出;
响应于所述进位输出高位而选择所述第一及第二输出中的一者;
响应于所述进位输出低位而选择所述第三及第四输出中的一者;及
提供包括所述第五输出及所述第一及第二输出中的所述选定者的第一最终和;及
提供包括所述第六输出及所述第三及第四输出中的所述选定者的第二最终和。
9.根据权利要求8所述的方法,其中所述第一递增结果的所述符号、所述第一非递增结果的所述符号、所述第二递增结果的所述符号及所述第二非递增结果的所述符号在提供所述第一及第二中间和之前确定。
10.根据权利要求8所述的方法,其中所述第一、第二、第三及第四输出在提供所述第一及第二中间和之前提供。
11.根据权利要求8所述的方法,其中所述第一部分是所述输入位的较低有效部分且其中所述第二部分是所述输入位的较高有效部分。
12.根据权利要求8所述的方法,其中所述进位值及所述和值的所述较高有效部分及所述第二值的所述较高有效部分与第一单精度浮点运算相关联,且其中所述进位值及所述和值的所述较低有效部分及所述第二值的所述较低有效部分与第二单精度浮点运算相关联。
13.根据权利要求8所述的方法,其进一步包括:
响应于断言所述进位输出高位,响应于所述第一递增结果的所述符号为负而对所述第一中间和求补或响应于所述第一递增结果的所述符号为正而使所述第一中间和通过;及
响应于未断言所述进位输出高位,响应于所述第一非递增结果的所述符号为负而对所述第一中间和求补或响应于所述第一非递增结果的所述符号为正而使所述第一中间和通过。
14.根据权利要求8所述的方法,其进一步包括:
响应于断言所述进位输出低位,响应于所述第二递增结果的所述符号为负而对所述第二中间和求补或响应于所述第二递增结果的所述符号为正而使所述第二中间和通过;及
响应于未断言所述进位输出低位,响应于所述第二非递增结果的所述符号为负而对所述第二中间和求补或响应于所述第二非递增结果的所述符号为正而使所述第二中间和通过。
15.根据权利要求8所述的方法,其进一步包括:
响应于所述第一递增结果的所述符号为负而对所述第一递增结果求补或响应于所述第一递增结果的所述符号为正而使所述第一递增结果通过;
响应于所述第一非递增结果的所述符号为负而对所述第一非递增结果求补或响应于所述第一非递增结果的所述符号为正而使所述第一非递增结果通过;
响应于所述第二递增结果的所述符号为负而对所述第二递增结果求补或响应于所述第二递增结果的所述符号为正而使所述第二递增结果通过;及
响应于所述第二非递增结果的所述符号为负而对所述第二非递增结果求补或响应于所述第二非递增结果的所述符号为正而使所述第二非递增结果通过。
16.根据权利要求8所述的方法,其进一步包括:
响应于断言所述进位输出高位而选择所述第一输出;及
响应于未断言所述进位输出高位而选择所述第二输出。
17.根据权利要求8所述的方法,其进一步包括:
响应于断言所述进位输出低位而选择所述第三输出;及
响应于未断言所述进位输出低位而选择所述第四输出。
18.一种装置,其包括:
加法单元,其具有进位输入、和输入、进位输出输出及中间输出,其中所述加法单元经配置以:
在所述进位输入处接收进位-和格式值的进位值;
在所述和输入处接收所述进位-和格式值的和值;及
在所述中间输出处提供所述进位值与所述和值的中间和,其中所述加法单元对应于加法器的输入位的第一部分;
递增器电路,其具有递增器输入及递增器输出,其中所述递增器电路经配置以:
在所述递增器输入处接收第二值;及
响应于所述第二值,在所述递增器输出处提供递增结果,其中所述所接收第二值是非递增结果,且其中所述递增器电路对应于所述加法器的输入位的不与输入位的所述第一部分重叠的第二部分;
第一1求补电路,其具有第一1补码输入、第一1补码输出及第一控制输入,其中所述第一1补码输入耦合到所述递增器输出;
第二1求补电路,其具有第二1补码输入、第二1补码输出及第二控制输入,其中所述第二1补码输入耦合到所述递增器输入;
第三1求补电路,其具有第三1补码输入、第三1补码输出及第三控制输入,其中所述第三1补码输入耦合到所述中间输出;
第一预计算电路,其具有第一及第二预计算输入及第一及第二预计算输出,其中所述第一预计算输入耦合到所述递增器输出,其中所述第二预计算输入耦合到所述递增器输入,其中所述第一预计算输出耦合到所述第一控制输入,且其中所述第二预计算输出耦合到所述第二控制输入;
第二预计算电路,其具有第三、第四及第五预计算输入及第三预计算输出,其中所述第三预计算输入耦合到所述递增器输出,其中所述第四预计算输入耦合到所述递增器输入,其中所述第五预计算输入耦合到所述进位输出输出,且其中所述第三预计算输出耦合到所述第三控制输入;及
多路复用器(mux),其具有第一及第二多路复用器输入、多路复用器控制输入及多路复用器输出,其中所述第一多路复用器输入耦合到所述第一1补码输出,其中所述第二多路复用器输入耦合到所述第二1补码输出,且其中所述多路复用器控制输入耦合到所述进位输出输出;
其中所述x位加法器的最终和包括与所述多路复用器输出级联的所述第三1补码输出。
19.根据权利要求18所述的装置,其中所述第一预计算电路经配置以响应于在所述第一预计算输入处接收的值的符号而提供所述第一预计算输出及响应于在所述第二预计算输入处接收的值的符号而提供所述第二预计算输出。
20.根据权利要求18所述的装置,其中所述第二预计算电路经配置以响应于在所述第三预计算输入处接收的值的符号、在所述第四预计算输入处接收的值的符号及在所述第五预计算输入处接收的值而提供所述第三预计算输出。
CN202211709536.1A 2021-12-30 2022-12-29 具有减少1求补延迟的浮点融合乘加 Pending CN116382628A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/566,240 US20230214181A1 (en) 2021-12-30 2021-12-30 Floating point fused multiply add with reduced 1's complement delay
US17/566,240 2021-12-30

Publications (1)

Publication Number Publication Date
CN116382628A true CN116382628A (zh) 2023-07-04

Family

ID=86766454

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211709536.1A Pending CN116382628A (zh) 2021-12-30 2022-12-29 具有减少1求补延迟的浮点融合乘加

Country Status (3)

Country Link
US (1) US20230214181A1 (zh)
CN (1) CN116382628A (zh)
DE (1) DE102022134404A1 (zh)

Also Published As

Publication number Publication date
DE102022134404A1 (de) 2023-07-06
US20230214181A1 (en) 2023-07-06

Similar Documents

Publication Publication Date Title
US7698353B2 (en) Floating point normalization and denormalization
US8606840B2 (en) Apparatus and method for floating-point fused multiply add
US8046399B1 (en) Fused multiply-add rounding and unfused multiply-add rounding in a single multiply-add module
JP2002108606A (ja) スティッキービット生成回路及び乗算器
JP4388980B2 (ja) 浮動小数点数の除算または平方根演算を行う演算装置及び演算方法
US8180815B2 (en) Redundancy-free circuits for zero counters
US11119731B2 (en) Apparatus and method for rounding
JP7285966B2 (ja) 多入力浮動小数点加算器
US8015231B2 (en) Data processing apparatus and method for performing floating point multiplication
US7206800B1 (en) Overflow detection and clamping with parallel operand processing for fixed-point multipliers
Vázquez et al. A high-performance significand BCD adder with IEEE 754-2008 decimal rounding
CN116382628A (zh) 具有减少1求补延迟的浮点融合乘加
CN116382619A (zh) 用于具有合并2求补及舍入的浮点融合乘加的方法、装置及系统
CN116382625A (zh) 用于多精度算术右移的方法、装置及系统
US7069290B2 (en) Power efficient booth recoded multiplier and method of multiplication
US10275218B1 (en) Apparatus and method for subtracting significand values of floating-point operands
US7003540B2 (en) Floating point multiplier for delimited operands
US7640286B2 (en) Data processing apparatus and method for performing floating point multiplication
Issa et al. Design of High Precision Radix-8 MAF Unit with Reduced Latency
US11586701B2 (en) Low-power adder circuit
Gök A novel IEEE rounding algorithm for high-speed floating-point multipliers
US11294630B2 (en) Adder-subtractor circuit and method of controlling adder-subtractor circuit
CN116521124A (zh) 一种适用于多种精度浮点运算的向量浮点乘加器
Sohn Improved architectures for fused floating-point arithmetic units
EP0438962A2 (en) Method and apparatus for exponent adder

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication