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 <benh@kernel.crashing.org>
jtag-port
Benjamin Herrenschmidt 5 years ago
parent 803ee9ef35
commit bd42580a42

@ -78,7 +78,7 @@ begin
prev_op <= FIFO_POP; prev_op <= FIFO_POP;
else else
if push = '1' and pop = '1' then if push = '1' and pop = '1' then
prev_op <= FIFO_POP; -- Keep the same value for prev_op
elsif push = '1' then elsif push = '1' then
prev_op <= FIFO_PUSH; prev_op <= FIFO_PUSH;
elsif pop = '1' then elsif pop = '1' then

Loading…
Cancel
Save