第1章 計算基盤としてのFPGA

第1章
計算基盤としてのFPGA
滝本 宗宏
はじめに
• FPGAに基づくプログラム可能ハードウェア基
盤 → ソフトウェアアプリケーションの高速化
ハードウェアの見地:従来のマイクロプロセッサに
基づくソフトウェアプログラム可能システムと,ア
プリケーション特注のハードウェア関数とのギャッ
プの橋渡しをする
ソフトウェアの見地:FPGA基盤の設計ツールや方
法論がハードウェア高速化アルゴリズムの素早
い作成を可能にする.
はじめに
• プログラム可能ハードウェア基盤によるよいこと
1. ソフトウェアエンジニアによる特注ハードウェア関数の
作成
2. 設計固定日時の遅延
3. 単純化したフィールド更新
4. 電気製品の多くのカテゴリから特注チップを縮小や排除
• ASIC(applica tion-specific integrated circuit)からFPGA
へ
• この章:
1. FPGAとFPGA基盤を概観
2. C言語を使ったFPGAアプリケーション開発における哲学
1.1 FPGAとは
• FPGA(field-programmable gate array):
1. フィールド内デバイスの操作を変更化
2. プログラム可能論理ブロック(数トランジスタ)が
プログラム可能な相互接続によって結合
3. 論理ブロック:検索表(lookup table, LUT)
一般的なFPGAの特徴
• 論理要素: FPGAデバイスは,小さな論理要素(論理セル)配列に
基づいて構成される.
• 検索表: 論理要素はプログラム可能レジスタ(1つ以上,フリップ
フロップ)と入力(5以下)を構成する論理部(検索表)からなる.検
索表は,任意の組み合わせ関数を作成できる.
• メモリ資源: 最近のほとんどのFPGAがチップ上にもっている
(SRAM).局所メモリ(論理要素内からアクセス可),共有メモリとい
うように階層化されている.
• 経路指定(ルーティング)資源: FPGAの柔軟性の素であり,プロ
グラミング柔軟性と領域効率とのトレードオフが存在する.プログ
ラム可能スイッチが,FPGA資源を接続する.
• 構成可能I/O: FPGAに基づくアプリケーションには,さまざまなシ
ステムレベルインタフェース要求があるので,FPGAは,多くのプロ
グラム可能I/O特性を備えている.
FPGAプログラミング技術
• FPGAプログラミング技術: 1回だけプログラミングができるものか
ら(Actel , Quicklogic),消去可能なSRAMに基づくもの(Altera, Lattice
Semiconductor, Xilinx)まである.
• SRAMに基づく消去可能なものが主流.アップグレードは,フラッ
シュメモリの更新や,WebやCD-ROMからバイナリイメージを取得
するのと同様に容易.
• FPGAで実装されたアプリケーションは,ASICと比べて,遅く,電力を
消費する.
• FPGAの開発は,リスクとコストを劇的に引き下げ,開発時間を短
縮させる.→ ASICのプロトタイプ
• 電力消費と再構成時間の点でコストが高い再構成可能計算の将
来についても述べる.
• HDLの使用や既存機能ブロックの配置によって振舞いを定義 ‐[合
成器]→ ネットリスト(バイナリ中間ファイル) ‐[配置経路設定ツー
ル]→ ビットマップ(FPGAにダウンロード)
1.2 FPGAに基づくプログラム可能
ハードウェア基盤
• プログラム可能ハードウェア基盤:
FPGAのようなプログラム可能ハードウェア要素を含み,ソフトウェ
アアルゴリズムのすべてや一部を実装できるもの
• 基盤のソフト構成要素(組込みプロセッサ,周辺機器,FPGA内で
動作する組込みOS)の定義を拡張することもできる.
• 今日のFPGA: 組込みプロセッサコアと特注ハードウェア機能(図
1-1: Intellectual property, IP ブロック)をもつ標準周辺機器との組
合せは,特定のタスクや,特定のアプリケーションドメインに理想
的に適合したプログラム可能基盤を専用に作成することが可能
• プログラム可能基盤に基づく設計の試みは,元からシステム設計
者とソフトウェアアプリケーション開発者の領域
• ソフトウェアアプリケーション開発者には,設計のどの部分がハー
ドウェアになり,どの部分を従来のプロセッサ上のソフトウェアとし
て実装すべきか,離散デバイスとFPGA基盤内に組み込まれたプロ
セッサコアのいずれを用いるか,システム設計者ほど明らかでな
い.
1.2 FPGAに基づくプログラム可能
ハードウェア基盤
• ソフトウェアアプリケーション開発者にとって,ア
プリケーションやアルゴリズムを全体として考慮
し,アルゴリズムの並行性を向上させ,可能な最
高の性能を発揮させるために,並列プログラミン
グ手法を利用することが,ずっと根本的.
• アプリケーション開発者が,設計の初期のフェー
ズで行う根本的な決定,アルゴリズム分割の効
果,自動コンパイラやハードウェア合成ツールを
用いた,アプリケーションのハードウェアへの
マッピングは,最終システムの性能に大きく影響
する可能性がある.
1.3 コストを下げながらパフォーマン
スを向上させる
• 安い汎用マイクロプロセッサの使い勝手を向
上させたいとき,FPGAを組込みシステムに導
入する方が,高性能DSPチップや,特注ASIC
処理機能を導入するよりコストが安い.
 より高い解像度や,より大きなシグナルバンド
