当前位置: 首页 > 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;并确保邻居之间的通信是可信的。它可…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...