Hi CIRCT developers,
I’m Julian from TU Darmstadt, and my past and potentially future research interest is in modulo schedulers. To that end, I was wondering if a generic interface for static operation schedulers for HLSlike compile flows would fit into CIRCT.
A rough outline of what I mean is below. No code is written yet, but I wanted to ask about this early to find out if anyone else a) would be interested in this, or b) is already working on something similar.
 Operations with a graph region implement a
SchedulableOpInterface

getOperatorType(Operation*)
returns one (or more, if the scheduler shall choose) suitable operator types (see below) for each of the nested operations. 
getSchedulingDependences()
returns a list of precedence constraints relevant for scheduling

 An
OperatorType
corresponds to an item in your HLS component library, and specifies: latency: number of clock cycles until result is available. Example: 0 = combinatorial, > 1 multicycle
 blocking time: number of clock cycles until next input is accepted. Example: 1 = fully pipelined, equal to latency = not pipelined
 incoming/outgoing delay: physical propagation time in first / last cycle
 available units: if at most a fixed number of units of this operator should be instantiated
 resources: LUTs, DSPs, …, die area per operation instance
 A
Dependence
comprises a source and destinationOperation*
and an integerdistance
which is required for pipeline scheduling (e.g.dst
depends on the result fromsrc
from 3 iterations / samples / etc. ago). The SSA graph already encodes most of the dependences (e.g. operands need to be finished before their result can be used), but there can additional constraints such as enforcing an ordering of memory accesses.
 A concrete scheduler (such as the ModuloSDC algorithm) would be implemented as an analysis that can be queried for the nested operations’ start times, and optionally (if a particular algorithm computes that info), number of required operator instances, binding of operations to operator instances, initiation interval. This information would be used by a conversion from an untimed into a timed dialect like HIR.