【LabVIEW FPGA入门】FPGA 存储器(Memory)
可以使用内存项将数据存储在FPGA块内存中。内存项以2kb为倍数引用FPGA目标上的块内存。每个内存项引用一个单独的地址或地址块,您可以使用内存项访问FPGA上的所有可用内存。如果需要随机访问存储的数据,请使用内存项。
内存项不消耗FPGA上的逻辑资源,因为它们不包括确保跨时钟域数据完整性所需的额外逻辑。
内存项中的每个内存地址只存储最新的值。如果在从内存地址读取之前对该地址进行N次写入,则在最近的值之前的N - 1个值将丢失。
如果您不使用获取的每个数据值,那么内存项是一个不错的选择,因为您不需要编写额外的代码来丢弃不必要的值。如果需要保存所有值,则应该使用FIFO。
1.FPGA 创建 Memory Items 的两种方式
1.1 Target-Scoped Memory Items
可以由FPGA终端上的多个VI访问,并且存储多个VI访问的数据。


名称:显示在“项目资源管理器”窗口或“vi定义的内存配置”节点中的内存项的名称。该名称也出现在框图上的内存方法节点中。
请求的元素数量: 指定你想在内存项中保存的元素数量。实际的内存使用量(以字节为单位)取决于您指定的元素数量和数据类型。
实现:指定FPGA如何存储该内存项。包含以下选项:
存储器块—数据通过内嵌的内存块存储。赛灵思的文献将这种实现描述为块RAM或BRAM。使用嵌入式块内存的内存项需要一个时钟周期来执行。在以下情况下使用块内存:•在单周期定时循环中,当您不需要在给定地址的同一周期内访问该内存时。
•当您需要的内存量很大时。
•当您在FPGA上没有足够的空闲逻辑资源可用时。
该选项包含以下组件:—实际元素数—返回配置的元素数。
有时所请求的元素数量与内存配置不兼容。在这种情况下,实际元素数被强制为一个兼容的数字。
查找表-将内存项存储在FPGA上可用的查找表中。这种存储消耗FPGA用于其他逻辑运算的逻辑资源,例如加法和减法。赛灵思的文献将这种实现描述为分布式RAM或LUT RAM。在以下情况下使用查找表:•您正在以单周期定时循环访问该内存,并且需要在您给出地址的同一周期内从内存项读取数据。
•需要的内存量小于FPGA上的最小嵌入式块内存量。
•在FPGA上没有足够的空闲嵌入式块内存。
该选项包含以下组件:—实际元素数—返回配置的元素数。
有时所请求的元素数量与内存配置不兼容。在这种情况下,实际元素数被强制为一个兼容的数字。
DRAM -将内存项存储在FPGA上可用的DRAM中。并非所有硬件都支持使用DRAM作为内存。该选项包含以下组件:•实际元素数量-返回配置的元素数量。有时所请求的元素数量与内存配置不兼容。在这种情况下,实际元素数被强制为一个兼容的数字。
•最大未处理请求数-指定应用程序允许未处理的最大数据请求数。
•DRAM bank -指定使用哪个DRAM bank。
此处已分配:表示该内存项已分配的内存量。
其他分配:显示在其他项中分配了多少内存。
空闲的:指示存储库中还有多少内存可用。
总物理大小:BANK的总大小。

数据类型-:FIFO或内存中数据的数据类型。您可以选择定点(FXP)数据类型;布尔数据类型;8位、16位、32位或64位有符号或无符号整数数据类型;或单精度浮点(SGL)数据类型。还可以选择自定义控件作为数据类型。如果选择FXP,则必须在“定点配置”部分配置数据类型。
定点配置:设置定点数据的配置信息。选择“数据类型”为“FXP”,启用定点设置。您可以配置Encoding设置,然后LabVIEW自动确定Range设置。
编码器 -设置定点值的二进制编码设置。
signed -设置定点值是否有符号。
unsigned -设置定点值是否为无符号值。
字长-设置LabVIEW用来表示所有可能的定点值的位数。
整型字长—对于所有可能的定点值,设置整位数,或者将二进制点移动到最高位的位数。整型字长可以是正数或负数。
最小值-定点数据范围的最小值。
最大值-定点数据范围的最大值。
delta -在定点数据范围内任意两个序号之间的最大距离。
选择控件—打开一个对话框,您可以在其中导航到要使用的自定义控件。只有在“数据类型”下拉菜单中选择“自定义控件”时,才会显示此按钮。
DRAM最大数据宽度-内存的物理端口宽度。选择的数据类型不能大于数据宽度。
确保自定义控件中所有项的数据宽度之和不大于DRAM的最大数据宽度

