2. HLSデザイン例およびチュートリアル
インテル® 高位合成 (HLS) コンパイラー・プロ・エディションに含まれているデザイン例およびチュートリアルでは、サンプル・コンポーネントが用意されており、コンポーネントをモデル化またはコード化することにより、 インテル® HLSコンパイラーからデザインにとって最良の結果を得る方法を示します。
高位合成 (HLS) デザイン例
高位合成 (HLS) デザイン例では、さまざまなアルゴリズムを効果的に実装する方法を簡単に確認し、 インテル® HLSコンパイラーから最良の結果を得ることができます。
<quartus_installdir>/hls/examples/<design_example_name>
<quartus_installdir> のある場所は、 インテル® Quartus® Primeデザインスイートがインストールされているディレクトリーです。例: /home/<username>/intelFPGA_pro/22.3 または C:\intelFPGA_pro\22.3
重点分野 | 名前 | 説明 |
---|---|---|
線形代数 | QRD | 行列のQR因数分解に修正グラム・シュミット・アルゴリズムを使用します。 このデザインは、 Advanced QRD Optimization with Intel HLS Compiler Intel FPGA white paper で参照できます。ホワイトペーパーは、次のURLからダウンロードできます。https://cdrdv2.intel.com/v1/dl/getContent/655469 |
信号処理 | interp_decim_filter | シンプルで効率的な補間/デシメーション・フィルターを実装します。 |
シンプルデザイン | counter | シンプルで効率的な32ビット・カウンター・コンポーネントを実装します。 |
ビデオ処理 | YUV2RGB | 基本的なYUV422からRGB888への色空間変換を実装します。 |
ビデオ処理 | image_downsample | イメージ・ダウンサンプリング・アルゴリズムを実装し、バイリニアー補間でイメージをより小さなサイズに縮小します。 |
HLSデザインのチュートリアル
HLSデザインのチュートリアルでは、HLS固有の重要なプログラミング概念のほか、優れたコーディング方法を示します。
各チュートリアルにはREADMEファイルがあり、チュートリアルの内容の詳細とチュートリアルの実行方法を説明しています。
名前 | 説明 |
---|---|
下欄のチュートリアルは、 インテル® Quartus® Primeシステムの次の場所にあります。<quartus_installdir>/hls/examples/tutorials/ac_datatypes |
|
ac_fixed_constructor | コーディング・スタイルのわずかな変動を用いてより良いQoR (結果の品質) が得られる ac_fixed コンストラクターの使用を示します。 |
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システムの次の場所にあります。<quartus_installdir>/hls/examples/tutorials/hls_float |
|
1_reduced_double | 下線の種類を double から hls_float <11,44> (reduced double) に変更することでアプリケーションが hls_float からメリットを得る方法を示します。 |
2_explicit_arithmetic | 明示的なバージョンの hls_float バイナリー演算子を使用して、浮動小数点算術演算を必要に応じて実行する方法を示します。 |
3_conversions | his_float 型のデザインに変換が現れるタイミングを示します。また、異なる hls_float 型を使用して、コンパイル型定数を生成するためにさまざまな変換モードを使用する方法を示します。 |
名前 | 説明 |
---|---|
下欄のチュートリアルは、 インテル® Quartus® Primeシステムの次の場所にあります。<quartus_installdir>/hls/examples/tutorials/component_memories |
|
attributes_on_mm_agent_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システムの次の場所にあります。<quartus_installdir>/hls/examples/tutorials/interfaces |
|
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_host_testbench_operators | Avalon Memory Mapped (MM) ホスト (mm_master クラス) インターフェイスの異なるインデックスでコンポーネントを呼び出す方法を示します。 |
mm_agents | Avalon-MMエージェント・インターフェイス (エージェント・レジスターおよびエージェント・メモリー) を作成する方法を示します。 |
mm_agents_double_buffering | hls_readwrite_mode マクロを使用してメモリーホストからエージェント・メモリーにアクセスする方法を制御することによる効果を示します。 |
mm_agents_csr_volatile | volatile キーワードを使用してコンポーネントの実行中にエージェント・メモリーへの同時アクセスを許可することによる効果を示します。 |
multiple_stream_call_sites | 複数のストリーム呼び出しサイトを使用する利点を示します。 |
pointer_mm_host | Avalon-MMホスト・インターフェイスおよびそのパラメーターを作成する方法を示します。 |
stable_arguments | リソース使用率を向上させるために不変の引数に stable 属性を使用する方法を示します。 |
名前 | Description |
---|---|
下欄のチュートリアルは、 インテル® Quartus® Primeシステムの次の場所にあります。<quartus_installdir>/hls/examples/tutorials/best_practices |
|
ac_datatypes | int データ型の代わりに ac_int データ型を使用することによる効果を示します。 |
control_of_dsp_usage | サポートされている一部のデータ型と数学関数が、DSPまたはソフトロジックによって実装するかどうかを制御する効果を示します。これには、i++ コマンドの --dsp-mod オプションと ihc::math_dsp_control 関数を使用します。 |
const_global | const 修飾グローバル変数を使用したパフォーマンスおよびリソース使用率の向上を示します。 |
divergent_loops | 分岐ループのあるデザインのソースレベルの最適化を示します。 |
floating_point_contract | -ffp_contract オプションを使用してデザインの倍精度浮動小数点演算のパフォーマンスを向上させる方法を示します。 |
floating_point_ops | i++ 内の -ffp-contract=fast および -ffp-reassociate フラグによる浮動小数点演算への影響を示します。このとき、スループット用に最適化された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ホスト・インターフェイス向けにインスタンス化された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_1 | High-Level Design ReportのLoop Analysisレポートを活用して、fMAX をターゲットにするさまざまな方法を示します。 |
set_component_target_fmax_2 | hls_scheduler_target_fmax_mhz component 属性と ii ループプラグマ の有無に基づいてfMAX と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システムの次の場所にあります。<quartus_installdir>/hls/examples/tutorials/usability |
|
full-design | 最小限のシステムでシンプルな sort コンポーネントを示します。これは、インテルFPGA YouTubeチャネルのHLS Walkthroughビデオシリーズでも説明しています。 |
compiler_interoperability | インテル® HLSコンパイラー、GCC、またはMicrosoft* Visual Studio* でコンパイルしたテストベンチ・コードと、 インテル® HLSコンパイラーを使用して個別にコンパイルしたコンポーネント・コードを使用してデザインをビルドする方法を示します。 |
enqueue_call | コンポーネントを非同期で実行し、テストベンチでパイプライン・パフォーマンスを実行する方法を示します。エンキュー機能を使用します。 |
platform_designer_2xclock |
clock2x 入力を備えたコンポーネントにおける推奨されるクロックおよびリセットの生成を示します。 |
platform_designer_stitching |
複数のコンポーネントを結合して1つのまとまったデザインとして機能させる方法を示します。 |
名前 | 説明 |
---|---|
下欄のチュートリアルは、 インテル® Quartus® Primeシステムの次の場所にあります。<quartus_installdir>/hls/examples/tutorials/system_of_tasks |
|
balancing_loop_delay | ストリームをバッファリングすることにより、タスクのシステムを使用するコンポーネントのスループットを向上させる方法を示します。 |
balancing_pipeline_latency | ストリームをバッファリングすることにより、タスクのシステムを使用するコンポーネントのスループットを向上させる方法を示します。 |
interfaces_sot | タスク間で情報を転送する方法を示します。 Avalon® ストリーミング・インターフェイスおよび Avalon® メモリーマップド・ホスト・インターフェイスを使用します。 |
internal_stream | HLSタスクで ihc::stream オブジェクトを使って「内部ストリーム」を使用する方法を示します。 |
launch_and_collect_capacity | ihc::launch および ihc::collect 関数の容量テンプレート・パラメーターを使用して、タスクのシステムを持つコンポーネントのスループットを向上させる方法を示します。 |
parallel_loop | コンポーネントのHLSタスクのシステムを使用して、パイプライン方式で順次ループを実行する方法を示します。 |
resource_sharing | コンポーネント内の高価な計算ブロックを共有して、エリア使用率を節約する方法を示します。 |
task_reuse | 同じタスク関数の複数コピーを呼び出す方法を示します。 |
名前 | 説明 |
---|---|
下欄のチュートリアルは、 インテル® Quartus® Primeシステムの次の場所にあります。<quartus_installdir>/hls/examples/tutorials/libraries |
|
basic_rtl_library_flow | RTLライブラリーを開発し、それをHLSコンポーネントで使用するプロセスを示します。 |
rtl_struct_mapping | C++ 構造体フィールドからRTLモジュール・インターフェイス信号のビットスライスへのマッピングを取得する方法を示します。 |
名前 | 説明 |
---|---|
下欄のチュートリアルは、 インテル® Quartus® Primeシステムの次の場所にあります。<quartus_installdir>/hls/examples/tutorials/loop_controls |
|
max_interleaving |
次の条件を満たすループのエリア使用率を削減する方法を示します。
|
small_speculated_iterations | ループ本体のレイテンシーが低く、頻繁に呼び出されることが予想される場合に、推測される反復回数を減らすとレイテンシーがどのように改善されるかを示します。 |
speculated_iterations | 終了条件の計算がIIの低下を妨げるボトルネックである場合に、推測される反復回数を増やすとIIがどのように改善されるかを示します。 |