From 66940ea8154ab180c3792e1a4723b126b092b4f5 Mon Sep 17 00:00:00 2001 From: Sebastien Bourdeauducq Date: Wed, 15 Jul 2015 20:54:55 +0200 Subject: [PATCH] rtio: disable NOP suppression after reset and underflow --- artiq/gateware/rtio/core.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/artiq/gateware/rtio/core.py b/artiq/gateware/rtio/core.py index ffe3a978f..b4fedcf88 100644 --- a/artiq/gateware/rtio/core.py +++ b/artiq/gateware/rtio/core.py @@ -122,12 +122,20 @@ class _OutputManager(Module): sequence_error.eq(self.ev.timestamp < buf.timestamp[fine_ts_width:]) ] if interface.suppress_nop: - self.sync.rsys += nop.eq( - optree("&", - [getattr(self.ev, a) == getattr(buf, a) - for a in ("data", "address") - if hasattr(self.ev, a)], - default=0)) + # disable NOP at reset: do not suppress a first write with all 0s + nop_en = Signal(reset=0) + self.sync.rsys += [ + nop.eq(nop_en & + optree("&", + [getattr(self.ev, a) == getattr(buf, a) + for a in ("data", "address") + if hasattr(self.ev, a)], + default=0)), + # buf now contains valid data. enable NOP. + If(self.we & ~sequence_error, nop_en.eq(1)), + # underflows cancel the write. allow it to be retried. + If(self.underflow, nop_en.eq(0)) + ] self.comb += self.sequence_error.eq(self.we & sequence_error) # Buffer read and FIFO write