筆者:Taylor Roorda
2018-07-17
タグ エンジニアリング 組み込みプロセッシング 半導体および開発ツール
バイナリに興味がある方には、パート1~4まで見逃してしまったんじゃないかと思うくらい短いですが、この投稿は私が特に気に入っている電子デバイス、フィールドプログラマブルゲートアレイ(FPGA)の簡単な紹介記事です。FPGAについて話すと、「仕組みがわからない」「複雑すぎる」「Cでプログラムなんて組めない」という意見をよく耳にします。こんなに素晴らしいデバイスがいとも簡単に拒否されているのが残念なので、今回は、よくある心配事のいくつかを解消するよう努力したいと思います。
フィールドプログラマブルゲートアレイとは?
まずはきちんと説明しましょう。その名前から、FPGAがロジックゲートからなるプログラム可能な構造だと推測した読者もいるでしょう。かなり近いのですが、実際は内部ロジックアレイがゲートで実装されているわけではないので正確ではありません。そうではなく、アレイ内のブロックはロジックエレメントと呼ばれています。ロジックエレメントは、通常は任意の論理関数を実装したルックアップテーブル(LUT)と、マルチプレクサ、加算器、フリップフロップなどの補助回路で構成されます。たいていは、このロジックエレメントのアレイが「FPGAファブリック」と呼ばれています。
図1:FPGAロジックエレメントの例(画像提供:Wikimedia Commons)
もっと簡単に言うなら、FPGAとはデジタル回路を構築するための商標のない多彩なビルディングブロックの入れ物と考えることができます。それぞれのブロックは、アプリケーションに合わせて好きなように接続することができます。デジタル回路をどのように動作させるかを説明できれば、十分な数のロジックエレメントを使用してFPGA内にこれを構築できます。PWM出力が25個必要な場合も、まったく問題ありません。特殊な通信プロトコルが必要であれば、何らかのハードウェアで処理しましょう。
FPGAを使用する理由
FPGAはデジタルシステムの実装に使用しますが、多くの場合、シンプルなマイクロコントローラでも同じ効果を得ることができます。マイクロコントローラは低コストで、PCBへの配置も簡単です。FPGAは高性能なツールですが、すべてのケースに最適というわけではなく、パワー、レイアウト、外付け回路についての要件が過度に高くなる場合があります。特殊な要件が多数あり、コストも相当高くなるFPGAを使用することは、ばかげていると思えるかもしれません。
お気づきの方もいるかもしれませんが、FPGAを使う最初の理由は柔軟性です。構成可能なロジックブロックがあれば、ハードウェアで行き詰まることはありません。タイマやUARTが不足しても、ロジックエレメントを使用してもう1つ作ればよいのですから。将来的に再構成が可能なため、テクノロジや要件の変化に合わせて製品ライフサイクルを長期化することもできます。
2番目の理由は速度です。マイクロコントローラは一度に1つずつ命令を順次実行しますが、FPGA構造はそのハードウェアの性質上、本質的に並列になっています。このため、複数の処理を同時に実行できるので、FFTやグラフィックス処理など、シーケンシャルプロセッサでは高コストになることがある動作に有効です。また、FPGAは通常のマイクロコントローラより多くの高速I/Oオプションがあり、LVDSや、HDMIなどのプロトコル向けに10Gbps以上を提供するトランシーバに対応します。
FPGAのプログラム方法
FPGAでは、HDL(ハードウェア記述言語)と呼ばれる特別なタイプの言語を使用します。主要な種類には、VerilogとVHDLの2つがあります。QuartusやVivadoなど、ほぼすべての開発スイートで両方の言語がサポートされているので、どちらを使用するかは好みの問題になります。これらの言語は後で「合成」されますが、これはマイクロコントローラにとってのコンパイルに例えられます。この合成ツールが、コードで規定された結果を生み出すためにロジックエレメントをどう接続するかをFPGAに伝えます。FPGAに着手したときに覚えておく必要があるのは、記述したコードがCPU命令にではなく、ハードウェアに変換されることです。
開発を容易にするため、FPGAベンダーからよく使用されるコードブロックのカタログが提供されており、これを簡単に設計に採り入れることができます。その例には、マルチプライヤ、RAM、通信ブロックなどがあります。使用されているHDLコードを見る必要すらなく、これらのブロックを設定して設計に追加できるので、開発期間が短くなります。
図2:XilinxのカタログおよびHLSのIPブロックを示したブロック図(一部)
(画像提供:eewiki.net)
一部のベンダーは、CまたはC++で記述された関数をHDLコードブロックに変換する高位合成(HLS)ツールを提供しています。これらのツールを使用すると低レベルの詳細情報が抽象化されるので、ソフトウェア経験のある開発者が大幅に使用を開始しやすくなります。
まだ納得できない読者のために、私が特に気に入っているFPGA機能の1つはソフトプロセッサを使用できることです。これはFPGAのロジックエレメントから構築された完全なプロセッサで、このプロセッサ用のカスタム補助ハードウェアを構築して、Cでアプリケーションを記述することができます。わずか数分あれば、簡単なソフトプロセッサシステムをセットアップしてプログラムすることができます。従来型のプロセッサを引き続き使用する必要がある場合は、SoCの使用を検討してください。SoCは、FPGAとハードARMプロセッサを1つのパッケージに備えています。
まとめると、FPGAは通常のマイクロコントローラよりも高価で使用が難しいものですが、必要に応じて大幅に高いパワーと柔軟性を提供します。技術が進歩し、高い集積レベルによってFPGAがより低コストになれば、従来からあるマイクロコントローラに取って代わる可能性もあるでしょう。少しでも興味をひく点がありましたら、すぐにFPGAを使って、時代の一歩先を歩みましょう。低コストのエントリ向け開発ボードをお探しですか? DE10-Lite(Terasic製)、Arty(Digilent製)、Mobile Dev Board(Lattice製)Maker Kit(Microsemi製)などのボードがFPGAサプライヤから提供されています。
著者について
Digi-Key ElectronicsのアソシエートアプリケーションエンジニアであるTaylor Roorda氏の主な関心分野は組込みシステム、プログラム可能ロジック、および信号処理です(2015年入社)。ノースダコタ州立大学で電気工学の学士号を取得し、余暇にはギターを演奏したり、作曲したりしています。
ご質問やご意見がおありですか?Digi-Keyのオンラインコミュニティであり、技術情報源でもある
TechForumに投稿して下さい。