将输入值延迟一定数量的循环迭代。该VI类似于z^-n块,其中n可以为常量或变量。

函数支持整数标量值和数组值、定点和布尔数据类型、簇和簇数组。


icon

对话框选项

参数 说明
常规

指定关于该函数的常规信息。

  • 数据类型-包含有关 D 输入接线端数据类型的信息。
    • 宽度-指定 D的位数,该位数影响该函数创建的内部寄存器的数量。
      如连线整数或定点数据类型至D,LabVIEW将禁用该选项并将其设置为连线的数据类型的字节长度。如连线布尔值、簇或固定大小数组, LabVIEW使该选项变暗,并将 D 设置为数据类型中所有元素的总字长。
      注: D的数据类型未匹配至源。
  • 可选接线端-包含关于可选输入接线端的信息。
    • 启用-指定LabVIEW是否显示 启用 输入接线端。该复选框默认为未勾选,LabVIEW会将该接线端的值设置为TRUE。
  • 延迟设置-包含与延迟相关的选项。
    • 常量延迟-指定该函数应用一个常量延迟
      • 延迟-指定该函数延迟 D的时钟周期数。延迟 必须小于等于512个周期。默认值为1个周期。
    • 动态延迟-指定该函数应用可变延迟。
      • 最大延迟-指定该函数可延迟D的最大时钟周期数,而D又指定该函数使用的内部寄存器的数量。该值必须属于16至512周期(包括16和512)。n-1输入接线端可用于指定传递至输出接线端Q的寄存器。
  • 结果原理图-显示该函数的FPGA逻辑。该电路图根据所选的配置选项进行相应改动。
初始值 包含该函数使用的内部寄存器的初始值的设置。
  • 初始化-指定内部寄存器复位或初始化的时间和方式。
    • 首次调用时重置为零-指定首次调用该函数或调用复位 方法,所有内部寄存器复位为0。
    • 编译或加载时初始化-指定编译或加载包含该函数的VI时,内部寄存器初始化为 初始值 表中定义的值。如FPGA使用重置方法进行重置,函数不执行任何操作。
  • 初始化VI-包含LabVIEW用于初始化函数内部寄存器的初始化VI选项。仅当在初始化部分选择编译或加载时初始化选项时才可使用该选项。
    • VI路径-指定为函数提供初始值的VI的路径。
    • 从模板新建VI-创建模板VI的实例并打开该VI。该模板也可用于创建初始化VI。必须关闭本配置对话框才可编辑该VI。
    • 打开VI-打开 VI路径 字段中指定的VI。必须关闭对话框才可编辑该VI。
    • 运行VI-运行 VI路径 字段中指定的VI,并使用VI返回的值填充 初始值 表格。

      如果初始化VI的输出数据类型与“离散延迟”函数的数据类型不同,LabVIEW会尝试将输出值强制转换为该函数的数据类型。如强制转换失败,LabVIEW将显示错误信息。

  • 初始值-以十六进制、十进制或二进制格式指定该函数的初始值。仅当在初始化部分选择编译或加载时初始化选项时才可使用该表格。

    如连线簇或非布尔固定大小的数组至D输入接线端,不能使用该表格指定初始值。但必须选择首次调用时重置为零选项或使用初始化VI自定义初始化的值。

配置反馈

显示关于该函数运行的相关信息。该信息由指定的配置选项确定。

