FPGA/CPLDの基礎:仕組み、開発フロー、設計のポイント

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 技術を習得することで、様々な分野で活躍できるエンジニアになることができます。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール