FPGA クロックツリーとジッタ予算:高速リンクがなぜ不安定になるのか
PCIe が時々落ちる、JESD204B がロックしない、映像リンクがチラつく——原因は RTL コードではなくクロック設計にあることが多い。FPGA の高速トランシーバはリファレンスクロックジッタに極めて敏感で、発振器 → クロックバッファ → FPGA グローバルネットワークと続くクロックツリーの各段がジッタを加算する。本稿ではジッタ予算の計算方法、クロックツリーの設計、よくある陥りどころを解説する。
1. なぜ高速リンクはジッタに弱いのか
FPGA の高速トランシーバ(GTP/GTH/GTY)は埋め込みクロックリカバリ(CDR)を使うが、リカバードクロックの品質はリファレンスクロックに依存する。リファレンスクロックのジッタ過多は以下を招く:
- PCIe BER の劣化:リファレンスクロック RMS ジッタが 1 ps を超えると、Gen3 の BER が 1e-12 から 1e-8 へ悪化しうる。
- JESD204B の同期失敗:SYSREF ジッタ過多で LMFC が整合できず、リンクがロックしない。
- 映像リンクのチラつき:ピクセルクロックのジッタがサンプリング点をずらし、揺れや横筋を生む。
- DDR タイミング余裕の損失:クロックジッタがセットアップ/ホールド余裕を食い、高温でメモリエラーが出る。
核心となる公式:ジッタは加算的——クロックツリーの各段がジッタを足す。総ジッタは単純な合計ではなく RSS(二乗和の平方根)になる。
2. ジッタ予算の計算方法
PCIe Gen3 x8 を例に:リファレンスクロック RMS ジッタは ≤ 1 ps(12 kHz ~ 20 MHz 積分)が必要。段階ごとの計算:
| クロックツリー段階 | ジッタ(RMS) | 備考 |
|---|---|---|
| 水晶発振器(XO) | 0.3 ps | 低位相雑音 OCXO、100 MHz |
| クロックバッファ | 0.5 ps | Si5341 または 8T49N シリーズ |
| PCB トレース + ビア | 0.2 ps | マイクロストリップ 5 cm、連続インピーダンス |
| FPGA グローバルクロックネットワーク | 0.3 ps | MRCC → BUFG → SERDES |
| 総ジッタ(RSS) | √(0.3²+0.5²+0.2²+0.3²) ≈ 0.67 ps | 1 ps 規格以下、33% の余裕 |
予算を超過したら
総ジッタが 1.2 ps と計算され、PCIe Gen3 の 1 ps 要件を超える場合、優先順位で最適化する:
1. より低ジッタの発振器へ交換:普通の TCXO 1 ps → OCXO なら 0.3 ps まで低下、即効果がある。
2. より良いクロックバッファ:冗長なバッファを外し、専用クロック IC を使う(Si5341、GPIO バッファではなく)。
3. PCB トレースを短く:発振器を FPGA の近くに置き、トレース ≤ 5 cm、ビアを避ける。
4. 電源デカップリングを適切に:クロック IC はデジタル回路と共有せず LDO で個別給電。
3. FPGA クロックツリーの構造
FPGA 内部のクロックツリーは 1 本道ではなく多段バッファリング:
| 段階 | リソース | 用途 | 加算ジッタ |
|---|---|---|---|
| 1. 外部入力 | クロックピン(MRCC/SRCC) | 発振器 / 外部クロック入力 | — |
| 2. MMCM/PLL | ミックスモードクロックマネージャ | 逓倍、分周、位相調整 | ≈ 0.1~0.3 ps |
| 3. グローバルバッファ | BUFG / BUFGCE | FPGA ロジックアレイ全体を駆動 | ≈ 0.1 ps |
| 4. リージョナルクロック | BUFH / BUFR | ローカルクロックドメイン、低ジッタ | ≈ 0.05 ps |
| 5. SERDES クロック | CPLL / QPLL | 高速トランシーバのリファレンスクロック | ≈ 0.2 ps |
重要なルール
- 高速トランシーバのクロックは専用ピンを使う:GTH/GTY のリファレンスクロックピンは固定、普通の IO は使えない。
- MMCM/PLL を多段にカスケードしすぎない:PLL を 2 段重ねるとジッタが加算される、1 段が 2 段に勝る。
- クロック跨ぎは FIFO で:ロジック内でクロックドメインを跨ぐな。メタスタビリティがランダムエラーを生む。
- ADC クロックはデータクロックと同源に:JESD204B は Device Clock と SYSREF の同源・同期が必要。
4. よくある 3 つのクロック陥りどころ
陥りどころ 1:発振器がスイッチング電源に近すぎる
DC-DC のリップル(mV 級)が発振器出力を変調し、ジッタを 2~3 倍悪化させる。対策:発振器を DC-DC から離し、LDO で個別給電、フェライトビーズを追加。
陥りどころ 2:JESD204B の SYSREF が整合していない
SYSREF は LMFC(ローカルマルチフレームクロック)を整合させる。SYSREF と Device Clock が同源でない、またはトレーススキューが大きすぎると、リンクがランダムにロックを失う。対策:SYSREF と Device Clock を同一クロック IC から出力し、トレース長を整合させる。
陥りどころ 3:SERDES リファレンスクロックに普通の IO を使う
FPGA の高速トランシーバには専用リファレンスクロックピン(例:MGTREFCLK0P/N)がある。発振器を普通の IO に繋いでもロジック用クロックは逓倍できるが、SERDES の CDR はロックしない——ジッタにグローバルクロックネットワークのノイズが乗るためだ。
FPGA 高速リンクの信頼性は、半分がロジック設計、半分がクロック設計で決まる。ジッタ予算を正しく計算し、クロックツリーをきちんと組み、電源デカップリングをしっかりすれば、多くの「時々落ちるリンク」は消える。クロックは魔法ではなく、計算できるエンジニアリング問題だ。
