2. 高位合成 (HLS) のデザイン例およびチュートリアル
インテル®HLS (高位合成) コンパイラー・プロ・エディションに含まれているデザイン例およびチュートリアルでは、サンプル・コンポーネントが用意されており、コンポーネントをモデル化またはコード化することにより、 インテル®HLSコンパイラーからデザインにとって最良の結果を得る方法を示します。
高位合成 (HLS) デザイン例
高位合成 (HLS) デザイン例では、さまざまなアルゴリズムを効果的に実装する方法を素早く確認し、 インテル®HLSコンパイラーから最良の結果を得ることができます。
<quartus_installdir>/hls/examples/<design_example_name>
<quartus_installdir> のある場所は、 インテル® Quartus® Primeデザインスイートがインストールされているディレクトリーです。例 : /home/<username>/intelFPGA_pro/20.2 または C:\intelFPGA_pro\20.2
| 重点分野 | 名前 | 説明 |
|---|---|---|
| 線形代数 | QRD | 修正グラムシュミット・アルゴリズムを使用して、行列をQR分解します。 |
| 信号処理 | interp_decim_filter | シンプルで効率的な補間/デシメーション・フィルターを実装します。 |
| シンプルなデザイン | counter | シンプルで効率的な32ビット・カウンター・コンポーネントを実装します。 |
| ビデオ処理 | YUV2RGB | 基本的なYUV422からRGB888への色空間変換を実装します。 |
| ビデオ処理 | image_downsample | 画像ダウンサンプリング・アルゴリズムを実装し、バイリニア補間を使用して、画像サイズを縮小します。 |
HLSデザインのチュートリアル
HLSデザインのチュートリアルでは、HLS固有の重要なプログラミング概念のほか、優れたコーディング方法を示します。
各チュートリアルのREADMEファイルには、チュートリアルでカバーしている内容やチュートリアルの詳しい実行方法に関する説明が記載されています。
| 名前 | 説明 |
|---|---|
下欄のチュートリアルは、 インテル® Quartus® Primeシステムの次の場所にあります。 |
|
| ac_fixed_constructor | ac_fixed コンストラクターの使用方法を示します。コーディング・スタイルの小数の変動を使用して、より良いQoR (結果の品質) を得ることができます。 |
| ac_fixed_math_library | インテル®HLSコンパイラーの ac_fixed_math 固定小数点の数学ライブラリー関数の使用方法を示します。 |
| ac_int_basic_ops | ac_int クラスで使用可能な演算子を示します。 |
| ac_int_overflow | DEBUG_AC_INT_WARNING および DEBUG_AC_INT_ERROR キーワードの使用方法を示します。エミュレーション実行時のオーバーフロー検出に役立ちます。 |
下欄のチュートリアルは、 インテル® Quartus® Primeシステムの次の場所にあります。 |
|
| 1_reduced_double | アプリケーションが hls_float からメリットを得る方法を示します。下線の種類を double から hls_float <11,44> (reduced double) に変更します。 |
| 2_explicit_arithmetic | hls_float バイナリー演算子の明示的なバージョンを使用して、浮動小数点算術演算を必要に応じて実行する方法を示します。 |
| 3_conversions | his_float 型のデザインに変換が現れるタイミングと、異なる変換モードを使用してコンパイル型定数を生成する方法を示します。異なる hls_float 型を使用します。 |
| 名前 | 説明 |
|---|---|
下欄のチュートリアルは、 インテル® Quartus® Primeシステムの次の場所にあります。 |
|
| attributes_on_mm_slave_arg | Avalon® Memory Mapped (MM) スレーブ引数をメモリー属性に適用する方法を示します。 |
| exceptions | 定数上のメモリー属性および struct メンバーを使用する方法を示します。 |
| memory_bank_configuration | 各メモリーバンクのロードポート/ストアポートの数を制御し、コンポーネント領域の使用率とスループットのいずれかまたはその両方を最適化する方法を示します。次のメモリー属性を1つ以上使用します。
|
| memory_geometry | メモリーをバンクに分割し、各メモリーバンクのロードポート/ストアポートの数を制御する方法を示します。次のメモリ属性を1つ以上使用します。
|
| memory_implementation | レジスターの変数もしくは配列、MLAB、またはRAMの実装方法を示します。次のメモリー属性を使用します。
|
| memory_merging | リソース使用率を向上させる方法を示します。2つのロジックメモリーを1つの物理メモリーとして実装します。hls_merge メモリー属性を使用して、深さ方向または幅方向にマージします。 |
| non_power_of_two_memory | force_pow2_depth メモリー属性を使用して、 2のべき乗以外の深さのメモリーのパディングを制御する方法と、それによってFPGAメモリーリソース使用率がどのように影響されるかを示します。 |
| non_trivial_initialization | C++ キーワード constexpr を使用して読み出し専用変数の効率的な初期化を実現する方法を示します。 |
| static_var_init | コンポーネント内のスタティックの初期化動作を制御する方法を示します。hls_init_on_reset または hls_init_on_powerup メモリー属性を使用します。 |
| 名前 | 説明 |
|---|---|
下欄のチュートリアルは、 インテル® Quartus® Primeシステムの次の場所にあります。 |
|
| overview | コンポーネント・アルゴリズムが同じ場合に、異なるコンポーネント・インターフェイスを選択することによるQoR (結果の品質) への影響を示します。 |
| explicit_streams_buffer | 明示的な stream_in インターフェイスおよび stream_out インターフェイスをコンポーネントおよびテストベンチで使用する方法を示します。 |
| explicit_streams_packets_ empty | usesPackets、usesEmpty および firstSymbolInHighOrderBits ストリーム・テンプレート・パラメーターを使用する方法を示します。 |
| explicit_streams_packets_ ready_valid | usesPackets、usesValid および usesReady ストリーム・テンプレート・パラメーターを使用する方法を示します。 |
| mm_master_testbench_operators | Avalon Memory Mapped (MM) Master (mm_master クラス) インターフェイスの異なるインデックスでコンポーネントを呼び出す方法を示します。 |
| mm_slaves | Avalon-MM Slaveインターフェイス (スレーブレジスターおよびスレーブメモリー) を作成する方法を示します。 |
| mm_slaves_double_buffering | hls_readwrite_mode マクロを使用してメモリーマスターからスレーブメモリーへアクセスする方法を制御することによる効果を示します。 |
| mm_slaves_csr_volatile | volatile キーワードを使用してコンポーネントの実行中にスレーブメモリーへの同時アクセスを許可することによる効果を示します。 |
| multiple_stream_call_sites | 複数のストリーム呼び出しサイトを使用する利点を示します。 |
| pointer_mm_master | Avalon-MM Masterインターフェイスおよびそのパラメーターを作成する方法を示します。 |
| stable_arguments | stable 属性を不変の引数に使用してリソース使用率を向上させる方法を示します。 |
| 名前 | 説明 |
|---|---|
下欄のチュートリアルは、 インテル® Quartus® Primeシステムの次の場所にあります。 |
|
| ac_datatypes | int データ型の代わりに ac_int データ型を使用することによる効果を示します。 |
| const_global | const 修飾グローバル変数を使用したパフォーマンスおよびリソース使用率の向上を示します。 |
| divergent_loops | 分岐ループのあるデザインのソースレベルの最適化を示します。 |
| floating_point_contract | fp_contract オプションを使用してデザインの倍精度浮動小数点演算のパフォーマンスを向上させる方法を示します 。 |
| floating_point_ops | I++ 内の --fpc および --fp-relaxed フラグによる浮動小数点演算への影響を示します。スループット用に最適化された32タップ有限インパルス応答 (FIR) フィルターデザインを使用します。 |
| fpga_reg | fpga_reg マクロを使用してデザインのパイプラインを正確に調整する方法を示します。 |
| hyper_optimized_handshaking | インテルHLSコンパイラーi++ コマンドの --hyper-optimized-handshaking オプションを使用する方法を示します。 |
| loop_coalesce | ネスト化ループで loop_coalesce プラグマを使用したパフォーマンスとリソース使用率の向上を示します。 #pragma loop_coalesce は、スタンダード・エディションとプロ・エディションの両方にありますが、デザイン・チュートリアルがあるのは、プロ・エディションのみです。 |
| loop_fusion | ループ・フュージョンのレイテンシーおよびリソース使用率の向上を示します。 |
| loop_memory_dependency | Ivdep プラグマを使用してループ運搬依存を解除する方法を示します。 |
| lsu_control | 可変レイテンシー Avalon® MM Masterインターフェイス向けにインスタンス化されたLSU型を制御する効果を示します。 |
| parallelize_array_operation | fMAX を向上させる方法を示します。ループ内の配列に対する動作の実行時に発生するボトルネックを修正します。 |
| optimize_ii_using_hls_register | hls_register 属性を使用して、ループIIを削減する方法や、hls_max_concurrency を使用してコンポーネントのスループットを向上させる方法を示します。 |
| parameter_aliasing | コンポーネント引数で restrict キーワードを使用する方法を示します。 |
| random_number_generator | 乱数ジェネレーター・ライブラリーを使用する方法を示します。 |
| reduce_exit_fifo_width | fMAX を向上させる方法を示します。ストールのないクラスターの出口ノードに属するFIFOの幅を小さくします。 |
| relax_reduction_dependency | 浮動小数点アキュムレーターを含むループのIIを削減する方法、またはその他の単一のクロックサイクルでの高速計算ができない削減演算を示します。 |
| remove_loop_carried_dependency | ループのパフォーマンスを向上させる方法を示します。ネストされたループ間での同じ変数へのアクセスを削除します。 |
| resource_sharing_filter | 32タップ有限インパルス応答 (FIR) フィルターデザインのエリア最適化バリアントを示します |
| set_component_target_fmax | hls_scheduler_target_fmax_mhz コンポーネント属性を使用する方法と、それが ii ループプラグマとどのように相互作用するかを示します。 |
| shift_register | シフトレジスターを実装するための推奨コーディング・スタイルを示します。 |
| sincos_func | sin または cos 関数の代わりに sinpi または ospi 関数をコンポーネントで使用した場合の効果を示します。 |
| single_vs_double_ precision_math | 倍精度リテラルおよび関数の代わりに単精度リテラルおよび関数を使用した場合の効果を示します。 |
| stall_enable | ストール・フリー・クラスターをストール・イネーブル・クラスターに置き換え、一部の小規模なデザインのレイテンシーを改善する方法を示します。 |
| struct_interface | ac_int を使用して、パディングビットなしでインターフェイスを実装する方法を示します。 |
| submnormal_and_rounding | --daz および --rounding i++ コマンドオプション使用の効果を示します。 |
| swap_vs_copy | レジスターを使ったディープコピーによる、コンポーネント・デザインのパフォーマンスおよびリソース使用率への影響を示します。 |
| triangular_loop | 依存関係を持つ三角ループパターンを記述する方法を示します。 |
| 名前 | 説明 |
|---|---|
下欄のチュートリアルは、 インテル® Quartus® Prime システムの次の場所にあります。 |
|
| compiler_interoperability | (Linuxのみ) GCCでコンパイルされたテストベンチ・コードを、 i++ コマンドでコンパイルされたコードと共に使用する方法を示します。 |
| enqueue_call | コンポーネントを非同期で実行し、テストベンチでパイプライン・パフォーマンスを実行する方法を示します。エンキュー機能を使用します。 |
| platform_designer_2xclock |
clock2x 入力を備えたコンポーネント向けに推奨されるクロックおよびリセットの生成を示します。 |
| platform_designer_stitching |
複数のコンポーネントを結合して1つのまとまったデザインとして機能させる方法を示します。 |
| 名前 | 説明 |
|---|---|
下欄のチュートリアルは、 インテル® Quartus® Prime システムの次の場所にあります。 |
|
| balancing_loop_delay | タスクのシステムを使用しているコンポーネントのスループットを改善する方法を示します。ストリームをバッファリングします。 |
| balancing_pipeline_latency | タスクのシステムを使用しているコンポーネントのスループットを改善する方法を示します。ストリームをバッファリングします。 |
| interfaces_sot | タスク間で情報を転送する方法を示します。 Avalon® ストリーミングおよび Avalon® メモリーマップド・マスター・インターフェイスを使用します。 |
| internal_stream | HLSタスクで ihc::stream オブジェクトを使って「内部ストリーム」を使用する方法を示します。 |
| parallel_loop | パイプライン方式で順次ループを実行する方法を示します。コンポーネントのHLSタスクのシステムを使用します。 |
| resource_sharing | コンポーネント内の高価な計算ブロックを共有して、領域使用率を節約する方法を示します。 |
| task_reuse | 同じタスク関数の複数コピーを呼び出す方法を示します。 |
| 名前 | 説明 |
|---|---|
下欄のチュートリアルは、 インテル® Quartus® Primeシステムの次の場所にあります。 |
|
| basic_rtl_library_flow | RTLライブラリーを開発し、それをHLSコンポーネントで使用するプロセスを示します。 |
| rtl_struct_mapping | C++ 構造体フィールドからRTLモジュール・インターフェイス信号のビットスライスへのマッピングを取得する方法を示します。 |
| 名前 | 説明 |
|---|---|
下欄のチュートリアルは、 インテル® Quartus® Primeシステムの次の場所にあります。 |
|
| max_interleaving |
次の条件を満たすループの領域使用率を削減する方法を示します。
|