FPGAとは?CPUなどとの仕組みの違いと用途・使用例
プログラムを書き込むことで専用ハードウェアを自在に実現できるチップ、「FPGA」の応用領域が急拡大しています。CPUやGPUでは実現できない特徴を持つFPGAの仕組みと活用のメリット、応用例などについて解説します。
「プログラマブルデバイス」がエレクトロニクス技術の活用を加速
スマートフォンのような日常使いする身近なツールから、スーパーコンピュータなど科学技術の発展や国の産業競争力を支える戦略システムまで・・・。電子情報技術の応用は多岐にわたります。電子情報技術には、他の科学技術にはあまり見られない、稀有な特徴があります。スマホのような民生機器にも、科学技術開発や防衛など専門性の高い特殊用途機器にも、同様に最先端の高度な技術が投入される傾向があることです。このように、高度なエレクトロニクス技術を広く活用できている背景には、「プログラマブルデバイス」の存在があります。
プログラマブルデバイスとは、プログラムを書き換えることによって、実現する機能を変更できる半導体チップのことを指します。その代表例は、パソコンなどの頭脳である「CPU(Central Processing Unit)」であり、近年、人工知能(AI)の実現に欠かせないチップとして話題の「GPU(Graphics Processing Unit)」もプログラムデバイスの一種です。
プログラマブルデバイスは、同じ仕様のチップであっても、実行するプログラム次第で多様な機能を実現できます。このため、高度な技術を投入したチップも、大量生産して製造コストを低減すれば、実行プログラムを使い分けることで多様な応用に適用できます。プログラマブルデバイスのこうした性質を生かすことで、高度な電子情報技術を多様な応用に適用できるようになったです。
プログラムで専用ハードウェアを実現する「FPGA」
CPUもGPUも、多目的に活用できる汎用ハードウェアである点は同じです。そしていずれも、用途に特化した機能は、専用のソフトウェアで実現します。ところが、数あるプログラマブルデバイスの中には、プログラムによって特定用途の専用ハードウェアを実現できる特異な特徴を持つチップもあります。これが「FPGA(Field Programmable Gate Array)」です(図1)。
図1 ソフトウェアで機能を実現するCPUやGPU、ハードウェアで機能を実現するFPGA
自在に専用ハードウェアを実現するFPGAの仕組み
FPGAとは、半導体チップ上に集積する電子回路の設計データをプログラムとして書き込むことで、設計した専用ハードウェアの機能・性能を実現できる半導体チップのことです。通常、半導体チップは、半導体工場でウエハー上に設計データに基づく回路パターンを描くことで、設計したチップの機能・性能を実現します。FPGAは、専用ハードウェアを実現する際の工場での製造は不要です。応用機器に搭載した状態で設計データを書き込んだり、書き換えて機能変更したりすることができます。
機器搭載後の機能の書き込みや変更は、他のプログラマブルデバイスでも可能です。ただし、CPUなどに対するFPGAの最大の相違点は、回路構成、すなわちハードウェア自体を作り変えることができる点にあります。CPUなど他のプログラマブルデバイスは、汎用性の高い演算器を用意しておき、計算手順を記したプログラム上の命令を読み込みながら多様な機能・処理を実現します。チップ上のハードウェアである演算器の仕様や演算器同士をつなぐ回路構成を変えるわけではありません。
FPGAではハードウェアを自在に実現できるため、CPUやGPUもチップ内に実現することも可能です。近年のFPGAの中には、CPUコアなどを集積した製品も数多く投入されており、ハードウェアとソフトウェアの両方による機能実現もできるようになってきています。
掛け算九九早見表のような対応表で論理回路の機能を表現
では、FPGAでは、どのような仕組みでハードウェアを書き込んで、実現しているのでしょうか。その仕組みを解説します。
FPGAの内部には、多様な演算回路を実現する「プログラマブルな論理ブロック (LB)」と呼ぶ機能ブロックが格子状に多数配置されています(図2)。そして、各LBには比較的単純な論理回路を自在に構成できる「ルックアップテーブル(LUT)」と呼ばれる入力と出力の関係を対応付ける表と、過去の処理結果を保持して手順を踏んだ処理を実行する順序回路を構成するための「フリップフロップ (FF)」が含まれています。
図2 FPGAの一般的な構成
出所: Logic Block内の回路図はWikimedia Commonsより
LUTとは、言わば掛け算九九や対数早見表のような入力値と出力値の関係を一覧表にまとめた対応表です。FPGAに搭載されているLUTは、メモリー素子とマルチプレクサで構成されており、プログラムによって任意の入出力関係を記載できます。一般的なFPGAでは、主に4~6入力1出力のLUTが搭載されています。
一方、フリップフロップは、SRAM1ビット分の記憶素子です。処理過程のデータを一時的に保持して、後から入力されたデータと併せて入力することで、順序回路を実現します。FPGAでは、プログラム作成時に、論理レベルの設計データから実現したい専用ハードウェアの機能と等価な対応表やフリップフロップの利用法を定めておき、これをプログラムとして書き込みます。
多数のLBを配線素子でつなぎ、大規模回路を実現
ただし、1個のLBで実現可能なデータ処理回路は小規模です。FPGAでは、より大規模な回路を構成するために、複数個のLBをプログラムで指定したつなぎ方で接続する仕組みが導入されています。一般的には、2種類のプログラマブルな配線素子を介してLB間をつないで任意の2階層ネットワークを構築し、大規模回路を構成します。
プログラマブルな配線素子のうちの1つが、隣接するLB間をつなぐ「コネクションブロック(CB)」と呼ばれる配線素子です。CBはマルチプレクサとパストランジスCBタで構成されており、LB間の入出力を制御しています。もう1つは、隣接するCB同士をつなぐ「スイッチブロック(SB)」と呼ぶデータの転送経路を制御するスイッチ素子です。SBには、CBよりも複雑なデータ転送経路の設定が可能な構造が導入されており、大規模回路のネットワーク構築に利用されます。
小規模で単純な専用ハードの実現に向くCPLD
LUTをベースとしたFPGAとは別の方式で専用ハードウェアを実現するプログラマブルデバイスもあります。「CPLD (Complex Programmable Logic Device)」と呼ばれるチップです。
CPLDでは、FPGAで利用しているLUTの代わりに、基本的な論理素子であるAND回路とOR回路を組み合わせたアレイ構造(プロダクトターム)の回路を備えるLBを使用して、求める論理回路を実現します。一般に、CPLDは、FPGAよりも内部構造が単純なため、チップ自体が安価で消費電力も低い傾向があります。ただし、実現できる回路が小規模で単純な構成に限られ、一般的には1万ゲート以下の論理回路や電圧変換、I/Oの拡張などの実現に利用されています。
導入メモリー素子の種類次第で、使い勝手が大きく変わる
ここまで解説したことからわかるように、FPGAでは、専用ハードウェアの機能を多数のメモリー素子を巧妙に使いながら構成しています。現在市販されているFPGAには、メモリー素子としてSRAM素子を使うものと、フラッシュメモリー素子を使うものがあります。そして、メモリー素子が異なることに起因する、使い勝手の違いがあります。
SRAM素子は高集積化や高性能化に向いています。ハイエンドな応用機器の実現に向けたFPGAで採用されています。ただし、SRAMは揮発性であるため、電源を切ると一度プログラムを書き込んで実現した専用ハードウェアが消失してしまいます。このため、外部メモリーにプログラムを蓄積して、電源を入れる度にプログラムを書き込む(コンフィギュレーション)することになります。
一方、フラッシュメモリー素子は、集積度や動作速度の面ではSRAM素子に比べて劣りますが、不揮発性であるため、電源を切っても一度書き込んだ専用ハードウェアを保持できる利点があります。このため、外部メモリー不要で利用可能であり、基板の小型化が求められる組み込みシステムなどへの適用に向いています。
ソフトではなく、ハードで機能実現できるメリットとは
冒頭で、プログラマブルデバイスの一種であるFPGAは、CPUやGPUなどとは、専用ハードウェア自体を作り変える点が最大の相違点であることを説明しました。では、CPUなどを使ったソフトウェアによる機能の実現と、FPGAを使ったハードウェアによる機能の実現では、何が異なってくるのでしょうか。他のプログラマブルデバイスでは得られない、FPGA固有のメリットを解説したいと思います(図3)。
図3 専用ハードウェアで機能を実現するFPGA固有のメリット
ハードで実現する機能は高速
まず、特定処理に特化した専用回路を実現できるため、CPUなどよりも高速な演算処理が可能になる可能性があります。
CPUなどソフトウェアで機能を実現するチップは、「ノイマン型コンピュータ」と呼ばれる基本原理に基づいて、汎用的な利用を可能にしています。ノイマン型コンピュータとは、処理すべき命令や処理対象のデータをメモリーから逐次読み出して実行する方法です。演算処理を行うたびに、指示書(プログラム)を確認しながら逐次実行するため、指示書を変えれば多様な処理を実行できるという原理です。
ただし、この方法は、メモリーと演算器の間での命令やデータの転送速度がシステム全体の処理性能に大きく影響を及ぼしています。近年、ここの転送速度の向上が難しくなってきており、ノイマン型コンピュータに変わる性能向上の伸び代が大きな汎用情報処理手法が求められるようになりました。FPGAならば、プログラマブルな性質は維持しながら、命令やデータを逐次メモリーから読み出す必要がない、専用ハードウェア(非ノイマン型の電子回路)を作ること可能です。そして、情報処理システムをさらに高速化できる可能性が出てきます。
また、チップ内に用意された演算リソースを効率的に利用し、無駄なく並列度を最大限まで高めた処理回路を構成できます。このため、画像処理やAI関連処理など、同じ演算を数多く同時並行的に実行したい処理の高速化が可能です。GPUでも並列実行することを想定したハードウェア構成を取っていますが、GPUに搭載されている演算器は多目的での利用を想定して作られているため、応用によっては冗長な仕様になる場合があります。これに対しFPGAは、応用での要求に最適化したプログラムを作成することで演算器の無駄を削ぎ落とし、その分を並列度の向上に振り向けることができる可能性があります。
冗長な回路の動作を最小化してより低電力に
さらに、最適な専用ハードウェアを作ることができれば、低消費電力化も期待できます。これは、メモリーと処理回路の間でのデータ転送がなくなること、冗長な回路を作らなくて済むことに起因します。
後者の理由を少し補足します。CPUなどに搭載されている64ビット演算器などは、64ビット分のデータを一括りにして演算を実行しています。ところが、演算処理の中にはこうした64ビット分の演算を一括実行させる方法が非効率になる場合があります。
例えば、通信プロトコル処理などでは、逐次流れてくるビットストリームの中から先頭ビットから5ビット後の信号を反転させるといった処理が行われます。こうした場合、カウンター回路で反転すべきビットを数え、信号の反転回路を用意しておけば、単純な回路構成で同じ演算を実行できます。余分な演算リソースを動かす必要がないので、その分、低消費電力化が可能になります。
試作用からアクセラレータへと広がる、FPGAの応用
FPGAは、1985年にXilinx(AMDが)が初めて商用チップを市場投入しました。市場投入された当初から、プログラムで専用ハードウェアを自在に実現できる特徴の有用性に注目が集まりました。
ただし、プログラマブルな特徴を生み出すための仕組みや素子は実現したい回路の機能としては直接寄与していません。このため、半導体の製造プロセスで専用回路を直接チップ上に形成したチップ(ASICなど)に比べれば、性能、消費電力、コストなどの面で劣ってしまうため、市場投入後暫くの間は、応用機器に搭載されませんでした。それでも、設計した専用回路の機能や挙動を検証するための試作用チップとして広く利用されるようになりました(図4)。工場でチップを試作するのに比べれば、開発期間を劇的に短縮できたためです。
図4 主に試作用だったFPGAの応用領域が急拡大
試作用からアクセラレータへと広がる、FPGAの応用
これが、2000年代に入ると、応用製品にもFPGAが直接搭載されるようになりました。FPGAの大規模化・高性能化が進んだこと、ASICなどの開発・製造コストが高騰して少量生産のロジックチップの実現が困難になってきたことから、FPGAで専用ハードウェアを構成するメリットが際立ってきたからです。
こうしたFPGAの活用法の中でも特に注目されたのが、生産中止になった半導体チップを再調達する手段としての利用です。長期間にわたって利用する半導体応用機器の中には、機器に搭載されているチップの生産が中止され、備蓄もなく、メンテナンスが困難になってしまうものもあります。特に産業機器などで、こうしたシーンに直面する例があります。こうした場合に、FPGAを利用して、代替しようとするものです。
さらに2010年代以降には、CPUよりも高性能な専用ハードウェアを自在に構成できる特徴を生かして、コンピュータのアクセラレータとしても利用されるようになりました。特に注目されているのが、データセンターのサーバーに搭載する、特定処理を高速実行するためのアクセラレータとしての利用です。
例えばMicrosoftは、クラウドサービス「Microsoft Azure」の中で、特定のワークロードの処理性能を向上させるためのFPGAを利用したアクセラレーションサービスを提供しています。さらに、AIや機械学習の中で専用ハードウェアを適用する効果が大きい推論処理を高速実行するためにFPGAを利用する例も増えています。その他、データセンターでは、ネットワークのパケットの解析や分類、インタフェース処理などにFPGAを利用することによるCPU負荷の軽減、FPGAによるデータストレージ装置でのデータ圧縮や暗号化処理の高速化などに利用されています。
こうした利用法に向けたFPGAの活用は急激に拡大しており、サーバー向けCPUを開発・販売している半導体メーカーが自社製チップの競争力強化を狙って、大手FPGAメーカーの大型買収が相次ぎました。2015年にはIntelがAlteraを、2010年にはAMDがXilinxを買収しました。
まとめ
足下では、多方面での「デジタルトランスフォーメーション(DX)」の広がり、特にAI活用の拡大と高度化が進み、CPUやGPUなどのプログラマブルデバイスのさらなる高性能化と適用領域の広がりが求められています。しかし、近年、半導体の微細加工技術の進化によるノイマン型コンピュータをベースにした電子情報システムの高性能化・低消費電力化・低コスト化が年々難しくなってきています。
こうした中、プログラマブルでありながら、進化の伸び代が残されているFPGAを活用した専用ハードウェアによるシステム構築に期待が集まることでしょう。これまでは、FPGAに書き込むプログラムを作成するためには、ハードウェア設計の知識が必要であり、ソフトウェア開発に慣れたシステム設計者の利用が広がりにくい状況がありました。近年では、開発ツールの発達によって、より平易に専用ハードウェア開発ができるようになってきています。FPGAの活用領域がますます広がりそうです。
最新の技術や製品の情報を入手するには、展示会への参加が効率的です。
ネプコンジャパンは電子機器・半導体・パワーデバイスなどの最新技術を持った企業が1,800社出展している、アジア最大級の展示会です。年に4回、東京・大阪・名古屋で開催しております。気になる製品があれば、その場で商談も可能です。ぜひ足を運んでみてはいかがでしょうか?
次回は東京!9月17日(水)~19日(金)に幕張メッセで開催
執筆者情報
執筆:伊藤 元昭
経歴:富士通株式会社にて、半導体エンジニアとして、宇宙開発事業団(現JAXA)の委託による人工衛星用耐放射線半導体デバイスの開発に従事。日経BP社にて、日経マイクロデバイスおよび日経エレクトロニクスの記者、副編集長、日経BP半導体リサーチの編集長を歴任。
▼この記事をSNSでシェアする