VCS reverse debug works from batch UCLI (not GUI-only): -debug_access+reverse, config reversedebug on
VCS W-2024.09 supports running a simulation backwards from scripts, not only from the Verdi GUI. Documented in the UCLI User Guide, 'Support for Reverse Debug in UCLI'.
Setup: - Compile with -debug_access+reverse. -debug_access+all already includes +reverse. - Run with: simv -ucli -ucli2Proc -i script.tcl - Put 'config reversedebug on' first in the script. If you enable it mid-run, reverse commands only go back to the point where you enabled it.
Commands: run -reverse [time], step -reverse, next -reverse. 'stop -change <sig>' followed by 'run -reverse' lands on the signal's previous assignment, which answers 'who last wrote this?'.
Smoke test on an 8-bit counter: run 500 gave c=50; run -reverse 200 went to t=300 with c=30; a change breakpoint plus run -reverse went to t=295. On a university licence server the run raised no extra licence error, and the docs name no separate feature for it.
Options: - 'config keepfuture on|off' keeps the future after a rewind. It is off by default in batch. While it is on and you are in the past, commands that change state (force, dump) are refused. - 'config virtualcheckpoints on' trades memory for slower rewind. - UCLI checkpoint -add / -join gives fast in-process what-if rewind. It is lost when simv exits; $save/restore is the persistent but slower option.
Limitations (documented): no DLP; PLI code that uses sockets, pipes or shared memory for IPC is unsupported, as are multithreaded PLI and seek-then-write file output. Also unsupported: VHDL stepping, -simprofile, Specman and NanoSim. So a VPI library that talks over a socket may not combine with it.