Additional Information
Why use synchronization registers?The registers ensure that input and output data meet timing constraints. If a logic high on an input occurs near the end of a clock cycle, then it gets clocked into the register for one cycle and presented to your code at the very beginning of the next clock cycle. This allows the data to propagate through all the logic within 1 clock cycle. By default, LabVIEW uses 2 registers for input and 2 for output.
What happens if I set the synchronization register value to 0?You can modify the number of synchronization registers for I/O data in the FPGA I/O Properties dialog box, as described in the
FPGA I/O Properties Dialog Box Help.
Figure 3 illustrates what happened in a test setup with the synchronization register value set to 0:
In this case the input signal was a pulse train created on the same FPGA, so it was synchronized with the FPGA logic. Therefore we did not encounter any issues with metastability. The 10ns delay is due to lengthy cabling.
Set your
Number of Synchronizing Registers for Output Data to
0 only if you also use the HDL Interface Node or component-level IP (CLIP), and the HDL code contains its own synchronization registers. Otherwise, you might introduce metastable data in the FPGA VI and experience unpredictable behavior. This metastability happens because the there is not always enough time to process the input signal and then create an output signal. If you received an input signal near the end of the clock cycle, the output would not resolve in time and you would get effectively random data on the output. That is why the synchronization registers are important.