diff --git a/src/gateware/cxp_pipeline.py b/src/gateware/cxp_pipeline.py index 59bff24..53f464a 100644 --- a/src/gateware/cxp_pipeline.py +++ b/src/gateware/cxp_pipeline.py @@ -611,3 +611,23 @@ class DChar_Dropper(Module): self.sink.ack.eq(~self.source.stb | self.source.ack), ] +class EOP_Marker(Module): + def __init__(self): + self.sink = stream.Endpoint(word_layout_dchar) + self.source = stream.Endpoint(word_layout_dchar) + + # # # + + self.sync += [ + If((~self.source.stb | self.source.ack), + If(~((self.sink.dchar == KCode["pak_end"]) & (self.sink.dchar_k == 1)), + self.sink.connect(self.source, omit={"ack", "eop"}), + ).Else( + self.source.stb.eq(0), + ) + ), + ] + self.comb += [ + self.sink.ack.eq(~self.source.stb | self.source.ack), + self.source.eop.eq(((self.sink.dchar == KCode["pak_end"]) & (self.sink.dchar_k == 1))), + ]