Markdown waveform diagram maker
Draw digital timing diagrams and register layouts. WaveDrom turns a small JSON description into clean waveforms for hardware and protocol docs.
WaveDrom waveform syntax
A WaveDrom diagram is a JSON object with a signal list. Each signal has a name and a wave string, where every character is one clock step. Here is each piece you can write.
Signals and waves
Give each signal a name and a wave string. Each letter is one step and a dot holds the previous value.
You write
{ "signal": [
{ "name": "clk", "wave": "p......" },
{ "name": "req", "wave": "0.1..0." },
{ "name": "ack", "wave": "0...1.0" }
]}
You get
Data buses
Use digits 2 to 9 for bus values and label them with a data list.
You write
{ "signal": [
{ "name": "clk", "wave": "p......" },
{ "name": "data", "wave": "x.345.x", "data": ["a", "b", "c"] }
]}
You get
Spacers and gaps
Add a blank object for a gap between groups of signals.
You write
{ "signal": [
{ "name": "clk", "wave": "p..." },
{},
{ "name": "en", "wave": "0.1." }
]}
You get
Cheat sheet
| Write this | You get |
|---|---|
| Structure | |
{ "signal": [ ... ] } | The whole diagram |
{ "name": "x", "wave": "..." } | One signal row |
{} | A gap between rows |
"data": ["a", "b"] | Labels for bus values |
| Wave characters | |
p | A clock pulse |
0 | Low level |
1 | High level |
. | Hold the previous value |
x | Don't care |
2 to 9 | A data or bus value |
| | A gap in time |