How to Create a Timing Diagram

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