This is a sequence for drawing a timing diagram that someone else can check: name the signals, pick a time grid, draw the levels, then mark the relationships. Worked frames for SPI, I2C, and UART are on the examples page.
What is a Timing Diagram?
A timing diagram is a graphical representation of digital signals over time. It shows how signals change state, how different signals relate to each other, and when specific events occur. Timing diagrams are essential documentation for digital electronics, embedded systems, and communication protocols.
When You Need Timing Diagrams
- Documenting protocols – Show how SPI, I2C, UART, and other interfaces work
- Specifying hardware behavior – Define how inputs and outputs must behave
- Debugging issues – Visualize signal relationships to find problems
- Teaching concepts – Help students understand digital logic
- Creating datasheets – Provide timing information for components
How to Create Timing Diagrams with WavePaint
The steps below use the WavePaint editor. The same sequence works on paper. Menu names match the handbook.
Step 1: Create Your Signals
Start by adding signals to your diagram. WavePaint supports three signal types:
- Bit Signal – For single-bit digital signals (clocks, enables, single-wire data)
- Vector Signal – For multi-bit buses (data buses, addresses, counters)
- Blank Row – For visual separation between signal groups
Use Edit → Add Signal or right-click on the canvas to add signals. Name each signal descriptively (e.g., “CLK”, “MOSI”, “DATA[7:0]”).
Step 2: Configure the Timeline
Set the number of time steps (samples) for your diagram. For simple protocols, 8-16 steps may be enough. Complex transactions might need 32 or more steps.
You can also add sub-steps for finer timing resolution. This is useful when you need to show events that happen between main clock cycles.
Step 3: Draw Your Waveforms
Use WavePaint’s paint tools to set signal states:
- Click and drag to paint values (0, 1, X, Z) on bit signals
- Select the value from the toolbar, then click on time steps
- Use predefined patterns like clock, counter, or pulse for common signals
For vector signals, you can edit the hexadecimal value of each segment and add custom labels.
Step 4: Add Visual Elements
Enhance your diagram with annotations:
- Arrows – Show cause-and-effect relationships between signals
- Markers – Highlight specific timing events
- Time spans – Indicate durations (setup time, hold time)
- Text annotations – Add labels and explanations anywhere
Step 5: Organize with Groups
For complex diagrams, organize signals into collapsible groups:
- Group by function (clocks, control, data)
- Group by interface (SPI signals, I2C signals)
- Group by direction (inputs, outputs)
Step 6: Apply Styling
Make your diagram visually clear:
- Signal colors – Assign unique colors to differentiate signals
- Segment colors – Highlight specific data phases on buses
- Themes – Choose light or dark theme based on documentation style
Step 7: Export Your Diagram
Export in the format you need:
- PNG – For Word documents, presentations, emails
- SVG – For LaTeX documents, web pages, scalable publications
- WaveDrom JSON – For WaveDrom-compatible documentation systems
Timing Diagram Best Practices
Keep It Readable
- Use meaningful signal names
- Group related signals together
- Don’t show more signals than necessary
- Use colors consistently
Show Key Timing
- Use arrows to show sampling edges
- Mark setup and hold times
- Indicate clock-to-output delays
- Label propagation delays
Annotate Clearly
- Label data phases (address, command, data)
- Mark protocol stages (start, stop, ACK)
- Explain special conditions
When the lanes match the examples, export PNG or SVG from the editor and compare the bit order against the figure before you put the image in a document.
Related: examples · what a timing diagram is · open the editor
