【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> 位的限制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/752397.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣hot100:33. 搜索旋转排序数组(二分的理解)

33.搜索旋转排序数组 ​ 这是一个非常有趣的问题&#xff0c;如果不要求使用O(logn)应该没人会想到吧。。 方法一&#xff1a; 极致的分类讨论。旋转排序数组&#xff0c;无非就是右边的增区间的数小于左边的增区间的数&#xff0c;然后依次排序。因此我们只需要分三类讨论即可…

CMAKE_CUDA_ARCHITECTURES set to ‘native’多版本与版本号矛盾问题,报错

CMAKE_CUDA_ARCHITECTURES set to ‘native’多版本与版本号矛盾问题&#xff0c;报错 1. 报错提醒如下图2. 原因本地安装多个cuda版本导致native寻找到多个版本&#xff0c;导致报错3. 具体配置需要根据你的显卡型号来确认 1. 报错提醒如下图 2. 原因本地安装多个cuda版本导致…

【prometheus】k8s集群部署prometheus server(文末送书)

目录 一、概述 1.1 prometheus简介 1.2 prometheus架构图 1.3测试环境 二、k8s集群中部署prometheus server 2.1创建sa账号和数据目录 2.2安装prometheus 2.2.1创建configmap存储卷存放prometheus配置信息 2.2.2 通过deployment部署prometheus 2.2.3prometheus pod创…

ConsiStory:Training-Free的主体一致性生成

Overview 一、总览二、PPT详解 ConsiStory 一、总览 题目&#xff1a; Training-Free Consistent Text-to-Image Generation 机构&#xff1a;NVIDIA, Tel-Aviv University 论文&#xff1a;https://arxiv.org/pdf/2402.03286.pdf 代码&#xff1a;https://consistory-paper.g…

zookeeper快速入门三:zookeeper的基本操作

在zookeeper的bin目录下&#xff0c;输入./zkServer.sh start和./zkCli.sh启动服务端和客户端&#xff0c;然后我们就可以进行zookeeper的基本操作了。如果是windows&#xff0c;请参考前面章节zookeeper快速入门一&#xff1a;zookeeper安装与启动 目录 一、节点的增删改查 …

【Java基础知识总结 | 第三篇】深入理解分析ArrayList源码

文章目录 3.深入理解分析ArrayList源码3.1ArrayList简介3.2ArrayLisy和Vector的区别&#xff1f;3.3ArrayList核心源码解读3.3.1ArrayList存储机制&#xff08;1&#xff09;构造函数&#xff08;2&#xff09;add()方法&#xff08;3&#xff09;新增元素大体流程 3.3.2ArrayL…

react03

react03 修改脚手架创建的打包命令 根据scripts中的命令&#xff0c;执行npm run eject ,输入y, 如果对原始的脚手架文件有过改动需要进行将修改后的文件提交到git 历史区 &#xff0c;防止暴露后的代码覆盖我们自己的文件 git 提交&#xff1a; git add . git commit -m ‘…

java----网络编程(一)

一.什么是网络编程 用户在浏览器中&#xff0c;打开在线视频网站&#xff0c;如优酷看视频&#xff0c;实质是通过网络&#xff0c;获取到网络上的一个视频资源。 与本地打开视频文件类似&#xff0c;只是视频文件这个资源的来源是网络。所谓网络资源就是网络中获取数据。而所…

LabVIEW提升舱救援通讯监测系统

LabVIEW提升舱救援通讯监测系统 随着科技的进步&#xff0c;煤矿救援工作面临着许多新的挑战。为了提高救援效率和安全性&#xff0c;设计并实现了一套基于LabVIEW的提升舱救援通讯监测系统。该系统能够实时监控提升舱内的环境参数和视频图像&#xff0c;确保救援人员和被困人…

el-input设置max、min无效的解决方案

目录 一、方式1&#xff1a;type“number” 二、方式2&#xff1a;oninput&#xff08;推荐&#xff09; 三、计算属性 如下表所示&#xff0c;下面为官方关于max&#xff0c;min的介绍&#xff1a; el-input&#xff1a; max原生属性&#xff0c;设置最大值min原生属性&a…

06.共享内存

1.内存映射&#xff08;mmap&#xff09; 我们在单片机中首先接触到了映射的概念 将一个寄存器的地址映射到了另外的一个存储空间中 内存映射: 内存映射&#xff08;Memory Mapping&#xff09;是一种在计算机科学中使用的技术&#xff0c;它允许将文件或其他设备的内容映射…

idea warning:java源值已过时将在未来所有发行版中删除

在idea中运行maven项目 如果出现idea warning:java源值已过时将在未来所有发行版中删除&#xff0c;详见如下截图所示&#xff1a; 注意&#xff1a;jdk8 要解决这个警告需要设置3个地方 首先打开File->Project Structure中的Project&#xff0c;将SDK和language level都设…

五、保持长期高效的七个法则(二)Rules for Staying Productive Long-Term(1)

For instance - lets say youre a writer.You have a bunch of tasks on your plate for the day, but all of a sudden you get a really good idea for an essay. You should probably start writing now or youll lose your train of thought.What should you do? 举例来说…

分布式搜索引擎(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…

机器学习(26)回顾gan+文献阅读

文章目录 摘要Abstract一、李宏毅机器学习——GAN1. Introduce1.1 Network as Generator1.2 Why distribution 2. Generative Adversarial Network2.1 Unconditional generation2.2 Basic idea of GAN 二、文献阅读1. 题目2. abstract3. 网络架构3.1 Theoretical Results 4. 文…

Oracle P6 Professional 配置连接数据库总结

前言 P6 Professional作为Oracle P6计划管理系统的重要套件之一&#xff0c;其操作出色&#xff0c;体检佳&#xff0c;是非常多的计划工程师跟踪项目进度计划的辅助工具。自20年前&#xff0c;Professional一直在不断的演变更新&#xff0c;以适应当前的新技术&#xff0c;从…

【MySQL】MySQL事务

文章目录 一、CURD不加控制&#xff0c;会有什么问题&#xff1f;二、事务的概念三、事务出现的原因四、事务的版本支持五、事务提交方式六、事务常见操作方式七、事务隔离级别1.理解隔离性12.隔离级别3.查看与设置隔离性4.读未提交【Read Uncommitted】5.读提交【Read Committ…

【Numpy】练习题100道(76-100题完结)

&#x1f33b;个人主页&#xff1a;相洋同学 &#x1f947;学习在于行动、总结和坚持&#xff0c;共勉&#xff01; #学习笔记# Git-hub链接 题目列表&#xff08;题解往下翻&#xff09; 76.考虑一个一维数组Z&#xff0c;构建一个二维数组&#xff0c;其第一行为(Z[0],Z[…

【鸿蒙HarmonyOS开发笔记】组件编程技巧之使用@Builder装饰器实现UI结构复用

概述 当页面有多个相同的UI结构时&#xff0c;若每个都单独声明&#xff0c;同样会有大量重复的代码。为避免重复代码&#xff0c;可以将相同的UI结构提炼为一个自定义组件&#xff0c;完成UI结构的复用。 除此之外&#xff0c;ArkTS还提供了一种更轻量的UI结构复用机制Build…

小白DB补全计划Day1-LeetCode:SQL基本操作select

前言&#xff1a;找工作&#xff08;主人&#xff09;的任务罢了 链接&#xff1a;1757. 可回收且低脂的产品 - 力扣&#xff08;LeetCode&#xff09; 584. 寻找用户推荐人 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 对DB篇的SQL章不太知道怎么写…