Description
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?