Harness Node
- Updated2025-09-11
- 5 minute(s) read
This asynchronous node adopts a VI and, during execution, transfers data between the asynchronous wires and the adopted VI. To use the harness node, drag and drop a dataflow VI onto the harness node. After you drop the VI onto the harness node, the harness node displays the adopted VI in the center and creates asynchronous wire terminals for the input and output data. The harness node creates default data exchange policies for the asynchronous output wires. To change the data exchange policy for an output wire, click the data exchange policy glyph for that wire. Double-clicking the harness node opens the adopted VI.
Harness Node Details
Click the glyph representing the data exchange
policy for the wire (
,
, or
) to configure the data exchange policy and buffer depth.
The default behavior of the harness node with respect to FIFO reads and writes is as follows:
- When an input FIFO is empty, the harness node does not execute the adopted VI until a sample is read from all input FIFOs present.
- When an output FIFO is full, the harness node does not read any inputs or execute the adopted VI until all the writes succeed.
- If any of the handshaking terminals are present on the adopted VI, this behavior is modified. Refer to the Handshaking Signal Protocol section for more information about this behavior.
The harness node stores a relative path to an adopted VI. This path is relative to the path of the FPGA VI that contains the harness node. You must save the FPGA VI that contains the harness node before the harness node can adopt a VI. As long as the FPGA VI that contains the harness node maintains the same relative location to the adopted VI within the harness, the harness node is always in a valid state.
Handshaking Signal Protocol
The harness node supports the handshaking signal protocol used by some of the LabVIEW FPGA Math and Analysis Express VIs. This protocol enables these Express VIs to maximize their throughput by executing every cycle of a single-cycle timed loop. These handshaking signals may also be employed by your adopted VI and may be used in a normal loop as well. If the adopted VI supports this protocol, the harness node recognizes the presence of the terminals and generates the appropriate code. These handshaking signal terminals are entirely optional. If the harness node detects the presence of these signals, their acronyms appear at the bottom of the node, though the terminals themselves are not exposed by the harness.
Handshaking signal terminals must adhere to the following naming scheme.
The harness node reads the input FIFO wires only when the value of ready for input was TRUE on the previous iteration. The harness node uses a value of TRUE for ready for input when it first begins execution.
If an input FIFO is empty, the harness node executes the VI with the value of the input valid control set to FALSE. If there are multiple input FIFOs, input valid is set to TRUE only when data is successfully read from all buffers.
If the output valid indicator is FALSE, no data is written to the output FIFOs or circular buffers. If output valid is TRUE but an output FIFO is full, the VI is executed on the next iteration with its ready for output control set to FALSE. The data from the failed write is stored by the harness node for further write attempts. The ready for output control is not set to TRUE again until all the FIFO writes succeed.