当前位置: 首页 > news >正文

【LabVIEW FPGA入门】浮点数类型支持

        如今,使用浮点运算来设计嵌入式系统的需求变得越来越普遍。随着 FPGA 因其固有的大规模并行性而在浮点性能方面继续超越微处理器,这种情况正在加剧。线性代数和数字信号处理 (DSP) 等高级算法可以受益于浮点数据类型的高动态范围精度。LabVIEW FPGA 通过 IP 集成节点和 Xilinx 核心生成器 IP 选板在之前的版本中包含了浮点支持。LabVIEW FPGA 2012 原生支持浮点数据类型与常量、原语、内存和 FIFO 一起使用,以继续支持要求苛刻的图形、高级无线通信、仪器仪表、高性能计算、工业控制、音频和医学成像应用。这将使设计人员能够直接将现有的自定义算法转移到 FPGA,而无需调整代码。

单精度浮点数据类型

        这种浮点格式占用 4 个字节(32 位)并表示较宽的动态范围的值。在 LabVIEW FPGA 2012 中,该数据类型符合IEEE Std 754-2008标准(次正规数除外)。32 位基 2 格式正式称为二进制 32,但通常必须称为单 (SGL)。

  • 符号位:1位
  • 指数宽度:8 位  
  • 有效位数精度:23 位

        单精度数据类型作为 SGL 数值常量以及数学和科学常量包含在 LabVIEW FPGA 数字面板中。

        除了包含 SGL 常量之外,还针对与 FPGA 上的 SGL 数据类型一起使用而优化了一组原语。这些函数仅适合在单周期定时循环 (SCTL) 之外使用。如果代码需要使用带有浮点运算符的 SCTL,则建议使用 IP 集成节点或Xilinx Core Generator IP 浮点调色板。

定点到单精度浮点数据类型转换

        在 LabVIEW FPGA 2012 之前,浮点数据类型的使用仅限于复杂的转换。这意味着执行常见指令(例如目标到主机 DMA 通信和高吞吐量数学)需要额外的编程工作。从定点到单精度浮点的转换需要由应用程序的主机或实时部分完成,这主要是由于在 FPGA 上实现此转换的复杂性。如果在主机端执行此转换会非常耗时,但仍然比在 FPGA 中更容易实现。此外,在主机上执行定点到浮点转换会使主机的速度性能降低高达 40%。此问题的解决方法是在将定点数据发送到主机之前将其编码为整数 U32 表示形式,以减少此转换对主机代码执行速度的影响。这导致在 FPGA 中实现复杂编码需要额外的工作,并且主机仍然需要类型转换为单精度浮点。有关此过程的更多详细信息,请访问  LabVIEW FPGA 上的定点到单点 (SGL) 转换文档。

        另一方面,LabVIEW FPGA 包含其他软件开发生产力工具,例如 Xilinx CORE Generator IP Palette,可通过代码重用实现浮点实现。该调色板包含生成用于转换为浮点数的 IP 和浮点数基本操作的代码。

        此函数是转换选项板的一部分,允许用户执行单精度浮点数据类型运算,而无需涉及额外的代码。当涉及到强制时,该功能变得尤为重要,即FPGA VI中发生的自动转换会消耗大量逻辑资源,特别是当终端被强制为SGL数据类型时。因此,作为一般规则,始终建议使用转换函数显式转换数据类型。

支持单精度浮点数据类型的附加函数

        除了常量、原语和转换函数之外,目标范围、主机到目标 DMA、目标到主机 DMA 以及对等写入器/读取器 FIFO 还支持单精度浮点。此外,内存元素可以与 SGL 数据类型一起在其目标范围和 VI 定义的实现中使用。这种支持可用于过去能够执行浮点运算的元素,例如 Xilinx 核心生成器 IP 和 IP 集成节点,以提高性能和功能。

