ハードウェア エミュレーション中に 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 カーネル間のトラフィックを確認できます。
関数モデルを使用した 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 を参照してください