通过此页面可以配置仲裁选项,并为内存项指定读/写端口。
本界面包括以下几个部分:
接口A:指定从接口A读取仲裁的类型。
方法-接口访问内存的方式。接口A始终是只读的。
仲裁:设置内存接口的仲裁类型。如果在单周期定时环路中使用为接口A配置的内存方法节点,请选择“仅多个请求者仲裁”或“从不仲裁
接口B:指定接口B仲裁的方式和类型。
方法-指定接口访问内存的方式。接口B默认具有写访问权限。接口B的read方法与自定义数据类型不兼容。如果在“数据类型”页面中选择“自定义控件”作为数据类型,则接口B的“方法”为dim。
仲裁:设置内存接口的仲裁类型。如果在单周期定时环路中使用为接口B配置的内存方法节点,请选择“只有多个请求者时仲裁”或“不仲裁”。
内存原理图-反映内存块的配置。

该界面包括以下几个部分:
初始化方法—初始化内存项的方法。选择“标准函数”以使用常量、直线、正弦波或余弦波填充内存项。选择Initialization VI以初始化VI创建的数组填充内存项。
标准函数-包含以下选项:
模式-指定LabVIEW填充所选地址间隔的内容。您可以从以下值中选择:
常数:使用在“值”中指定的常数填充。
线性-使用从您在起始值和斜率中指定的值计算的线性段进行填充。
正弦-使用您在周期数中指定的全尺寸正弦波填充。此选项仅适用于有符号整数和有符号定点数。
余弦-使用您在周期数中指定的全尺寸余弦波填充。此选项仅适用于有符号整数和有符号定点数。
起始地址-指定要填充的内存项间隔的下限。
结束地址-指定要填充的内存项间隔的上限。
起始值-如果从模式下拉菜单中选择线性,则指定LabVIEW在内存项中输入的第一个值。
斜率-如果从模式下拉菜单中选择线性,则指定LabVIEW在内存项中输入的直线的斜率。
周期数-如果从模式下拉菜单中选择正弦或余弦,则指定LabVIEW在内存项中进入的周期数。
应用-显示图形预览和数据值选项卡中的初始值。单击Apply按钮不会保存初始化数据。必须单击OK按钮保存初始化数据。
初始化VI -包含以下选项:

VI路径-初始化VI的路径。
从模板新建VI—创建模板VI的实例,保存到在“命名新初始化VI”对话框中指定的位置,然后打开该VI。必须关闭“内存属性”对话框才能编辑该VI。
打开 VI-打开在 VI 路径字段中指定的 VI。要编辑 VI,必须关闭 "内存属性 "对话框。
- 运行 VI-运行在 VI 路径字段中指定的 VI。然后,LabVIEW 将输出阵列导入内存项,并在 "图形预览 "和 "数据值 "选项卡中显示相应的值。
- 图形预览-在波形图中显示内存项的当前内容。
- 数据值-显示存储项的当前内容。
- 重置为默认值-将存储项的内容重置为默认值。对于布尔数据类型,默认值为 0(FALSE)。对于整数数据类型,默认值为 0。 对于定点数据类型,如果在 "内存属性 "对话框的 "数据类型 "页面上,"最大值 "大于或等于 0,且 "最小值 "小于或等于 0,则默认值为 0。如果最大值小于 0,默认值等于最大值。如果 "最小值 "大于 0,默认值等于 "最小值"。
1.2 VI-Defined Memory Item
如果在可重入的 FPGA VI 中使用 VI 定义的内存项,LabVIEW 会为 VI 的每个实例创建内存项的单独副本,这样就可以创建可重用的子 VI,同时避免资源冲突。如果将带有 VI 定义的内存项的 FPGA VI 发送给其他用户,则无需发送 LabVIEW 项目,因为 VI 定义的内存项在 Project Explorer 窗口中不包括相应的项目。