单精度浮点数据类型开发注意事项

        在 FPGA 上开发单精度浮点数据类型的应用程序时,最重要的是要考虑到该数据类型比定点数据类型使用更多的资源,并且需要更多的时钟周期来完成操作。虽然定点数据类型在速度和资源利用率方面对于基于硬件的设计非常有效,但它无法提供浮点数据类型所提供的灵活性。在设计具有特定时序要求和有限资源的大型应用程序时,这一点变得尤其重要。仅建议在不关心资源使用和时序的应用中使用 FPGA 上的浮点数据类型。

        对于具有严格时序要求的应用,设计人员仍然可以使用单周期定时循环 (SCTL) 内的 IP 集成节点和 Xilinx 核心生成器 IP 面板在 FPGA 上编程高级算法。这允许开发人员在利用浮点运算的同时保持时序要求。值得注意的是,虽然浮点数据类型提供了许多好处,但在单周期定时循环中使用时它的支持有限,并且对于某些操作,它使用的 FPGA 资源比定点数据类型要多得多。具有单精度浮点数据类型的单周期定时循环支持以下功能:

  • IP集成节点
  • Xilinx 核心生成器 IP
  • 记忆项目
  • 先进先出
  • 寄存器
  • 局部变量和全局变量

        此外,当前 LabVIEW FPGA 2012 不支持次正规数(非正规化数)。次正规数是小于最小正规数的任何非零数。例如,如果使用浮点除法函数来除2个数,并且其结果是尾数小于1的极小数,则该结果可以表示为次正规数。Xilinx 浮点除法函数将此结果视为零,并带有取自次正规数的符号。

混合定点和浮点数据类型

        考虑到浮点运算的资源消耗,在某些应用程序中将定点与浮点运算符混合可能会很有用。也就是说,如果我们的进程的输入已经是定点数,那么以这种格式执行基本操作就变得很自然。但是,当算法中出现更高级的操作时,建议切换到浮点实现。这是在 FPGA 上实现乘法累加器单元 (MAC) 的情况,FPGA 是 DSP 应用的基本构建块。

        乘法累加运算是计算两个数字的乘积并将乘积添加到累加器的常见步骤。当以定点实现时,FPGA 设计受益于该数据类型提供的卓越速度以及所需的最少硬件资源。然而,当增加算法的大小和MAC单元必须处理的迭代次数时,我们可能会遇到定点数溢出的问题。另一方面,基于浮点的 MAC 单元由于这种数据类型固有的宽动态范围而没有这个问题;然而,其实施可能会耗费资源且速度较慢。因此,需要在数据类型表示容量、速度和空间之间进行权衡。在同一算法中混合两种数据类型将减少 FPGA 的资源消耗,从而消除溢出错误的可能性。

        上面的框图演示了在 FPGA 中实现简单乘法器累加器算法的三种不同方法。该算法将 2 个数字相乘,然后将它们迭代地添加到累加器中,直到由于数据类型限制而达到饱和状态。具有最佳性能的循环是定点实现,尽管它随着时间的推移很快饱和。由于其高动态范围精度,浮点实现大大优于定点实现,因此不会出现此问题;尽管如此,这种实施方式仍会带来高昂的资源消耗成本。混合两种数据类型可以实现更加平衡的 FPGA 设计,满足特定的性能要求。虽然浮点算法可以直接在 FPGA 上执行,但混合实现可以在算法内的关键计算中提供更高的灵活性和卓越的性能。

 

对定点和浮点数据类型进行基准测试

        性能、资源消耗、代码重用、算法复杂性和功能兼容性是决定在 FPGA 代码中何处使用特定数据类型时需要考虑的主要因素。本节介绍基于LabVIEW FPGA 2012 模块控制面板中包含的 PID 算法的基准测试。针对基于定点和单精度浮点的两种 PID 实现,分析了设备利用率和定时功能。本研究使用 Xilinx 13.4 编译工具的默认编译设置。定点和浮点 PID 算法在带有 Virtex-5 LX110 FPGA 的 NI PXI-7854R 目标上实现,以服务于该基准测试。有关所用 VI 的更多详细信息,请参阅下载部分。

        设备利用率图和最终时序性能被用作两种实现的比较参数。正如预期的那样,单精度浮点实现显着增加了 PID 设计所需的资源量;然而,由于 24 位有效数和增加的动态范围,它具有更高的准确性和灵活性。此外,浮点实现存在较高的延迟,但仍然可以实现接近 800kS/s 的 PID 循环速率。这样,完全以浮点编程的定制复杂算法可以直接在 FPGA 中使用,克服了定点实现的限制。例如,在此 PID 示例中,浮点实现不受 16 位宽度 PID 输出或 PID 增益限制为定点表示的 <±,16,8> 位的限制。

