電子回路や論理回路、RTLなどのデジタル回路技術と切り離せないタイミングチャート。
各信号線の仕様を決める場合や、シミュレーション結果を示すとき、綺麗な波形を用いてわかりやすい説明を心掛けたいですが、PowerpointやVisioなどの作図ツールで手作業で作図するのは非常に面倒です。
そこで、デジタル回路上の信号線を表す波形を分かりやすく描画できて、無料で使うことのできる便利なツール教えてもらったので書き留めておきます。
波形作図ツール:WaveDrom

※波形に特に意味ないです
デジタル回路における波形を綺麗に作図することができるツールに「WaveDrom」(https://wavedrom.com/)があります。
JSONベースのテキスト形式から、波形を描画することができます。波形の記述方法も直感的なのでJSONとかよくわからない私のような人間でも何となく記述するだけで、美しい波形を出力することが可能です。
専用のエディタをローカルにダウンロードして使用する方法もあるようですが、以下ではVSCodeの拡張機能を用いた方法と、ブラウザ上で波形を表示する2手法についてまとめています。
WaveDrom使い方基本
まず、4進カウンタのようなものを例に取って、把握している基本的な記述法を簡単に説明します。
コード:
{signal: [
{name:'clk', wave: 'p.........'},
{name:'reset', wave: '10........'},
{name:'count [1:0]', wave: '3.45634563', data: '0 1 2 3 0 1 2 3 0'}
],
head: {
text:'WaveDrom example',
tick: 0,
},
foot: {
text:'Figure quaternary counter',
tock: 1
},
}
出力結果:

記号 | 説明 |
「p」 | クロックのような連続パルス信号は大文字、あるいは小文字のpから始める |
「.」 | 現在の信号を継続する |
「1」,「0」 | それぞれHigh, Lowへの移行 |
「|」 | 横軸の破断/省略記号 |
「3~9」 |
データを区間で色分け |
「data」 | 対象のデータを順番に入れる |
「head」,「foot」 |
図の上下に付与する情報を記述 |
VSCodeを用いた波形作成
「Visual Studio Code+Markdown関連拡張機能」を用いた方法では、Markdown記法で記述したファイルのプレビューをリアルタイムに反映/更新し、確認しながら作業が進められるのでおすすめです。
▼使用例

拡張機能
- Markdown Kroki
- Markdown Preview Enhanced
「.md」拡張子で作成したファイルのプレビューは、VSCodeでファイルを開いたコード右上の虫眼鏡マークの付いた画面分割マークのようなものをクリックすると開きます↓。

書き方の例
書き方の例1```wavedrom
{signal: [
{name:'clk', wave: 'P.........'},
{name:'data_i', wave: 'x345x6.78.', data: 'a b c d e f'},
{name:'data_o', wave: 'x987x6.54.', data: '20 40 60 80 100 120'},
{name:'request', wave: '01..01....'},
{name:'signal', wave: '0...1.0...'}
],
head: {
text:'WaveDrom example',
tick: 0,
},
foot: {
text:'Figure Example',
tock: 9
},
}
```
書き方の例2
- 矢印
- グループ化
- コメント追加

```wavedrom
{signal: [
{name:'clk', wave: 'P.........', node: '..........'},
["Data1",
{name:'data_i', wave: 'x345x6.78.', node: '..A..D....', data: 'a b c d e f'},
{name:'data_o', wave: 'x987x6.54.', node: '..........', data: '20 40 60 80 100 120'},
],
{name:'request', wave: '01..01....', node: '.....C....'},
{name:'signal', wave: '0...1.0...', node: '..........'},
["Data2",
{name:'data_i', wave: 'x345x6.78.', node: '..B.......', data: 'a b c d e f'},
{name:'data_o', wave: 'x987x6.54.', node: '.......E..', data: '20 40 60 80 100 120'},
],
],
"edge": [
"A->B comment",
"B~>C",
"C~>D Data in",
"D->E"
],
head: {
text:'WaveDrom example',
tick: 0,
},
foot: {
text:'Figure Example',
tock: 9
},
}
```
wavedromの記述の上下を「```wavedrom」と「```」を囲っています。ほかにも、拡張機能の機能でデータフロー図であったり、シーケンス図であったり様々なフォーマットをサポートしています。
詳しくは、(https://kroki.io/)を見てみてください。
ブラウザ上で波形作成
ローカルでファイルを作成しなくても、WaveDromでは公式でブラウザ上で波形を作ることができるエディタがあります。
ちょっと機能を試したり、すぐ波形の画像が欲しいような場合には重宝するかもしれません。
WaveDrom Editor
仕様を考えるときなどにも意外と重宝しそうです。
以上、お疲れさまでした。