Command Tutorial & Reference

Explore svw commands by task. Each entry includes a ready-to-use example and, where available, a recorded demonstration.

File

:open

<file…> - open waveform file(s); multiple files join the open-file list (:files / :active)

Try it

printf 'addall\nopen tutorial_demo_b.vcd\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :open demo

:files

- list open files (:active to switch)

Try it

printf 'open tutorial_demo_b.vcd\nfiles\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :files demo

:active

<n> - switch the active file in the open-file list

Try it

printf 'open tutorial_demo_b.vcd\nactive 1\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :active demo

:reload

- reload the current waveform file

Try it

printf 'addall\nreload\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :reload demo

:q

- quit

Try it

printf 'q\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :q demo

Signals

:add

<path…> - add signals to the display list ('*' glob)

Try it

printf 'add top.clk top.instruction_bus\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :add demo

:addall

[scope] - add all signals under scope (default: root)

Try it

printf 'addall\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :addall demo

:delall

- delete all rows from the display list

Try it

printf 'addall\ndelall\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :delall demo

:del

{id…} - delete display rows (1-based index, name, or g:group for the whole group)

Try it

printf 'addall\ndel 1\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :del demo

:d

{id…} - alias for :del

Try it

printf 'addall\nd\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :d demo

:yank

[id] - copy a row to the clipboard, no delete (g:group yanks the whole group block)

Try it

printf 'addall\nyank\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :yank demo

:detail

[id] - open the Signal Detail float of a row (the K key); headless prints the detail lines

Try it

printf 'addall\ndetail\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :detail demo

:copypath

[id] - copy a row's full hierarchical path to the clipboard (OSC 52); headless prints the path

Try it

printf 'addall\ncopypath 2\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :copypath demo

:move

{id} <pos> - move a row (or g:group block) so it shows row number <pos>

Try it

printf 'addall\nmove 1 2\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :move demo

:move group

move g:<group> <pos>

Try it

printf 'addall\ngroup 1-5 sys\nmove g:sys 3\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :move group demo

:blank

- insert a blank separator row after the selection

Try it

printf 'addall\nblank\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :blank demo

:comment

<text> - insert a comment row after the selection

Try it

printf 'addall\ncomment 1 main-clock\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :comment demo

:alias

{id} <name> - rename a trace (alias)

Try it

printf 'addall\nalias 1 clock\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :alias demo

:unalias

{id} - remove a trace alias

Try it

printf 'addall\nalias 1 clock\nunalias 1\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :unalias demo

:hl

<regexp> - highlight matching displayed traces

Try it

printf 'addall\nhl reset_n\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :hl demo

:unhl

<regexp> - remove highlight from matching traces

Try it

printf 'hl reset_n\nunhl reset_n\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :unhl demo

:sort alpha

