The pipeline scheduler can work in the following modes.
- II-constrained mode
- The pipeline scheduler works in this mode if the II of the
pipeline is specified (locally or by propagating the II of a caller pipeline to
a callee function pipeline).
- Dependence, pipelining (including cyclic data dependence, top argument synchronization, and exit condition), and resource constraints are added first, in that order. If any of these constraints fail, the II might increase as a result.
- Timing constraints are added last, and if they fail, the clock period is increased to the smallest value that allows scheduling to succeed. The II of a pipeline can never increase due to timing constraints. Pipeline latency can increase, however, and as a result the II of upper dataflow regions and the top can increase due to timing.
- Timing-constrained mode
- The pipeline scheduler works in this mode if the II of the
pipeline is not specified. In this case, all of the above constraints are
applied, and if any of them fails, the II of the pipeline is increased due to
timing constraints.Note: The timing estimator used by Vitis HLS to add timing constraints is conservative. The best absolute throughput (smallest II * clock period) is often achieved by constraining the II of every pipeline that is critical for the overall design performance, even in the presence of reported II timing violations, if Vivado can meet timing for the module enclosing the pipeline.