有关此处详细信息查看NI在线文档:


https://www.ni.com/docs/zh-CN/bundle/lvfpga-api-ref/page/vi-lib/rvi/memory/memory-common/write-memory-method.html
https://www.ni.com/docs/zh-CN/bundle/lvfpga-api-ref/page/vi-lib/rvi/memory/memory-common/write-memory-method.html
2 示例-并行
该程序有两个 While 循环--一个从 FPGA I/O 节点获取数据并将数据写入内存项,另一个从内存项读取数据并显示数据。


3.示例-过采样
如果读取和显示循环的运行速度较快,则读取和显示的数据会多于实际获取的数据。循环会多次读取和显示某些数据点。这种情况称为过采样。从速度较慢的硬件(模拟输入信号、热电偶)获取数据,然后在速度较快的硬件(FPGA)上进行处理时,就会出现过采样。在试图捕捉快速边缘、瞬态和一次性事件时,通常需要过采样。


4.示例-欠采样
如果读取和显示循环运行速度较慢,读取和显示的数据点就会少于实际获取的数据点。一些数据点在被读取和显示之前就被写入并丢失了。这种情况称为采样不足。欠采样是指对感兴趣的特定信号采样太慢。

相关文章:
【LabVIEW FPGA入门】FPGA 存储器(Memory)
可以使用内存项将数据存储在FPGA块内存中。内存项以2kb为倍数引用FPGA目标上的块内存。每个内存项引用一个单独的地址或地址块,您可以使用内存项访问FPGA上的所有可用内存。如果需要随机访问存储的数据,请使用内存项。 内存项不消耗FPGA上的逻辑资源&…...
vue3+element Plus form 作为子组件,从父组件如何赋值?
刚开始接触vue3时,碰到一个很low的问题,将form作为子组件,在页面中给form表单项输入内容,输入框不显示值,知道问题出在哪,但因为vue3组合式api不熟悉,不知从哪下手... 效果图: 父组…...
Kafka系列之:Exactly-once support
Kafka系列之:Exactly-once support 一、Sink connectors二、Source connectors三、Worker configuration四、ACL requirementsKafka Connect 能够为接收器连接器(从版本 0.11.0 开始)和源连接器(从版本 3.3.0 开始)提供一次性语义。请注意,对一次语义的支持高度依赖于您运…...
Spring Boot2
SpringBoot 配置文件 properties配置文件 application.properties 以配置端口和访问路径为例 server.port8080 yaml配置文件 application.yml / application.yaml server:port: 81 在实际开发中,更常用的是yaml配置文件 yaml层级表示更加明显 yml配置信息书…...
【idea做lua编辑器】IDEA下lua插件报错编辑器打不开(同时安装EmmyLua和Luanalysis这2个插件就报错,保留EmmyLua插件即可)
C:\Users\Administrator\AppData\Roaming\JetBrains\IntelliJIdea2021.1\plugins 同时安装EmmyLua和Luanalysis就报错,删除Luanalysis这个文件夹只使用EmmyLua这个插件即可! 为啥不用vscode呢? 我个人不太喜欢vscode,更喜欢idea&…...
SpringCloud之网关组件Gateway学习
SpringCloud之网关组件Gateway学习 GateWay简介 Spring Cloud Gateway是Spring Cloud的⼀个全新项目,目标是取代Netflix Zuul,它基于Spring5.0SpringBoot2.0WebFlux(基于高性能的Reactor模式响应式通信框架Netty,异步⾮阻塞模型…...
全球大型语言模型(LLMS)现状与比较
我用上个博文的工具将一篇ppt转换成了图片,现分享给各位看官。 第一部分:国外大语言模型介绍 1,openai的Chatgpt 免费使用方法1:choose-carhttps://share.freegpts.org/list 免费使用方法2:Shared Chathttps://share…...
Git Commit 提交规范,变更日志、版本发布自动化和 Emoji 提交标准
前言 Git Commit 是开发的日常操作, 一个优秀的 Commit Message 不仅有助于他人 Review, 还可以有效的输出 CHANGELOG, 对项目的管理实际至关重要, 但是实际工作中却常常被大家忽略,希望通过本文,能够帮助大家规范 Git Commit,并且展示相关 …...
Spark与flink计算引擎工作原理
Spark是大批量分布式计算引擎框架,scale语言开发的,核心技术是弹性分布式数据集(RDD)可以快速在内存中对数据集进行多次迭代,支持复杂的数据挖掘算法及图形计算算法,spark与Hadoop区别主要是spark多个作业之…...
Excel数字乱码怎么回事 Excel数字乱码怎么调回来
在日常工作中,Excel是我们最常使用的数据处理软件之一,它强大的功能使得数据处理变得既简单又高效。然而,用户在使用Excel时偶尔会遇到数字显示为乱码的问题,这不仅影响了数据的阅读,也大大降低了工作效率。那么&#…...
实例:NX二次开发使用链表进行拉伸功能(链表相关功能练习)
一、概述 在进行批量操作时经常会利用链表进行存放相应特征的TAG值,以便后续操作,最常见的就是拉伸功能。这里我们以拉伸功能为例子进行说明。 二、常用链表相关函数 UF_MODL_create_list 创建一个链表,并返回链表的头指针。…...
【VSTO开发】遍历 Ribbon 中的所有控件或按钮
在 VSTO(Visual Studio Tools for Office)中,可以通过代码来遍历 Ribbon 中的所有控件或按钮。可以使用 C# 或 VB.NET 等编程语言来实现这个功能。 下面是一个简单的示例代码,演示如何遍历 Ribbon 中的所有控件或按钮:…...
上位机图像处理和嵌入式模块部署(qmacvisual图像识别)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 所谓图像识别,就是对图像进行分类处理,比如说判断图像上面的物体是飞机、还是蝴蝶。在深度学习和卷积神经网络CNN不像现在这…...
当Java 22遇到 SpringBoot 3.3.0!
工程 | JOSH LONG | 0条评论 Java 22发布快乐! Java 22 是一个重大的进步,是一个值得升级版本。有一些重大的最终发布功能,如 Project Panama及一系列更优秀的预览功能。我不可能覆盖它们全部,但我确实想谈谈我最喜爱的一些。我们…...
贪吃蛇(C语言超详细版)
目录 前言: 总览: API: 控制台程序(Console): 设置坐标: COORD: GetStdHandle: STD_OUTPUT_HANDLE参数: SetConsoleCursorPosition: …...
python(django)之流程接口管理后台开发
1、在models.py中加入流程接口表和单一接口表 代码如下: from django.db import models from product.models import Product# Create your models here.class Apitest(models.Model):apitestname models.CharField(流程接口名称, max_length64)apitester model…...
Hive入门
什么是hive? - Hive是Facebook开发并贡献给Hadoop开源社区的。它是建立在 Hadoop体系架构上的一层 SQL抽象,使得数据相关人 员使用他们最为熟悉的SQL语言就可以进行海量数据的处理、 分析和统计工作 - Hive将数据存储于HDFS的数据文件映射为一张数据库…...
【神经网络】得分函数,损失函数~
目录 引言 一、神经网络概述 1 定义 2 基本原理 二、得分函数 1 定义 2 应用方法 3 与神经网络 三、损失函数 1 定义 2实现方法 3 与神经网络 四、得分函数与损失函数的协同作用 1 关系 2 实际应用 六、代码事例 、总结与展望 引言 在人工智能与机…...
FFmepg--AVFilter过滤器使用以及yuv视频裁剪
文章目录 AVFilter 流程:api核心代码变量yuv视频裁剪AVFilter 流程: ⾸先使⽤split滤波器将input流分成两路流(main和tmp),然后分别对两路流进⾏处理。对于tmp流,先经过crop滤波器进⾏裁剪处理,再经过flip滤波器进⾏垂直⽅向上的翻转操作,输出的结果命名为flip流。再将…...
.net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
$exception {"Public member Value on type Range not found."} System.MissingMemberException 代码准备运行问题解决1. 下载别的版本的.net框架2. 安装3. 运行 代码 Imports Excel Microsoft.office.Interop.Excel Public Class Form1Private Sub Button1_Click(…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
stm32wle5 lpuart DMA数据不接收
配置波特率9600时,需要使用外部低速晶振...
[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG
TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...
Spring Boot + MyBatis 集成支付宝支付流程
Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例(电脑网站支付) 1. 添加依赖 <!…...
