HLS カーネルの関数モデルの使用 - 2022.1 日本語

Vitis 統合ソフトウェア プラットフォームの資料: アプリケーション アクセラレーション開発 (UG1393)

Document ID
UG1393
Release Date
2022-05-25
Version
2022.1 日本語

ハードウェア エミュレーション中に Vitis HLS カーネルの関数モデルを使用するのは、関数モードでカーネルをコンパイルできる高度なユース ケースで、C コードを囲む SystemC ラッパーを使用して XO を生成できます。

ハードウェア エミュレーションの主なターゲットは、カーネル アクティビティの詳細なサイクル精度のビューを持つハードウェア カーネルのデバッグです。関数 (TLM) モデルは、RTL コードではなく関数モードで目的のカーネルをコンパイルすることで、エミュレーションを高速化します。これにより、C から RTL へのフル合成を必要としないため、カーネルのコンパイル時間が短縮されるほか、RTL シミュレーションの代わりに C コードがシミュレーションされるため、実行時間も短縮されます。また、ハードウェア エミュレーションで C および RTL カーネルを組み合わせて、RTL ブロックのデバッグを速くすることもできます。

関数モデルでサポートされる機能は、AXI4-Stream インターフェイス (axis) のみです。ただし、このアプローチを使用すると、サイクル精度のモデルとは異なり、カーネルはレイテンシ情報なしで純粋に機能します。

ユーザー HLS 関数は、TLM インターフェイスを備えた SystemC モジュールにラップされ、生成されたコードから IP が作成されます。これにより、IP インテグレーターで使用可能な HW_EMU 互換の XO が生成でき、ハードウェア エミュレーション フローで v++ リンク デザインを合わせるために使用できます。これにより、ラッパー IP がほかの RTL および SystemC モデルと通信することもできます。このため、関数モードでコンパイルされた HLS C/C++ カーネルはシミュレーション中に TLM トランザクションを持つので、ユーザーがメモリ モデル (DDR など) と TLM カーネル間のトラフィックを確認できます。

ヒント: 関数モデルは、カーネルの C シミュレーションを実行する C コードを使用します。カーネルは、サイクル精度のモデルとは異なり、レイテンシ情報なしで純粋に機能します。ただし、ハードウェア エミュレーション中は、境界トランザクションを TLM インターフェイスを使用して確認できます。

関数モデルを使用した XO 生成

v++ コンパイル段階では、ハードウェア エミュレーション (hw_emu) の XO ファイルの作成中に、論理シミュレーションをすることを示すオプションを指定すると、C コードで SystemC ラッパーを使用して XO が生成されます。これには、コンパイル時に --advanced.param オプションを指定する必要があります。--advanced オプション で説明されるように、--advanced.param compiler.emulationMode=func コンパイラ オプションを追加してください。

生成された XO は、通常の XO と同じ v++ --link コマンドを使用するとリンクされます。例は、https://github.com/Xilinx/Vitis_Accel_Examples/tree/master/emulation/stream_func_mode を参照してください