当需要通过多个时钟域访问通过FPGA应用存储的数据时,请选择下列选项:

方法 使用场景
寄存器项
  • 需要存储单个数据点
  • 数据传输可能发生损耗
  • 每个时钟周期需要发布状态信息
使用存储器块实现存储器项
  • 需要存储多个数据点
  • 数据传输可能发生损耗
握手项
  • 读取方和写入方节点同步
  • 数据传输不能发生损耗

寄存器项

在下列情况下使用寄存器项存储数据:需要跨越多个时钟域访问数据、需要访问设计不同部分的数据以及需要写入可重入代码。相对于FIFO,寄存器项占用较少的FPGA资源。并且寄存器项不会占用稀缺的FPGA资源(存储器块)。

注: 寄存器项不支持自定义类型。如应用需要使用自定义类型,请使用全局变量替代寄存器项。

LabVIEW FPGA模块具有两种寄存器项类型:

  • 通过VI定义的寄存器项:使用VI定义的寄存器项创建重入子VI并避免资源冲突。在重入FPGA VI中配置通过VI定义的寄存器项,LabVIEW将为用于VI的每个实例的寄存器项创建独立的副本。
  • 终端范围的寄存器项:如需寄存器项可见且可通过项目浏览器窗口配置,请使用终端范围的寄存器项。终端范围的寄存器项在项目浏览器窗口的同一终端下的任意FPGA VI内均可用。

下列程序框图为使用寄存器方法节点读取和写入寄存器项的方法,该节点配置用于终端范围的寄存器项。此VI可将XY两个控件的值相加,将和值写入寄存器项,读取存储的值,将存储的值递增加1并将结果传递至显示控件。注意,“写入”方法和“读取”方法位于两个不同的时钟域内。

通过项目浏览器窗口创建终端范围的寄存器项

按照下列步骤通过项目浏览器窗口创建终端范围的寄存器项。

  1. 项目浏览器窗口,右键单击FPGA终端。
  2. 选择新建»寄存器,显示FPGA寄存器属性对话框。
  3. 单击确定,完成创建寄存器项。
  4. 项目浏览器窗口拖拽寄存器项至程序框图。LabVIEW添加一个用于寄存器项的寄存器方法节点。
注: 如使用该方法创建寄存器项,寄存器项按名称捆绑至项目中的相应项。即更新项目的项将影响程序框图上的全部寄存器项实例。

通过程序框图创建寄存器项

通过程序框图可创建终端范围的或VI定义的寄存器项。

终端范围

  1. 显示FPGA VI的程序框图。
  2. 函数选板中,添加寄存器方法节点至程序框图。
  3. 右键单击寄存器方法节点,选择添加新寄存器,显示FPGA寄存器属性对话框。
    提示也可以右键单击寄存器方法节点,选择选择寄存器»x,其中x为已有的寄存器项。
  4. 单击确定,完成创建寄存器项。

也可以连线寄存器输入输入端的引用,指定现有的寄存器项。LabVIEW将配置寄存器方法节点为默认的写入方法。指定寄存器项后,右键单击寄存器方法节点,选择选择方法»y,其中y为指定的方法。

通过VI定义

  1. 显示FPGA VI的程序框图。
  2. 函数选板中,添加通过VI定义寄存器配置节点至程序框图。
  3. 右键单击通过VI定义寄存器配置节点,选择配置,显示FPGA寄存器属性对话框。
  4. 单击确定,完成创建寄存器项。

握手项

握手项与单元素FIFO操作类似。使用握手项在写入方节点和读取方节点间传输单个数据元素,写入方节点与读取方节点可位于同一时钟域或不同时钟域。使用握手项在写入域和读取域间实现无损耗的传输,并在读取方接收到数据时通知写入域。相对于FIFO,握手项占用较少的FPGA资源。并且握手项不会占用稀缺的FPGA资源(存储器块)。

LabVIEW FPGA模块具有两种握手项类型:

  • 通过VI定义的握手项:使用通过VI定义的握手项创建重入子VI并避免资源冲突。在重入FPGA VI中配置通过VI定义的握手项,LabVIEW将为用于VI的每个实例的握手项创建独立的副本。
  • 终端范围的握手项:如需握手项可见且可通过项目浏览器窗口配置,请使用终端范围的握手项。终端范围的握手项在项目浏览器窗口中同一终端下的任意FPGA VI内均可用。

使用握手方法节点读取数据

使用握手方法节点有两种读取数据的方法:

方法 使用场景
读取方法
  • 仅需读取数据元素一次。读取方法会自动确认数据,即它将移除数据,为下一次传输做好准备。
确认的读取方法和无需确认的读取方法
  • 节点确认数据传输时需要执行控制。读取方节点可读取同一数据元素多次,直至确认失效。

下列程序框图为使用握手方法节点读取和写入握手项的方法,该节点配置用于终端范围的握手项。该VI将值每次递增1,将数据写入握手项,读取存储的值并自动通知读取方。输入就绪为TRUE时,输入有效为TRUE。当输出有效为TRUE时,VI会将存储的值写入显示控件。注意,“写入”方法和“读取”方法位于两个不同的时钟域内。如红框所示。该设计确保将全部数据点写入至更快的时钟域,且无数据损耗。

注: 中止并重新启动VI,不会重置握手项。使用清除方法将握手项返回为默认状态。

通过“项目浏览器”窗口创建终端范围的握手项

按照下列步骤通过项目浏览器窗口创建终端范围的握手项:

  1. 项目浏览器窗口,右键单击FPGA终端。
  2. 选择新建»握手,显示FPGA握手属性对话框。使用对话框中的选项配置握手项。
  3. 单击确定,完成创建握手项。
  4. 项目浏览器窗口拖拽握手项至程序框图。LabVIEW添加一个用于握手项的握手方法节点。
注: 如使用该方法创建握手项,寄存器项按名称捆绑至项目中的相应项。即更新项目的项将影响程序框图上的全部握手项实例。

通过程序框图创建握手项

通过程序框图可创建终端范围的或通过VI定义的握手项。

终端范围

  1. 显示FPGA VI的程序框图。
  2. 添加握手方法节点至程序框图。
  3. 右键单击握手方法节点,选择添加新握手,显示FPGA握手属性对话框。
    提示也可以右键单击握手方法节点,选择选择握手»x,其中x为已有的握手项。
  4. 单击确定,完成创建握手项。

也可以连线握手输入输入端的引用,指定握手项。LabVIEW会将握手方法节点配置为默认的模式(写入)。指定握手项后,右键单击握手方法节点,选择选择方法»y,其中y为指定的方法。

通过VI定义

  1. 显示FPGA VI的程序框图。
  2. 添加握手方法节点至程序框图。
  3. 右键单击通过VI定义握手配置节点,显示FPGA握手属性对话框。
  4. 单击确定,完成创建握手项。