计算机算术9-浮点乘法
1. 基本方案
浮点乘法的操作包括3个部分,符号位进行异或,指数位相加,尾数位相乘,乘完之后的结果进行归一化处理,包括向左移位和向右移位,向左移位的原因是normal和subnormal相乘,导致尾数积有很多前导零,需要左移动进行归一化;向右移的原因是normal和normal相乘,结果为subnormal,因为指数的原因导致尾数积需要右移动。归一化之后还要进行舍入判断,然后进一步将结果规格化表示。
2. 优化方案
- 尾数相乘,添加完隐藏位之后,24bit*24bit(单精度) 结果为48bit, 我们可以用booth编码和华莱士树,3-2压缩进行优化
- 归一化,需要左移和右移,移位量和指数相关,以及尾数的前导零个数相关,和尾数相乘可以并行处理
- 计算g/r/s, 可以利用mask进行移位,然后和normalize之前的尾数进行逻辑操作,这样可以避免尾数运算+normalize+g/r/s的串行处理;尾数运算(相加) 和mask+ shift并行处理
- 舍入后的归一化,这个幅度很小,最多是尾数加1,指数加1, 我们用mux进行选择即可。