FPGA 定点小数计算

embedded/2025/3/13 12:17:48/

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格式使用详解


http://www.ppmy.cn/embedded/172237.html

相关文章

Ubuntu 系统上安装 NVIDIA CUDA 的详细步骤

以下是在 Ubuntu 系统上安装 NVIDIA CUDA 的详细步骤,分为 驱动安装 和 CUDA Toolkit 安装 两个部分: 一、准备工作 确认GPU型号支持CUDA 运行以下命令查看NVIDIA GPU型号:GeForce RTX 2080 Ti root@i-28e6iose:/home/ubuntu# lspci | grep -i nvidia 00:0c.0 VGA compatibl…

java核心内容笔记

Java 核心内容学习笔记 一、Java 环境配置 1. JDK 安装 下载地址:Oracle 官方网站安装步骤: 根据操作系统选择对应的安装包运行安装程序,选择安装路径配置环境变量 JAVA_HOME:指向JDK安装目录PATH:添加 %JAVA_HOME%…

【密码学——基础理论与应用】李子臣编著 第三章 分组密码 课后习题

免责声明 这里都是自己搓或者手写的。 里面不少题目感觉有问题或者我的理解有偏颇,请大佬批评指正! 不带思考抄作业的请自动退出,我的并非全对,仅仅提供思维! 题目 逐题解析 3.9 做这题需要有置换和错排的知识储备…

计算机网络:Socket编程 Tcp协议 第二弹

目录 1. Tcp协议接口 1.1 listen监听函数 1.2 accept函数 1.3 connect函数 1.4 inet_ntop函数 2. TcpEchoServer服务 2.1 Common.hpp 2.1 TcpServer.hpp 2.1.1 TcpServer类 2.1.2 InitServer函数 2.1.3 Start函数 2.1.4 HandlerRequest函数 2.3 TcpServer.cc 2.4…

10✨让笔迹突破语言壁垒!Manus AI 多语言识别开启智能书写新纪元

Manus AI在多语言手写识别领域的技术突破主要体现在以下四个方面,通过创新的技术架构和工程化实践解决了传统手写识别的核心痛点: 一、深度学习模型与算法优化 混合神经网络架构 Manus AI采用了**卷积神经网络(CNN)与长短…

【web前端开发】HTML排版标签、HTML语义化标签、常用的文本标签

1、HTML排版标签 标签名 标签含义 单/双标签 h1~h6 …

【VS】vs生成前事件,复制脚本文件至运行目录

​ 在项目目录中添加了一些配置文件,或者脚本文件,运行时需要把这些文件复制运行目录下,visual studio 中 可以设置生成事件,项目生成时自动复制文件到运行目录。 xcopy /Y “KaTeX parse error: Undefined control sequence: \c…

ES搭建详细指南+常见错误解决方法

Elasticsearch(ES)是一款开源的、分布式的、RESTful风格的搜索和数据分析引擎。它用于全文搜索、结构化搜索、分析等场景。以下是Elasticsearch的搭建步骤以及处理常见错误的方法。 Elasticsearch搭建步骤: 1.环境准备: 确保你的…