Vitis HLS プログラミング モデル イメージ

検証とイテレーションを効率化

概要

Vitis HLS ツールは C/C++ で定義した関数を RTL に合成することで、複雑な FPGA アルゴリズムを簡単に作成できます。このツールは、合成/配置配線用の Vivado™ Design Suite およびヘテロジニアス システムの設計や活用のための Vitis 統合ソフトウェア プラットフォームと密接に統合されています。

  • Vitis HLS フローを使用することで、C コードに指示子を適用して目的の実装に応じた RTL を生成できる。
  • C ソース コードからさまざまなデザイン アーキテクチャを構築でき、高品質の RTL を生成できる。
  • C シミュレーションを使用してデザインを検証できるため、通常の RTL ベースのシミュレーションよりもすばやくイテレーションを実行できる。
  • Vitis HLS ツールには、デザインの最適化をサポートするための豊富な解析およびデバッグ機能がある。
生産性向上を支援する Vitis HLS を使用して、直感的な設計と迅速な検証を体験

直感的な設計と生産性向上を支援する Vitis HLS

設計手法
Vitis HLS プログラミング モデル イメージ

プログラミング モデル

Vitis HLS プログラミング モデル

Vitis™ HLS の C コードは、AMD FPGA アーキテクチャの特性を最大限に活かすように設計されています。

Vitis HLS ツールは並列プログラミング構造をサポートしているため、要件に応じた実装をモデル化できます。たとえば次のような構造があります。

  • プロセスレベルでの並列処理を可能にする HLS タスク
  • データレベルの並列化を可能にする HLS ベクター
  • 同時タスク間の通信を可能にする HLS ストリーム
  • 合成プラグマ (パイプライン、アンロール、配列分割、インターフェイス プロトコルなど) を使用して結果を制御できる。
  • 詳細は、Vitis 高位合成ユーザー ガイドの「HLS プログラミング ガイド」セクションを参照。

C から RTL への変換

Vitis HLS ツールは、C コードのさまざまな部分を異なる方法で合成します。

  • C/C++ コードの最上位関数の引数が RTL I/O ポートに合成され、インターフェイス合成のハードウェア プロトコルを使用して自動的に実装される。
  • その他の C 関数は RTL ブロックに合成される。デザインの階層構造は維持される。
  • C 関数のループは、パフォーマンス向上のためそのままループとして残すか、パイプライン処理される。
  • C コードの配列は、ライブラリ内の任意のメモリ リソース (BRAM、LUTRAM、URAM など) に合成できる。
  • レイテンシ、開始間隔、ループの反復レイテンシ、リソース使用率などのパフォーマンス指標は合成レポートで確認できる。
  • Vitis HLS ツールのプラグマ指示子や最適化指示子を使用して、C/C++ コードの合成結果を制御できる。
C から RTL への変換イメージ

C から RTL への合成


C/RTL 協調シミュレーション イメージ

シミュレーションおよび検証

シミュレーションおよび検証

Vitis HLS ツールにはビルトインのシミュレーション フローがあり、検証時間を短縮できます。

  • C シミュレーションでは C コードの機能が検証される。このステップは C テストベンチを使用し、すぐに完了する。
  • C/RTL 協調シミュレーションでは、C テストベンチを再利用して生成済みの RTL を検証する。つまり、RTL が C ソース コードと機能的に同じであるかを検証。
  • このフローには、解析、デバッグ、波形表示機能が統合されており、一般的なシミュレータをサポート。

IP エクスポート

Vitis HLS ツールの出力は、コンパイル済みのオブジェクト ファイル (.xo) にパッケージ化、または RTL IP にエクスポート可能な RTL インプリメンテーションです。

  • コンパイル済みのオブジェクト ファイル (.xo) を使用して、Vitis アプリケーション開発フローで使用するためのハードウェア アクセラレーション関数を作成する。
  • RTL IP は、次の 3 つの方法で使用できる。
    • Vivado™ IP インテグレーター ツールを使用して追加
    • Vivado IDE で RTL ブロックとしてインポート
    • DSP アプリケーションでは、Vitis Model Composer でシングル ブロックセットとして使用
IP のエクスポート イメージ

IP のエクスポート

最新情報
2023.2

2023.2 リリースのハイライト

  • HLS コンポーネント対応の新しい Vitis™ Unified IDE
  • 新しい Vitis HLS ライセンス要件
  • C 合成前の性能を予測する新しいコード アナライザー機能
  • AXI インターフェイスの改善点:
    • HLS AXI Stream のサイドチャネルをサポート
    • AXI マスターのキャッシングをユーザーが設定可能
  • その他の改善点:
    • コード複雑度レポート機能が追加され、C 合成中にデザイン サイズの問題を特定可能
  • コンパイル時間の改善: 2023.2 は、2023.1 よりも平均してコンパイル時間が 20% 短縮*

*この情報は、2023 年 8 月 10 日に実施したテストに基づいています。このテストでは、Vitis HLS のリリース 2023.2 と 2023.1 を使用して、Vitis L2/L3 コード ライブラリ デザイン 1000 個を対象に比較しました。テスト システムは、Intel Xeon E5-2690 v4 @ 2.6GHz CPU、256 GB RAM、RedHat Enterprise Linux 8.6 で構成されています。実際のパフォーマンスは異なる可能性がある。異なる設定を使用した場合には、結果が異なる可能性があります。-VGL-04

2023.1

