浮点数定点化的初步认识

本文转载,点击此处查看原文


  FPGA只能处理定点数,Alteral stratix 10可以支持硬浮点,如军方雷达、机器视觉等硬件加速。

  浮点数:2.918 3.1415986
  浮点转定点:(如16位,表示范围32767~-32768)
    定义小数需求多少位(如12位)
    整数需求多少位(如3位)
    最高位为符号位(针对有符号数,1位)**
  对于低15位,整数最大表示7,小数最大精度1/(212)=0.000244140625,小数最大能表示(1/(212))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)
    第二步:确定最大值与最小值
    第三步:定点化处理

### FPGA浮点数定点数转换的方法 在FPGA开发过程中,为了提升运算效率并减少资源消耗,通常会采用将浮点数转换为定点数的方式来进行数值处理。这种方法可以在一定程度上牺牲精度来换取更高的性能。 #### 浮点数定点数概念概述 浮点数是一种用于近似实数的数据类型,其内部结构遵循IEEE 754标准[^4],而定点数则是通过固定的小数点位置来表示有理数的一种方式。对于给定的应用场景来说,选择合适的量参数至关重要,这决定了最终系统的精度和速度之间的平衡[^1]。 #### 转换原理说明 当把一个浮点数映射至对应的整型或短字节形式时,实际上是在执行所谓的“量程缩放”。具体而言,就是找到一对比例系数k以及偏移b使得原值x能够按照如下关系变换: \[ y=k(x-b) \] 这里y即为目标范围内的新表达;而在实际操作中,则更常见的是利用预定义好的缩放因子完成这一过程——比如文中提到过的0.001或是1000这样的例子[^3]。 #### Verilog代码实例展示 下面给出了一段简单的Verilog HDL程序片段作为示范,展示了如何在一个典型的硬件描述环境中实现上述逻辑功能: ```verilog module float_to_fixed ( input wire [31:0] float_in, // 输入的单精度浮点数 output reg signed [7:0] fixed_out // 输出的8位带符号定点数 ); // ...省略中间部分... endmodule ``` 这段伪代码仅作为一个框架性的指导,并未完全展开具体的算法细节。完整的解决方案还需要考虑诸如溢出检测、舍入模式等因素的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值