次の図は、Generate
コマンドを使用した後の Vitis Model Composer からの HLSC++ コード出力を示しています。C++ コードは、System Generator 出力用の IP パッケージを生成する際の中間段階として、または AMD Vitis™ HLS の指示子またはプラグマを使用して C++ コードを最適化できるように指定したファイルとして出力されます。
Model Composer で生成されたファイルには、コンパイルされたサブシステムの内容と階層が反映されます。この場合、Vitis Model Composer チュートリアルの「Model Composer」セクションに示すように、サブシステムは Edge Detection 関数です。次の図は、Edge Detection サブシステムの内容を示しています。
#include "Edge_Detection.h"
#include "GradMagnitude.h"
#include "SobelFilter.h"
次の図は、Edge Detection サブシステム用に生成されたコードを示しています。関数に追加されたプラグマでは、その関数のシグネチャと戻り値用に関数プロトコルと I/O ポート プロトコルが指定されています。プラグマを使用すると、Vitis HLS で合成されたソリューションが指示されるので、インプリメントされた RTL のパフォーマンスを向上できます。
Edge_Detection(hls::stream< ap_axiu<16, 1, 1, 1> >& Y,
hls::stream< ap_axiu<16, 1, 1, 1> >& Y_Out)
{
#pragma HLS INTERFACE s_axilite port=return
#pragma HLS INTERFACE axis bundle=image_out port=Y_Out
#pragma HLS INTERFACE axis bundle=input_vid port=Y
#pragma HLS dataflow
uint8_t core_Y[360][640];
#pragma HLS stream variable=core_Y dim=2 depth=1
uint8_t core_Cb[360][320];
#pragma HLS stream variable=core_Cb dim=2 depth=1
uint8_t core_Cr[360][320];
#pragma HLS stream variable=core_Cr dim=2 depth=1
uint8_t core_Y_Out[360][640];
#pragma HLS stream variable=core_Y_Out dim=2 depth=1
uint8_t core_Cb_Out[360][320];
#pragma HLS stream variable=core_Cb_Out dim=2 depth=1
uint8_t core_Cr_Out[360][320];
#pragma HLS stream variable=core_Cr_Out dim=2 depth=1
fourier::AxiVideoStreamAdapter< uint8_t >::readStreamVf0(Y,
reinterpret_cast< uint8_t* >(core_Y), reinterpret_cast< uint8_t* >(
core_Cb), reinterpret_cast< uint8_t* >(core_Cr), 360, 640);
Edge_Detection_core(core_Y, core_Cb, core_Cr, core_Y_Out, core_Cb_Out,
core_Cr_Out);
fourier::AxiVideoStreamAdapter< uint8_t >::writeStreamVf0(Y_Out,
reinterpret_cast< uint8_t* >(core_Y_Out), reinterpret_cast< uint8_t* >(
core_Cb_Out), reinterpret_cast< uint8_t* >(core_Cr_Out), 360, 640);
}
最後に、出力フォルダーに生成された run_hls.tcl ファイルに注目してください。これは生成された出力ファイルで Vitis HLS を実行するために使用可能な Tcl スクリプトで、プロジェクトおよびソリューションを作成し、C++ コードから RTL を合成して、デザインを Model Composer HDL モデルにエクスポートします。Vitis HLS プロジェクトにはそれぞれ 1 セットの C/C++ コードが含まれており、複数のソリューションを含めることができます。各ソリューションに異なる制約および最適化指示子を設定できます。詳細は、 『Vitis 高位合成ユーザー ガイド』 (UG1399) を参照してください。
run_hls.tcl スクリプトは、AMD Vitis™ HLS コマンド プロンプトから次のように実行できます。
-
AMD Vitis™ HLS コマンド プロンプトを開きます。
- Windows の場合、 をクリックします。
- Linux では、新しいシェルを開き、<install_dir>/Vitis_HLS/<version>/settings64.sh スクリプトを読み込んでシェルを設定します。
-
Vitis Model Composer Hub の手順に従って、コマンド プロンプトから、出力を生成したときに Model Composer Hub の設定ダイアログ ボックスの Code Directory で指定したディレクトリの親フォルダーに移動します。次に例を示します。
cd C:/Data
- コマンド プロンプトで C ディレクトリにある run_hls.tcl スクリプトを実行します。
vitis_hls -f ./code/run_hls.tcl
vitis_hls -p ./Edge_Detection_proj
AMD Vitis™ HLS プロジェクトが GUI モードで開きます。