Fixed point 设计

单片机的浮点与定点

》市面上大部分的单片机都是定点单片机,只有一些对数据处理要求比较高的单片机才会集成浮点处理单元。

  • 浮点单片机:便于浮点编程,省去了人为定标的麻烦,而且同样的位数,浮点可以表示更大范围内的数。但浮点单片机硬件复杂、功耗更大,价格也会相应高些;
  • 定点单片机:定点运算处理效率高、大小更小、功耗更低、内存占用小,但需要人为地给各个数据定标。

工程算法开发流程

image

选择合适的定标值,以确保运算结果在符合应用要求的范围之内,这是定点化过程中最重要也是最难的一个问题。

选取合适的定标值(加载操作数)

  • 定标的大小,影响着整数部分和小数部分的位数,定标的过程其实是在操作数动态范围和精度之间做权衡的过程:Q小,则表示范围大;Q大,则精度高。
  • 设一个变量可能出现的最大绝对值为 | max|,n 为正整数,满足 2^(n-1) < |max| < 2^n,则定标 Q 按如下规则选取最合适:
Q = 有效数据位 – n

对于 32 位的有符号数,数据有效位 = 31。如 | max| = 2.75,选 Q = 31 – 2 =29 是最合适的。

结果重新定标(返回结果)

个定点数运算完成之后,所得结果的定标、动态范围、精度要求等都可能发生了变化,因此可能需要进行重新定标。
比如 Q15*Q15 -> Q30,但我们依然希望得到一个 Q15 的数怎么办?其实只需做一个简单的右移 15 位操作就好,其它情况同理。

定点与浮点芯片相互支持

  • 浮点芯片均能支持定点运算,只是在一般定点芯片的基础上添加了额外的浮点处理硬件单元和指令,使得芯片得以支持快速的浮点运算;
  • 定点芯片也能支持浮点运算。很多编译器都为定点芯片提供了相应的浮点处理库,通过软件的方式同样来支持 float 型变量的操作。但这样做会使计算变得很低效在实时性要求高的情况下,定点化依然是必不可少的一环。

参考文献

1.嵌入式编程中,你应该知道的定点化知识
2.使用定点硬件的好处

你可能感兴趣的:(Fixed point 设计)