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
Search
: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: 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
? 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