•
浮点数:小数点浮动,
•
定点数:小数点固定,
小数点固定的位于实数所有数字中间的某个位置
•
需求:浮点数转成定点
•
浮点数例子:
12.918 3.1415926
•
浮点作用:计算精确
•
Fpga
内部无法进行浮点计算:
3.4x5.5
•
只能进行定点计算:小数点固定,固定在哪个位的位置,
fpga
才可以进行处理计算
•
如果 浮点 小数位置不固定。只有 可以处理 硬件浮点的芯片 才可以进行运算
浮点数转 定点数
•
转定点数要定义小数需求多少位,整数需求多少位
•
Eg
:三位整数位宽,
12
位小数位宽,最高位符号位一位。
•
16
位定点数最大
值(正数):
0111_1111_1111_1111
:
16’d32767
•
最小值:
-32768 1000_0000_0000_0000
小数最大12位可以表示的精度
•
低
15
位:
14 13 12
最大表示
7
,小数
12
位
•
2^12=4096
•
把
1
分成
4096
份
,每一份表示精度
•
12
位 最大精度:
1
/4096
•
小数位最大可以表示到
4095x
(
1/409
6
)
:
从
0
增加到
4095
•
•
范围:
7.9997558593~-
7.9997558593
•
无法对
12.918
进行定点化,因为超出
整数位三位位宽的范围
•
看
0.918
可否用
12
位小数位宽
无损失
定点化:算
918
除以
1/4096
能否除尽
•
对
2.918
进行定点化
•
表示范围:
范围:
7.9997558593~- 7.9997558593
,极限值为
8
•
二进制范围:
32767~-32768
•
整个数精度:
2^3
分成
32768
份
8/32768=0.000244140625
•
2.918/
精度
=11952.218
•
有小数,产生量化误差
对
2.918
进行定点化的过程用一位符号位
3
位整数位
12
位小数位表示:
•
2.918
除
以精度
•
精度
=8/32768
•
2.918/
精度
= 11952.128
约等于
11952
:
2.918
含有多少个这样的精度
•
这个
值就是定点后的
2.918
•
有
0.128
的定点误差
•
定点
化带来量化误差
对3.1415926进行定点化
•
表示
3.1415926:3.1415926/
精度
=12867.9632896
约等于
12868
•
12868
再转成浮点数
12868
转二进制:
0011_0010_0100_0100
•
整数部分:
3
;小数部分:
2^(-3)+2^(-6)+2^(-10)
•
小数部分:
0010_0100_0100=580
•
580/4096
•
量化后的数值为:
3.1416015625
•
误差为:
3.1416015625-3.1415926
总结:
•
1
位符号位
m
位正数位
n
位小数位
•
精度:
2^m/2^(
m+n
)
•
对某个数
a.b
进行定点化:这个数除以精度:
a.b
/(
2^m/2^(
m+n
)
)
•
1.
规定位宽
•
2.
知道最大值最小值,进行量化
•
3.
计算 目标计算的值
/
精度
=
定点化的值 四舍五入 得到最终的定点值
•
定点后的值 可以在
fpga
中使用
浮点数乘法:2.918x3.13415926约等于11952x12868
两个三位相乘:整数位扩到六位,
两个12位小数相乘:小数位扩到24位
浮点结果: 2.918x3.13415926=9.1671672068
定点结果: 11952x12868=153798336
11952x12868=153798336二进制结果:00_1001_0010_1010_1100_0110_1100_0000
低24位0010_1010_1100_0110_1100_0000为小数位=2803392
2803392/小数位精度:2803392/2^24 = 0.167095184326171875
结果:9. 167095184326171875
定点结果误差:9. 167095184326171875- 9.1671672068