circt
circt copied to clipboard
[Scheduling] Problem understanding `incomingDelay` and `outgoingDelay` in a simple example.
I'm using the simplex scheduler with a simple example. But I think I misunderstood what the incomingDelay and outgoingDelay are. I understood that the operation must start at least incomingDelay before the next clock tick. After this clock ticks, the results will be available only after outgoingDelay. Am I right?
I have a problem in the following example when I try to schedule it using the simplex scheduler with a cycle-time of 10.0:
ssp.instance of "ChainingCyclicProblem" {
library {
operator_type @operator [latency<1>, incDelay<8.0>, outDelay<3.0>]
}
graph {
%0 = operation<@operator> @op0(@op0 [dist<1>])
}
}
This example represents the following simple circuit :

The operation has to start at 8.0 before the end of the cycle, and the results are available after 3.0 in the next cycle. Having II=1 is impossible as the operation needs the results of its previous iteration. Leads to the following schedule, with II=2 :

But when I use circt-opt with the argument -ssp-schedule="scheduler=simplex options=cycle-time=10.0" the result is :
ssp.instance of "ChainingCyclicProblem" [II<1>] {
library {
operator_type @operator [latency<1>, incDelay<8.000000e+00 : f32>, outDelay<3.000000e+00 : f32>]
}
graph {
%0 = operation<@operator> @op0(@op0 [dist<1>]) [t<0>, z<0.000000e+00 : f32>]
}
}
This means the schedule would look like this:

How is this schedule correct? What did I miss about circt's scheduling problems?