circt
circt copied to clipboard
[Pipeline] Extend Pipeline Dialect's pipeline-schedule-linear pass to support more types of scheduling problems
CIRCT’s static scheduling infra defines 6 different types of problems:
- Problem: A basic, acyclic problem at the root of the problem hierarchy. Operations are linked to operator types, which have integer latencies. The solution comprises integer start times adhering to the precedence constraints implied by the dependences.
- CyclicProblem: Cyclic extension of
Problem. Its solution solution can be used to construct a pipelined datapath with a fixed, integer initiation interval, in which the execution of multiple iterations/samples/etc. may overlap. Operator types are assumed to be fully pipelined.- SharedOperatorsProblem: A resource-constrained scheduling problem that corresponds to multiplexing multiple operations onto a pre-allocated number of fully pipelined operator instances.
- ModuloProblem: Models an HLS classic: Pipeline scheduling with limited resources.
- ChainingProblem: Extends
Problemto consider the accumulation of physical propagation delays on combinational paths along SSA dependences.- ChainingCyclicProblem: Extends
ChainingProblemandCyclicProblemto consider the accumulation of physical propagation delays on combinational paths along SSA dependences on a cyclic scheduling problem. Note that the problem does not model propagation delays along inter-iteration dependences. These are commonly represented as auxiliary dependences, which are already excluded in the parent ChainingProblem. In addition, the ChainingCyclicProblem explicitly prohibits the use of def-use dependences with a non-zero distance.
Currently, the *pipeline-schedule-linear* pass from the pipeline dialect only supports the base Problem type. This PR extents this pass to support all currently avabilaible scheduling problems.