【问题标题】:LabVIEW variable array size in SubVIs on FPGAFPGA子VI中的LabVIEW可变数组大小
【发布时间】:2015-07-26 16:01:01
【问题描述】:

我在 cRIO FPGA 目标上运行采集代码。数据从 I/O 节点获取并组成一个数组。该数组应始终具有相同的大小,因此我使用 SubVI 进行检查。问题是我使用条件禁用结构来替换具有不同通道号的不同目标的采集代码。现在编译器抱怨它无法将数组解析为固定大小,这是不正确的,因为编译器可以很容易地计算它。

如何编写我的 SubVI 以使其接受(在编译时)变量数组?数组面板中的“数组大小”符号也可以做到这一点。怎么样?

【问题讨论】:

  • 能否请您发布违规代码的屏幕截图?

标签: arrays fpga labview


【解决方案1】:

您可以改用查找表来实现您的目标。或者,如果您必须将此数组发送到 RT vi,则使用 DMA FIFO 会更专业。在 RT 端,您可以使用轮询方法并一次读取任意数量的点。

【讨论】:

  • 我使用 DMA FIFO 将数据发送到 RT,但我需要先检查数据。我必须查看查找表,但它们可以与 FXP 值一起使用吗?
【解决方案2】:

简而言之,这对于标准 LabVIEW 数组是不可能的,因为编译时必须固定大小(因为这些基本上归结为芯片中的电线)。

当您实际需要可变尺寸时,有两种选择:

  1. 简单而浪费 - 如果有合理的上限,您可以将其设置为最高并使用逻辑来控制“结束”。这意味着为上端编译资源,如果超过 100 字节将占用大量逻辑。

  2. 可扩展但稍难 - 实现大型可变大小数组的唯一方法是使用一些可用的内存选项以及一些用于定义大小的附加逻辑。根据大小,您可以使用查找表 (LUT) 或块 RAM。 LUT 再次快速用完逻辑,因此只能用于小型数组(不记得推荐的确切大小,但可能 http://zone.ni.com/reference/en-XX/help/371599H-01/lvfpgaconcepts/fpga_storing_data/#Memory_Items

  3. 找到一些初步阅读材料

无论哪种方式,您都必须以某种方式将数组的大小传递给子 VI,以便它知道要在内存中准备多远,这只能是另一个输入。

在 LabVIEW FPGA 中更常见的是,大多数处理都是在逐点数据上完成的,因此您可以集中存储逻辑而无需传递它,但这取决于算法的性质。

【讨论】:

  • 感谢您的帖子,但它们已修复编译,只有编译器没有得到它。 SubVI 有一个可变输入来匹配数组中任意数量的元素。并且可以在编译时通过检查线路的输入将其转换为固定大小的数组。目前我有三个不同的输入大小硬编码,但我想知道如何编写这个更通用的子VI,以减少整体变化,如果我也必须测量另一个节点。
  • 我明白你的意思。数组大小是控件的属性,因此固定大小不会跨越子VI边界,正如您在子VI级别告诉它的那样,它是可变大小。从技术上讲你是对的,它应该可以在编译时解决,但我认为这可能是 LabVIEW 在这种情况下工作方式的限制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-16
  • 1970-01-01
  • 1970-01-01
  • 2020-02-04
  • 2019-12-02
相关资源
最近更新 更多