幅を扱うために,既存のシステムの処理能力を
向上させなければならない場合,必要な性能向
上は,計算資源の増強が必要な計算上の問題
かもしれないし,バンド幅問題を可決するまったく
新しいアプローチが必要になるかもしれない.
1.3 コストを下げながらパフォーマン
スを向上させる
• Digital signal processing (DSP)のアプリケーションは,FPGA
で効果的に対処できるよい例
1.
2.
•
•
FPGA内に処理機能を実装すると,命令に基づくプロセッサが
不要になるか,必要性を軽減できる
高性能DSPに対してFPGAのコスト/性能トレードオフの方が優
れているという逆転が,徐々にシステム設計者に知られるよ
うになった(特注ASICのリスクと最初にかかるコストと比べても
ずっと優れている).
計算中心のアルゴリズムのほとんどは,Cソースコードで
記述する方が,等価なハードウェア記述に比べて,少量
で済む.
信号処理や他の計算中心のアプリケーションを実現する
際,FPGAは,後にASICに変換されるプロトタイピングとし
て使用されたり,実際の製品基盤として使用されたりする
(フィールドソフトウェアのアップグレード可).
1.3 コストを下げながらパフォーマン
スを向上させる
• 多重デバイス(プロセッサ周辺機器,接続論理部)を1つの
FPGAにまとめることができる.
→ サイズとシステムの複雑さを軽減し,初期投資を下げる.
• アプリケーション各部を分担: 各処理形式の知識が必要
だが,単位コスト当たりの性能が優れている.
1.
2.
•
性能が問題にならない部分(OS,ネットワークスタック,ユーザ
インタフェース) → ホストマイクロプロセッサ(ARM,PowerPC,
Pentium)
計算中心の部分 → 高性能DSP, FPGAの専用ハードウェア,
特注ASIC
FPGAは,以前プロトタイプとして作成してきたアルゴリズ
ムを,徐々に移植や検証できる.
→ Impulse-CのようなCに基づく設計ツールがあるとス
ピードアップ
1.4 ツールの役割
• ソフトウェア開発ツールは,2つの基礎的な方法
で,アプリケーション開発の結果を改善する.
1. 目的基盤について,適切で理解が容易な抽象化を
与える.基盤のよい抽象化は,最終的な製品の最
高のパフォーマンスを生じるプログラミング法を駆
使しながら,移植性の高いアプリケーションを作成
し,テストし,デバッグすることを可能にする.
2. アプリケーションを,元の高水準記述から最適化さ
れた(基盤にロードされ実行される)低水準な表現
に変換する機械的な過程に価値がある.
1.4 ツールの役割
• 理想的なツールフローでは,プログラマがこの変
換過程の特定のステップについて関知しなくても,
アプリケーションが自動ツールの魔法によって,
最高の効率で動作する.
 少なくとも最適化およびコード生成の仕組みや,
マッピング過程の動作の仕方の基本的な理解がなけ
ればならない.
 フローを調整する(オプションを指定するなど)か,
元のアプリケーションに戻って,アルゴリズムレベル
の最適化をするかして,変換過程を制御しなければ
ならない.
ソフトウェアに基づく方法の重要性
• ツールの多重の役割を果たすために,新生
自動ハードウェア生成ツールは,自動コンパ
イル/最適化問題と,FPGAに基づくプログラム
可能基盤クラスに意味のあるプログラミング
抽象化やプログラミングモジュールの提供の
両方に重点を置いている.
• すべての新生ツールは,ソフトウェア指向設
計の経験を増やすことに重点を置いている.
ソフトウェアに基づく方法の重要性
• ソフトウェア指向設計ツールが適切な理由:
 ソフトウェアは,従来のRTL設計より高水準の抽象
