使用verilog实现了设计了一个符合IEEE标准的32位单精度浮点数乘法器,并使用Modelsim进行仿真。
1、浮点数乘法器的流水线
都知道IEEE-754标准的单精度浮点数有32位,其中又分为3个部分

图一 IEEE浮点标准
那么,浮点数乘法器也主要由下面几个步骤进行
1)、Sign异或
对A,B的符号位异或:so = sa⊕sb;
2)、Exponent相加
Exponent表示的数都是原来的浮点数加上127的结果,计算时A,B分别减去127后得到真实阶码,相加得到C的真实阶码,再加127得到C的Exponent,
expo = (expa - 127) + (expb - 127) + 127 + n;//n是后面的进位,产生进位是1,未产生是0
3)、Significand相乘
由于在IEEE标准中,A,B两个数的最高位1是隐藏的,这里Significand只表示后23位,在计算时需要带上最高位计算,假设A为1.m,B为1.n;
A*B = 1+0.m+0.n+0.m*0.n;
4)、结果规格化及舍入处理
①舍入主要包括两种舍入方式,零舍入和就近舍入,可以根据自己需要选择舍入方式
②A,B两个数相乘时整数位可能会产生进位,如果计算结果整数位位10,11,则需要右移一位,同时Exponent加1
③将最后的结果打包成一个32位符合IEEE标准的数输出
用流程图表示就是:

2、Moldelsim仿真结果
这个网站可以实现IEEE 754 单精度浮点数转换:http://www.styb.cn/cms/ieee_754.php;
100对应的是42C80000,0.5是3F000000

其中float_a和float_b是两个乘数,float_o是输出结果42480000对应的十进制数是50;
实验程序:https://download.csdn.net/download/weixin_42790063/13186995
1839

被折叠的 条评论
为什么被折叠?



