FPGA の学習を進めていくと PLL(Phase-Locked Loop) や MMCM(Mixed-Mode Clock Manager) という用語が出てきます。初心者にとっては「周波数をいじるやつ」という理解になりがちですが、もう少し深く理解すると、より実践的に活用できるようになります。本記事では、PLL と MMCM の基本的な役割や、FPGA での使い分けについて詳しく解説します。
目次
1. PLL と MMCM の基本的な役割
🔹 なぜクロックを変更する必要があるのか?
FPGA では、外部クロック(例: 50MHz)を基準にして内部で別のクロックを作成することが多い です。以下のような理由で PLL や MMCM を利用します。
- 異なる周波数のクロックを生成したい
- 例: 50MHz の入力クロックから 100MHz や 200MHz のクロックを作成
- 逆に 25MHz などに分周(Divide)したクロックを作成
- 複数のクロックドメインを作りたい
- 高速ロジック(200MHz)と低速ロジック(50MHz)を同じ FPGA 内で動かす場合
- ジッター(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/256クロック単位)
- より強力なジッター抑制機能
- 複数のクロック出力の個別設定が可能
🔹 MMCM の主な用途
- 高精度なクロック生成(例: 125MHz のクロックを作成)
- 位相シフトを利用したデータ転送のタイミング調整
- クロックのリタイミング(信号のタイミングを合わせる)
4. PLL と MMCM の使い分け
機能 | PLL | MMCM |
---|---|---|
クロック周波数の変更(逓倍・分周) | ✅ | ✅ |
ジッターの低減 | ✅ | ✅(PLLより優秀) |
複数のクロック出力を個別設定 | ❌ | ✅ |
細かい位相シフト(1/256クロック単位) | ❌ | ✅ |
低消費電力・シンプルな用途 | ✅ | ❌ |
💡 基本的には「PLL で足りなければ MMCM を使う」と考えればOK!
5. 実践! FPGA で PLL / MMCM を使う
🔹 Xilinx Vivado での PLL/MMCM 設定
- Vivado の Block Design で「Clocking Wizard」を追加
- 入力クロック(例: 100MHz)を指定
- 出力クロックの周波数を設定(例: 200MHz, 50MHz など)
- 必要なら位相シフトやリタイミング設定
- 自動生成された HDL を使用
6. まとめ
項目 | PLL | MMCM |
---|---|---|
基本用途 | シンプルなクロック変換 | 高度なクロック制御 |
周波数の変更(逓倍・分周) | ✅ 可能 | ✅ 可能(より細かい設定可) |
ジッター低減 | ある程度可能 | より強力 |
位相シフト | 可能(粗い調整) | 可能(1/256単位で細かく調整可) |
複数のクロック生成 | ❌ | ✅ |
🎯 結論
✔ クロックの基本変換なら PLL
✔ 細かい位相調整や複数のクロック管理が必要なら MMCM
✔ 「PLL で足りなければ MMCM」を意識すると良い
🔍 FPGA 初心者向けの考え方
- 「クロックを変えたい」→ PLL を考える
- 「クロックの精度やタイミングを細かく制御したい」→ MMCM を考える
- 「ジッターが問題になりそう」→ MMCM の方が有利
- 「複数のクロックを作る必要がある」→ MMCM のほうが便利
FPGA を設計するときに「PLL か MMCM、どちらを使うべき?」と迷ったら、この基準を思い出してください!