Model Composer サブシステム モジュールの関数引数が Vivado HLS で変換されて 1 つの複合ポートにまとめられる 場合は、そのポートの signal type 情報が不明になるので、System Generator IP ブロックに含まれなくなります。
このため、ポートで再形成、マップ、データ パック最適化などを使用した場合は、これらの複合ポートに対するポー ト タイプ情報を System Generator で手動で指定する必要があります。これには、複合ポートがどのように作成され たかを理解してから、System Generator 内で slice および reinterpretation ブロックを使用して、Vivado HLS ブロックをシステムのほかのブロックに接続する必要があります。
たとえば、R、G、B の 3 つの 8 ビット入出力ポートが 24 ビット入力ポート (RGB_in) と 24 ビット出力ポート (RGB_out) にパックされているとします。IP ブロックを System Generator に含めた後、次のようになる必要があり ます。
• 24 ビット入力ポート (RGB_in) は、3 つの 8 ビット入力信号 (R_in、G_in、B_in) を正しくまとめた System Generator ブロックで駆動される必要があります。
• 24 ビット出力ポート (RGB_out) は、3 つの 8 ビット入力信号 (R_out、G_out、B_out) に正しく分割される必要
があります。
ヒント: 複合タイプのポートに接続するための slice および reinterpretation ブロックの使用方法の詳細は、System Generator の資料を参照してください。
図 37: Edge Detection サブシステム
Edge_Detection.cppファイルでは次のインクルードファイルが指定されており、これらのインクルードファイ ルによりサブシステムで使用されるさまざまな Model Composer ブロック用に生成されたコードが組み込まれます。
#include "Edge_Detection.h"
#include "GradMagnitude.h"
#include "SobelFilter.h"
次の図は、Edge Detection サブシステム用に生成されたコードを示しています。関数に追加されたプラグマでは、そ の関数のシグネチャと戻り値用に関数プロトコルと I/O ポート プロトコルが指定されています。プラグマを使用す ると、Vivado 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);
第 4 章: 出力の生成
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 ファイルに注目してください。これは生成された出力ファイル で Vivado HLS を実行するために使用可能な Tcl スクリプトで、プロジェクトおよびソリューションを作成し、C++ コ ードから RTL を合成して、デザインを System Generator にエクスポートします。Vivado HLS プロジェクトにはそれ ぞれ 1 セットの C/C ++コードが含まれており、複数のソリューションを含めることができます。各ソリューション に異なる制約および最適化指示子を設定できます。詳細は、『Vivado Design Suite ユーザー ガイド: 高位合成』
(UG902) を参照してください。
run_hls.tcl スクリプトは、Vivado HLS コマンド プロンプトから次のように実行できます。
1. Vivado HLS コマンドプロンプトを開きます。
• Windows では、[スタート] → [すべてのプログラム] → [Xilinx Design Tools] → [Vivado 2019.x] → [Vivado HLS]
→ [Vivado HLS 2019.x Command Prompt] をクリックします。
• Linux では、新しいシェルを開き、<install_dir>/Vivado/<version>/settings64.sh スクリプトを 読み込んでシェルを設定します。
2. Model Composer Hub ブロックの追加の指示に従って、コマンド プロンプトから、出力を生成したときに [Model
Composer Hub] ダイアログ ボックスの [Target directory] で指定したディレクトリの親フォルダーに移動します。
次に例を示します。
cd C:/Data
3. コマンド プロンプトで C ディレクトリにある run_hls.tcl スクリプトを実行します。
vivado_hls -f ./code/run_hls.tcl
Vivado HLS で C++ コードから RTL が合成され、Vivado HLS プロジェクトとソリューションが生成されます。Vivado
HLS プロジェクトは、[Target directory] で指定したディレクトリに移動して、次のようにプロジェクト名を付けて実 行すると開くことができます。
vivado_hls -p ./Edge_Detection_proj
Vivado HLS プロジェクトが GUI モードで開きます。Model Composer のログ ファイル
コード生成に関する問題は、Model Composer で生成される model_composer.log ログ ファイルに記述されます。
このファイルは Model Composer Hub ブロックの [Target Directory] で指定したディレクトリに含まれます。
デフォルトでは、ブロックがタスク パイプラインまたはデータフローで同時に実行されるストリーミング マイクロ アーキテクチャを使用したコードが生成されますが、モデルにストリーミングをサポートしないブロック (例:
xmcImportFunction ブロック) が含まれる場合は、ストリーミング マイクロ アーキテクチャが使用できないこと もあります。この場合、Model Composer でブロックがシーケンシャルに実行されるコードが生成されます。Model Composer ログ ファイルには、この状況がいつ発生するか、および可能性のある原因を見つけやすくする情報が含ま れます。
第 4 章: 出力の生成
Model Composer Hub ブロックの [Export Type] を C++ コードに設定し、[Create and execute testbench] をオンにし た場合は、model_composer.log ファイルに C++ 検証の出力が含まれるようになります。
[Export Type] を [IP Catalog] または [System Generator] に設定した場合は、Vivado HLS の実行に関連する情報が含ま れます。この場合、詳細が vivado_hls.log に含まれます。このファイルは、[Target Directory] で指定したディレ クトリに含まれます。
第 4 章: 出力の生成
第 5 章
デザインのシミュレーションおよび検証
概要
Model Composer での検証は、次の 2 つのプロセスに分けることができます。
• デザインが論理的に正しいかどうかを確認する Simulink のアルゴリズムの検証。