タイミング図

タイミング図とは

タイミング図は、デジタル信号が時間とともにどのように変化するかを示します——クロックパルス、バス遷移、データ値、ハイインピーダンス状態——共有された時間軸を持つ水平波形バンドのセットとして描かれます。ハードウェアエンジニアはプロトコル動作の仕様記述、セットアップ・ホールド制約の検証、チップインターフェースの文書化に使用します。データシート、HDL シミュレーションレポート、デジタルシステムの教科書に登場します。

Schematex は WaveDrom 互換 の信号記法を使用します——WaveDrom が先駆けた同じ波形文字(01xzp= など)とデータラベル構文——そのため既存の WaveDrom DSL はそのまま転用できます。このページでは、パーサーが現在受け付ける内容を説明します。

timing·§ WaveJSON
↘ preview
100%
SPI Transaction Digital timing diagram with 4 signals 0xAB0xCD0xEF0x010x020x030x04 CLK CS_N MOSI MISO SPI Transaction
UTF-8 · LF · 5 lines · 202 chars✓ parsed·0.5 ms·6.0 KB SVG

1. 最初のタイミング図

最小限の実用的なタイミング図:クロックと1つのデータ信号。最も親しみやすい書き方は文字数のカウントをまったく必要としません:

timing·§ WaveJSON
↘ preview
100%
Timing Diagram Digital timing diagram with 3 signals AB CLK RST DATA
UTF-8 · LF · 4 lines · 70 chars✓ parsed·0.4 ms·4.0 KB SVG

3つのルールで使用例の80%をカバーできます:

  1. キーワード timing で始め、必要に応じて引用符付きのタイトルと [hscale: N] を続けます。
  2. 各信号は1行:NAME: <wave> ——名前、コロン、波形。波形は次のいずれかです:
    • clock NN 周期のクロックジェネレーター(ネガエッジクロックには neg を追加)。文字カウント不要。
    • rle <state>*<count> … — ランレングスセグメント、例:rle 1*2 0*6 = 11000000。長さを自動整合。
    • 生の WaveDrom 波形文字列 — 細かい制御のための状態文字の連続した並び(内部スペースなし)。
  3. データバスの値をラベリングするには、生の波形文字列の後に data: ["val1", "val2"] を追加します。

整合のヒント: タイミング図が壊れる一番の原因は信号の長さが不均等なことです。clock Nrle は各信号のセル数を明示的にするため、整合が取れます。セルごとの制御が必要な場合のみ生の波形文字列を使用してください。

コメントは独立した行で # から始める必要があります。


2. 波形文字

波形文字列は文字のシーケンスで、1文字が1タイム周期を表します。パーサーは以下を受け付けます:

文字状態意味
0ロジック低GND / VSS の信号
1ロジック高VDD の信号
x不明ドントケア、未定義、または初期化されていない
zハイ Zトライステート / ハイインピーダンス
pクロックパルス(正)立ち上がりエッジアクティブクロック;p 1個 = 1完全周期(低→高→低)
Pクロックパルス(正、高)p と同じ、視覚的に高い
nクロックパルス(負)立ち下がりエッジアクティブ;n 1個 = 1完全周期(高→低→高)
Nクロックパルス(負、高)n と同じ、視覚的に高い
=バスデータ並列バスセグメント;data: […] でラベルを追加
29名前付きバスセグメント= と同じ、位置で data: […] へのインデックス
.ホールド / 継続前の状態をもう1周期延長
h / Hホールド高この周期は強制高
l / Lホールド低この周期は強制低
u立ち上がりエッジ低から高への対角線(遷移のみ)
d / D立ち下がりエッジ高から低への対角線(遷移のみ)
timing·§ WaveJSON
↘ preview
100%
Wave character reference Digital timing diagram with 9 signals ADDRDATA clk high low unkn hiz bus hold rise fall Wave character reference
UTF-8 · LF · 10 lines · 222 chars✓ parsed·0.5 ms·8.6 KB SVG

3. データラベル

信号がバス値を持つ場合、data: ["label1", "label2", …] で波形にタグを付けます。空でない各引用符付き文字列は対応する =(または 29)セグメント内に配置されます。

MOSI:  x=======  data: ["0xAB","0xCD","0xEF","0x01","0x02","0x03","0x04","0x05"]

空文字列 "" はセグメントのラベルを付けないままにします(前の値を延長するセグメントに便利)。

MISO:  zzzz====  data: ["","","","","0xFF","0x12","0x34","0x56"]
# 最初の4つの z 周期にはラベルなし;4つの = セグメントが 0xFF から始まるラベルを取得
timing·§ WaveJSON
↘ preview
100%
I2C read burst Digital timing diagram with 2 signals ADDR+RACKD0D1D2D3D4 SCL SDA I2C read burst
UTF-8 · LF · 3 lines · 122 chars✓ parsed·0.3 ms·5.4 KB SVG

4. 信号のグループ化

関連する信号を [GroupName] ブロックにまとめます。--- 行でグループを閉じ、グループ間の視覚的なセパレーターとしても機能します。

[Control]
CLK:   pppppppp
CS_N:  10000001
---
[Data]
MOSI:  x=======  data: ["0xAB","0xCD","0xEF","0x01","0x02","0x03","0x04","0x05"]
MISO:  zzzz====  data: ["","","","","0xFF","0x12","0x34","0x56"]

代替の group "name" { … } 構文も受け付けます(閉じる } でグループを閉じます)。