输入/输出

  • cbool.png D

    指定待延迟的数据。

    注: D的数据类型未匹配至源。
  • n-1

    指定将值传递至Q输出接线端的内部寄存器的索引。n–1的值可介于0和n–1之间,其中n是配置对话框中 最大延迟 控件的值。

    仅当在配置对话框中选择动态延迟选项时,LabVIEW显示该接线端。

  • 启用

    指定该函数是否忽略输入接线端D。默认值为TRUE,表示该函数会将所有值移位至下一个内部寄存器,并将D的值传递至第一个内部寄存器。如启用为FALSE,该函数将忽略D并且不会移位现有值,表示内部寄存器将保留上一个时钟周期的值。

    该接线端仅对有效D值进行运算。例如,可连线输出有效输出接线端高吞吐量数学 函数连接至该输入端。在这种情况下,离散延迟函数仅在输入值有效时才接收值D。

    只有在配置对话框中勾选了启用复选框,LabVIEW才会显示启用。如不显示该接线端,LabVIEW将在内部将其设置为TRUE。

  • ibool.png Q

    返回D的延迟值。如该函数设置为常量延迟,Q返回最后一个内部寄存器的值。如该函数设置为动态延迟,Q返回通过n-1输入接线端指定的寄存器的值。

  • 该函数通过移位寄存器查找表(SRL)而不是触发器执行延时。SRL可在单个查找表(LUT)中包含多个延迟,从而比触发方式节省更多的FPGA资源。

    离散延迟函数和反馈函数的区别

    反馈节点 和离散延迟函数相似,但有一些关键区别。下表给出了两者间的差别信息。

    反馈节点 离散延迟函数 建议
    设计和功能
    • 用于反馈输出信号至输入端。
    • 用于将输入信号延迟一定数量的时钟周期。
    用于将输入信号延迟固定数量或可变数量的时钟周期。 使用代表用户正在编程的条件分支的函数。
    初始条件
    • 初次调用FPGA VI或FPGA VI重置时,初始化内部寄存器为自定义的值
    • 当FPGA VI编译/载入或FPGA VI重置时,初始化内部寄存器的值为自定义的值
    • 当FPGA VI编译/载入或忽略FPGA VI重置时,初始化内部寄存器的值为自定义的值
    • 初次调用FPGA VI或FPGA VI重置时,重置内部寄存器的值为零
    • 当FPGA VI编译/载入或忽略FPGA VI重置时,初始化内部寄存器的值为自定义的值
    离散延迟使用SRL而不是触发器执行延时。SRL可在单个查找表(LUT)中包含多个延迟,从而比触发方式节省更多的FPGA资源。
    定义初始值的方式 在程序框图上,连线值至初始化接线端来定义初始值。 通过初始值表或使用自定义初始化VI定义初始值。 具有初始化VI或需要延迟固定大小的数组的情况下,使用“离散延迟”函数。
    动态延时的支持 需要动态延时时可使用“离散延迟”函数。
    程序框图上代表反馈的支持 程序框图上需要表示反馈时可使用“反馈”节点

    恒定延迟与动态延迟

    下列范例阐述了固定延迟动态延迟间的区别。

    如设置固定延迟20个时钟周期,该函数创建20个内部寄存器(编号为0至19),以存储连线至D的值。在第一个时钟周期发送至D的值将被存储直至第20个时钟周期,此时假设启用接线端的值设置为TRUE。

    发送新值至D时,函数将值从一个寄存器移动至下一个寄存器。输入的初始值在寄存器0、寄存器1、寄存器2等以此类推的寄存器内移动,直至值在第20个时钟周期到达寄存器19。在第21个时钟周期,输出接线端Q返回在第一个时钟周期输入的值。该值被延迟了20个时钟周期。

    用于动态延时的函数动作与此类似。如设置最大延迟20个时钟周期,函数也会创建20个用于存储数据的寄存器。连线至D的值在连续的时钟周期内从寄存器0移动至寄存器19。

    但函数也会显示n–1输入接线端,该接线端可用于指定内部寄存器的编号。Q返回该寄存器的值,而不总是最后一个寄存器的值。

    例如,已经过17个时钟周期。在第1个时钟周期发送至D的值位于寄存器16中。如在第18个时钟周期连线16n–1,函数将返回该值。该值被延迟了17个时钟周期,而不是20。

    仿真输出的详细信息

    当配合下载、停止和运行FPGA VI使用时,该节点将显著增加仿真运行时间。

    范例

    参考LabVIEW FPGA模块中包含的下列范例文件。

    • labview\examples\CompactRIO\FPGA Fundamentals\FPGA Math and Analysis\High-Throughput Math\Multi-Channel Averaging\Multi-Channel Averaging.lvproj
    • labview\examples\R Series\FPGA Fundamentals\FPGA Math and Analysis\High-Throughput Math\Multi-Channel Averaging\Multi-Channel Averaging.lvproj