RouteWave User Guide

Everything you need to go from download to full waveform analysis. This guide follows the natural workflow: install, explore the UI, navigate your signals, and progressively unlock the analysis tools.

v1.2.0ยท~15 min readยทLast updated April 2026

๐Ÿš€ Get Running

One command installs the RouteRTL SDK and launches RouteWave. The binary is auto-downloaded on first use โ€” no manual setup.

Install

Terminal
# Install the RouteRTL SDK (includes RouteWave)
pip install routertl

# Launch RouteWave
rr routewave
๐Ÿ’ก TIPRouteWave auto-downloads and caches on first launch. Update later with rr ws update-viewer or pip install --upgrade routertl.

First Launch

Open RouteWave with a waveform file to jump straight into analysis. It accepts VCD, FST, GHW, and ILA CSV formats.

Terminal
# Open a VCD from simulation
rr routewave my_design.vcd

# Open an FST (GTKWave-compatible)
rr routewave capture.fst

# Run simulation and auto-open the result
rr sim my_testbench --view

# Or open the latest waveform from a previous run
rr waves

At launch, the Signal Hierarchy panel loads the full design tree. Double-click any signal to add it to the waveform view.

WSL2 (Windows)

RouteWave runs natively on WSL2. A fresh Ubuntu install needs OpenGL libraries first โ€” one line, then you're set.

Terminal
# Install OpenGL libs (required once on fresh WSL2 Ubuntu)
sudo apt install libopengl0 libgl1 libglx-mesa0 libegl1

# Windows 11 โ€” WSLg handles display automatically
rr routewave

# Windows 10 โ€” install VcXsrv first, then:
export DISPLAY=$(ip route list default | awk '{print $3}'):0
rr routewave
๐Ÿ’ก TIPQuick test: run xeyes โ€” if a window appears, RouteWave will work. If not, run wsl --updateand check you're on WSL2 (wsl -l -v).

๐Ÿ–ฅ The Layout

RouteWave has four main panels. Understanding where things live will make everything else in this guide click.

Signal Hierarchy
โ–ธ uart_sniffer
ย ย โ–ธ config_control
ย ย โ–ธ edge_event
ย ย ย ย โ— clk
ย ย ย ย โ— ce
ย ย โ–ธ fifo_buffer
Waveform View
Signals rendered here โ€ข Zoom with scroll wheel โ€ข Pan with middle-click drag
Mission Control
โ˜… Dashboard
Cursor State
View Info
Hover Measurements
Consoleroutewave> _
RouteWave showing a UART sniffer session with signal hierarchy, waveform view, and Mission Control
RouteWave with a UART sniffer design loaded โ€” Signal Hierarchy (left), Waveform View (center), Mission Control (right), Console (bottom-right)

Signal Hierarchy

The left panel shows your entire design tree. Modules are expandable folders; signals are leaf nodes with coloured eye badges. Double-click a signal to add it to the waveform view. The eye badge turns bright blue when a signal is currently displayed.

๐Ÿ’ก TIPUse the search bar at the top of the hierarchy to filter signals by name. It supports partial matches โ€” type "addr" to find all address buses.

Waveform View

The center canvas renders your signals at 60 FPS using GPU-accelerated rendering. Each signal occupies a horizontal row with its name and current value on the left. Bus signals display as diamond-shaped lozenges with their hex value inside.

The timeline ruler at the top shows time ticks with auto-scaling units (ns, ฮผs, ms, s). Use the unit selector in the toolbar to force a specific unit.

Mission Control

The right panel provides live context about your current view:

  • Cursor State โ€” positions and delta of all active cursors
  • View Info โ€” zoom level, time window, active channel count
  • Hover Measurements โ€” signal name, value, frequency, period, width, and duty cycle at the mouse position
  • Display โ€” rendering settings and visual options

Console

The bottom panel is a scriptable command console. Focus it with Ctrl+J. Every action in RouteWave โ€” adding signals, changing views, attaching decoders โ€” can be done through the console. This makes RouteWave fully automatable.

