Vivado 高位合成を使用し た
FPGA デザイ ンの概要
UG998 (v1.1) 2019 年 1 月 22 日この資料は表記のバージョンの英語版を翻訳したもので、内容に相違が生じる場合には原文を優先します。資料に
よっては英語版の更新に対応していないものがあります。日本語版は参考用としてご使用の上、最新情報につきまし
ては、必ず最新英語版をご参照ください。
次の表に、 こ の文書の改訂履歴を示 し ます。 セ ク シ ョ ン 改訂内容 2019 年 1 月 22 日 バージ ョ ン 1.1 資料全体 編集上のア ッ プデー ト 。 「DSP ブ ロ ッ ク 」 DSP ブ ロ ッ ク に関する情報を ア ッ プデー ト 。 「ス ト レージ エ レ メ ン ト 」 UltraRAM に関する情報を追加。 2019 年 7 月 2 日 バージ ョ ン 1.0 初版。 な し
目次
改訂履歴 . . . 2第 1 章: は じ めに
概要 . . . 5 プ ロ グ ラ ミ ン グ モデル . . . 6 こ のガ イ ド の構成 . . . 8第 2 章: FPGA と は
概要 . . . 10 FPGA アーキテ ク チ ャ . . . 10 FPGA の並列処理 vs プ ロ セ ッ サ アーキテ ク チ ャ . . . 16第 3 章: ハー ド ウ ェ ア デザイ ンの基本概念
概要 . . . 21 ク ロ ッ ク 周波数 . . . 22 レ イ テ ン シお よ びパ イ プ ラ イ ン処理 . . . 25 スループ ッ ト . . . 26 メ モ リ のアーキ テ ク チ ャ お よ びレ イ ア ウ ト . . . 27第 4 章: Vivado 高位合成 (HLS)
概要 . . . 30 演算 . . . 31 条件文 . . . 33 ループ . . . 34 関数 . . . 35 ダ イ ナ ミ ッ ク メ モ リ 割 り 当て . . . 36 ポ イ ン タ ー . . . 37第 5 章: 計算中心のアルゴ リ ズム
概要 . . . 39 デー タ レー ト の最適化 . . . 41第 6 章: 制御中心のアルゴ リ ズム
概要 . . . 46 C++ で記述 さ れる制御 . . . 47 UDP パケ ッ ト の処理 . . . 52第 7 章: ソ フ ト ウ ェ ア検証および Vivado HLS
概要 . . . 57協調シ ミ ュ レーシ ョ ン . . . 62 C/C++ 検証が不可能な場合 . . . 64
第 8 章: 複数のプ ログ ラムの統合
概要 . . . 65 AXI . . . 65 デザ イ ン例: Zynq-7000 SoC 上で実行する アプ リ ケーシ ョ ン . . . 69第 9 章: 完成 し たア プ リ ケーシ ョ ンの検証
概要 . . . 79 ス タ ン ド ア ロ ンの計算シ ス テ ム . . . 79 プ ロ セ ッ サ ベース のシ ス テ ム . . . 81付録 A: その他の リ ソ ースおよび法的通知
ザ イ リ ン ク ス リ ソ ース . . . 84 ソ リ ュ ーシ ョ ン セン ター . . . 84 Documentation Navigator およびデザ イ ン ハブ. . . 84 参考資料 . . . 85 お読み く だ さ い: 重要な法的通知 . . . 85第 1 章
は じ めに
概要
ソ フ ト ウ ェ アはすべてのアプ リ ケーシ ョ ンの基本です。 用途がエン タ ーテ イ ン メ ン ト やゲー ミ ン グであ っ て も 、 通 信ま たは医療であ っ て も 、 現在使用 さ れてい る 製品の多 く は、 まず ソ フ ト ウ ェ ア モデルま たはプ ロ ト タ イ プを作成 す る と こ ろか ら 始ま り ます。 ソ フ ト ウ ェ ア エン ジニアは、 シ ス テ ムのパフ ォーマン スおよびプ ロ グ ラ マビ リ テ ィ に 基づいて、 プ ロ ジ ェ ク ト を市場に出すために最 も 適 し た イ ンプ リ メ ン テーシ ョ ン プ ラ ッ ト フ ォーム を判断する仕事 を担い ます。 その判断を下すため、 ソ フ ト ウ ェ ア エン ジニアには、 プ ロ グ ラ ミ ン グのテ ク ニ ッ ク だけでな く 、 さ ま ざ ま なハー ド ウ ェ ア プ ロ セ ッ シ ン グ プ ラ ッ ト フ ォーム も 活用 し ます。 プ ロ グ ラ ミ ン グに関 し ては、 過去数十年間で、 コ ー ド 再利用を目的 と し たオブジ ェ ク ト 指向プ ロ グ ラ ミ ン グ と 、 ア ルゴ リ ズ ム パフ ォーマン ス の向上を目指 し た並列処理機能において、 進歩が重ね ら れて き ま し た。 プ ロ グ ラ ミ ン グ 言語、 フ レーム ワー ク 、 ツールが進歩 し たおかげで、 ソ フ ト ウ ェ ア エン ジニアは、 特定の問題の解決に向け、 プ ロ ト タ イ プ をすばや く 作成 し 、 さ ま ざ ま な方法を テ ス ト で き る よ う にな り ま し た。 ただ、 ソ リ ュ ーシ ョ ン をすばや く プ ロ ト タ イ プ化す る こ と が求め ら れ る ので、 考慮 し なければな ら ない こ と も 2 点あ り ます。 1 点は、 さ ま ざ ま なアル ゴ リ ズ ム を比較検討す る 上で、 それを ど の よ う に解析 し 、 定量化す る かです。 こ の点についてはほかの資料で詳 し く 説明 さ れてい る ので、 こ のガ イ ド では詳 し く は説明 し ません。 も う 1 点は、 アルゴ リ ズ ム を ど こ で実行する かで す。 こ のガ イ ド では、 こ の点を FPGA (フ ィ ール ド プ ロ フ ラ マブル ゲー ト ア レ イ) に関連 さ せて説明 し ます。 アルゴ リ ズ ム を ど こ で実行す る かに関連 し 、 並列処理お よ び同時処理への関心 も 高ま っ てい ます。 ソ フ ト ウ ェ ア プ ロ グ ラ ムの並列処理への関心は新 し い も のではあ り ませんが、 プ ロ セ ッ サや ASIC デザ イ ンにおけ る動向に後押し さ れて、 再び関心が高ま っ てい ます。 こ れま では、 ソ フ ト ウ ェ ア エン ジニアの視点か ら 見て、 ソ フ ト ウ ェ ア アルゴ リ ズ ムでで き る だけ高いパフ ォーマ ン ス を得 る には、 選択肢はカ ス タ ム回路か FPGA かの 2 つで し た。 最 も コ ス ト がかか る のは、 アルゴ リ ズ ム をハー ド ウ ェ ア エン ジニアに委ね、 カ ス タ ム回路を開発する オプシ ョ ンで す。 こ のオプシ ョ ンの コ ス ト は次に基づいてい ます。 • カ ス タ ム回路を開発す る コ ス ト • アルゴ リ ズ ム をハー ド ウ ェ アに変換す る のにかか る 時間 消費電力や計算スループ ッ ト 、 ロ ジ ッ ク の集積度な ど、 ハー ド ウ ェ ア製造技術において著 し い進歩はあ り ま し たが、 用途を特化 し た カ ス タ ム回路 (ASIC) の開発コ ス ト は依然 と し て高 く つき ます。 ASIC の製造工程は コ ス ト がか さ む ので、 製品を何百万個 と い う 単位で出荷で き る よ う な アプ リ ケーシ ョ ンでない と 、 採算が合い ません。2 つ目のオプシ ョ ンは FPGA を利用する も ので、 ASIC の開発コ ス ト の問題を解消で き ます。 FPGA を使用する と 、 基本的なプ ロ グ ラ マブル ロ ジ ッ ク エ レ メ ン ト で構成 さ れた既製の コ ンポーネ ン ト を使用 し て、 アルゴ リ ズ ムのカ ス タ ム回路 イ ンプ リ メ ン テーシ ョ ン を作成で き ます。 こ のプ ラ ッ ト フ ォームでは、 生産量が何百万に満たない場合で も 、ASIC 開発の よ う に工程が複雑にな ら ず、 コ ス ト も かけずに、 消費電力を抑えて良いパフ ォーマン ス を得る こ と がで き ます。FPGA で も 、 ASIC と 同様に、 並列処理を利用 し たアルゴ リ ズ ムのカ ス タ ム回路を イ ンプ リ メ ン ト で き
プ ログ ラ ミ ン グ モデル
FPGA の使用に踏み切る と き に決め手の 1 つにな る のが、 ハー ド ウ ェ ア プ ラ ッ ト フ ォームのプ ロ グ ラ ミ ン グ モデル です。 ソ フ ト ウ ェ ア アルゴ リ ズ ムは通常、 コ ン ピ ューテ ィ ン グ プ ラ ッ ト フ ォームの詳細を抽象化する C/C++ な どの 高級プ ロ グ ラ ミ ン グ言語で記述 さ れます。 こ れ ら の言語は コ ー ド のすばやい反復実行、 段階的な改善、 コ ー ド の移 植性に優れてい ますが、 こ れ ら の特性は ソ フ ト ウ ェ ア エン ジニアに と っ て非常に重要です。 こ こ 数十年間で、 こ れ ら の言語に よ り アルゴ リ ズ ムが高速に実行で き る よ う にな り 、 プ ロ セ ッ サお よ び ソ フ ト ウ ェ ア コ ンパ イ ラ の開発が 促進 さ れま し た。 も と も と 、 ソ フ ト ウ ェ アの実行時間の短縮は、 プ ロ セ ッ サの ク ロ ッ ク 周波数を高め る こ と 、 用途が特化 さ れたプ ロ セ ッ サを使用す る こ と の 2 点に基づいていま し た。 長年、 ソ フ ト ウ ェ アの実行時間を短縮する には、 次世代のプ ロ セ ッ サが登場す る ま で 1 年待つのが常識で し た。 ク ロ ッ ク 周波数が上が る ほど、 ソ フ ト ウ ェ ア プ ロ グ ラ ム も 高速に 実行 さ れ る よ う にな り ま し た。 こ の方法で よ い結果が得 ら れ る ケース も あ り ま し たが、 多 く のアプ リ ケーシ ョ ンで は、 競争に勝て る 製品を市場に出すには、 プ ロ セ ッ サの ク ロ ッ ク 周波数を高めて ソ フ ト ウ ェ ア プ ロ グ ラ ムの実行を 段階的に高速化す る だけでは不十分で し た。 そ こ で、 その問題を克服す る 目的で、 特殊プ ロ セ ッ サが作 ら れま し た。 特殊プ ロ セ ッ サには、DSP (デジ タ ル信号処 理) やグ ラ フ ィ ッ ク ス プ ロ セ ッ シ ン グ ユニ ッ ト (GPU) な ど多 く の種類があ り ますが、 こ れ ら の特殊プ ロ セ ッ サはど れ も 、C な どの高級言語で記述 さ れたアルゴ リ ズ ム を実行で き る のに加え、 ターゲ ッ ト の ソ フ ト ウ ェ ア アプ リ ケー シ ョ ンの実行を改善す る ためのア ク セ ラ レー タ を備え てい ます。 標準プ ロ セ ッ サお よ び特殊プ ロ セ ッ サの設計において近年パ ラ ダ イ ム シ フ ト が起き、 ど ち ら の タ イ プのプ ロ セ ッ サ で も 、 ソ フ ト ウ ェ ア プ ロ グ ラ ム を高速化する のに、 ク ロ ッ ク 周波数を高め る のではな く 、 チ ッ プご と に よ り 多 く の プ ロ セ ッ シ ン グ コ ア を追加する よ う にな り ま し た。 こ う し てマルチ コ ア プ ロ セ ッ サが登場 し、 ソ フ ト ウ ェ アのパ フ ォーマ ン ス を向上す る 最先端のテ ク ニ ッ ク と し てプ ロ グ ラ ムの並列処理が見直 さ れ る よ う にな り ま し た。 ソ フ ト ウ ェ ア エン ジニアは、 パフ ォーマン ス を向上する ため、 並列処理を効率よ く 実行で き る アルゴ リ ズ ム を構築する必 要があ り ます。 アルゴ リ ズ ム設計に必要なテ ク ニ ッ ク には、FPGA 設計 と 同 じ基本要素が使用 さ れます。 FPGA と プ ロ セ ッ サ と の主な違いは、 プ ロ グ ラ ミ ン グ モデルです。第 1 章: は じ めに 従来、FPGA のプ ロ グ ラ ミ ン グ モデルは、 C/C++ ではな く 、 レ ジ ス タ ト ラ ン ス フ ァ ー レベル (RTL) に よ る記述が中 心で し た。 こ のデザ イ ン入力モデルは、ASIC デザ イ ン と 完全に互換性があ り ますが、 ソ フ ト ウ ェ ア エン ジニア リ ン グにおけ る アセ ンブ リ 言語でのプ ロ グ ラ ミ ン グに似てい ます。図1-1 に、 デザ イ ン入力方法 と し て RTL を使用 し た 従来の FPGA デザ イ ン フ ローを異な る計算プ ラ ッ ト フ ォーム と 比較し 、 プ ロ グ ラ ミ ン グ モデルの違いが イ ンプ リ メ ン テーシ ョ ン時間お よ び達成可能なパフ ォーマ ン ス に ど の よ う に影響す る かを示 し ます。 図1-1 に示すよ う に、 機能する ソ フ ト ウ ェ ア プ ロ グ ラ ムの初期バージ ョ ンは、 標準プ ロ セ ッ サおよび特殊プ ロ セ ッ サの両方で、 プ ロ ジ ェ ク ト デザ イ ン サ イ ク ルの比較的早期に得 ら れます。 初期バージ ョ ンが得 ら れた ら 、 どの イ ン プ リ メ ン テーシ ョ ン プ ラ ッ ト フ ォームで も 、 最高のパフ ォーマン ス を達成する ために作業を進めます。 こ の図は、FPGA プ ラ ッ ト フ ォーム用に同じ ソ フ ト ウ ェ ア アプ リ ケーシ ョ ン を開発する のにかか る時間 も 示 し てい ます。 アプ リ ケーシ ョ ンの初期バージ ョ ン も 最適化バージ ョ ン も 、 同 じ 段階の標準プ ロ セ ッ サ と 特殊プ ロ セ ッ サ と 比較すれば、 かな り 良いパフ ォーマ ン ス が得 ら れてい ます。RTL コー ド で記述 さ れ、 FPGA で最適化 さ れたアプ リ ケーシ ョ ンの イ ンプ リ メ ン テーシ ョ ンで、 最 も 高いパフ ォーマ ン ス が得 ら れてい ます。 ただ し 、 こ の イ ンプ リ メ ン テーシ ョ ンの達成にかか る 開発時間は、 一般的な ソ フ ト ウ ェ ア開発の範囲を超え てい ま す。 そのため、 従来 FPGA は、 複数のプ ロ セ ッ サを含むデザ イ ン な ど、 ほかの方法では達成で き ないパフ ォーマン ス を必要 と す る アプ リ ケーシ ョ ンのみに使用が限 ら れてい ま し た。
X-Ref Target - Figure 1-1
図 1-1: RTL デザイ ン入力を使用 し た設計時間 vs. アプ リ ケーシ ョ ンのパフ ォ ーマ ン ス
Performance
Time
x86 GPU DSP DSP GPU x86 FPGA with RTLTypical Design Time Limit
in a Software Project
FPGA with RTL
Optimized version First working version
近年のザ イ リ ン ク ス に よ る 技術の進歩に よ り 、 プ ロ セ ッ サ と FPGA のプ ロ グ ラ ミ ン グ モデルに差はな く な り ま し た。 プ ロ セ ッ サのアーキ テ ク チ ャ に合わせて C な どの高級言語用に さ ま ざ ま な コ ンパ イ ラ が存在する よ う に、 ザ イ リ ン ク ス の Vivado® 高位合成 (HLS) コ ンパ イ ラ も 、 ザ イ リ ン ク ス の FPGA を ターゲ ッ ト と する C/C++ プ ロ グ ラ ムに同 じ 機能を提供 し ます。図1-2 に、 Vivado HLS コ ンパ イ ラ を、 使用可能なほかのプ ロ セ ッ サ ソ リ ューシ ョ ン と 比較し た 結果を示 し ます。
こ のガ イ ド の構成
同 じ C/C++ アプ リ ケーシ ョ ンで も 、 FPGA と ほかのプ ロ セ ッ サのパフ ォーマン ス には大き な差があ り ます。 こ のガ イ ド の次の章では、 その劇的なパフ ォーマ ン ス の差の理由を説明 し 、Vivado HLS コ ンパ イ ラ がどの よ う に機能する のか を示 し ます。第 2 章: FPGA と は
第2 章 「FPGA と は」 では、 FPGA で使用可能な計算エ レ メ ン ト を紹介し、 こ れ ら のエ レ メ ン ト をプ ロ セ ッ サ と 比較 し ます。 ま た、FPGA メ モ リ 階層 と ロ ジ ッ ク エ レ メ ン ト について と 、 それ ら のエ レ メ ン ト がどの よ う に相互に関連 し てい る のか を説明 し ます。第 3 章: ハー ド ウ ェ ア デザイ ンの基本概念
プ ロ セ ッ サのハー ド ウ ェ ア と FPGA のハー ド ウ ェ アの違いは、 各ターゲ ッ ト の コ ンパ イ ラ の機能に影響 し ます。 第3 章 「ハー ド ウ ェ ア デザ イ ンの基本概念」 では、 FPGA およびプ ロ セ ッ サのど ち ら のデザ イ ンに も 適用 さ れ る ハー X-Ref Target - Figure 1-2図 1-2: Vivado HLS コ ンパイ ラ を使用 し た設計時間 vs. アプ リ ケーシ ョ ンのパフ ォ ーマ ン ス
Performance
Time
Optimized versionFirst working version
Typical Design Time Limit
in a Software Project
x86 GPU DSP FPGA with HLS DSP GPU x86 FPGA with HLS X13467第 1 章: は じ めに
第 4 章: Vivado 高位合成 (HLS)
第4 章 「Vivado 高位合成 (HLS)」 では、 ザ イ リ ン ク ス の Vivado HLS コ ンパ イ ラ を紹介 し ます。 こ の章では、 2 章およ び 3 章か ら の概念に基づいて、 C/C++ プ ロ グ ラ ムが FPGA にどの よ う に コ ンパ イ ル さ れる のかを説明 し ます。 コ ン パ イ ラ が並列処理部分を ど の よ う に抽出 し 、 メ モ リ を構成 し 、FPGA 内の複数のプ ロ グ ラ ム を接続する方法を中心に 説明 し ます。第 5 章: 計算中心のアルゴ リ ズム
アルゴ リ ズ ム解析に関す る 資料は多数あ り ますが、 計算中心のアルゴ リ ズ ム と 制御中心のアルゴ リ ズ ム と の違いは、 ほ と ん ど イ ンプ リ メ ン テーシ ョ ン プ ラ ッ ト フ ォームに依存 し てい ます。第5 章 「計算中心のアルゴ リ ズ ム」 では、 FPGA の計算中心のアルゴ リ ズ ム を定義し 、 具体例およびベス ト プ ラ ク テ ィ ス を示 し ます。第 6 章: 制御中心のアルゴ リ ズム
制御中心のアルゴ リ ズ ムは、 プ ロ セ ッ サ と FPGA のど ち ら で も イ ンプ リ メ ン ト で き ます。 イ ンプ リ メ ン テーシ ョ ン の選択肢は、 アルゴ リ ズ ムに必要な応答時間に よ っ て異な り ます。第6 章 「制御中心のアルゴ リ ズ ム」 では、 制御中 心のアルゴ リ ズ ムに関す る イ ンプ リ メ ン テーシ ョ ンの選択肢の概要を説明 し 、 ユーザー データ グ ラ ム プ ロ ト コ ル (UDP) のパケ ッ ト プ ロ セ ッ シ ン グのネ ッ ト ワーキ ン グ例を示し ます。第 7 章: ソ フ ト ウ ェ ア検証および Vivado HLS
ほかのすべての コ ンパ イ ラ と 同様、Vivado HLS コ ンパ イ ラ の出力の質および正確 さ は入力 ソ フ ト ウ ェ アに左右 さ れ ます。第7 章 「 ソ フ ト ウ ェ ア検証お よび Vivado HLS」 では、 Vivado HLS コ ンパ イ ラ を使用する際に推奨 さ れる ソ フ ト ウ ェ ア テ ク ニ ッ ク を紹介 し ます。 一般的な コー ド 記述エ ラ ー例 と その Vivado HLS への影響、 および各問題の解決 策を示 し ます。 ま た、 プ ロ グ ラ ムの動作が C レベルでは完全には検証で き ない場合にど う すればよ いかを説明する セ ク シ ョ ン も あ り ます。第 8 章: 複数のプ ログ ラムの統合
ほ と ん ど のプ ロ セ ッ サがアプ リ ケーシ ョ ン実行のため複数のプ ロ グ ラ ム を実行す る の と 同様に、FPGA で も 特定のア プ リ ケーシ ョ ン を実行す る ために、 複数のプ ロ グ ラ ム ま たはモジ ュ ールを構築で き ます。第8 章 「複数のプ ロ グ ラ ムの統合」 では、 FPGA で複数のモジ ュールを接続する方法 と 、 プ ロ セ ッ サを使用 し た こ れ ら のモジ ュールの制御方 法を説明 し ます。FPGA フ ァ ブ リ ッ ク と Arm® Cortex™-A9 プ ロ セ ッ サを統合 し たザ イ リ ン ク ス Zynq®-7000 SoC に焦 点を当て ます。 コ ン シ ュ ーマー と プ ロ デ ュ ーサーの例を使用 し て、 完全なシ ス テ ム開発、 統合、 お よ び設計の ト レー ド オ フ について も 説明 し ます。第 9 章: 完成 し たアプ リ ケーシ ョ ンの検証
FPGA の場合、 完成 し たアプ リ ケーシ ョ ンか ら ハー ド ウ ェ ア シ ス テ ムが作成 さ れます。 こ のシ ス テ ムは、 FPGA フ ァ ブ リ ッ ク に 1 つま たは複数のモジ ュールを含め る の と 同時に、 プ ロ セ ッ サで コー ド を実行で き ます。第9 章 「完成 し た アプ リ ケーシ ョ ンの検証」 では、 ターゲ ッ ト アプ リ ケーシ ョ ン を正 し く 実行する ための推奨事項お よびベス ト プ ラ ク テ ィ ス を示 し ます。FPGA と は
概要
FPGA は、 製造後に異な る アルゴ リ ズ ムに合わせてプ ロ グ ラ ムで き る集積回路 (IC) です。 現在の FPGA デバ イ スは、 ソ フ ト ウ ェ ア アルゴ リ ズ ム を イ ンプ リ メ ン ト する ため、 最高 200 万個の コ ン フ ィ ギ ュ レーシ ョ ン可能な ロ ジ ッ ク セ ルで構成 さ れてい ます。 従来の FPGA デザ イ ン フ ローは、 プ ロ セ ッ サ よ り も 一般的な IC に近い も のですが、 FPGA には IC の開発 と 比べて コ ス ト 面で大き な利点があ り 、 IC と 同レベルのパフ ォーマン ス を達成で き ます。 IC と 比較 し た場合の FPGA の も う 1 つの利点は、 ダ イ ナ ミ ッ ク に リ コ ン フ ィ ギ ュ レーシ ョ ンで き る点です。 リ コ ン フ ィ ギ ュ レーシ ョ ン と は、 プ ロ セ ッ サにプ ロ グ ラ ム を読み込むの と 同 じ ですが、FPGA フ ァ ブ リ ッ ク で使用可能な リ ソ ース の 一部ま たはすべてに影響を与え る 可能性があ り ます。 Vivado® HLS コ ンパイ ラ を使用する際は、 FPGA フ ァ ブ リ ッ ク で使用可能な リ ソ ース と 、 ターゲ ッ ト アプ リ ケーシ ョ ン を実行する際にそれ ら がどの よ う にかかわ り 合 う のかの基礎を理解 し てい る こ と が重要です。 こ の章では、Vivado HLS を使用し てアルゴ リ ズムに最適な計算アーキテ ク チ ャ を作成する のに必要な FPGA の基本情報を示し ます。
FPGA アーキテ ク チ ャ
FPGA は、 基本的に次のエ レ メ ン ト か ら 構成 さ れてい ます。 • ル ッ ク ア ッ プ テーブル (LUT): 論理演算を実行 し ます。 • フ リ ッ プ フ ロ ッ プ (FF): LUT の結果を格納 し ます。 • ワ イ ヤ: エ レ メ ン ト を相互に接続 し ます。• 入力/出力 (I/O) パ ッ ド : 物理的に使用可能なポー ト で、 FPGA にデータ を入力およ び FPGA か ら デー タ を出力 し ます。
第 2 章: FPGA と は
こ れ ら のエ レ メ ン ト を組み合わせた も のが、図2-1 に示す FPGA アーキテ ク チ ャ です。 こ の構造はどのアルゴ リ ズ ム を イ ンプ リ メ ン ト す る に も 十分ですが、 結果の イ ンプ リ メ ン テーシ ョ ンは計算スループ ッ ト 、 必要な リ ソ ース、 達 成可能な ク ロ ッ ク 周波数の点で効率が制限 さ れます。
X-Ref Target - Figure 2-1
図 2-1: 基本 FPGA アーキテ ク チ ャ
CLB
CLB
CLB
CLB
CLB
CLB
CLB
CLB
CLB
CLB
CLB
CLB
CLB
CLB
CLB
CLB
X13468現代の FPGA アーキテ ク チ ャ には、 基本エ レ メ ン ト だけでな く 、 デバ イ ス の計算集積度および効率を高め る追加の 計算ブ ロ ッ ク やデー タ ス ト レージ ブ ロ ッ ク が含まれてい ます。 こ れ ら の追加エ レ メ ン ト については こ の後のセ ク シ ョ ンで説明 し ますが、 次の よ う な も のがあ り ます。 • 分散デー タ ス ト レージ用のエンベデ ッ ド メ モ リ • 異な る ク ロ ッ ク レー ト で FPGA フ ァ ブ リ ッ ク を駆動する ための位相ロ ッ ク ループ (PLL) • 高速シ リ アル ト ラ ン シーバー • オ フチ ッ プ メ モ リ コ ン ト ロー ラ ー • 積和ブ ロ ッ ク こ れ ら のエ レ メ ン ト を組み合わせ る こ と に よ り 、 プ ロ セ ッ サで実行す る ソ フ ト ウ ェ ア アルゴ リ ズ ムであればどんな も ので も FPGA に柔軟に イ ンプ リ メ ン ト で き ます。図2-2 に、 現代の FPGA アーキテ ク チ ャ を示 し ます。
X-Ref Target - Figure 2-2
図 2-2: 現代の FPGA アーキテ ク チ ャ
Column of
dual-port RAM
Column of DSP48
(wide
multiply-accumulate) blocks
High speed serial
transceivers
Phase-locked loop (PLL)
clock generators
External
memory
controllers
X13468第 2 章: FPGA と は
LUT
LUT は FPGA の基本構築ブ ロ ッ ク で、 N 個のブール型変数の ロ ジ ッ ク 関数を イ ンプ リ メ ン ト で き ます。 こ のエ レ メ ン ト は実質的には真理値表で、 複数の入力を組み合わせて さ ま ざ ま な関数を イ ンプ リ メ ン ト し 、 出力値を生成 し ま す。 真理値表のサ イ ズは N で決ま り ます (N は LUT の入力数)。 一般的な N 入力 LUT の場合、 こ の真理値表でア ク セ ス で き る メ モ リ ロ ケーシ ョ ンの数は次の よ う にな り ます。 式 2-1 つま り 、 こ の真理値表で イ ンプ リ メ ン ト で き る 関数の数は次の よ う にな り ます。 式 2-2 注記: ザ イ リ ン ク ス FPGA デバ イ ス の場合、 N は通常 6 です。 LUT のハー ド ウ ェ ア イ ンプ リ メ ン テーシ ョ ンは、 マルチプレ ク サーのセ ッ ト に接続 さ れた メ モ リ セルの集合体 と 考 え る こ と がで き ます。LUT の入力は、 最終的に結果値を選択する マルチプ レ ク サーのセ レ ク ター ビ ッ ト と し て機能 し ます。LUT は、 関数の計算エン ジ ン と データ ス ト レージ エ レ メ ン ト のど ち ら に も 使用で き る ので、 こ れを念頭に 置いてお く こ と が重要です。図2-3 に、 LUT の こ の機能表現を示 し ます。X-Ref Target - Figure 2-3
図 2-3: メ モ リ セルの集合体 と し ての LUT によ る機能表現 2N 2NN
a
b
c
d
x1
x0
y
X13469フ リ ッ プ フ ロ ッ プ
フ リ ッ プ フ ロ ッ プは FPGA フ ァ ブ リ ッ ク 内の基本ス ト レージ ユニ ッ ト です。 フ リ ッ プフ ロ ッ プは、 ロ ジ ッ ク のパ イ プ ラ イ ン処理お よ びデー タ 格納を補助す る ため、 常に LUT と ペアにな っ てい ます。 フ リ ッ プフ ロ ッ プの基本構造に は、 デー タ 入力、 ク ロ ッ ク 入力、 ク ロ ッ ク イ ネーブル、 リ セ ッ ト 、 データ出力が含まれます。 通常の動作では、 デー タ 入力ポー ト の値が ラ ッ チ さ れ、 ク ロ ッ ク のパルス ご と に出力に渡 さ れます。 ク ロ ッ ク イ ネーブル ピ ンは、 フ リ ッ プ フ ロ ッ プで特定の値を 2 ク ロ ッ ク パルス間以上保持する ために使用し ます。 新し いデータ入力は、 ク ロ ッ ク お よ び ク ロ ッ ク イ ネーブルが 1 の と き にのみ ラ ッ チ さ れ、 データ出力ポー ト に渡 さ れます。図2-4 に、 フ リ ッ プフ ロ ッ プの構造を示 し ます。X-Ref Target - Figure 2-4
図 2-4: フ リ ッ プ フ ロ ッ プの構造
FF
d_in
d_out
clk_en
clk
reset
set
X13470第 2 章: FPGA と は
DSP ブ ロ ッ ク
ザ イ リ ン ク ス FPGA で使用可能なエ レ メ ン ト の中で最 も 複雑な計算ブ ロ ッ ク は、図2-5 に示す DSP ブ ロ ッ ク です。 こ れは、FPGA フ ァ ブ リ ッ ク に組み込まれてい る論理演算ユニ ッ ト (ALU) で、 1 つのチ ェーンの中に 3 つの異な る ブ ロ ッ ク が含まれてい ます。DSP の計算チ ェーンでは、 加減算ユニ ッ ト が乗算器に接続 さ れ、 その乗算器が加算/減算/ 累算エン ジ ンに接続 さ れます。 こ のチ ェーン を利用 し 、1 つの DSP ユニ ッ ト で次の式の関数を イ ンプ リ メ ン ト で き ます。 式 2-3 ま たは 式 2-4ス ト レージ エ レ メ ン ト
FPGA デバ イ ス にはエンベデ ッ ド メ モ リ エ レ メ ン ト が含まれてお り 、 ラ ン ダ ム ア ク セ ス メ モ リ (RAM)、 読み出 し専 用 メ モ リ (ROM)、 ま たはシ フ ト レ ジ ス タ と し て使用で き ます。 メ モ リ エ レ メ ン ト には、 ブ ロ ッ ク RAM (BRAM)、 UltraRAM ブ ロ ッ ク (URAM)、 LUT、 シ フ ト レ ジ ス タ (SRL) があ り ます。BRAM は、 FPGA フ ァ ブ リ ッ ク に イ ン ス タ ン シエー ト さ れたデュ アル ポー ト RAM モジ ュールで、 比較的大き なデー タ セ ッ ト のオンチ ッ プ ス ト レージ を提供 し ます。 デバ イ ス で使用可能な BRAM には、 18k ま たは 36k ビ ッ ト を格納 で き る 2 種類があ り ます。 使用可能な メ モ リ の数はデバ イ ス ご と に異な り ます。 こ れ ら の メ モ リ はデュ アル ポー ト なので、 同 じ ク ロ ッ ク サ イ ク ルで並行 し て複数の ロ ケーシ ョ ンにア ク セ ス で き ます。
C/C++ コー ド での配列の記述方法に よ っ て、 BRAM で RAM ま たは ROM を イ ンプ リ メ ン ト で き ます。 RAM と ROM の唯一の違いは、 デー タ が ス ト レージ エレ メ ン ト にいつ書き込まれる かです。 RAM コ ン フ ィ ギ ュ レーシ ョ ンでは、 回路の実行中いつで も デー タ を読み出 し た り 書 き 込んだ り で き ます。 一方、ROM コ ン フ ィ ギ ュ レーシ ョ ンでは、 回 路の実行中にはデー タ の読み出 し し かで き ません。 ま た、ROM のデータ は FPGA コ ン フ ィ ギ ュ レーシ ョ ンの一部 と X-Ref Target - Figure 2-5
図 2-5: DSP ブ ロ ッ クの構造
p = a×(b d+ )+c
p+= a×(b d+ )
48-Bit Accumulator/Logic Unit
Pattern Detector 25 x 18 Multiplier Pre-adder B P + / – X = + – A D C X13497
UltraRAM ブ ロ ッ ク はデュ アル ポー ト 、 288 Kb の同期 RAM で、 深 さ 4096 ビ ッ ト 、 幅 72 ビ ッ ト の固定コ ン フ ィ ギ ュ レーシ ョ ンです。 こ のブ ロ ッ ク は UltraScale+ デバ イ ス で使用で き、 ス ト レージ量は BRAM の 8 倍です。
前に説明 し た よ う に、LUT は小型の メ モ リ で、 デバ イ ス の コ ン フ ィ ギ ュ レーシ ョ ン中に真理値表の内容が書き込ま れます。 ザ イ リ ン ク ス FPGA の LUT 構造は柔軟性が高いので、 LUT ブ ロ ッ ク は 64 ビ ッ ト の メ モ リ と し て使用で き、 一般的に分散 メ モ リ と 呼ばれてい ます。LUT は FPGA デバ イ ス で使用可能な メ モ リ の中では最高速で、 フ ァ ブ リ ッ ク の ど こ にで も イ ン ス タ ン シエー ト し て イ ンプ リ メ ン ト さ れた回路のパフ ォーマ ン ス を向上で き ます。 シ フ ト レ ジ ス タ は、 レ ジ ス タ をチ ェーン接続 し た も のです。 こ の構造は、 フ ィ ル ターな どにおいて、 計算パス で デー タ を再利用す る ための も のです。 た と えば、 基本的な フ ィ ル タ ーは乗算器のチ ェ ーンで構成 さ れ、 デー タ サン プルを係数のセ ッ ト で乗算 し ます。 入力デー タ の格納にシ フ ト レ ジ ス タ を使用する と 、 データ サンプルは ク ロ ッ ク サ イ ク ルご と にチ ェーンの次の乗算器に移動 し てい き ます。図2-6 に、 シ フ ト レ ジ ス タ の例を示 し ます。
FPGA の並列処理 vs プ ロ セ ッ サ アーキテ ク チ ャ
FPGA フ ァ ブ リ ッ ク の構造では、 アプ リ ケーシ ョ ン実行をプ ロ セ ッ サ アーキテ ク チ ャ よ り も 高い割合で並列処理で き ます。Vivado HLS コ ンパ イ ラ で生成 さ れた ソ フ ト ウ ェ ア プ ロ グ ラ ム用のカ ス タ ム プ ロ セ ッ シ ン グ アーキテ ク チ ャ では、 実行パ ラ ダ イ ムがプ ロ セ ッ サ と は異な る ので、 アプ リ ケーシ ョ ン を プ ロ セ ッ サか ら FPGA に移行する場合は、 こ の点を考慮す る 必要があ り ます。FPGA 実行パ ラ ダ イ ムの利点を確認する ため、 こ のセ ク シ ョ ンではプ ロ セ ッ サの プ ロ グ ラ ム実行について簡単に説明 し ます。プ ロ セ ッ サでのプ ロ グ ラ ム実行
プ ロ セ ッ サでは、 その種類にかかわ ら ず、 プ ロ グ ラ ムは命令のシーケ ン ス と し て実行 さ れ、 それ ら の命令が ソ フ ト ウ ェ ア アプ リ ケーシ ョ ン用の計算に変換 さ れます。 こ の命令の順序は、 GNU コ ンパ イ ラ コ レ ク シ ョ ン (GCC) な ど のプ ロ セ ッ サの コ ンパ イ ラ ツールで生成 さ れます。 コ ンパ イ ラ ツールに よ り 、 C/C++ で記述 さ れたアルゴ リ ズ ムが プ ロ セ ッ サにネ イ テ ィ ブのアセ ンブ リ 言語 コ ー ド に変換 さ れます。 プ ロ セ ッ サ コ ンパ イ ラ には、 次の式の C 関数を 入力 し ます。 式 2-5 こ の関数が次のアセ ンブ リ コー ド に変換 さ れます。X-Ref Target - Figure 2-6
図 2-6: ア ド レ ス指定可能なシ フ ト レ ジス タ の構造
D
CE
A[4:0]
00000 11111Q
00110 CE Q D CE Q D CE Q D CE Q D CE Q D CE Q D CE Q D CE Q D CE Q D CE Q D CE Q D CE Q D CE Q D CE Q D CE Q D CE Q D X13471X-Ref Target - Figure 2-7
第 2 章: FPGA と は プ ロ セ ッ サの内部レ ジ ス タ では、図2-7 のアセンブ リ コー ド は z 値を算出する ための加算を定義し ます。 こ の コー ド では、 計算の入力値が レ ジ ス タ R1 および R2 に格納 さ れ、 結果値がレ ジ ス タ R3 に格納 さ れます。 こ の コー ド は単 純で、 z 値の計算に必要なすべての命令が表現 さ れてい る わけではあ り ません。 こ の コー ド は、 データ がプ ロ セ ッ サ に到着 し てか ら の計算のみを実行 し ます。 そのため、 中央の メ モ リ か ら デー タ を プ ロ セ ッ サの レ ジ ス タ に読み込ん で、 その結果を メ モ リ に ラ イ ト バ ッ ク す る ためのアセ ンブ リ 言語命令を コ ンパ イ ラ で追加作成す る 必要があ り ます。 z 値を計算す る アセ ン ブ リ プ ロ グ ラ ムは次の よ う にな り ます。 図2-8 の コー ド は、 2 つの値を足す と い う 単純な演算で も 、 複数のアセンブ リ 命令にな る こ と を示し てい ます。 各命 令の計算レ イ テ ン シは命令 タ イ プに よ っ て異な り ます。 た と えば、 a と b の位置が変わ る と 、 LD 演算の完了ま でに かか る ク ロ ッ ク サ イ ク ル数が変わ り ます。 値がプ ロ セ ッ サのキ ャ ッ シ ュ にあ る場合は、 その読み込み操作は数十 ク ロ ッ ク サ イ ク ルで完了 し ます。 値が メ イ ンのダブル データ レー ト (DDR) メ モ リ にあ る場合は、 読み込み操作が完了 す る ま でに数百か ら 数千の ク ロ ッ ク サ イ ク ルが必要にな り ます。 値がハー ド ド ラ イ ブにあ る場合は、 さ ら に時間が かか り ます。 ソ フ ト ウ ェ ア エン ジニアが、 キ ャ ッ シ ュ ヒ ッ ト 率を上げてプ ロ セ ッ サが命令ご と に費やす時間を短縮 す る ため、 アルゴ リ ズ ム を再構築 し て メ モ リ 内のデー タ の空間局所性を高め る のに多大な時間を費やすのは、 こ の ためです。 重要: ソ フ ト ウ ェ ア エンジニアが使用可能なプ ロ セ ッ サのキ ャ ッ シ ュに合わせてアルゴ リ ズム を再構築するのにかか る 努力は、 同 じ 演算を FPGA に イ ンプ リ メ ン ト する場合は必要あ り ません。
FPGA でのプ ロ グ ラ ム実行
FPGA は本質的に並列処理に対応し た フ ァ ブ リ ッ ク であ り 、 プ ロ セ ッ サ上で実行で き る どんな演算関数で も FPGA に イ ンプ リ メ ン ト で き ます。 プ ロ セ ッ サ と の主な違いは、 ソ フ ト ウ ェ ア記述を RTL に変換する のに使用 さ れる Vivado HLS コ ンパ イ ラ がキ ャ ッ シ ュおよび統合 メ モ リ 空間の制限を受けない点です。 z の計算は、 Vivado HLS に よ り 、 出力オペ ラ ン ド のサ イ ズに合わせて複数の LUT に コ ンパ イ ル さ れ ます。 た と えば、 元の ソ フ ト ウ ェ ア プ ロ グ ラ ムでは、 変数 a、 b、 および z のデータ型が short で定義 さ れてい る と し ます。 16 ビ ッ ト のデー タ コ ン テナーを定義する こ のデータ型は、 Vivado HLS に よ り 16 個の LUT と し て イ ンプ リ メ ン ト さ れます。 注記: 原則 と し て、 LUT 1 個が計算の 1 ビ ッ ト に相当 し ます。 z の計算に使用 さ れ る LUT は こ の演算専用です。 あ ら ゆ る 計算で同 じ ALU を共有す る プ ロ セ ッ サ と は異な り 、 FPGA の イ ンプ リ メ ン テーシ ョ ンでは、 ソ フ ト ウ ェ ア アルゴ リ ズ ムの計算ご と に独立 し た LUT セ ッ ト が イ ン ス タ ン シエー ト さ れます。 計算ご と に独立 し た LUT リ ソ ース を割 り 当て る だけでな く 、 FPGA の メ モ リ アーキテ ク チ ャ と メ モ リ ア ク セ ス の コ ス ト も プ ロ セ ッ サ と は異な り ます。FPGA の イ ンプ リ メ ン テーシ ョ ンでは、 Vivado HLS コ ンパ イ ラ に よ り 、 メ モ リ が複数の ス ト レージ バン ク に配置 さ れ、 その メ モ リ を使用する演算ので き る だけ近 く にな る よ う に し ます。 こ う す る こ と で、 プ ロ セ ッ サの機能をは る かに上回 る 広い メ モ リ 帯域幅を即座に実現で き ます。 た と えば、 ザ イ リ ン ク ス の Kintex®-7 410T デバ イ ス では、 合計 1,590 18 キ ロ ビ ッ ト の BRAM が使用可能です。 こ のデバ イ ス の メ モ リ レ イ ア ウ ト では、 レ ジ ス タ レベルで 1 秒ご と に 0.5M ビ ッ ト 、 BRAM レベルで 1 秒ご と に 23T ビ ッ ト の メ モ リ 帯域幅を達成 X-Ref Target - Figure 2-8図 2-8: Z 値を計算する アセ ン ブ リ プ ログ ラム
LD a, $R1
LD b, $R2
ADD $R1,$R2,$R3
ST $R3, c
計算スループ ッ ト お よ び メ モ リ 帯域幅に関 し ては、Vivado HLS コ ンパ イ ラ は、 ス ケジ ュー リ ン グ、 パ イ プ ラ イ ン処 理、 デー タ フ ロ ーな ど のプ ロ セ ス を使用す る こ と に よ り FPGA フ ァ ブ リ ッ ク の機能を活用 し ます。 こ れ ら のプ ロ セ ス はユーザーには透過的ですが、 ソ フ ト ウ ェ ア アプ リ ケーシ ョ ンの最適な回路レベル イ ンプ リ メ ン テーシ ョ ン を達 成す る ために、 不可欠な ソ フ ト ウ ェ ア コ ンパ イ ル プ ロ セ ス です。
スケジ ュ ー リ ング
ス ケ ジ ュ ー リ ン グは、 異な る 演算間のデー タ お よ び制御の依存性を特定 し 、 ど の演算をいつ実行す る かを決定す る プ ロ セ ス です。 従来の FPGA デザ イ ンでは、 ス ケジ ュー リ ン グは手動のプ ロ セ ス で、 ハー ド ウ ェ ア イ ンプ リ メ ン テーシ ョ ン用の ソ フ ト ウ ェ ア アルゴ リ ズ ムの並列処理 と も 呼ばれてい ます。 Vivado HLS では、 隣接する演算間の依存関係だけでな く 、 時間の依存関係 も 解析 さ れます。 こ のため、 同 じ ク ロ ッ ク サ イ ク ルで実行で き る演算はグループに ま と め ら れ、 関数呼び出 し がオーバー ラ ッ プする よ う ハー ド ウ ェ アが設 定 さ れます。 関数呼び出 し を オーバー ラ ッ プ さ せ る こ と に よ り 、 現在の関数呼び出 し を完了 し てか ら でない と 同 じ 演算セ ッ ト への次の関数呼び出 し を実行で き ない と い う プ ロ セ ッ サの制限が取 り 除かれます。 こ のプ ロ セ ス は 「パ イ プ ラ イ ン処理」 と 呼ばれ、 次のセ ク シ ョ ンお よ び残 り の章で詳細に説明 し ます。パイ プ ラ イ ン処理
パ イ プ ラ イ ン処理は、 アルゴ リ ズ ムのハー ド ウ ェ ア イ ンプ リ メ ン テーシ ョ ンにおけ るデータ の依存性を回避 し、 並 列処理レベルを上げ る ためのデジ タ ル デザ イ ン手法です。 等価の関数が得 ら れる よ う に元の ソ フ ト ウ ェ ア イ ンプ リ メ ン テーシ ョ ンのデー タ 依存性は保持 さ れますが、 必要な回路は独立 し た段のチ ェ ーンに分割 さ れます。 チ ェ ーン のすべての段は、 同 じ ク ロ ッ ク サ イ ク ルで並列実行 さ れます。 唯一の違いは各段のデータ の ソ ース で、 計算の各段 は、 前の ク ロ ッ ク サ イ ク ルで前の段で計算 さ れた結果か ら データ値を受信 し ます。 た と えば、 次の関数を計算する ため、Vivado HLS コ ンパ イ ラ に よ り 、 乗算器ブ ロ ッ ク が 1 つ、 加算器ブ ロ ッ ク が 2 つ イ ン ス タ ン シエー ト さ れます。 式 2-6 図2-9 に、 こ の計算の構造 と パ イ プ ラ イ ン処理の効果を示 し ます。 関数例の 2 つの イ ンプ リ メ ン テーシ ョ ン を示 し ま す。 上の イ ンプ リ メ ン テーシ ョ ンは、 パ イ プ ラ イ ン処理を使用せずに y を計算する のに必要なデータ パス です。 こ の イ ンプ リ メ ン テーシ ョ ンは、C/C++ 関数 と 同 じ よ う に動作 し、 すべての入力値が計算開始時にわかっ てい る必要 があ り 、1 回に計算 さ れる結果値 y は 1 つのみです。 下の イ ンプ リ メ ン テーシ ョ ンは、 同 じ回路をパ イ プ ラ イ ン処理 し た も のです。 y = (a x× ) b c+ +第 2 章: FPGA と は 図2-9 のデータ パス の正方形は、 FPGA フ ァ ブ リ ッ ク でフ リ ッ プフ ロ ッ プ ブ ロ ッ ク で イ ンプ リ メ ン ト さ れ る レ ジ ス タ を表わ し ます。 各正方形は 1 ク ロ ッ ク サ イ ク ル と し て カ ウ ン ト さ れます。 パ イ プ ラ イ ン処理バージ ョ ンでは、 各結 果値 y の計算に 3 ク ロ ッ ク サ イ ク ルかか り ます。 レ ジ ス タ を追加する こ と に よ り 、 各ブ ロ ッ ク は時間的に複数の計 算セ ク シ ョ ンに分け ら れます。 乗算器のあ る セ ク シ ョ ン と 2 つの加算器のあ る セ ク シ ョ ン を並列 し て実行で き る の で、 関数の全体的な計算レ イ テ ン シが削減 さ れます。 デー タ パ ス の 2 つのセ ク シ ョ ン を並列実行する こ と に よ り 、 ブ ロ ッ ク は実質的に値 y と y' を並行 し て計算 し ます (y' は式2-6 の次の実行の結果値)。最初の y の計算 ( 「パ イ プ ラ イ ン充填時間」 と も 呼ばれ る) に 3 ク ロ ッ ク サ イ ク ルかか り ます。 最初の計算の後は、 計算パ イ プ ラ イ ンで現在 と その 次の y の計算がオーバー ラ ッ プ し てい る ので、 各 ク ロ ッ ク サ イ ク ルで y の新し い値が出力 さ れます。 図2-10 に示すパ イ プ ラ イ ン アーキテ ク チ ャ では、 生のデータ (濃いグ レー )、 途中ま で計算 さ れたデー タ (白)、 最終 デー タ (薄いグ レー ) が同時に存在し、 各段の結果がその段の レ ジ ス タ セ ッ ト に格納 さ れます。 こ の よ う な計算の レ イ テ ン シは複数サ イ ク ルにな り ますが、 新 し い結果値を毎 ク ロ ッ ク サ イ ク ル計算で き ます。
X-Ref Target - Figure 2-9
図 2-9: 計算関数の FPGA イ ン プ リ メ ン テーシ ョ ン X13472
y
a
x
b
c
*
+
+
y
a
x
b
c
*
+
+
Pipeline transformationデー タ フ ロー
デー タ フ ロ ー も デジ タ ル デザ イ ンのテ ク ニ ッ ク の 1 つで、 概念的にはパ イ プ ラ イ ン処理に似てい ます。 データ フ ロ ーは、 粗粒度での並列処理を実行 し ます。 ソ フ ト ウ ェ ア実行では、 デー タ フ ロ ーは 1 プ ロ グ ラ ム内の関数の並列 実行に利用 さ れます。 Vivado HLS では、 プ ロ グ ラ ムの異な る関数の相互関係が入力 と 出力に基づいて評価 さ れ、 デー タ フ ロー レベルの並 列処理が抽出 さ れます。 並列処理で最 も 単純なのは、 複数の関数が異な る デー タ セ ッ ト を処理 し、 データ をや り 取 り し ない場合です。 こ の場合、Vivado HLS に よ り 、 各関数に FPGA ロ ジ ッ ク リ ソ ース が割 り 当て ら れ、 ブ ロ ッ ク は それぞれ独立 し て実行 さ れます。1 つの関数の結果が別の関数に供給 さ れる と 複雑にな り ますが、 それは ソ フ ト ウ ェ ア プ ロ グ ラ ムでは普通です。 こ れは 「コ ン シ ューマー と プ ロデューサーの依存関係」 と 呼ばれます。 Vivado HLS では、 こ の コ ン シ ューマー と プ ロデューサーの依存関係の使用モデルが 2 つサポー ト さ れています。 最 初のユース モデルでは、 コ ン シ ューマーが演算を開始する前に、 プ ロデューサーがデータ セ ッ ト を作成 し ます。 並 列処理は、BRAM メ モ リ のペア を 2 つの メ モ リ バン ク に配置する こ と に よ り 達成 し ます。 各関数は、 1 回の関数呼 び出 し では、 いずれかの メ モ リ バン ク にのみア ク セ ス で き ます。 新 し い関数呼び出 し が開始する と 、 Vivado HLS で 生成 さ れた回路に よ り 、 プ ロ デ ュ ーサー と コ ン シ ュ ーマーの メ モ リ 接続を切 り 替え ます。 こ の方法であれば、 プ ロ グ ラ ムは機能的には正 し く 動作 し ますが、 関数呼び出 し 間で達成で き る 並行処理の レベルには限界があ り ます。 も う 1 つの使用モデルでは、 コ ン シ ューマーはプ ロデューサーか ら の部分的な結果を使用 し て計算を開始で き る の で、 達成可能な並行処理の レベルが関数呼び出 し 内の実行に も 拡張 さ れます。 両方の関数用に Vivado HLS で生成 さ れたモジ ュ ールは、FIFO メ モ リ 回路を使用 し て接続 さ れます。 こ の メ モ リ 回路は ソ フ ト ウ ェ ア プ ロ グ ラ ミ ン グの キ ュ ー と し て動作 し 、 モジ ュ ール間をデー タ レベルで同期化 さ せます。1 回の関数呼び出 し の間に、 両方のハー ド ウ ェ ア モジ ュールがそれぞれプ ロ グ ラ ム を実行 し ます。 ただ し、 コ ン シ ューマー モジ ュールは、 プ ロデューサーか ら のデー タ を あ る 程度待っ てか ら 計算を開始 し ます。Vivado HLS の用語では、 こ の コ ン シ ューマー モジ ュールの待 機時間は 「間隔」 ま たは 「開始間隔 (II)」 と 呼ばれます。X-Ref Target - Figure 2-10
図 2-10: パイ プ ラ イ ン アーキテ ク チ ャ
a(i)
x(i)
b(i)
c(i)
a(i-1)*x(i-1)
b(i-1)
c(i-1)
a(i-2)*x(i-2)+b(i-2)
+c(i-2)
y
a
x
b
c
X13498*
+
+
第 3 章
ハー ド ウ ェ ア デザイ ンの基本概念
概要
プ ロ セ ッ サ と FPGA と では、 プ ロ セ ッ シ ン グ アーキテ ク チ ャ が固定 さ れてい る かど う かが主な違いの 1 つです。 こ の違いは、 各 タ ーゲ ッ ト に対す る コ ンパ イ ラ の動作に直接影響を与え ます。 プ ロ セ ッ サでは、 計算アーキ テ ク チ ャ は固定 さ れてお り 、 コ ンパ イ ラ の仕事は ソ フ ト ウ ェ ア アプ リ ケーシ ョ ン を使用可能なプ ロ セ ッ シ ン グ構造にどの よ う に収め る か を決定す る こ と です。 パフ ォーマ ン ス は、 アプ リ ケーシ ョ ン を プ ロ セ ッ サの機能に どれだけ う ま く マ ッ プで き る か と 、 正 し く 実行す る のに必要なプ ロ セ ッ サ命令の数に よ り ます。 FPGA では、 多数の構築ブ ロ ッ ク で構成 さ れた白紙のキ ャ ンバス に似てい ます。 Vivado® HLS コ ンパ イ ラ の仕事は、 こ れ ら の構築ブ ロ ッ ク か ら ソ フ ト ウ ェ ア プ ロ グ ラ ムが う ま く フ ィ ッ ト する プ ロ セ ッ シ ン グ アーキテ ク チ ャ を作成す る こ と です。Vivado HLS コ ンパ イ ラ を制御 し て、 最良のプ ロ セ ッ シ ン グ アーキテ ク チ ャ を作成する には、 ハー ド ウ ェ アの設計概念の基礎知識が必要にな り ます。 こ の章では、FPGA と プ ロ セ ッ サ ベース のデザ イ ン両方に当てはま る一般的な設計概念 と 、 こ れ ら の概念が互いに ど う 関連 し てい る のか を説明 し ます。 こ の章では、FPGA デザ イ ンの詳細は説明 し ません。 プ ロ セ ッ サの コ ンパ イ ラ と 同様に、Vivado HLS コ ンパ イ ラ も アルゴ リ ズ ムの FPGA ロ ジ ッ ク フ ァ ブ リ ッ ク への イ ンプ リ メ ン テーシ ョ ンに関 す る 下位情報を処理 し ます。ク ロ ッ ク 周波数
アルゴ リ ズ ム を実行す る プ ラ ッ ト フ ォーム を決め る 際、 まず検討すべ き も のの 1 つはプ ロ セ ッ サの ク ロ ッ ク 周波数 です。 一般的に、 ク ロ ッ ク 周波数が高ければ、 アルゴ リ ズ ムの実行 も 高速にな り ます。 ど のプ ロ セ ッ サを選ぶべ き か を検討 し てい る のであれば、 ク ロ ッ ク 周波数を優先的に考え る のは妥当ですが、 プ ロ セ ッ サか FPGA かの選択で は、 ク ロ ッ ク 周波数だけで判断す る のは間違いの も と です。 こ れは、 プ ロ セ ッ サ と FPGA の公称 ク ロ ッ ク 周波数の違いに関連 し ています。 た と えば、 プ ロ セ ッ サ と FPGA の ク ロ ッ ク 周波数を比較す る 場合、表3-1 の よ う な比較を見せ ら れ る こ と があ り ます。 表3-1 の値を単純に比べる と 、 プ ロ セ ッ サのパフ ォーマン スは FPGA の 4 倍であ る よ う に見え ます。 こ の単純な比較 では、 プ ロ セ ッ サ と FPGA の違いは ク ロ ッ ク 周波数のみであ る と い う 誤解を招き かねません。 実際には、 ほかに も 違いはあ り ます。 まず、 プ ロ セ ッ サ と FPGA と では、 ソ フ ト ウ ェ ア プ ロ グ ラ ムの実行方法が異な り ます。 プ ロ セ ッ サは、 一般的な ハー ド ウ ェ ア プ ラ ッ ト フ ォーム上で どんなプ ロ グ ラ ム も 実行で き ます。 こ の一般的なプ ラ ッ ト フ ォームがプ ロ セ ッ サの中核であ り 、 固定のアーキ テ ク チ ャ が定義 さ れていて、 そ こ にすべての ソ フ ト ウ ェ ア を フ ィ ッ ト さ せ る 必要が あ り ます。 プ ロ セ ッ サの コ ンパ イ ラ は、 プ ロ セ ッ サのアーキ テ ク チ ャ を理解 し てお り 、 ユーザー ソ フ ト ウ ェ ア を命 令セ ッ ト に コ ンパ イ ル し ます。 結果の命令セ ッ ト は、図3-1 に示すよ う に、 常に同 じ順序で実行 さ れます。 標準プ ロ セ ッ サであ っ て も 、 特殊プ ロ セ ッ サであ っ て も 、 命令の実行は常に同 じ です。 ユーザー アプ リ ケーシ ョ ン の各命令は、 すべて次の段階を経過す る 必要があ り ます。 1. 命令フ ェ ッ チ (IF) 2. 命令デ コ ー ド (ID) 3. 実行 (EXE) 4. メ モ リ 操作 (MEM) 5. ラ イ ト バ ッ ク (WB) 表 3-1: 最大ク ロ ッ ク周波数の比較例 プ ロ セ ッ サ FPGA 2 GHz 500 MHzX-Ref Target - Figure 3-1
図 3-1: プ ロセ ッ サの命令実行段階
IF
ID
EXE
MEM
WB
0
1
2
3
4
Time第 3 章: ハー ド ウ ェ ア デザイ ンの基本概念 表3-2 に、 各段の目的を示 し ます。 現代のほ と ん ど のプ ロ セ ッ サには命令実行パ ス の コ ピーが複数含まれてい る ので、 それ ら を あ る 程度オーバー ラ ッ プ さ せて命令を実行す る こ と が可能です。 プ ロ セ ッ サの命令は通常相互依存 し てい る ため、 命令実行ハー ド ウ ェ ア の コ ピーを オーバー ラ ッ プ さ せ る に し て も 、 完璧 と はい き ません。 う ま く いっ た と し て も 、 プ ロ セ ッ サを使用す る こ と で追加 さ れ る オーバーヘ ッ ド 段のみを オーバー ラ ッ プ さ せ る こ と がで き る 程度です。 アプ リ ケーシ ョ ンの計算 が実行 さ れ る EXE 段では、 計算が順次実行 さ れます。 こ れは、 EXE 段の リ ソ ース には限 り があ り 、 命令ど う し が依 存 し てい る か ら です。 図3-2 に、 複数の命令を あ る程度並列実行する プ ロ セ ッ サを示 し ます。 こ れは、 すべての命令をで き る限 り 速 く 実 行す る プ ロ セ ッ サでのベス ト ケース です。 こ のベス ト ケース で も 、 プ ロ セ ッ サは ク ロ ッ ク サ イ ク ルご と に EXE 段 を 1 段 し か処理で き ません。 つま り 、 ユーザー アプ リ ケーシ ョ ンは、 ク ロ ッ ク サ イ ク ルご と に 1 演算ずつ進みます。 コ ンパ イ ラ で 5 つの EXE 段をすべて並列実行で き る と 判断 さ れた と し て も 、 こ のプ ロ セ ス構造では達成で き ません。 表 3-2: 命令の処理段階 段階 説明 IF プ ロ グ ラ ム メ モ リ か ら 命令を取 り 出 し ます。 ID 命令をデ コ ー ド し て演算お よ び演算子を決定 し ます。 EXE 使用可能なハー ド ウ ェ ア上で命令を実行 し ます。 標準プ ロ セ ッ サの場合は、 論理演算ユニ ッ ト (ALU) ま たは浮動小数点ユニ ッ ト (FPU) です。 特殊プ ロ セ ッ サの場合は、 命令処理の こ の段階で標 準プ ロ セ ッ サの機能に固定機能ア ク セ ラ レー タ が追加 さ れます。 MEM メ モ リ 操作を使用 し て、 次の命令のデー タ を フ ェ ッ チ し ます。 WB 命令結果を ロ ーカル レ ジ ス タ ま たはグ ローバル メ モ リ に書き込みます。
X-Ref Target - Figure 3-2
図 3-2: 複数の命令実行ユニ ッ ト のある プ ロセ ッ サ
0
1
2
3
4
TimeIF
ID
EXE
MEM
WB
IF
ID
EXE
MEM
WB
IF
ID
EXE
MEM
WB
IF
ID
EXE
MEM
WB
IF
ID
EXE
MEM
WB
5
6
7
8
X13474FPGA では、 すべての ソ フ ト ウ ェ アが一般的な計算プ ラ ッ ト フ ォームで実行 さ れる わけではあ り ません。 1 回に 1 つ のプ ロ グ ラ ムがそのプ ロ グ ラ ムのカ ス タ ム回路で実行 さ れます。 こ のため、 ユーザー アプ リ ケーシ ョ ン を変更する
と FPGA の回路 も 変更 さ れます。 FPGA での処理では、 図3-1 と は異な り 、 EXE 段は 図3-3 の よ う にな り ます。 MEM 段があ る かど う かはアプ リ ケーシ ョ ンに よ り ます。 こ の よ う に FPGA には柔軟性があ る ため、 Vivado HLS コ ンパ イ ラ はプ ラ ッ ト フ ォームのオーバーヘ ッ ド 段を考慮す る 必要はな く 、 命令を最大限に並列実行す る 方法が検索 さ れます。図3-2 と 同 じ処理を考え る と 、 FPGA で同じ ソ フ ト ウ ェ ア を実行す る 場合のプ ロ フ ァ イ ルは図3-4 の よ う にな り ます。 図3-2 と図3-4 を比較する と 、 FPGA のパフ ォーマン スはプ ロ セ ッ サの 9 倍です。 実際の数値はアプ リ ケーシ ョ ンに よ っ て異な り ますが、 計算負荷の高いアプ リ ケーシ ョ ンでは一般的に、FPGA のパフ ォーマン スはプ ロ セ ッ サの少な く と も 10 倍にな り ます。 さ ら に、 ク ロ ッ ク 周波数に固執 し てい る と 見過ご し がちにな る のが、 ソ フ ト ウ ェ ア プ ロ グ ラ ムの消費電力です。 消 費電力は次の式で概算で き ます。 式 3-1 式3-1 か ら わか る よ う に、 消費電力 と ク ロ ッ ク 周波数の関係は、 実験データ で も 裏付け ら れてい ますが、 計算量が 同 じ であれば、 プ ロ セ ッ サのほ う が FPGA よ り も 消費電力が大き く な り ます。 FPGA では、 ソ フ ト ウ ェ ア プ ロ グ ラ ム ご と にカ ス タ ム回路が作成 さ れ る ので、 プ ロ セ ッ サの よ う な命令解釈のオーバーヘ ッ ド な し で、 プ ロ セ ッ サ よ り も 低い ク ロ ッ ク 周波数で演算を最大限に並列実行で き ます。 推奨: プ ロ セ ッ サを使用する か FPGA を使用する かを検討し ている場合は、 最大ク ロ ッ ク周波数を比較する のではな く 、 スループ ッ ト お よ びレ イ テ ン シに基づいて、 アプ リ ケーシ ョ ン要件お よ び計算量を解析す る こ と を推奨 し ます。 X-Ref Target - Figure 3-3
図 3-3: FPGA の命令実行段階
X-Ref Target - Figure 3-4
図 3-4: 複数の命令実行ユニ ッ ト のある FPGA
EXE
0
1
2
3
4
Time X13475EXE
0
1
2
3
4
TimeEXE
EXE
EXE
EXE
X13476 P = 12--cFV2第 3 章: ハー ド ウ ェ ア デザイ ンの基本概念
レ イ テ ン シおよびパイ プ ラ イ ン処理
レ イ テ ン シ と は、 命令ま たは命令セ ッ ト を完了 さ せて アプ リ ケーシ ョ ンの結果値の生成す る ま でにかか る ク ロ ッ ク サ イ ク ル数を指 し ます。図3-1 の基本プ ロ セ ッ サ アーキテ ク チ ャ の場合、 1 つの命令の レ イ テ ン シは 5 ク ロ ッ ク サ イ ク ルです。 アプ リ ケーシ ョ ンに 5 つの命令があ る場合、 こ の単純なモデルの全体的な レ イ テ ン シは 25 ク ロ ッ ク サ イ ク ルにな り ます。 つま り 、 アプ リ ケーシ ョ ンの結果は 25 ク ロ ッ ク サ イ ク ル経過する ま で得 ら れません。 FPGA と プ ロ セ ッ サの両方において、 アプ リ ケーシ ョ ンの レ イ テ ン シはパフ ォーマン ス の重要な指標です。 ど ち ら の 場合 も 、 レ イ テ ン シに問題があれば、 パ イ プ ラ イ ン処理を利用 し て解決 さ れます。 プ ロ セ ッ サの場合、 パ イ プ ラ イ ン処理を使用す る と 、 現在の命令が完了す る 前に、 次の命令を開始す る こ と が可能です。 つま り 、 命令セ ッ ト の処 理に必要なオーバーヘ ッ ド 段を オーバー ラ ッ プ さ せ る こ と がで き ます。 プ ロ セ ッ サでパ イ プ ラ イ ン処理を使用 し た 場合のベス ト ケースは、図3-2 に示 さ れてい ます。 プ ロ セ ッ サでは、 命令実行をオーバー ラ ッ プ さ せる こ と に よ り 、 5 つの命令を含むアプ リ ケーシ ョ ンで 9 ク ロ ッ ク サ イ ク ルの レ イ テ ン シ を達成で き ます。 FPGA の場合、 命令処理に関する オーバーヘ ッ ド サ イ ク ルは存在せず、 レ イ テ ン シは元のプ ロ セ ッ サ命令の EXE 段 の実行に何 ク ロ ッ ク サ イ ク ルかか る かで計測 さ れます。図3-3 では、 レ イ テ ン シは 1 ク ロ ッ ク サ イ ク ルです。 並行 処理 も レ イ テ ン シにおいて重要な役割を果た し ます。5 つの命令を含むアプ リ ケーシ ョ ンの場合、図3-4 に示すよ う に、FPGA の レ イ テ ン シは 1 ク ロ ッ ク サ イ ク ルです。 FPGA での レ イ テ ン シは 1 ク ロ ッ ク サ イ ク ルなので、 なぜパ イ プ ラ イ ン処理に利点があ る のか、 わか り に く いか も し れません。FPGA でのパ イ プ ラ イ ン処理 も 、 プ ロ セ ッ サの場合 と 同 じ で、 アプ リ ケーシ ョ ンのパフ ォーマ ン ス を向上す る こ と が目的です。 前に も 説明 し た よ う に、FPGA は構築ブ ロ ッ ク で構成 さ れた白紙のキ ャ ンバス の よ う な も ので、 アプ リ ケーシ ョ ン を イ ンプ リ メ ン ト す る には こ れ ら のブ ロ ッ ク を接続す る 必要があ り ます。Vivado HLS コ ンパ イ ラ は、 こ れ ら のブ ロ ッ ク を直接、 ま たはレ ジ ス タ を介 し て接続 し ます。図3-5 に、図3-3 の EXE 段を 5 つの構築ブ ロ ッ ク を使用 し て イ ン プ リ メ ン ト し た場合を示 し ます。 FPGA での操作時間は、 ソ ース レ ジ ス タ か ら シ ン ク レ ジ ス タ ま で信号が移動する のにかか る時間です。図3-5 の各 構築ブ ロ ッ ク の実行に 2 ns 必要だ と する と 、 現在のデザ イ ンでは こ の機能を実行する のに 10 ns かか り ます。 レ イ テ ン シは 1 ク ロ ッ ク サ イ ク ルの ま ま ですが、 ク ロ ッ ク 周波数は 100 MHz に制限 さ れます。 こ の 100 MHz と い う 制限 は、FPGA での ク ロ ッ ク 周波数の定義に由来 し ます。 FPGA 回路では、 ク ロ ッ ク 周波数は、 ソ ース レ ジ ス タ か ら シ ン ク レ ジ ス タ ま で信号が移動する最長時間 と し て定義 さ れます。 FPGA でのパ イ プ ラ イ ン処理は、 大き な計算ブ ロ ッ ク を小 さ いセグ メ ン ト に分割する ため、 さ ら に レ ジ ス タ が挿入 さ れます。 計算を分割 し てい く と 、 ク ロ ッ ク サ イ ク ル数で表 さ れる レ イ テ ン シは増加 し ますが、 カ ス タ ム回路を よ り 高い ク ロ ッ ク 周波数で実行で き る よ う にな る ので、 パフ ォーマ ン ス が向上 し ます。X-Ref Target - Figure 3-5
図 3-5: パイ プ ラ イ ン処理が使用 さ れていない FPGA イ ン プ リ メ ン テーシ ョ ン
A
B
C
D
E
Register
SourceRegister
SinkTime is Measured from Source to Sink Register
図3-6 に、図3-5 のプ ロ セ ッ シ ン グ アーキテ ク チ ャ を完全にパ イ プ ラ イ ン処理 し た後の イ ンプ リ メ ン テーシ ョ ン を示 し ます。 「完全にパ イ プ ラ イ ン処理 し た」 と い う のは、FPGA 回路の各構築ブ ロ ッ ク 間にレ ジ ス タ が 1 つずつ挿入 さ れた と い う 意味です。 レ ジ ス タ の追加に よ り 、 回路の タ イ ミ ン グ要件は 10 ns か ら 2 ns に変更 さ れ る ので、 最大 ク ロ ッ ク 周波数は 500 MHz にな り ます。 さ ら に、 計算を レ ジ ス タ で区切 ら れた領域に分割する こ と で、 各ブ ロ ッ ク が 常に稼働状態 と な り 、 アプ リ ケーシ ョ ン スループ ッ ト が向上 し ます。 ただ し 、 パ イ プ ラ イ ン処理には問題が 1 つあ り ます。 回路の レ イ テ ン シです。図3-5 の元の回路には、 低い ク ロ ッ ク 周波数で 1 ク ロ ッ ク サ イ ク ルの レ イ テ ン シがあ り ます。図3-6 の回路には、 高い ク ロ ッ ク 周波数で 5 ク ロ ッ ク サ イ ク ルの レ イ テ ン シがあ り ます。 重要: パイ プ ラ イ ン処理に よ って発生する レ イ テンシは、 FPGA の設計中に検討すべき ト レー ド オフの 1 つです。
スループ ッ ト
スループ ッ ト も 、 イ ンプ リ メ ン テーシ ョ ンの全体的なパフ ォーマ ン ス指標の 1 つです。 スループ ッ ト と は、 プ ロ セ ッ シ ン グ ロ ジ ッ ク が次のデータ サンプルを受信で き る よ う にな る ま でにかか る ク ロ ッ ク サ イ ク ル数です。 ただ し 、 回路の ク ロ ッ ク 周波数に よ り スループ ッ ト 値の意味が変わ る こ と を思い出 し て く だ さ い。 た と えば、図3-5 および図3-6 は、 入力データ サンプル間に 1 ク ロ ッ ク サ イ ク ルを必要 と する イ ンプ リ メ ン テー シ ョ ンです。 主な違いは、図3-5 の イ ンプ リ メ ン テーシ ョ ンでは入力サンプル間に 10 ns 必要で、図3-6 の イ ンプ リ メ ン テーシ ョ ンでは 2 ns だけであ る と い う 点です。 こ れを考慮する と 、 2 番目の イ ンプ リ メ ン テーシ ョ ンの方が、 入 力デー タ レー ト が高いので、 高いパフ ォーマン ス が得 ら れる のは明 ら かです。 注記: こ のセ ク シ ョ ンの スループ ッ ト の定義は、 プ ロ セ ッ サ上で実行 し てい る アプ リ ケーシ ョ ン を解析する と き に も 適用可能です。X-Ref Target - Figure 3-6
図 3-6: パイ プ ラ イ ン処理を使用 し た FPGA イ ン プ リ メ ン テーシ ョ ン
A
B
Register Sink/ SourceC
Register Sink/ SourceD
Register Sink/ SourceE
Register Sink/ Source Register SinkTime is Measured from Source to Sink Register
Register
Source
第 3 章: ハー ド ウ ェ ア デザイ ンの基本概念