浮点数定点化
FPGA只能处理定点数,Alteral stratix 10可以支持硬浮点,如军方雷达、机器视觉等硬件加速。
浮点数:2.918 3.1415986
浮点转定点:(如16位,表示范围32767~-32768)
定义小数需求多少位(如12位)
整数需求多少位(如3位)
最高位为符号位(针对有符号数,1位)
对于低15位,整数最大表示7,小数最大精度1/(2^12)=0.000244140625,小数最大能表示(1/(2^12))4095=0.999755859375
即使用15位二进制数(最大32767)表示浮点小数(最大7.999755859375)
如对2.918定点化的过程:
量化精度:(8/32768)
量化结果:2.918/(8/32768)=11952.128~=11952
定点化会产生量化误差。
如对3.1415926定点化过程;
3.1415926/(8/32768)=12867.9632896~=12868
浮点数运算:2.918*3.1415926=9.1671672068
11952x12868=153798336
153798336=(0)_(00_1001)_(0010_1010_1100_0110_1100_0000)
符号位1位,表示正数,
整数6位,表示十进制数为9,
小数24位,为(0010_1010_1100_0110_1100_0000)b=(2803392)d,
2803392/(2^24)=0.167095184326171875
所以153798336转换为浮点数为9.167095184326171875
与原浮点数结果有误差。
综上:
第一步:规定位宽
整数位宽:能够表示整数部分的最少bit数。
小数位宽:能够满足最大小数精度的bit数,如小数位宽为N,则能表示的小数精度为1/(2^N)
第二步:确定最大值与最小值
第三步:定点化处理