Console examples
routewave> show clk
routewave> show data[7:0]
routewave> zoom 100ns 500ns
routewave> handshake tvalid tready

๐Ÿ“Š Work with Signals

RouteWave goes beyond simple signal viewing โ€” you can create virtual buses, search for values, and group related signals together.

Add & Remove

There are multiple ways to add signals to the waveform view:

  • Double-click a signal in the hierarchy tree
  • Use the console: show clk, show data[7:0]
  • Use Ctrl+F to search and add

To remove a signal, right-click it in the waveform and select "Hide", or use hide signalname in the console.

Reorder & Group

Drag and drop signals in the waveform view to reorder them. You can also create visual groups to separate related signals with dividers and labels.

๐Ÿ’ก TIPWhen debugging a bus protocol, group the address, data, and control signals together. This makes the timing relationships immediately visible.

Change Radix

Bus signals default to hexadecimal display. Change the display radix using keyboard shortcuts or the console:

ShortcutAction
1Hexadecimal (default)
2Decimal
3Binary
4ASCII

Select a signal first, then press the number key. ASCII mode is particularly useful for UART data buses where you want to see the transmitted characters directly on the waveform.

Virtual Buses

Combine individual signals into a virtual bus for grouped analysis:

Console
# Select signals with Ctrl+Click, then create a virtual bus
routewave> makebus my_data

# Create a virtual signal using an expression
routewave> virtual handshake = valid AND ready

Virtual buses appear in the waveform just like real bus signals โ€” with lozenges showing the combined hex value. They persist across sessions when saved in a .ltrace session file.

Find Values

Search a bus signal for a specific value โ€” essential for tracking down a particular address access or data pattern:

Console
# Find all occurrences of 0xDEAD on data_bus
routewave> find data_bus 0xDEAD

# Navigate through results
routewave> findnext
routewave> findprev

You can also use the Find value button in the toolbar. Search results are highlighted on the timeline with small markers.

๐Ÿ”ฌ Analyze

RouteWave includes built-in analysis tools that let you decode protocols, measure timings, and compare waveforms โ€” without leaving the viewer.

RouteWave I2C sniffer session showing protocol decode overlays, handshake visualization, cursor measurements, and console bookmarks
I2C sniffer analysis โ€” protocol decode bands (I2C Decoded, Sniffer Internals), cursor delta measurements (ฮ” = 52.8 ฮผs), and console bookmark navigation

Measurements

The measure command computes timing properties of a signal:

Console
routewave> measure sys_clk
  Period:    20.000 ns
  Frequency: 50.000 MHz
  Duty Cycle: 50.0%
  Pulse Width: 10.000 ns

For quick hover measurements, just move your mouse over any signal. Mission Control updates live with the signal name, current value, and timing properties at the cursor position.

Handshake Analyzer

Bind a valid/ready pair to visualize handshake transfers as coloured overlay bands on the waveform:

Console
# Bind an AXI-Stream handshake
routewave> handshake tvalid tready

# The overlay shows:
#   Green bands = completed transfers
#   Red bands   = backpressure (valid HIGH, ready LOW)
#   Transfer count in the Dashboard

Or press H with two signals selected. The handshake overlay appears as semi-transparent bands across the waveform, making protocol bottlenecks immediately visible.

Protocol Decoders

RouteWave includes built-in decoders for common serial protocols:

Console
# Attach a UART decoder (auto-detects baud rate)
routewave> translate uart_rx uart_8n1

# I2C decoder merges SDA + SCL into a decoded trace
routewave> translate sda scl i2c

# List available decoders
routewave> translators

Decoded data appears as annotated labels directly on the waveform timeline. For UART, you'll see individual bytes with their ASCII representation.

Waveform Diff

Compare two simulation runs side-by-side to find the exact point where behaviour diverges:

Console
# Load a reference file and compare
routewave> compare load reference_run.vcd

# Show diff overlay on a specific signal
routewave> compare diff signal_name

# Differences are highlighted as coloured overlay bands
๐Ÿ’ก TIPWaveform diff is invaluable when debugging regressions. Run your golden simulation, then diff against the failing run to see exactly which signal diverged and when.