化を提供するので,複雑になっていく基盤に基づくシ
ステムを管理するのに役立つ.
 アルゴリズムは,ソフトウェアとして仕様化され,テ
ストされ,検証されるので,ソフトウェア指向設計環境
は,ほとんど,手動変換が必要ない.
 ソフトウェアを実行するマイクロプロセッサは,すべ
ての最新システムの一部になってきた.
→ ソフトウェアをハードウェア実装に直接コンパイル
することができる新生技術があれば,ソフトウェアが
システム設計の共通語になる.
ソフトウェアに基づく方法の重要性
• FPGAの適切な抽象化を提供するソフトウェア指
向プログラミング,シミュレーション,デバッグの
各ツールによって,ソフトウェア設計者およびシ
ステム設計者は,どれか1つのアルゴリズムで
アプリケーション開発と実験を始めることができ,
ハードウェアの特定の知識を必要とせずに,き
わどい設計を決定できる.
• 図1-2と1-3は,ソフトウェアからハードウェアへと
いう設計方法とツールを導入すると,従来のソフ
トウェアおよびハードウェア設計過程が改善され
ることを示している.
ソフトウェアに基づく方法の重要性
ソフトウェアに基づく方法の重要性
1.5 組込みソフトウェア基盤としての
FPGA
• FPGA上の設計は,組込みプロセッサ上の設
計に似ている.
1. 物理デバイスをプログラミングする前のアプリ
ケーションの機能のデバッグや検証に,シミュ
レーションツールが使われる.
2. FPGAのツールは,複雑で,設計時間がより長く
かかるが,基本設計の流れは,ハードウェア設
計というよりソフトウェア設計と見ることができる.
• DSPでの設計同様,低水準な特殊性やベン
ダ特有のアーキテクチャ特性も要求される.
1.5 組込みソフトウェア基盤としての
FPGA
• FPGAおよびプロセッサの傾向は,詳細を理解する必
要なく,すばやくアプリケーションやプロトタイプを実現
する方向である.
• この本で用いるImpulse-Cは,単純なCに基づくハード
ウェア/ソフトウェアの分割およびプロセス同期を与え
る.
1. 設計フローは,特注の振舞いシミュレータや他のEDAを
中心にした技術を必要とせずに,従来の組込みおよび
デスクトッププログラミングツールフローに統合されてき
ている.
2. FPGAに基づく基盤に対する,C言語による高度に並列
化したアプリケーションのシステム指向開発を可能にす
る(ソフトウェアとして自然に表現されない既存のHDL設
計手法とは,組み合わせられる場合とそうでない場合
がある).
1.5 組込みソフトウェア基盤としての
FPGA
• ソフトウェア指向システム設計フローの重要
な点は,ソフトウェアで獲得した設計仕様を,
最も適切な基盤資源(プロセッサorFPGA)で
実現できることである.
1.6 プログラミング抽象の重要性
• ハードウェア技術者とソフトウェア技術者の技能は,
融合しはじめている.
1. ハードウェア技術者:言語(HDLはハードウェアクラスを
抽象化する)に基づく設計を導入してきた.
2. ソフトウェア技術者:並行性やメッセージ駆動型プロセス
同期法のようなハードウェア指向の概念を設計法として
蓄積してきた.
•
ソフトウェア技術者がソフトウェアアプリケーションプ
ログラミングからハードウェア実装へ移行するのは
困難.
 高水準言語で表現する概念的アプリケーションを,目的