alpha|sig|reverse - sort the display list; a group block moves as one unit (alpha: header name; sig: first member's definition order) and its members reorder inside the block; blank/comment rows keep their alpha|sig slots

Try it

printf 'addall\ngroup 1,top.reset_n,/^top[.]cpu[.]pipeline_stage_0[0-2].*/ ahb\nsort alpha\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :sort alpha demo

:sort reverse

alpha|sig|reverse - sort the display list; a group block moves as one unit (alpha: header name; sig: first member's definition order) and its members reorder inside the block; blank/comment rows keep their alpha|sig slots

Try it

printf 'addall\ngroup 1,top.reset_n,/^top[.]cpu[.]pipeline_stage_0[0-2].*/ sys\nsort reverse\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :sort reverse demo

:find

<regexp> [in <scope>] - add all matching signals (POSIX regex, smart-case / :set ic)

Try it

printf 'delall\nfind pipeline_stage_0[0-5]\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :find demo

:scope

<path> - open a scope's signals in the Telescope picker

Try it

printf 'addall\nscope top\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :scope demo

:filter

<pattern>|off - hide display rows not matching <pattern> (/regexp/ or plain substring over alias/full/leaf names); a group header survives while its name or any member matches; no argument clears

Try it

printf 'addall\nfilter /pipeline_stage_0[0-5]/\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :filter demo

:filter off

filter off

Try it

printf 'addall\nfilter /pipeline_stage_0[0-5]/\nfilter off\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :filter off demo

Time

:goto

<time|A-Z> - move the left edge / cursor to a time or named marker

Try it

printf 'addall\ngoto 800\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :goto demo

:zoom in

zoom in

Try it

printf 'addall\ngoto 400\nzoom in\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :zoom in demo

:zoom out

zoom out

Try it

printf 'addall\ngoto 400\nzoom in\nzoom in\nzoom in\nzoom out\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :zoom out demo

:zoom full

in|out|full|fit|undo|<amount> - zoom control

Try it

printf 'addall\ngoto 400\nzoom in\nzoom in\nzoom in\nzoom full\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :zoom full demo

:zoom fit

in|out|full|fit|undo|<amount> - zoom control

Try it

printf 'addall\nmark 100\nbmark 300\nzoom fit\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :zoom fit demo

:zoom undo

in|out|full|fit|undo|<amount> - zoom control

Try it

printf 'addall\nzoom in\nzoom in\nzoom in\nzoom undo\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :zoom undo demo

Markers

:mark

[time] - place/move the primary marker (snap to edge at cursor)

Try it

printf 'addall\nmark 400\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :mark demo

:bmark

[time] - place/move the alt (baseline) marker

Try it

printf 'addall\nbmark 300\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :bmark demo

:unmark

- delete the primary marker

Try it

printf 'addall\nmark 10\nunmark\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :unmark demo

:drop

<A-Z> [time] - place a named marker (time must be unique)

Try it

printf 'addall\ndrop A 500\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :drop demo

:collect

<A-Z>|all - delete named marker(s)

Try it

printf 'addall\ndrop A 100\ndrop B 300\ncollect all\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :collect demo

:marks

- list all markers

Try it

printf 'addall\nmark 100\nbmark 300\ndrop A 500\nmarks\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :marks demo

:delta freq

delta freq

Try it

printf 'addall\nmark 100\nbmark 300\ndelta freq\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :delta freq demo

:delta time

delta time

Try it

printf 'addall\nmark 100\nbmark 300\ndelta time\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :delta time demo

:delta fix

delta fix

Try it

printf 'addall\nmark 100\nbmark 300\ndelta fix\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :delta fix demo

:delta unfix

delta unfix

Try it

printf 'addall\nmark 100\nbmark 300\ndelta fix\ndelta unfix\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :delta unfix demo

Analysis

:toggle

[regexp] - switching-activity report: per-signal transition counts and stable signals (not a coverage database)

Try it

printf 'addall\ntoggle\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :toggle demo

:compare

<file> [range <t0> <t1>] [ignorexz] | compare {id} {id} | compare next|prev|clear|report - compare the open waveform with a reference file (optionally limited to a time range; ignorexz skips mismatches where either side has x/z bits), or two display rows against each other; mismatches become vertical marks navigated with next/prev ; a two-row compare also opens a detail report of both values at every mismatch time, reopened with 'compare report'

Try it

printf 'addall\ncompare tutorial_demo_b.vcd\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :compare demo

:diff

{id} {id} | diff report - alias of :compare {id} {id}: mismatch marks of two display rows plus the detail report overlay; 'diff report' reopens it

Try it

printf 'addall\ndiff tutorial_demo_b.vcd\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :diff demo

:loadalias

<file> - load enum value aliases for the selected signal from a file

Try it

printf 'addall\nloadalias tutorial_aliases.txt\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :loadalias demo

:aliasval

{id} <value> <name> [color] | aliasval {id} del <value> - edit one value alias of a display signal in-app: value as hex/dec/verilog literal; the optional palette color paints that value in the bus band and value column; coexists with :loadalias entries (later wins) and is saved with the session

Try it

printf 'addall\naliasval top.instruction_bus 0x0001 FETCH\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :aliasval demo

:report

events [t0 t1] [regexp] | report values <sig> [t0 t1] [-when <expr>] [-o <file>] | report records <sig> [t0 t1] [filters] [-o <file>] | report assertions <sig> [t0 t1] [-o <file>] - signal reports: events = rise/fall/toggle counts, rate and never-toggled list over a range (default: marker interval, else the visible window); values = per-change time+value lines (fsdbreport style), -when filters by a condition expression; records = typed transaction/assertion/event payloads; assertions = indexed SVA outcome statistics and pass rate; -o writes a file instead of the report overlay

Try it

printf 'addall\nreport events\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :report demo

:coverage load

coverage load <file>

Try it

printf 'coverage load tutorial_coverage.xml\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :coverage load demo

:coverage summary

coverage summary

Try it

printf 'coverage load tutorial_coverage.xml\ncoverage summary\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :coverage summary demo

:coverage points

coverage points

Try it

printf 'coverage load tutorial_coverage.xml\ncoverage points\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :coverage points demo

:coverage clear

coverage clear

Try it

printf 'coverage load tutorial_coverage.xml\ncoverage clear\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :coverage clear demo

:stuck

[t0 t1] - highlight display signals with no changes in the time range (default: visible window)

Try it

printf 'addall\nstuck\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :stuck demo

:edge rise

edge rise next|prev [count]

Try it

printf 'addall\nedge rise next\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :edge rise demo

:edge fall

edge fall next|prev [count]

Try it

printf 'addall\nedge fall next\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :edge fall demo

:edge any

edge any next|prev [count]

Try it

printf 'addall\nedge any next\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :edge any demo

Format

:set grid on

set grid on

Try it

printf 'addall\nset grid on\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :set grid on demo

:set grid off

set grid off

Try it

printf 'set grid on\nset grid off\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :set grid off demo

:set grid edge

set grid edge rise|fall|both [start <n>]

Try it

printf 'addall\nset grid edge rise\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :set grid edge demo

:set grid period

set grid period <t> [start <n>]

Try it

printf 'addall\nset grid period 100\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :set grid period demo

:set ic

set ic on|off

Try it

printf 'addall\nset ic on\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :set ic demo

:set base_symbols

set base_symbols on|off

Try it

printf 'addall\nset base_symbols on\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :set base_symbols demo

:set hiername

set hiername on|off

Try it

printf 'addall\nset hiername on\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :set hiername demo

:set highlight

set highlight on|off

Try it

printf 'addall\nset highlight off\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :set highlight demo

:set timeunit

set timeunit <unit>

Try it

printf 'addall\nset timeunit us\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :set timeunit demo

:panels signals

panels signals toggle

Try it

printf 'addall\npanels signals toggle\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :panels signals demo

:panelwidth

panelwidth <cols>|auto

Try it

printf 'addall\npanelwidth 40\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :panelwidth demo

:split

- add a wave pane below with its own display list and time window (T17, up to 4 panes); the new pane copies the focused one, Tab cycles the focus, :only collapses back to one

Try it

printf 'addall\nsplit\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :split demo

:only

- collapse the split wave view back to a single pane, keeping the focused pane's view and display list (T17)

Try it

printf 'addall\nsplit\nonly\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :only demo

:annotate

<text> [time] | annotate del <n> | annotate list - floating text annotation pinned to a time; the time defaults to the primary marker/cursor and accepts unit suffixes; saved with the session

Try it

printf 'addall\nannotate 5 first-edge\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :annotate demo

:fmt

hex|dec|signed|bin|oct|ascii|char|time|real|float32|float64|real2bits | invert|reverse|rjustify|popcnt|msgbar on|off | shift <n>|off | fill0|fill1|filloff - data format of the selected trace; float32/float64 decode the bit pattern as IEEE754 and require an exact 32/64-bit vector; hex/oct/dec/signed are exact at any width

Try it

printf 'addall\nfmt hex\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :fmt demo

:fmt float

hex|dec|signed|bin|oct|ascii|char|time|real|float32|float64|real2bits | invert|reverse|rjustify|popcnt|msgbar on|off | shift <n>|off | fill0|fill1|filloff - data format of the selected trace; float32/float64 decode the bit pattern as IEEE754 and require an exact 32/64-bit vector; hex/oct/dec/signed are exact at any width

Try it

printf 'addall\ngoto 35\nfmt float32\n2\nfmt float64\n3\nfmt dec\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_float.vcd"
recorded demo — :fmt float demo

:analog step

analog step

Try it

printf 'addall\ndel 3\ndel 3\ndel 3\nanalog step\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :analog step demo

:analog interp

analog interp

Try it

printf 'addall\ndel 3\ndel 3\ndel 3\nanalog interp\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :analog interp demo

:analog off

analog off

Try it

printf 'addall\ndel 3\ndel 3\ndel 3\nanalog step\nanalog off\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :analog off demo

:pattern

[-all|-nomark|-clear] <sig>=<value>[ & …] [forward|backward] - pattern search from the primary marker; a found match stays marked with a dashed line until -clear (-nomark suppresses it, -all marks every hit); <value> is 0/1/x/z for bit signals, a number for real signals, a '*' glob for string signals

Try it

printf 'addall\ngoto 0\nzoom in\nzoom in\nmark 100\npattern top.state=0011 backward\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :pattern demo

:pattern real

[-all|-nomark|-clear] <sig>=<value>[ & …] [forward|backward] - pattern search from the primary marker; a found match stays marked with a dashed line until -clear (-nomark suppresses it, -all marks every hit); <value> is 0/1/x/z for bit signals, a number for real signals, a '*' glob for string signals

Try it

printf 'addall\ngoto 0\nzoom in\nzoom in\nmark 100\npattern top.voltage=3.000 backward\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :pattern real demo

:pattern string

[-all|-nomark|-clear] <sig>=<value>[ & …] [forward|backward] - pattern search from the primary marker; a found match stays marked with a dashed line until -clear (-nomark suppresses it, -all marks every hit); <value> is 0/1/x/z for bit signals, a number for real signals, a '*' glob for string signals

Try it

printf 'addall\ngoto 0\nzoom in\nzoom in\nmark 100\npattern top.phase=BO* backward\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :pattern string demo

:pattern all

[-all|-nomark|-clear] <sig>=<value>[ & …] [forward|backward] - pattern search from the primary marker; a found match stays marked with a dashed line until -clear (-nomark suppresses it, -all marks every hit); <value> is 0/1/x/z for bit signals, a number for real signals, a '*' glob for string signals

Try it

printf 'addall\ngoto 0\nzoom in\nzoom in\npattern -all top.clk=1\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :pattern all demo

:pattern clear

pattern -clear

Try it

printf 'addall\npattern -all top.clk=1\npattern -clear\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :pattern clear demo

:expand

{id} - split a vector into single bits

Try it

printf 'addall\nexpand 3\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :expand demo

:combine

{id…} - combine adjacent single bits into a vector

Try it

printf 'addall\ncombine 1 2\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :combine demo

:expr and

expr <a> & <b>

Try it

printf 'addall\nexpr top.clk & top.reset_n\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :expr and demo

:expr unary

expr ~<sig>

Try it

printf 'addall\nexpr ~top.reset_n\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :expr unary demo

:expr reduce

expr &<sig>

Try it

printf 'addall\nexpr &top.state\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :expr reduce demo

:expr arith

expr <a> + <b>

Try it

printf 'addall\nexpr top.state + 1\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :expr arith demo

:expr shift

expr <a> << <n>

Try it

printf 'addall\nexpr top.state << 2\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :expr shift demo

:expr compare

expr <a> >= <b>

Try it

printf 'addall\nexpr top.state >= 4\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :expr compare demo

:expr ternary

expr <cond> ? <a> : <b>

Try it

printf 'addall\nexpr top.clk ? top.state : 0\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :expr ternary demo

:expr bitsel

expr <sig>[msb:lsb]

Try it

printf 'addall\nexpr top.instruction_bus[3:0]\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :expr bitsel demo

:expr concat

expr {a, b}

Try it

printf 'addall\nexpr {top.clk, top.state[2:0]}\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :expr concat demo

:expr counter

expr counter(<sig>, rise|fall|any)

Try it

printf 'addall\nexpr counter(top.clk, rise)\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :expr counter demo

:expr timeshift

expr <sig> ->> <n>

Try it

printf 'addall\nexpr top.clk ->> 20\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :expr timeshift demo

:bus

create <name> {expr, sig[msb:lsb], …} | bus edit {id} {…} - virtual bus: splice signals or expressions (repeatable, bit-selectable) into one row; saved with the session

Try it

printf 'addall\nbus create nibble {top.instruction_bus[3:0]}\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :bus demo

:subbus

{id} <width> - split a vector into ceil(N/width) sub-bus rows inserted after it (expand as sub-bus); the last row takes the remainder and the declared msb/lsb direction is honored

Try it

printf 'addall\nsubbus 3 4\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :subbus demo

:counter

{id} rise|fall|any [name] - virtual counter signal: +1 per matching edge of the source, rendered as a 32-bit bus, saved with the session

Try it

printf 'addall\ncounter 1 any\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :counter demo

:tmark

[{id…}|clear] - toggle batch marks (v / Shift+Enter): no argument toggles the selected signal row, selectors toggle every matched signal row, 'clear' removes all marks (Esc); :group without a selector consumes the marked set

Try it

printf 'tmark 1,3\ngroup picked\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :tmark demo

:tmark clear

tmark clear

Try it

printf 'addall\ntmark 1,3\ntmark clear\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :tmark clear demo

:group

<ids,names,/regexp/> <name> | group <name> - move a mixed comma/range/name/regexp-selected set of signals into one adjacent collapsible group, inserted in alphabetical order among the existing group headers; the one-argument form inserts an empty header after the selected row

Try it

printf 'addall\ngroup 1,top.reset_n,/^top[.]cpu[.]pipeline_stage_0[0-2].*/ sys\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :group demo

:ungroup

- remove the enclosing group header

Try it

printf 'group 1-2 sys\nungroup\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :ungroup demo

Session

:save

<file.svw> - save session

Try it

printf 'addall\nsave session.svw\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :save demo

:record

<file.svw>|off - record session commands to a :source-replayable script (T16)

Try it

printf 'addall\nrecord session.svwcmd\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :record demo

:source

<file.svw> - restore session

Try it

printf 'addall\nsource tutorial_demo.svwcmd\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :source demo

:shifttime

<±t> | shifttime {id} <±t> | shifttime reset - shift the view of all traces or one trace in time (File/Signal Time)

Try it

printf 'addall\nshifttime 100\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :shifttime demo

:savealias

<file> - export the selected signal's value aliases (:loadalias/:aliasval) as an alias file (:loadalias compatible); colors are not part of the file format

Try it

printf 'addall\nsavealias out_aliases.txt\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :savealias demo

:searchvalue any

searchvalue any

Try it

printf 'addall\nsearchvalue any\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :searchvalue any demo

:searchvalue rise

searchvalue rise

Try it

printf 'addall\nsearchvalue rise\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :searchvalue rise demo

:searchvalue fall

searchvalue fall

Try it

printf 'addall\nsearchvalue fall\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :searchvalue fall demo

:searchvalue pattern

searchvalue <pattern>

Try it

printf 'addall\nsearchvalue 0->1\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :searchvalue pattern demo

:compress range

compress <t0> <t1>

Try it

printf 'addall\ncompress 200 800\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_compress.vcd"
recorded demo — :compress range demo

:compress clear

<t0> <t1> | compress clear - hide a time range from the wave view

Try it

printf 'addall\ncompress 200 800\ncompress clear\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_compress.vcd"
recorded demo — :compress clear demo

:fetch

left|right [n] - extend the visible time range

Try it

printf 'addall\nfetch left 10\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :fetch demo

:discard

left|right [n] - shrink the visible time range

Try it

printf 'addall\ndiscard left 10\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :discard demo

:color

<name>|normal|cycle|<0-255> - set selected trace color (theme name or xterm-256 index); 'cycle' rotates the palette (green/yellow/red/blue/magenta/cyan/orange/violet) over all traces; no argument opens the palette picker float

Try it

printf 'addall\ncolor 1 red\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :color demo

:version

- show version

Try it

printf 'version\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :version demo

:help

[cmd] - open the help page, or show one command's usage

Try it

printf 'addall\nhelp zoom\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :help demo

:theme

<builtin|file.yaml> - switch the skin: a built-in preset or a YAML file with colors/icons/palette; no argument lists the presets

Try it

printf 'addall\ntheme dracula\n' | svw --headless "$(dirname "$(which svw)")/../share/svw/samples/tutorial_demo.vcd"
recorded demo — :theme demo

UI essentials

mouse: click to select a signal

click a signal row to select it

recorded demo — mouse: click to select a signal

mouse: double click reveals the scope

double click a signal row to open the picker filtered to the signal's scope

recorded demo — mouse: double click reveals the scope

mouse: click to place the marker

click anywhere in the wave area to drop the primary marker (edge-snapped)

recorded demo — mouse: click to place the marker

mouse: drag a box selection

drag in the wave area for a highlighted box selection

recorded demo — mouse: drag a box selection

mouse: wheel scrolls the time axis

wheel up/down scrolls the waveform in time

recorded demo — mouse: wheel scrolls the time axis

mouse: toolbar buttons

click toolbar buttons (here: zoom in)

recorded demo — mouse: toolbar buttons

mouse: overview minimap

click the TIME overview to jump the view there

recorded demo — mouse: overview minimap

mouse: drag the panel divider

drag the signal panel's right border horizontally to resize the panel (:panelwidth / < > keys too)

recorded demo — mouse: drag the panel divider

mouse: right-click context menu

right-click a signal row for a context menu (signal detail, copy full path, radix cycle, alias, expand, highlight, delete); digits or Enter run an item, Esc closes

recorded demo — mouse: right-click context menu

mouse: hover tooltips

hover a truncated signal name for the full path and width; hover a truncated value for the full text; wave cells keep their folded-change tooltip

recorded demo — mouse: hover tooltips

mouse: right-click places the alt marker

right-click in the wave area drops the alt/baseline marker (edge-snapped), same as middle click or Alt+click

recorded demo — mouse: right-click places the alt marker

SPC leader menu

Space opens the which-key menu; u opens +ui; g turns the grid on

recorded demo — SPC leader menu

? help page

? opens the full key and command help overlay

recorded demo — ? help page

group label band

groups are one-line colored labels; Enter or a click collapses them and shows the member count

recorded demo — group label band

:<N> signal jump

type a signal's panel number as a command to jump straight to it (vim line jump)

recorded demo — :<N> signal jump

G: last signal

G jumps to the last visible signal (vim)

recorded demo — G: last signal

gg: first signal

gg jumps back to the first visible signal (vim)

recorded demo — gg: first signal

v batch marks (VISUAL)

v or Shift+Enter marks signal rows and the status line shows VISUAL (Esc clears); :group without selectors groups the marked set, and Tab offers it as the first candidate

recorded demo — v batch marks (VISUAL)

group an expanded bit with other signals

:expand splits a vector into bit rows; v or Shift+Enter can mark a single bit and group it with any other signals

recorded demo — group an expanded bit with other signals

mouse batch marks (Ctrl/Shift+click)

Ctrl+click toggles a row's batch mark, Shift+click marks the range from the selected row (VISUAL badge); :group without selectors groups the marked set

recorded demo — mouse batch marks (Ctrl/Shift+click)