fetch1: Fix debug stop
authorPaul Mackerras <paulus@ozlabs.org>
Sat, 19 Dec 2020 06:11:53 +0000 (17:11 +1100)
committerPaul Mackerras <paulus@ozlabs.org>
Sat, 19 Dec 2020 06:11:53 +0000 (17:11 +1100)
commite41cb01bca9920bace5c516f0328505ca86e6971
treeae74001e81d6a021f498f0d2ce2bceebed2c326e
parent97586e7e99af4ca8382c339ca0175ea6133b8002
fetch1: Fix debug stop

The ability to stop the core using the debug interface has been broken
since commit bb4332b7e6b5 ("Remove fetch2 pipeline stage"), which
removed a statement that cleared the valid bit on instructions when
their stop_mark was 1.

Fix this by clearing r.req coming out of fetch1 when r.stop_mark = 1.
This has the effect of making i_out.valid be 0 from the icache.  We
also fix a bug in icache.vhdl where it was not honouring i_in.req when
use_previous = 1.

It turns out that the logic in fetch1.vhdl to handle stopping and
restarting was not correct, with the effect that stopping the core
would leave NIA pointing to the last instruction executed, not the
next instruction to be executed.  In fact the state machine is
unnecessary and the whole thing can be simplified enormously - we
need to increment NIA whenever stop_in = 0 in the previous cycle.

Fixes: bb4332b7e6b5 ("Remove fetch2 pipeline stage")
Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
fetch1.vhdl
icache.vhdl