Skip to content
ホームWebアプリ集ドキュメント概要
🌐 Auto English 简体中文 繁體中文 Español Français Русский العربية Português Deutsch 日本語 한국어 हिन्दी

WaveDrom

WaveDromは、JSON記述からデジタルタイミング図をレンダリングするJavaScriptライブラリです。ハードウェア設計ドキュメント、FPGA開発、組込みシステムエンジニアリングにおいて、信号の動作、バスプロトコル、クロックドメインの図示に広く使用されています。

Morayaでは、WaveDromのJSONを言語タグ wavedrom のフェンスドコードブロック内に記述すると、エディタがインタラクティブなタイミング図を自動的にレンダリングします。

完全な構文リファレンスについては、WaveDrom公式ドキュメントを参照してください。

構文の概要

WaveDromダイアグラムはJSONオブジェクトとして定義されます。主キーは signal で、信号定義の配列を含みます。各信号には以下のプロパティがあります:

波形文字

文字意味
0Lowロジックレベル
1Highロジックレベル
x不定 / ドントケア
zハイインピーダンス
=データ値(data 配列の次の項目を使用)
2-9異なる色の名前付きデータ値
p立ち上がりエッジクロック
n立ち下がりエッジクロック
P矢印付き立ち上がりエッジクロック
N矢印付き立ち下がりエッジクロック
.前の状態を継続
|ギャップ / 時間の中断

使用例

単純なクロック信号

8サイクル動作する基本的な立ち上がりエッジクロックです。

```wavedrom
{
  "signal": [
    { "name": "clk", "wave": "p........" },
    { "name": "clk_n", "wave": "n........" }
  ]
}
```

基本ロジック信号 — ANDゲートタイミング

2つの入力信号と結果のAND出力を示し、両方の入力がHighの場合にのみ出力がHighになることを表しています。

```wavedrom
{
  "signal": [
    { "name": "clk",    "wave": "p........" },
    { "name": "input_a", "wave": "0.1..0.1." },
    { "name": "input_b", "wave": "0..1..1.." },
    {},
    { "name": "output",  "wave": "0...0.1.0" }
  ]
}
```

マルチビットバスとデータラベル

クロックに同期し、valid信号で制御されるデータバスが連続バイト値を伝送する様子です。

```wavedrom
{
  "signal": [
    { "name": "clk",   "wave": "p........" },
    { "name": "valid", "wave": "0.1....0." },
    { "name": "data",  "wave": "x.=.=.=.x", "data": ["0xA0", "0xB1", "0xC2"] },
    { "name": "ready", "wave": "1........" }
  ]
}
```

SPI通信プロトコルタイミング

チップセレクト、クロック、MOSI、MISOラインで1バイトのデータを交換する完全なSPIトランザクションです。

```wavedrom
{
  "signal": [
    { "name": "CS_n",  "wave": "10......1" },
    { "name": "SCLK",  "wave": "0.p.....0" },
    { "name": "MOSI",  "wave": "x.=.=.=.x", "data": ["MSB", "...", "LSB"] },
    { "name": "MISO",  "wave": "x..=.=.=x", "data": ["MSB", "...", "LSB"] }
  ],
  "config": { "hscale": 2 }
}
```

メモリ読み出しサイクル

アドレス設定、チップイネーブル、アウトプットイネーブル、および読み出しレイテンシ後にバス上にデータが現れる様子を示すSRAMメモリ読み出し操作です。

```wavedrom
{
  "signal": [
    { "name": "clk",     "wave": "p.........." },
    { "name": "addr",    "wave": "x.=........", "data": ["0x4000"] },
    { "name": "ce_n",    "wave": "1.0........" },
    { "name": "oe_n",    "wave": "1..0......." },
    { "name": "we_n",    "wave": "1.........." },
    { "name": "data",    "wave": "z...=......", "data": ["0xFF"] },
    { "name": "ready",   "wave": "0....1....." }
  ],
  "head": {
    "text": "SRAM Read Cycle"
  }
}
```

信号グループとエッジマーカー

信号を論理的なカテゴリにグループ化し、エッジマーカーを使用して信号間の因果関係を示します。

```wavedrom
{
  "signal": [
    ["CPU",
      { "name": "req",   "wave": "0.1..0.|.." },
      { "name": "addr",  "wave": "x.3..x.|..", "data": ["A5"] },
      { "name": "wr",    "wave": "0.1..0.|.." }
    ],
    {},
    ["Memory",
      { "name": "ack",   "wave": "0..1.0.|.." },
      { "name": "data",  "wave": "z..4.z.|..", "data": ["D3"] },
      { "name": "ready", "wave": "0...10.|.." }
    ]
  ],
  "edge": [
    "req~>ack", "wr~>data", "ack~>ready"
  ],
  "head": {
    "text": "CPU-Memory Bus Transaction"
  }
}
```