Skip to content

Commit 2a7a3ae

Browse files
rroohhhwhitequark
authored andcommitted
lib.fifo.AsyncFIFOBuffered: fix FFSynchronizer latency
1 parent d15705c commit 2a7a3ae

File tree

2 files changed

+5
-1
lines changed

2 files changed

+5
-1
lines changed

nmigen/lib/fifo.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -513,7 +513,7 @@ def elaborate(self, platform):
513513
m.d[self._r_domain] += self.r_level.eq(fifo.r_level + r_consume_buffered)
514514

515515
w_consume_buffered = Signal()
516-
m.submodules.consume_buffered_cdc = FFSynchronizer(r_consume_buffered, w_consume_buffered, o_domain=self._w_domain)
516+
m.submodules.consume_buffered_cdc = FFSynchronizer(r_consume_buffered, w_consume_buffered, o_domain=self._w_domain, stages=4)
517517
m.d.comb += self.w_level.eq(fifo.w_level + w_consume_buffered)
518518

519519
with m.If(self.r_en | ~self.r_rdy):

tests/test_lib_fifo.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,10 @@ def test_async_buffered_fifo_level(self):
344344
fifo = AsyncFIFOBuffered(width=32, depth=9, r_domain="read", w_domain="write")
345345
self.check_async_fifo_level(fifo, fill_in=5, expected_level=5)
346346

347+
def test_async_buffered_fifo_level_only_three(self):
348+
fifo = AsyncFIFOBuffered(width=32, depth=9, r_domain="read", w_domain="write")
349+
self.check_async_fifo_level(fifo, fill_in=3, expected_level=3)
350+
347351
def test_async_buffered_fifo_level_full(self):
348352
fifo = AsyncFIFOBuffered(width=32, depth=9, r_domain="read", w_domain="write")
349353
self.check_async_fifo_level(fifo, fill_in=10, expected_level=9)

0 commit comments

Comments
 (0)