FPGA/CPLD の基礎:仕組み、開発フロー、設計のポイント
FPGA (Field Programmable Gate Array) および CPLD (Complex Programmable Logic Device) は、デジタル回路をハードウェアとして実装するための重要なデバイスです。従来の ASIC (Application Specific Integrated Circuit) と比較して、設計変更が容易で、短期間で開発できるという利点があります。本記事では、FPGA/CPLD の基本的な仕組みから開発フロー、設計のポイントまでを網羅的に解説します。
1. FPGA/CPLD とは
FPGA と CPLD は、どちらもユーザーが論理回路をプログラム可能なデバイスですが、内部構造や特性に違いがあります。
1.1 FPGA (Field Programmable Gate Array)
FPGA は、多数の論理ブロック (Configurable Logic Block: CLB) と配線リソースがマトリクス状に配置された構造をしています。各 CLB は、LUT (Look-Up Table)、フリップフロップ、マルチプレクサなどで構成されており、複雑な論理関数を実現できます。配線リソースは、CLB 間を接続するためのプログラム可能な配線ネットワークで、柔軟な回路構成を可能にします。
FPGA の特徴:
- 高集積度: 非常に多くの論理ゲートを搭載できるため、複雑な回路を実現可能。
- 柔軟性: プログラム可能な配線により、様々な回路構成に対応可能。
- 高性能: 並列処理に優れ、高速な処理が可能。
- 消費電力: 一般的に CPLD よりも消費電力が大きい。
- 揮発性: 電源を切るとプログラムが消えるため、外部メモリ (コンフィギュレーション ROM など) が必要。
1.2 CPLD (Complex Programmable Logic Device)
CPLD は、複数の PAL (Programmable Array Logic) または PLA (Programmable Logic Array) を組み合わせた構造をしています。各 PAL/PLA は、AND アレイと OR アレイで構成されており、ある程度の複雑さの論理関数を実現できます。PAL/PLA 間は、グローバル配線リソースで接続されています。
CPLD の特徴:
- 低集積度: FPGA よりも搭載できる論理ゲート数が少ない。
- 予測可能性: 遅延時間が比較的予測しやすい。
- 消費電力: 一般的に FPGA よりも消費電力が小さい。
- 不揮発性: 電源を切ってもプログラムが保持されるため、外部メモリが不要。
- コスト: 一般的に FPGA よりも安価。
1.3 FPGA と CPLD の比較
特徴 | FPGA | CPLD |
---|---|---|
集積度 | 高 | 低 |
柔軟性 | 高 | 中 |
性能 | 高 | 中 |
消費電力 | 大 | 小 |
揮発性 | 揮発性 (外部メモリが必要) | 不揮発性 (外部メモリ不要) |
遅延予測性 | 難しい | 比較的容易 |
コスト | 高 | 低 |
主な用途 | 画像処理、通信、産業用制御など | ロジックグルー、アドレスデコードなど |
1.4 その他のプログラム可能な論理デバイス
- SPLD (Simple Programmable Logic Device): 最も単純なプログラム可能な論理デバイス。PAL や PLA が該当。
- ASIC (Application Specific Integrated Circuit): 特定の用途に特化したカスタム IC。FPGA/CPLD より高性能だが、開発コストと時間がかかる。
- SoC (System on a Chip): CPU、メモリ、周辺回路などを 1 つのチップに集積したシステム。FPGA に CPU コアを搭載したものも存在する。
2. FPGA/CPLD の内部構造
FPGA/CPLD の内部構造を理解することは、効率的な設計を行う上で重要です。ここでは、FPGA の内部構造を例に、主要な構成要素について詳しく解説します。CPLD の内部構造も、FPGA ほど複雑ではありませんが、同様の考え方で理解できます。
2.1 Configurable Logic Block (CLB)
CLB は、FPGA の基本的な論理演算ユニットです。各 CLB は、以下の要素で構成されています。
- Look-Up Table (LUT): LUT は、真理値表を格納したメモリで、入力信号に対応する出力値を生成します。LUT のビット数は、入力信号の数によって決まります。例えば、4 入力 LUT は、2^4 = 16 ビットのメモリで構成されています。LUT を用いることで、任意の論理関数を実現できます。
- フリップフロップ (Flip-Flop): フリップフロップは、データを保持するための記憶回路です。クロック信号に同期してデータを更新します。D-フリップフロップ、T-フリップフロップ、JK-フリップフロップなど、様々な種類があります。
- マルチプレクサ (Multiplexer): マルチプレクサは、複数の入力信号の中から 1 つを選択して出力する回路です。選択信号によって、どの入力信号を出力するかを決定します。
- その他: AND ゲート、OR ゲート、XOR ゲートなどの基本的な論理ゲートも、CLB に含まれている場合があります。
2.2 配線リソース (Routing Resources)
配線リソースは、CLB 間を接続するためのプログラム可能な配線ネットワークです。配線リソースは、以下の要素で構成されています。
- 配線チャネル: 水平方向および垂直方向に配置された配線チャネル。
- スイッチボックス: 配線チャネル間の接続を切り替えるためのスイッチ。
- 接続ボックス: CLB と配線チャネル間の接続を切り替えるためのスイッチ。
配線リソースを適切に利用することで、複雑な回路構成を実現できます。ただし、配線距離が長くなると、遅延が増加するため、注意が必要です。
2.3 入出力ブロック (I/O Block)
入出力ブロックは、FPGA と外部回路とのインターフェースを担います。入出力ブロックは、以下の要素で構成されています。
- 入出力パッド: 外部回路との接続端子。
- 入出力バッファ: 入力信号の電圧レベルを変換したり、出力信号の駆動能力を高めたりするためのバッファ。
- 入出力レジスタ: 入力信号をラッチしたり、出力信号を保持したりするためのレジスタ。
入出力ブロックは、様々な入出力規格 (LVTTL, LVCMOS, HSTL など) に対応しています。
2.4 その他の機能ブロック
近年、FPGA には、DSP (Digital Signal Processor) ブロック、ブロック RAM (Block RAM)、高速シリアルインターフェース (SERDES) などの特殊な機能ブロックが搭載されることが増えています。これらの機能ブロックを利用することで、特定の用途に特化した高性能なシステムを構築できます。
- DSP ブロック: 乗算器、加算器、アキュムレータなどの演算器を搭載しており、デジタル信号処理に最適化されています。
- ブロック RAM: 比較的高速なメモリを搭載しており、データの一時的な保存に利用されます。
- 高速シリアルインターフェース (SERDES): 高速なシリアル通信を行うためのインターフェース。PCIe、Ethernet などの規格に対応しています。
3. FPGA/CPLD の開発フロー
FPGA/CPLD の開発フローは、主に以下のステップで構成されます。
3.1 仕様策定
最初に、実現したい機能や性能、制約条件などを明確に定義します。具体的には、以下の項目を検討します。
- 機能仕様: 回路の機能や動作を記述。
- 性能仕様: 動作周波数、遅延時間、消費電力などを記述。
- 制約条件: 使用できる FPGA/CPLD デバイス、コスト、納期などを記述。
3.2 設計
仕様に基づいて、回路の論理設計を行います。論理設計には、以下の方法があります。
- HDL (Hardware Description Language) 設計: VHDL や Verilog HDL などのハードウェア記述言語を用いて回路を記述。
- 回路図設計: 回路図エディタを用いて回路を記述。
- 高位合成 (HLS) 設計: C/C++ などの高位言語を用いて回路を記述し、HLS ツールを用いて HDL コードに変換。
近年では、HDL 設計が主流となっています。
3.3 シミュレーション
設計した回路の動作を検証するために、シミュレーションを行います。シミュレーションには、以下の種類があります。
- 論理シミュレーション: 回路の論理的な動作を検証。タイミング情報は考慮されない。
- タイミングシミュレーション: 回路のタイミング情報を考慮して動作を検証。
- コシミュレーション: ソフトウェアとハードウェアを組み合わせて動作を検証。
シミュレーションを行うことで、設計の誤りやタイミングの問題を早期に発見できます。
3.4 論理合成
シミュレーションで検証された HDL コードを、FPGA/CPLD デバイスに実装可能なネットリストに変換します。論理合成ツールは、回路の最適化やタイミング制約の充足なども行います。
3.5 配置配線 (Place and Route)
論理合成されたネットリストに基づいて、FPGA/CPLD デバイス上の CLB や配線リソースを割り当て、回路を配置配線します。配置配線ツールは、タイミング制約を満足するように、自動的に配置配線を行います。
3.6 タイミング検証
配置配線された回路のタイミング情報を解析し、タイミング制約を満足しているかどうかを確認します。タイミング検証ツールは、遅延パスやセットアップ/ホールド時間違反などを検出します。
3.7 ビットストリーム生成
配置配線された回路の情報を、FPGA/CPLD デバイスに書き込むためのビットストリームに変換します。ビットストリームは、デバイスのコンフィギュレーションに使用されます。
3.8 デバッグ
生成されたビットストリームを FPGA/CPLD デバイスに書き込み、実際に回路を動作させてデバッグを行います。デバッグには、ロジックアナライザやインサーキットエミュレータ (ICE) などのツールを使用します。
3.9 評価
最終的な回路の性能や消費電力などを評価し、仕様を満足しているかどうかを確認します。
3.10 量産
評価の結果、仕様を満足していれば、量産に進みます。
4. FPGA/CPLD 設計のポイント
FPGA/CPLD 設計を成功させるためには、いくつかのポイントを押さえる必要があります。
4.1 HDL 設計の重要性
現代の FPGA/CPLD 設計においては、HDL 設計が不可欠です。HDL を用いることで、回路の抽象度を高く保ち、設計の再利用性や移植性を向上させることができます。また、シミュレーションや論理合成などの EDA ツールとの連携も容易になります。
4.2 クロックドメインの管理
複数のクロックドメインを使用する場合、クロック間の非同期な信号伝達によるメタステーブル状態の発生を防ぐ必要があります。クロックドメイン間の信号伝達には、非同期 FIFO や double-flop synchronizer などの同期化回路を使用します。
4.3 タイミング制約の設定
タイミング制約を適切に設定することで、回路の性能を最大限に引き出すことができます。タイミング制約には、セットアップ時間、ホールド時間、クロック周波数などのパラメータが含まれます。タイミング制約を設定する際には、FPGA/CPLD デバイスのデータシートをよく確認する必要があります。
4.4 リソースの使用率
FPGA/CPLD デバイスのリソース使用率を適切に管理することも重要です。リソースの使用率が高すぎると、配置配線が困難になったり、タイミング制約を満足できなくなったりする可能性があります。回路の規模や複雑さを考慮して、適切なデバイスを選択する必要があります。
4.5 テスタビリティの考慮
回路のテスタビリティ (テストの容易性) を考慮することも重要です。テスタビリティの高い回路は、デバッグや故障解析が容易になります。スキャンチェーンや BIST (Built-In Self-Test) などのテスト回路を組み込むことを検討しましょう。
4.6 消費電力の削減
消費電力は、FPGA/CPLD 設計において重要な考慮事項の一つです。消費電力を削減するためには、以下の方法があります。
- クロックゲーティング: 不要な回路ブロックへのクロック供給を停止する。
- 電圧スケーリング: 電源電圧を低くする。
- 低消費電力モード: アイドル状態の回路ブロックを低消費電力モードに移行する。
- 回路の最適化: 不要なロジックを削除したり、より効率的な回路構成を採用したりする。
4.7 設計再利用性の考慮
設計の再利用性を考慮することで、開発期間を短縮することができます。モジュール化された設計を行い、共通の機能ブロックを再利用できるようにしましょう。
4.8 EDA ツールの活用
最新の EDA ツールを活用することで、設計効率を大幅に向上させることができます。EDA ツールは、回路の設計、シミュレーション、論理合成、配置配線、タイミング検証などを支援します。
5. FPGA/CPLD の応用事例
FPGA/CPLD は、様々な分野で幅広く利用されています。
5.1 通信
- 無線通信: ベースバンド処理、チャネルコーディング、変調/復調など。
- 有線通信: イーサネット、光ファイバー通信などのプロトコル処理、パケット処理など。
5.2 画像処理
- 画像認識: オブジェクト検出、顔認識など。
- 画像圧縮/伸張: JPEG、MPEG などのコーデック処理。
- 画像処理: フィルタリング、エッジ検出など。
5.3 産業用制御
- モーター制御: インバーター制御、サーボ制御など。
- ロボット制御: ロボットアームの制御、センサー処理など。
- プロセス制御: 温度制御、圧力制御など。
5.4 医療
- 医用画像処理: MRI、CT などの画像処理。
- 医療機器制御: 人工呼吸器、ペースメーカーなどの制御。
5.5 自動車
- ADAS (Advanced Driver-Assistance Systems): 車線逸脱警報、自動ブレーキなど。
- インフォテインメントシステム: ナビゲーション、オーディオ処理など。
5.6 宇宙・航空
- 衛星制御: 姿勢制御、通信制御など。
- 航空機制御: フライトコントローラー、センサー処理など。
6. 最新動向
FPGA/CPLD 技術は、常に進化を続けています。
6.1 より高集積化、高性能化
FinFET トランジスタなどの最新の半導体プロセス技術を採用することで、より高集積化、高性能化が進んでいます。
6.2 AI/ML 向けアクセラレータ
AI/ML (Artificial Intelligence/Machine Learning) 処理を高速化するための専用のアクセラレータが、FPGA に搭載されるようになってきています。
6.3 Heterogeneous Computing
CPU、GPU、FPGA などの異なる種類のプロセッサを組み合わせた Heterogeneous Computing が、より一般的になってきています。
6.4 クラウド FPGA
クラウド上で FPGA を利用できるサービスが登場しています。これにより、開発環境の構築や維持管理が容易になり、より多くの人が FPGA を利用できるようになります。
7. まとめ
FPGA/CPLD は、デジタル回路をハードウェアとして実装するための強力なツールです。本記事では、FPGA/CPLD の基本的な仕組みから開発フロー、設計のポイントまでを網羅的に解説しました。FPGA/CPLD 技術を習得することで、様々な分野で活躍できるエンジニアになることができます。