相关文章:

【LabVIEW FPGA入门】浮点数类型支持

如今&#xff0c;使用浮点运算来设计嵌入式系统的需求变得越来越普遍。随着 FPGA 因其固有的大规模并行性而在浮点性能方面继续超越微处理器&#xff0c;这种情况正在加剧。线性代数和数字信号处理 (DSP) 等高级算法可以受益于浮点数据类型的高动态范围精度。LabVIEW FPGA 通过…...

ffmpeg 滤镜实现不同采样率多音频混音

音频混音在音视频开发中是十分重要的一个环节,所谓音频混音就是将所有需要混音的数据相加得到混音数据,然后通过某个算法进行非法数据的处理;例如相加数值超过最大值,最小值等! 在实际的音频开发中,要实现混音的流程如下: 因此我们的编码实现就分为五部分:寻找…...

UserTCP 传输数据时如何保证数据的可靠性?并以LabVIEW为例进行说明

TCP&#xff08;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议。它通过多种机制保证数据的可靠性&#xff0c;确保数据在网络中从一端传输到另一端时&#xff0c;顺序正确且无误差。以下是TCP实现数据可靠性的一些关键机制&#xff1a; 1. 三…...

基于粒子群算法的分布式电源配电网重构优化matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1基本PSO算法原理 4.2配电网重构的目标函数 5.完整工程文件 1.课题概述 基于粒子群算法的分布式电源配电网重构优化。通过Matlab仿真&#xff0c;对比优化前后 1.节点的电压值 2.线路的损耗,这里计…...

mysql提权总结(自学)

目录 MySQL数据库提权简介 UDF提权 原理 利用条件 利用准备 利用过程 MOF提权 原理 利用条件 利用过程 自启动提权 反弹shell提权 总结 MySQL数据库提权简介 一般数据库提权思路&#xff1a; 检测数据库的存在&#xff08;探测端口&#xff09;获取到数据库的权限…...

[数据集][目标检测]铝片表面工业缺陷检测数据集VOC+YOLO格式400张4类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;400 标注数量(xml文件个数)&#xff1a;400 标注数量(txt文件个数)&#xff1a;400 标注类别…...

晶体管-二极管三极管MOS管选型参数总结

🏡《总目录》 目录 1,概述2,二极管选型参数2.1,类型(Type)2.2,最大整流电流(IF)2.3,反向击穿电压(VRRM)2.4,正向压降(VF)2.5,反向电流(IR)2.6,结温(Tj)2.7,热阻(Rth)2.8,频率特性2.9,包装类型...

ssh命令——安全远程连接Linux服务器

ssh命令是Secure Shell的简写&#xff0c;其功能是安全地远程连接服务器&#xff0c;ssh是OpenSSH套件中的客户端连接工具&#xff0c;通过SSH加密协议进行远程主机访问&#xff0c;并对远程服务器进行管理。 ssh命令的基本语法格式如下&#xff1a; ssh [选项] 主机名或IP地…...

Ansible非标记语言YAML与任务剧本Playbook

前言 上篇介绍了 Ansible 单模块&#xff08;AD-Hoc&#xff09;的相关内容Ansible自动化运维Inventory与Ad-Hoc-CSDN博客&#xff0c;Ad-Hoc 命令是一次性的、即时执行的命令&#xff0c;用于在远程主机上执行特定任务&#xff0c;这些命令通常用于快速执行简单的任务。当需要…...

WPF监控平台(科技大屏)[一]

跟着B站的视频敲了一个略微复杂的WPF界面,链接如下.在这里我详细的写一份博客进行设计总结. 系统介绍和配置及主窗口设计_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Wy421Y7QD?p1&vd_source4796b18a2e4c1ec8a310391a5644b6da 成果展示 实现过程 总体来说,我的…...

HTML详细教程

文章目录 前言一、快速开发网站最简模板二、HTML标签1.编码2.title3.标题4.div和span5.超链接6.图片7.列表8.表格9.input系列10.下拉框11.多行文本 三、GET方式和POST方式1.GET请求2.POST请求 前言 HTML的全称为超文本标记语言&#xff0c;是一种标记语言&#xff0c;是网站开发…...

