A simple digital waveform viewer with vi-like key bindings.
$ dwfv sample.vcd
The tool takes a Value Change Dump (VCD) file (as defined by IEEE Standard 1364-1995) as input and displays the waveforms using tui-rs.
The backend API which facilitates the manipulation of digital signals in Rust is also exposed and can be used independently of the TUI.
$ cargo install dwfv
From sources:
$ cargo install --path .
q
: quit
h
/Left: move cursor leftj
/Down: move cursor downk
/Up: move cursor upl
/Right: move cursor rightw
: jump forward to the next rising edgee
: jump forward to the next falling edgeb
: jump backward to the previous rising edge0
: jump to timestamp 0^
/Home: jump to the first event$
/End: jump to the last eventgg
: jump to first signalG
: jump to last signal
zi
/+
: zoom inzo
/-
: zoom outzc
/=
: zoom fitzz
: center cursor on screen
o
: edit layoutdd
/Delete: delete the selected signalyy
: copy the selected signalp
: paste the clipboard after cursorP
: paste the clipboard before cursoru
: undor
: redoc
: show clipboard
f
: search for event in the selected signal/
: search for pattern in the signal's namesn
: repeat search forwardN
: repeat search backward
v
: start visual mode<enter>
: zoom fit the selected time frame
- Left click: move cursor
- Right click: zoom out
- Wheel up: zoom in
- Wheel down: zoom out
- Hold/release left click: zoom fit the selected time frame
$ dwfv examples/sample.vcd --stats
test
! (value) - width: 8, edges: 37, from: 0s, to: 1010s
" (clk) - width: 1, edges: 102, from: 0s, to: 1010s
# (reset) - width: 1, edges: 5, from: 0s, to: 620s
c1
" (clk) - width: 1, edges: 102, from: 0s, to: 1010s
# (reset) - width: 1, edges: 5, from: 0s, to: 620s
$ (out) - width: 8, edges: 37, from: 0s, to: 1010s
$ dwfv sample.vcd --at 1337
test
! (value) = h14
" (clk) -> h1
# (reset) = h0
c1
" (clk) -> h1
# (reset) = h0
$ (out) = h14
Events in the waveforms can be searched using the '--when' option. Examples:
- Searching when the
value
signal is equal to2
:
$ dwfv sample.vcd --when '$! = 2'
310s-330s
650s-670s
$ dwfv sample.vcd --when '$! equals h2'
310s-330s
650s-670s
- Searching when the
value
signal transitions to4
:
$ dwfv sample.vcd --when '$! <- 4'
350s
690s
$ dwfv sample.vcd --when '$! becomes b100'
350s
690s
- Searching when the
value
signal transitions to4
after 400s:
$ dwfv sample.vcd --when '$! <- 4 and after 400'
690s
- Searching when the
value
signal transitions to4
before 400s:
$ dwfv sample.vcd --when '$! <- 4 and before 400'
350s