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