wtf is a waveform viewer for the terminal. It opens VCD, FST and GHW traces where your simulations run, moves like Vim, and decodes AXI, SPI and UART into transactions you can filter, count and measure.
$curl -fsSL https://raw.githubusercontent.com/xtrollyj00/wtf/main/install.sh | sh
To try it, in a clone of the repository: cp docs/demo.vcd tour.vcd && wtf tour.vcd
An AXI4-Lite write in docs/demo.vcd: the decoded write on top, the handshake under it, marks 2 and 3 timing the address phase. This is wtf's own output, drawn as text with its Nerd Font icons.
0ns
Open a trace
wtf tour.vcd, or a trace of your own. With no session saved yet, wtf shows where to start. It has already looked for interfaces a built-in protocol can decode.
Next time it opens to the rows, marks and decodes you left.
20ns
Decode the bus
Spacedd picks the interface and decodes it. The writes, the reads and the protocol errors become rows, and :records s_axi lists them in one table, in time order.
Type a filter like resp != 0 to keep the bad ones, = to count each value, Enter to jump there.
40ns
Find the cycle
Search with an expression, sampled at a clock: /@aclk s_axi_awvalid && !s_axi_awready stops at each cycle where the address waits. n goes to the next one.
rose, fell and past write protocol checks the same way.
60ns
Keys you already know
Time runs along the line, so Vim's motions move the cursor. Space opens a menu of the rest, and every entry shows its key.
wbnext and previous change
ggGstart and end
:2usgo to a time
m2'2set and jump to a mark
uundo any change to the rows
80ns
Your own protocol
Most handshakes in a design have no standard. Describe one in a line, sampled at its clock: :protocol hs roles=valid,id when=valid id=id, then decode each side with it.
Its records get the same table, search and rows as AXI's, and pair matches requests with responses to time each one.
Stays on your machine
wtf reads your traces where they are and opens no network connections: nothing is uploaded, nothing is reported. Its sessions are TOML files next to the trace.
If you use an AI coding agent, wtf has an optional server that gives it the same decoders and records, and shows you what it found. It does nothing unless you set it up: for agents.