第2回(前編)「どうしてハードウエアがプログラミングできるのか?」はこちら

いよいよFPGAの内部をのぞいてみよう。図3は,FPGAのチップ写真の例だ。機能的な構造としては,チップの周辺に並べられている I/Oエレメント,同じく周辺部(この写真では四隅の角)に搭載されているPLLブロック,およびそれらを除いた内側の部分の 3種類に大分割できる。

内側の部分はコア,内部コア,またはコア・ファブリックなどと呼ばれることがあるので覚えておくと良いだろう。この内部コアの中の大半の部分で縦横に規則的に並んでいるのがロジックエレメントである(図 3 では「汎用ロジック(LEの集合体)」と表記されている)。最近のFPGAは,一つのチップに数千個から数十万個ものロジックエレメントが集積している。また最近のFPGAのコアには,乗算器(マルチプライヤ)の回路ブロックや,ユーザー回路内のメモリとして使用するRAMブロックも搭載されている。このことからも,FPGAの役割がグルー・ロジックのみならず,データ処理,信号処理といったシステムの心臓部を担うということが想像できるだろう。

図3.FPGAのチップ構成(Cyclone IIIの例)

図3.FPGAのチップ構成(Cyclone IIIの例)

FPGAを構成する主な「部品」

 FPGAの内部コアに含まれる主な"部品",「ロジックエレメント」「マルチプライヤ(乗算器)」「RAMブロック」,さらに周辺部に搭載されている「PLL」「I/Oエレメント」を,それぞれ簡単に説明しよう。

 ロジックエレメントは,前編で述べたようにルックアップ・テーブルとレジスタで構成されているが,実際のFPGAに搭載されているものは 図4のような構造になっている。ルックアップ・テーブル (LUT)は 一般的に 4入力のものが多い。演算回路を作った場合に,他のLUTとの間で桁上げ(Carry)信号の受け渡しを直接おこなう内部配線を備えている。 また後段のレジスタ(Reg)の入力の前にマルチプレクサ回路を備え, LUTの出力をつなぐか,他のLEの Reg の出力(Reg Chain)をつなぐかを選択できるようにしている。これにより高速なシフトレジスタをつくることができるのだ。 Reg の後段にもマルチプレクサ回路を備えて,LUTの出力が Reg を経由するかバイパスするかが選択可能だ。そして使用する配線を複数の配線リソースから選べるように分割して出力している(配線と配線リソースについては後述する)。

図4.ロジックエレメントの構造

図4.ロジックエレメントの構造

 マルチプライヤは乗算器で,2つのデジタル・データの乗算を高速で処理する。画像処理や通信における変復調の処理を行う場合,多数の乗算が必要になる。ところが乗算器をLEで構成するとLEブロックの使用量が多くなるうえに,それほど高い演算性能が得られない。乗算器をうまく利用すれば,処理の高速化が図れるとともに,ユーザー自身が複雑な乗算回路を設計しなくても済む。いわばFPGAの内部に「電卓」が入っていて,複雑な計算の答えをすばやく簡単にだしてくれるようなものだ。乗算器の入力と出力は,LEや他の乗算器に自由に配線・接続できるようになっている。図5の例は 18 x 18 の乗算器であるが,このブロックを 9 x 9の乗算器として使用できるプログラマビリティも備えている。 また,高性能型のFPGAでは,ビット幅を36ビットに拡大し,内部にパイプライン・レジスタを追加するとともに,後段に加算器を備えるなどして,乗算器の演算性能を高めている。

図5.乗算器の構造

図5.乗算器の構造

 RAMブロックは,設計するシステムにおいて一般的なメモリとして使用できる回路ブロックである。メモリ機能をLEのレジスタで構成すると,LEの使用効率が低下するため,メモリ専用の回路ブロックを配置している。図4の例ではブロックあたり 9Kビットのデュアルポート・メモリが縦方向に並んでおり,その複数の列がチップ内に配置されている。画像処理などのフィルタ回路で演算途中のデータを一時的に格納したり,複数ブロックを使ったりして,より大容量なメモリとしてソフトウエアのプログラムやデータの格納目的でも使用可能だ。FPGAの大規模化で,より多くのデータ処理や複雑な信号処理が可能になり,それに伴い,いっそうのメモリの大容量化が求められている。高性能型のFPGAでは 合計で 20Mビットを超えるメモリを搭載した製品も登場している。

 PLLブロックは,回路を動かすために欠かせないクロック信号を,FPGA全体に供給する回路である。FPGA全体を規則正しく動作させるためには欠かせない回路ブロックだ。PLLとはフェーズ・ロック・ループ(phase lock loop)の略。高い精度を備えた多種類の周波数と位相でクロックを生成し,コア内部あるいはI/Oエレメントにクロック信号を供給する。いわばFPGAにおける基準時計であり,"心臓"ともいえよう。

 I/OエレメントはFPGA内部と外部回路との信号の受け渡し(インタフェース)を担当する。外部回路とのインタフェースにおいては,その入出力の信号の電気的特性(DC特性)を一致させる必要があるため,さまざまなインタフェースに対応できるようにプログラマブルになっている。 +3.3VのLVTTL/CMOS,+2.5Vや+1.8VなどのLVCMOS,メモリの標準インタフェースであるSSTLやHSTL,差動信号によって高速伝送を実現するLVDSやLVPECLなどの電気的特性に合わせることができる。最近の傾向として,高速シリアル伝送の採用や移行が活発になっている。比較的よく耳にする規格では PCI Express が良い例であろう。そのため高速シリアル・トランシーバを搭載したFPGAも多い。

