ROHD Wave Viewer
ROHD Wave Viewer is an interactive viewer for VCD, FST, and GHW waveform files. It is designed for everyday waveform inspection in Visual Studio Code or a web browser, with additional integration for ROHD designs and other ROHD viewer extensions.
Use it to find signals in a design hierarchy, build and save a working signal list, inspect values and transitions, measure time intervals, and move between waveforms, schematics, and source code.
Open the hosted ROHD Wave Viewer
Click the image to watch the ROHD Wave Viewer demo.
Embed the Viewer in a Flutter Application
Add the package to the host application:
dependencies:
rohd_wave_viewer: ^0.1.0
Then import the viewer and waveform data contracts and provide a
SignalWaveformApi together with the hierarchy maintained by the host:
import 'package:rohd_hierarchy/rohd_hierarchy.dart';
import 'package:rohd_wave_viewer/rohd_wave_viewer.dart';
import 'package:rohd_waveform/rohd_waveform.dart';
final hierarchy = BaseHierarchyAdapter.fromTree(
myModuleStructure.modules.single,
);
runApp(
EmbeddedWaveViewer(
waveformApi: mySignalWaveformApi,
externalHierarchy: hierarchy,
title: 'My Waveform Viewer',
isExtensionMode: true,
),
);
isExtensionMode hides standalone-only controls. The host supplies a
SignalWaveformApi implementation appropriate for its waveform data source
and a HierarchyService through externalHierarchy. Waveform APIs do not
provide generic hierarchy discovery; if the host starts from a
ModuleStructure, it can adapt the structure's root as shown above. The
complete runnable embedding example obtains the mock
structure, adapts its hierarchy, and uses MockSignalWaveformApi from the
explicitly test-only testing.dart entry point. It therefore needs no waveform
file, native bridge, or WebAssembly setup.
The main rohd_wave_viewer.dart entry point exposes only
EmbeddedWaveViewer, WaveViewerThemeMode, and WaveViewerHelpButton.
Waveform data contracts come from package:rohd_waveform, hierarchy contracts
come from package:rohd_hierarchy, and cross-probing and source-navigation
contracts come from package:rohd_devtools_widgets.
The viewer's repositories, BLoCs, Cubits, painters, application shell, and
mutable caches are implementation details under lib/src and are not
supported package APIs.
Choose How to Open the Viewer
Visual Studio Code
The VS Code extension is the recommended option when waveform analysis is part of an editing or debugging workflow.
After installing the extension:
- Open a
.vcd,.fst, or.ghwfile from the Explorer. - If VS Code asks which editor to use, select ROHD Wave Viewer.
- You can also run ROHD Wave Viewer: Open from the Command Palette.
The waveform opens as a custom editor in the current VS Code workspace. This mode also enables integration with compatible ROHD extensions, including the ROHD Schematic Viewer.
Web Browser
Use the hosted application without installing an extension:
Select a VCD, FST, or GHW file from your computer. The hosted viewer processes the file locally in your browser; it does not upload the waveform to an application server.
The web application can also load a waveform at startup with the case-sensitive
waveFormFile query parameter. This link opens the FilterBank waveform bundled
with the application:
https://intel.github.io/rohd-wave-viewer/?waveFormFile=assets%2Fwaveforms%2Ffilter_bank.fst
The value can instead be an HTTP(S) URL. Percent-encode the complete URL when placing it inside the query string:
/?waveFormFile=https%3A%2F%2Fexample.com%2Fwaves%2Fdesign.fst
Cross-origin servers must permit browser access with CORS headers. Browsers
cannot read a user's file:// URL or arbitrary local path; use the file picker
or serve the file over HTTP instead.
Use one or more signalList parameters to populate the monitored-signal list
after the waveform loads. Each value is a full hierarchy path, so signals in
child modules use / between hierarchy components:
/?waveFormFile=assets%2Fwaveforms%2Ffilter_bank.fst&signalList=FilterBank%2Fsample1&signalList=FilterBank%2Fch0%2FdataOut
Repeated parameters preserve their order. A single parameter may also contain comma-separated paths:
&signalList=FilterBank%2Fsample1%2CFilterBank%2Fch0%2FdataOut
filter_bank.fst is declared as a Flutter package asset. The root application
loads it as assets/waveforms/filter_bank.fst; applications consuming
rohd_wave_viewer from pub.flutter-io.cn can reference the same asset as
packages/rohd_wave_viewer/assets/waveforms/filter_bank.fst, including through
EmbeddedWaveViewer.initialWaveformSource.
Linux Desktop Application
A native Linux build opens the file picker when started without arguments. To load a waveform immediately, pass it on the command line:
rohd_wave_viewer /path/to/design.fst
Linux package and executable names depend on the distribution. If you are building the desktop application from source, see Developer Guide.
Quick Start
- Open a waveform file.
- Select a module in the hierarchy pane.
- Find signals by browsing or typing in the signal filter.
- Double-click a signal to add it to the monitored list.
- Click in the waveform to place the primary time marker.
- Select one or more monitored signals to navigate their transitions, change their format, reorder them, or send them to another ROHD viewer.
The main view is arranged as coordinated panes:
- Hierarchy and module signals select the part of the design to inspect.
- Selected Signals contains the ordered working set of monitored signals.
- Values shows each monitored value at the primary marker.
- Waveforms displays signal activity over time.
The dividers between panes can be resized. The hierarchy and toolbar can also be pinned or hidden to provide more waveform space.
Find and Add Signals
Select a module to display its ports and internal signals. Use the signal filter
to search by signal name or hierarchy path. Wildcards such as * and ? can
be used to match related signals, and Tab completes a matching path or name.
Signals can be selected individually or in groups:
- Click selects one signal.
- Ctrl/Cmd + Click toggles a signal in the current selection.
- Shift + Click selects a range.
- Ctrl/Cmd + A selects all signals in the focused signal pane.
- Double-click adds a signal to the monitored list.
- The right-click menu can add or remove all selected signals.
Use the sort button to switch between ascending and descending signal names. Internal signals can be shown or hidden from the toolbar.
Work with Buses and Structured Signals
Multi-bit signals can be expanded into individual bits or selected ranges. Named bit fields can be defined when a bus contains several logical values.
When ROHD hierarchy metadata is available, the viewer preserves structured signal information rather than treating every value as an unrelated flat signal. Structures, fields, arrays, bits, and slices can be expanded and added to the monitored list independently.
This makes it possible to inspect a complete ROHD LogicStructure while also
monitoring only the fields or bit ranges relevant to the current problem.
Organize the Monitored Signal List
The monitored list is a working view of the signals under investigation:
- Drag a row to reorder it.
- Select several rows and drag them as a group.
- Add the same source signal more than once when different formats or placements are useful.
- Remove focused rows with
DeleteorBackspace. - Undo and redo monitor-list edits with the toolbar or standard
Ctrl/Cmd + Zand redo shortcuts.
Signal display formats include:
- waveform
- binary
- hexadecimal
- octal
- unsigned decimal
- signed decimal
- ASCII
The chosen format is used consistently in the selected-signal, value, and waveform panes.
Navigate and Measure Waveforms
Click the waveform area to place the primary marker. Values at that time appear in the Values pane.
Common navigation operations are:
| Action | Control |
|---|---|
| Pan through time | Scroll wheel or Left / Right |
| Scroll monitored signals | Up / Down |
| Zoom at the pointer | Shift + Scroll |
| Zoom in or out | Shift + Up / Shift + Down |
| Zoom into a time region | Ctrl + Drag from left to right |
| Zoom out with a region gesture | Ctrl + Drag from right to left |
| Fit the complete waveform | F |
| Jump to an adjacent transition | Focus a monitored signal, then press Left / Right |
Focused signals can be searched together for:
- the next or previous value change
- a rising edge
- a falling edge
- a matching value
The nearest matching transition across the focused set becomes the new marker position.
An optional measurement marker shows the time difference from the primary marker and the corresponding frequency. This is useful for checking periods, latencies, pulse widths, and spacing between transactions.
Save, Reload, and Share a View
Use the toolbar to:
- Reload the current waveform after regenerating it.
- Save a signal list as JSON.
- Load a signal list into another waveform session.
- Export the visible viewer panes as PNG.
Saved viewer state can retain monitored rows, value formats, signal filters, markers, pane layout, and the waveform viewport. This allows an investigation to be resumed without rebuilding the view manually.
Send Signals Between ROHD Viewers in VS Code
When another compatible ROHD viewer is open in the same VS Code session, the right-click menu includes Send Signal or Send Signals.
For example, with both ROHD Wave Viewer and ROHD Schematic Viewer open:
- Select one or more signals in the module-signal or monitored-signal pane.
- Right-click the selection.
- Choose Send Signal or Send Signals.
- The receiving viewer locates and selects the corresponding hierarchy paths.
This works in both directions:
- Send waveform signals to the Schematic Viewer to locate the associated nets.
- Send schematic nets to the Wave Viewer to add their recorded waveforms.
If a schematic internal net does not have its own recorded waveform, the Schematic Viewer may also send a directly connected module output port or parent-module input port so that a useful driving waveform can still be added.
The Send item is shown only when another registered viewer is available. If it does not appear:
- Confirm that both viewer extensions are installed and enabled.
- Open both the waveform and schematic custom editors.
- Reload the VS Code window if either extension was installed or updated while the window was already open.
- Reopen both editors after the reload.
Signal sending between viewer extensions does not require a live ROHD debug session. Live snapshots and streaming waveform updates are separate integration features and may require a connected ROHD debugging service.
Navigate to Source
When source-location information is supplied by the ROHD extension or an embedding DevTools host, a signal's right-click menu can navigate to:
- ROHD source
- SystemVerilog source
- SystemC source
Only languages with confirmed source information are displayed. For example, if a design has ROHD and generated SystemVerilog mappings but no SystemC mapping, the menu shows only the ROHD and SystemVerilog actions.
Live ROHD Debugging
When embedded in a compatible ROHD DevTools workflow, the viewer can receive hierarchy and waveform information directly rather than opening a completed waveform file. Depending on the host, integrated features can include:
- incremental waveform updates during simulation
- marker-time design snapshots
- live-tracking or video mode
- source navigation using recorded stack frames
These controls appear only when the host reports that the corresponding service is available.
Keyboard and Mouse Reference
| Task | Shortcut |
|---|---|
| Select one signal | Click |
| Extend or toggle selection | Ctrl/Cmd + Click |
| Select a range | Shift + Click |
| Select all signals in the focused pane | Ctrl/Cmd + A |
| Add signal to monitored list | Double-click |
| Reorder monitored signals | Drag selected row or rows |
| Remove focused monitored signals | Delete / Backspace |
| Undo monitor-list edit | Ctrl/Cmd + Z |
| Redo monitor-list edit | Ctrl/Cmd + Y or Ctrl/Cmd + Shift + Z |
| Complete signal search | Tab |
| Clear signal search | Esc |
| Fit waveform | F |
| Place primary marker | Click waveform |
| Jump between transitions | Focus signal, then Left / Right |
The in-application Help button contains the current toolbar and shortcut reference. See signal filtering for additional examples.
Troubleshooting
A waveform does not open
- Confirm that the file extension is
.vcd,.fst, or.ghw. - Verify that waveform generation completed and the file is not empty.
- If the file was replaced while open, use Reload.
A signal is missing
- Select the correct module in the hierarchy.
- Clear the signal filter with
Esc. - Enable internal signals from the toolbar.
- For a bus or structure, expand its fields, bits, or ranges.
- Some internal nets are optimized away or are not recorded by the waveform producer.
Send is not in the right-click menu
Send Signal(s) is intentionally hidden until another compatible ROHD viewer registers in the current VS Code session. Open the other viewer, or reload the VS Code window after installing or updating its extension.
Source navigation is not in the right-click menu
Source actions appear only for languages whose mappings are available for the selected module. Open the design through the ROHD extension or a compatible DevTools workflow that supplies source information.
Development and Contributions
This README is the user guide. Instructions for building the application, running Flutter configurations, packaging the VS Code extension, selecting local dependencies, and running tests are in the Developer Guide.
Copyright (C) 2024-2026 Intel Corporation SPDX-License-Identifier: BSD-3-Clause
Libraries
- rohd_wave_viewer
- Public API for embedding the ROHD Wave Viewer.
