- return [self.i_data, self.o_data]
-
-class IOAckIn:
-
- def __init__(self):
- self.p_stb = Signal() # >>in - comes in from PREVIOUS stage
- self.n_busy = Signal() # in<< - comes in from the NEXT stage
-
-
-class IOAckOut:
-
- def __init__(self):
- self.n_stb = Signal() # out>> - goes out to the NEXT stage
- self.p_busy = Signal() # <<out - goes out to the PREVIOUS stage
-
-
-class BufferedPipeline:
- """ buffered pipeline stage
-
- stage-1 i.p_stb >>in stage o.n_stb out>> stage+1
- stage-1 o.p_busy <<out stage i.n_busy <<in stage+1
- stage-1 i_data >>in stage o_data out>> stage+1
- | |
- +-------> process
- | |
- +-- r_data ---+
- """
- def __init__(self):
- # input: strobe comes in from previous stage, busy comes in from next
- self.i = IOAckIn()
- #self.i.p_stb = Signal() # >>in - comes in from PREVIOUS stage
- #self.i.n_busy = Signal() # in<< - comes in from the NEXT stage
-
- # output: strobe goes out to next stage, busy comes in from previous
- self.o = IOAckOut()
- #self.o.n_stb = Signal() # out>> - goes out to the NEXT stage
- #self.o.p_busy = Signal() # <<out - goes out to the PREVIOUS stage