Menu Close

浮点运算计算方法 (乘除法)

在FPGA浮点运算中, 基本的运算为加、减、乘、除,其他的运算还包括开方,开根号,1/n 等运算。 在FPGA上实现加减乘除的基本运算, 其他运算可以通过基本运算来处理。

1 浮点乘除法运算

a  * b  运算

a = (-1)s1 * 1.f1 * 2 e1

b = (-1)s2 * 1.f2 * 2 e2

所以 a * b

(-1)s1 * 1.f1 * 2 e1  * (-1)s2 * 1.f2 * 2 e2 =

[(-1)s1 * 1.f1  * (-1)s2 * 1.f2 ] * 2 e1 + e2 

举例:

10进制: 2.34*106 *  -6.456*108 = 2.34 *  -6.456*108 + 6 = 15.10704 * 1014 = 1.510704 * 1015

2进制:1.110011 * 23 * 1.00111 * 2-6 = 10.00110000101 * 2-3 = 1.000110000101 * 2-2 

2规格化和舍入

规格化

IEEE的IEEE 754-2008标准规定,在浮点数格式中,结果的有效值必须处在区间 [0 < R < 4] 上。 即:00.xxxxxxxxx < R < 11.xxxxxxxxxx。如果这个结果在在 [2,4] 上,即:  10.xxxxxx < R < 11.xxxxxxxx。就说明它太大,必须将其右移 1 位(同时调整指数)以将其标准化;如果这个结果在 [0,1], 00.xxxxxxx = R.则说明它太小,对于这种情况,可能需要左移多位(同时调整指数)以标准化结果

舍入

结果的舍入需要进行标准化移位和指数调整。为提高速度,我们可以预先计算出调整后的指数值,并在标准化结果已知时就选择合适的值。为获得合适的(和或差的)舍入结果,二进制浮点加法器必须外另加提供至少 3 个额外位,这些位被称作保护位(guard bit),舍入位(round bit)和黏着位(sticky bit)。

 

1 就近舍入:即十进制下的“四舍五入”,例如有效数字超出规定数位的多余数字是1001,它大于超出规定最低位的一半(即0.5),故最低位进1。如果多余数字是0111,它小于最低位的一半,则舍掉多余数字(截断尾数、截尾)即可。对于多余数字是1000、正好是最低位一半的特殊情况,最低位为0则舍掉多余位,最低位为1则进位1、使得最低位仍为0(偶数)

 

%title插图%num

 

2.朝0舍入:即朝数轴零点方向舍入,即直接截尾。
3.朝正无穷舍入:对正数而言,只要多余位不全为0则向最低有效位进1;负数则直接截尾。
4.朝负无穷舍入:对负数而言,向最低有效位进1;正数若多余位不全部为0则简单截尾

Posted in FPGA, Verilog, 教材与教案, 文章

发表回复

相关链接