CPLD入門と実践ガイド:アーキテクチャ・FPGA比較・設計フロー・選定ポイント

CPLDとは何か

CPLD(Complex Programmable Logic Device)は、プログラマブルなロジックデバイスの一種で、ワイヤードロジックや小〜中規模の論理回路をワンチップで実装するために使われます。ディスクリートな論理ゲートや複数のロジックICを置き換え、ボード設計の簡素化、部品点数削減、機能の柔軟な変更を可能にします。FPGA(Field-Programmable Gate Array)と同じ「プログラマブルロジック」に分類されますが、用途・構造・動作特性が異なります。

基本アーキテクチャと動作原理

CPLDは複数の「論理ブロック(macrocells)」を持ち、それらが固定的または限られたルーティング資源で相互接続されています。典型的な構成要素は次の通りです。

  • 入力/出力ブロック(IOB):さまざまな電圧規格やドライバ特性を持つピンに対応します。
  • マクロセル(macrocells):組合せ論理や簡易な状態記憶(フリップフロップ)を実装する基本単位。製品により構成や能力が異なります。
  • プログラマブル相互接続:マクロセル間を結ぶ配線リソース。FPGAより限定的で、固定的なパターンが多いことが特徴です。
  • 不揮発性設定メモリ:多くのCPLDは内部に不揮発性メモリ(EEPROMやフラッシュ等)を持ち、電源投入直後から設定が有効になる「instant-on」を実現します。近年ではベンダーや世代によって実装方式が異なります。

設計者はHDL(VHDL/Verilog)やブロック図(スキマティック)で回路を記述し、合成(Synthesis)、配置配線(Place & Route)、プログラミング用のビットストリーム生成を行ってデバイスに書き込みます。書き込み方法としてはJTAGやISP(In-System Programming)が一般的です。

CPLDとFPGAの違い(比較)

用途に応じてCPLDとFPGAを選択する判断は重要です。主な違いは以下の通りです。

  • 論理密度:FPGAは数万〜数百万のロジックセルを持ち、デジタル信号処理や大規模な回路に向きます。一方CPLDは低〜中密度で、数百〜数千のロジックエレメントを実装するのに適しています。
  • 構造と予測可能性:CPLDは固定的な相互接続とマクロセルにより、遅延やタイミングの予測が比較的容易です。FPGAは大規模なルーティングと豊富なブロックがあり、タイミング収束が複雑になることがあります。
  • 立ち上がり特性(Instant-on):多くのCPLDは不揮発性構成を内部に持ち、電源投入後すぐに機能します。従来のSRAMベースFPGAは外部フラッシュやFPGA内部のロードが必要で、起動に時間がかかる場合があります(近年はフラッシュベースFPGAも存在します)。
  • 消費電力とコスト:小規模用途ではCPLDの方が電力効率やコスト面で有利となることが多いですが、量産規模やデバイス世代によっては小型FPGAが競合する場合もあります。
  • 周辺機能:FPGAはDSPブロック、BRAM、大規模なクロックマネージメント、高速シリアルI/Oなど豊富なリソースを備えるのに対し、CPLDは主にロジックとIOに特化します。

代表的なデバイスファミリとベンダー

市場には歴史的・現行含め複数のCPLDファミリがあります。代表的なベンダーと例を挙げます(状況は更新されるため最新情報は各ベンダーサイトで確認してください)。

  • Intel(旧Altera):MAXシリーズなど、ロジック密度の異なるCPLD/低密度デバイスを提供。Quartus Primeで設計と書き込みが可能です。
  • Lattice Semiconductor:MachXO、ispMACHなどのCPLDラインを保有。低消費電力・低ピン数の用途で広く使われます。設計ツールはLattice DiamondやRadiantなど。
  • Xilinx(現AMD傘下):かつてXC9500系やCoolRunner系などのCPLDをラインナップ。これらの多くはレガシー製品となっているため、サポートツールはISEなど旧環境での扱いになります。

設計フローとツールのポイント

