MENU

FPGA 初心者向け:PLL と MMCM の基礎と実践的な使い方

FPGA の学習を進めていくと PLL(Phase-Locked Loop)MMCM(Mixed-Mode Clock Manager) という用語が出てきます。初心者にとっては「周波数をいじるやつ」という理解になりがちですが、もう少し深く理解すると、より実践的に活用できるようになります。本記事では、PLL と MMCM の基本的な役割や、FPGA での使い分けについて詳しく解説します。


目次

1. PLL と MMCM の基本的な役割

🔹 なぜクロックを変更する必要があるのか?

FPGA では、外部クロック(例: 50MHz)を基準にして内部で別のクロックを作成することが多い です。以下のような理由で PLL や MMCM を利用します。

  1. 異なる周波数のクロックを生成したい
    • 例: 50MHz の入力クロックから 100MHz や 200MHz のクロックを作成
    • 逆に 25MHz などに分周(Divide)したクロックを作成
  2. 複数のクロックドメインを作りたい
    • 高速ロジック(200MHz)と低速ロジック(50MHz)を同じ FPGA 内で動かす場合
  3. ジッター(Jitter)を低減したい
    • ジッターとは、クロックの周期が不規則に変動する現象。
    • 高精度なクロックが求められる場合、PLL や MMCM を使って安定したクロックを生成する。

2. PLL(Phase-Locked Loop)の仕組み

🔹 PLL の基本構造

PLL は、入力クロックを基準に 新しいクロックを生成する回路 です。主に 周波数の逓倍(Multiply)、分周(Divide)、位相調整(Phase Shift) に使われます。

         ┌──────────┐
IN_CLK → │   PFD    │→ ⟳ ループ (VCO) → OUT_CLK
         │(位相比較) │   ↓
         └──────────┘  分周 (Divider)
  • PFD(Phase Frequency Detector, 位相周波数検出器)
    • 入力クロックと出力クロックの位相を比較し、差があれば調整信号を出す。
  • VCO(Voltage-Controlled Oscillator, 電圧制御発振器)
    • PFD の調整信号に応じてクロック周波数を変化させる。
  • フィードバックループ
    • VCO の出力クロックを分周して PFD に戻し、安定したクロックを維持する。

🔹 PLL の主な用途

  • クロックの周波数変換(例: 50MHz → 100MHz)
  • クロックのジッター低減
  • 外部クロックとの同期

3. MMCM(Mixed-Mode Clock Manager)の仕組み

🔹 MMCM の役割

MMCM は PLL の高機能版 で、より細かいクロック制御が可能です。Xilinx FPGA では、PLL では対応できない高度なクロック処理 に MMCM を使います。

MMCM の追加機能:

  1. 異なる逓倍・分周設定が可能
  2. 高度な位相シフト(1/256クロック単位)
  3. より強力なジッター抑制機能
  4. 複数のクロック出力の個別設定が可能

🔹 MMCM の主な用途

  • 高精度なクロック生成(例: 125MHz のクロックを作成)
  • 位相シフトを利用したデータ転送のタイミング調整
  • クロックのリタイミング(信号のタイミングを合わせる)

4. PLL と MMCM の使い分け

機能PLLMMCM
クロック周波数の変更(逓倍・分周)
ジッターの低減✅(PLLより優秀)
複数のクロック出力を個別設定
細かい位相シフト(1/256クロック単位)
低消費電力・シンプルな用途

💡 基本的には「PLL で足りなければ MMCM を使う」と考えればOK!


5. 実践! FPGA で PLL / MMCM を使う

🔹 Xilinx Vivado での PLL/MMCM 設定

  1. Vivado の Block Design で「Clocking Wizard」を追加
  2. 入力クロック(例: 100MHz)を指定
  3. 出力クロックの周波数を設定(例: 200MHz, 50MHz など)
  4. 必要なら位相シフトやリタイミング設定
  5. 自動生成された HDL を使用

6. まとめ

項目PLLMMCM
基本用途シンプルなクロック変換高度なクロック制御
周波数の変更(逓倍・分周)✅ 可能✅ 可能(より細かい設定可)
ジッター低減ある程度可能より強力
位相シフト可能(粗い調整)可能(1/256単位で細かく調整可)
複数のクロック生成

🎯 結論

クロックの基本変換なら PLL
細かい位相調整や複数のクロック管理が必要なら MMCM
「PLL で足りなければ MMCM」を意識すると良い


🔍 FPGA 初心者向けの考え方

  • 「クロックを変えたい」→ PLL を考える
  • 「クロックの精度やタイミングを細かく制御したい」→ MMCM を考える
  • 「ジッターが問題になりそう」→ MMCM の方が有利
  • 「複数のクロックを作る必要がある」→ MMCM のほうが便利

FPGA を設計するときに「PLL か MMCM、どちらを使うべき?」と迷ったら、この基準を思い出してください!

目次