欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > 32位定点数和32/64位浮点数的二进制生成方法

32位定点数和32/64位浮点数的二进制生成方法

2025/2/24 9:02:45 来源:https://blog.csdn.net/weixin_46720928/article/details/141090064  浏览:    关键词:32位定点数和32/64位浮点数的二进制生成方法

问题由来

定点数和浮点数在嵌入式软件处理和FPGA算法方面使用比较普遍,但是遇到FPGA实现32位定点数的处理,想要仿真时,突然发现全网都在讲浮点数和定点数的格式和理论,几乎没有生成的快捷方法,好在一片文章出现了一点有用的信息,记录下来。
原文连接:
https://www.elecfans.com/d/2220416.html

matlab处理

小数转化为定点数

在FPGA 设计开发的过程中,如果需要使用小数参与相关运算,这个时候就需要将小数转化为定点数,因为FPGA内部只能处理定点数,不能处理小数,小数转定点数的过程需要考虑符号位-整数位宽-小数位位宽。

假设将小数2.918量化为16bit的定点数,包含1bit符号位,3bit整数位,12bit小数位。

3bit整数位能够表示的最大整数是7(3’b111),12位小数位能够表示的数据的最小精度为:1/(2^12)=0.00024414,也就是说12位小数位只能表示0.00024414的整数倍,12位小数位能够表达的最大小数为:

>> (2^12-1)*0.00024414
ans =0.9998

可以发现表示小数的位数越多,可以表示的小数范围越大,表示的也越精准。(小数定点量化过程中使用位宽的大小和数据精度的关系),表示小数部分0.918,需要的十进制数值为:

>> 0.918/0.00024414
ans =3.7601e+03

也可以使用Matlab中的函数完成小数部分的量化。

>>  dec2bin(round(0.918*2^12),12)
ans =
111010110000>> bin2dec('111010110000')
ans =3760

所以小数2.918量化为16bit的定点数结果为:16’b0100111010110000

问题 :将浮点数-3.125量化为8bit的定点数,包含1bit符号位,4bit整数位,3bit小数位。

方法1 :针对负数-3.125,首先考虑其绝对值3.125,其符号位和整数部分5bit数据为:5’b00011,小数部分为0.125量化的结果为:

>> dec2bin(round(0.125*2^3),3)
ans =
001

所以,绝对值3.125量化8bit的结果为:8’b00011001

因为是负数,需要求其补码,求补码:按位取反再加1,

得到:8’b11100111,

方法2 :8bit能够表示的最大的数据是2^8,量化后的二进制数据中包含3位小数位,计算过程中需要修正,使用公式如下:

> > dec2bin(round(2^8-abs(-3.125)*2^3),8)
ans =
11100111

得到量化后的结果为:8’b11100111。

二进制浮点数的生成

    顺便提下,浮点数的二进制转换,有以下在线转换比较方便:

https://tooltt.com/floatconverter/
在这里插入图片描述
可见,同样是-1.3,用单精度浮点表示比双精度浮点表示误差大。

总结

在使用XILINX VIVADO 中的IP核,都是以Q表示法表示。
(1) Q表示法:Qn表示低n位为小数,其余位为符号位和整数位。
(2) S表示法:Sn中低(15-n)为小数,其余位符号位和整数位。
在使用XILINX VIVADO 中的IP核,都是以Q表示法表示,例如定点转浮点或浮点转定点的IP核:
在这里插入图片描述

在这里插入图片描述
其中N为定点数的位数(排除符号位),n为定标的位数,其中n越大则数据越精确,但表示的范围也会越小。
假设有一个16位的变量,设定小数占8位,那么它的精度为8位,那么它的精度是多少呢? 其实就是1/2^8=0.00390625.

      (0.5,0.25,0.125,0.0625,0.03125,0.015625,0.0078125,0.00390625)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com