Microarchitecture for floating point fused multiply-add with exponent scaling
First Claim
1. A method of implementing a floating point scaled fused multiply and accumulate (FMASc) operation in a floating point unit, the method comprising:
- multiplying mantissas of a floating point multiplier operand with a floating point multiplicand operand in a multiplier block to obtain a mantissa of a product;
determining a count of the number of leading zeros (LZC) of the mantissa of a floating point addend operand in a LZC block;
determining a pre-alignment shift value for the floating point addend operand based on the LZC, a scaling factor operand, and exponents of the floating point addend operand, the floating point multiplier operand, and the floating point multiplicand operand in a pre-alignment block;
shifting the mantissa of the floating point addend operand with the pre-alignment shift value to obtain a pre-aligned addend in an alignment block;
accumulating the mantissa of the product and the pre-aligned addend to obtain an intermediate result in an accumulator block;
determining the number of leading zeros of the intermediate result in a leading zero anticipator block;
determining a normalizing shift value based on the pre-alignment shift value and the number of leading zeros of the intermediate result; and
normalizing the intermediate result based on the normalizing shift value in a normalization block to obtain a normalized output of the FMASc operation.
1 Assignment
0 Petitions
Accused Products
Abstract
Systems and methods for implementing a floating point fused multiply and accumulate with scaling (FMASc) operation. A floating point unit receives input multiplier, multiplicand, addend, and scaling factor operands. A multiplier block is configured to multiply mantissas of the multiplier and multiplicand to generate an intermediate product. Alignment logic is configured to pre-align the addend with the intermediate product based on the scaling factor and exponents of the addend, multiplier, and multiplicand, and accumulation logic is configured to add or subtract a mantissa of the pre-aligned addend with the intermediate product to obtain a result of the floating point unit. Normalization and rounding are performed on the result, avoiding rounding during intermediate stages.
21 Citations
29 Claims
-
1. A method of implementing a floating point scaled fused multiply and accumulate (FMASc) operation in a floating point unit, the method comprising:
-
multiplying mantissas of a floating point multiplier operand with a floating point multiplicand operand in a multiplier block to obtain a mantissa of a product; determining a count of the number of leading zeros (LZC) of the mantissa of a floating point addend operand in a LZC block; determining a pre-alignment shift value for the floating point addend operand based on the LZC, a scaling factor operand, and exponents of the floating point addend operand, the floating point multiplier operand, and the floating point multiplicand operand in a pre-alignment block; shifting the mantissa of the floating point addend operand with the pre-alignment shift value to obtain a pre-aligned addend in an alignment block; accumulating the mantissa of the product and the pre-aligned addend to obtain an intermediate result in an accumulator block; determining the number of leading zeros of the intermediate result in a leading zero anticipator block; determining a normalizing shift value based on the pre-alignment shift value and the number of leading zeros of the intermediate result; and normalizing the intermediate result based on the normalizing shift value in a normalization block to obtain a normalized output of the FMASc operation. - View Dependent Claims (2, 3, 4, 5, 6)
-
-
7. A method of executing a floating point operation in a floating point unit, the method comprising:
-
receiving multiplier, multiplicand, addend, and scaling factor operands in the floating point unit; performing a partial multiplication operation on mantissas of the multiplier and multiplicand operand in a multiplier block to obtain an intermediate product; pre-aligning a mantissa of the addend with the intermediate product based on the scaling factor and exponents of the addend, multiplier, and multiplicand in a pre-alignment block; and accumulating the mantissa of the pre-aligned addend and the intermediate product in an accumulator block to obtain the result of the floating point operation. - View Dependent Claims (8, 9, 10)
-
-
11. A floating point unit comprising:
-
input multiplier, multiplicand, addend, and scaling factor operands; a multiplier block configured to multiply mantissas of the multiplier and multiplicand to generate an intermediate product; alignment logic configured to pre-align the addend with the intermediate product based on the scaling factor and exponents of the addend, multiplier, and multiplicand; and accumulation logic configured to add or subtract a mantissa of the pre-aligned addend with the intermediate product to obtain a result of the floating point unit. - View Dependent Claims (12, 13, 14, 15, 16, 17, 18, 19, 20)
-
-
21. A processing system comprising:
-
means for receiving floating point multiplier, multiplicand, addend, and scaling factor operands; multiplier means for multiplying mantissas of the multiplier and multiplicand to generate an intermediate product; alignment means for pre-aligning the addend with the intermediate product based on the scaling factor and exponents of the addend, multiplier, and multiplicand; and accumulation means for adding or subtracting a mantissa of the pre-aligned addend with the intermediate product to obtain a floating point result of the processing system. - View Dependent Claims (22, 23, 24)
-
-
25. A method of performing a dual data path floating point fused multiply and accumulate operation with scaling (FMASc) operation in a floating point unit, the method comprising:
-
receiving multiplier, multiplicand, addend, and scaling factor operands in a multiplier block; performing a partial multiplication operation on mantissas of the multiplier and multiplicand operand in the multiplier block to obtain an intermediate product; separating the mantissa of the addend into a high addend part with more significant bits and a low addend part with less significant bits; aligning the high addend part to form an incrementer part; aligning the low addend part with the intermediate product; accumulating the low addend part with the intermediate product in an accumulator block to form an add part; incrementing or decrementing the incrementer part based on a carry out or borrow value respectively from the add part to form a final incrementer part; and concatenating the final incrementer part with the add part to form the result of the floating point operation. - View Dependent Claims (26, 27, 28, 29)
-
Specification