[Libre-soc-bugs] [Bug 726] New: Additional core_stop check after Execute breaks single-stepping
bugzilla-daemon at libre-soc.org
bugzilla-daemon at libre-soc.org
Tue Oct 12 22:34:51 BST 2021
https://bugs.libre-soc.org/show_bug.cgi?id=726
Bug ID: 726
Summary: Additional core_stop check after Execute breaks
single-stepping
Product: Libre-SOC's first SoC
Version: unspecified
Hardware: PC
URL: https://libre-soc.org/irclog/latest.log.html#t2021-10-
12T18:33:53
OS: Linux
Status: CONFIRMED
Severity: major
Priority: High
Component: Source Code
Assignee: cestrauss at gmail.com
Reporter: cestrauss at gmail.com
CC: libre-soc-bugs at lists.libre-soc.org
NLnet milestone: ---
Executing:
1) python ~/src/soc/src/soc/simple/issuer_verilog.py --disable-svp64
--debug=dmi ~/src/soc/src/soc/litex/florent/libresoc/libresoc.v
2) python ~/src/soc/src/soc/litex/florent/sim.py --debug --variant=standard
... simulates the libre-soc core, with an embedded FSM single-stepping it,
controlled by DMI.
Right now, one every two DMI single-step commands is not actually executing,
deterministically.
Since we may want to stop the core in the middle of a VL loop, I have put
another core stop check after Execute. Together with the check before Fetch,
that's two core stop checks in a row.
What I didn't anticipate was core_stop being pulsed low, for single-step. As
core_stop immediately goes high, the second check before Fetch catches it, and
doesn't resume execution.
Unfortunately it seems likely that this bug ended up on the chip. The
additional core_stop check after Execute was not conditional on --svp64.
These are the tasks as I see it:
1) Make a test-case that catches this regression
2) Fix the FSM to avoid the issue
3) Document the present behavior of the test chip
4) Develop and test mitigations for testing the chip
In principle, running two DMI single step commands in a row should work around
this problem on the chip.
A side effect is that, after randomly stopping the core, the PC read by DMI may
or may not point to the next instruction, depending whether the last executed
instruction updated the PC, and it stopped on the check after Execution.
Too bad about the chip. Let's hope the workaround actually works in practice,
and doesn't impact testing by much. Sorry about this.
--
You are receiving this mail because:
You are on the CC list for the bug.
More information about the libre-soc-bugs
mailing list