のハードウェアに適合した効率的なハードウェア記述に
変えなければならない.
1.6 プログラミング抽象の重要性
• 振舞い合成の進歩によるハードウェア用高水準言語
コンパイラの発展が移行を容易にしたが,RTLや低水
準最適化法の専門知識なしに,効率的でハードウェア
とソフトウェアを組み合わせたアプリケーションを作成
するのは,まだ試験的な部分がある.
ハードウェア/ソフトウェアインタフェースの作成には,
低水準な抽象化にしなければならない.
2.
ハードウェアのタイミング駆動の特性を扱わなければ
ならない.
1.
•
この本では,すべてのアプリケーションをCで記述で
きないと認めて,ソフトウェアに基づく設計法やFPGA
のツールが適切な場合はいつなのかを示す.
1.7 C言語がFPGA設計に適合するの
はいつか
• ソフトウェア開発とハードウェア設計に必要な低
水準な手法とは,歴史的に別々
→ ハードウェア/ソフトウェアを組み合わせた解
法の実験には多くの時間がかかる.
• 完全なハードウェア/ソフトウェア設計は,ソフト
ウェアとハードウェアのソースファイルの集まりで
表現されるので,1つのツールで,コンパイル,
シミュレーション,デバッグを行うのは容易でない.
• ハードウェア設計過程は非効率 → ハードウェ
アとソフトウェアの設計サイクルは同期しない.
→ システムインタフェースと根本的なソフトウェ
ア/ハードウェア分割を早期に決定する必要
1.7 C言語がFPGA設計に適合するの
はいつか
• Cに基づくFPGA設計ツールの登場
→ よく知られたソフトウェア設計ツールや標準C言語
を,アプリケーションの多くに使用できる.
• 後の改良で,自動生成されたハードウェアを,手動で
作成したHDLコードで置き換えることができる.
 性能改良を行うためにハードウェア技術者が必要な点
は,設計サイクルの後ろの方に押しやられ,システム全
体として,生産的ソフトウェア設計法を用いて設計するこ
とが可能.
• 高度な並列化,多重処理アプリケーションを記述する
ために必要なC言語の拡張を利用することができる.
• 組込みプロセッサをもつ目的基盤に対しては,ハード
ウェア/ソフトウェアインタフェースを生成するのに利用
できる.
1.7 C言語がFPGA設計に適合するの
はいつか
• これらのツールとハードウェア/ソフトウェアア
プローチで成功するカギ:
アプリケーションをソフトウェア資源とハード
ウェア資源に適切に分割すること
よい分割戦略は,アルゴリズムの計算上の要
求ばかりでなく,データのバンド幅の要求も考慮
しなければならない.
2. ハードウェア/ソフトウェアインタフェースは,性
能上の重大なボトルネックになるかもしれない.
1.
1.7 C言語がFPGA設計に適合するの
はいつか
• 高度な並列アプリケーションに合ったプログラミ
ングモデルを使用することが重要
1. 遠隔手続き呼び出しのような従来のプログラミング
手法を使って,特定の関数をFPGA上に移す(ハード
ウェア関数:スタックで値をやりとりし,プロセッサは
結果待ちをする).
2. 重要な計算をハードウェアに実行させられるように,
特製のプロセッサ命令を生成する.
3. データフロー指向手法は,より効率的で,障害や
デッドロックが起きにくい.
→ アプリケーションを全体として考え直す必要
1.7 C言語がFPGA設計に適合するの
はいつか
• 設計ツールは,多重並列プロセスの相互接続を
視覚化し,デバッグするために利用できる.
 例えば,アプリケーションモニタは,標準Cデバッガ
の制御下で実行しながら,アプリケーションおよびそ
の構成プロセスの全体像を与えることができる.
 アプリケーションのボトルネックになるデータ処理量
の多い領域を特定し,分割戦略の結果を定量化する
のに役立つ.
 ソフトウェアプロファイリング手法と組み合わせると,詳細
な解析や性能改善のために,コードの特定領域を見つける
ことができる.
1.8 この本の使い方
• ゴール:
1. FPGAを媒介として,ハードウェアとソフトウェアを組み合
わせたアプリケーションの生産的な設計者を育てる.
2. 設計の導入,デバッグ,コンパイルについて,別の手段
を与える.
• ソフトウェア開発者/組込みシステム設計者に対して:
1. FPGAを紹介し,歴史と,汎用ハードウェアデバイスの使
用の背景を述べ,組込みシステムに付属の計算資源と
して導入する際の利点と落とし穴について理解を助ける.
2. Cを使って,並列プログラミングの概念を導入して,ハー
ドウェアとソフトウェアを組み合わせたアプリケーションを
作成する点について,多くの時間を割く.
1.8 この本の使い方
• VHDL/Verilogを使っているハードウェア設計者に対して:
1. 既存の設計法にコンポーネントとしてC言語を用いるのに
役立つ.
2. 以前Cで表現してきたアルゴリズムを素早くプロトタイプ
ハードウェアにすることができ,大規模で相互に結合した
システムを作成して,自由に実験できる.
3. ハードウェア/ソフトウェアテストベンチや,テスト目的のコ
ンポーネントを作成する別の方法を提供する.
• ハードウェアおよびソフトウェア開発に対して:
1. ハードウェア/ソフトウェア分割を狭めるという他の側面か
らの設計要求を学ぶことができる.
2. ハードウェア設計者とソフトウェア設計者の協調が進む.