Waveform Comparison

Compare two simulation runs to find where behaviour diverges. Load a reference file and use the compare command to overlay differences on individual signals:

Console
# Load reference waveform for comparison
routewave> compare load golden_run.vcd

# Show diff overlay on a signal
routewave> compare diff data_bus

โšก Automate

Every action in RouteWave can be done through the console. This makes it fully scriptable โ€” set up complex signal views once, save them as scripts, and replay instantly.

Console Commands

Open the console with Ctrl+T. Here are the most commonly used commands:

CommandDescription
show <signal>Add signal to canvas
hide <signal>Remove signal from canvas
zoom <in|out|fit|start end>Zoom viewport
pan <start|end>Pan to trace boundary
measure <signal>Compute period/frequency/duty
handshake bind <valid> <ready>Bind handshake overlay
translate <ch> uart_8n1Attach protocol decoder
compare load <file>Load reference for diff
makebus <name>Create virtual bus from selection
find <channel> <value>Search for hex value on bus
bookmark [name]Save viewport position
goto <name|time>Jump to bookmark or timestamp
export <file.csv>Export visible data
record start <file> / stopRecord command macro
helpShow all commands

Macro Recording

Record a sequence of console commands to a .ltr file and replay them later:

Console
# Start recording to a file
routewave> record start my_setup.ltr

# Do your setup...
routewave> show clk
routewave> show data[7:0]
routewave> handshake bind tvalid tready
routewave> zoom 0 10000

# Stop recording
routewave> record stop

# Replay the recorded macro
routewave> exec my_setup.ltr

Script Files

Save your setup as a script file (.ltr) and source it on startup. This is the power-user path to reproducible debugging sessions:

setup_uart_debug.ltr
# UART debugging session setup
show clk
show rst_n
show uart_tx
show uart_rx
show data[7:0]
translate uart_tx uart_8n1
translate uart_rx uart_8n1
handshake bind tx_valid tx_ready
zoom 0 100000
bookmark "first byte"
Terminal
# Execute the script at launch
routewave my_design.vcd --exec setup_uart_debug.ltr

# Or source it from the console
routewave> exec setup_uart_debug.ltr

CSV Export

Export the visible waveform data to CSV for post-processing in Python, MATLAB, or spreadsheet tools:

Console
# Export to CSV (format chosen by file extension)
routewave> export output.csv

# Export to VCD
routewave> export output.vcd

๐Ÿ“– Reference

Keyboard Shortcuts

ShortcutAction
Ctrl + OOpen file
Ctrl + Z / Ctrl + YUndo / Redo
Ctrl + PCommand palette
Ctrl + JFocus console
+ / -Zoom in / out
FZoom to fit
Home / EndPan to start / end
N / Shift + NNext / previous edge
CPush cursor
RCreate measurement ruler
BDrop zoom bookmark
HBind handshake on selection
Z / Shift + ZZoom undo / redo
Scroll wheelZoom at cursor position

File Formats

FormatDescriptionSource
VCDIEEE 1364 Value Change DumpAny Verilog/SV simulator
FSTFast Signal Trace (compressed)GTKWave-compatible tools
GHWGHDL Waveform (native)GHDL via libghw
ILA CSVIntegrated Logic Analyzer exportVivado / Quartus
.ltraceRouteWave native JSON sessionRouteWave (save/load)

CLI Flags

CLI Flags
Usage: routewave [options] [file]

Options:
  -e, --exec <file.ltr>  Execute a script file on startup
  -c, --command <cmd>    Run a single command after loading
  -s, --signal <name>    Show a signal on startup
  -w, --workspace <file> Load a workspace (.ltws) file
  --port <n>             Set WCP server port

Memory Management

For large waveform files, RouteWave includes a compression engine using delta-varint timestamps and RLE values to reduce memory usage:

Console
# Check per-channel memory usage
routewave> memstat

# Compress a specific channel
routewave> compact sys_clk

# Compress all loaded channels
routewave> compact