FPGAとCPLDの違い

FPGAとCPLDの違い

 本ブログでは、FPGAを主に取り上げています。FPGAはField-Programmable Gate Arrayの略ですが、主にSRAMで構成されています。これに対して、似たような機能を持つデバイスで、CPLDというのがあります。これはComplex Programmable Logic Deviceの略で主に不揮発性メモリで構成されています。実は、CPLDの前にPLDというデバイスがあります。これは、Programmable Logic Deviceの略で、CPLDよりも規模が小さい物を示すのですが、特に大小の基準が明確にあるわけではありません。

 ここまでの説明で、SRAMで構成されている。とか、不揮発性メモリで構成されている。という書き方をしました。そもそも、FPGAやCPLDは記憶デバイス(メモリ)で作られています。下の図を参照してください。

 縦の青い線と横の赤い線の交わる所にスイッチがあります。このスイッチをONするのかOFFするのかで、ロジックを形成しています。それが、CPLDやFPGAの最小単位の構成です。つまり、エンジニアはどのスイッチをONするのか、OFFするのかを設計するのですが、上の図を見てどのスイッチをONすれば良いのかという設計をするのは容易ではありません。したがって、各社の開発環境では、エンジニアが描いた回路(VHDLやVerilog,回路図など)をスイッチのON/OFFに変換する作業を行います。これがコンパイルと呼ばれているものです。

 さて、メモリには揮発性と不揮発性があります。揮発性は電源をOFFすると消えてしまうタイプ。不揮発性は電源を切っても消えないタイプです。揮発性メモリの代表はコンピュータのRAMです。パソコンの電源を切ってしまうと、前の作業状態を忘れてしまいます。不揮発性メモリはSDカードやUSBメモリです。これらは、電源を切っても内容がそのまま残ります。

 CPLDは不揮発性メモリで構成されています。つまり、電源を切っても消えないので、すぐに使う事ができます。たとえば、電源を入れてからすぐに使うことができます。半面、不揮発性メモリなので、デバイスの半導体が占める面積が広くなってしまうので、大容量化が難しくなります。

 FPGAは電源を切ると消えてしまう揮発性メモリで構成されています。したがって、電源を入れてからスイッチ情報をデバイスにコピーする必要があります。

 「電源投入時にコピーする」というのは意外に忘れがちなのですが、FPGAの最大の欠点です。電源を入れてすぐに使うことができないし、コピーの手間がかかるし、FPGAの他にメモリに記憶しておく必要があります。上図のようにFPGAの他にEEPROMやFlashROM等でスイッチ情報を保持しておく必要があるのです。

 そのため、FPGA各メーカーではFPGA専用に設計されたメモリデバイスを開発していて、それを使えば電源投入時にコピーを自動でやってくれます。それにしても、電源投入時のコピー中である時間はFPGAを使うことができません。その時間は数msec~数百msecなのですが、この時間が結構気になる場合があります。だいたいのシステムにて、電源を入れてから数msecもの間使えない。というデバイスが他に無いからです。

 システム内で電源を入れてからFPGAが一番最後に立ち上がる。という事になってしまい、いろいろと不具合が生じる事があります。たとえば、FPGAで何らかの制御をしたい場合、電源投入時に制御が不定になってしまうことがあります。FPGAの入出力ピンの状態も電源投入時に外部メモリからコピーするために、数msecでも不定が続くと困る場合があります。

 FPGAとCPLDの比較において、一般的にはFPGAの方が電源が複雑な傾向にあります。これは、FPGAの大規模化がすすんで、機能が豊富になったために低電圧側の種類が増えてきた。という事が言えます。

 このようにFPGAとCPLDの違いは、デバイスの構成が違うのですが、一般的には小規模回路はCPLDで大規模回路はFPGAという分類になります。しかしながら、最近では、揮発性メモリを使ったFPGAでありながら外付けのメモリが必要のない構造の物も登場しており、FPGAの欠点をカバーしようとする動きもあります。

 エンジニアがCPLDとFPGAを選定する時には、回路規模で選定する場合がほとんどです。稀に電源投入時から動かなくてはならない。という場面があって、その時にはCPLDを選択します。

 中には、巨大なFPGAを何個も使うので、それらの電源投入時のコピーや電源投入シーケンス管理のためにCPLDを使う。という場面もあります。

 CPLDを使うにしてもFPGAを使うにしても、ほとんどの会社では、プロジェクトでメーカーを選定しているようです。少なくとも1枚のプリント基板の中に異なるメーカーのFPGAやCPLDを混在しないようにします。できれば、機種全体でメーカーを統一するようにします。

 なお、CPLDにスイッチ情報を書き込むには、各メーカーが用意しているダウンロードケーブルという物を使います。USBに接続するタイプの物が用意されており、各FPGA/CPLDメーカーから購入することができます。FPGAの場合も、メーカー製のメモリを使用するのであれば、同じダウンロードケーブルが使えます。

 ダウンロードケーブルはメーカー間で互換性がありませんので、各社毎に用意する必要があります。デバッグする場合にも使用しますので、開発をする方は必ず必要になります。

 ダウンロードケーブルは、昔は回路を公開していたメーカーもあるのですが、USBタイプになって公開しているメーカーは無くなりました。