可在单周期定时循环内放置全部高吞吐率数学函数。但请注意下列说明:

  • 多数高吞吐率数学函数是多周期的,即这些函数返回有效值的时间大于一个周期。如在单周期定时循环内放置多周期的高吞吐率数学函数,函数可能在每个时钟周期返回无效的值。函数吞吐速率和握手接线端的值确定了函数生成有效值的时钟周期。
  • 如在单周期定时循环内放置几个高吞吐率数学函数,可能导致组合路径过长,编译FPGA VI时可能产生定时冲突。因此,高吞吐率数学函数提供了几种降低组合路径长度的方法。

单周期 vs. 多周期函数

高吞吐率加、减和转换为定点数函数为单周期函数。这些函数在一个FPGA时钟周期内执行。所有其他高吞吐率数学函数均为多周期函数。这些函数需要多于一个时钟周期的执行时间。如在单周期定时循环内放置几个多周期函数,在一个时钟周期内执行的组合路径可能过长。

实现高吞吐率

对于在单周期定时循环内部的多周期高吞吐率数学函数,可使用函数配置对话框内的吞吐率输入控件指定函数要实现的吞吐速率。以周期/采样为单位的吞吐速率为函数可接收到有效输入数据的最小FPGA时钟周期。因此吞吐率控件的值越小,函数等待执行的时间就越短。因为函数准备好接收有效输入数据前必须经过该数量的时钟周期。

注: 单周期函数的吞吐率的值总是1 周期/采样

如要演示吞吐率输入控件的重要性,可考虑3个连接至握手接线端的多周期高吞吐率数学函数。3个连接的函数中的最慢的吞吐率(具有最大值的吞吐率输入控件)为所有连接函数可实现的最高的吞吐率。此限制对单周期定时循环内部的每个独立连接的函数均为真。

注: 仅当将函数放在单周期定时循环内部时,函数的吞吐率控件才可用。如在单周期定时循环外放置函数,LabVIEW用灰色显示吞吐率输入控件,并显示常量值为>1 调用/采样。该值表示函数在每次VI调用函数时可接收到有效的输入数据。

握手

尽管多周期高吞吐率数学函数在单周期定时循环的每个时钟周期执行,这些函数并不会在每个时钟周期返回有效的值。可配置上述函数在函数图标上显示4个握手接线端。当产生下列动作时使用这些接线端进行判定:

  • 函数放弃来自上面数据流函数的数据。
  • 函数接受来自上面数据流函数的数据。
  • 下面数据流函数放弃来自函数的数据。
  • 下面数据流函数接受来自函数的数据。
注: 判定是否显示握手接线端时,不同的函数具有不同的准则。例如,选择在单周期定时循环内时,高吞吐率除显示该接线端按钮。如要启用高吞吐率加函数的接线端,必须勾选寄存器输出复选框。

减少组合路径的长度

如在单周期定时循环内放置几个高吞吐率数学函数,组合路径的长度可能会影响FPGA VI在所需的时钟周期内完成编译。在这种情况下,编译FPGA VI时编译状态窗口将返回错误。增加流水线层级或添加输入和/或输出寄存器至函数可避免上述错误。

增加流水线层级

将高吞吐率复数乘函数或高吞吐率乘函数置于单周期定时循环内部,并指定较大的流水线级数量可缩短组合路径。指定较大的流水线级数量时,LabVIEW在必需的时钟速率编译函数的可能性将被增加。

添加输入和输出寄存器

也可通过为函数的输入和/或输出添加寄存器降低组合路径的长度。添加寄存器可避免编译错误。但每个寄存器组可能为函数增加一个周期的延时,也就是说接收有效输出值的时间增加了一个周期。

注: 部分函数(例如,“高吞吐率减”函数)支持仅添加一组寄存器。

下图为数据流经包含上述内部寄存器的函数的示意图。

使用配置对话框的寄存器部分添加输入和/或输出寄存器。

注: 如在单周期定时循环外部放置函数,LabVIEW编译VI时,将自动在函数输出端放置寄存器。