Repository navigation
Decoding works from forms: fill in a bus's signals in a card and wtf checks and decodes them,
select a V range to decode the interface its signals play, or turn a clocked search into a table
of its matches. Conditions read X and Z as SystemVerilog does, a name the trace doesn't have
answers with the names it does, and the agent has fewer tools to choose from. wtf is on crates.io:
cargo install --locked wtf-wave.
Breaking:
- A condition is three-valued, as in SystemVerilog:
data != 5no longer matches wheredatais
unknown,0 && xis 0,1 || xis 1 and!xis unknown. Searchdata == xfor the unknown
stretches. - The
value_attool is gone:valueswithouttoanswers one time. - The
useandreloadtools are gone:openwithsessiongoes back to one of the server's
workspaces, andopenwith neither re-reads the current file as:edoes, saying which signals
the file dropped. - The agent writes every pattern as a regex in slashes (
/^top\.cpu\./), insignals, in
command'saddandrmand inrecords; a bare word is a name, and a glob is an error that
gives the regex form. Space d ris gone:Space d llists the decodes, andEnterthere opens one's records.- A session writes a bit added from a bus as
top.x[1], nottop.x[1:1].
New:
:decodealone, orSpace d D, opens a form: name, protocol, clock and roles as fields, each
suggesting what fits and checked as you fill it in, with the:decodeline shown underneath.
It reads no values, so it opens fast on a 1 GB trace.Space d Don aVrange decodes the range's signals: each plays the role its name ends in,
and the clock is found. The right-click menu'sDecode as ▸does the same.:protocolalone, orSpace d p, opens a form for a protocol;:protocol search, orSpace d m
after a clocked search, fills it from the search, decodes it and opens the matches as records.:decodes, orSpace d l, lists the decodes with their record counts:Enteropens the
records,eedits one andddremoves it.:decode <name> offremoves one from the command
line.:namesalone, orSpace d n, lists the values a signal takes and how often, and takes a name
beside each.- A name the trace doesn't have lists the nearest names, a scope says what it holds, and a word
from another tool names the form meant:rose(x),past(x),==for=. contains(x, "text")is true where a string signal's or a text field's text holdstext.axiliteandaxi4taketimeout=: a request left unanswered longer becomesno response
instead of pairing every later response with the wrong request.>groups the selected rows orVrange and names the group in place,<takes rows out or
dissolves a group,Rrenames a group, andddkeeps what it removed forp/P.:addtakes a slice or a bit of a bus as a row of its own::add data[7:4] state[1].:signal <name> offremoves a computed signal, or says which signal or decode still reads it.- A terminal too small for wtf says so with both sizes and draws what fits; a card bigger than the
screen shows what fits too. - The agent's
helphas a topic per concept, and each tool's description and annotations stand
alone: what an argument is, what a call changes and what to try next. cargo install --locked wtf-waveinstalls wtf from crates.io.
Fixed:
- A bad time says what a time is and how to fix it: quotes, a space before the unit, an unknown
unit or no number. - A bit slice of an array element adds, names and saves as
grid[1][3], and a session row that
isn't in the trace by its full path is reported missing instead of loading a look-alike. - Names resolve again after unused computed signals are dropped, where a lookup could panic.