某些LabVIEW FPGA模块应用包含可被FPGA VI中的多个对象(例如,函数或子VI)访问的共享资源。下列为可能的共享资源:

  • 数字输出线
  • 模拟数据线
  • 寄存器项
  • 存储器项
  • FIFO
  • 握手项
  • 中断数据线
  • 局部变量和全局变量
  • 非重入子VI

每个共享资源包含一个或多个资源接口。资源接口在对象和共享资源间通信,如下图所示。

在FPGA VI程序框图中2个或多个对象同时请求通过同一个资源接口访问同一个共享资源将产生资源冲突。在上面的示意图中未发生资源冲突,因为对象请求通过两个不同的资源接口访问该共享资源。

但在下列示意图中,两个存储器方法节点请求通过同一个资源接口访问同一个共享资源(我的存储器项)。如两个存储器方法节点同时请求访问共享资源将产生资源冲突。

通过仲裁避免资源冲突

为避免资源冲突,FPGA模块提供了当多个对象同时请求访问资源时的仲裁选项,用于判定可访问资源的对象。用户选择的仲裁选项决定了LabVIEW是否使用仲裁器。可选的仲裁选项随资源变化。

注: 握手项和中断数据线不支持仲裁。

请求方是指通过资源接口请求访问资源的对象。仲裁器允许请求方对资源的访问后,该请求方转为访问方。如下图所示。

多数对象与单个资源接口交互。但在某些情况下,某些对象与多个接口交互。例如,如将FPGA I/O节点用于双向数据线,FPGA I/O节点与相应资源上的输出数据和输出启用接口交互。如下图所示。

上图基本为下列简化框图中电路的映射。

在上图中,电路分别控制输出启用输出数据,因此LabVIEW FPGA模块将输出启用输出数据表示为独立的资源接口。

如需要优化FPGA VI,可配置FPGA I/O、FIFO和存储器项的每个资源接口的仲裁选项。如FPGA VI设计与FPGA匹配、满足性能期望以及编译无错,可保留默认的仲裁选项。I/O的默认仲裁选项取决于FPGA终端和I/O资源。FIFO和存储器项的默认仲裁选项为仅在有多个请求方时仲裁。其他包括仲裁(例如,输入控件和全局变量)的资源包括固定的仲裁设置。此类资源的仲裁选项不能更改,因此在某些情况下,可能需要修改程序框图代码以避免产生资源冲突。

注: 仲裁过程可能需要几个时钟周期的执行时间。仲裁占用了额外的时间和FPGA空间,并为应用程序添加了抖动。用户可设计FPGA VI以避免抖动。