2023.1 リリースのハイライト

  • パフォーマンス向上*: 2023.1 では 2022.2 よりも平均 5.2% のレイテンシが向上
  • Vitis HLS ツールで L1 ライブラリ関数を簡単にダウンロード、表示、インスタンシエート可能。ビデオの視聴
  • Vitis HLS ツールでの AXI トランザクションとバースト レポート機能のサポートが強化

*2023 年 2 月 12 日時点で存在する 1208 個すべての Vitis L1 ライブラリの C コード デザインに対してベンチマークを実施しました。すべてのデザインは、CentOS Linux を搭載した 2 つの Intel Xeon E5-2690 CPU を使用し、SMT が有効で Turbo Boost が無効に設定されたシステムを使用して実行しました。ハードウェアの構成がソフトウェアのテスト結果に影響を与えることはないと考えます。ソフトウェアやファームウェアの設定や構成によって結果が異なる可能性があります - VGL-03

2022.2

2022.2 リリースのハイライト

  • データ処理アプリケーション向けにタスクレベルの並列処理コードを記述するための新しい方法
    • hls::task を使用することで、タスクレベルの並列処理を明示的に定義できる
    • 純粋なストリーミング デザイン (パケット交換など) のモデル化が容易
  • パフォーマンスとタイミングが向上
    • Unroll、Pipeline、Array_Partition、inline の各プラグマを自動で推論し、パフォーマンスを向上させる
  • 解析およびデバッグが強化
    • 生成された RTL コードに C ソースの print ステートメントを合成する新機能
    • RTL シミュレーションでコード ブロックの実行および変数の値をトレースできる
  • 使いやすさ向上
    • FFT および FIR IP​ で HLS::stream インターフェイスがサポートされる
2022.1

2022.1 リリースのハイライト

  • 新しいタイムライン トレース ビューアー
    • デザインに含まれるすべての生存関数 (モジュール化された関数など) のランタイム プロファイルを表示
    • 特に、協調シミュレーション後にデータフロー領域のビヘイビアーを確認するのに便利Vitis™ HLS にネイティブ対応 - XSIM 波形ビューアーの起動が不要になった
  • 新しいパフォーマンス プラグマ
    • スループット目標を #pragma hls performance で指定する
    • 最小限のリソースで要件を満たすように模索する
    • 実行された変換を示す。目標を達成できない場合は、その制限要因を示す
  • ストリーム オブ ブロック タイプで配列分割をサポート
    • hls::stream の強化 (各要素は配列)
    • 大規模な配列処理を小さく分割してパイプライン処理可能
2021.2

2021.2 リリースのハイライト

  • ユーザー制御のバースト推論
    • 新たに手動のバースト最適化機能を利用可能
    • バースト動作を手動で制御するために新しいクラスの「hls::burst_maxi」が追加。これに伴い、新しい HLS API を提供
    • ユーザーは、HLS デザインの AXI AMBA プロトコルおよびハードウェア トランザクション レベル モデリングについて理解している必要がある
  • タイミングおよび QoR の機能強化
    • HLS のタイミング見積もり精度が向上。HLS がタイミング クロージャをレポートするときには、Vivado™ の RTL 合成でもタイミングを満たしている
  • EoU の機能強化
    • C 合成レポートにインターフェイス アダプター レポートを追加
    • インターフェイス アダプターがデザインに与えるリソース インパクトについて、ユーザーが把握する必要がある
    • インターフェイス アダプターにはデザインの QoR に影響を与える可変のプロパティがある
    • 合成レポートに新しいセクションが追加され、プラグマ リストとプラグマに関する警告を表示
  • 解析およびレポート機能の強化
    • マウス ドラッグによる拡大/縮小機能
    • グラフ全体を表示し、部分的に拡大表示できる Overview 機能
    • シミュレーション データと共にすべての関数とループが表示される
    • シミュレーション後に Timeline Trace ビューアーが利用可能になりました。このビューアーでデザインのランタイム プロファイルを表示できます。ユーザーは Vitis HLS GUI からそのままアクセス可能です。
2021.1

2021.1 リリースのハイライト

  • 特定のフェーズやレポートにすばやくアクセスできる Flow Navigator GUI
  • BIND_OP および BIND_STORAGE ディレクティブ用の新しい合成レポート セクション
  • 合成後の新しいテキスト レポートには、GUI 合成レポートに提供される情報が反映される
  • IP エクスポートや Vivado™ インプリメンテーション run のウィジェットが新しくなり、設定ファイルや制約ファイルを Vivado へ渡すオプションが追加されている
  • 関数やループを可視化するための新しい関数呼び出しグラフ ビューアーでは、II、レイテンシ、DSP/BRAM の使用率をオプションのヒートマップでハイライトできる
  • DSP ブロックのネイティブ浮動小数点演算用に Versal™ タイミング キャリブレーションと新しい制御機能 (config_op の -precision オプション)
  • 代替のフラッシュ可能なパイプライン オプションが改善 (フリーランニング パイプライン、通称 「frp」)
  • Vitis では、m_axi インターフェイスの再形成を hls::vector 型で実行する必要がある
  • s_axilite および m_axi データ ストレージ用のカスタマイズ オプション (「auto」、「uram」、「bram」、「lutram」) を使用して、デザイン内の RAM 使用率を微調整できる
  • Vitis では、カーネル用に継続的に動作する新モードをサポート (つまり、終わらない)
  • セカンダリ クロック オプションの axi_lite が再び利用可能に
採用事例
リソース
ビデオ