...

Vivado HLS で設計する浮動小数点行列乗算の Zynq

by user

on
Category: Documents
111

views

Report

Comments

Transcript

Vivado HLS で設計する浮動小数点行列乗算の Zynq
ア プ リ ケーシ ョ ン ノ ー ト : Zynq-7000 AP SoC
XAPP1170 (v2.0) 2016 年 1 月 21 日
Vivado HLS で設計する浮動小数点
行列乗算の Zynq ア ク セ ラ レー タ 著者 : Daniele Bagni、 A. Di Fresco、 J. Noguera、 F. M. Vallina
概要
こ のアプ リ ケーシ ョ ン ノ ー ト では、 Vivado® 高位合成 (HLS) を使用 し て AXI4-Stream イ ン タ ーフ ェ イ ス経由で
Zynq®-7000 All Programmable SoC (AP SoC) デバ イ ス の ARM CPU のア ク セ ラ レー タ コ ヒ ーレ ン シ ポー ト (ACP) へ接続 さ
れ る 浮動小数点行列乗算ア ク セ ラ レー タ の開発方法について説明 し ます。
Vivado HLS を使用す る こ と で、 C/C++ コ ー ド でモデル化 さ れた浮動小数点行列乗算ア ク セ ラ レー タ を レ ジ ス タ 転送レベ
ル (RTL) デザ イ ンに素早 く 実装お よ び最適化で き ます。 ソ リ ュ ーシ ョ ンは IP コ ア と し てエ ク ス ポー ト さ れ、 自動生成 さ
れた AXI4-Stream イ ン タ ーフ ェ イ ス を介 し て AP SoC Processing Subsystem (PS) の ACP に接続 さ れます。 接続には、
AP SoC Programmable Logic (PL) サブシ ス テ ムの DMA (Direct Memory Access) コ ア を使用 し ます。 行列乗算ペ リ フ ェ ラ ル、
DMA エン ジ ン、 AXI タ イ マーな ど の AP SoC PL ハー ド ウ ェ アの設計には、 Vivado IP イ ン テ グ レー タ ー (IPI) を使用 し ま
す。 ペ リ フ ェ ラ ルを管理す る AP SoC PS ソ フ ト ウ ェ アの設計には ソ フ ト ウ ェ ア開発キ ッ ト (SDK) を使用 し ます。
こ のアプ リ ケーシ ョ ン ノ ー ト の リ フ ァ レ ン ス デザ イ ン フ ァ イ ルは、 ザ イ リ ン ク ス の ウ ェ ブサ イ ト か ら ダ ウ ン ロ ー ド で き
ます。 デザ イ ン フ ァ イ ルの詳細は、 「 リ フ ァ レ ン ス デザ イ ン」 を参照 し て く だ さ い。
は じ めに
行列乗算は、 応用数学のほ と ん どすべての演算で使用 さ れてい ます。 た と えば、 最新レーダー シ ス テ ムでは、 受信ア ン
テナの位相を コ ン ピ ュ ー タ ー計算でデジ タ ル制御す る ビーム フ ォー ミ ン グ技術で行列乗算が使用 さ れてい ます。 ザ イ リ ン
ク ス の Vivado HLS ツールを使用す る こ と で、 浮動小数点アルゴ リ ズ ム を C/C++ コ ー ド で素早 く 記述で き 、 Zynq-7000
AP SoC で最適化 し て実装で き ます ([参照 1])。 こ の方法は、 従来のマ イ ク ロ プ ロ セ ッ サを用いて浮動小数点アルゴ リ ズ ム
を実装す る 設計者に、 低 コ ス ト 、 高性能、 低消費電力 と いっ た利点を も た ら し ます ([参照 2]、 [参照 3])。
こ のアプ リ ケーシ ョ ン ノ ー ト では、 32x32 行列の浮動小数点乗算の適用をは じ め と する 、 ザ イ リ ン ク ス PL でのデザ イ ン
フ ロ ーについて説明 し ます。
1.
Vivado HLS を使用 し て、 C/C++ で記述 さ れた浮動小数点デザ イ ン を高性能ハー ド ウ ェ ア ア ク セ ラ レー タ に コ ンパ イ
ル し て最適化す る 。
2.
Vivado HLS の C++ テ ンプ レー ト を使用 し て、 ハー ド ウ ェ ア ア ク セ ラ レー タ の AXI4-Stream イ ン タ ーフ ェ イ ス を指定
し て生成す る 。
3.
Vivado IP イ ン テ グ レー タ ー [参照 4] を使用 し て、ハー ド ウ ェ ア ア ク セ ラ レー タ を AP SoC PL の AXI DMA ペ リ フ ェ ラ
ルお よ び AP SoC PS の ACP に接続す る 。
4.
ARM CPU で動作す る ソ フ ト ウ ェ ア を記述 し てハー ド ウ ェ ア ア ク セ ラ レー タ の関数呼び出 し を含め、 シ ス テ ム レベ
ルの性能を測定す る 。
図 1 に、 Zynq-7000 デバ イ ス に実装 さ れた シ ス テ ムのブ ロ ッ ク 図を示 し ます。
本資料は表記のバージ ョ ンの英語版を翻訳 し た も ので、内容に相違が生 じ る場合には原文を優先 し ます。 資料に よ っ ては英語版の更新に対応 し ていない も のがあ り ます。 日本
語版は参考用 と し て ご使用の上、 最新情報につ き ま し ては、 必ず最新英語版を ご参照 く だ さ い。
XAPP1170 (v2.0) 2016 年 1 月 21 日
japan.xilinx.com
1
Vivado HLS を使用 し た行列乗算デザイ ン
X-Ref Target - Figure 1
=<14
0HPRU\&RQWUROOHU
3URFHVVLQJ6\VWHP
$50&38
DQG/
&DFKHV
3URJUDPPDEOH/RJLF
*3
7LPHU
$;,/LWH
$;,)XOO
$&3
$;,6WU
'0$
+/6,3
FRUH
/&DFKH
;
図 1 : Zynq‐7000 AP SoC 上の PS と PL のパーテ ィ シ ョ ン こ のアプ リ ケーシ ョ ン ノ ー ト で説明す る 設計手順は、 Zynq-7000 AP SoC 評価キ ッ ト (ZC702) [参照 5] を用い、 Vivado
2015.4 IDE ツールで設計す る 場合に適用 さ れます。
Vivado HLS を使用 し た行列乗算デザイ ン
行列乗算アルゴ リ ズ ム A*B=C は非常にシ ンプルです。 次の 3 つのネ ス ト さ れたループがあ り ます。
•
1 つ目のループ (L1) は、 1 行の入力行列 A を構成する 要素を繰 り 返 し ます。
•
2 つ目のループ (L2) は、 1 列の入力行列 B 内の要素を繰 り 返 し ます。
•
3 つ目のループ (L3) は、 行ベ ク ト ルの各 イ ンデ ッ ク ス を列ベ ク ト ル B の イ ンデ ッ ク ス と 掛け算 し 、 それを累算 し て
1 行の出力行列 C の要素を生成 し ます。
XAPP1170 (v2.0) 2016 年 1 月 21 日
japan.xilinx.com
2
Vivado HLS を使用 し た行列乗算デザイ ン
最適化 さ れ る 関数の C++ コ ー ド は次の よ う にな り ます。
template <typename T, int DIM>
void mmult_hw(T A[DIM][DIM], T B[DIM][DIM], T C[DIM][DIM])
{
// matrix multiplication of a A*B matrix
L1:for (int ia = 0; ia < DIM; ++ia)
{
L2:for (int ib = 0; ib < DIM; ++ib)
{
T sum = 0;
L3:for (int id = 0; id < DIM; ++id)
{
sum += A[ia][id] * B[id][ib];
}
C[ia][ib] = sum;
}
}
アルゴ リ ズ ム を C++ コ ー ド でキ ャ プチ ャ 後に、 Vivado HLS を使用 し て こ れを RTL イ ンプ リ メ ン テーシ ョ ンに合成で き ま
す。 C++ ソ ース コ ー ド のほかに も 、 Vivado HLS は タ ーゲ ッ ト ク ロ ッ ク 周波数、 タ ーゲ ッ ト デバ イ ス仕様、 さ ら には特定
の最適化を制御お よ び指示す る ためのユーザー指示子 ( コ マ ン ド ) を入力 と し て受け る こ と がで き ます。 Vivado HLS の機
能や特徴を短時間で理解す る には、 例を用いて実際に使用 し てみ る こ と です。 Vivado HLS の詳細は、 『Vivado HLS ユー
ザー ガ イ ド 』 [参照 6] を参照 し て く だ さ い。
次の TCL コ ー ド は、 ク ロ ッ ク 周期 と タ ーゲ ッ ト デバ イ ス を示 し てい ます。
set_part {xc7z010clg400-1}
create_clock -period 10
mmult_hw 関数の コ ー ド を使用す る 場合、 Vivado HLS は次の動作を実行 し ます。
•
C コ ー ド で記述 さ れてい る 各動作を同等のハー ド ウ ェ ア動作に変換 し 、 こ れ ら 動作を ク ロ ッ ク サ イ ク ルに割 り 当て
ます。 ク ロ ッ ク 周期 と デバ イ ス遅延の情報に基づいて、 シ ン グル ク ロ ッ ク サ イ ク ル内にで き る だけ多 く の動作を割
り 当て ます。
•
イ ン タ ーフ ェ イ ス合成を使用 し て、 デー タ が ど の よ う に し てハー ド ウ ェ ア ブ ロ ッ ク に送信 さ れて書き 込みが実行 さ
れ る か を自動で合成 し ます。 た と えば、 デー タ が配列 と し て与え ら れ る 場合は、 RAM ブ ロ ッ ク (別の I/O イ ン タ ー
フ ェ イ ス オプシ ョ ン を指定可能) へア ク セ スする イ ン タ ーフ ェ イ ス が自動的に構築 さ れます。
•
各ハー ド ウ ェ ア動作を AP SoC 上の同等ハー ド ウ ェ ア ユニ ッ ト にマ ッ プ し ます。
•
任意のユーザー定義の最適化 (パ イ プ ラ イ ン動作や並列動作な ど) を実行 し ます。
•
AP SoC に実装す る ための最終的なデザ イ ン (Verilog お よ び VHDL) を レ ポー ト と 共に出力 し ます。
サンプル コ アの コ ー ド 合成で生成 さ れた レ ポー ト では、 最初の性能評価 (デフ ォ ル ト の合成結果) を含む動作や性能が評
価 さ れてい ます。
こ の例では、 Vivado HLS が C コ ー ド で記述 さ れた動作を解析 し 、 指定 さ れた タ ーゲ ッ ト 技術 と ク ロ ッ ク 周期で結果を計
算す る のに必要な ク ロ ッ ク サ イ ク ルが 329,793 であ る と 判断 し てい ます。 つま り 、 こ のデザ イ ンは、 最大の ク ロ ッ ク 周期
8.41ns で実行で き る と 考え ら れます。
図 2 のエ リ ア評価では、 デザ イ ンで使用 さ れ る PL リ ソ ース数を示 し てい ます (5 DSP48 ス ラ イ ス、 473 FF (フ リ ッ プ フ
ロ ッ プ)、 830 LUT (ル ッ ク ア ッ プテーブル))。
XAPP1170 (v2.0) 2016 年 1 月 21 日
japan.xilinx.com
3
Vivado HLS を使用 し た行列乗算デザイ ン
X-Ref Target - Figure 2
;
図 2 : 32 ビ ッ ト 浮動小数点の最初の性能評価
こ れ ら の値はあ く ま で も 推定値にすぎ ません。 TRL 合成プ ロ セ ス では、 RTL コ ー ド を さ ら にゲー ト レベルの コ ン ポーネ
ン ト へ変換 し 、 デバ イ ス に配置配線す る 必要があ り ます。 ほかに も 、 最終的な結果に影響を与え る ゲー ト レベルの最適化
が実行 さ れ る 可能性があ り ます。
XAPP1170 (v2.0) 2016 年 1 月 21 日
japan.xilinx.com
4
Vivado HLS を使用 し た行列乗算デザイ ン
図 3 に、 イ ン タ ーフ ェ イ ス合成に よ っ て I/O ポー ト に変換 さ れた C 関数の引数を示 し ます。 こ のプ ロ セ ス で、 完成 し たエ
ンベデ ッ ド デザ イ ンのその他のブ ロ ッ ク へポー ト が接続 さ れます。
X-Ref Target - Figure 3
;
図 3 : 最初の RTL ポー ト
こ のプ ロ セ ス で生 じ た変更は次の と お り です。
•
デザ イ ンに ク ロ ッ ク 信号 と リ セ ッ ト 信号 (ap_clk、 ap_rst) が追加 さ れま し た。
•
デザ イ ン レベルのプ ロ ト コ ルが追加 さ れま し た。 こ れはデフ ォ ル ト 設定ですが、 変更可能です。 こ れに よ り 、 デザ
イ ンの動作開始 (ap_start)、 新 し い入力に対応する 準備が整っ てい る 状態、 動作が完了 し た状態 (ap_done)、 ま たはア
イ ド ル状態を示す こ と がで き ます。
•
配列引数が、 ザ イ リ ン ク ス のブ ロ ッ ク RAM へア ク セ スす る ための適切なア ド レ ス信号、 イ ネーブル信号、 お よ び書
き 込み信号を持つ RAM イ ン タ ーフ ェ イ ス に変換 さ れま し た。 さ ら に、 DIN ポー ト がデュ アルポー ト のブ ロ ッ ク
BRAM (必要に応 じ てシ ン グルポー ト ブ ロ ッ ク RAM に設定可能) を使用する こ と で性能が向上する と Vivado HLS が
自動判断 し ま し た。
•
Vivado HLS に よ っ て、 C コ ー ド の動作 と I/O 動作が実装 さ れてい る RTL イ ンプ リ メ ン テーシ ョ ンが生成 さ れま し た。
こ の と き 、 Verilog、 VHDL な ど の RTL 言語や RTL デザ イ ン全般に関す る 知識はユーザーに要求 さ れません。
XAPP1170 (v2.0) 2016 年 1 月 21 日
japan.xilinx.com
5
最適化 さ れた RTL
最適化 さ れた RTL
HLS で生成 さ れた初期デザ イ ンは最適化で き ます。 図 4 では、 3 つの有効な ソ リ ュ ーシ ョ ン を比較 し てい ます。 行列乗算
の計算に必要な ク ロ ッ ク サ イ ク ルを削減する ために、 最適化が適用 さ れま し た。 Vivado HLS に よ る 最適化の詳細は、
『Vivado Design Suite チ ュ ー ト リ アル : 高位合成』 [参照 7] を参照 し て く だ さ い。
X-Ref Target - Figure 4
;
図 4 : 3 つのソ リ ュ ーシ ョ ンの性能評価の比較
ソ リ ュ ーシ ョ ン 2 は、 初期デザ イ ン ( ソ リ ュ ーシ ョ ン 1) よ り 約 20 倍高速化 さ れま し たが、 使用する リ ソ ース は増加 し て
い ます (10 DSP48 ス ラ イ ス、 2,312 FF、 3,450 LUT)。 予測 さ れた ク ロ ッ ク 周期は 9.35ns で、 こ れは式 1 で算出 さ れ る よ う に
出力デー タ レー ト が 6.46 KSPS (千サンプル/秒) と な り ます。
16536 x 9.35ns = 0.154ms = 1 / (6.46 KSPS)
式1
最 も 高い性能を示 し たのは明 ら かに ソ リ ュ ーシ ョ ン 3 で、 浮動小数点の行列乗算を計算する のに必要な ク ロ ッ ク サ イ ク
ルは、 わずか 1,190 です。 こ の値は、 160 DSP48 ス ラ イ ス、 13,420 FF、 お よ び 23,293 LUT で達成 し た結果であ り 、 AP SoC
で使用可能な各 リ ソ ース の 72%、 12%、 お よ び 43% にあ た り ます。 ソ リ ュ ーシ ョ ン 3 は、 パ イ プ ラ イ ン初期化 イ ン タ ーバ
ルが 1 で、 こ れは スループ ッ ト が 1 と い う こ と です。 こ の例の場合、 デー タ レー ト は 118.9 MSPS (百万サンプル/秒) で、
すべての出力行列は 1,190 x 8.41ns 時間 (10µs) 以内に生成 さ れます。
スループ ッ ト 1 を達成 し た と い う こ と は、 各 ク ロ ッ ク サ イ ク ルで 1 つの行列出力サンプルが生成 さ れ る と い う こ と です。
ソ リ ュ ーシ ョ ンの選択はユーザー要件に基づ き ます。 た と えば、 PL リ ソ ース重視の観点か ら 、 よ り 低 コ ス ト なデザ イ ン
を優先す る 場合は ソ リ ュ ーシ ョ ン 2 を選択で き ます。
次の TCL コ ー ド は、 ソ リ ュ ーシ ョ ン 3 の最適化指示子を示 し てい ます。
set_directive_array_partition -type block -factor 16 -dim 2 "mmult_hw" A
set_directive_array_partition -type block -factor 16 -dim 1 "mmult_hw" B
set_directive_pipeline -II 1 "mmult_hw/L2"
XAPP1170 (v2.0) 2016 年 1 月 21 日
japan.xilinx.com
6
Vivado HLS の AXI4‐Stream イ ン タ ー フ ェ イ ス
Vivado HLS の AXI4‐Stream イ ン タ ー フ ェ イ ス
AXI4-Stream は、 ア ド レ ス指定や外部バ ス マ ス タ ーを必要 と し ないポ イ ン ト 間デー タ 転送用の通信規格です [参照 8]。 こ
のプ ロ ト コ ルに よ っ て、 2 つの コ アがプ ロ デ ュ ーサー / コ ン シ ュ ーマー モデルを使用す る デー タ に対 し て動的に同期 し ま
す。 使用 さ れ る AXI4-Stream の イ ンプ リ メ ン テーシ ョ ンに基づいて、 通信チ ャ ネルは ワ イ ヤー と し て構築 さ れた り 、 両端
でのデー タ レー ト の不一致に対応す る ために ス ト レージ を用いて構築 さ れます。
Vivado HLS で設計 さ れた行列乗算 コ アは、 AXI4-Stream イ ン タ ーフ ェ イ ス を使用 し て DMA コ ン ト ロ ー ラ ーへ接続 さ れま
す。 バース ト フ ォーマ ッ テ ィ ン グ、 ア ド レ ス生成、 メ モ リ ト ラ ンザ ク シ ョ ンの ス ケ ジ ュ ー リ ン グは、 AXI DMA IP で実行
さ れます。
図 1 に示すシ ス テ ムのアーキテ ク チ ャ の場合、ACP ポー ト を適用 し て AXI DMA を ARM プ ロ セ ッ サの L2 キ ャ ッ シ ュ へ接
続 し てい ます。 ま た、 別の手段 と し て、 HP (High Performance) ポー ト を使用 し て外部 DDR メ モ リ へ接続する 方法があ り
ます。 Vivado HLS コ アか ら す る と 、 DMA を介す メ モ リ イ ン タ ーフ ェ イ ス は、 メ モ リ が DDR ま たは L2 キ ャ ッ シ ュ のいず
れであ っ て も 同 じ です。 DDR ま たは L2 キ ャ ッ シ ュ のいずれを使用 し てプ ロ セ ッ サ と Vivado HLS コ ア間でデー タ を共有
す る かはシ ス テ ム アーキ テ ク チ ャ の判断です。 DDR は L2 キ ャ ッ シ ュ よ り 多 く のデー タ を転送で き ますが、 通信時の レ
イ テ ン シは L2 キ ャ ッ シ ュ の方が DDR よ り 低 く な り ます。
Vivado HLS の行列乗算ブ ロ ッ ク を AXI DMA へ接続する ためには、 2 ページの 「Vivado HLS を使用 し た行列乗算デザ イ
ン」 の コ ー ド を変更す る 必要があ り 、 こ のセ ク シ ョ ンで示す新たに記述 し た C++ コ ー ド の よ う に、 合成 さ れ る 関数をい く
つか追加す る 必要があ り ます。 具体的には、 AXI4-Stream イ ン タ ーフ ェ イ ス か ら 要素を抽出す る pop_stream と
AXI4-Stream イ ン タ ーフ ェ イ スへ要素を挿入す る push_stream の 2 つの関数です。 こ れ ら の関数は、 行列の 32 ビ ッ ト 浮動
小数点デー タ と AXI4 プ ロ ト コ ルの 32 ビ ッ ト 符号な し デー タ 間の変換 も 実行 し ます。
次に示す コ ー ド は、 AXI_VAL デー タ 型の使用法を示 し てい ます。 こ れは、 AXI4-Stream イ ン タ ーフ ェ イ ス に関連す る サ
イ ド チ ャ ネル情報を表すユーザー定義デー タ 型です。 Vivado HLS では、 プ ロ ト コ ル ハン ド シ ェ イ ク に関連 し ないすべて
のサ イ ド チ ャ ネル情報は C/C++ コ ー ド で記述 さ れ、 何 ら かの方法で使用 さ れ る 必要があ り ます。 つま り 、 Vivado HLS は
TREADY 信号 と TVALID 信号を抽象化 し ますが、 AXI4-Stream イ ン タ ーフ ェ イ ス のその他すべての信号はユーザー コ ー
ド に含まれ る 必要があ り ます。 ま た、 TDATA、 TREADY、 お よ び TVALID 信号を除 く 、 すべての AXI4-Stream イ ン タ ー
フ ェ イ ス信号はオプシ ョ ンです。 サ イ ド チ ャ ネル信号の使用は、 Vivado HLS AXI4-Stream イ ン タ ーフ ェ イ スへ接続 さ れた
ブ ロ ッ ク に依存 し ます。
XAPP1170 (v2.0) 2016 年 1 月 21 日
japan.xilinx.com
7
Vivado HLS の AXI4‐Stream イ ン タ ー フ ェ イ ス
#include <assert.h>
#include <ap_axi_sdata.h>
typedef ap_axiu<32,4,5,5> AXI_VAL;
template <typename T, int DIM, int SIZE, int U, int TI, int TD>
void wrapped_mmult_hw(AXI_VAL in_stream[2*SIZE], AXI_VAL out_stream[SIZE])
{
T A[DIM][DIM], B[DIM][DIM], C[DIM][DIM];
assert(sizeof(T)*8 == 32);
// stream in the 2 input matrices
for(int i=0; i<DIM; i++)
for(int j=0; j<DIM; j++)
{
#pragma HLS PIPELINE II=1
int k = i*DIM + j;
A[i][j] = pop_stream<T,U,TI,TD>(in_stream[k]);
}
for (int i=0; i<DIM; i++)
for (int j=0; j<DIM; j++)
{
#pragma HLS PIPELINE II=1
int k = i*DIM + j + SIZE;
B[i][j] = pop_stream<T,U,TI,TD>(in_stream[k]);
}
// do multiplication
mmult_hw<T, DIM>(A, B, C);
// stream out result matrix
for (int i=0; i<DIM; i++)
for (int j=0; j<DIM; j++)
{
#pragma HLS PIPELINE II=1
int k = i*DIM + j;
out_stream[k] = push_stream<T,U,TI,TD>(C[i][j], k==1023);
}
}
// this is the top level design that will be synthesized into RTL
void HLS_accel(AXI_VAL INPUT_STREAM[2048], AXI_VAL OUTPUT_STREAM[1024])
{
// Map ports to Vivado HLS interfaces
#pragma HLS INTERFACE s_axilite port=return bundle=CONTROL_BUS
#pragma HLS INTERFACE axis port=INPUT_STREAM
#pragma HLS INTERFACE axis port=OUTPUT_STREAM
wrapped_mmult_hw<float,32,32*32,4,5,5>(INPUT_STREAM, OUTPUT_STREAM);
}
XAPP1170 (v2.0) 2016 年 1 月 21 日
japan.xilinx.com
8
Vivado HLS の AXI4‐Stream イ ン タ ー フ ェ イ ス
図 5 に、 AXI4-Stream 行列乗算の合成レ ポー ト を示 し ます。 こ の時点の レ イ テ ン シは、 4,267 ク ロ ッ ク サ イ ク ルであ る こ
と に留意 し て く だ さ い。 合計レ イ テ ン シの値は、 各行列を ア ク セ ラ レー タ か ら 転送 し た り 、 ア ク セ ラ レー タ へ転送す る 時
間、 演算の時間、 お よ びハー ド ウ ェ ア関数のセ ッ ト ア ッ プにかか る 時間を考慮に入れて計算 さ れます。 各行列の転送時間
は、 1,024 の 32 ビ ッ ト の浮動小数点値で 1,024 ク ロ ッ ク サ イ ク ルであ る ため、 合計時間は 3,072 ク ロ ッ ク サ イ ク ル と な り
ます。 行列乗算の計算時間は 1,188 ク ロ ッ ク サ イ ク ルであ り 、 それに pop_stream 関数 と push_stream 関数用に 2 サ イ ク ル
が追加 さ れます。 その他、 FOR ループのプ ロ ロ ーグ/エ ピ ロ ーグお よ び関数の ス タ ー ト ア ッ プに多少の ク ロ ッ ク サ イ ク ル
が必要にな り ます。 結果 と し て、 関数の初期化 イ ン タ ーバル (II) は 4,268 ク ロ ッ ク サ イ ク ルで、 レ イ テ ン シが 4,267 ク
ロ ッ ク サ イ ク ル と な り ます。
X-Ref Target - Figure 5
;
図 5 : AXI4‐Stream 行列乗算コ アの合成評価
全体的な リ ソ ース使用数の概算は、 66 BRAM18K (18K ビ ッ ト 容量のブ ロ ッ ク RAM)、 160 DSP48 ス ラ イ ス、 13,659 FF、 お
よ び 23,789 LUT と な り 、 Zynq-7000 で使用可能な各 リ ソ ース の 23%、 72%、 12%、 お よ び 44% にあ た り ます。 デー タ
レー ト は 118.9 MSPS の ま ま で、 すべての出力行列は 4,268 x 8.41ns 時間 (36µs) 以内に生成 さ れます。
XAPP1170 (v2.0) 2016 年 1 月 21 日
japan.xilinx.com
9
AXI DMA の概要
Vivado HLS プ ロ ジ ェ ク ト は、 図 6 に示す Vivado HLS Command Prompt シ ェ ルを使用 し て、 デザ イ ン アーカ イ ブで提供 さ
れてい る TCL ス ク リ プ ト を次の コ マ ン ド で実行する と 作成で き ます。
vivado_hls -f run_hls_script.tcl
X-Ref Target - Figure 6
• • • • • • •• • • • • •
図 6 : TCL ス ク リ プ ト を実行 し て Vivado HLS プ ロ ジ ェ ク ト を作成
64 ビ ッ ト の AXI4-Stream イ ン タ ーフ ェ イ ス を使用する こ と で、 シ ス テ ム レベルの性能を さ ら に向上 さ せ る こ と がで き ま
す。 こ の場合、 ア ク セ ラ レ タ レ イ テ ン シは 4,267 サ イ ク ルか ら 約 2,700 サ イ ク ルに削減 さ れます (図 4 に示すループ L1、
L2、 お よ び L4 のサ イ ク ルが半分にな る )。
AXI DMA の概要
AXI DMA コ ア [参照 9] は、 AXI4-Stream イ ン タ ーフ ェ イ ス を介す メ モ リ と ペ リ フ ェ ラ ル間に高帯域幅のダ イ レ ク ト メ モ
リ ア ク セ ス を提供 し ます。 こ の コ ア デザ イ ンには次の AXI4 イ ン タ ーフ ェ イ ス があ り ます。
•
AXI4-Lite ス レーブ
•
AXI4 メ モ リ マ ッ プ読み出 し マ ス タ ー /書 き 込みマ ス タ ー
•
オプシ ョ ンの AXI4 メ モ リ マ ッ プ ス キ ャ ッ タ ー /ギ ャ ザー 読み出 し /書 き 込みマ ス タ ー
•
AXI4 to AXI4-Stream (MM2S) ス ト リ ーム マ ス タ ー
•
AXI4-Stream to AXI4 (S2MM) ス ト リ ーム ス レーブ
•
AXI 制御 AXI4-Stream マ ス タ ー
•
AXI ス テー タ ス AXI4-Stream ス レーブ
図 7 に、 AXI DMA イ ン タ ーフ ェ イ ス と デー タ ス ト リ ー ミ ン グ を示 し ます。 AXI DMA には 2 つの異な る 動作モー ド (ス
キ ャ ッ タ ー /ギ ャ ザー モー ド 、 シ ンプル DMA モー ド ) があ り 、 同時に両方は使用で き ません。 各モー ド には、 AXI4-Lite
ス レーブ イ ン タ ーフ ェ イ ス を使用 し て設定 さ れた適切な レ ジ ス タ があ り ます。 こ こ で示す イ ンプ リ メ ン テーシ ョ ンでは、
シ ンプル DMA モー ド を使用 し てい ます。
XAPP1170 (v2.0) 2016 年 1 月 21 日
japan.xilinx.com
10
AXI DMA の概要
X-Ref Target - Figure 7
$;,'0$
0065HJLVWHU
006'0$
&RQWUROOHU
$;,/LWH
006B,QWU2XW
$;,&RQWURO
,QWHUIDFH
5HJLVWHU0RGXOH
$;,&RQWURO
6WUHDP
006
6005HJLVWHU
600B,QWU2XW
$;,0HPRU\0DS
5HDG006
$;,'DWD0RYHU
006
$;,0HPRU\0DS
:ULWH600
$;,'DWD0RYHU
600
$;,6WUHDP
006
$;,6WUHDP
600
6*0RGXOH
006&KDQQHO
600&KDQQHO
600'0$
&RQWUROOHU
$;,6WDWXV
,QWHUIDFH
$;,0HPRU\0DS
6*5HDG:ULWH
$;,6WDWXV
6WUHDP
600
;
図 7 : AXI DMA コ アのブ ロ ッ ク図
シ ンプル DMA モー ド は MM2S お よ び S2MM チ ャ ネル上でシ ンプルな DMA 転送を実行す る ための コ ン フ ィ ギ ュ レーシ ョ
ンで、 使用す る FPGA リ ソ ース量を抑え る こ と がで き ます。 AXI4 Read (MM2S) イ ン タ ーフ ェ イ ス がマ ス タ ー外部 メ モ リ
か ら デー タ を読み出 し て、 その後 DMA Data Mover が AXI4-Stream (MM2S) ポー ト を介 し てそのデー タ を ス レーブ ペ リ
フ ェ ラ ルへ転送 し ます。 同様に、 マ ス タ ー ペ リ フ ェ ラ ルは AXI4 Write (S2MM) イ ン タ ーフ ェ イ スへデー タ を送信 し 、 そ
の後、 AXI4-Stream (S2MM) ポー ト を介 し てそのデー タ を ス レーブ外部 メ モ リ に書 き 込みます。
XAPP1170 (v2.0) 2016 年 1 月 21 日
japan.xilinx.com
11
ARM ACP の概要
DMA 転送は、 制御、 ソ ース、 ま たはデス テ ィ ネーシ ョ ン ア ド レ ス と レ ン グ ス レ ジ ス タ を使用 し て開始 さ れます。 MM2S
チ ャ ネルのセ ッ ト ア ッ プ シーケ ン ス は次の と お り です。
1.
制御レ ジ ス タ の run/stop ビ ッ ト を設定 し て、 MM2S チ ャ ネルの実行を開始 し ます。
2.
有効な ソ ース ア ド レ ス が MM2S ソ ース ア ド レ ス レ ジ ス タ に書き 込まれます。
3.
転送 さ れ る バ イ ト 数が MM2S レ ン グ ス レ ジ ス タ に書き 込まれます。 レ ン グ ス レ ジ ス タ は最後に書き 込む必要があ り
ます。
S2MM チ ャ ネルのセ ッ ト ア ッ プ シーケ ン ス は次の と お り です。
1.
制御レ ジ ス タ の run/stop ビ ッ ト を設定 し て、 S2MM チ ャ ネルの実行を開始 し ます。
2.
有効なデス テ ィ ネーシ ョ ン ア ド レ ス が S2MM デス テ ィ ネーシ ョ ン ア ド レ ス レ ジ ス タ に書き 込まれます。
3.
受信バ ッ フ ァ ーのバ イ ト 長が S2MM レ ン グ ス レ ジ ス タ に書き 込まれます。 レ ン グ ス レ ジ ス タ は最後に書き 込む必要
があ り ます。
ARM ACP の概要
ACP ポー ト は、 ス ヌ ープ制御ユニ ッ ト (SCU) の 64 ビ ッ ト AXI ス レーブ イ ン タ ーフ ェ イ ス で、 Zynq-7000 AP SoC PL と
Cortex-A9 CPU プ ロ セ ッ サ サブシ ス テ ム を直接接続 し 、 キ ャ ッ シ ュ コ ヒ ーレ ン ト な非同期ア ク セ ス ポ イ ン ト と し て機能
し ます。 こ の ACP ポー ト は、 PS と PL に実装 さ れた ア ク セ ラ レー タ 間に低レ イ テ ン シ パ ス を提供 し ます。 シ ス テ ム内の
あ ら ゆ る PL マ ス タ ーは、 こ の イ ン タ ーフ ェ イ ス を介する こ と で、 プ ロ セ ッ サ と 同 じ よ う にキ ャ ッ シ ュ お よ び メ モ リ サブ
シ ス テ ムへア ク セ ス で き る ため、 実行す る ソ フ ト ウ ェ ア アプ リ ケーシ ョ ンの全体的なシ ス テ ム性能を向上 さ せる こ と が
で き ます。
ACP を経由 し た コ ヒ ーレ ン ト な メ モ リ 領域への読み出 し ト ラ ンザ ク シ ョ ンは、 SCU と 連携 し て必要なデー タ がプ ロ セ ッ
サの L1 キ ャ ッ シ ュ に格納 さ れてい る か ど う かを確認 し ます。 L1 キ ャ ッ シ ュ に必要な情報があ る 場合、 デー タ は要求元の
コ ン ポーネ ン ト に直接返 さ れます。 情報が L1 キ ャ ッ シ ュ にない場合は、 L2 キ ャ ッ シ ュ に も ヒ ッ ト し なければ ト ラ ンザ ク
シ ョ ンは最後に メ イ ン メ モ リ に転送 さ れます。 コ ヒ ーレ ン ト な メ モ リ 領域に対する 書き 込み ト ラ ンザ ク シ ョ ンの場合、
書 き 込みが メ モ リ シ ス テ ムに転送 さ れ る 前に SCU が コ ヒ ーレ ン シ を強制 し ます。 オプシ ョ ンで ト ラ ンザ ク シ ョ ン を L2
キ ャ ッ シ ュ に割 り 当て る こ と がで き 、 オ フチ ッ プ メ モ リ への書き 込み動作に よ っ て生 じ る 消費電力や性能への影響を回
避で き ます。 図 8 に、 ACP と CPU へ接続 さ れた メ モ リ シ ス テ ム間の接続を示 し ます。
XAPP1170 (v2.0) 2016 年 1 月 21 日
japan.xilinx.com
12
Vivado IP イ ン テグレー タ ーのデザイ ン
X-Ref Target - Figure 8
&38V
&38V
6QRRSDEOH'DWD%XIIHUV
6QRRSDEOH'DWD%XIIHUV
DQG&DFKHV
DQG&DFKHV
3//RJLF
$GYDQFHG&RKHUHQF\3RUW
$&3
/&DFKH
/LQH8SGDWHV
5HDG:ULWH
5HTXHVWV
0
&DFKH&RKHUHQW
7UDQVDFWLRQV
6
6
0DLQWDLQ/
&DFKH&RKHUHQF\
0
&DFKHDEOHDQG
1RQFDFKHDEOH
DFFHVVHV
)OXVK&DFKH
/LQHWR0HPRU\
6&8
0
7DJ5$0
&DFKH7DJ
5DP8SGDWH
&DFKHDEOHDQG1RQFDFKHDEOH
DFFHVVHVWR''53/
3HULSKHUDOVDQG365HJLVWHUV
6\VWHP
,QWHUFRQQHFW
7DJ5$0
6
2&0
'DWD5$0
/&DFKH
0
0
''5
6\VWHP
,QWHUFRQQHFW
;
図 8 : ARM メ モ リ と ACP の接続
Vivado IP イ ン テグ レー タ ーのデザイ ン
こ のセ ク シ ョ ンでは、 ZC702 ボー ド をベース にザ イ リ ン ク ス の Vivado 2015.4 を使用 し てハー ド ウ ェ ア デザ イ ン を作成す
る 手順を説明 し ます。 以前のバージ ョ ン (2013.3、 2014.4、 2015.2) で も 同様の手順を適用で き ます。
すべてデフ ォ ル ト 設定を選択 し て、 基本の Vivado プ ロ ジ ェ ク ト (project_1) を作成 し ます。 デバ イ ス を指定する 画面では、
ZC702 ボー ド を選択 し ます。 詳細手順は次の と お り です。
1.
Vivado を起動 し ます。 作業デ ィ レ ク ト リ (xapp1170/empty/vivado) に新規プ ロ ジ ェ ク ト を作成 し て、 次を選択 し
ます。
°
RTL プ ロ ジ ェ ク ト
°
ソ ース、 IP、 制約は不要 (現段階では)
2.
[Default Part] で、 [Boards] → [Zynq-7 ZC702 Evaluation Board] を選択 し ます。
3.
[Next] → [Finish] を ク リ ッ ク し ます。 空のプ ロ ジ ェ ク ト で Vivado GUI が表示 さ れます。
XAPP1170 (v2.0) 2016 年 1 月 21 日
japan.xilinx.com
13
Vivado IP イ ン テグレー タ ーのデザイ ン
IP リ ポジ ト リ に HLS IP を追加 :
1.
Flow Navigator の [Project Manager] で [IP Catalog] を選択 し ます (図 9 参照)。
X-Ref Target - Figure 9
;
図 9 : IP カ タ ログの起動
2.
[IP Catalog] ウ ィ ン ド ウ を表示 し て、 [IP Settings] を ク リ ッ ク し ます (図 10 参照)。
X-Ref Target - Figure 10
• • • • • • •• • • • • •
図 10 : IP カ タ ログの設定を表示 3.
[Repository Manager] で [Add Repository] を ク リ ッ ク し ます。
4.
[IP Repositories] ダ イ ア ロ グ ボ ッ ク ス で次を実行 し ます。
a.
[Create New Folder] ア イ コ ン を ク リ ッ ク し ます。
b.
表示 さ れたダ イ ア ロ グ ボ ッ ク ス に 「vivado_ip_repo」 と 名前を入力 し ます (図 11 参照)。
c.
[OK] を ク リ ッ ク し て、 [Create New Folder] ダ イ ア ロ グ ボ ッ ク ス を閉 じ ます。
XAPP1170 (v2.0) 2016 年 1 月 21 日
japan.xilinx.com
14
Vivado IP イ ン テグレー タ ーのデザイ ン
X-Ref Target - Figure 11
;
図 11 : 新規の IP リ ポジ ト リ を作成 5.
[User Repository] を右 ク リ ッ ク し ます ( こ の時点では空)。
a.
[Add IP to Repository] を選択 し ます。
b.
[Select IP to Add to Repository] ダ イ ア ロ グ ボ ッ ク ス で、
hls/hls_wrapped_mmult_prj/solution0/impl/ip/ を参照 し ます。
c.
xilinx_com_hls_HLS_accel_1_0.zip フ ァ イ ルを選択 し ます (図 12 参照)。
X-Ref Target - Figure 12
;
図 12 : リ ポジ ト リ に HLS IP を追加
XAPP1170 (v2.0) 2016 年 1 月 21 日
japan.xilinx.com
15
Vivado IP イ ン テグレー タ ーのデザイ ン
d.
[OK] を ク リ ッ ク し ます。こ れで [IP Catalog] に Vivado HLS IP が追加 さ れてい る こ と を確認で き ます (図 13 参照)。
X-Ref Target - Figure 13
• • • • • • •• • • • • •
図 13 : HLS IP が追加 さ れた IP カ タ ログ
7.
[OK] を ク リ ッ ク し てダ イ ア ロ グ ボ ッ ク ス を閉 じ ます。
XAPP1170 (v2.0) 2016 年 1 月 21 日
japan.xilinx.com
16
Vivado IP イ ン テグレー タ ーのデザイ ン
IP イ ン テ グ レー タ ーでブ ロ ッ ク 図を設計 :
(詳細は、 UG995 [参照 4] を参照 し て く だ さ い。 )
1.
Flow Navigator の [IP Integrator] の下にあ る [Create Block Design] を ク リ ッ ク し ます。
a.
表示 さ れたダ イ ア ロ グ ボ ッ ク ス に、 「system」 と デザ イ ン名を入力 し ます (図 14 参照)。
X-Ref Target - Figure 14
• • • • • • •• • • • • •
図 14 : [Create Block Design] ダ イ ア ログ ボ ッ ク ス
b.
[OK] を ク リ ッ ク し ます。
c.
画面右上に、 空の [Diagram] ウ ィ ン ド ウ が表示 さ れます (図 15 参照)。
X-Ref Target - Figure 15
;
図 15 : [Diagram] ウ イ ン ド ウ
2.
ブ ロ ッ ク デザ イ ン を自動で構築す る ための ス ク リ プ ト があ ら か じ め用意 さ れてい ます。 [TCL Console] に 「source
2015v4_ipi_xapp1170_bd.tcl」 と 入力 し て、 Enter キーを押 し ます。
3.
ス ク リ プ ト 終了後、 [Diagram] ウ ィ ン ド ウ で右 ク リ ッ ク し て [Regenerate Layout] を選択 し ます。 図 16 に示すブ ロ ッ ク
図が表示 さ れます。
XAPP1170 (v2.0) 2016 年 1 月 21 日
japan.xilinx.com
17
Vivado IP イ ン テグレー タ ーのデザイ ン
X-Ref Target - Figure 16
;
図 16 : ブ ロ ッ ク デザイ ン
4.
[Address Editor] ウ ィ ン ド を ク リ ッ ク し て、 デザ イ ン内のすべての ス レーブの メ モ リ マ ッ プ を表示 し ます。 マ ッ プ さ
れていない ス レーブがない こ と を確認 し ます。 マ ッ プ さ れていない ス レーブがあ る 場合は、 [Address Editor] 上で右 ク
リ ッ ク し て [Auto Assign Address] を選択 し ます (詳細は、 UG994 [参照 10] の第 3 章を参照)。 結果のア ド レ ス マ ッ プ
テーブルは、 図 17 の よ う にな り ます。
X-Ref Target - Figure 17
• • • • • • •• • • • •
図 17 : ア ド レ ス マ ッ プ テーブル
XAPP1170 (v2.0) 2016 年 1 月 21 日
japan.xilinx.com
18
Vivado IP イ ン テグレー タ ーのデザイ ン
5.
processing_system7_1 ブ ロ ッ ク で [Presets] を ク リ ッ ク し て、図 18 に示す よ う に ZC702 がすでに Current Preset で
あ る こ と を確認 し ます。
X-Ref Target - Figure 18
• • • • • • •• • • • • •
図 18 : Current Preset: ZC702
6.
[Clock Configuration] → [PL Fabric Clocks] を ク リ ッ ク し て、 図 19 に示す よ う に FCLK_CLK0 が 100MHz に設定 さ れて
い る こ と を確認 し ます。
X-Ref Target - Figure 19
;
図 19 : Zynq‐7000 PL FCLK_CLK0 の設定
XAPP1170 (v2.0) 2016 年 1 月 21 日
japan.xilinx.com
19
Vivado IP イ ン テグレー タ ーのデザイ ン
7.
[PL-PS Interrupt Ports] が図 20 に示す よ う に設定 さ れてい る こ と を確認 し ます。
X-Ref Target - Figure 20
;
図 20 : PL‐PS 割 り 込みポー ト の設定
8.
ツールバーの [Validate Design] を ク リ ッ ク し て、 ブ ロ ッ ク デザ イ ン を検証 し ます (図 21 参照)。
X-Ref Target - Figure 21
;
図 21 : デザイ ン検証
XAPP1170 (v2.0) 2016 年 1 月 21 日
japan.xilinx.com
20
Vivado IP イ ン テグレー タ ーのデザイ ン
9.
検証プ ロ セ ス完了後、 メ ニ ュ ーの [File] → [Save Block Design] (ま たは Ctrl + S キー ) を使用 し てブ ロ ッ ク デザ イ ン を
保存 し ます。
出力フ ァ イ ルの生成 :
1.
[Project Manager] の [Sources] ビ ュ ーで system.bd を右 ク リ ッ ク し て [Generate Output Products] を ク リ ッ ク し ます
(図 22 参照)。
X-Ref Target - Figure 22
;
図 22 : 出力フ ァ イルの生成
2.
表示 さ れたダ イ ア ロ グ ボ ッ ク ス で [OK] を ク リ ッ ク し て、 すべての出力フ ァ イ ルの生成を開始 し ます。
3.
HDL ラ ッ パーを作成 し ます。
4.
a.
[Project Manager] の [Sources] ビ ュ ー (前の手順 と 同 じ 手順お よ び メ ニ ュ ー ) で system.bd を右 ク リ ッ ク し て
[Create HDL Wrapper] を ク リ ッ ク し ます。
b.
[OK] を ク リ ッ ク し て通知 メ ッ セージ を消去 し ます。
[Generate Bitstream] を ク リ ッ ク し ます。
XAPP1170 (v2.0) 2016 年 1 月 21 日
japan.xilinx.com
21
Vivado IP イ ン テグレー タ ーのデザイ ン
5.
SDK 用にハー ド ウ ェ ア プ ラ ッ ト フ ォーム を エ ク ス ポー ト し て、 SDK を起動 し ます (図 23 参照)。 [Export Hardware] が
選択 さ れてい る こ と を確認 し ます。 [Include bitstream] はオンに し ます。
X-Ref Target - Figure 23
;
図 23 : ハー ド ウ ェ アのエ ク スポー ト
XAPP1170 (v2.0) 2016 年 1 月 21 日
japan.xilinx.com
22
SDK を使用する Zynq ソ フ ト ウ ェ ア デザイ ン
SDK を使用する Zynq ソ フ ト ウ ェ ア デザイ ン [Launch SDK] を ク リ ッ ク し ます (図 23 参照)。 SDK が開 く と 、 ソ フ ト ウ ェ ア プ ロ ジ ェ ク ト を開始で き ます。 Hello World ア
プ リ ケーシ ョ ン を作成す る には、 次の手順に従い ます。
1.
[File] → [New] → [Application Project] を ク リ ッ ク し て新規プ ロ ジ ェ ク ト を作成 し 、 [Project name] に 「mmult」 と 入力
し ます (図 24 参照)。
X-Ref Target - Figure 24
;
図 24 : SDK の New Project ウ ィ ザー ド
2.
[Board Support Package} で [Create New] を ク リ ッ ク し ます。
3.
[Next] を ク リ ッ ク し ます。
4.
[Hello World] を選択 し ます。
5.
[Finish] を ク リ ッ ク し ます。 こ の手順で、 mmult ス タ ン ド ア ロ ン アプ リ ケーシ ョ ンが作成お よ び構築 さ れます。
XAPP1170 (v2.0) 2016 年 1 月 21 日
japan.xilinx.com
23
SDK を使用する Zynq ソ フ ト ウ ェ ア デザイ ン
6.
出力用に タ ー ミ ナルを使用す る ため、 タ ー ミ ナル アプ リ ケーシ ョ ン (ま たは SDK の ビル ト イ ン タ ー ミ ナル) を起動 し
て、 図 25 の よ う に設定 し ます。
X-Ref Target - Figure 25
;
図 25 : UART Terminal の設定
7.
右 ク リ ッ ク で [Xilinx Tools] → [Program FPGA] を選択 し て、 Zynq-7000 デバ イ ス をプ ロ グ ラ ム し ます。
XAPP1170 (v2.0) 2016 年 1 月 21 日
japan.xilinx.com
24
SDK を使用する Zynq ソ フ ト ウ ェ ア デザイ ン
8.
図 26 に示す よ う に、 [Build Configurations] を [Release] モー ド に設定 し ます。
X-Ref Target - Figure 26
• • • • • • •• • • • • •
図 26 : ア ク テ ィ ブ コ ン フ ィ ギ ュ レーシ ョ ンの設定
XAPP1170 (v2.0) 2016 年 1 月 21 日
japan.xilinx.com
25
SDK を使用する Zynq ソ フ ト ウ ェ ア デザイ ン
9.
ボー ド で こ のアプ リ ケーシ ョ ン を実行す る ために、 右 ク リ ッ ク で [Run] → [Run Configurations] を選択 し て新 し い実行
コ ン フ ィ ギ ュ レーシ ョ ン を作成 し ます。 GUI では、 [Xilinx C/C++ application (System Debugger)] を選択 し て [New] を ク
リ ッ ク (ま たはエン ト リ を ダブル ク リ ッ ク ) し ます。 こ れで、 新 し い コ ン フ ィ ギ ュ レーシ ョ ンが生成 さ れます。 図 27
に示すデフ ォ ル ト 設定を使用 し て く だ さ い。
X-Ref Target - Figure 27
;
図 27 : SDK の [Run Configurations]
10. アプ リ ケーシ ョ ン を実行 し ます。 タ ー ミ ナルに 「Hello World」 と 表示 さ れます。
XAPP1170 (v2.0) 2016 年 1 月 21 日
japan.xilinx.com
26
SDK を使用する Zynq ソ フ ト ウ ェ ア デザイ ン
次に、 HLS で生成 さ れた HW ア ク セ ラ レー タ を呼び出す ソ フ ト ウ ェ ア を作成 し ます。 arm_sw フ ォ ルダーには、 DMA
の初期化、 性能の測定、 ハー ド ウ ェ ア ア ク セ ラ レー タ の呼び出 し を実行す る 3 つの C コ ー ド アプ リ ケーシ ョ ン フ ァ イ
ルが含 ま れてい ます。 残 り のすべてのアプ リ ケーシ ョ ン フ ァ イ ルは、 Vivado HLS で自動生成 さ れて SDK で イ ン ポー ト
さ れ ます。
1.
helloworld.c フ ァ イ ルは、 必要ないので削除で き ます。
2.
行列乗算の C フ ァ イ ルを追加 し ます。
a.
mmult プ ロ ジ ェ ク ト で src を右 ク リ ッ ク し ます。
b.
[Import] を ク リ ッ ク し ます。
c.
[General] を選択 し ます。
d.
[File System] を選択 し て [Next] を ク リ ッ ク し ます。
e.
arm_sw ロ ーカル フ ァ イ ル シ ス テ ム を選択 し て、 3 つの フ ァ イ ルを選択 し ます (図 28 参照)。
X-Ref Target - Figure 28
;
図 28 : ARM CPU 用のフ ァ イルを イ ンポー ト
XAPP1170 (v2.0) 2016 年 1 月 21 日
japan.xilinx.com
27
SDK を使用する Zynq ソ フ ト ウ ェ ア デザイ ン
3.
アプ リ ケーシ ョ ン を実行す る 前に ス タ ッ ク サ イ ズ を変更する 必要があ り ます (図 29 参照)。
a.
[Project Explorer] の mmult/src にあ る lscript.ld フ ァ イ ルを ダブル ク リ ッ ク し ます。
b.
[Stack Size] を [0x2000] か ら [0x3000] に変更 し ます。
c.
フ ァ イ ルを保存 し ます。
X-Ref Target - Figure 29
;
図 29 : ス タ ッ ク サイ ズの変更
4.
ボー ド 上 こ のアプ リ ケーシ ョ ン を実行す る ために、 右 ク リ ッ ク で [Run] → [Run Configurations] を選択 し て新 し い実行
コ ン フ ィ ギ ュ レーシ ョ ン を作成 し ます。 GUI で [Xilinx C/C++ application (System Debugger)] を選択 し て [New] を ク
リ ッ ク (ま たはエン ト リ を ダブル ク リ ッ ク ) し ます。 こ れで、 新 し い コ ン フ ィ ギ ュ レーシ ョ ンが生成 さ れます。 デ
フ ォ ル ト 設定を使用 し て く だ さ い。
XAPP1170 (v2.0) 2016 年 1 月 21 日
japan.xilinx.com
28
SDK を使用する Zynq ソ フ ト ウ ェ ア デザイ ン
5.
アプ リ ケーシ ョ ン を実行 し ます。 図 30 に タ ー ミ ナルの出力画面を示 し ます。
X-Ref Target - Figure 30
• • • • • • •• • • • • •
図 30 : ZC702 ボー ド でア プ リ ケーシ ョ ン を実行 し た場合の タ ー ミ ナル出力画面
XAPP1170 (v2.0) 2016 年 1 月 21 日
japan.xilinx.com
29
SDSoC
SDSoC
ザ イ リ ン ク ス の SDSoC は、 Zynq-7000 AP SoC プ ラ ッ ト フ ォーム ([参照 11]) を使用 し てヘテ ロ ジニア ス なエンベデ ッ ド シ
ス テ ム を イ ンプ リ メ ン ト す る ための Eclipse ベース の統合開発環境です。 SDSoC 環境には、 プ ロ グ ラ マブル ロ ジ ッ ク での
ソ フ ト ウ ェ ア ア ク セ ラ レーシ ョ ンの自動化やシ ス テ ム コ ネ ク テ ィ ビ テ ィ の自動生成機能な ど を実行 し 、 シ ス テ ム全体の
最適化を行 う C/C++ コ ンパ イ ラ が含まれます。 アプ リ ケーシ ョ ンは C/C++ コ ー ド で記述 さ れ、 プ ロ グ ラ マが タ ーゲ ッ ト
プ ラ ッ ト フ ォーム と ハー ド ウ ェ アに コ ンパ イ ルす る アプ リ ケーシ ョ ン内の関数のサブセ ッ ト を特定 し ます。 その後、
SDSoC シ ス テ ム コ ンパ イ ラ に よ り アプ リ ケーシ ョ ンがハー ド ウ ェ ア と ソ フ ト ウ ェ アに コ ンパ イ ル さ れ、 フ ァ ーム ウ ェ ア、
オペレーテ ィ ン グ シ ス テ ム、 アプ リ ケーシ ョ ン実行フ ァ イ ルを含むブー ト イ メ ージ を含めた完全なエンベデ ッ ド シ ス テ
ムが Zynq デバ イ ス に イ ンプ リ メ ン ト さ れます ([参照 12])。
IPI、 HLS、 SDK ツールを使用 し て、 こ のアプ リ ケーシ ョ ン をゼ ロ か ら 開発す る 場合は約 2 日かか り ますが、 SDSoC を使
用すれば 1 時間以内で完成 さ せ る こ と がで き ます (図 31 参照)。
X-Ref Target - Figure 31
;
図 31 : 行列乗算ア プ リ ケーシ ョ ンの SDSoC プ ロ ジ ェ ク ト
XAPP1170 (v2.0) 2016 年 1 月 21 日
japan.xilinx.com
30
ま とめ
ま とめ
C ま たは C++ で記述 さ れた浮動小数点デザ イ ン を FPGA デバ イ ス に素早 く 簡単に実装で き る よ う にな り ま し た。 こ の よ
う にデザ イ ン を実装す る こ と で、 FPGA が持つ並列処理性能、 低消費電力、 組み込まれた CPU、 低 コ ス ト な ど、 さ ま ざ ま
な利点をいかす こ と がで き ます。 その他の C/C++ フ ロ ー と 同様に、 完全な ツール チ ェーンで フ ロ ー全体を と お し て包括
的な解析を行 う こ と で性能の ト レー ド オ フ を可能に し ます。 サンプル アプ リ ケーシ ョ ンは、 Vivado HLS ツールを使用 し
て 32 ビ ッ ト の浮動小数点精度に最適化 さ れた 32x32 行列乗算 コ アです。
C/C++ コ ー ド でモデル化 さ れた浮動小数点行列乗算は、 Vivado HLS で、 RTL デザ イ ンに素早 く 実装お よ び最適化で き ま
す。 その後、 IP コ ア と し てエ ク ス ポー ト で き 、 Zynq-7000 AP SoC PL サブシ ス テ ムの DMA コ ア を用い、 AXI4-Stream イ ン
タ ーフ ェ イ ス を介 し て Zynq-7000 AP SoC PS の ACP に接続 さ れます。
100MHz ク ロ ッ ク 周波数で動作す る 行列乗算ハー ド ウ ェ ア ペ リ フ ェ ラ ルは、 666MHz ク ロ ッ ク 周波数で動作する ARM
CPU で ソ フ ト ウ ェ ア を実行す る よ り も 約 5 ク ロ ッ ク サ イ ク ル早 く 演算を実行 し ます。
最後に、 こ のアプ リ ケーシ ョ ン ノ ー ト で説明 し た設計手順は、 SDSoC と い う 新 し いシ ス テ ム デザ イ ン フ ロ ーを使用する
こ と で、 すべて自動化で き ます。
リ フ ァ レ ン ス デザイ ン
こ のアプ リ ケーシ ョ ン ノ ー ト の リ フ ァ レ ン ス デザ イ ンは、 次の リ ン ク か ら ダ ウ ン ロ ー ド で き ます。
https://secure.xilinx.com/webreg/clickthrough.do?cid=343614
次の 2 つのフ ォ ルダーがあ り ます。
•
empty - HLS お よ び IPI プ ロ ジ ェ ク ト を最初か ら 構築す る ための C++ コ ー ド お よ び TCL ス ク リ プ ト が含まれます。
•
pre_built - 開発済みの HLS お よ び IPI プ ロ ジ ェ ク ト が含まれます。
表 1 に、 リ フ ァ レ ン ス デザ イ ンの詳細を示 し ます。
表 1 : リ フ ァ レ ン ス デザイ ンの詳細
パラ メ ー タ ー
説明
一般
開発者
Daniele Bagni、 Antonello Di Fresco (ザ イ リ ン ク ス)
タ ーゲ ッ ト デバ イ ス
Zynq-7000 AP SoC
ソ ース コ ー ド の提供
あり
ソ ース コ ー ド の形式
C お よ び合成ス ク リ プ ト
既存のザ イ リ ン ク ス アプ リ ケーシ ョ ン ノ ー ト / リ フ ァ レ
ン ス デザ イ ン、 ま たはサー ド パーテ ィ か ら デザ イ ンへ
の コ ー ド /IP の使用
なし
シ ミ ュ レーシ ョ ン
論理シ ミ ュ レーシ ョ ンの実施
あり
タ イ ミ ン グ シ ミ ュ レーシ ョ ンの実施
なし
論理シ ミ ュ レーシ ョ ンお よ び タ イ ミ ン グ シ ミ ュ レー
シ ョ ンでのテ ス ト ベンチの利用
あり
テ ス ト ベンチの形式
C
使用 し たシ ミ ュ レー タ /バージ ョ ン
Vivado シ ミ ュ レー タ 2015.4
SPICE/IBIS シ ミ ュ レーシ ョ ンの実施
なし
XAPP1170 (v2.0) 2016 年 1 月 21 日
japan.xilinx.com
31
参考資料
表 1 : リ フ ァ レ ン ス デザイ ンの詳細 (続き)
パラ メ ー タ ー
説明
使用 し た イ ンプ リ メ ン テーシ ョ ン ツール/バージ ョ ン
Vivado Design Suite 2015.4
ス タ テ ィ ッ ク タ イ ミ ン グ解析の実施
あり
ハー ド ウ ェ ア検証
ハー ド ウ ェ ア検証の実施
あり
使用 し たハー ド ウ ェ ア プ ラ ッ ト フ ォーム
ザ イ リ ン ク ス ZC702 ボー ド
参考資料
注記 : 日本語版のバージ ョ ンは、 英語版 よ り 古い場合があ り ます。
1.
『Zynq-7000 All Programmable SoC : コ ン セプ ト 、 ツール、 テ ク ニ ッ ク ガ イ ド (CTT)』 (UG873 : 英語版、 日本語版)
2.
「Floating-Point Design with Xilinx's Vivado HLS」 James Hrica、 Xcell Journal (2012 年 第 4 四半期)
3.
『Vivado HLS お よ び System Generator for DSP を用いた浮動小数点 PID コ ン ト ロ ー ラ ー デザ イ ン 』 (XAPP1163)
4.
『Vivado Design Suite チ ュ ー ト リ アル : IP イ ン テ グ レー タ ーを使用 し た IP サブシ ス テ ムの設計』 (UG995)
5.
『Zynq7000 XC7Z020 All Programmable SoC 向け ZC702 評価ボー ド ユーザー ガ イ ド 』 (UG850)
6.
『Vivado Design Suite ユーザー ガ イ ド : 高位合成』 (UG902 : 英語版、 日本語版)
7.
『Vivado Design Suite チ ュ ー ト リ アル : 高位合成』 (UG871 : 英語版、 日本語版)
8.
『ザ イ リ ン ク ス AXI リ フ ァ レ ン ス ガ イ ド 』 (UG761)
9.
『LogiCORE IP AXI DMA 製品ガ イ ド 』 (PG021 : 英語版、 日本語版)
10. 『Vivado Design Suite ユーザー ガ イ ド : IP イ ン テ グ レー タ ーを使用 し た IP サブシ ス テ ムの設計』 (UG994 : 英語版、日本
語版)
11. 『SDSoC 環境ユーザー ガ イ ド 』 (UG1027)
12. 『Using the SDSoC IDE for System-level HW-SW Optimization on the Zynq SoC』 Daniele Bagni、 Nick Ni、 Xcell Software
Journal、 issue 1 (2015 年 第 3 四半期)
改訂履歴
次の表に、 こ の文書の改訂履歴を示 し ます。
日付
バージ ョ ン
2016 年 1 月 21 日
2.0
Vivado 2015.4 に基づいて リ リ ース
2013 年 6 月 29 日
1.1
Vivado HLS 2012.2 お よ び PlanAhead (ISE/XPS/SDK) 14.4 に基づいて リ リ ース
XAPP1170 (v2.0) 2016 年 1 月 21 日
内容
japan.xilinx.com
32
法的通知
法的通知
本通知に基づいて貴殿ま たは貴社 (本通知の被通知者が個人の場合には 「貴殿」、 法人その他の団体の場合には 「貴社」。 以下同 じ ) に開
示 さ れ る 情報 (以下 「本情報」 と いい ます) は、 ザ イ リ ン ク ス の製品を選択お よ び使用す る こ と のためにのみ提供 さ れます。 適用 さ れ る
法律が許容す る 最大限の範囲で、 (1) 本情報は 「現状有姿」、 お よ び全て受領者の責任で (with all faults) と い う 状態で提供 さ れ、 ザ イ リ ン
ク ス は、 本通知を も っ て、 明示、 黙示、 法定を問わず (商品性、 非侵害、 特定目的適合性の保証を含みますが こ れ ら に限 ら れません)、
全ての保証お よ び条件を負わない (否認す る ) も の と し ます。 ま た、 (2) ザ イ リ ン ク ス は、 本情報 (貴殿ま たは貴社に よ る 本情報の使用を
含む) に関係 し 、 起因 し 、 関連す る 、 いかな る 種類 ・ 性質の損失ま たは損害について も 、 責任を負わない (契約上、 不法行為上 (過失の場
合を含む)、 その他のいかな る 責任の法理に よ る かを問わない) も の と し 、 当該損失ま たは損害には、 直接、 間接、 特別、 付随的、 結果
的な損失ま たは損害 (第三者が起 こ し た行為の結果被っ た、 デー タ 、 利益、 業務上の信用の損失、 その他あ ら ゆ る 種類の損失や損害を含
みます) が含ま れ る も の と し 、 それは、 た と え当該損害や損失が合理的に予見可能であ っ た り 、 ザ イ リ ン ク ス がそれ ら の可能性について
助言を受けていた場合であ っ た と し て も 同様です。 ザ イ リ ン ク ス は、 本情報に含まれ る いかな る 誤 り も 訂正す る 義務を負わず、 本情報
ま たは製品仕様のア ッ プデー ト を貴殿ま たは貴社に知 ら せ る 義務 も 負い ません。 事前の書面に よ る 同意のない限 り 、 貴殿ま たは貴社は
本情報を再生産、 変更、 頒布、 ま たは公に展示 し てはな り ません。 一定の製品は、 ザ イ リ ン ク ス の限定的保証の諸条件に従 う こ と と な
る ので、 http://japan.xilinx.com/legal.htm#tos で見 ら れ る ザ イ リ ン ク ス の販売条件を参照 し て下 さ い。 IP コ アは、 ザ イ リ ン ク ス が貴殿ま た
は貴社に付与 し た ラ イ セ ン ス に含まれ る 保証 と 補助的条件に従 う こ と にな り ます。 ザ イ リ ン ク ス の製品は、 フ ェ イ ルセーフ と し て、 ま
たは、 フ ェ イ ルセーフ の動作を要求す る アプ リ ケーシ ョ ンに使用す る ために、 設計 さ れた り 意図 さ れた り し てい ません。 その よ う な重
大な アプ リ ケーシ ョ ンにザ イ リ ン ク ス の製品を使用す る 場合の リ ス ク と 責任は、 貴殿ま たは貴社が単独で負 う も のです。
http://japan.xilinx.com/legal.htm#tos で見 ら れ る ザ イ リ ン ク ス の販売条件を参照 し て く だ さ い。
自動車用のアプ リ ケーシ ョ ンの免責条項
ザ イ リ ン ク ス の製品は、 フ ェ イ ルセーフ と し て設計 さ れた り 意図 さ れてはお ら ず、 ま た、 フ ェ イ ルセーフ の動作を要求す る アプ リ ケー
シ ョ ン (具体的には、 (I) エアバ ッ グの展開、 (II) 車の コ ン ト ロ ール (フ ェ イ ルセーフ ま たは余剰性の機能 (余剰性を実行す る ためのザ イ リ
ン ク ス の装置に ソ フ ト ウ ェ ア を使用す る こ と は含ま れません) お よ び操作者が ミ ス を し た際の警告信号があ る 場合を除 き ます)、 (III) 死亡
や身体傷害を導 く 使用、 に関す る アプ リ ケーシ ョ ン) を使用す る ために設計 さ れた り 意図 さ れた り も し てい ません。 顧客は、 その よ う な
アプ リ ケーシ ョ ンにザ イ リ ン ク ス の製品を使用す る 場合の リ ス ク と 責任を単独で負い ます。
© Copyright 2013-2016 Xilinx, Inc. Xilinx、 Xilinx の ロ ゴ、 Artix、 ISE、 Kintex、 Spartan、 Virtex、 Vivado、 Zynq、 お よ び こ の文書に含ま れ る
その他の指定 さ れたブ ラ ン ド は、 米国お よ びその他各国のザ イ リ ン ク ス社の商標です。 すべてのその他の商標は、 それぞれの保有者に
帰属 し ます。
こ の資料に関す る フ ィ ー ド バ ッ ク お よ び リ ン ク な ど の問題につ き ま し ては、 [email protected] ま で、 ま たは各ページの右下
にあ る [フ ィ ー ド バ ッ ク 送信] ボ タ ン を ク リ ッ ク す る と 表示 さ れ る フ ォームか ら お知 ら せ く だ さ い。 フ ィ ー ド バ ッ ク は日本語で入力可能
です。 いただ き ま し た ご意見を参考に早急に対応 さ せていただ き ます。 なお、 こ の メ ール ア ド レ スへのお問い合わせは受け付けてお り
ません。 あ ら か じ めご了承 く だ さ い。
XAPP1170 (v2.0) 2016 年 1 月 21 日
japan.xilinx.com
33
Fly UP