【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://xiahunao.cn/news/2871115.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【Godot4自学手册】第二十五利用PointLight2D节点点缀夜晚灯光

夜晚来临了&#xff0c;少不了灯光的出现&#xff0c;今天就用PointLight2D节点来实现夜晚的忽闪忽闪灯光效果。 一、添加场景 1、添加PointLight2D场景 单击添加新节点按钮&#xff0c;在场景面板中选择其他节点&#xff0c;在弹出创建Node对话框中选择 PointLight2D&#…

Vue中使用Lodash

Vue中使用Lodash 前言安装Lodash引用方法vue中使用1、cloneDeep 深拷贝2、uniq 数组去重3、uniqWith 数组对象去重 isEqual 深度比对4、intersection 提取数组相同元素5、chunk 数组切分6、compact去除假值7、reject:根据条件删除指定的值8、find:查找结果的第一个值9、filter:…

基于sortablejs实现拖拽element-ui el-table表格行进行排序

可以用原生的dragstart、drag、dragend、dragover、drop、dragleave实现这个效果&#xff0c;但是有现成的轮子就不要重复造了&#xff0c;看效果&#xff1a; <template><el-table :class"$options.name" :data"tableData" ref"table"…

Android Kotlin知识汇总(一)编程语言

在 2019 年 Google I/O 大会上宣布今后将优先采用 Kotlin 进行 Android 开发。Kotlin 是一种富有表现力且简洁的编程语言&#xff0c;不仅可以减少常见代码错误&#xff0c;还可以轻松集成到现有应用中。如果您想构建 Android 应用&#xff0c;建议您从 Kotlin 开始着手&#x…

java.lang.NoSuchMethodException异常解决

标题 java.lang.NoSuchMethodException异常的正确解决方法摘要&#x1f680; 异常介绍&#x1f9d0; 异常原因分析&#x1f6e0; 解决方法核对方法名称和参数使用正确的方法签名调整方法访问权限 &#x1f4dd; 解决步骤详解&#x1f5a5; 代码案例演示❓ QA部分Q: 如何区分jav…

使用canvas实现图纸标记及回显

图纸 图纸标记后的效果图 最近做的一个qms项目里面&#xff0c;需要前端在图纸上实现标记及标记后的内容还要能够回显&#xff0c;然后后端通过标记的点&#xff0c;去读取标记图纸的内容&#xff0c;如一些公式、数据之类的&#xff0c;目前实现的功能有 在图纸上面进行矩形…

【论文阅读】DiffSpeaker: Speech-Driven 3D Facial Animation with Diffusion Transformer

DiffSpeaker: 使用扩散Transformer进行语音驱动的3D面部动画 code&#xff1a;GitHub - theEricMa/DiffSpeaker: This is the official repository for DiffSpeaker: Speech-Driven 3D Facial Animation with Diffusion Transformer paper&#xff1a;https://arxiv.org/pdf/…

MyBatis基础使用

MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO&#xff08;Plain Old Java Objects&am…

2024 年(第 12 届)“泰迪杯”数据挖掘挑战赛——A 题:生产线的故障自动识别与人员配置具体思路以及源代码分析

一、问题背景 随着新兴信息技术的大规模应用&#xff0c;工业生产线的智能化控制技术日益成熟。自动生产线 可以自动完成物品传送、物料填装、产品包装和质量检测等过程&#xff0c;极大地提高了生产效率和 产品质量&#xff0c;减少了生产成本。自动生产线融入故障智能报警…

HTML CSS入门:从基础到实践

&#x1f310; HTML & CSS入门&#xff1a;从基础到实践 &#x1f3a8; &#x1f4d6; 引言 HTML和CSS是构建网页的基石。HTML&#xff08;超文本标记语言&#xff09;用于创建网页内容&#xff0c;而CSS&#xff08;层叠样式表&#xff09;则用于美化这些内容。无论你是…

Blocks —— 《Objective-C高级编程 iOS与OS X多线程和内存管理》

