zoukankan      html  css  js  c++  java
  • FPGA浮点数定点化

      因为在普通的fpga芯片里面,寄存器只可以表示无符号型,不可以表示小数,所以在计算比较精确的数值时,就需要做一些处理,不过在altera在Arria 10

    中增加了硬核浮点DSP模块,这样更加适合硬件加速和做一些比较精确的计算。

      浮点数和定点数的区别:定点数的小数点是固定的,而浮点数的小数点的位置不确定,举个例子,定点数 1.1*1.1 = 1.2(定点一位小数),浮点数1.1*1.1

    =1.21,浮点数的小数点发生了移动,而定点数舍弃了一位,小数点的位置没有变。

      在verilog里面,如果用用16位二进制表达定点小数,最高位就是符号位。我们把小数点之后的N位叫做Qn,例如小数点之后有12位叫做Q12格式的定点小数

    而Q0就是我们所说的整数。

      Q12的最大正数是0111.1111_1111_1111,第一个0是符号位,后面的数都是1,那么这个数的十进制就是0x7fff/2^12=7.99999......,为啥是除2^12呢,因为是

    十二位小数,0.1111_1111_1111接近与整数1,这样看有多少个1.

      反过来,一个实际的数转换成Qn型的定点小数就是就是乘上2^n

      举个例子:

      2.1*2.2 = 4.62

      先转换成定点数 2.1 * 2^!2  = 8601.6 = 8602

              2.1 * 2^12 = 9011.2 = 9011

      定点数相乘        8602*9011 = 77512622

      定点数转实际的数

             因为是两个定点数相乘,所以,小数位变成24位 。整数位变成6位

             77512622/2^24=4.62011.....和i结果差距很小

      最后记录有符号数的计算

      正数 原码 = 反码 = 补码

      负数 反码 = 原码的符号位不变,其他位取反

         补码 = 反码 + 1

      举个例子 : 00110010 + 10000011(负数补码)=10110101,因为结果是负数的补码,换算成原码是11001011,和的绝对值是1001011

  • 相关阅读:
    动态属性 的简单思考
    千发 邮件营销小工具 完全免费
    基于角色的代码权限
    VS2005对NHibernate映射文件的智能感知功能
    在ASP.NET中使用脚本代码保护功能
    ASP.NET 开发, PageBase, ModuleBase
    在自定义HttpHandler中使用Session
    C# 应用程序许可控制
    TCE条件表达式
    NHibernate 基本使用(一对一、组件、一对多)
  • 原文地址:https://www.cnblogs.com/bixiaopengblog/p/7728538.html
Copyright © 2011-2022 走看看