lib.fifo: fix {r,w}_level in AsyncFIFOBuffered

This commit is contained in:
Jaro Habiger 2020-08-18 13:11:30 +02:00 committed by whitequark
parent c7014f84ea
commit b15f0562a6
2 changed files with 20 additions and 2 deletions

View file

@ -506,10 +506,15 @@ class AsyncFIFOBuffered(Elaboratable, FIFOInterface):
fifo.w_data.eq(self.w_data),
self.w_rdy.eq(fifo.w_rdy),
fifo.w_en.eq(self.w_en),
self.w_level.eq(fifo.w_level),
]
m.d[self._r_domain] += self.r_level.eq(fifo.r_level + self.r_rdy - self.r_en)
r_consume_buffered = Signal()
m.d.comb += r_consume_buffered.eq(self.r_rdy - self.r_en)
m.d[self._r_domain] += self.r_level.eq(fifo.r_level + r_consume_buffered)
w_consume_buffered = Signal()
m.submodules.consume_buffered_cdc = AsyncFFSynchronizer(r_consume_buffered, w_consume_buffered, o_domain=self._w_domain)
m.d.comb += self.w_level.eq(fifo.w_level + w_consume_buffered)
with m.If(self.r_en | ~self.r_rdy):
m.d[self._r_domain] += [