FPGA中的浮点数定点化理解

学习目标:

FPGA中的浮点数定点化理解

学习内容:

一、浮点数乘以一个较大的整数得到一个较大的整数,然后按二进制进行量化
若乘以较大整数后,仍然得到的是一个带小数的数,则量化存在误差,若乘以较大数后得到的数不带有小数,则不存在量化误差。

二、浮点分整数与小数进行二进制表示从而定点化(二进制的表示范围内,在小数端可能存在量化误差)
FPGA一般只能处理定点数,处理浮点数时需要将浮点数定点化。浮点数转换为定点数需要定义:整数需求多少位、小数需求多少位

例:16位的定点数(Min:-32768,Max:32767)
我们给16位定点数定义:最高位为符号位(负数用的是补码:原码符号位不变、按位取反、末位补一得到补码(这12个字适用于-7+7的原补码装换,对于-8的补码表示为1000,属于-0的表示,属于一种特殊情况,16位二进制原码表示范围是-3276732767 但是里面包含了+0和-0(你写的那个10000…就是-0) . 但我们知道0是不分正负的 所以计算机存储使用的是二进制的补码 用(1000 0000 0000 0000)表示-32768。 1000 0000 0000 0000在有符号声明中才是有意义的)、3位的整数位宽、12位的小数位宽。
**最高位为符号位:**第16位为符号位;
**3位的整数位宽:**第15、14、13位为整数位,加上符号位表示的整数范围为:-8~7
**12位的小数位宽:**小数最大12位表示的小数精度为:1/4096=0.00244140625
(0.00244140625*4095 = 0.999755859375)
该16位定点数表示的浮点数范围为:-8.99755859375~7.99755859375

(1)该种定点化方法的种的无损失定点化(看能否除尽):
比如:12.918
3位整数位宽最大只能表示7 所以整数12需要4位位宽;小数部分0.918 判断:0.918/0.00244140625 = 3760128 所以12位小数位能表示0.918。
(2)有损定点化(整个数或者小数部分除以小数量化分度值得到的小数为量化误差):
除不尽:2.918:2.918/0.00244140625 = 11952.128 ~=11952 表示2.918定点后的值,0.128表示量化误差
这种直接除以量化分度值与整数、小数分开算的表示是一样的道理!这种直接除得到的最后的小数余数就是小数定点化量化误差(因为整数部分除的必然得到的是整数,应为分度值是1/4096)

三、向浮点数那样的符号位、数值位(整数、小数)、指数位进行定点化
像浮点DSP中的浮点数就是这么表示的,这么表示的是可以的,但最根本的是底层的乘法器、加法器对这种表示的浮点数运算的支持,所以定点FPGA的底层乘法器、加法器并不支持这种表示的运算,所以像一中对浮点数进行定点化,从而造成数据的定点化误差。

要想使得FPGA也这么计算浮点数的乘法、加法就需要用内置的乘法器、加法器去搭建!!!,从而达到浮点处理器一样的处理精度!!!

总结:一、三中在二进制可表示的数的范围内可以做到浮点数(float型小数位6到7位,double型小数位15到16位)转化为定点数后做到无误差转化!

学习时间:

First Version:20220207;

学习产出(仿真结果):

FPGA中的两种浮点数定点化的理解

发现问题:

(1)关于-0表示-8的理解

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

embrace_the_sunhaha

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值