From 0e22a8d56374ed1f3781480f12d764402eb23218 Mon Sep 17 00:00:00 2001 From: Fischer Moseley <42497969+fischermoseley@users.noreply.github.com> Date: Thu, 5 Mar 2026 10:21:03 -0700 Subject: [PATCH] uart: COBS decoder working with both irritators --- src/manta/uart/cobs_decode.py | 2 +- test/test_cobs_decode.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/manta/uart/cobs_decode.py b/src/manta/uart/cobs_decode.py index f7268c0..5b57dc0 100644 --- a/src/manta/uart/cobs_decode.py +++ b/src/manta/uart/cobs_decode.py @@ -69,7 +69,7 @@ class COBSDecode(wiring.Component): m.d.comb += [ self.source.data.eq(fifo.r_data), - self.source.valid.eq(fifo.r_rdy), + self.source.valid.eq(fifo.r_rdy & (fsm.ongoing("IDLE") | (fifo.r_level > 1))), self.source.last.eq(fsm.ongoing("IDLE") & self.source.valid & (fifo.r_level == 1)), fifo.r_en.eq(self.source.valid & self.source.ready), ] diff --git a/test/test_cobs_decode.py b/test/test_cobs_decode.py index 815d44b..1497bf4 100644 --- a/test/test_cobs_decode.py +++ b/test/test_cobs_decode.py @@ -36,7 +36,7 @@ async def test_cobs_decode_static(ctx): ] for data in testcases: - await decode_and_compare(ctx, data, tx_irritate=False, rx_irritate=False) + await decode_and_compare(ctx, data, tx_irritate=True, rx_irritate=True) async def decode(ctx, data, tx_irritate, rx_irritate): @@ -54,11 +54,11 @@ async def decode(ctx, data, tx_irritate, rx_irritate): # Feed data to decoder tx_stall = random.randint(0, 1) if tx_irritate else False - if tx_done: + if tx_done or tx_stall: ctx.set(cd.sink.data, 0) ctx.set(cd.sink.valid, 0) - elif not tx_stall: + else: ctx.set(cd.sink.valid, 1) ctx.set(cd.sink.data, data[tx_index])