LabVIEW在FPGA硬件I/O接口和FPGA I/O节点间放置同步寄存器,该操作与终端FPGA上的操作类似。用户可指定用于输入数据的同步寄存器的数量为0、1或2。或指定用于输出数据的同步寄存器的数量为0或1。当输入被设置为自动(默认)时,用于输入数据的同步寄存器的数量为2,输出数据的同步寄存器的数量为1。

注: 如在单周期定时循环中指定用于数字输入和数字输出资源的同步寄存器数量为0,即在两个资源间创建了一个组合电路。组合电路可能产生输出信号毛刺并导致不可预期的动作。关于描述该场景范例代码的详细信息,见设置同步寄存器的数量为零的范例代码。
警告如指定用于嵌套在单周期定时循环内的条件结构的数字输出资源的同步寄存器数量为0,启用链置为无效时,LabVIEW不能保留数字输出资源的上一个状态,进而导致未预期的输出。NI建议在未添加用于保留上一个状态的必需逻辑的情况下,尽量避免指定同步寄存器数量为0。

使用默认数量的同步寄存器的范例代码

假设一个带有数字I/O运算,在单周期定时循环内部运行的FPGA VI如下图所示。

数字输入信号“数字输入1”连接至数字输出信号“数字输出1”。连接至选择器接线端的触发器控制指定何时应用读取“数字输入1”的数据,并使用条件结构写入“数字输出1”。

同步寄存器的数量选项被设置为默认选项自动时,FPGA上的电路如下列示意图所示。

在该范例中,“数字输入1”为FPGA的物理DIO引脚,通过它可直接连接两个同步寄存器。第一个同步寄存器处理亚稳态。第二个同步寄存器的输出直接连至“数字输出1”的对应同步寄存器,该寄存器连至FPGA上的输出DIO引脚。触发器控制寄存器输出连至输出同步寄存器的启用链输入端,以判定何时输出信号。

设置同步寄存器数量为0的范例代码

假设程序框图与上图一致,但用于数字输入和输出的同步寄存器的数量被设置为0。FPGA的等效电路如下所示。

此时数字输入信号"Digital Input 1"直接通过硬接线连至FPGA上的数字输出信号"Digital Output 1"。编译进程不包含任何用于判断何时读取“数字输出1”和写入“数字输出1”的控制逻辑。在上述情况下,比特位文件下载至FPGA后,数字I/O立即连接彼此。

使用0个同步寄存器和一个逻辑函数的范例代码

如在单周期定时循环内,必须设置I/O同步寄存器的数量为0且对于“设置同步寄存器数量为0的范例代码”中描述的动作不满意,用户必须确保应用程序在输入和输出间包含逻辑。通过在I/O输入和输出间添加逻辑可避免使用独立于控制逻辑之外的直接连线。下列程序框图显示了一个不带有同步寄存器的执行代码选项。

上述程序框图使用"逻辑与"函数替代条件结构,控制何时信号到达“数字输出1”。“数字输入1”节点和触发器控制为“逻辑与”函数的输入,“逻辑与”函数的输出连接至“数字输出1”节点。FPGA的等效电路如下所示。

上述电路与“使用默认数量的同步寄存器的范例代码”中的电路类似。仅当触发器控制设置为TRUE时,“数字输入1”和“数字输出1”间才建立连接。但电路之间的区别在于:“数字输入1”和“数字输出1”间的信号路径不包含寄存器。“数字输出1”可能独立于控制单周期定时循环的时钟变化。

注: 用于实现“与”函数逻辑的组合逻辑可能引起输出端信号毛刺,并导致未预期的动作。