|Download Help (Windows Only)|
The Initiation interval directive specifies the number of cycles between new data inputs to the VI or between two continuous loop iterations. The Initiation interval directive is available for VIs, subVIs, and individual loop structures. This directive recursively unrolls all loop structures contained within the VI, subVI, or specific loop structure. The FPGA IP Builder recursively propagates the Initiation interval of a top-level VI, subVI, or loop structure to all subVIs within the hierarchy of the VI, subVI, or loop structure to achieve the specified Initiation interval. A successful Initiation interval design requires all the loop structures in the hierarchy to be completely unrolled and all the subVIs in the hierarchy to achieve an equal or smaller Initiation interval value than their owning VIs or owning loop structures.
There may be some cases where the FPGA IP Builder is unable to unroll some loops in a VI, such as For Loop structures that have variable iteration counts. However, failure to completely unroll one loop does not stop the FPGA IP Builder from unrolling other loop structures. The process of unrolling loops leads to less latency, increased parallelism, smaller initiation intervals, and, typically, greater resource usage compared to designs where you do not specify an Initiation interval.
Use the following table to find possible solutions to many common Initiation interval issues:
|If there is a loop structure with a variable iteration count, such as a For Loop with a control wired to the count (N) terminal or a While Loop, the directive cannot completely unroll the loop structure.||Remove the Initiation interval of the owning VI or loop structure and apply the Initiation interval directive directly to the loops with variable iteration counts. You can also specify a fixed iteration count for the loop structure.|
|If a loop structure in the hierarchy has an Unroll factor that is smaller than the corresponding loop iteration count or has its own Initiation interval value, the Initiation interval directive of the owning VI or loop structure cannot completely unroll the contained loop structure.||Remove the Initiation interval and Unroll factor directives from the corresponding loop structures.|
|If a loop structure in the hierarchy has an iteration count larger than 128, or several nested loop structures in the hierarchy have an equivalent total iteration count of larger than 128, the Initiation interval directive might require a long estimation or build time to completely unroll all the loops.||Remove the Initiation interval directive of the owning VI or loop structure and apply the Initiation interval directive directly to the affected loops.|
|If the top-level VI has element-by-element interface arrays where the maximum array size is N and you specify a top-level Initiation interval which is smaller than N, you cannot achieve the specified Initiation interval.||Change the top-level Initiation interval directive to a value which is equal to or larger than N. If you need an Initiation interval which is less than N, you must specify the top-level interface arrays directive to be All elements. You can also modify the algorithm VI to make the top-level interface array sizes equal to or smaller than the expected initiation interval.|
|If a subVI in the hierarchy has an Initiation interval value which is different from its caller VI or owning loop structure, the Initiation interval value directly specified on the subVI takes precedence. This incompatibility may cause the initiation interval values of the caller VI or owning loop structures to fail to meet the specified Initiation interval value.||Remove unnecessary directives or change the values of the directives.|
|If you access one element of an array within a loop structure, completely unrolling the loop structure requires access to multiple elements of the array simultaneously. If the array is stored in a memory block on an FPGA target, you can only access a limited number of elements from the memory block at a time. Access to a limited number of elements from the memory block at a time can cause failure to achieve the specified Initiation Interval value.||Apply the Partition type and Number of partitions directives on the array to increase the number of elements that the VI can access simultaneously.|