FPU - 符合 IEEE 754-2008 标准的加法器功能

FPU - Adder function compliant with IEEE 754-2008 Standard

我正在尝试开发一个 FPU(符合 ieee 754)作为毕业设计,但我在求和函数方面遇到了一些麻烦。过去 2 周,我在纸上调查和处理一些操作(其中很多),目的是了解该标准的工作原理。 所以,这就是问题所在....我很困惑,因为当我对具有相同符号的数字进行加法时,我得到了正确的结果,但是在对具有相反符号的数字进行加法时却遇到了问题。例如,-1200.23 和 500.125 的相加。 数字的 ieee 754-2008 单精度表示是 (sign bit---exponent----significand):

-1200.23 = 1 --- 10001001 --- 1.001 0110 0000 0111 0101 1100 
 500.125 = 0 --- 10000111 --- 1.111 1010 0001 0000 0000 0000

-1200.23 的指数为 137,500.125 的指数为 135。指数不相等,所以我们需要归一化 500.125 的尾数,为此我将尾数右移两倍 (137-135 = 2)。 500.125的新尾数为:

 0.011 1110 1000 0100 0000 0000 

***在继续之前我想说我看到了一个类似的问题(How to subtract IEEE 754 numbers? 它没有回答我的问题*****

那么,下一步是加尾数还是减尾数?我已经尝试了两种方法,但我仍然得到不正确的结果...... 谢谢.....

这些数字是 符号幅度(一旦指数对齐)并且不是二进制补码

如果它们有不同的符号,要将它们作为一个整体添加,你必须减去 更小从较大的 移动有效数字并相应地调整符号,具体取决于哪个具有较大的幅度。然后将结果归一化。

如果您从较小的中减去较大的,您会得到一个错误的二进制补码结果,您必须将其取反,并在必要时进行移位,使其变为正再次,这将是太多不必要的工作。

如果你加上两个移动后的有效数字,你肯定得不到你需要的,就像-4.1 + 3.2既不会导致7.3,也不会在 -7.3。它变成 -(4.1 - 3.2),或 -0.9

换句话说,大小是由较大的减去较小的(4.1减去3.2)和较大的符号的符号(在这种情况下,-).

另外不要忘记处理(处理前添加,处理后删除)某些格式中的隐藏位。还要注意正确处理 NaN 和非正规化。

不右移对齐。这样你就失去了位。向左移动以对齐有效数字并稍后归一化。中间结果可能更大,但这已通过归一化和适当的舍入得到纠正。