WaveCrux — Waveform Analysis for RTLThe waveform is not the hard part. Working out what the waveform means is. WaveCrux puts a full debug-analysis layer in a VSCode tab: nine protocol decoders with a transaction table, X-trace to find where an unknown came from, waveform diff across two runs, FSM state views, and switching-activity analysis. Then it connects that tab to the rest of your toolchain — including the tools that are not running inside your editor. Open a
The analysis layerEverything below ships in the extension. No account, no key, no separate download — it is the WaveCrux open-core build, embedded.
Rendering, navigation, formatting and netlist search are table stakes and are built on wellen compiled to WebAssembly — the same parsing engine several other open-source viewers use. We are not claiming to draw a nicer square wave. The claim is everything above. Built for the editor, not merely hosted in it
Connected to tools that are not in your editorWaveCrux, LintCrux, SimCrux and NetCrux speak CXP, a cross-process peer protocol. That is the part an in-editor extension API cannot do: CXP reaches the desktop applications, on the same machine, over loopback — so a running NetCrux or LintCrux desktop session is a peer of this window. Your VSCode window is one CXP peer no matter how many of the four extensions you install: one identity, one manifest, one heartbeat, capabilities composed from whatever is installed. A peer that asks this window to open a source location gets the file opened at the right line. Install the EDACrux Suite pack to get all four at once. Getting started
Default editor for
|
| Setting | Default | What it does |
|---|---|---|
edacrux.rtlAnnotation.enabled |
false |
Inline signal values in Verilog/VHDL source, following the waveform cursor |
edacrux.crossProbe.revealSelection |
true |
Bring the matching tab forward when a connected Crux app announces a selection |
edacrux.crossProbe.openSourceFocusesEditor |
true |
Move the cursor into the editor when a peer asks to open a source location |
edacrux.crossProbe.followWaveformSelection |
false |
Reveal a signal's RTL declaration in the editor when you select it in a waveform tab in this window |
Colours
The annotations take their colour from your theme and stay muted by default.
Each has its own colour id, so a theme can style it, and you can raise the
contrast (for a projector or a screen recording, say) in
workbench.colorCustomizations without recolouring CodeLenses:
| Colour id | Default | Used for |
|---|---|---|
edacrux.rtlAnnotationForeground |
editorCodeLens.foreground |
A signal value at the end of a source line |
edacrux.rtlAnnotationAmbiguousForeground |
editorWarning.foreground |
A name that matches more than one signal |
"workbench.colorCustomizations": {
"edacrux.rtlAnnotationForeground": "#4fc1ff"
}
Commands
| Command | Id |
|---|---|
| Open Waveform Panel | wavecrux.openPanel |
| Toggle RTL Value Annotation | edacrux.toggleRtlAnnotation |
| Send Selection to Crux App | edacrux.sendSelectionToPeer |
| Highlight Selection in Crux App | edacrux.highlightSelectionInPeer |
| Open Capabilities Panel | edacrux.openCapabilitiesPanel |
Send and Highlight take the identifier under your cursor to a running Crux app: one connected app is sent to directly, several are offered in a quick pick.
What this extension does not do — stated plainly
- FSDB is refused, with an explanation.
.fsdbrequires Synopsys libraries that cannot be redistributed. The extension tells you that instead of failing obscurely. - NetCrux → waveform highlight is not wired yet. WaveCrux's surface advertises no highlight capability rather than accepting the request and dropping it. When the webview command lands, the capability is advertised in the same change.
- Restricted workspaces. It runs with limited support in a folder you
have not trusted. Waveforms open, decode and cross-probe normally: the
extension only reads the files you open and never runs a program. One
setting is held back: a workspace value for
edacrux.rtlAnnotation.enabledis ignored, because an untrusted folder should not put text into your source. Switch it on in your own user settings, or trust the folder. - Pro and Enterprise features are not bundled. No AI debug advisor, no SV assertion visualization, no collaborative viewing, no Stage Pro custom widget SDK. Those live in WaveCrux Desktop and are linked, never quietly disabled here.
- The desktop app is still the deeper tool for multi-tab workspaces, the Stage instrument panel, interactive VCD over a pipe, and the WCP remote control API.
Telemetry
Off unless you have VSCode telemetry on. The extension checks
vscode.env.isTelemetryEnabled at send time, not once at startup, so turning
telemetry off in VSCode turns it off here immediately.
Localization
English, 简体中文, 日本語 and 한국어 — hand-translated, commands and settings included.
The rest of the suite
| Extension | What it is for |
|---|---|
| LintCrux | RTL lint results as Problems-panel diagnostics, with waivers filed from a quick fix |
| SimCrux | RTL regressions in the Test Explorer; a failing proof's counterexample opens in a waveform tab beside it |
| NetCrux | "What drives this signal?" on a selection, resolved through the stems index |
| EDACrux Suite | All four, installed together |
Built by Ferrite Engineering. Apache-2.0. edacrux.app