Oop LabVIEW:以编程方式设置FPGA I/O变量(模板?) 问题:

Oop LabVIEW:以编程方式设置FPGA I/O变量(模板?) 问题:,oop,templates,fpga,labview,Oop,Templates,Fpga,Labview,有没有一种方法可以通过编程方式设置我正在读取或写入的FPGA变量,这样我就可以为我想要运行的每个对象概括我的主模拟循环?每个对象的模拟循环都是相同的,除了读取和写入哪些FPGA变量。详情如下 背景 我有一段代码,它使用LabVIEW OOP定义了一系列我想要模拟的东西。然后,每个东西都有一个update方法,该方法在RT控制器上的定时循环内运行,获取一组输入,并返回一组输出。其中一些输入来自FPGA,一些输出在发送到硬件之前被传回FPGA进行一些处理 我的问题是,我的代码中的每件事都有一个单独的

有没有一种方法可以通过编程方式设置我正在读取或写入的FPGA变量,这样我就可以为我想要运行的每个对象概括我的主模拟循环?每个对象的模拟循环都是相同的,除了读取和写入哪些FPGA变量。详情如下

背景 我有一段代码,它使用LabVIEW OOP定义了一系列我想要模拟的东西。然后,每个东西都有一个
update
方法,该方法在RT控制器上的定时循环内运行,获取一组输入,并返回一组输出。其中一些输入来自FPGA,一些输出在发送到硬件之前被传回FPGA进行一些处理

我的问题是,我的代码中的每件事都有一个单独的模拟VI,因为每件事都从FPGA读取不同的值并返回给FPGA。这对可维护性来说是一个难题,似乎需要更好的方法。问题如下所示。重要的部分是FPGA输入和输出节点(每件事都会改变),以及
更新
方法的输入和输出集群(始终相同)

是否有某种方法可以定义一个通用的主仿真VI,然后通过编程(可能在我的东西中存储属性)告诉它使用FPGA的哪些特定输入和输出

如果是这样的话,那么我认为下一步很明显就是让主模拟循环成为我的对象的一个公共方法,并为我需要模拟的每个对象调用该方法


谢谢

这看起来像是一个[object mapping]问题,LabVIEW对此没有很好的支持,但它是可以做到的

我的代码将一个集群映射到另一个集群,假设控件类型相同,使用2列数组作为“查找”


简单的答案是否定的。不幸的是,一旦使用LabVIEW FPGA进入硬件级别,事情就变得非常静态,并且依赖于硬编码IO访问。通常,这正是您展示当前方法的方式。然而,您可以在这里使用一些技巧来封装IO访问

考虑到这一点,将图上的IO节点定义为接口,并使用函数(或VI或方法,以您喜欢的术语为准)将它们抽象出来。您可以使用动态VI调用或面向对象的方法来实现这一点

您知道由接口定义的数据类型是众所周知的,因为您从不变的集群中推拉它们

通过使用方法调用抽象出硬件IO,您可以维护一个函数调用库,这些函数调用表示系统中每个“事物”的唯一硬件访问。这将把对硬件IO访问的更改封装在一段专用于该作业的代码中

使用动态VI调用很难看,但是您可以使用“东西”的属性来指定为该东西的IO调用的确切函数的路径

面向对象的方法可能会让您创建一个具有根对象的小型类层次结构,该根对象表示通用IO访问(可能什么都不做),子对象重写核心方法调用以进行读取或写入。此调用将引入FPGA引用,并吐出每个硬件调用将返回的变量(反之亦然,用于读取)。在引擎盖下,它负责决定究竟要访问FPGA上的哪个IO。示例如下:


请记住,这离功能性还差得远,我只是想让您看看这个图可能是什么样子。该方法将帮助您进一步概括主循环,并允许您按照建议将其嵌入到公共调用中。

这太棒了,谢谢!但是看起来不管怎样,我仍然需要硬编码我的应用程序中每个
东西所需的接口,而不是,例如,从某种init文件初始化这些映射,对吗?不过,通过您的方法,我可以将事物抽象化,并在一个地方维护映射。您的观察是正确的。据我所知,没有任何功能允许您动态映射该节点上的IO点。你可能考虑的唯一其他可能性(尽管是一个更复杂的选择)是通过一个协议在DMA访问上完成所有IO,而不是前面板登记访问。您的东西都将使用相同的代码通过DMA与FPGA通信,FPGA代码将处理从(或到)适当硬件通道返回的数据。