【excel】常用的50个函数与基础操作(统计函数)

统计函数 &#xff08;1&#xff09;数组函数操作 1.【SUM】求和 SUM&#xff08;数字1&#xff0c;数字2&#xff0c;数字3…&#xff09; 2.【SUMIF】单条件求和 SUMIF &#xff08;条件区域&#xff0c;条件&#xff0c;求和区域&#xff09; 3.【SUMIFS】(单)多条件求和…...

MATLAB中的cell数组和结构体

MATLAB中的Cell数组和结构体 MATLAB作为一种高级编程语言和数值计算环境&#xff0c;为用户提供了多种数据结构&#xff0c;以便更灵活、高效地处理数据。其中&#xff0c;cell数组和结构体是两种非常重要的数据结构&#xff0c;它们在MATLAB编程和数据管理中发挥着关键作用。…...

Python深度学习之路:TensorFlow与PyTorch对比【第140篇—Python实现】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 Python深度学习之路&#xff1a;TensorFlow与PyTorch对比 在深度学习领域&#xff0c;Tens…...

Unity中UGUI中的PSD导入工具的原理和作用

先说一下PSD导入工具的作用&#xff0c;比如在和美术同事合作开发一个背包UI业务系统时&#xff0c;美术做好效果图后&#xff0c;程序在UGUI中制作好界面&#xff0c;美术说这个图差了2像素&#xff0c;那个图位置不对差了1像素&#xff0c;另外一个图大小不对等等一系列零碎的…...

删除 Oracle 软件和数据库教程

1.使用 deinstall 工具删除安装的 Oracle 软件的可执行文件和配置文件 [oracleocpstudy admin]$ cd $ORACLE_HOME [oracleocpstudy db_1]$ cd deinstall [oracleocpstudy deinstall]$ ls bootstrap_files.lst bootstrap.pl deinstall deinstall.pl deinstall.xml jlib …...

C语言自学笔记8----C语言Switch语句

C 语言 switch 语句 switch语句使我们可以执行许多代替方案中的一个代码块。 虽然您可以使用if…else…if阶梯执行相同的操作。但是&#xff0c;switch语句的语法更容易读写。 switch … case的语法 switch (expression) { case constant1: // 语句 break; case constant2: // …...

分布式搜索引擎(3)

1.数据聚合 **[聚合&#xff08;](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html)[aggregations](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html)[&#xff09;](https://www.ela…...

PostgreSQL开发与实战(6.3)体系结构3

作者&#xff1a;太阳 四、物理结构 4.1 软件安装目录 bin //二进制可执行文件 include //头文件目录 lib //动态库文件 share //文档以及配置模版文件4.2 数据目录 4.2.1 参数文件 pg_hba.conf //认证配置文件 p…...

ISIS接口MD5 算法认证实验简述

默认情况下&#xff0c;ISIS接口认证通过在ISIS协议数据单元&#xff08;PDU&#xff09;中添加认证字段&#xff0c;例如&#xff1a;MD5 算法&#xff0c;用于验证发送方的身份。 ISIS接口认证防止未经授权的设备加入到网络中&#xff0c;并确保邻居之间的通信是可信的。它可…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域&#xff0c;REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名&#xff0c;不断适应这些现代范式的需求。随着不断发展的生态系统&#xff0c;Java 在现代 API 方…...

「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案

在移动互联网营销竞争白热化的当下&#xff0c;推客小程序系统凭借其裂变传播、精准营销等特性&#xff0c;成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径&#xff0c;助力开发者打造具有市场竞争力的营销工具。​ 一、系统核心功能架构&…...

LangFlow技术架构分析

&#x1f527; LangFlow 的可视化技术栈 前端节点编辑器 底层框架&#xff1a;基于 &#xff08;一个现代化的 React 节点绘图库&#xff09; 功能&#xff1a; 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...

认识CMake并使用CMake构建自己的第一个项目

1.CMake的作用和优势 跨平台支持&#xff1a;CMake支持多种操作系统和编译器&#xff0c;使用同一份构建配置可以在不同的环境中使用 简化配置&#xff1a;通过CMakeLists.txt文件&#xff0c;用户可以定义项目结构、依赖项、编译选项等&#xff0c;无需手动编写复杂的构建脚本…...