インテル hls コンパイラー...compiler best practice:...

35
インテル コンパイラー ユーザーガイド インテル 開デザインスイートの更新情報 更新情報 フィードバック 最新版をウェブからダウンロード

Upload: others

Post on 12-Feb-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

  • インテル® HLS コンパイラーユーザーガイド

    インテル® Quartus® Prime 開デザインスイートの更新情報: 17.0

    更新情報フィードバック

    UG-20037 | 2017.06.23

    最新版をウェブからダウンロード: PDF | HTML

    https://www.altera.com/bin/rssdoc?name=ewa1457708982563mailto:[email protected]?subject=%20%E3%82%A4%E3%83%B3%E3%83%86%E3%83%AB%20HLS%20%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9%E3%83%BC%20%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%AC%E3%82%A4%E3%83%89%20(UG-20037%202017.06.23)%20%E3%83%95%E3%82%A3%E3%83%BC%E3%83%89%E3%83%90%E3%83%83%E3%82%AF%E3%83%BB%E3%82%AA%E3%83%B3&body=%E5%BC%8A%E7%A4%BE%E3%81%AF%E5%BE%A1%E7%A4%BE%E3%81%AE%E3%83%95%E3%82%A3%E3%83%BC%E3%83%89%E3%83%90%E3%83%83%E3%82%AF%E3%81%AB%E6%84%9F%E8%AC%9D%E3%81%84%E3%81%9F%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88%E3%81%AE%E4%B8%AD%E3%81%A7%E3%80%81%E3%83%9A%E3%83%BC%E3%82%B8%E7%95%AA%E5%8F%B7%E3%81%BE%E3%81%9F%E3%81%AF%E6%AE%B5%E8%90%BD%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%E3%81%82%E3%82%8A%E3%81%8C%E3%81%A8%E3%81%86%E3%81%94%E3%81%96%E3%81%84%E3%81%BE%E3%81%99%E3%80%82https://www.altera.com/ja_JP/pdfs/literature/hb/hls/ug-hls_j.pdfhttps://www.altera.com/content/altera-www/global/ja_jp/index/documentation/ewa1457708982563.html

  • 目次

    1 インテル® HLS コンパイラー・ユーザーガイド................................................................................31.1 HLS コンパイラーの概要.............................................................................................3

    1.1.1 HLS デザインフロー....................................................................................... 41.1.2 プロフジェクト・ディレクトリー............................................................................ 4

    1.2 HLS コンポーネントおよびテストベンチの作成.................................................................... 51.2.1 HLS コンパイラー定義済のプリプロセッサー・マクロ.................................................5

    1.3 コンポーネントの report.html ファイルのレビュー ..............................................................61.3.1 HTML レポート GUI.......................................................................................61.3.2 Report Summary のレビュー .........................................................................81.3.3 ループ情報のレビュー....................................................................................101.3.4 メモリー・レプリケーションとストール可能な LSU に関する情報...................................121.3.5 Analysis ペインでのコンポーネントのエリア使用率のレビュー ................................... 161.3.6 コンポーネント検証結果の情報.........................................................................211.3.7 Component Memory Viewer ......................................................................22

    1.4 インターフェイス定義.................................................................................................241.4.1 インターフェイス定義の例 : スカラーおよびポインターの両引数を使用したコンポーネント....251.4.2 リセット動作...............................................................................................26

    1.5 HLS IP の検証........................................................................................................271.5.1 検証テストベンチ実行可能ファイルの生成............................................................ 271.5.2 検証時のデバッグ.........................................................................................281.5.3 エンキュー関数コールを使用したハイスループットのシミュレーション ( 非同期コンポー

    ネント・コール ).......................................................................................... 281.6 Quartus Prime ソフトウェアを使用した IP の合成............................................................30

    1.6.1 Quartus Prime プロジェクトへの HLS コンパイラー生成の IP の追加......................... 311.6.2 Qsys システムへの HLS コンパイラー生成 IP の追加.............................................. 311.6.3 HLS コンパイラー生成 IP のスタンドアロンの QoR ( 結果の品質 ) メトリックの生成....... 32

    1.7 HLS コンパイラーの制限事項......................................................................................32

    2 改訂履歴.......................................................................................................................... 35

    目次

    インテル® HLS コンパイラー ユーザーガイド2

  • 1 インテル® HLS コンパイラー・ユーザーガイド

    インテル® HLS コンパイラー・ユーザーガイド は、 インテル FPGA 製品向けにデザインする IP の合成、検証、およびシミュレーションの方法について説明しています。 インテル HLS コンパイラーはコンパイラー・コマンドの名前を反映し、しばしば I コンパイラーと呼ばれることもあります。

    従来の RTL 開発と比較すると、HLS コンパイラーには次の利点があります。

    • 高速で容易な検証• C++ によるアルゴリズム開発

    • C++ テストベンチを使用した RTL 検証の自動統合

    • 強力なマイクロアーキテクチャーへの最適化

    3 ページの HLS コンパイラーの概要

    5 ページの HLS コンポーネントおよびテストベンチの作成

    6 ページの コンポーネントの report.html ファイルのレビュー

    24 ページの インターフェイス定義

    27 ページの HLS IP の検証

    30 ページの Quartus Prime ソフトウェアを使用した IP の合成

    32 ページの HLS コンパイラーの制限事項

    1.1 HLS コンパイラーの概要

    HLS コンパイラーはデザインを解析し、それをオブジェクトまたは RTL コードにコンパイルして、オブジェクトをリンクします。

    HLS コンパイラーは g++ とのコマンドラインと互換性があります。HLS コンパイラーは、ほとんどのg++ コンパイラー・フラグをサポートしています。

    HLS コンパイラーは、g++ と同じファイル名拡張子、つまり、.c、.C、.cc、.cpp、.CPP、.c++、.cpおよび.cxx を認識します。コンパイラーはこれらのすべてのファイルタイプを C++ として扱います。HLS コンパイラーは、C++ のサブセット以外についての C 言語を明示的にサポートしていません。

    デフォルトでは、HLS コンパイラーは実行可能ファイルと a.prj ディレクトリーを出力します。 Linuxの場合、デフォルトの実行可能ファイルは a.out です。Windows の場合、デフォルトの実行可能ファイルは a.exe です。プロジェクト・ディレクトリーには、生成された IP を含んだ HLS 結果が含まれています。また、検証のためのレポートと補足情報も含んでいます。デフォルトのプロジェク・トディレクトリーは a.prj です。

    コンパイラー出力の名前を指定するには、I コマンドに が実行可能ファイルの名前である-o オプションを含めます。このコマンドは .prj というプロジェクト・ディレクトリーを作成します。

    UG-20037 | 2017.06.23

    Intel Corporation.無断での引用、転載を禁じます。Intel、インテル、Intel ロゴ、Altera、ARRIA、CYCLONE、ENPIRION、MAX、NIOS、QUARTUS および STRATIX の名称およびロゴは、アメリカ合衆国および/ またはその他の国における Intel Corporationの商標です。インテルは FPGA 製品および半導体製品の性能がインテルの標準保証に準拠することを保証しますが、インテル製品およびサービスは、予告なく変更される場合があります。インテルが書面にて明示的に同意する場合を除き、インテルはここに記載されたアプリケーション、または、いかなる情報、製品、またはサービスの使用によって生じるいっさいの責任を負いません。インテル製品の顧客は、製品またはサービスを購入する前、および、公開済みの情報を信頼する前には、デバイスの仕様を最新のバージョンにしておくことをお勧めします。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

    ISO9001:2008登録済

    http://www.altera.com/support/devices/reliability/certifications/rel-certifications.htmlhttp://www.altera.com/support/devices/reliability/certifications/rel-certifications.htmlhttp://www.altera.com/support/devices/reliability/certifications/rel-certifications.html

  • 実行可能ファイルは、テストベンチを実行するために実行するファイルです。デザインを FPGA アーキテクチャー用にコンパイルすると、出力実行可能ファイルはシミュレーションを実行します。デザインをx86-64 アーキテクチャー用にコンパイルすると、出力実行ファイルは CPU 上でデザインを実行します。

    1.1.1 HLS デザインフロー

    IP を合成するには、 インテル 推奨のデザインフローに従って行います。

    図 -1: インテル FPGA 製品向けの IP 合成手順の概要

    コンポーネントとテストベンチを作成する

    関数検証のため、 g++ または i++ -march=x86-64でデザインをコンパイルする。

    (注意 : i++ x86-64出力の場合でも、GDBを使用してデバッグが可能。)

    次のコマンドを使用してデザインをコンパイルし、シミュレーションでデザインを検証するIPとテストベンチを生成する。

    i++ -march=""

    Quartus Prime ソフトウェアから QoR メトリックを生成 するために、 .prj / quartus ディレクトリーの プロジェクトで Quartus Prime のコンパイルを実行する。

    1.1.2 プロフジェクト・ディレクトリー

    HLS コンパイラーが作成するプロジェクト・ディレクトリー ( .prj) には、4 つのメイン・サブディレクトリーがあります。

    表 1. .prj ディレクトリー内のサブディレクトリー

    ディレクトリー 説明

    components 各コンポーネントのフォルダーと、デザインでそのコンポーネントを使用するために必要なすべての HDLおよび IP ファイルが含まれている。

    Verification 検証用テストベンチのすべてのファイルが含まれている。

    reports 合成されたコンポーネントのハードウェア実装の分析に役立つ情報を含むレポートが含まれている。

    quartus コンポーネントをインスタンス化する Quartus Prime プロジェクトが含まれている。この QuartusPrime プロジェクトをコンパイルすることで、より詳しいタイミングおよびエリアレポートを生成することができる。

    1 インテル® HLS コンパイラー・ユーザーガイドUG-20037 | 2017.06.23

    インテル® HLS コンパイラー ユーザーガイド4

  • 1.2 HLS コンポーネントおよびテストベンチの作成

    HLS コンパイラーが合成する関数はコンポーネントと呼ばれます。 コンポーネントを作成するには、main()関数にテストベンチとして機能する完全な C++ アプリケーションを記述し、コンポーネントを合成してテストベンチから呼び出します。

    可能な場合はその都度 OpenCL™ がサポートする C99 サブセットでコードを記述します。コンパイラーはいくつかの C++ 構文を合成することができ、これにより、より見通しの良いコードが作成しやすくなります。サポートされている C99 サブセットとその制限について詳しくは、 インテル HLS コンパイラー・リファレンス・マニュアルの Supported Subset for Component Synthesis の項 ( 英語版 ) を参照してください。

    HLS コンパイラーは、コンポーネントとして識別するすべての関数または関数内コードを合成し、これらのコンポーネントが呼び出す任意のコードを HDL 表現にするために合成します。

    IP コアに合成する C++ アプリケーションのコードの一部を特定するには、次のいずれかのタスクを実行します。

    • トップレベルの C++ 関数が合成される前に、ソースコードに component 属性を挿入します。

    • I コマンドの --component オプションを使用し、コマンドライン上で関数を指定します。

    Compiler bestpractice:

    特に、コンポーネントが浮動小数点変数を使用する場合は、-Wconversion オプションを使用してコンポーネント・コードをコンパイルする必要があります。

    倍精度変数が不要な場合にこのオプションを使用すると、不注意な倍精度と単精度の値の間の変換を回避するのに役立ちます。FPGA では、倍精度の変数を使用すると、コンポーネントのデータ転送レート、レイテンシー、および FPGA リソース使用率に悪影響を与える可能性があります。

    HLS コンパイラーは、プロセッサーで実行する実行可能ファイルを作成します。 次に、コンパイラーは合成された IP コアのシミュレーションをするためにコンポーネントとして宣言した関数にすべてのコールを送信し、シミュレーション結果を返します。

    重要: コンポーネントは、 I コマンドの --component オプションにリストされたすべてのコンポーネントと同様に、component 属性を挿入したすべての関数において合成されます。

    関数に対してコンポーネントを合成しない場合は、関数で指定された component 属性を含んでいないこと、およびその関数が I コマンドの--component オプションで指定されていないことを確認してください。

    各コンポーネントの関数の内容を確認するため、report.html ファイルの Source セクションでArea Analysis を表示してください。

    1.2.1 HLS コンパイラー定義済のプリプロセッサー・マクロ

    HLS コンパイラーはプリプロセッサーで有効な 2 つの内蔵マクロを備えています。マクロ定義に基づき、プリプロセッサーはどのようにコンパイラーを呼び出すかを決定し、フロー依存のコードを作成することができます。プリプロセッサー・マクロは、実行モードまたは検証モードで実行する必要があるコード分割を指定する際に役立ちます。

    HLS コンパイラー定義済のプリプロセッサー・マクロは __INTELFPGA_COMPILER__ および__INTELFPGA_TYPE__ です。

    1 インテル® HLS コンパイラー・ユーザーガイドUG-20037 | 2017.06.23

    インテル® HLS コンパイラー ユーザーガイド5

  • 表 2. __INTELFPGA_COMPILER__ および __INTELFPGA_TYPE__ のマクロの定義

    ツール起動 __INTELFPGA_COMPILER__ __INTELFPGA_TYPE__

    g++ 未定義 未定義

    I -march=x86-64 "0.92" "NONE"

    I -march=""

    "0.92" "VERILOG"

    1.3 コンポーネントの report.html ファイルのレビュー

    コンポーネントをコンパイルした後、 インテル HLS コンパイラー は、エリア、ループ構造、メモリー使用量、およびカーネル・パイプラインなどのカーネルのさまざまな側面を分析する HTML レポートを自動的に生成します。 HTML レポートを起動するには、 .prj/reports ディレクトリーにある report.html ファイルを開きます。

    1.3.1 HTML レポート GUI

    HTML レポート GUI は、レポートメニュー、Analysis ペイン、Source Code ぺイン、および Detailsペインの 4 つのセクションに分かれています。

    図 -2: HTML レポート GUI の概要

    レポートメニュー

    View reports のプルダウンメニューから、リストされいる 4 つのレポートのうちの 1 つをクリックして選択し、カーネルデザインの特定部分の分析を表示します。各レポートの詳細が Analysis ペインに表示されます。

    1 インテル® HLS コンパイラー・ユーザーガイドUG-20037 | 2017.06.23

    インテル® HLS コンパイラー ユーザーガイド6

  • 図 -3: プルダウンメニューの表示

    Analysis ペイン

    Analysis ペインは、View reports のプルダウンメニューで選択したレポートの詳細情報を表示します。

    Source Code ペイン

    Source Code ペインは、カーネルデザイン内のすべてのソースファイルにおけるコードを表示します。また、異なるソースファイル間を選択するには、Source Code ペイン上でプルダウンメニューをクリックします。Source Code ペインを折りたたむには、オプションが 2 つあります。

    • Source Code ペインのプルダウンメニュー横の X アイコンをクリックします。

    図 -4:

    • レポートメニューの右側にある垂直の省略記号のアイコンをクリックし、Show/Hide sourcecode を選択します。

    図 -5:

    あらかじめ Source Code ペインを折りたたんだ状態で展開する場合は、レポートメニューの右側にある垂直の省略記号のアイコンをクリックし、Show/Hide source code を選択します。

    1 インテル® HLS コンパイラー・ユーザーガイドUG-20037 | 2017.06.23

    インテル® HLS コンパイラー ユーザーガイド7

  • Details ペイン

    ループ分析またはエリアレポートに表示される各ラインは、使用可能な場合、Detail カラムレポートのコメントを詳しく述べる追加情報を表示します。Details ペインを閉じるために Details ペインを折りたたむには、オプションが 2 つあります。

    • Source Code ペインのプルダウンメニュー横の X アイコンをクリックします。

    図 -6:

    • レポートメニューの右側にある垂直の省略記号のアイコンをクリックし、Show/Hide detailsを選択します。

    図 -7:

    1.3.2 Report Summary のレビュー

    Report Summary は、デザイン内の各コンポーネントの要約を含んだデザインのコンパイル結果のおおまかな概要と、デザイン内の各コンポーネントが使用する見積られたリソースの要約を提供します。

    Report Summary は、Info、 Quartus Fit Summary、Estimated Resource Usage、およびCompile Warnings の 4 つ のセクションに分かれています。

    1 インテル® HLS コンパイラー・ユーザーガイドUG-20037 | 2017.06.23

    インテル® HLS コンパイラー ユーザーガイド8

  • 図 -8:

    Info

    Info セクションは、次の項目を含んだコンパイルの一般情報を表示します。

    • プロジェクトの名前• ターゲット FPGA ファミリーおよびデバイス

    • Quartus Prime のバージョン

    • HLS コンパイラーのバージョン

    • デザインをコンパイルするために使用されたコマンド• レポートが生成された日付と時間

    Quartus Fit Summary

    report.html Summary のページにある Quartus Fit Summary セクションは、 QuartusPrime ソフトウェアでデザインをコンパイルした後に作成されます。コンパイル後、Summary ページに次のセクションが表示されます。

    • Quartus Fit Clock Summary

    • Quartus Fit Resource Utilization Summary

    1 インテル® HLS コンパイラー・ユーザーガイドUG-20037 | 2017.06.23

    インテル® HLS コンパイラー ユーザーガイド9

  • Quartus Fit Clock Summary セクションは、デザインで達成することができる最大クロック周波数を表示します。

    Quartus Fit Resource Utilization Summary セクションは、デザイン全体と各個別のコンポーネントの両方のエリア使用率の合計を表示します。ソースラインでのエリア情報の内容はありません。

    Estimated Resource Usage

    Estimated Resource Usage セクションは、デザイン内の各コンポーネントで使用される見積られたリソースの要約とすべてのコンポーネントで使用されるリソース数の合計を表示します。

    Compile Warnings

    Compile Warnings セクションは、コンパイラーがコンパイル時に生成した警告のうちのいくつかを表示します。

    1.3.3 ループ情報のレビュー

    .prj/reports/report.html ファイルには、デザインのすべてのループとそれらのアンロールステータスに関する情報が含まれています。このループ分析レポートは、HLS コンパイラーがスループットを最大化できるかどうかを調べるのに役立ちます。

    さらに、ループ分析レポートは、次のプラグマの 1 つもしくは 1 つ以上のループを展開する場所を判断するのにも役立ちます。

    • #pragma unroll #pragma unroll について詳しくは、の "Unrolling aLoop"を参照してください。

    • #pragma loop_coalesce #pragma loop_coalesce について詳しくは、の"Coalescing Nested Loops"を参照してください。

    • #pragma ii #pragma ii について詳しくは、Intel FPGA SDK for OpenCLProgramming Guide の"Specifying a loop initiation interval(II)"を参照してください。

    1. レポートメニューにある View reports... のプルダウンメニューで、 Loop Analysis を選択します。

    2. Analysis ペインで Show fully unrolled loops を選択し、デザイン内のすべてのループの情報を取得します。

    3. デザインのスループットを向上させるためのアクションを特定するには、下のフローチャートを参照します。

    1 インテル® HLS コンパイラー・ユーザーガイドUG-20037 | 2017.06.23

    インテル® HLS コンパイラー ユーザーガイド10

    https://www.altera.co.jp/documentation/link.html#mwh1391807965224#ewa1411504035565https://www.altera.co.jp/documentation/link.html#mwh1391807965224#ewa1411504035565https://www.altera.co.jp/documentation/link.html#mwh1391807965224#yyy1489604310598https://www.altera.co.jp/documentation/link.html#mwh1391807965224#flb1489716579362https://www.altera.co.jp/documentation/link.html#mwh1391807965224#flb1489716579362

  • 図 -9: デザインの分析ループおよびパイプラインの決定注意:

    II はループのイニシエーション・インターバルを指し、新しいループ反復処理までの開始時間を示します。II の値 = 1 が理想的であり、すなわち、 パイプラインはクロックサイクルごとに新しいループ反復処理が可能なため、パイプラインが最大の効率で機能していることを意味します。

    ループ

    完全に展開された?

    部分的に展開された?

    パイプライン された?

    YES

    NO

    NO

    NO

    YESYES

    YES

    II=1? ループのパイプラインはオプションです。

    シリアル実行の情報は詳細ペインを参照

    Bottleneckまたは Details カラムで詳細を参照

    Details カラムに「Unrolled by #pragma unroll」または 「Auto-unrolled」 が表示されます。ループ構造はオプションです。最大スループットは達成されます。

    #pragma unroll の値が正しいかを確認

    NO

    1.3.3.1 ループ分析例

    report.html ファイル例は、vector_add.cpp ( /examples/tutorials/loop_memory_dependency で提供されるチュートリアル・ファイルの一部 ) から取得した HLS コンポーネントのデザインのループ分析を表示します。

    transpose_and_fold.cpp で次のコードスぺニット例を考慮します。

    01 #include "HLS/hls.h"02 #include "stdio.h"03 #include "stdlib.h"04 05 #define SIZE 3206 07 typedef altera::stream_in my_operand;08 typedef altera::stream_out my_result;09 10 void transpose_and_fold(my_operand &a, my_operand &b, my_result &c)11 {12 int i;13 int j;14 int a_buf[SIZE][SIZE];

    1 インテル® HLS コンパイラー・ユーザーガイドUG-20037 | 2017.06.23

    インテル® HLS コンパイラー ユーザーガイド11

  • 15 int b_buf[SIZE][SIZE];16 for (i = 0; i < SIZE * SIZE; i++) {17 a_buf[i / SIZE][i % SIZE] = a.read();18 b_buf[i / SIZE][i % SIZE] = b.read();19 }20 #ifdef USE_IVDEP21 #pragma ivdep22 #endif23 for (j = 0; j < SIZE * SIZE * SIZE; j++) {24 #pragma unroll25 for (i = 0; i < SIZE; i++) {26 b_buf[j % SIZE][i] += a_buf[i][j % SIZE];27 }28 }29 for (i = 0; i < SIZE * SIZE; i++) {30 c.write(b_buf[i / SIZE][i % SIZE]);31 }32 }

    図 -10: transpose_and_fold コンポーネントのループ分析レポート

    transpose_and_fold コンポーネントにはループが 4 つあります。ループ分析レポートは、コンパイラーが異なる種類のループ最適化の結果を表示します。

    • 24 行目のループは #pragma unroll の定義として、すべて展開されています。

    • 16 行目と 28 行目のループは、II の値が 1 でパイプラインされています。

    ループ分析レポート内の Block1.start ループはコード内には現れません。これは、コンポーネントが 1 回のみではなく連続的に実行できるようにコンパイラーが追加する暗黙的な無限ループです。

    1.3.4 メモリー・レプリケーションとストール可能な LSU に関する情報

    HLD レポートのコンポーネント・ビューアーには、各コンポーネントの抽象ネットリストが表示されます。 LSU ( ロードとストアー間のユニット ) 、コンポーネント・インターフェイス、ループ、およびローカルメモリー・システムを視覚化することができます。

    1 インテル® HLS コンパイラー・ユーザーガイドUG-20037 | 2017.06.23

    インテル® HLS コンパイラー ユーザーガイド12

  • transpose_and_fold component ( /examples/tutorials/loop_memory_dependency で提供される tutorial ファイルの一部 ) から抜粋した次のコード例を考察します。

    01 #include "HLS/hls.h"02 #include "stdio.h"03 #include "stdlib.h"04 05 #define SIZE 3206 07 typedef altera::stream_in my_operand;08 typedef altera::stream_out my_result;09 10 void transpose_and_fold(my_operand &a, my_operand &b, my_result &c)11 {12 int i;13 int j;14 int a_buf[SIZE][SIZE];15 int b_buf[SIZE][SIZE];16 for (i = 0; i < SIZE * SIZE; i++) {17 a_buf[i / SIZE][i % SIZE] = a.read();18 b_buf[i / SIZE][i % SIZE] = b.read();19 }20 #ifdef USE_IVDEP21 #pragma ivdep22 #endif23 for (j = 0; j < SIZE * SIZE * SIZE; j++) {24 #pragma unroll25 for (i = 0; i < SIZE; i++) {26 b_buf[j % SIZE][i] += a_buf[i][j % SIZE];27 }28 }29 for (i = 0; i < SIZE * SIZE; i++) {30 c.write(b_buf[i / SIZE][i % SIZE]);31 }32 }

    下の図は 23 行目の Block3 でループのレビューを促すために赤くハイライトされたことを示します。Block3 のループ分析は、II の値が 2 でパイプラインされていることを表し、ループのパイプラインはスループットに影響を与える可能性があります。システムビューアーは、II の値が b_buf 可変へのロードへのメモリーの依存性に起因していることを示します。

    1 インテル® HLS コンパイラー・ユーザーガイドUG-20037 | 2017.06.23

    インテル® HLS コンパイラー ユーザーガイド13

  • 図 -11: transpose_and_fold コンポーネントのシステムビューアー

    ノード上にマウスを置くと、LSU に関する更なる情報を提供するツールチップとして詳細が表示されます。下の図では、ツールチップはロードのレイテンシーが 6 で、かつ LSU にストールがないという情報を表示しています。

    1 インテル® HLS コンパイラー・ユーザーガイドUG-20037 | 2017.06.23

    インテル® HLS コンパイラー ユーザーガイド14

  • 図 -12: ノードおよびツールチップの詳細ビュー

    システムビューアーは、表示させたい接続種類の選択ができるようにします。Control を選択すると、システムビューアーにブロックとループの間の接続の表示を指示します。Memory を選択すると、システムビューアーにグローバルメモリーおよびローカルメモリーへの接続とそれらからの接続の表示を指示します。Streams を選択すると、システムビューアーにストリームからの読み出しとストリームへの書き込みを接続する表示を指示します。

    1 インテル® HLS コンパイラー・ユーザーガイドUG-20037 | 2017.06.23

    インテル® HLS コンパイラー ユーザーガイド15

  • 図 -13: ブロックとループの間が未接続の transpose_and_fold コンポーネントのシステムビュー

    1.3.5 Analysis ペインでのコンポーネントのエリア使用率のレビュー

    report.html ファイルには、見積られるエリア使用率の詳しい内容が含まれています。また、プライベート・メモリー構成などの主要なハードウェア機能に関するフィードバックも提供します。

    1 インテル® HLS コンパイラー・ユーザーガイドUG-20037 | 2017.06.23

    インテル® HLS コンパイラー ユーザーガイド16

  • 見積りエリア使用率の情報は、 Quartus Prime ソフトウェアから得た結果のリソース使用率と相関しますが、一致している必要はありません。見積りエリア使用率は、デザインのエリア・オーバーヘッドを伴うデザインの一部の識別に使用します。また、見積りを使用して異なるデザイン間のエリア使用率を比較することも可能です。見積りエリア使用率の情報は最終リソース使用率のプランニングには使用しないでください。

    report.html Summary ページの Quartus Fit Summary セクションはデザインを QuartusPrime でコンパイルした後に表示されます。コンパイル後、Summary ページに次のセクションが現れます。

    • Quartus Fit Clock Summary

    • Quartus Fit Resource Utilization Summary

    Quartus Fit Clock Summary セクションは、デザインで達成することができる最大クロック周波数を表示します。

    Quartus Fit Resource Utilization Summary セクションは、デザイン全体と個別の各コンポーネントの両方のエリア使用率の合計を表示します。ソースラインによるエリア情報の内容はありません。

    注意: Quartus Prime ソフトウェアを使用するコンポーネントのコンパイルは、数時間を要する場合があります。対照的に、HLS コンパイラーはほとんどのデザインで数分のうちに report.html ファイルを生成することができます。

    1 インテル® HLS コンパイラー・ユーザーガイドUG-20037 | 2017.06.23

    インテル® HLS コンパイラー ユーザーガイド17

  • • Quartus Prime ソフトウェアを使用してデザインをコンパイルする前、HLD レポートは次の例のようになっています。

    • Quartus Prime ソフトウェアを使用してデザインをコンパイルした後、HLD レポートは次の例のようになります。

    1 インテル® HLS コンパイラー・ユーザーガイドUG-20037 | 2017.06.23

    インテル® HLS コンパイラー ユーザーガイド18

  • 1.3.5.1 エリア分析の例

    デザインのエリア分析をレビューするには、ソースラインもしくはシステムに基づいた 2 つのオプションがあります。

    ソースによるエリア分析

    ソースによるエリア分析は、どのようにソースコードの各ラインがエリアに影響を与えるかについての概算を表示します。ソースビューによるエリア分析では、レポートはエリア階層を表示します。

    図 -14: HLS コンポーネントでのエリアレポートの上トップレベル・ビュー

    エリアレポート内の System 入力はデザイン内のすべてのコンポーネントを参照にします。System入力を展開してデザインのすべてのコンポーネントを表示します。この例では、1 つのコンポーネントのみ ( つまり、transpose_and_fold) です。

    レポート内の各ラインはステートおよび対応する情報を含んでいます。下の図のエリアレポート例では、ストリームのデータが 17 行目の in_buf に保存されていることを示し、消費されるエリアはポインター値を計算してそれを保存するために使用されます。14 行目は、エリアの消費が 16 RAM ブロックといくつかのロジックを使用する in_buf の結果であることを示しています。

    1 インテル® HLS コンパイラー・ユーザーガイドUG-20037 | 2017.06.23

    インテル® HLS コンパイラー ユーザーガイド19

  • 図 -15: ソースラインによるエリア使用率の内容

    システムによるエリア分析

    システムのエリア分析は、FPGA に実装された実際のハードウェアに最も近いエリアの内容を表示します。

    1 インテル® HLS コンパイラー・ユーザーガイドUG-20037 | 2017.06.23

    インテル® HLS コンパイラー ユーザーガイド20

  • 図 -16: システムによるエリア使用率の内容

    1.3.6 コンポーネント検証結果の情報

    テストベンチで呼び出す各コンポーネントの場合、Verification Statistics レポートでは、呼び出しの回数とタイプ、レイテンシー、イニシエーション・インターバル、およびスループットなどの情報を提供します。

    Verification Statistics レポートは、コンポーネントのシミュレーションの後で使用可能になります。

    注意: • Verification Statistics レポートにすでに表示されているデータは、テストベンチからコンポーネントへの入力値に依存している可能性があります。

    • Verification Statistics レポートは、コンポーネントの II の値と待機中の呼び出しへのスループットのみをレポートします。

    次の Verification Statistics レポート例は、シンプル関数コールとして 1 回実行され、待機中の呼び出しとして 100 回実行されているコンポーネント dut の場合です。

    1 インテル® HLS コンパイラー・ユーザーガイドUG-20037 | 2017.06.23

    インテル® HLS コンパイラー ユーザーガイド21

  • 図 -17: コンポーネント dut の Verification Statistics レポートの Analysis ペイン

    ihc::stream_in や ihc::stream_out などの明示的なストリームを使用するコンポーネントの場合、Verification Statistics レポートは Details ペインで示されているとおり、すべての個別ストリームのスループットも提供します。

    図 -18: 明示的なストリームを使用した Verification Statistics レポートの Details ペイン

    1.3.7 Component Memory Viewer

    多くのアルゴリズムでは、データ移動がボトルネックになることがよくあります。HTML レポート(report.html) 内の Component memory viewer は、 I コンパイラーがコンポーネントのメモリーシステム上のデータ接続をどのように解釈するかを示しています。Component memory viewerを使用すると、コンポーネント・デザインのデータ移動のボトルネックの特定に役立ちます。

    更に、メモリーアクセスの一部のパターンは LSU ( ロードストアー・ユニット ) で望ましくない調停を引き起こし、コンポーネント のスループット性能に影響を与える可能性があります。Componentmemory ビューアーを使用すると、LSU で望ましくないアービトレーションが発生する可能性のある位置を見つけることができます。

    1 インテル® HLS コンパイラー・ユーザーガイドUG-20037 | 2017.06.23

    インテル® HLS コンパイラー ユーザーガイド22

  • 図 -19: 簡単な例での Component memory viewer

    Component memory viewer には次のペインがあります。

    Memory List Memory List ペインは、コンポーネント の階層、そのコンポーネント内のメモリー、および対応するメモリーバンクを表示します。

    リストにあるメモリー名をクリックすると、Component memory viewer ペイン内のメモリーがグラフィック表示されます。また、メモリーを宣言したコード内のラインは、Source Code ペインでハイライトで表示されます。

    メモリーバンクでのチェックボックスをクリアーすると、そのバンクが Componentmemory viewer ペインに表示され、複雑なメモリーデザインを表示する際に特定のメモリーバンクに焦点を当てるのに役立ちます。デフォルトでは、Componentmemory 内のすべてのバンクが選択されて、Component memory viewer ペインで表示されます。

    Componentmemory ビューアー

    Component memory viewer ペインは、メモリーシステム内のバンク上のロジックポートを特定するためにロードとストアーの間の接続を表示します。次のノードのタイプは Component memory viewer ペイン内で表示される可能性があり、コンポーネント ・メモリーシステムによります。

    1 インテル® HLS コンパイラー・ユーザーガイドUG-20037 | 2017.06.23

    インテル® HLS コンパイラー ユーザーガイド23

  • • Memory node:コンポーネント ・メモリーです。

    • Bank node: メモリー内のバンクです。Memory List ペインで選択されているバンクのみ表示されます。Memory List ペイン内でのバンクの選択は複雑なメモリーデザインの表示に役立ちます。

    • Port node: バンクでのロジックポートです。次の 3 種類のポートがあります。

    — R: 読み取り専用ポート

    — W: 書き込み専用ポート

    — RW: 読み取りおよび書き込みを有するポート

    • LSU node: メモリーに接続されるストアー (ST) またはロード (LD) ノードです。

    • Arbitration node: LSU アービトレーション (ARB) ノードは LSU が共有ポートノードへのアクセスを競合していることを示します。

    • Port-sharing node: ポートシェアリング・ノード (SHARE) は LSU が共有ポートノードへの排他的なアクセスを持つことを示しているため、ロード・ストアー・ユニットにはストールがありません。

    任意のノードにカーソルを置くと、そのノードの属性が表示されます。

    LSU ノードにカーソルを置くと、LSU ノードから LSU が接続するすべてのポートまでのパスがハイライトで表示されます。

    ポートノードにカーソルを置くと、ポートノードからポートノードに格納されているすべての LSU までのパスがハイライトで表示されます。

    ノードを選択するためにクリックし、Details ペインにノード属性を表示します。

    Details Details ペインは Component memory viewer ペインで選択されたノードの属性を表示します。例えば、component 内のメモリーを選択する際、Details ペインはソースコードで指定した任意のユーザー定義の HLS 属性と同様に、メモリーバンクの幅や深さなどの情報を表示します。

    Details ペインの内容は Component memory viewer ペイン内で異なるノードを選択するまで保持されます。

    1.4 インターフェイス定義

    コンポーネントとしてラベルを付ける各関数では、HLS コンパイラーは対応する RTL モジュールを作成します。この RTL モジュールには、システムがハードウェアとやり取りすることができるトップレベルのポートまたはインターフェイスが必要です。

    デフォルトでは、各コンポーネントは次のインターフェイスとデータを含んでいます。

    • start と busy 信号から構成される呼び出しインターフェイス

    • done と stall 信号から構成される戻り値インターフェイス

    • コンポーネント関数が戻り値がある場合に返すデータ

    コンポーネントのスカラー引数のそれぞれは、コンポーネントの start と busy 信号に関連付けられた入力コンデュイットになります。

    1 インテル® HLS コンパイラー・ユーザーガイドUG-20037 | 2017.06.23

    インテル® HLS コンパイラー ユーザーガイド24

  • コンポーネントのポインターまたはリファレンス引数のそれぞれは、コンポーネントの start と busy信号に関連付けられた、アドレスの入力コンデュイットになります。この入力コンデュイットに加えて、すべてのポインターは Avalon® Memory-Mapped (Avalon-MM) マスター・インターフェイスを共有し、このインターフェイスを介してコンポーネントがシステムメモリーから各ポインターのデータをフェッチします。これらのポインター・インターフェイスは mm_master クラスを使用してカスタマイズができます。

    HLS コンパイラーは、stream_in と stream_out クラスを使用してコンポーネントのインターフェイスで Avalon Stream をサポートします。これらのインターフェイスのカスタマイズ方法について詳しくは、 インテル HLS コンパイラー・リファレンス・マニュアルの Parameter Protocols の項( 英語版 ) を参照してください。

    1.4.1 インターフェイス定義の例 : スカラーおよびポインターの両引数を使用したコンポーネント

    次のデザイン例は、コンポーネントのインターフェイスと信号の間の関連性、および RTL モジュールの波形を示しています。

    component int dut(int a, int* b, int i) { return a*b[i];}

    図 -20: コンポーネント dut でのインターフェイスと信号のブロック図

    dut

    startbusy

    a[31:0]b[31:0]i[31:0]

    donestall

    returdata[31:0]

    Avalon-MM Interface

    1 インテル® HLS コンパイラー・ユーザーガイドUG-20037 | 2017.06.23

    インテル® HLS コンパイラー ユーザーガイド25

  • 図 -21: コンポーネント dut での信号の波形ダイアグラム図このダイアグラムは Avalon-MM リード信号が、リード・レイテンシーが 1 で、かつ、ノンブロッキング・メモリー・インターフェースから読み出すことを表しています。

    1.4.2 リセット動作

    HLS コンポーネントの場合、リセット・アサーションは非同期であり、リセット・ディアサーションは同期していなければなりません。

    リセットのアサーションおよびディアサーションの動作は、次の Verilog コード例の記述のとおり、リセット・シンクロナイザーを使用して非同期リセット入力から生成することができます。

    reg [2:0] sync_resetn;always @(posedge clock or negedge resetn) begin if (!resetn) begin sync_resetn

  • コンポーネント・リセットのエミュレーション

    ihc_hls_sim_reset API の使用により、エミュレーション時にコンポーネントのリセット動作を確認することができます。この API はリセットが実行された場合 ( つまり、リセットがコンポー ネントのハードウェア・シミュレーション中に呼び出さた場合 )、1 を返します。その他の場合は ( つまり、x86コンポーネントから呼び出された場合)、API は 0 を返します。

    次のように API で呼び出します。

    int ihc_hls_sim_reset(void);

    1.5 HLS IP の検証

    コンポーネントを FPGA アーキテクチャーにコンパイルする際、HLS コンパイラーは、デザインの C++テストベンチを RTL シミュレーターで実行している合成されたコンポーネントのインスタンスにリンクします。シミュレーションの実行には Mentor Graphics® ModelSim®ソフトウェアを使用します。ModelSim ソフトウェアのサポートされるバーションのリストは、 Quartus Prime Software andDevice Support Release Notes の EDA Interface Information の項 ( 英語版 ) を参照してください。

    • IP を検証するには、FPGA アーキテクチャーをターゲットにすることで、HLS コンパイラーが生成する実行可能ファイルを実行します。デフォルトでは、実行可能ファイルの名前は a.out です。

    シンプルな単一ファイルデザインのコマンド例 :

    I -march="" --component […] design.cpp

    関連情報• EDA インターフェイス情報 - Quartus Prime スタンダード・エディション・ソフトウェア

    • EDA インターフェイス情報 - Quartus Prime プロ・エディション・ソフトウェア

    1.5.1 検証テストベンチ実行可能ファイルの生成

    I コマンドに-march=" "を含めた場合、HLS コンパイラーはコンポーネントを識別し、高位合成を実行します。次に、検証テストベンチを実行する実行可能ファイルを生成します。

    デフォルトでは、HLS コンパイラーはコンポーネント・デザイン全体を最適化するためにシミュレーターを構成します。シミュレーターはすべての信号をログ付けしません。シミュレーターで信号ログ付けを有効にするには、I コマンドで -ghdl オプションを含めます。

    1 インテル® HLS コンパイラー・ユーザーガイドUG-20037 | 2017.06.23

    インテル® HLS コンパイラー ユーザーガイド27

    https://www.altera.co.jp/documentation/hco1416836145555.html#hco1416836645047https://www.altera.co.jp/documentation/ewa1443722509979.html#hco1416836645047

  • I -march="" コマンドを呼び出す際は、HLS コンパイラーは検証実行可能ファイルを生成するために次のタスクを実行します。

    1. デザインを解析し、FPGA へのコンポーネント合成に必要な関数とシンボルを抽出します。HLS コンパイラーは、C++ テストベンチのコンパイルに必要な関数とシンボルを抽出します。

    2. Direct Programming Interface (DPI) コールを介してシミュレーターを呼び出す x86-64 バイナリーを生成するために、テストベンチコードをコンパイルします。

    3. コンポーネント合成のために、コードを FPGA にコンパイルします。このコンパイルはコンポーネントでの Verilog と Verilog-DPI テストベンチを生成します。

    1.5.2 検証時のデバッグ

    デフォルトでは、HLS コンパイラーはコンポーネント・デザイン全体を最適化するためにシミュレーターを構成します。シミュレーターはすべての信号をログ付けしません。シミュレーターで信号ログ付けを有効にするには、I コマンドで -ghdl オプションを含めます。

    1.5.2.1 信号ステータスのログ付け

    コンポーネントのデバッグ表示の有効化に加えて、-ghdl HLS コンパイラー・コマンドのオプションですべての信号をログ付けできるようになります。

    • 完全なデバッグ表示を有効にし、すべての信号のログ付けするには、次のコマンドを呼び出します。

    I -march="" -ghdl

    シミュレーションはバッチモードで実行します。シミュレーションが完了すると、波形を表示するためにa.prj/verification ディレクトリー内の vsim.wlf ファイルを開きます。

    1.5.3 エンキュー関数コールを使用したハイスループットのシミュレーション ( 非同期コンポーネント・コール )

    デフォルトでは、シミュレーションのコンポーネント・コールはブロッキング・コールで、すなわち、テストベンチは実行を続ける前にコンポーネントからの戻り値を待ちます。このブロッキング・コールは、コンポーネントのシリアル実行を返します。充填されたパイプライン条件でコンポーネントの機能をテストするには、コンポーネントの実行を開始する前にコンポーネントに入力を照会する必要があります。 明示的なインターフェイスを使用してコンポーネントに入力を照会するには、cosimulation ライブラリーからエンキュー関数コールを使用します。

    表 3. cosimulation ライブリーから明示的なインターフェイスを使用したコンポーネントへの関数

    関数 説明

    ihc_hls_enqueue(void* retptr, void*funcptr, …)

    この関数は HLS コンポーネントの 1 つの呼び出しをエンキューする。戻り値は、戻り型へのポインターでなければならない最初の引数に格納される。コンポーネントは ihc_hls_component_run_all()関数が呼び出されるまで実行されない。

    ihc_hls_enqueue_noret(void* funcptr,…)

    この関数は、戻り値をキャプチャーするための出力ストリームがないことを除き、ihs_hls_enqueue(void* retptr, void* funcptr, …)と類似する。戻り値は、void 戻り値コンポーネント用。

    ihc_hls_component_run_all (void*funcptr)

    この関数は、パイプライン形式で指定されたコンポーネントへのすべてのエンキューされたコールを実行する。

    1 インテル® HLS コンパイラー・ユーザーガイドUG-20037 | 2017.06.23

    インテル® HLS コンパイラー ユーザーガイド28

  • 1.5.3.1 実行モデル

    エンキューされたコンポーネント・コールの実行は、ihs_hls_component_run_all(void*funcptr)関数がコールされた場合にのみ実行されます。 ihs_hls_run_all_enqueued()関数が明示的に実行をトリガーするまで、実行の外部から見えるすべての副作用 ( 例えば、戻りデータ、ポインター、またはマスター ) は、テストベンチには表示されません。

    1.5.3.2 エンキュー関数コールの使用例

    コード例は、各サイクルでどのようにエンキュー関数コールがコンポーネント ( つまり、dut) の波形に影響を与えるかを表します。

    図 -22: エンキュー関数コールを使用しないコンポーネント dut での信号波形コンポーネント dut での信号波形を、次のダイアグラムに示します。この例の抜粋したコードで示すように、コンポーネント dut にはエンキュー関数コールは含まれていません。

    #include "HLS/hls.h"#include

    component int dut(int a, int b) { return a*b;}

    int main (void) {

    int x1, x2, x3; x1 = dut(1, 2); x2 = dut(3, 4); x3 = dut(5, 6);

    printf("x1 = %d, x2 = %d, x3 = %d\n", x1, x2, x3);

    return 0;}

    1 インテル® HLS コンパイラー・ユーザーガイドUG-20037 | 2017.06.23

    インテル® HLS コンパイラー ユーザーガイド29

  • コンポーネント dut での信号波形を次のダイアグラムに示します。この例の抜粋したコードで示すように、コンポーネント dut にはエンキュー関数コールが含まれています。

    #include "HLS/hls.h"#include

    component int dut(int a, int b) { return a*b;}

    int main (void) {

    int x1, x2, x3; ihs_hls_enqueue(&x1, &dut, 1, 2); ihs_hls_enqueue(&x2, &dut, 3, 4); ihs_hls_enqueue(&x3, &dut, 5, 6);

    ihs_hls_component_run_all(&dut);

    printf("x1 = %d, x2 = %d, x3 = %d\n", x1, x2, x3);

    return 0;}

    1.6 Quartus Prime ソフトウェアを使用した IP の合成

    Quartus Prime ソフトウェアで HLS コンパイラー生成の IP を使用するには、一方または両方のツールのセットに熟知している必要があります。

    • Quartus Prime スタンダード・エディション・ソフトウェアおよび Qsys システム統合ツール

    • Quartus Prime プロ・エディション・ソフトウェアおよび Qsys Pro システム統合ツール

    .prj/components ディレクトリーは、 Quartus Prime プロジェクトに IP を含めるために必要なすべてのファイルを含んでいます。各コンポーネントで HLS コンパイラーが生成する IP はポータブルです。必要に応じて、components ディレクトリーにあるフォルダーを異なる場所またはマシンに移動させることができます。

    31 ページの Quartus Prime プロジェクトへの HLS コンパイラー生成の IP の追加

    31 ページの Qsys システムへの HLS コンパイラー生成 IP の追加

    32 ページの HLS コンパイラー生成 IP のスタンドアロンの QoR ( 結果の品質 ) メトリックの生成

    1 インテル® HLS コンパイラー・ユーザーガイドUG-20037 | 2017.06.23

    インテル® HLS コンパイラー ユーザーガイド30

  • 1.6.1 Quartus Prime プロジェクトへの HLS コンパイラー生成の IP の追加

    HLS コンパイラー生成の IP を Quartus Prime プロジェクトで使用するには、 Quartus Prime スタンダード・エディション・ソフトウェアでは、はじめにプロジェクト内に Quartus Prime Qsys ファイル(.qsys) を追加しなければなりません。 Quartus Prime プロ・エディション・ソフトウェアでは、はじめにプロジェクト内に Quartus Prime IP ファイル (.ip) を追加しなければなりません。

    .qsys ファイルまたは.ip ファイルは、コンポーネントですべての必要な HDL ファイルに追加する情報が含まれています。また、IP 合成に必要なコンポーネント固有の Quartus Prime セッティング・ファイル (QSF) 設定にも適用されます。

    1. Quartus Prime プロジェクトを作成します。

    2. Project > Add/Remove Files in Project をクリックしします。

    3. 次のタスクのいずれかを実行します。— Quartus Prime スタンダード・エディション・ソフトウェアでは、Settings のダイアログボッ

    クスで、コンポーネントの.qsys ファイルを選択し、ブラウズします。

    例 : .prj/components//.qsys

    — Quartus Prime プロ・エディション・ソフトウェアでは、Settings のダイアログボックスで、コンポーネントの.ip ファイルを選択しブラウズします。

    例 : .prj/components//.ip

    4. Quartus Prime プロジェクトで、コンポーネントのトップレベルのモジュールをインスタンス化します。コンポーネントのトップレベルのモジュールをインスタンス化する方法の例については、.prj/components//_inst.v ファイルを参照してください。

    1.6.2 Qsys システムへの HLS コンパイラー生成 IP の追加

    HLS コンパイラー生成 IP を Qsys システムで使用するには、まず IP 検索パスまたは IP Catalog にディレクトリーを追加しなければなりません。

    Qsys では、HLS コンパイラー生成 IP は IP Catalog 内に表示されます。次のタスクを実行します。

    1. Quartus Prime ソフトウェアでは、Tools > Options をクリックします。

    2. Options のダイアログボックスの Category の下で IP Settings を展開して、IP CatalogSearch Locations をクリックします。

    3. 次のタスクのいずれかを実行します。— Quartus Prime スタンダード・エディション・ソフトウェアでは、IP Catalog Search

    Locations のダイアログボックスで、IP 検索パスに.qsys ファイルを含むディレクトリーへのパスを追加します。デフォルト・ディレクトリーは .prj/components/**/*です。

    — Quartus Prime プロ・エディション・ソフトウェアでは、IP Catalog Search Locationsのダイアログボックスで、IP 検索パスに .prj/components// として.ip ファイルを含むディレクトリーへのパスを追加します。

    4. IP Catalog には、IP を HLS プロジェクト・ディレクトリーから選択し、Qsys システムに追加します。

    1 インテル® HLS コンパイラー・ユーザーガイドUG-20037 | 2017.06.23

    インテル® HLS コンパイラー ユーザーガイド31

  • Qsys または Qsys Pro のより詳しい情報は、 Quartus Prime スタンダード・エディションのVolume 1 または Quartus Prime プロ・エディション ハンドブックをそれぞれ参照してください。

    関連情報• Creating a System with Qsys

    • Introduction to Qsys Pro

    1.6.3 HLS コンパイラー生成 IP のスタンドアロンの QoR ( 結果の品質 ) メトリックの生成

    コンポーネントを合成する際、HLS コンパイラーはプロジェクトディレクトリ内 ( つまり、.prj/quartus) に quartus サブディレクトリーを生成します。quartus ディレクトリーは、 Quartus Prime ソフトウェアを使用してデザイン内のすべてのコンポーネントをコンパイルするために構成された Quartus Prime プロジェクトを含んでいます。この Quartus Prime プロジェクトは、 Quartus Prime ソフトウェアから正確なエリアとパフォーマンス予測を生成します。.prj/reports/lib/json/quartus.json ファイルは、コンポーネントでのエリアおよびパフォーマンス・データを記録します。このデータは、 .prj/reports/report.html にある HLD レポートで確認することができます。

    注意: 一般的な Quartus Prime のコンパイル時間は、コンポーネントのサイズにより数分から数時間を要します。

    • QoR データを生成するには、quartus ディレクトリーに移動し、次のコマンドを呼び出すことでQuartus Prime プロジェクトをコンパイルします。

    quartus_sh --flow compile quartus_compile

    • コンポーネントの合成後、HLS コンパイラーに Quartus Prime 統合フローを自動的に実行するように指示するオプションがあります。I コマンドに --quartus-compile オプションを含めます。

    I -march="" --quartus-compile --component ...

    1.7 HLS コンパイラーの制限事項

    HLS コンパイラーを使用して IP を作成する場合は、現在のソフトウェアおよびプログラミングのセットの制限事項に注意する必要があります。

    コンパイラー・サポート

    Linux コンパイラー・サポート

    HLS コンパイラーは GGC 4.7.0 以降をサポートしていません。

    HLS コンパイラーは Red Hat Enterprise Linux 6 のみをサポートしています。

    未サポートの HLS コンパイラーを使用した GCC のバージョンの使用について詳しくは、 インテル HLS コンパイラー入門ガイドの未サポートの GOC バージョンでの使用の項を参照してください。

    Windows コンパイラー・サポート

    Windows 向け HLS コンパイラーは Microsoft Visual Studio 2010 のみと互換性があります。

    1 インテル® HLS コンパイラー・ユーザーガイドUG-20037 | 2017.06.23

    インテル® HLS コンパイラー ユーザーガイド32

    https://www.altera.co.jp/documentation/mwh1409960181641.html#mwh1409958596582https://www.altera.co.jp/documentation/jbr1437426657605.html#jka1456165250373

  • 未サポートの HLS コンパイラーを使用した Microsft Visual Studio のバージョンの使用について詳しくは、 インテル HLS コンパイラー入門ガイドの未サポートのバージョンでの Microsoft Visual Studio の使用の項を参照してください。

    C++ 言語の制限

    C++ でソースコードをプログラムします。可能であれば、合成 ( つまり、コンポーネント関数内のコード ) を目的とするコードでの C++ の C99 サブセットでプログラムします。

    • コンポーネントは仮想関数、関数ポインター、およびビットフィールドを含むことはできません。• コンポーネントの一部である関数スコープ静的変数は、関数の引数で初期化できません。

    C++11 の制限

    • HLS コンパイラーはイニシャライザー・リストやラムダ関数などの特定の C++11機能をサポートしていません。

    メンバーシップ・クラス

    • HLS コンポーネントは C++ クラスメンバーまたは宣言したネームスペースにはできません。この方法でコンポーネントを使用する場合は、実際に実装するコールのクラスやネームスペースの一部ではないコンポーネントを作成し、そのコンポーネントを呼び出します。

    例外処理 • コンポーネントに例外処理を含めることはできません。

    Library コール

    • HLS コンパイラーは、テストベンチ・コードからのコールを含めて、Windows で C++ ライブラリー・コールを現在サポートしていません。

    Library 関数

    • コンポーネントは標準の C または C++ ライブラリー関数を含めることができません。

    printf()または cout コールを含むコンポーネントは x86 実装で動作します。しかしながら、 インテル HLS コンパイラーで提供される stdio.h ライブラリーや iostream 標準 C ライブラリー関数を含む場合、生成された RTL にはprintf()または cout 関数コールを含んでいません。

    複数のインターフェイス

    • HLS コンパイラーはパラメーターとして使用されている複数のインターフェイスを持つクラスをサポートしていません。各クラスが最大で 1 つのクラスを直接継承している限り、クラスをパラメーターとして使用することができます。

    ネームスペース

    • HLS コンポーネントは C++ クラスメンバーまたは宣言されたネームスペースであってはいけません。コンポーネントをこのように使用する場合は、実際に実装をコールするクラスまたはネームスペースの一部ではないコンポーネントを作成し、そのコンポーネントをコールします。

    オーバーロード

    • コンポーネントは、テンプレート化された関数またはオーバーロードされた関数にすることはできません。このようにコンポーネントを使用する必要がある場合は、テンプレート関数またはオーバーロードされた関数の一部ではないコンポーネントを作成し、そのコンポーネントを呼び出します。

    パラメーター

    • HLS コンパイラーは、複数の継承がパラメーターとして使用されているクラスをサポートしていません。各クラスが最大で 1 つのクラスを直接継承している限り、クラスをパラメーターとして使用できます。

    1 インテル® HLS コンパイラー・ユーザーガイドUG-20037 | 2017.06.23

    インテル® HLS コンパイラー ユーザーガイド33

  • 再帰 • HLS コンパイラーは、再帰を使用するコンポーネントの合成をサポートしていません。ただし、末尾再帰がサポートされています。

    コンポーネントに再帰を使用するアルゴリズムがあり、それが FPGA アクセラレーションで識別されている場合、可能であれば、末尾再帰を使用するようにアルゴリズムを変更します。

    テンプレート • コンポーネントは、テンプレート化された関数またはオーバーロードされた関数にすることはできません。コンポーネントをこのように使用する場合は、テンプレート関数またはオーバーロードされた関数の一部ではないコンポーネントを作成し、そのコンポーネントを呼び出します。

    1 インテル® HLS コンパイラー・ユーザーガイドUG-20037 | 2017.06.23

    インテル® HLS コンパイラー ユーザーガイド34

  • 2 改訂履歴

    表 4. インテル HLS コンパイラー ユーザーガイドの改訂履歴

    日付 バージョン 変更内容

    2017 年 6 月 2019.06.23 • メンテナンスによる修正および変更。

    2017 年 6 月 2017.06.09 • 「 HLS コンパイラーの制限事項 32 ページの 」で、コンパイラーの制限を追加、削除、および変更し、更新。

    • Rebranding __ALTERA_COMPILER__ and __ALTERA_TYPE__ to__INTELFPGA_COMPILER__ and __INTELFPGA_TYPE__

    • コンパイラー・オプションの参照を-march=fpga から-march=""へ変更。-march コンパイラーのオプションに関する詳細は、link/ewa1462824960255/ewa1462897780080 の Command Options that Customize Compilationを参照してください。

    • HLS コンポーネントおよびテストベンチの作成 5 ページの で、-Wconversion でコンポーネントをコンパイルする際の推奨を追加。

    • リセット動作 26 ページの で、HLS コンポーネントのリセット動作の情報を追加。

    2017 年 2 月 2017.02.03 • I コマンドを実行する際、どの関数にコンポーネントが合成されているかについて、注釈を追加。

    • コンポーネントの report.html ファイルのレビューで、Component memory ビューアーのセクションを Component memory ビューアー・レポートの説明のために追加。.

    • コンポーネントの report.html ファイルのレビューの例とスクリーン・キャプチャーにインテル HLS コンパイラーで提供されている例とチュートリアルを反映させ、更新。

    • __ALTERA_COMPILER__ HLS コンパイラー定義のプリプロセッサー・マクロの値を更新しました。

    2016 年 11 月 2016.11.30 • コンポーネントの report.html ファイルのレビューで、コンポーネント検証結果の情報のセクションに Verification Statistics レポートの説明を追加。

    • HLS IP の検証で、サポートされる ModelSim ソフトウェアのバージョンがQuartus Prime ソフトウェアおよびデバイス・サポート・リリース・ノートで使用可能であるという情報を注釈済。

    • 項「Latency Measurement during Verification」を、API が削除された説明内に記述されていたため、削除。

    • Quartus Prime プロジェクトへのコンパイラー生成の IP の追加および Qsys システムへのコンパイラー生成の IP の追加で、 Quartus Prime スタンダード・エディション・ソフトウェアの場合、問題のファイルは.qsys ファイルで、 Quartus Prime プロ・エディション・ソフトウェアの場合は問題のファイルは.ip ファイルであることを追加。

    • 項「 HLS コンパイラーの制限事項」を更新。— ModelSim ソフトウェアのバーションサポートの制限を削除。— C++ ライブラリー・コールが Windows でサポートされないという制限を追加。

    2016 年 9 月 2016.09.12 初版

    UG-20037 | 2017.06.23

    Intel Corporation.無断での引用、転載を禁じます。Intel、インテル、Intel ロゴ、Altera、ARRIA、CYCLONE、ENPIRION、MAX、NIOS、QUARTUS および STRATIX の名称およびロゴは、アメリカ合衆国および/ またはその他の国における Intel Corporationの商標です。インテルは FPGA 製品および半導体製品の性能がインテルの標準保証に準拠することを保証しますが、インテル製品およびサービスは、予告なく変更される場合があります。インテルが書面にて明示的に同意する場合を除き、インテルはここに記載されたアプリケーション、または、いかなる情報、製品、またはサービスの使用によって生じるいっさいの責任を負いません。インテル製品の顧客は、製品またはサービスを購入する前、および、公開済みの情報を信頼する前には、デバイスの仕様を最新のバージョンにしておくことをお勧めします。*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

    ISO9001:2008登録済

    https://www.altera.co.jp/documentation/ewa1462824960255.html#ewa1462897780080https://www.altera.co.jp/documentation/ewa1462824960255.html#ewa1462897780080http://www.altera.com/support/devices/reliability/certifications/rel-certifications.htmlhttp://www.altera.com/support/devices/reliability/certifications/rel-certifications.htmlhttp://www.altera.com/support/devices/reliability/certifications/rel-certifications.html

    インテル HLS コンパイラー ユーザーガイド 目次1  インテル® HLS コンパイラー・ユーザーガイド1.1  HLS コンパイラーの概要1.1.1 HLS デザインフロー1.1.2 プロフジェクト・ディレクトリー

    1.2 HLS コンポーネントおよびテストベンチの作成1.2.1  HLS コンパイラー定義済のプリプロセッサー・マクロ

    1.3 コンポーネントの report.html ファイルのレビュー1.3.1 HTML レポート GUI1.3.2  Report Summary のレビュー1.3.3 ループ情報のレビュー1.3.3.1 ループ分析例

    1.3.4 メモリー・レプリケーションとストール可能な LSU に関する情報1.3.5 Analysis ペインでのコンポーネントのエリア使用率のレビュー1.3.5.1 エリア分析の例

    1.3.6 コンポーネント検証結果の情報1.3.7  Component Memory Viewer

    1.4 インターフェイス定義1.4.1 インターフェイス定義の例 : スカラーおよびポインターの両引数を使用したコンポーネント1.4.2 リセット動作

    1.5 HLS IP の検証1.5.1 検証テストベンチ実行可能ファイルの生成1.5.2 検証時のデバッグ1.5.2.1 信号ステータスのログ付け

    1.5.3 エンキュー関数コールを使用したハイスループットのシミュレーション ( 非同期コンポーネント・コール )1.5.3.1 実行モデル1.5.3.2 エンキュー関数コールの使用例

    1.6  Quartus Primeソフトウェアを使用した IP の合成1.6.1  Quartus Primeプロジェクトへの HLSコンパイラー生成の IP の追加1.6.2 Qsys システムへのHLSコンパイラー生成 IP の追加1.6.3  HLSコンパイラー生成 IP のスタンドアロンの QoR ( 結果の品質 ) メトリックの生成

    1.7  HLS コンパイラーの制限事項

    2  改訂履歴