circt icon indicating copy to clipboard operation
circt copied to clipboard

[Scheduling] Problem understanding `incomingDelay` and `outgoingDelay` in a simple example.

Open leothaud opened this issue 5 months ago • 2 comments
trafficstars

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?

leothaud avatar May 22 '25 07:05 leothaud