Three production verification workflows

This section starts from where verification engineers actually lose time, not from API names. Each example identifies the failure scene, shows which step the plugin removes, and states what it cannot do.

PluginWhen it is usedMaturity todayWhy a plugin
Protocol checkerInterface timeout, scoreboard mismatch, or first-silicon trace replayProject-ready channel checkerStrong: project protocols, signal roles, and rules change independently of the waveform engine.
X / Z detectiveAn X/Z appears briefly after reset, recovery, or power transitionProject-ready bounded triageModerate: teams can tailor the triage view, but the generic interval index may eventually belong in the core.
Regression failure triageA regression report and its waveform live in separate systemsProject-ready JUnit workflowStrong: simulator, farm, and project report formats should not be hard-coded into the waveform core.
1

Protocol checker

Project-ready channel checker

After an interface timeout or scoreboard mismatch, see which rule failed, at what cycle, and on which signal while retaining successful transfers; select a result to jump back to the fault in the waveform. Supplied profiles cover ready/valid, request/acknowledge, AXI4/AXI4-Lite AW/W/B/AR/R and ACE AC/CR/CD channels, AXI4-Stream, APB, AHB-Lite, Avalon-ST/MM, Wishbone B4, and a TileLink decoupled channel.

Production pain

A scoreboard mismatch or timeout says that a transfer failed, but manually reading valid, ready, and every payload sideband rarely tells you which cycle first broke the contract.

Concrete recorded case

The recorded ready/valid fixture changes payload while stalled, accepts one transfer, then drops valid before a later handshake. The plugin reports payload-changed and valid-dropped with exact times, plus the accepted transfer.

Input
A waveform plus an interface scope whose signal leaves match a profile; exact role paths can be overridden.
Location
examples/tcl-protocol-decoder/plugin.json
GitHub folder
svcomplex-dev/svw-plugins/plugins/protocol-decoder
Load
svw waveform.vcd --plugin examples/tcl-protocol-decoder/plugin.json
Use
:plugins exec ready-valid top.dut_if 200ns 2us
Shared Agent/MCP/JSON action
svw agent sample/tutorial_protocol.vcd plugin-run examples/tcl-protocol-decoder/plugin.json check '{"profile":"ready-valid","clock":"top.clk","start":0,"end":65,"roles":{"valid":"top.valid","ready":"top.ready"}}'
Result
Select an issue and press Enter/g to reveal its signal and time in the native waveform; o publishes the evidence as a native report.

Scope boundary: This is a channel-level handshake and stability checker, not a complete AXI/ACE/TileLink compliance product. Ordering, bursts, cache, and coherence still need dedicated verification IP or project rules.

Play the real workflow — Protocol checker
Play the shared headless action — Protocol checker
2

X / Z detective

Project-ready bounded triage

Find every X, Z, or mixed-unknown interval of the selected signal inside the visible range, including its duration and exact value. The scan is paged and stops visibly at its transition budget.

Production pain

After reset or error recovery, a bus can become X for only a short interval. Scrolling a long dump by eye is slow and often starts root-cause analysis at the wrong transition.

Concrete recorded case

The recording selects top.instruction_bus, finds its X interval starting at tick 35 and the following Z interval, then reveals the selected evidence back in the native waveform.

Input
Any selected digital signal in the native signal panel; zoom first to bound the interval of interest.
Location
examples/tcl-x-detective/plugin.json
GitHub folder
svcomplex-dev/svw-plugins/plugins/x-detective
Load
svw waveform.vcd --plugin examples/tcl-x-detective/plugin.json
Use
Select a signal, then use j/k and Enter or g
Shared Agent/MCP/JSON action
svw agent sample/tutorial_demo.vcd plugin-run examples/tcl-x-detective/plugin.json scan '{"signal":"top.instruction_bus","start":0,"end":100,"class":"X","min_duration":"2ns"}'
Result
The panel lists unknown intervals; Enter/g jumps the native signal and waveform cursor to the selected interval.

Scope boundary: It locates unknown intervals; it does not by itself prove which driver introduced the X. After the jump, use svw's native Trace-X/driver evidence for root cause. The scan is limited to the visible range and 2,048 transitions.

Play the real workflow — X / Z detective
Play the shared headless action — X / Z detective
3

Regression failure triage

Project-ready JUnit workflow

Load a bounded regression-failure report beside the waveform, review assertion, protocol, and unknown-value failures, and jump from the selected test failure to its exact waveform time.

Production pain

A nightly regression may leave hundreds of failures in one tool and waveforms in another. Engineers repeatedly copy test names and timestamps before they can inspect the failing cycle.

Concrete recorded case

The bundled report contains reset, protocol, and unknown-value failures at ticks 120, 245, and 390. The recording selects error_injection and moves the native waveform directly to 390.

Input
JUnit XML whose failing testcases carry an integer svw.time property; an optional JUnit baseline enables new/common/fixed classification.
Location
examples/tcl-failure-triage/plugin.json
GitHub folder
svcomplex-dev/svw-plugins/plugins/failure-triage
Load
SVW_PLUGIN_CONFIG_TRIAGE_FILE=failures.junit.xml svw waveform.vcd --plugin examples/tcl-failure-triage/plugin.json
Use
Use j/k to select a failure, then press Enter or g
Shared Agent/MCP/JSON action
svw agent sample/tutorial_demo.vcd plugin-run examples/tcl-failure-triage/plugin.json triage '{"file":"examples/tcl-failure-triage/failures.junit.xml","limit":256}'
Result
The selected failure time is revealed in the native waveform; a baseline report turns the same pane into a regression-diff view.
<testcase classname="cpu.basic" name="error_injection">
  <properties><property name="svw.time" value="390"/></properties>
  <failure message="response bus contains X"/>
</testcase>

Scope boundary: JUnit input must carry an explicit integer waveform tick for every failing testcase; wall-clock testcase duration is never guessed as simulation time. Free-form UVM and simulator logs still require an exporter. Files above 4 MiB, 4,096 records, or malformed fields are rejected.

Play the real workflow — Regression failure triage
Play the shared headless action — Regression failure triage

Plugins load only when the user explicitly supplies a manifest; waveform and session files never activate Tcl code. Set SVW_TCLSH when tclsh is not on PATH.