vivado design suite - xilinx › support › documentation › sw_manuals... · 2019-10-15 ·...

604
Vivado Design Suite ユーザー ガイド 高位合成 UG902 (v2015.3) 2015 9 30 本資料は表記のバージョンの英語版を翻訳したもので、内容に相違が生じる場合には原文を優先します。資 料によっては英語版の更新に対応していないものがあります。日本語版は参考用としてご使用の上、最新情 報につきましては、必ず最新英語版をご参照ください。

Upload: others

Post on 10-Jun-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

  • Vivado Design Suite ユーザー ガイド

    高位合成

    UG902 (v2015.3) 2015 年 9 月 30 日

    本資料は表記のバージョンの英語版を翻訳したもので、内容に相違が生じる場合には原文を優先します。資料によっては英語版の更新に対応していないものがあります。日本語版は参考用としてご使用の上、最新情報につきましては、必ず最新英語版をご参照ください。

  • 改訂履歴

    次の表に、 この文書の改訂履歴を示します。

    日付 バージョ ン 改訂内容

    2015 年 9 月 30 日 2015.3 第 1 章 「高位合成」 : 「新規合成プロジェク トの作成」 に GCC ウェブサイ トの リ ンクを追加、 SystemC デザインのテス トベンチ ヘッダー ファ イルに関する注記を追加、 「RTL の検証」 に開始間隔の計算に関する情報を追加、 表 1-3 に DCP ファ イルの HDL ラ ッパーに関する情報を追加、「半精度浮動小数点データ型」 を追加、表 1-16 の sqrt にハーフ データ タイプを追加、 「AXI4-Lite インターフェイスでのクロ ッ クおよびリセッ トの制御」 を追加、「AXI4 マスター インターフェイス」 ,をアップデート、 「AXI4 インターフェイスのアドレス オフセッ トの制御」、 「DATAFLOW 最適化の制限」 のコード例をアップデート、 表 1-28に新しいコアを追加、表 1-29 に ROM_nP_BRAM および ROM_nP_LUTRAM に関する情報を追加、 「ハード ウェア コアの制御」 の 3 段パイプライン乗算器のコード例をアップデート、 「C/RTL 協調シ ミ ュレーシ ョ ンの使用」 の [Dump Trace] オプシ ョ ンをアップデート、「RTL シ ミ ュレーシ ョ ンの解析」 を追加、 「C/RTL 協調シ ミ ュレーシ ョ ンのデバッグ」 を追加、 表 1-33 に DCP ファ イルの HDL ラ ッパーに関する情報を追加第 2 章 「高位合成の C ライブラ リ 」 : 「メモ リ ウ ィンド ウ バッファー」 のコード例をアップデート、 「線形代数関数の最適化」 を追加

    第 3 章 「高位合成コーディング スタイル」 : 「配列」 のコード例をアップデート、 「float および double 型」 に 『Vivado HLS を使用した浮動小数点デザイン』 (XAPP599) のリ ンクを追加

    第 4 章 「高位合成 リ フ ァ レン ス ガイ ド」 : 「cosim_design」 か ら port_hier 設定を削除、「set_directive_interface」 に -bundle オプシ ョ ンを追加、 「ブロ ッ ク レベル I/O プロ ト コル」をアップデート、 「ポート レベル I/O プロ ト コル」 をアップデート、 「hls::CornerHarris」 の説明をアップデート

    図 1-13、、図 1-14、図 1-45、図 4-6、図 4-7、図 4-8、図 4-9、図 4-10、図 4-11、図 4-12、図 4-13、および 図 4-14 をアップデート

    高位合成 japan.xilinx.com 2UG902 (v2015.3) 2015 年 9 月 30 日

    http://japan.xilinx.comhttp://japan.xilinx.com/about/feedback.html?docType=User_Guides&docId=UG902&Title=Vivado%20Design%20Suite%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B%20%3A%20%26%2339640%3B%26%2320301%3B%26%2321512%3B%26%2325104%3B%20%28UG902%29&releaseVersion=2015.3&docPage=2

  • 2015 年 4 月 1 日 2015.1 ガイ ド全体で OpenCL™ C 合成およびシ ミ ュ レーシ ョ ンへの リ フ ァ レンスを追加し、SystemC シ ミ ュレーシ ョ ンへのリ ファレンスを削除第 1 章 「高位合成」 : OpenCL C に関する情報を 「Vivado HLS の理解」 に追加、 「OpenCLAPI C カーネル合成」 を追加、「新規合成プロジェク トの作成」 に C 階層に関する注記を追加、 「C 合成結果の解析」 に SSI テク ノ ロジー デバイスに関する情報を追加、 「最適化指示の適用」 をアップデート、 「サンプル デザインおよび参考資料」 をアップデート、 「パイプライン演算」 のコード例をアップデート、 「下位関数の合成」 のコード例をアップデート、「DSP 関数」 を追加、表 1-21 に DDS IP 情報を追加、「インターフェイス合成および OpenCLAPI C」 を追加、 「インターフェイスの指定」 をアップデート、 「手動のインターフェイス設定」 をアップデート、「C ド ラ イバー ファ イル」 に例を追加、「AXI4 マスター インターフェイス」 をアップデート、「64 ビッ ト アドレス機能のある AXI4 インターフェイスを作成」 を追加、 「SSI テク ノ ロジー デバイスを使用したインターフェイスの管理」 を追加、 updateddefault to onehot in 「RTL 出力」 のデフォルト を onehot にアップデート、 「ループの自動パイプラ イ ン」 に config_compile pipeline_loops オプシ ョ ンに関する注記を追加、「DATAFLOW 最適化の制限」 をアップデート、 表 1-27 をアップデート、 表 1-29 をアップデート、 「論理演算式の最適化」 をアップデート、 「RTL シ ミ ュレータのサポート 」 をアップデート、 「C/RTL 協調シ ミ ュレーシ ョ ンの使用」 に [Compiled Library Location] を追加第 2 章 「高位合成の C ラ イブラ リ 」 : 「任意精度固定小数点データ型」 をアップデート、「HLS math ラ イブラ リの精度」 をアップデート、 表 2-17 をアップデート、 表 2-18 に DDSIP 情報を追加、 「FFT のランタイム コンフ ィギュレーシ ョ ンと ランタイム ステータス」 へmax_nfft およびオーバーフロー ステータスに関する注記を追加、 filter_type に hilbert_filterを含めるよ うに 表 2-22 をアップデート、 「DDS IP ライブラ リ 」 を追加、 「HLS DSP ラ イブラ リ 」 を追加.第 3 章 「高位合成コーディング スタイル」 : 「OpenCL API C テス トベンチ」 を追加、「任意精度データ型」 を追加、 「union」 のサポート されない項目のリ ス ト をアップデート第 4 章 「高位合成リ ファレンス ガイ ド」 : 「set_directive_interface」 をアップデート、 「HLS線形代数関数」 から hls_ from 関数名を削除、 「cholesky_inverse」 をア ッ プデー ト、「qr_inverse」 をアップデート、 「HLS DSP ライブラ リ関数」 を追加、 「定数 ( リ テラル) からの初期化および代入」 のコード例をアップデート、 「三項演算子」 を追加、 「範囲選択」 のコード例をアップデート

    図 1-4、、 図 1-7、 図 1-10、 図 1-13、 図 1-24、 図 1-25、 図 1-26、 図 1-31、 図 1-36、 図 1-77、図 1-83、 および 図 4-7 をアップデート

    日付 バージョ ン 改訂内容

    高位合成 japan.xilinx.com 3UG902 (v2015.3) 2015 年 9 月 30 日

    http://japan.xilinx.comhttp://japan.xilinx.com/about/feedback.html?docType=User_Guides&docId=UG902&Title=Vivado%20Design%20Suite%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B%20%3A%20%26%2339640%3B%26%2320301%3B%26%2321512%3B%26%2325104%3B%20%28UG902%29&releaseVersion=2015.3&docPage=3

  • 目次

    第 1章 : 高位合成C ベースの FPGA デザインの概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6Vivado HLS の理解 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11Vivado HLS の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18Vivado HLS UltraFast 設計手法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64インターフェイスの管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131デザイン最適化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168RTL 検証 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211RTL デザインのエクスポート . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220

    第 2章 : 高位合成の C ライブラリVivado HLS の C ライブラ リの概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227任意精度データ型ライブラ リ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227HLS ス ト リーム ラ イブラ リ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241hls_math ライブラ リ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247HLS ビデオ ラ イブラ リ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255HLS IP ラ イブラ リ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268HLS 線形代数ライブラ リ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287HLS DSP ライブラ リ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302

    第 3章 : 高位合成コーディング スタイルコーディング スタイルの概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305サポート されない C コンス ト ラ ク ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305C テス トベンチ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318ループ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319配列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328データ型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335C++ ク ラスおよびテンプレート . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360アサート . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367SystemC の合成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370

    第 4章 : 高位合成リファレンス ガイドコマンド リ ファレンス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390GUI リ ファレンス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447インターフェイス合成リ ファレンス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451AXI4-Lite スレーブの C ド ラ イバーのリ ファレンス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466HLS ビデオ関数ライブラ リ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479HLS 線形代数関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529HLS DSP ライブラ リ関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536C の任意精度型. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551

    高位合成 japan.xilinx.com 4UG902 (v2015.3) 2015 年 9 月 30 日

    http://japan.xilinx.comhttp://japan.xilinx.com/about/feedback.html?docType=User_Guides&docId=UG902&Title=Vivado%20Design%20Suite%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B%20%3A%20%26%2339640%3B%26%2320301%3B%26%2321512%3B%26%2325104%3B%20%28UG902%29&releaseVersion=2015.3&docPage=4

  • C++ の任意精度型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562C++ の任意精度固定小数点型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577SystemC 型と Vivado HLS 型の比較. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597

    付録 A : その他のソースおよび法的通知ザイ リ ンクス リ ソース . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603ソ リ ューシ ョ ン センター . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603参考資料 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603ト レーニング リ ソース . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604お読みください : 重要な法的通知 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604

    高位合成 japan.xilinx.com 5UG902 (v2015.3) 2015 年 9 月 30 日

    http://japan.xilinx.comhttp://japan.xilinx.com/about/feedback.html?docType=User_Guides&docId=UG902&Title=Vivado%20Design%20Suite%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B%20%3A%20%26%2339640%3B%26%2320301%3B%26%2321512%3B%26%2325104%3B%20%28UG902%29&releaseVersion=2015.3&docPage=5

  • 第 1章

    高位合成

    C ベースの FPGA デザインの概要ザイ リ ンクスの Vivado® HLS (高位合成) ツールでは、 C 仕様がレジスタ ト ランスファー レベル (RTL) インプ リ メンテーシ ョ ンに変換され、 ザイ リ ンクスのフ ィールド プログラマブル ゲート アレイ (FPGA) に合成されます。 C 仕様は C、 C++、 SystemC、 または Open Computing Language (OpenCL™) API C カーネルで記述できます。 FPGA では従来のプロセッサよ り もパフォーマンス、 コス ト、 消費電力に優れた大規模な並列アーキテクチャが提供されます。 本章では、 高位合成の概要について説明します。

    注記 : FPGA アーキテクチャおよび Vivado HLS の基本的な概念については、 『Vivado 高位合成を使用した FPGA デザインの概要』 (UG998) [参照 1] を参照してください。

    高位合成の利点

    ハードウェア ド メ インと ソフ ト ウェア ド メ インをつなぐ役割のある高位合成を使用する と、 次のよ うな利点があ ります。

    • ハードウェア設計者にとっては生産性の改善

    ハードウェア設計者は高い抽象度で記述しても、 高パフォーマンスのハード ウェアを作成できます。

    • ソフ ト ウェア設計者にとってはシステム パフォーマンスの改善

    ソフ ト ウェア開発者は、新しいコンパイル ターゲッ ト (FPGA) でアルゴ リズム内の計算が集中しているパーツを加速できます。

    高位合成設計手法を使用する と、 次が実行できます。

    • C レベルでアルゴ リズムを開発

    開発時間がかかるレベル (インプリ メンテーシ ョ ンの詳細から抽出) で記述

    • C レベルで検証

    デザインの演算が正しいかど うかを従来のハードウェア記述言語よ り もすばやく検証

    • 最適化指示子を使用して C 合成プロセスを制御

    特定の高パフォーマンス ハードウェア インプ リ メンテーシ ョ ンを作成

    • 最適化指示子を使用して C ソース コードから複数のインプリ メンテーシ ョ ンを作成

    設計空間から最適なインプ リ メンテーシ ョ ンが見つけやすくなる

    • 可読でポータブルな C ソース コードを作成

    C ソースを別の FPGA デバイスにターゲッ ト変更したり、 新しいプロジェク トに取り込むこ とができます。

    高位合成 japan.xilinx.com 6UG902 (v2015.3) 2015 年 9 月 30 日

    http://japan.xilinx.comhttp://japan.xilinx.com/about/feedback.html?docType=User_Guides&docId=UG902&Title=Vivado%20Design%20Suite%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B%20%3A%20%26%2339640%3B%26%2320301%3B%26%2321512%3B%26%2325104%3B%20%28UG902%29&releaseVersion=2015.3&docPage=6

  • 第 1 章 : 高位合成

    高位合成の基礎

    高位合成には、 次の段階が含まれます。

    • スケジュール

    各クロ ッ ク サイ クルでどの演算が実行されるかは、 次に基づいて決ま り ます。

    ° ク ロ ッ ク サイ クルの長さまたはクロ ッ ク周波数

    ° 演算が終了するまでにかかる時間 (ターゲッ ト デバイスで定義)

    ° ユーザー別の最適化指示子

    クロ ッ ク周期が長い場合や、 よ り高速な FPGA がターゲッ トの場合、 1 つのクロ ッ ク サイクル内でよ り多くの演算が終了できるので、 すべての演算が 1 ク ロ ッ クで終了するこ と もあ り ます。 反対に、 クロ ッ ク周期が短い場合やターゲッ ト デバイスの速度が遅い場合は、 高位合成で自動的に演算がよ り多くのク ロ ッ ク サイ クルで終了するよ うにスケジュールされます。また、演算の中にはマルチサイ クル リ ソース と してインプリ メン トする必要のあるものもあ り ます。

    • バインド

    どのハード ウェア リ ソースがスケジュールされた各演算をインプ リ メ ン トするのかを決定します。 最適なソリ ューシ ョ ンをインプ リ メン トするため、 高位合成ではターゲッ ト デバイスに関する情報が使用されます。

    • 制御ロジッ クの抽出

    制御ロジッ クを抽出して、 RTL デザインで演算を順序付ける有限ステート マシン (FSM) を作成します。

    高位合成では、 C コードが次のよ うに合成されます。

    • 最上位関数の引数は RTL の I/O ポートに合成

    • C 関数は RTL 階層のブロッ クに合成

    C コードに下位関数の階層が 1 つ含まれる場合、最終的な RTL デザインには、元の C 関数の階層と 1:1 で対応するモジュールまたはエンティティの階層が含まれます。 関数のすべてのインスタンスが同じ RTL インプ リ メ ンテーシ ョ ンまたはブロ ッ クを使用します。

    • C 関数のループはデフォルトで閉じた状態で維持

    ループが閉じられている場合、合成ではループの反復 1 回分のロジッ クが作成され、 RTL デザインでシーケンス内のループの反復ごとにこのロジッ クが実行されるよ うになり ます。最適化指示子を使用する と、ループを展開できるので、 反復が並列で実行されるよ うにできます。

    • C コードの配列は最終的な FPGA デザインではブロッ ク RAM に合成

    配列が最上位関数インターフェイスにある場合は、 高位合成でその配列がデザイン外のブロッ ク RAM にアクセスするためのポート と してインプ リ メン ト されるよ うになり ます。

    高位合成では、 デフォル ト ビヘイビアー、 制約および指定された最適化指示子に基づいて最適なインプ リ メ ンテーシ ョ ンが作成されます。最適化指示子を使用する と、内部ロジッ ク と I/O ポートのデフォルト ビヘイビアーを変更および制御できるので、 同じ C コードから さまざまなハード ウェア インプリ メンテーシ ョ ンを生成できます。

    デザインが要件を満たしているかど うか判断するには、高位合成で生成された合成レポートのパフォーマンス メ ト リクスを確認してください。 レポート を解析する と、最適化指示子を使用してインプリ メンテーシ ョ ンをさ らに改良できます。 合成レポートには、 次のパフォーマンス メ ト リ クスに関する情報が含まれます。

    • エリア : ルッ クアップ テーブル (LUT)、 レジスタ、 ブロ ッ ク RAM、 DSP48 など、 FPGA で使用可能な リ ソースに基づいたデザインをインプ リ メン トするのに必要なハードウェア リ ソースの量

    • レイテンシ : 関数がすべての出力値を計算するのに必要なクロ ッ ク サイクル数

    • 開始間隔 (II) : 関数が新しい入力データを受け入れ可能になるまでのクロ ッ ク数

    高位合成 japan.xilinx.com 7UG902 (v2015.3) 2015 年 9 月 30 日

    http://japan.xilinx.comhttp://japan.xilinx.com/about/feedback.html?docType=User_Guides&docId=UG902&Title=Vivado%20Design%20Suite%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B%20%3A%20%26%2339640%3B%26%2320301%3B%26%2321512%3B%26%2325104%3B%20%28UG902%29&releaseVersion=2015.3&docPage=7

  • 第 1 章 : 高位合成

    • ループの反復レイテンシ : ループの 1 反復を完了するのにかかるクロ ッ ク サイクル数

    • ループ開始間隔 : ループの次の反復がデータを処理し始めるまでのクロ ッ ク サイクル数

    • ループ レイテンシ : ループのすべての反復を実行するサイクル数

    スケジュールおよびバインドの例

    次の図は、 このコード例のスケジュール段階およびバインド段階を示しています。

    int foo(char x, char a, char b, char c) {char y;y = x*a+b+c;return y

    }

    この例のスケジュール段階では、高位合成で次の演算が各クロ ッ ク サイクル中に発生するよ うにスケジュールされます。

    • 1 つ目のクロ ッ ク サイクル : 乗算と 1 回目の加算

    • 2 つ目のクロ ッ ク サイクル : 2 回目の加算と出力生成

    注記 :図の 1 つ目と 2 つ目のクロ ッ ク っサイ クル間の正方形は、内部レジスタが変数を格納したこ とを示しています。この例の場合、 高位合成では、 加算の出力が 1 ク ロ ッ ク サイクルでレジスタに入力されるこ とのみを必要と します。1 つ目のサイ クルでは x、 a、 b データ ポートが読み込まれ、 2 つ目のサイクルでは c データ ポートが読み込まれて、出力 y が生成されます。

    X-Ref Target - Figure 1-1

    図 1‐1 : スケジュールおよびバインドの例

    高位合成 japan.xilinx.com 8UG902 (v2015.3) 2015 年 9 月 30 日

    http://japan.xilinx.comhttp://japan.xilinx.com/about/feedback.html?docType=User_Guides&docId=UG902&Title=Vivado%20Design%20Suite%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B%20%3A%20%26%2339640%3B%26%2320301%3B%26%2321512%3B%26%2325104%3B%20%28UG902%29&releaseVersion=2015.3&docPage=8

  • 第 1 章 : 高位合成

    最終的なハードウェア インプリ メンテーシ ョ ンでは、高位合成で最上位関数への引数が I/O (入力および出力) ポートと してインプ リ メン ト されます。 この例の場合、引数は単純なデータ ポートです。各入力変数は char 型なので、入力データ ポートはすべて 8 ビッ ト幅です。return 関数は 32 ビッ トの int データ型で、出力データ ポートは 32 ビット幅です。

    重要 : ハードウェアに C コードをインプリ メン トする利点は、すべての演算がよ り少ないクロ ッ ク数で終了する点にあ り ます。 この例の場合、 演算は 2 ク ロ ッ ク サイ クルだけで終了します。 CPU では、 このよ うな単純なコード例でも、 終了するのにさらに多くのクロ ッ ク サイクルがかかり ます。

    この例の最初のバインド段階では、高位合成で組み合わせ乗算器を使用して乗算演算 (Mul) がインプリ メン ト されて、組み合わせ加減算器 を使用して両方の加算演算 (AddSub) がインプリ メン ト されます。

    最後のバインド段階では、高位合成で DSP48 を使用して乗算器と加算演算の 1 つがインプリ メン ト されます。DSP48リ ソースは、 FPGA アーキテクチャで使用可能な計算ブロ ッ クで、 高パフォーマンス と効率的なインプ リ メ ンテーシ ョ ンのバランスを理想的な状態にします。

    制御ロジックの抽出と  I/O ポート  インプリ メンテーシ ョ ン

    次の図は、 次のコード例の制御ロジッ クの抽出と I/O ポートのインプリ メンテーシ ョ ンを示しています。

    void foo(int in[3], char a, char b, char c, int out[3]) {int x,y;for(int i = 0; i < 3; i++) {x = in[i]; y = a*x + b + c; out[i] = y;

    }}

    このコード例では、 前の例と同じ演算が実行されていますが、 演算が for-loop 内で実行され、 関数引数のうちの 2 つが配列である点が異なり ます。 この結果、 for-loop 内のロジッ クはコードがスケジュールされたと きに 3 回実行され

    X-Ref Target - Figure 1-2

    図 1‐2 :制御ロジックの抽出と  I/O ポート  インプリ メンテーシ ョ ン

    高位合成 japan.xilinx.com 9UG902 (v2015.3) 2015 年 9 月 30 日

    http://japan.xilinx.comhttp://japan.xilinx.com/about/feedback.html?docType=User_Guides&docId=UG902&Title=Vivado%20Design%20Suite%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B%20%3A%20%26%2339640%3B%26%2320301%3B%26%2321512%3B%26%2325104%3B%20%28UG902%29&releaseVersion=2015.3&docPage=9

  • 第 1 章 : 高位合成

    ます。 高位合成では C コードから自動的に制御ロジッ クが抽出され、 RTL デザインで有限ステート マシン (FSM) が作成されて、 これらの演算が順番付けられます。 最終的な RTL デザインでは、 最上位関数の引数がポート と してインプ リ メン ト されます。 char 型のスカラー変数は標準の 8 ビッ ト データ バス ポートにどのよ うにマップされます。in および out などの 配列引数には、 データ コレクシ ョ ン全体が含まれます。

    高位合成では、 配列はブロ ッ ク RAM にデフォルトで合成されますが、 FIFO、 分散 RAM、 および個別レジスタなど、その他のオプシ ョ ンに合成するこ と もできます。配列を最上位関数で引数と して使用する と、高位合成ではブロ ッ クRAM が最上位関数の外部にある と仮定され、 デザイン外部のブロ ッ ク RAM にアクセスするために自動的にポート (データ ポート、 アドレス ポート、 および必要なチップ イネーブル信号または書き込みイネーブル信号) が作成されます。

    FSM ではデータをレジスタに格納するタイ ミ ングおよび I/O 制御信号のステートが制御されます。FSM は C0 ステートで開始され、 次のクロ ッ クで C1 ステートにな り、 その後、 C2 ステート、 C3 ステートになり ます。 これは、 C1 (および C2、 C3) をあと 2 回反復してから、 C0 ステートに戻り ます。

    注記 : これは、 C コードの for-loop の制御構造とかな り類似しています。 ステートの全体の順番は、 C0、 {C1, C2,C3}、 {C1, C2, C3}、 {C1, C2, C3} で、 最後に C0 に戻り ます。

    b と c の加算は 1 回だけ必要なので、 高位合成では、 この演算が for-loop 外に移動され、 C0 ステートに戻されます。その加算結果が、 C3 ステートになるたびに再利用されます。

    デザインは in からのデータを読み込んで、 x に格納します。 FSM は最初のエレ メン トのアドレスを C1 に生成します。 また、 C1 ステートでは、 C1、 C2、 C3 ステート を何度反復する必要があるのかを記録するために、 加算器がインク リ メン ト します。 C2 ステートでは、 ブロ ッ ク RAM が in のデータを戻して、 変数 x と して格納します。

    高位合成は、 a ポートからのデータ とその他の値を読み込んで計算を実行して、最初の y 出力を生成します。 FSM はこの値をブロ ッ ク外に格納するために正しいアドレス と制御信号を生成します。 この後、 デザインが C1 ステートに戻って、 配列/ブロ ッ ク RAM の in から次の値を読み込みます。 このプロセスは、 すべての出力が書き出されるまで続きます。 この後、 デザインは C0 ステートに戻って b および c の次の値を読み込んで、 プロセスを最初から再開します。

    パフォーマンス メ ト リクスの例

    次の図は、 「制御ロジッ クの抽出と I/O ポート インプ リ メ ンテーシ ョ ン」 のコードの実行 (各クロ ッ ク サイ クルのステート、 読み込み、 計算、 書き込みなど) をサイ クルごとに示したものです。

    高位合成 japan.xilinx.com 10UG902 (v2015.3) 2015 年 9 月 30 日

    http://japan.xilinx.comhttp://japan.xilinx.com/about/feedback.html?docType=User_Guides&docId=UG902&Title=Vivado%20Design%20Suite%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B%20%3A%20%26%2339640%3B%26%2320301%3B%26%2321512%3B%26%2325104%3B%20%28UG902%29&releaseVersion=2015.3&docPage=10

  • 第 1 章 : 高位合成

    この例の場合、 パフォーマンスは次のよ うになり ます。

    • レイテンシ : すべての値を出力するのに 9 ク ロ ッ ク サイクル分かかっています。

    注記 :出力が配列の場合、 レイテンシは配列の最後の出力値に合わせて計測されます。

    • 開始間隔 (II) : II は 10 ですので、 関数が新しい入力読み込みセッ ト を開始してから入力データの次のセッ トのプロセスを開始するまでに 10 ク ロ ッ ク サイ クルかかっています。

    注記 : 1 つの関数がすべて実行されるのにかかる時間は、 1 ト ランザクシ ョ ンと呼ばれます。 この例の場合、関数が次のト ランザクシ ョ ン用のデータを受信できるまでに 11 ク ロ ッ ク サイクルかかり ます。

    • ループの反復レイテンシ : 各ループ反復のレイテンシは 3 ク ロ ッ ク サイクルです。

    • ループ II : 間隔は 3 です。

    • ループ レイテンシ : レイテンシは 9 ク ロ ッ ク サイ クルです。

    Vivado HLS の理解ザイ リ ンクス Vivado HLS ツールは、 C 関数をハードウェア システムに統合可能な IP ブロ ッ クに合成します。 VivadoHLS は残りのザイ リ ンクス デザイン ツールに統合されており、 包括的な言語サポート と C アルゴ リ ズムに対して最適なインプ リ メンテーシ ョ ンを作成する機能が提供されています。

    Vivado HLS デザイン フローは、 次のよ うにな り ます。

    X-Ref Target - Figure 1-3

    図 1‐3 : レイテンシと開始間隔の例

    高位合成 japan.xilinx.com 11UG902 (v2015.3) 2015 年 9 月 30 日

    http://japan.xilinx.comhttp://japan.xilinx.com/about/feedback.html?docType=User_Guides&docId=UG902&Title=Vivado%20Design%20Suite%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B%20%3A%20%26%2339640%3B%26%2320301%3B%26%2321512%3B%26%2325104%3B%20%28UG902%29&releaseVersion=2015.3&docPage=11

  • 第 1 章 : 高位合成

    1. C アルゴ リズムをコンパイル、 実行 (シ ミ ュレーシ ョ ン) およびデバッグ

    注記 :高位合成では、 コンパイル済み C プログラムの実行が 「C シ ミ ュレーシ ョ ン」 と呼ばれます。 C アルゴ リズムを実行する と、 そのアルゴ リズムが正し く機能するかど うかを検証する関数がシ ミ ュレーシ ョ ンされます。

    2. C アルゴ リズムを RTL シ ミ ュレーシ ョ ンに合成 (オプシ ョ ンでユーザーの最適化指示子を使用可能)

    3. 包括的なレポート を生成してデザインを解析

    4. プッシュボタン フローを使用して RTL インプリ メンテーシ ョ ンを検証

    5. RTL インプリ メンテーシ ョ ンを選択した IP フォーマッ トにパッケージ

    入力および出力

    次は、 Vivado HLS への入力です。

    • C、 C++、 SystemC、 または OpenCL API C カーネルで記述される C 関数

    これは Vivado HLS への主な入力です。 この関数には、 下位関数の階層を含めるこ とができます。

    • 制約

    制約は必須で、 クロ ッ ク周期、 ク ロ ッ クのばらつき、 FPGA ターゲッ ト などが含まれます。 指定しない場合、 クロ ッ クのばらつきはデフォルトでクロ ッ ク周期の 12.5% に設定されます。

    • 指示子

    指示子はオプシ ョ ンで、合成プロセスで特定のビヘイビアーまたは最適化がインプリ メン ト されるよ うになり ます。

    • C テス トベンチおよびその他の関連ファイル

    Vivado HLS では、C テス トベンチを使用して、合成前に C 関数がシ ミ ュレーシ ョ ンされ、C/RTL 協調シ ミ ュレーシ ョ ンで RTL 出力が検証されます。

    C 入力ファイル、 指示子、 および制約は Vivado のグラフ ィカル ユーザー インターフェイス (GUI) を使用して VivadoHLS プロジェク トにインタラ クティブに追加できるほか、コマンド プロンプ トで Tcl コマンドを入力しても追加できます。 また、 Tcl ファ イルを作成してバッチ モードでコマンドを実行するこ と もできます。

    次は、 Vivado HLS からの出力です。

    • ハードウェア記述言語 (HDL) 形式の RTL インプリ メンテーシ ョ ン ファ イル

    これは Vivado HLS からの主な出力です。Vivado 合成を使用する と、RTL をゲート レベルのインプリ メンテーシ ョンおよび FPGA ビッ ト ス ト リーム ファ イルに合成できます。RTL は、次の業界標準フォーマッ トで使用できます。

    ° VHDL (IEEE 1076-2000)

    ° Verilog (IEEE 1364-2001)

    Vivado HLS はインプリ メンテーシ ョ ン ファ イルを IP ブロッ ク と してパッケージにし、ザイ リ ンクス デザイン フローのその他のツールで使用できるよ うにします。 論理合成を使用する と、 パッケージした IP を FPGA ビッ トス ト リームに合成できます。

    • レポート ファ イル

    この出力は、 合成、 C/RTL シ ミ ュレーシ ョ ンおよび IP パッケージの後に生成されます。

    高位合成 japan.xilinx.com 12UG902 (v2015.3) 2015 年 9 月 30 日

    http://japan.xilinx.comhttp://japan.xilinx.com/about/feedback.html?docType=User_Guides&docId=UG902&Title=Vivado%20Design%20Suite%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B%20%3A%20%26%2339640%3B%26%2320301%3B%26%2321512%3B%26%2325104%3B%20%28UG902%29&releaseVersion=2015.3&docPage=12

  • 第 1 章 : 高位合成

    次の図は、 Vivado HLS の入力および出力ファイルの概要を示しています。

    テストベンチ、 言語サポート、 C ライブラリC プログラムではどれでも、 最上位関数が main() と呼ばれます。 Vivado HLS デザイン フローでは、 main() の下のレベルの関数を合成で最上位関数と して指定できます。 最上位関数 main() は合成できません。 次はその他の規則です。

    • 合成で最上位関数と して選択できる関数は 1 つだけです。

    • 最上位関数よ り下の階層にある関数も合成されます。

    • 最上位関数の下の階層にない階層を合成する場合は、 1 つの最上位関数に統合しないと合成できません。

    • OpenCL API C カーネルの検証フローには、 Vivado HLS フローでの特別な処理が必要です。 詳細は、 第 3 章の「OpenCL API C テス トベンチ」 を参照してください。

    テストベンチ

    Vivado HLS デザイン フローを使用する場合、 論理的に正し くない C 関数を合成して、 インプリ メンテーシ ョ ンの詳細を解析して関数が予想通りに実行されない原因とつき とめるのに、時間がかかってしまいます。生産性を改善するには、 合成前にテス トベンチを使用して C 関数が正し く機能するかど うかを検証しておく必要があ り ます。

    C テス トベンチには、 main() 関数と最上位関数の階層にない下位関数がすべて含まれます。 これらの関数では、 合成用に関数へスティ ミ ュラスを提供し、 その出力を消費するこ とで、合成の最上位関数が正し く機能しているかど うかが検証されます。

    X-Ref Target - Figure 1-4

    図 1‐4 : Vivado HLS のデザイン フロー

    高位合成 japan.xilinx.com 13UG902 (v2015.3) 2015 年 9 月 30 日

    http://japan.xilinx.comhttp://japan.xilinx.com/about/feedback.html?docType=User_Guides&docId=UG902&Title=Vivado%20Design%20Suite%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B%20%3A%20%26%2339640%3B%26%2320301%3B%26%2321512%3B%26%2325104%3B%20%28UG902%29&releaseVersion=2015.3&docPage=13

  • 第 1 章 : 高位合成

    Vivado HLS ではこのテス トベンチを使用して、 C シ ミ ュレーシ ョ ンがコンパイルされて実行されます。 コンパイルプロセス中に [Launch Debugger] オプシ ョ ンを選択する と、 完全な C デバッグ環境を開いて C シ ミ ュレーシ ョ ンを解析できます。 テス トベンチの詳細は、 第 3 章の 「C テス トベンチ」 を参照してください。

    推奨 : Vivado HLS では、 C テス トベンチを使用して、合成前に C 関数をシ ミ ュレーシ ョ ンして、 RTL 出力を自動的に検証するので、 テス トベンチを使用するこ とを強くお勧めします。

    言語サポート

    Vivado HLS では、 C コンパイル/シ ミ ュレーシ ョ ンに次の規格がサポート されています。

    • ANSI-C (GCC 4.6)

    • C++ (G++ 4.6)

    • OpenCL API (1.0 エンベデッ ド プロファイル)

    • SystemC (IEEE 1666-2006、 バージ ョ ン 2.2)

    C、 C++、 および SystemC 言語コンスト ラク ト

    Vivado HLS では多くの C、 C++、 SystemC 言語コンス ト ラ ク ト と、 float および double 型も含めた各言語のすべてのネイティブ データ型がサポート されていますが、 次のよ うな一部のコンス ト ラ ク トでは、 合成がサポート されません。

    • ダイナミ ッ ク メモ リ アロケーシ ョ ン

    FPGA には固定された リ ソース セッ トがあ り、 ダイナミ ッ クな作成と メモ リ リ ソースの解放はサポート されません。

    • オペレーティング システム (OS) 操作

    FPGA を行き来するすべてのデータは、 入力ポートから読み込まれるか、 出力ポートに書き出されます。 ファ イルの読み出し /書き込みのよ うな OS 操作または時間や日付のよ うな OS クエ リーはサポート されませんが、 これらの操作はC テス トベンチで実行され、 そのデータが関数引数と して関数に渡されて合成されます。

    サポート される C コンス ト ラ ク ト とサポート されない C コンス ト ラ ク トの詳細および主なコンス ト ラ ク トの例については、 第 3 章 「高位合成コーディング スタイル」 を参照してください。

    OpenCL API C 言語コンスト ラク ト

    Vivado HLS では、OpenCL API C 言語コンス ト ラ ク ト と OpenCL API C 1.0 エンベデッ ド プロファイルからのビルト イン関数がサポート されます。

    C ライブラリ

    C ラ イブラ リには、 FPGA へのインプ リ メ ンテーシ ョ ン用に最適化された関数およびコンス ト ラ ク ト が含まれます。これらのライブラ リ を使用する と、高度な結果の品質 (QoR) を達成しやすくな り、最終出力がリ ソースを最適に使用した高パフォーマンス デザインになり ます。 ラ イブラ リは C、 C++、 OpenCL API C または SystemC で提供されているので、 C 関数に組み込んで、 合成前に論理的に問題ないかど うかをシ ミ ュレーシ ョ ンで検証するこ とができます。

    Vivado HLS からは、 標準 C 言語を拡張するために次の C ラ イブラ リが提供されています。

    • 任意精度データ型

    • 数学演算

    • ビデオ関数

    • FFT (Fast Fourier Transform) および FIR (Finite Impulse Response) を含むザイ リ ンクス IP ファンクシ ョ ン

    • シフ ト レジスタ LUT (SRL) リ ソースを最大限に使用できるよ うにする FPGA リ ソース ファンクシ ョ ン

    高位合成 japan.xilinx.com 14UG902 (v2015.3) 2015 年 9 月 30 日

    http://japan.xilinx.comhttp://japan.xilinx.com/about/feedback.html?docType=User_Guides&docId=UG902&Title=Vivado%20Design%20Suite%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B%20%3A%20%26%2339640%3B%26%2320301%3B%26%2321512%3B%26%2325104%3B%20%28UG902%29&releaseVersion=2015.3&docPage=14

  • 第 1 章 : 高位合成

    Vivado HLS で提供される C ライブラ リの詳細については、第 2 章 「高位合成の C ライブラ リ 」 を参照してください。

    C ライブラリの例

    C ラ イブラ リ を使用する と、 標準 C 型を使用するよ り も高度な QoR が達成できますが、 標準 C 型は、 8 ビッ ト境界(8、 16、 32、 64 ビッ ト ) に基づいています。 ハード ウェア プラ ッ ト フォームをターゲッ トにする際は、 特定のデータ幅のデータ型を使用した方が効率的なこ とがよ くあ り ます。

    たとえば、 通信プロ ト コル用のフ ィルター関数を含むデザインがデータ送信要件を満たすのに 10 ビッ トの入力データ と 18 ビッ トの出力データを必要とする場合、 標準 C データ型を使用する と、 入力データが少なく と も 16 ビッ ト 、出力データが少なく と も 32 ビッ ト必要です。 最終的なハード ウェアでは、 これによ り入力と出力間に必要と していたよ り も大きなデータ幅のデータパスが作成されるので、 リ ソースがよ り多く使用され、 遅延も長くな り (32 ビッ トx 32 ビッ トの乗算は 18 ビッ ト x 18 ビッ トの乗算よ り も長くかかるので)、 終了するのにさ らに多くのクロ ッ ク サイクルが必要になり ます。

    このデザインで任意精度データ型を使用する と、 合成前に C コードで正確なビッ ト サイズを指定でき、 アップデート された C コードをシ ミ ュレーシ ョ ンできるので、 合成よ り も前に C シ ミ ュレーシ ョ ンで出力の質を検証できます。任意精度データ型は C および C++ 用に提供されているので、 1 ~ 1024 ビッ ト までの幅のデータ型を記述できます。たとえば、 最大 32768 ビッ ト までのいくつかの C++ 型を記述できます。 任意精度データ型に関する詳細は、 「効率的なハードウェアのためのデータ型」 を参照してください。

    注記 : Vivado HLS では内部ロジッ クが最適化され、出力ポートにファンアウ ト しないデータ ビッ トおよびロジッ クが削除されるので、 任意精度型は関数の境界でのみ必要となり ます。

    合成、 最適化、 解析

    Vivado HLS はプロジェク ト ベースで、プロジェク トにはそれぞれ 1 セッ トの C コードが含まれ、複数のソ リ ューシ ョンを含める こ とができます。 ソ リ ューシ ョ ンによって、 異なる制約および最適化指示子を含める こ とができます。Vivado HLS の GUI では、 各ソ リ ューシ ョ ンの結果を解析および比較できます。

    次は、 Vivado HLS デザイン プロセスの合成、 最適化、 解析段階を示しています。

    1. 最初のソ リ ューシ ョ ンでプロジェク ト を作成

    2. C シ ミ ュレーシ ョ ンがエラーなく実行されるかど うかを検証

    3. 合成を実行して結果セッ ト を取得

    4. 結果の解析

    結果を解析したら、異なる制約および最適化指示子でプロジェク トのソ リ ューシ ョ ンを新し く作成して、 その新規ソリ ューシ ョ ンを合成できます。 このプロセスは、デザインが必要なパフォーマンス特性になるまで繰り返すこ とができます。 複数のソ リ ューシ ョ ンを使用するこ とで、 前の結果を保持したまま開発を進めるこ とができます。

    最適化

    Vivado HLS を使用する と、 次を含むさまざまな最適化指示子をデザインに適用できます。

    • タスクがパイプライン処理される (現在のタスクが終了する前に次のタスクが開始できる ) よ うに指定

    • 関数、 ループ、 および領域の完了するまでのレイテンシを指定

    • 使用される リ ソースの数を制限

    • コードから継承または暗示された依存度を上書きし、 指定した操作を許可。 たとえば、 ビデオ ス ト リームなど、初期データ値を削除または無視できる場合、パフォーマンスが改善できるのであれば、 メモ リの書き込み前の読み出しが可能になり ます。

    • I/O プロ ト コルを選択する と、 最終的なデザインを同じ I/O プロ ト コルのほかのハードウェア ブロ ッ クに接続可能

    高位合成 japan.xilinx.com 15UG902 (v2015.3) 2015 年 9 月 30 日

    http://japan.xilinx.comhttp://japan.xilinx.com/about/feedback.html?docType=User_Guides&docId=UG902&Title=Vivado%20Design%20Suite%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B%20%3A%20%26%2339640%3B%26%2320301%3B%26%2321512%3B%26%2325104%3B%20%28UG902%29&releaseVersion=2015.3&docPage=15

  • 第 1 章 : 高位合成

    注記 : Vivado HLS では、 下位関数で使用される I/O プロ ト コルが自動的に決定されます。 ポートにレジスタが付いているかど うかを指定するために、 これらのポート を制御するこ とはできません。 I/O インターフェイスの詳細については、 「インターフェイスの管理」 を参照してください。

    Vivado HLS の GUI を使用する と、 最適化指示子をソース コードに直接配置できます。 または、 Tcl コマンドを使用して最適化指示子を適用するこ と もできます。 さまざまな最適化の詳細は、 「デザイン最適化」 を参照してください。

    推奨 : 最適化指示子をデザインに適用する前に 「Vivado HLS UltraFast 設計手法」 を確認するこ とをお勧めします。

    解析

    合成が終了する と、Vivado HLS がインプリ メンテーシ ョ ンのパフォーマンスを理解しやすくするための合成レポートを自動的に作成します。 Vivado HLS の GUI の [Analyze] 表示の [Performance] タブからは、 結果をインタラ クティブに解析できます。 次の図は、 「制御ロジッ クの抽出と I/O ポート インプリ メンテーシ ョ ン」 の [Performance] タブを示しています。

    [Performance] タブには、 各ステートの詳細が表示されます。

    • C0 : 最初のステートには、 a、 b、 c ポートの読み込み操作と加算演算が含まれます。• C1 および C2 : デザインがループに入り、ループのインク リ メン ト カウンターと終了条件がチェッ ク されます。

    この後、デザインがデータを 2 ク ロ ッ ク サイクルを必要とする変数 x に読み込みます。デザインはブロッ ク RAMにアクセスするので、 2 ク ロ ッ ク サイクル (1 ク ロ ッ ク サイ クルでアドレス、 次のクロ ッ ク サイクルでデータ読み込み) が必要です。

    • C3 : デザインが計算を実行して y ポートへ出力を書き出します。 この後、 ループが開始地点に戻り ます。

    OpenCL API C カーネル合成

    重要 : OpenCL API C カーネルの場合、Vivado HLS はワーク グループ全体のロジッ クを常に合成します。標準の VivadoHLS インターフェイス指示子を OpenCL API C カーネルに適用するこ とはできません。

    次の OpenCL API C カーネル コードはベク トル加法デザインを記述したもので、 2 つの配列のデータの和が 3 つ目の配列に表示されます。ワーク グループの必要なサイズは 16 なので、有効な結果を出すにはこのカーネルを最低 16 回実行する必要があ り ます。

    X-Ref Target - Figure 1-5

    図 1‐5 : Vivado HLS の解析例

    高位合成 japan.xilinx.com 16UG902 (v2015.3) 2015 年 9 月 30 日

    http://japan.xilinx.comhttp://japan.xilinx.com/about/feedback.html?docType=User_Guides&docId=UG902&Title=Vivado%20Design%20Suite%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B%20%3A%20%26%2339640%3B%26%2320301%3B%26%2321512%3B%26%2325104%3B%20%28UG902%29&releaseVersion=2015.3&docPage=16

  • 第 1 章 : 高位合成

    #include

    // For VHLS OpenCL C kernels, the full work group is synthesized__kernel void __attribute__ ((reqd_work_group_size(16, 1, 1)))vadd(__global int* a, __global int* b, __global int* c){ int idx = get_global_id(0); c[idx] = a[idx] + b[idx];}

    Vivado HLS は、 次を実行するハード ウェアにこのデザインを合成します。

    • インターフェイス a および b から 16 回読み出し• 出力インターフェイス c へ 16 回の加算および 16 回の書き込み

    RTL 検証C テス トベンチをプロジェク トに追加する と、 それを RTL の機能が元の C と同じかど うかを検証するために使用できます。 C テス トベンチでは、 最上位関数からの出力を合成用に検証し、 RTL が論理的に同じである場合は、 最上位関数 main() に 0 を戻します。 Vivado HLS では、 この戻り値を C シ ミ ュレーシ ョ ンと C/RTL 協調シ ミ ュレーシ ョ ンの両方で使用して、 結果が正しいかど うか決定します。 C テス トベンチが 0 以外の値を戻す場合、 シ ミ ュレーシ ョ ンがエラーになったこ とがレポート されます。

    重要 : 出力データが正し く、 有効であったと しても、 テス トベンチが main() 関数に 0 を戻さなければ、 Vivado HLSではシ ミ ュレーシ ョ ン エラーと してレポート されます。

    ヒン ト : テス トベンチ例については、 「サンプル デザインおよび参考資料」 を参照してください。

    Vivado HLS では、 C/RTL 協調シ ミ ュレーシ ョ ンを実行する構造が自動的に作成され、 サポート される次のいずれかの RTL シ ミ ュレータを使用してシ ミ ュレーシ ョ ンが実行されます。

    • Vivado Simulator (XSim)

    • ModelSim シ ミ ュレータ

    • VCS

    • NCSim

    • ISE Simulator (ISim)

    • Riviera

    シ ミ ュレーシ ョ ンに Verilog または VHDL HDL を選択した場合、 Vivado HLS では指定した HDL シ ミ ュレータが使用されます。 ザイ リ ンクス デザイン ツールには、 Vivado シ ミ ュレータ と ISE シ ミ ュレータが含まれています。 サードパーティ HDL シ ミ ュレータには、 そのサードパーティ ベンダーから ラ イセンスが必要です。 VCS、 NCSim およびRiviera HDL シ ミ ュレータは Linux OS でのみサポート されます。 詳細は、 「C/RTL 協調シ ミ ュレーシ ョ ンの使用」 を参照してください。

    RTL のエクスポートVivado HLS を使用する と、 RTL をエクスポート して、次のザイ リ ンクス IP 形式のいずれかで最終的な RTL 出力ファイルを IP と してパッケージできます。

    • Vivado IP カタログ

    高位合成 japan.xilinx.com 17UG902 (v2015.3) 2015 年 9 月 30 日

    http://japan.xilinx.comhttp://japan.xilinx.com/about/feedback.html?docType=User_Guides&docId=UG902&Title=Vivado%20Design%20Suite%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B%20%3A%20%26%2339640%3B%26%2320301%3B%26%2321512%3B%26%2325104%3B%20%28UG902%29&releaseVersion=2015.3&docPage=17

  • 第 1 章 : 高位合成

    Vivado Design Suite の Vivado IP カタログにインポート

    • System Generator for DSP (Vivado Design Suite エディシ ョ ン)

    Vivado Design Suite 用に System Generator for DSP にインポート

    • System Generator for DSP (ISE® Design Suite エディシ ョ ン)

    ISE Design Suite 用に System Generator for DSP にインポート

    • ザイ リ ンクス エンベデッ ド開発キッ ト (EDK) の Pcore

    Xilinx Platform Studio (XPS) にインポート

    • Synthesized Checkpoint (.dcp)

    Vivado Design Suite チェッ クポイン ト をインポートするのと同じ方法で Vivado Design Suite に直接インポート

    注記 :合成済みチェッ クポイン ト形式を使用する と、 論理合成が開始され、 RTL インプリ メンテーシ ョ ンがゲート レベル インプリ メンテーシ ョ ンにコンパイルされ、 IP パッケージに含まれます。

    合成済みチェッ クポイン ト以外のすべての IP 形式に対しては、オプシ ョ ンで Vivado HLS 内からロジッ ク合成を実行して、 RTL 合成の結果を評価できます。 このオプシ ョ ンの手順によ り、 IP パッケージのハンドオフ前に Vivado HLSで提供されるタイ ミ ングおよびエ リ アの概算が確認できます。 このゲート レベルの結果は、 パッケージされた IP には含まれません。

    注記 : Vivado HLS では、 各 FOGA ごとのビルト イン ライブラ リに基づいてタイ ミ ングおよびエリ ア リ ソースが概算されます。論理合成を使用して RTL をゲート レベルのインプリ メンテーシ ョ ンにコンパイルし、FPGA でそのゲートの物理的配置とゲート間の内部接続の配線を実行した場合は、 追加で最適化がされて Vivado HLS の概算が変わってしま う こ と もあ り ます。

    詳細は、 「RTL デザインのエクスポート 」 を参照してください。

    Vivado HLS の使用Windows プラ ッ ト フォームで Vivado HLS を起動するには、 デスク ト ップで [Vivado HLS] アイコンをダブルク リ ック します。

    Linux で Vivado HLS を起動するには (または Vivado HLS コマンド プロンプ トから起動するには)、コマンド プロンプトで次のコマンドを実行します。

    $ vivado_hls

    Vivado HLS の GUI が次の図のよ うに開きます。

    X-Ref Target - Figure 1-6

    図 1‐6 : Vivado HLS の GUI アイコン

    高位合成 japan.xilinx.com 18UG902 (v2015.3) 2015 年 9 月 30 日

    http://japan.xilinx.comhttp://japan.xilinx.com/about/feedback.html?docType=User_Guides&docId=UG902&Title=Vivado%20Design%20Suite%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B%20%3A%20%26%2339640%3B%26%2320301%3B%26%2321512%3B%26%2325104%3B%20%28UG902%29&releaseVersion=2015.3&docPage=18

  • 第 1 章 : 高位合成

    [Quick Start] フ ィールドからは、 次のタスクを実行できます。

    • [Create New Project] : プロジェク ト設定ウ ィザードが起動します。

    • [Open Project] : 既存プロジェク ト を選択するか、 最近使用したプロジェク トの リ ス トから選択します。

    • [Open Example Project] : Vivado HLS のサンプル例を開きます。 これらの例の詳細については、 「サンプル デザインおよび参考資料」 を参照してください。

    [Documentation] からは、 次のタスクを実行できます。

    • [Tutorials] : 『Vivado Design Suite チュート リ アル : 高位合成』 (UG871) [参照 2] が開きます。 チュート リ アルの例の詳細については、 「サンプル デザインおよび参考資料」 を参照してください。

    • [User Guide] : 『Vivado Design Suite ユーザー ガイ ド : 高位合成』 (UG902) が開きます。

    • [Release Note Guide] : 最新のソフ ト ウェア バージ ョ ンの 『Vivado Design Suite ユーザー ガイ ド : リ リース ノート、インス トールおよびライセンス』 (UG973) [参照 3]が開きます。

    Vivado HLS を使用する主なコマンド ボタンは、 ツールバーに含まれます。 現在実行可能なコマンド以外は、 淡色表示されます。 たとえば、 合成は C/RTL 協調シ ミ ュレーシ ョ ンが実行されるよ り も前に実行される必要があ り ますので、 C/RTL 協調シ ミ ュレーシ ョ ン ツールバー ボタンは、 合成が終了するまで淡色表示のままになり ます。

    X-Ref Target - Figure 1-7

    図 1‐7 : Vivado HLS の GUI のウェルカム ページ

    高位合成 japan.xilinx.com 19UG902 (v2015.3) 2015 年 9 月 30 日

    http://japan.xilinx.comhttp://japan.xilinx.com/about/feedback.html?docType=User_Guides&docId=UG902&Title=Vivado%20Design%20Suite%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B%20%3A%20%26%2339640%3B%26%2320301%3B%26%2321512%3B%26%2325104%3B%20%28UG902%29&releaseVersion=2015.3&docPage=19

  • 第 1 章 : 高位合成

    図の 「Project Management」 (プロジェク ト管理) 部分のボタンを左から右に向かって説明します。

    • [Create New Project] : 新規プロジェク ト ウ ィザードを開きます。

    • [Project Settings] : 現在のプロジェク ト設定を変更できます。

    • [New Solution] : 新規ソ リ ューシ ョ ンを作成するダイアログ ボッ クスを開きます。

    • [Solution Settings] : 現在のソ リ ューシ ョ ン設定を変更できます。

    ツールバーの次の 「Operation」 (ツール操作) 部分のボタンについて、 左から右に向かって説明します。

    • [Index C Source] : C ソースのアノテーシ ョ ンを更新します。

    • [Run C Simulation] : [C Simulation] ダイアログ ボッ クスが開きます。

    • [C Synthesis] : Vivado HLS で C ソース コードを開始します。

    • [Run C/RTL Cosimulation] : RTL 出力を検証します。

    • [Export RTL] : RTL を指定した IP 出力フォーマッ トでパッケージします。

    ツールバーの次の 「Analysis」 (デザイン解析) 部分のボタンについて、 左から右に向かって説明します。

    • [Open Report] : C 合成レポート を開くか、 ほかのレポート を開くためのド ロ ップダウン リ ス ト を開きます。

    • [Compare Reports] : さまざまなソ リ ューシ ョ ンからのレポート を比較できます。

    ツールバーの各ボタンには、 それに対応する メニュー コマンドがあ り ます。 また、 Vivado HLS の GUI には、 次の 3つの表示方法があ り ます。表示方法を選択する と、 ビューが自動的に選択したタスクに合った表示に自動的に切り替わり ます。

    • [Debug] : C デバッガーが開きます。

    • [Synthesis] : 合成を実行するためのデフォルトの表示です。

    • [Analysis] : 合成後にデザインを詳細に解析するために使用します。 この表示には、 合成レポート よ り も詳細な情報が含まれます。

    表示は、 ボタンでいつでも切り替えるこ とができます。

    本章の残りの部分では、 Vivado HLS の使用方法について説明します。 説明する ト ピッ クは次のとおりです。

    • Vivado HLS 合成レポートの作成方法

    • C コードのシ ミ ュレーシ ョ ンおよびデバッグ方法

    • デザインの合成、 新しいソ リ ューシ ョ ンの作成、 最適化の追加方法

    • デザイン解析の実行方法

    • RTL 出力の検証およびパッケージ方法

    X-Ref Target - Figure 1-8

    図 1‐8 : Vivado HLS のツールバー

    高位合成 japan.xilinx.com 20UG902 (v2015.3) 2015 年 9 月 30 日

    http://japan.xilinx.comhttp://japan.xilinx.com/about/feedback.html?docType=User_Guides&docId=UG902&Title=Vivado%20Design%20Suite%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B%20%3A%20%26%2339640%3B%26%2320301%3B%26%2321512%3B%26%2325104%3B%20%28UG902%29&releaseVersion=2015.3&docPage=20

  • 第 1 章 : 高位合成

    • Vivado HLS Tcl コマンドおよびバッチ モードの使用方法

    最後に、 デザイン サンプル、 チュート リ アル、 その他のリ ソースを示します。

    新規合成プロジェク トの作成

    新規プロジェク ト を作成するには、 図 1-7 にある最初に表示されるページにある [Create New Project] をク リ ッ クするか、 メニュー コマンドから [File] → [New Project] をク リ ッ ク します。 これで、図 1-9 にあるプロジェク ト ウ ィザードが開き、 次の設定ができます。

    • [Project name] : プロジェク ト名を指定します。 この名前は、 プロジェク トが保存されるディ レク ト リ名と しても使用されます。

    • [Location] : プロジェク ト を保存するディ レク ト リ を指定します。

    注意 : Windows OS にはパスの長さに 260 文字の字数制限があ り、Vivado ツールがその影響を受けるこ とがあ り ます。この問題を回避するには、プロジェク トの作成、 IP プロジェク ト または Manage IP プロジェク トの定義、ブロ ッ ク デザインの作成をする際に、 できるだけ短い名前とディ レク ト リ名を使用するよ うにしてください。

    [Next] をク リ ッ ク して次のページに進むと、 プロジェク トの C ソースを追加するページ (図 1-10) が表示されます。

    X-Ref Target - Figure 1-9

    図 1‐9 : プロジェク ト仕様

    高位合成 japan.xilinx.com 21UG902 (v2015.3) 2015 年 9 月 30 日

    http://japan.xilinx.comhttp://japan.xilinx.com/about/feedback.html?docType=User_Guides&docId=UG902&Title=Vivado%20Design%20Suite%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B%20%3A%20%26%2339640%3B%26%2320301%3B%26%2321512%3B%26%2325104%3B%20%28UG902%29&releaseVersion=2015.3&docPage=21

  • 第 1 章 : 高位合成

    • [Top Function] : 合成する最上位関数の名前を指定します。 始めに C ファ イルを追加する場合は、 [Browse] ボタンを使用して、 C 階層を確認してから、 合成する最上位関数を選択し ます。 ソース フ ァ イルを追加する まで[Browse] ボタンは淡色表示されたままです。

    注記 : プロジェク トが SystemC と して指定される場合は、Vivado HLS で自動的に最上位関数が認識されるので、 この手順は必要あ り ません。

    [Add Files] をク リ ッ ク し、 ソース コード ファ イルをプロジェク トに追加します。

    重要 : ヘッダー ファ イル (拡張子は .h) は [Add Files] ボタンまたはそれに対応する Tcl コマンドの add_files を使用して追加しないよ うにしてください。

    Vivado HLS では、 次のディ レク ト リが検索パスに自動的に追加されます。

    • 作業ディ レク ト リ

    注記 :作業ディ レク ト リには、 Vivado HLS のプロジェク ト ディ レク ト リが含まれます。

    • プロジェク トに追加する C ファ イルを含むディ レク ト リすべて

    これらのディ レク ト リに含まれるヘッダー ファ イルは自動的にプロジェク トに追加されます。 その他すべてのヘッダー ファ イルへのパスは、 [Edit CFLAGS] ボタンで指定する必要があ り ます。

    [Edit CFLAGS] をク リ ッ クする と、C コードをコンパイルするために必要な C コンパイラ フラグ オプシ ョ ンを指定できます。 これらのコンパイラ フラグ オプシ ョ ンは、 gcc または g++ で使用されるものと同じです。 次の例のよ うに、C コンパイラ フラグには、 ヘッダー ファ イルへのパス名、 マクロ仕様、 およびコンパイラ指示子が含まれます。

    • -I/project/source/headers : 関連するヘッダー ファ イルへの検索パスを指定します。

    注記 :相対パスの名前は、プロジェク ト ディ レク ト リではなく、作業ディ レク ト リに関連して指定する必要があり ます。

    • -DMACRO_1 : コンパイル中に MACRO_1 を定義します。

    • -fnested-functions : ネス ト された関数を含むデザインに必要な指示子を定義します。

    ヒン ト : サポート される [Edit CFLAGS] オプシ ョ ンのすべてのリ ス トについては、GCC (GNU Compiler Collection) ウェブサイ トの Option Summary ページ (gcc.gnu.org/onlinedocs/gcc/Option-Summary.html) を参照してください。

    高位合成 japan.xilinx.com 22UG902 (v2015.3) 2015 年 9 月 30 日

    gcc.gnu.org/onlinedocs/gcc/Option-Summary.htmlgcc.gnu.org/onlinedocs/gcc/Option-Summary.htmlhttp://japan.xilinx.comhttp://japan.xilinx.com/about/feedback.html?docType=User_Guides&docId=UG902&Title=Vivado%20Design%20Suite%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B%20%3A%20%26%2339640%3B%26%2320301%3B%26%2321512%3B%26%2325104%3B%20%28UG902%29&releaseVersion=2015.3&docPage=22

  • 第 1 章 : 高位合成

    ウ ィザードの次のページでは、 テス トベンチに関連するファイルをプロジェク トに追加します。

    注記 : SystemC デザインでヘッダー ファ イルがデザイン ファ イルではなくテス トベンチに関連付けられる場合、[AddFiles] ボタンを使用してヘッダー ファ イルをプロジェク トに追加する必要があ り ます。

    Vivado HLS に含まれるほとんどのサンプル デザインの場合、 テス トベンチはデザインとは別のファ イルになっています。テス トベンチと合成する関数を別ファイルにしておく と、シ ミ ュレーシ ョ ンと合成のプロセスを分離できます。テス トベンチが合成される関数と同じファ イル内に含まれる場合、次の手順で示すよ うに、ソース ファ イルと してテス トベンチ ファ イルを追加する必要があ り ます。

    X-Ref Target - Figure 1-10

    図 1‐10 : プロジェク トのソース ファイル

    高位合成 japan.xilinx.com 23UG902 (v2015.3) 2015 年 9 月 30 日

    http://japan.xilinx.comhttp://japan.xilinx.com/about/feedback.html?docType=User_Guides&docId=UG902&Title=Vivado%20Design%20Suite%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B%20%3A%20%26%2339640%3B%26%2320301%3B%26%2321512%3B%26%2325104%3B%20%28UG902%29&releaseVersion=2015.3&docPage=23

  • 第 1 章 : 高位合成

    C ソース ファ イルと同様に、 [Add Files] をク リ ッ ク して C テス トベンチを追加し、 [Edit CFLAGS] をク リ ッ ク して Cコンパイラ オプシ ョ ンを含めます。

    C ソース ファ イルと共に、 テス トベンチで読み込まれるすべてのファ イルをプロジェク トに追加する必要があ り ます。図 1-11 の例では、 テス トベンチで入力スティ ミ ュラスを供給する in.dat ファ イルと、予測される結果を読み込むout.golden.dat ファ イルが使用されます。 テス トベンチがこれらのファイルにアクセスするので、 これらもプロジェクトに追加する必要があ り ます。

    テス トベンチ ファ イルがディレク ト リにある場合は、個々のファイルではなく、 [Add Folders] ボタンでディ レク ト リ全体を追加できます。

    C テス トベンチがない場合は、こ こで何も入力する必要はあ り ません。[Next] をク リ ッ クする と、最初のソ リ ューシ ョンの詳細を入力するウ ィザードの最後のページが表示されます。

    推奨 : テス トベンチを使用するこ とを強くお勧めします。 テス トベンチをプロジェク トに追加する理由に関する重要な生産性情報については、 「テス トベンチ : 生産性向上には必須」 を参照して ください。

    X-Ref Target - Figure 1-11

    図 1‐11 : プロジェク トのテストベンチ ファイル

    高位合成 japan.xilinx.com 24UG902 (v2015.3) 2015 年 9 月 30 日

    http://japan.xilinx.comhttp://japan.xilinx.com/about/feedback.html?docType=User_Guides&docId=UG902&Title=Vivado%20Design%20Suite%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B%20%3A%20%26%2339640%3B%26%2320301%3B%26%2321512%3B%26%2325104%3B%20%28UG902%29&releaseVersion=2015.3&docPage=24

  • 第 1 章 : 高位合成

    新規プロジェク ト ウ ィザードの最後の画面では、 最初のソ リ ューシ ョ ンの詳細を指定できます。

    • [Solutioin Name] : デフォルトではソ リ ューシ ョ ン名に 「solution1」 が指定されますが、 変更できます。

    • [Clock Period] : ns または MHz (例 : 150MHz) を付けて指定した周波数の単位でクロ ッ ク周波数を指定します。

    • [Uncertainty] :合成で使用されるクロ ッ ク周期は、 クロ ッ ク周期から クロ ッ クのばらつきを引いた値になり ます。Vivado HLS では、 内部モデルを使用して、 各 FPGA の操作の遅延が概算されます。 [Uncertainty] に入力する クロ ッ クのばらつきの値は、 RTL 合成、 配置配線によるネッ ト遅延の増加を考慮するためのマージンを ns で指定できます。ナノ秒 (ns) またはパーセン ト (%) で指定しない場合、 クロ ッ クのばらつきはクロ ッ ク周期の 12.5% に設定されます。

    • [Part] : 適切なパーツをク リ ッ ク して選択します。

    X-Ref Target - Figure 1-12

    図 1‐12 :最初のソリューシ ョ ンの設定

    高位合成 japan.xilinx.com 25UG902 (v2015.3) 2015 年 9 月 30 日

    http://japan.xilinx.comhttp://japan.xilinx.com/about/feedback.html?docType=User_Guides&docId=UG902&Title=Vivado%20Design%20Suite%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B%20%3A%20%26%2339640%3B%26%2320301%3B%26%2321512%3B%26%2325104%3B%20%28UG902%29&releaseVersion=2015.3&docPage=25

  • 第 1 章 : 高位合成

    RTL ツール オプシ ョ ンは [auto]、 [ISE]、 または [Vivado] に設定できます。 ISE および Vivado Design Suite の RTL 合成ツールでは、 浮動小数点コアに異なるモデルが使用されます。 この設定によ り、 ターゲッ ト合成ツールに対して正しい浮動小数点コアが使用されます。 デフォルトの [auto] 設定を使用する と、 Vivado HLS は Vivado Design Suite で 7 シリーズ デバイス、 Zynq®-7000 All Programmable (AP) SoC、 および UltraScale™ デバイスの RTL 合成が実行され、 ISEDesign Suite でその他すべてのデバイスが合成される と仮定します。 これに当てはまらない場合、 RTL 合成ツールを設定してください。

    ターゲッ トにする FPGA を選択します。 デバイス リ ス ト に表示されるデバイス数は、 フ ィルターを使用する と削減できます。 ターゲッ トがボードの場合、左上でボードを選択する と、デバイス リ ス トがサポート されるボードのリ ストに変わり ます (Vivado HLS では自動的に正しいターゲッ ト デバイスが選択されます)。

    [Finish] をク リ ッ クする と、 次の図のよ うにプロジェク トが開きます。

    X-Ref Target - Figure 1-13

    図 1‐13 :パーツ選択

    高位合成 japan.xilinx.com 26UG902 (v2015.3) 2015 年 9 月 30 日

    http://japan.xilinx.comhttp://japan.xilinx.com/about/feedback.html?docType=User_Guides&docId=UG902&Title=Vivado%20Design%20Suite%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B%20%3A%20%26%2339640%3B%26%2320301%3B%26%2321512%3B%26%2325104%3B%20%28UG902%29&releaseVersion=2015.3&docPage=26

  • 第 1 章 : 高位合成

    Vivado HLS のグラフ ィカル ユーザー インターフェイスには、 次の 4 つのエリ アが含まれます。

    • 左側のエクスプローラー エリ アでは、 プロジェク ト階層を表示できます。 この階層はディ スクのプロジェク トディ レク ト リ と同じです。

    • 真ん中の情報エリアには、ファ イルが表示されます。ファ イルはエクスプローラー エリ アでダブルク リ ッ クすると開きます。

    • 右側の補足エリアには、 情報エリ アで開いたファイルに関する情報が表示されます。

    • 下部のコンソール エリ アには、 Vivado HLS を実行したと きの出力が表示されます。

    C コードのシミ ュレーシ ョ ンVivado HLS フローでの検証には、 大き く分けて 2 つのプロセスが含まれます。

    • C プログラムが正し く必要な機能をインプリ メン トするかど うかを確認するための合成前の検証

    • RTL が正しいかど うか確認する合成後の検証

    どちらのプロセスも 「シ ミ ュレーシ ョ ン」 で、 それぞれ 「C シ ミ ュレーシ ョ ン」 と 「C/RTL 協調シ ミ ュレーシ ョ ン」と呼ばれます。

    合成前に、合成する関数を C シ ミ ュレーシ ョ ンを使用したテス トベンチで検証する必要があ り ます。 C テス トベンチには、 最上位関数の main() と合成される関数が含まれます。 その他の関数が含まれるこ と もあ り ます。 理想的なテス トベンチには、 次のよ うな特徴があ り ます。

    • テス トベンチにはセルフチェッ ク機能があ り、 合成される関数からの結果が正しいかど うかが検証されます。

    • 結果が正しければ、 テス トベンチが main() に値 0 を戻します。 正し くない場合は、 0 以外の値が戻されるはずです。

    X-Ref Target - Figure 1-14

    図 1‐14 : Vivado HLS での新規プロジェク トの GUI

    高位合成 japan.xilinx.com 27UG902 (v2015.3) 2015 年 9 月 30 日

    http://japan.xilinx.comhttp://japan.xilinx.com/about/feedback.html?docType=User_Guides&docId=UG902&Title=Vivado%20Design%20Suite%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B%20%3A%20%26%2339640%3B%26%2320301%3B%26%2321512%3B%26%2325104%3B%20%28UG902%29&releaseVersion=2015.3&docPage=27

  • 第 1 章 : 高位合成

    Vivado HLS は OpenCL API C カーネルを合成します。 OpenCL API C カーネルをシ ミ ュレートするには、 標準 C テストベンチを使用する必要があ り ます。 OpenCL API C ホス ト コードを C テス トベンチと して使用するこ とはできません。 テス トベンチの詳細は、 第 3 章の 「C テス トベンチ」 を参照してください。

    [Run C Simulation] ツールバー ボタン をク リ ッ クする と、 [C Simulation] ダイアログ ボッ クスが開きます。

    ダイアログ ボッ クスでオプシ ョ ンを選択しなければ、C コードがコンパイルされて、 C シ ミ ュレーシ ョ ンが自動的に実行されます。結果は次の図のよ うにな り ます。 C コードが問題なくシ ミ ュレーシ ョ ンされたら、 [Console] ウ ィンドウに次のよ う なメ ッセージが表示されます。 テス トベンチは使用された printf コマンドをすべてコンソールにエコーし、 「Test Passed!」 とい う メ ッセージを表示します。

    X-Ref Target - Figure 1-15

    図 1‐15 : [C Simulation] ダイアログ ボックス

    高位合成 japan.xilinx.com 28UG902 (v2015.3) 2015 年 9 月 30 日

    http://japan.xilinx.comhttp://japan.xilinx.com/about/feedback.html?docType=User_Guides&docId=UG902&Title=Vivado%20Design%20Suite%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B%20%3A%20%26%2339640%3B%26%2320301%3B%26%2321512%3B%26%2325104%3B%20%28UG902%29&releaseVersion=2015.3&docPage=28

  • 第 1 章 : 高位合成

    [C Simulation Dialog] ダイアログ ボッ クスのオプシ ョ ンは、 次のとおりです。

    • [Launch Debugger] : C コードがコンパイルされ、 画面が自動的にデバッグ モードの表示になり ます。 デバッグ表示から、 左上の [Synthesis] 表示ボタンをク リ ッ クする と、 合成モードに表示が戻り ます。

    • [Build Only] : C コードがコンパイルされますが、 シ ミ ュレーシ ョ ンは実行されません。 C シ ミ ュレーシ ョ ンを実行する詳細については、 「C シ ミ ュレーシ ョ ンの出力確認」 を参照してください。

    • [Clean Build] : コードをコンパイルする前に、 既存の実行ファイルとオブジェク ト ファ イルがプロジェク トから削除されます。

    • [Optimized Compile] : デフォルトでは、 デザインはデバッグ情報を含めてコンパイルされ、 コンパイルがデバッグ モード表示で解析されるよ うにできます。このオプシ ョ ンでは、デザインをコンパイルする際によ り高いレベルの最適化エフォートが使用されますが、デバッガーで必要と されるすべての情報は削除されます。これによ り、コンパイル時間は増加する可能性があ り ますが、 シ ミ ュレーシ ョ ン実行時間は削減されます。

    [Launch Debugger] を選択する と、表示がデバッグ用に切り替わってデバッグ環境が開きます。 これは、すべての機能を備えた C デバッグ環境です。 ステップ ボタン (次の図の赤で囲った部分) を使用する と、 コードを 1 行ずつ移動でき、 ブレークポイン ト を設定したり、 変数の値が直接表示したりできます。

    X-Ref Target - Figure 1-16

    図 1‐16 : C デザインのコンパイル結果

    高位合成 japan.xilinx.com 29UG902 (v2015.3) 2015 年 9 月 30 日

    http://japan.xilinx.comhttp://japan.xilinx.com/about/feedback.html?docType=User_Guides&docId=UG902&Title=Vivado%20Design%20Suite%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B%20%3A%20%26%2339640%3B%26%2320301%3B%26%2321512%3B%26%2325104%3B%20%28UG902%29&releaseVersion=2015.3&docPage=29

  • 第 1 章 : 高位合成

    ヒン ト : [Synthesis] ボタンをク リ ッ クする と、 標準の合成表示に戻り ます。

    X-Ref Target - Figure 1-17

    図 1‐17 : C デバッグ環境

    高位合成 japan.xilinx.com 30UG902 (v2015.3) 2015 年 9 月 30 日

    http://japan.xilinx.comhttp://japan.xilinx.com/about/feedback.html?docType=User_Guides&docId=UG902&Title=Vivado%20Design%20Suite%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B%20%3A%20%26%2339640%3B%26%2320301%3B%26%2321512%3B%26%2325104%3B%20%28UG902%29&releaseVersion=2015.3&docPage=30

  • 第 1 章 : 高位合成

    C シミ ュレーシ ョ ンの出力確認

    C シ ミ ュレーシ ョ ンが終了したら、 solution フォルダー内に csim フォルダーが作成されます。 .

    csim/build フォルダーは、 C シ ミ ュレーシ ョ ンに関するすべてのファイルの主要ディ レク ト リです。

    • テス トベンチで読み込まれるすべてのファイルがこのフォルダーにコピーされます。

    • C 実行ファイルの csim.exe が作成され、 このフォルダー内で実行されます。• テス トベンチで書き出されるすべてのファイルがこのフォルダーで作成されます。

    [C Simulation] ダイアログ ボッ クスで [Build Only] をオンにする と、 このフォルダー内に csim.exe ファ イルが作成されますが、 ファ イルは実行されません。 コマンド シェルから このファイルを実行する と、 C シ ミ ュレーシ ョ ンが手動で実行できます。 Windows の場合は、 Vivado HLS コマンド シェルを [スタート ] メニューから使用します。

    csim/report フォルダーには、 C シ ミ ュレーシ ョ ンのログ ファ イルが含まれます。

    この後の Vivado HLS デザイン フローの手順は、 合成の実行です。

    X-Ref Target - Figure 1-18

    図 1‐18 : C シミ ュレーシ ョ ンの出力フ