Created attachment 5 [details] screenshot of gtkwave signalling between two pipelines is somehow getting out of sync (where one does not) if the time-differential between d_ready and d_valid is only one clock, everything is fine. however if that is extended to 2 clock cycles, the output from pipe2 remains "valid" for one clock longer than it should. attached annotated drawing.
change the value below from 3 to 2 to generate the succeeding case class ExampleBufDelayedPipe(BufferedPipeline): def __init__(self): stage = ExampleStageDelayCls(valid_trigger=3) BufferedPipeline.__init__(self, stage, stage_ctl=True, buffermode=False)
Created attachment 6 [details] screenshot of gtkwave (simpler case) found a simpler case, a single pipeline, showing n_i_ready not really working, which is very strange.
turns out not to be timing at all, was in fact the new buffermode=False.