FPGA 定点小数计算

1. 使用FPGA实现定点小数计算

FPGA中不适合做浮点数运算,但有时又会涉及到小数的运算,这时就需要用到Q格式数据。

2. Q格式

Q:如果想要表示一个小数,但FPGA里没法加小数点,那该如何表示小数呢?

A:可以使用定点小数!

定点小数的小数点预设在固定的位置,因此不用加小数点就可以区分二进制数的整数部分和小数部分,Q格式就是所谓的定点小数表示方法。

通常我们用Qn来表示定点小数,n代表小数的个数,精度为2^(-n),如Q16,它有16位二进制来表示小数点后的数据,精度为 2^(-16) ;Q8,它有8位二进制来表示小数点后的数据,精度为 2^(-8)。

Q:如何将十进制小数 X 转换成二进制定点小数 X' ?(以Q8为例)

A:先把X就当成二进制数!先转换整数部分,数据格式是Q8,整数直接左移8位给小数留8位空间,也就是乘(2^8);再转换小数部分,数据格式是Q8,也是左移8位以保留小数的前8位,也就是乘 (2^8)。因此,整体转换方法就是直接乘 (2^8)!!!

3. 运算

Example 1: 3.14 + 3.14 = ? (16位Q8 = 1 + 7 + 8,1位符号位,7位整数位,8位小数位)

解:

  1. 数值转换 3.14 x (2^8) = 16'd804 = 16'b‭0000_0011_0010_0100‬
  2. 加法运算 3.14 + 3.14 = 16'b‭0000_0011_0010_0100‬ + 16'b‭0000_0011_0010_0100‬ = ‭16'b0000_0110_0100_0110‬ = 16'd1608
  3. 结果展示 16'd1608 / (2^8) = 6.28125 ; 3.14 + 3.14 = 6.28 ;结果相差0.00125,结果的小数前两位相同,与精度一致。

Example 2: 3.14 x 3.14 = ? (16位Q8 = 1 + 7 + 8,1位符号位,7位整数位,8位小数位)

解:

  1. 数值转换 3.14 x (2^8) = 16'd804 = 16'b‭0000_0011_0010_0100‬
  2. 乘法运算 3.14 x 3.14 = 16'b‭0000_0011_0010_0100‬ x 16'b‭0000_0011_0010_0100‬
    = ‭32'b‭0000_0000_0000_1001_1101_1101_0001_0000‬ = 32'd‭646416‬
  3. 结果展示 32'd‭646416‬ / (2^16) = 9.863525390625 ; 3.14 x 3.14 = 9.8596 ;结果相差0.003925390625‬,结果的小数前两位差0.01,与精度一致。

Ref 1:基于C语言的Q格式使用详解

相关推荐
FreakStudio11 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
✎ ﹏梦醒͜ღ҉繁华落℘16 天前
单片机基础知识---stm32单片机的优先级
stm32·单片机·mongodb
坏孩子的诺亚方舟16 天前
FPGA系统架构设计实践15_高云Arora V系列时钟体系
fpga开发·系统架构
u1521096484916 天前
S.S.Audio PRO A2音频隔离器
嵌入式硬件·音视频·实时音视频·视频编解码·视频
zd84510150016 天前
RS485 总线详解
单片机·嵌入式硬件
半条-咸鱼16 天前
【STM32】I2C协议原理、HAL读写与OLED显示操作
嵌入式硬件·c·信息与通信
wohoo_wangzi16 天前
苏州晟雅泰电子:关于W25Q128JVSIQ这个芯片物料的参数,规格及应用领域
嵌入式硬件
✎ ﹏梦醒͜ღ҉繁华落℘16 天前
编程基础 --高内聚,低耦合
c语言·单片机
FPGA小徐16 天前
入门 CNN 结构全解析|从流程图理论到 FPGA Verilog 硬件实现(含习题带讲解)
fpga开发
科芯创展16 天前
1A,1MHz,30VIN,XZ4115,降压恒流LED驱动芯片
单片机·嵌入式硬件