Skip to content

Commit 9af8201

Browse files
rroohhhwhitequark
authored andcommitted
lib.fifo.AsyncFIFOBuffered: fix output register accounting
1 parent 2a7a3ae commit 9af8201

File tree

2 files changed

+8
-2
lines changed

2 files changed

+8
-2
lines changed

nmigen/lib/fifo.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -509,7 +509,7 @@ def elaborate(self, platform):
509509
]
510510

511511
r_consume_buffered = Signal()
512-
m.d.comb += r_consume_buffered.eq(self.r_rdy - self.r_en)
512+
m.d.comb += r_consume_buffered.eq((self.r_rdy - self.r_en) & self.r_rdy)
513513
m.d[self._r_domain] += self.r_level.eq(fifo.r_level + r_consume_buffered)
514514

515515
w_consume_buffered = Signal()

tests/test_lib_fifo.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ def testbench():
305305
simulator.add_sync_process(testbench)
306306
simulator.run()
307307

308-
def check_async_fifo_level(self, fifo, fill_in, expected_level):
308+
def check_async_fifo_level(self, fifo, fill_in, expected_level, read=False):
309309
write_done = Signal()
310310

311311
def write_process():
@@ -320,6 +320,8 @@ def write_process():
320320
yield write_done.eq(1)
321321

322322
def read_process():
323+
if read:
324+
yield fifo.r_en.eq(1)
323325
while not (yield write_done):
324326
yield Tick("read")
325327
self.assertEqual((yield fifo.r_level), expected_level)
@@ -351,3 +353,7 @@ def test_async_buffered_fifo_level_only_three(self):
351353
def test_async_buffered_fifo_level_full(self):
352354
fifo = AsyncFIFOBuffered(width=32, depth=9, r_domain="read", w_domain="write")
353355
self.check_async_fifo_level(fifo, fill_in=10, expected_level=9)
356+
357+
def test_async_buffered_fifo_level_empty(self):
358+
fifo = AsyncFIFOBuffered(width=32, depth=9, r_domain="read", w_domain="write")
359+
self.check_async_fifo_level(fifo, fill_in=0, expected_level=0, read=True)

0 commit comments

Comments
 (0)