From: Benjamin Herrenschmidt Date: Thu, 14 May 2020 02:30:11 +0000 (+1000) Subject: pp_fifo: Fix full fifo losing all data on simultaneous push & pop X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=bd42580a4217b6a66e0842d370f57b5022e6f9f1;p=microwatt.git 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 --- 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