timing·§ WaveJSON
↘ preview
100%
UART frame Digital timing diagram with 4 signals STARTD0D1D2D3D4D5D6D7STOP D0D1D2D3D4 Clock & control CLK TX_EN Data lines TX RX UART frame
UTF-8 · LF · 8 lines · 246 chars✓ parsed·0.5 ms·8.1 KB SVG

5. タイトルと hscale

タイトル: timing "SPI Transaction" — ダイアグラムの上部に表示されます。

hscale: timing "title" [hscale: 2] — 各タイム周期の幅をスケーリングします。デフォルトは1。データラベルがより多くのスペースを必要とする場合は2を使用。

timing "Wide bus" [hscale: 2]
CLK:  pppp
DATA: ====  data: ["long label here","another","third","fourth"]

6. ラベルとコメント

  • 信号名: 信号行の最初の : より前のすべて。スペースを含む名前でも問題ありません——コロンが区切り文字です。
  • データラベル: 波形文字列の後の data: ["a", "b"]
  • タイトル: timing キーワードの後の最初のトークン、引用符付き。
  • コメント: # を行頭に記述(先頭のホワイトスペースの後)。
timing "Demo"
# these is a comment
CLK: pppp    # ← インライントレーリングコメントはサポートされていません

7. よくある間違い

記述した内容パーサーの反応修正方法
CLK: p p p p(波形にスペース)波形文字列は p のみとしてパース;残りはデータ句として扱われるスペースを削除:CLK: pppp
DATA: =====data: なしセグメントはラベルなしのバスセルとしてレンダリングされるdata: ["A","B","C","D","E"] を追加
波形文字 s または rTimingParseError: Invalid wave string§2 に記載されている文字のみ有効
CLK pppp(コロンなし)信号パターンにマッチせず;暗黙的にスキップ信号名の後のコロンが必須
data: [A, B, C](引用符なし)値が認識されない——パーサーは "…" を期待各値を引用符で囲む:data: ["A","B","C"]
[Group Name with spaces]グループラベルは Group Name with spaces ——正常にパースサポート済み
独立した行の hscale: 2認識されない(hscale はヘッダー行に記述)timing "title" [hscale: 2]

8. 文法(EBNF)

document       = header (blank | comment | group-open | group-close | separator | signal)*

header         = "timing" ( WS quoted-string )? ( WS "[" "hscale:" number "]" )? NEWLINE
quoted-string  = '"' any-char-but-quote* '"'

group-open     = "[" label "]" NEWLINE
               | "group" WS quoted-string WS "{"? NEWLINE
group-close    = "}" NEWLINE
separator      = "---" NEWLINE

signal         = name ":" WS wave-string ( WS data-clause )? NEWLINE
name           = any text before the first ":"
wave-string    = wave-char+
wave-char      = "0"|"1"|"x"|"z"
               | "p"|"P"|"n"|"N"
               | "h"|"H"|"l"|"L"
               | "u"|"d"|"D"
               | "="|"."|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"

data-clause    = "data:" WS ( "[" quoted-string ("," quoted-string)* "]"
                            | quoted-string+ )

comment        = "#" any NEWLINE

権威ある情報源:src/diagrams/timing/parser.ts。パーサーとの相違がある場合は、パーサーが優先されます——Issue を作成してください。


9. 標準準拠

Schematex のタイミング図は、波形文字とデータラベルについて WaveDrom WaveJSON 信号記法に従っています——WaveDrom のオンラインエディターで使用されているものと同じセットで、Schematex DSL は WaveDrom の入力とほぼ互換性があります。hscale オプション、グループ構文、データラベルフォーマットはすべて互換性があります。

現在実装されているもの:

  • ✅ すべてのコア波形文字:0 1 x z p P n N h H l L u d D = . 2–9
  • data: ["…"] によるデータラベル
  • ✅ グループブロック:[Name]group "name" { } 構文
  • --- セパレーター / グループクローズ
  • hscale 周期幅乗数
  • ⏳ タイミングアノテーション(信号遷移間の矢印、t_sut_pd ラベル)
  • ⏳ 信号ごとの phase: オフセット(分数サイクルシフト)
  • ⏳ WaveDrom の node: / edge: アノテーションブロック
  • ⏳ スキン / テーマ(defaultnarrowlowkey

参考文献:

  • WaveDrom — https://wavedrom.com (WaveJSON 仕様)
  • IEEE Std 1364 (Verilog HDL) — デジタルタイミングシミュレーションの概念
  • IEEE Std 1497 (Standard Delay Format) — タイミングアノテーションの慣例

10. 関連する例


11. ロードマップ

計画中 — まだパース不可。 現在生成された DSL ではこれらを使用しないでください;パーサーが無視します。

  • タイミングアノテーション矢印 — 信号遷移間のセットアップ / ホールドおよび伝播遅延スパンを描画する A -> B [label: "t_su = 5ns"] 構文の annotate: ブロック。
  • 信号ごとの phase: — 信号が周期の途中から開始できるようにする分数サイクルオフセット。
  • WaveDrom の node: / edge: — 完全な WaveDrom アノテーションブロックの互換性。
  • スキンオプションnarrow(コンパクト)と lowkey(控えめなパレット)レンダリングテーマ。
  • 時間軸 — 下部のオプションの数値時間軸(ns、µs、ps 単位)。

これらのどれかが早急に必要な場合は GitHub Issues でトラックしてください。

Found this useful?

Schematex is free, fully open source, and zero-dependency. A star helps other developers discover it.