Using the workspace
Waveform viewer
Read a simulation's signals over time: zoom to any detail, search values, decode UART and SPI, compare two runs, jump to the source, and keep your layout per testbench.
Open a waveform#
- After a simulation that saves a waveform, the viewer appears under Simulation in the Code view; View Waveform opens it on its own page, and Download VCD saves the file.
- Saved waveform files in the project (a formal counterexample, an example from Find an example) open in the viewer from the Code view.
- The viewer reads a saved run on the server one time window at a time, so the size of the waveform does not slow the page down. Waveforms up to 16 MB are saved with the run; for a larger one, the result says how big it was and how to dump fewer signals or a shorter window.
- Times are shown in the waveform's own units (ns, µs, ps), from its
$timescale. - Unknown values (X) are drawn in red and high-impedance values (Z) in yellow. Where a signal changes more often than there are pixels, it is drawn as a filled block; zoom in to see each change.
Pick and arrange signals#
- The list on the left is the design's hierarchy (for example
tb › dut › count). Click a signal to add it, or + all beside a scope; search to filter by name. - With nothing saved yet, the viewer starts with the clock and the top-level signals.
- Select a row to change it: radix per signal (hex, unsigned, signed, binary, ASCII, or state names), colour, Expand bits to split a bus into one row per bit, move it up or down, or remove it. Drag rows to reorder them.
- + Group adds a named group that holds the rows below it up to the next divider; click its header to collapse it. + Divider adds a separator.
- State names: when the project's RTL names a signal's values with an
enumtype, or withlocalparams the signal is compared with, assigned, or switched on in acase, the signal shows those names (IDLE, LOAD) instead of numbers.
Zoom, pan, and step#
- Zoom in as far as you like with + and −, Ctrl/⌘ + scroll (around the pointer), or by dragging across the waves to zoom to that area. Fit shows the whole simulation.
- Pan with Shift + scroll, a horizontal trackpad swipe, or by dragging the time ruler.
- Click the waves to place the cursor (it snaps to a nearby edge of the row you clicked). Every row shows its value at the cursor.
- ← Change / Change → (or the arrow keys) move the cursor to the selected signal's previous or next change.
Find values#
Select a signal, choose a condition (equals, differs from, greater or less than, rises, falls, changes) and a value, then Find → or ← Find. Values are read in the signal's radix, or with a prefix such as 0x3F, 8'hFF, 'b101; state names work too. Add a condition on another signal with while, for example the next time count equals 0x21 while state is DONE.
Markers and measurements#
- Press M or + Marker to mark the cursor. Click a marker to jump to it, double-click to rename it, × to remove it.
- Each marker shows its time and the distance to the cursor; with two or more, the span from the first to the last is shown.
- Count cycles of picks a steady clock found in the waveform; distances are then also shown in clock cycles.
Derived signals and analog view#
- + Derived adds a signal computed from others, for example
valid & ready,count[7:4],{hi, lo}, orstate == 2. Signals are written by name (the last part is enough when it is unique), numbers like8'hFFor0x3F; operators are~ ! & | ^ && || == != < > <= >= + −, bit selects, slices, and concatenation. - Bitwise operators keep unknown bits honest (0 & X is 0, 1 | X is 1); a comparison or sum with an unknown bit is X. A derived signal can be searched, stepped through, and compared like any other.
- Analog (or A) draws a bus or real signal as a line graph, three rows tall, scaled to the values in view; zoomed out, each pixel shows its smallest to largest value. Signed radix draws signed values.
Protocol decoders#
- + Decoder turns signals into what they carried. Likely signals are picked by name (tx, sclk, mosi, valid, ...).
- UART: the line, and the baud rate (leave it blank to detect the bit time from the line), 5–9 data bits, parity, and stop bits. Bytes show as hex and ASCII; a missing stop bit or wrong parity is marked as an error.
- SPI: clock, MOSI and/or MISO, optional chip select (active low), mode 0–3, word size, and bit order. A word cut short by chip select is marked.
- valid / ready: clock, valid, ready, and optional data: one entry per accepted transfer, sampled at the clock edge.
- When the signals cannot be decoded, the row says why instead of showing guessed bytes.
Compare two runs#
- For a saved run, Compare with lists the project's other saved runs (the same testbench first). The compared run's version of every row is drawn under it, and times where the two differ are tinted red.
- ← Difference / Difference → (or N / Shift + N) move the cursor to the previous or next place where any shown signal or derived signal starts to differ.
- Signals are matched by full name, so a signal renamed between runs shows only in one. Runs written in different time units are converted.
Waveform and source#
- Select a signal and press Go to source: the lines that declare, assign, and connect it are listed, found by following the waveform's scopes through the module instances. Click one to open the file at that line (from the standalone page this opens the project).
- In the code editor, right-click a signal name and choose Add to waveform: the matching signal of that module is added to the viewer below.
- Lines are found from the Verilog and SystemVerilog text, without running a tool; signals inside generate blocks resolve to their module.
Export#
- PNG saves the rows and the visible time range as an image, with each row's value at the cursor.
- .gtkw saves a GTKWave file for the same signals: order, radix, groups, dividers, the cursor, and up to 26 markers (GTKWave keeps their times, not their names). Open it in GTKWave together with the downloaded VCD. Derived signals, decoders, colours, and the analog view stay in Tapeo.
Saved views#
- Your signals, their order, radixes, colours, groups, dividers, derived signals, decoders, analog rows, markers, and cycle clock are saved in the project for each testbench, so they come back for the next run of that testbench and on other computers. The run you compare with is not saved.
- In example projects (and other projects you cannot change) the view is kept in this browser only.
- A signal that a later run no longer has stays in the list, crossed out, until you remove it.
Keyboard shortcuts#
Click the waveform first, then:
| Keys | Action |
|---|---|
| ← / → | Previous / next change of the selected signal |
| Shift + ← / → | Pan left / right |
| + / − | Zoom in / out |
| F | Fit the whole simulation |
| Home / End | Cursor to the start / end |
| C | Center the view on the cursor |
| ↑ / ↓ | Select the row above / below |
| Alt + ↑ / ↓ | Move the selected row |
| R | Next radix for the selected signal |
| E | Expand or collapse a bus into bits |
| A | Analog view on or off for the selected bus |
| N / Shift + N | Next / previous difference from the compared run |
| M | Add a marker at the cursor |
| G / D | Add a group / a divider above the selected row |
| Delete | Remove the selected row |
| ? | Show or hide the shortcut list |
Note
The viewer reads VCD, the format every Tapeo simulator writes. FST files are not read. Images export as PNG only (no SVG).