目录 Blocks概要什么是BlocksOC转C方法关于几种变量的特点 Blocks模式Block语法Block类型 变量截获局部变量值__block说明符截获的局部变量 Blocks的实现Block的实质 Blocks概要 什么是Blocks Blocks是C语言的扩充功能&#xff0c;即带有局部变量的匿名函数。 顾名思义&#x…

Day18 Java学生管理系统

Day18 Java学生管理系统 一、需求分析 考虑的方面&#xff1a; 用户需求、功能需求、非功能性需求、约束条件、优先级和权衡、可追踪性、需求验证。 二、项目搭建 搭建学生管理系统 1、创建项目的main ;pojo ; sms ; utils包。 2、编写系统的 增&#xff08;涉及到扩容–…

17.WEB渗透测试--Kali Linux(五)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;16.WEB渗透测试--Kali Linux&#xff08;四&#xff09;-CSDN博客 1.ettercap简介与使用…

【技术类-04】python实现docx表格文字和段落文字的“手动换行符(软回车)”变成“段落标记(硬回车)”

作品展示&#xff1a; 背景需求&#xff1a; 把python实现docx表格文字和段落文字的“手动换行符&#xff08;软回车&#xff09;”变成“段落标记&#xff08;硬回车&#xff09;合并在一起统计数量 【技术类-02】python实现docx段落文字的“手动换行符&#xff08;软回车&a…

一起玩儿3D打印机——03 Marlin固件的获取和安装环境的配置

摘要&#xff1a;本文介绍Marlin固件的获取和安装环境的配置 Marlin是一款开源软件&#xff0c;其主页为&#xff1a;https://marlinfw.org/&#xff0c;首页正中就是下载连接&#xff0c;如下图所示&#xff1a; 单击下面的“Download Marlin 2.1.2.2”按钮就会进入下载页面&a…

彻底学会系列:一、机器学习之梯度下降(1)

1 梯度下降概念 1.1 概念 梯度下降是一种优化算法&#xff0c;用于最小化一个函数的值&#xff0c;特别是用于训练机器学习模型中的参数&#xff0c;其基本思想是通过不断迭代调整参数的值&#xff0c;使得函数值沿着梯度的反方向逐渐减小&#xff0c;直至达到局部或全局最小…

AntV L7深圳智慧城市

本案例使用L7库和Mapbox GL JS构建深圳智慧城市。 文章目录 1. 引入 CDN 链接2. 引入组件3. 创建地图4. 创建场景5. 获取数据6. 创建面图层7. 演示效果8. 代码实现 1. 引入 CDN 链接 <!-- 1.引入CDN链接 --> <script src"https://unpkg.com/antv/l7"><…

Centos yum报错‘Connection timed out after 30002 milliseconds‘) 正在尝试其它镜像。解决办法

修改源后更新报错 我有两个Centos 一个7 一个8&#xff0c;疏忽在7上面配置了8的源后报错&#xff0c;通过下面的报错发现提示的是Centos7的源找不到&#xff0c;才意识到是不是配置错了源。 报错信息&#xff1a; http://mirrors.aliyun.com/centos/7/AppStream/x86_64/os/r…

Java 面向对象(类与对象 成员方法 方法重载 可变参数 构造方法 / 构造器 this关键字 包 访问修饰符)

目录 一、类与对象1. 类与对象的定义2. 类和对象的内存分配机制 二、成员方法1. 成员方法的定义2. 方法的调用机制3. 成员方法传参机制 三、方法重载四、可变参数1. 基本概念2. 基本语法3. 应用 五、 构造方法 / 构造器1. 特点2. 使用案例3. 对象创建的流程 六、this关键字1. 运…

【Linux】信号保存{sigset_t/sigpending/sigprocmask/bash脚本/代码演示}

文章目录 1.信号相关常见概念2.管理信号的数据结构3.初识sigset_t4.信号集操作函数4.1sigpending4.2sigprocmask4.2代码测试1.测试12.测试23.测试3 4.3bash 脚本文件 1.信号相关常见概念 信号相关动作&#xff1a;产生 发送 接收 阻塞 递达(处理) 实际执行信号的处理动作称为信…