网站结构设计的内容,网站302错误,修水县城乡建设局网站,win2008的iis7建网站流程问题由来
定点数和浮点数在嵌入式软件处理和FPGA算法方面使用比较普遍#xff0c;但是遇到FPGA实现32位定点数的处理#xff0c;想要仿真时#xff0c;突然发现全网都在讲浮点数和定点数的格式和理论#xff0c;几乎没有生成的快捷方法#xff0c;好在一片文章出现了一点…问题由来
定点数和浮点数在嵌入式软件处理和FPGA算法方面使用比较普遍但是遇到FPGA实现32位定点数的处理想要仿真时突然发现全网都在讲浮点数和定点数的格式和理论几乎没有生成的快捷方法好在一片文章出现了一点有用的信息记录下来。 原文连接 https://www.elecfans.com/d/2220416.html
matlab处理
小数转化为定点数
在FPGA 设计开发的过程中如果需要使用小数参与相关运算这个时候就需要将小数转化为定点数因为FPGA内部只能处理定点数不能处理小数小数转定点数的过程需要考虑符号位-整数位宽-小数位位宽。
假设将小数2.918量化为16bit的定点数包含1bit符号位3bit整数位12bit小数位。
3bit整数位能够表示的最大整数是73’b11112位小数位能够表示的数据的最小精度为1/2^120.00024414也就是说12位小数位只能表示0.00024414的整数倍12位小数位能够表达的最大小数为 (2^12-1)*0.00024414
ans 0.9998可以发现表示小数的位数越多可以表示的小数范围越大表示的也越精准。小数定点量化过程中使用位宽的大小和数据精度的关系表示小数部分0.918需要的十进制数值为 0.918/0.00024414
ans 3.7601e03也可以使用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^80.00390625. 0.50.250.1250.06250.031250.0156250.00781250.00390625