"複雑"な接続経路を簡単にする,FPGA内部の配線リソース

 さて,このコア内部にあるロジックエレメント,RAMブロック,乗算器回路のそれぞれの間は,金属(メタル)による配線で結ばれている。配線も設計の集積や性能において重要なファクターとなるので,単にロジック・エレメント数やカタログ性能(カタログやデータ・シートに記載されている数値)だけではFPGAデバイス選定がうまくいかないこともあるので注意が必要だ。配線のことをラウティング(Routing),あるいはインターコネクトと呼ぶこともある。また,配線全体のことを配線リソースと呼ぶことが多い(FPGAでは各種のブロックについても「リソース」という言葉を使うと覚えておくと,データシートを読むときやFPGAベンダーとの技術的な話の際に理解しやすい)。図3では分かりにくいが,インターコネクトがロジックエレメントの間を縦横に規則正しく置かれている。ロジックエレメントとI/Oエレメント間も同じように配線されている。

 このインターコネクトは,接続経路がプログラマブルになっている。つまり信号の経路を自由に変更できる。インターコネクトそのものはFPGAチップ上にアルミや銅を使ってパターン形成されており,物理的には変更できないが,前編で述べたスイッチ機構を使って接続経路を切り替えることができる。スイッチの機構は,図6(a)のようにパス・トランジスタでつくられている。 配線が縦横に交わる部分で,このスイッチを図6(b)のように配置して,常にひとつのスイッチが ONになる時は他のスイッチはOFFとなるように制御すれば,上下左右,好きな方向に接続させることができるわけだ。縦横に走る高速道路間に,インターチェンジを自由に構築できると思えばよい。

図6.インターコネクトの接続経路を切り替えるスイッチ

図6.インターコネクトの接続経路を切り替えるスイッチ
(a)パス・トランジスタの働き (b)基本的なスイッチの構成

 実際の配線と接続経路はより複雑で,配線リソースも複数の種類が存在している。たとえば図4(a)のLEの出力をみると Local Routing と Global Routing という2種類の配線リソースの存在がわかる。図6(b)のスイッチ群を複数配置した多くの配線リソースがコア内部のブロックとブロックの間,ブロックとI/Oの間にあらかじめ実装されている。

回路情報を設定するコンフィギュレーション動作

 連載第2回前編ですでに述べたようにFPGA内部の回路は,内部のスイッチ機構を使ってオン・オフを設定してプログラムされる。このオン・オフの制御は,内部の制御用の専用メモリにデータをロードして行う。ところが,広く一般に使用されているFPGAは「SRAMベース」と呼ばれているとおり,内部のメモリに格納した情報は電源をオフにすると消えてしまう。そこで電源をオンにした時には毎回,外部からFPGA内部の制御用メモリに,設定情報をロードすることになる。具体的には外部に接続したフラッシュメモリなどの不揮発性メモリに設定情報を格納しておき,システムの電源を投入したときや回路をリセットしたときに,回路情報を外部のメモリからFPGA内部のメモリに転送して,FPGAが動作可能な状態にする。この処理のことをコンフィギュレーションと呼ぶ。 コンフィギュレーションは,パソコンやゲーム機の立ち上げの作業と考えるとわかりやすいだろう。

 コンフィギュレーションにはいくつかのやり方がある。設定情報(コンフィギュレーション・データ)を格納する外部メモリ・デバイスも数種類の方式から選択できる。また,開発時には開発ソフトウエアを実行しているコンピュータから専用ケーブル(プログラミング・ケーブル)を介して,デバイスに対して直接データを書き込むことも可能である。

 コンフィギュレーションの方式については別の機会に紹介したい。

 今回は,FPGAの仕組みやこれを実現する技術に言及した。次回は,こうした特徴そなえたFPGAが設計者にもたらす様々な利点を紹介する。