CPLD設計の一般的な流れは以下の通りです。

  • 要件定義(入出力数、電圧、クロック、タイミング、消費電力)
  • HDLによる回路記述(またはスキマティック)
  • 合成(Synthesis)と論理最適化
  • ピン割当(Pin Assignment)と配置/配線(Place & Route)
  • タイミング解析とシミュレーション(遅延・立ち上がり遅延などの検証)
  • 書き込み(JTAG/ISP)と実機確認

ツールはベンダーごとに提供され、例えばIntelのQuartus Prime、LatticeのDiamond/Radiant、Xilinxの旧ISEなどが使われます。注意点として、近年の新しいツール(例:Xilinx Vivado)は主にFPGAに特化しており、古いCPLDファミリはサポート外の場合があるため、対象デバイスに対応したツールを選ぶことが重要です。

実用的な用途・適用例

CPLDは次のような用途で長年重宝されています。

  • ディスクリートロジックの集約(複数ICの置き換え)
  • バスインタフェースのデコーディングやアービトレーション
  • 電源・リセット管理とシーケンス制御(電源立ち上げの監視、イネーブル信号生成)
  • プロトコルゲートウェイやパケットプレフィルタなど簡易なパケット処理
  • デバイス間のレベル変換・タイミング調整やIO拡張
  • 製造テスト向けのロジックやファームウェアのサポート(工場出荷時のシグナル整備)

これらの用途は、CPLDの「起動即動作」「確定的なタイミング」「IOドライブ能力」の強みを生かせる場面です。

設計上の注意点と制約

CPLDを選ぶ際には以下の点に注意してください。

  • 容量制限:ロジックが増えるとすぐに容量が不足するため、要件を慎重に見積もる必要があります。状態機械や複雑なパイプライン処理には不向きです。
  • クロック・グロッバルリソース:FPGAのような豊富なクロック管理ユニット(PLL/DLL)がない場合があり、複雑なクロックドメイン制御は困難です。
  • 高速I/Oの限界:高帯域のシリアル通信やDDRメモリ制御など、高速/高機能なインタフェースは基本的にFPGA向けの機能です。
  • ツールとサポート:レガシーCPLDの場合、最新の設計ツールでサポートされていないことがあるので、ツールの互換性や将来の供給状況を確認してください。
  • セキュリティ:デバイスによってはコンフィギュレーションの保護機能が異なります。読み出し保護や暗号化サポートの有無は要確認です。

選定の実務アドバイス

選定時のチェックリスト:

  • 必要なIO数と電圧レベル(3.3V/2.5V/1.8Vなど)
  • 最大論理要素数と余裕の見積もり(将来の変更を見越す)
  • 立ち上がり時間や瞬時起動の要否
  • 消費電力と熱設計(モバイルやバッテリ駆動なら特に重要)
  • 開発ツールの入手性と学習コスト、設計フローの社内整備
  • 量産時コスト、在庫・供給の安定性

簡単なルールとして、単純なロジック統合や確定的な制御が必要で、かつ起動時間やIO駆動が重要ならCPLDを検討します。複雑な処理、DSP、BRAM、ハイパフォーマンスI/Oが必要ならFPGAやマイクロコントローラ+周辺ICの方が適しています。

学習/開発を始めるために

初めてCPLDを扱う場合は、次の手順で学習を進めると効率的です。

  • 基礎的なデジタル回路(論理ゲート、フリップフロップ、組合せ回路、状態機械)を復習する
  • 小規模なHDLプロジェクト(パラレルデコーダ、簡単なシーケンサ、プリスケーラ)を実装してシミュレーションと実機書き込みを経験する
  • ベンダー提供の評価ボードやサンプルプロジェクトを活用する(IO制御やJTAGの使い方を学べる)
  • タイミング解析や静的タイミング解析(STA)の基礎を学び、設計品質を担保する

まとめ

CPLDは、ボード設計の簡素化、起動即時性、確定的なタイミングなどの強みを持つプログラマブルロジックデバイスです。用途を正しく見極めることで、コスト削減や設計の柔軟性向上につながります。一方、論理密度や高速周辺機能の限界もあるため、FPGAやマイクロコントローラとの棲み分けを明確にして選定すると良いでしょう。最新の製品情報やツールのサポート状況は各ベンダーサイトで随時確認してください。

参考文献