From bd42580a4217b6a66e0842d370f57b5022e6f9f1 Mon Sep 17 00:00:00 2001 From: Benjamin Herrenschmidt Date: Thu, 14 May 2020 12:30:11 +1000 Subject: [PATCH] pp_fifo: Fix full fifo losing all data on simultaneous push & pop The pp_fifo decides whether top = bottom means empty or full based on whether the previous operation was a push or a pop. If the fifo performs both in one cycle, it sets the previous op to pop. That means that a full fifo being added a character and removed one at the same time becomes empty. Instead, just leave the previous op alone. If the fifo was empty, it remains so, if it was full ditto. Signed-off-by: Benjamin Herrenschmidt --- fpga/pp_fifo.vhd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fpga/pp_fifo.vhd b/fpga/pp_fifo.vhd index ee9b701..553a499 100644 --- a/fpga/pp_fifo.vhd +++ b/fpga/pp_fifo.vhd @@ -78,7 +78,7 @@ begin prev_op <= FIFO_POP; else if push = '1' and pop = '1' then - prev_op <= FIFO_POP; + -- Keep the same value for prev_op elsif push = '1' then prev_op <= FIFO_PUSH; elsif pop = '1' then