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

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

ubuntu22.04 安装docker 和docker-compose

首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...