The present invention relates to a method and circuit for performing a combined Multiply-Add floating point operation in a floating point arithmetic unit.
Referring to
With reference to
Other prior art arithmetic units also offer a dual mode operation, wherein all operands have either a binary IEEE-compliant representation, or all operands have a different—e.g., an octal— representation.
It should be noted that no mixed mode operation, wherein one operand is binary for example, and the other two are hexadecimal, is the subject of the present invention.
In the prior art defined by arithmetic units of the applicant in the IBM z-series and in IBM S/390, the shift amount SA is calculated as follows:
SA=expA+expC−bias−expB+constant=expA+expC−expB−constant2 (constant2=bias−constant)
The constant is needed to compensate for an eventual shift left of the addend before adding product and addend operand.
Disadvantageously, hexadecimal and binary formats have different bias values; therefore the constant2 value is different for hexadecimal and binary, see logic 25A for binary and 25B for hexadecimal:
It should be noted that the binary bias is of the form
(2**(N−1))−1.
IBM S/390 hexadecimal notation:
Hexadecimal=(−1)**S*0.F*16**(exp−64)
It should be noted that the hex bias is of the form
(2**(N−1)).
With respect to further increased clock rates the above shift amount calculation is very timing critical because it is used to align the addend into a very wide dataflow. In prior art implementations of the above-mentioned z-series, either two different constant values are multiplexed in a multiplexer 26 in front of a 4-port adder, or two 4-port adders are used to calculate both shift amount values, wherein the correct value for the particular operational mode ( e.g. binary or hexadecimal) is selected later on.
The above-mentioned first option has an increased delay since the select signal must drive an exponent width multiplexer (for example a 13-bit multiplexer for a 64-bit dataflow) in order to select the constant, whereas the second option needs more hardware and still adds a multiplexer stage to the critical path.
Disadvantageously, both prior art alternatives are too slow for offering a further increased cycle rate required for new processor designs.
It is thus an objective of the present invention to provide a method according to the preamble of claim 1, which can be operated with a higher clock rate.
This objective of the invention is achieved by the features stated in enclosed independent claims. Further advantageous arrangements and embodiments of the invention are set forth in the respective dependent claims. Reference should now be made to the appended claims.
According to the most basic aspect of the present invention a method is disclosed for performing a combined Multiply-Add floating point operation in a floating point arithmetic unit according to a formula A*C+B, wherein A, B and C each have a fraction and an exponent part and the exponent of the product A*C is calculated and compared to the exponent of the addend under inclusion of an exponent bias value dedicated to use unsigned biased exponents, wherein the comparison yields a shift amount SA used for aligning the addend with the product operand, wherein the unit is designed to be operable in two distinct operation modes, in which the A, B, C operands are represented in their totality in a respective specific type of floating point format, for instance all operands of an instruction having either a binary IEEE-compliant representation, or all operands having a hexadecimal representation, which method is characterized by the step of using within a shift amount calculation logic provided for the alignment a common value CV for both operation modes, which is added to the exponents as:
expA+expC−expB+CV.
The common value CV can be expressed as a function of three parameters:
As the common value CV is dependent of the three above parameters, which can be varied independently from each other within certain usefully preset ranges, a common value CV can be achieved in multiple different ways. For example, a common bias value CBV can be selected as second condition for restricting the result space for CV.
By the before-mentioned solution the fraction of the addend operand B is shifted by a shift amount SA for addition with the product A*C relative to the most significant bit (MSB) of the product. That shift amount can be calculated equally in the same way, both for hexadecimal and binary format, or binary and octal format.
From that the advantage results that a generic approach is found, by which—based on the single, common (bias) value CV or CBV, respectively,—a common shift amount calculation for the product and the addend operand can be performed; this speeds up the shift amount calculation and the arithmetic unit may then be clocked with higher frequency, as a multiplexer required for selecting an individual mode-specific bias value as in prior art needs not to be used.
According to a further preferred feature of the invention, this method can be applied to binary (IEEE) and hexadecimal formats.
According to a further preferred feature of the invention, the before-mentioned value of osl is defined in a particular way, such that the common bias value CBVhb for a hexadecimal and a binary format compliant to IEEE, is exemplarily:
CBVhb=−bias+offset+osl;
CBVhb=−(hex)″7FC4″+osl=(hex)″803C″+osl=(hex)″8080″;
This results in a common value CBVhb of hexadecimal ′8080′, a bit string, of which the 7 lowest bits are all zero and the shift amount calculation saves a respective adder circuitry as it requires only three instead of four 16-bit adders in an architecture having an exponent length of 16 bits.
With the lowest 7 bits of the constant being all zero, instead of a 4-port adder a 3-port adder can be used for the shift amount calculation of the lower part of the addend, which once again helps to speed up the calculation as the lowest bit portion is used first for alignment. It is basically not necessary to set more then the lowest seven bits to all zero, because the shift amount is not needed to be set higher than a value of 2 (exp 8)−1=255, in order to align two 64-bit operands in an exemplarily selected 64-bit architecture.
According to a further preferred feature of the invention, the before-mentioned value of osl is defined in a particular way, such that a common bias value CBVob can be obtained analogue to the example above for an octal and a binary format compliant to IEEE, as:
CBVob=−(hex)″7FC1″+osl;
Also in this case osl can be defined such that a plurality of 7 bits of the constant CBVob are all zero:
CBVob=−(hex)″7FC1″+osl=(hex)″8040″+osl=(hex)″8080″;
The present invention is illustrated by way of example and is not limited by the shape of the figures of the drawings in which:
With general reference to the figures and with special reference now to
It should be noted that the notation “yyxxxx . . . ”=“yy.xxxxx” as the usage of yy versus xx serves for separation of bits left and right of the floating point.
The exponent path is extended to 16 bits; the extension is used to detect carries from multiplier 23 in the yy-bits seen in
For binary floating point, the shift amount calculation for a multiply-add instruction is done as follows:
operation: A×C+B
SA=ExpA+ExpC−ExpB−x′7FFF′+db+osl with (x′7FFF′=bias of binary exponent)
SA=ExpA+ExpC−ExpB−const1 with:
For hex floating point, the shift amount calculation for a multiply-add instruction is done as follows:
operation: A×C+B
SA=ExpA+ExpC−ExpB−x′8000′+dx+osl with x′8000′=bias of hexadecimal exponent)
SA=ExpA+ExpC−ExpB−const2
Starting with the positioning of the hexadecimal operands, dx is set to dx=60 for a minimum hardware dataflow-width implementation.
According to the principles of the present invention it is proposed to equate the definitions for the respective two specific bias values expressed in terms of:
Thus, an equation is provided for the definitions to determine db for binary operands such that the constants const1 and const2 are equal:
const1=−x′7FFF′+db+osl=−x′8000′+dx+osl=const2
Resolving the equation leads to:
db=−1+dx
db=−1+60=59
With the values of db=59 and dx=60 respectively, for the shift amount calculation the same single constant value is provided for both bin and hex.
Thus the commonly used constant for binary (IEEE) and IBM-hexadecimal format is:
CBVhb=const1=const2=−x′7FC4′+osl
Furthermore, according to a preferred aspect of the invention for further speeding up the shift amount calculation, the value of osl is defined such that the 7 lowest bits of the constant value are all zeros, so that only three terms have to be added.
An example is given next, in order to illustrate such calculation of osl:
binary:bias=0111111111111111=x′7FFF′
ExpA=0011111011001010=x′3ECA′
ExpC=0111010101111011=x′757B′
ExpB=0011010000111001=x′3439′
First, the expression “=x′7FC4′” is generated according to the formula:
Then the shift amount is calculated as follows:
As the 7 lowest significant bits (LSB) of the constant are all zero, there are only three operands to be added. Thus, one adder can be saved for these lower bits.
Next, and with reference to
binary IEEE:1.xxxx, bias value=x′7FFF′
octal:x.xxx, bias value=x′8000′
The shift amount calculation is done as follows for the binary format:
SA=ExpA+ExpC−ExpB−x′7FFF′+db+osl(x′7FFF′=bias of IEEE binary exponent),
which yields:
SA=ExpA+ExpC−ExpB−const1
with:
The shift amount calculation is done as follows for octal format:
SA=ExpA+ExpC−ExpB−x′8000′+db+osl(x′8000′=bias of octal exponent)
=.ExpA+ExpC−ExpB−const2
Starting with the positioning of octal operands, the radix point distance do is set to do=63 —see arrow 41—for a selected minimum hardware dataflow-width implementation.
For binary operands the radix points are denoted as 40A, 40B, respectively. The equation for determining the radix point distance db for binary operands such that the constants const1 and const2 are equal is given as follows:
const1=−x′7FFF′+db+osl=−x′8000′+do+osl=const2
Resolving the equation yields, see arrows 40:
db=do−1=62
which yields as common constant for octal and binary format:
CBVob=const1=const2=−x′7FC1′+osl
CBVob=x′8040′+osl=x′8080′
Resulting in osl=(hex)“40”=64
Of course, the calculation can be reversed, by beginning with the setting of do and deriving db there from.
Number | Date | Country | Kind |
---|---|---|---|
05100663.3 | Feb 2005 | EP | regional |