• 検索結果がありません。

XMC THROUGHPUT_FACTOR

ドキュメント内 Model Composer ユーザー ガイド (ページ 46-53)

Model Composer の THROUGHPUT_FACTOR プラグマを使用すると、xmcImportFunction ブロックのスループット

を一部制御できます。THROUGHPUT_FACTORプラグマは、次の例に示すようにSUPPORTS_STREAMINGプラグマと 一緒に関数ヘッダー ファイルに追加できます。

#pragma XMC THROUGHPUT_FACTOR TF_param: 1,2,4

#pragma XMC SUPPORTS_STREAMING

template<int ROWS, int COLS, int TF_param>

void DilationWrap(const uint8_t src[ROWS][COLS], uint8_t dst[ROWS][COLS])

この例のプラグマの構文は、次のようになります。

#pragma XMC THROUGHPUT_FACTOR TF_param: 1,2,4

説明:

• 上記の例の場合、TF_param は int 型のテンプレート パラメーターです。

• 関数でサポートされる特定のスループット係数を指定するのはあくまでオプションですが、推奨されます。上記 の例の場合、1,2,4 はプラグマ内でサポートされるスループット係数を正の整数として指定し、値 1 を含める必要 があることを示しています。スループット係数を明示的に指定しない場合、TF_param が Model Composer でサポ ートされる上限の 16 までの正のスループット係数が有効となります。

インプリメンテーションのスループットの制御 で説明したように、モデルのスループット係数は Model Composer Hub ブロックで指定します。xmcImportFunction ブロックの THROUGHPUT_FACTOR 値の 1 つに均等に分割する この Hub ブロックのスループット係数は、ユーザーが指定できます。たとえば、Computer Vision ファンクションで は 1 および 8 のスループット係数がサポートされますが、Hub ブロックのスループット係数には 4 を指定できます。

4 は 8 の因数なので、スループット 4 が Hub ブロックに使用されますが、コードを生成すると、Hub ブロックのス ループット 4 と Computer Vision ファンクション ブロックのスループット 8 の間でデータフローを変換する追加ロ ジックが挿入されます。この追加ロジックにより、生成される出力のリソース使用量が増加します。

重要: Hub ブロックのスループット係数が一致しなかったり、xmcImportFunction ブロックで指定した THROUGHPUT_FACTOR に均等に分割されない場合は、そのブロック ファンクションのスループットは 1 に削 減されます。

次の要件に注意してください。

• THROUGHPUT_FACTOR プラグマは、Template ファンクションに使用する必要があります。

• THROUGHPUT_FACTOR プラグマは、SUPPORTS_STREAMING プラグマと一緒に使用する必要があります。

• 1 つの THROUGHPUT_FACTOR プラグマだけが xmcImportFunction ブロックに対して指定できます。

• ブロック ファンクションは、cyclic、factor=TF の ARRAY_RESHAPE 指示子を持つ実際の引数を使用して呼び出し ます (次の例を参照)。ARRAY_RESHAPE の詳細は、『Vitis 統合ソフトウェア プラットフォームの資料』 (UG1416) の HLS プラグマ を参照してください。

• 関数のスカラー以外の入力引数からの読み出しアクセスはストリーミングの要件と競合するので、Vivado HLS で TF 読み出しのグループを 1 つの再形成された配列の読み出しにまとめることができるようになっています。

• 関数のスカラー以外の出力引数への書き込みアクセスはストリーミングの要件と競合するので、Vivado HLS で TF 書き込みのグループを 1 つの再形成された配列の書き込みにまとめることができるようになっています。

次は、SUPPORTS_STREAMING および THROUGHPUT_FACTOR プラグマの両方を指定する関数の例です。

#include <stdint.h>

#pragma XMC THROUGHPUT_FACTOR TF: 1, 2, 4, 8, 16

#pragma XMC SUPPORTS_STREAMING template<int TF>

void mac(const int32_t In1[240], const int32_t In2[240], const int32_t In3[240],

int32_t Out1 [240])

{ #pragma HLS ARRAY_RESHAPE variable=In1 cyclic factor=TF #pragma HLS ARRAY_RESHAPE variable=In2 cyclic factor=TF #pragma HLS ARRAY_RESHAPE variable=In3 cyclic factor=TF #pragma HLS ARRAY_RESHAPE variable=Out1 cyclic factor=TF for (uint32_t k0 = 0; k0 < 240 / TF; ++k0) {

#pragma HLS pipeline II=1 int32_t Product_in2m[TF];

int32_t Sum_in2m[TF];

int32_t Product_in1m[TF];

int32_t Sum_outm[TF];

for (uint32_t k1 = 0; k1 < TF; ++k1) { Product_in2m[k1] = In2[(k0 * TF + k1)];

}

for (uint32_t k1 = 0; k1 < TF; ++k1) { Sum_in2m[k1] = In3[(k0 * TF + k1)];

}

for (uint32_t k1 = 0; k1 < TF; ++k1) {

第 3 章: C/C++ コードのカスタム ブロックとしてのインポート

for (uint32_t k1 = 0; k1 < TF; ++k1) { int32_t Product_in2s;

int32_t Sum_in2s;

int32_t Product_in1s;

int32_t Product_outs;

int32_t Sum_outs;

Product_in2s = Product_in2m[k1];

Sum_in2s = Sum_in2m[k1];

Product_in1s = Product_in1m[k1];

Product_outs = Product_in1s * Product_in2s;

Sum_outs = Product_outs + Sum_in2s;

Sum_outm[k1] = Sum_outs;

}

for (uint32_t k1 = 0; k1 < TF; ++k1) { Out1[(k0 * TF + k1)] = Sum_outm[k1];

} } }

ライブラリ ブラウザーへのユーザー ライブラリの追加

ライブラリでインポートしたブロックを使用するには、ライブラリの Simulink モデルを開いて、ブロックを新しい Model Composer モデルにコピーするだけですが、ライブラリ ブラウザーにライブラリを表示して、ライブラリから ブロックを新しいモデルにドラッグ アンド ドロップできるようにするには、xmcImportFunction コマンドの実行 後に、次のプロセスを使用してライブラリを準備する必要があります。

1. ライブラリ ブラウザー パラメーターをイネーブルにします。

2. ライブラリを保存します。

3. ライブラリの slblocks.m スクリプトを作成します。

4. MATLAB にパスを追加するか、ライブラリを MATLAB パスに追加します。

5. ライブラリ ブラウザーを更新します。

ヒント: この方法でライブラリを設定するのは、新しく作成したライブラリに対してのみで、既に設定済みの 既存ライブラリには必要ありません。

ライブラリ ブラウザーで使用可能なライブラリをイネーブルにするには、EnableLBRepository パラメーターをオ ンにします。xmcImportFunction を使用してブロックを新しいライブラリにインポートしたら、ライブラリを開 いた状態で、ライブラリを保存する前に、MATLAB コマンド ラインから次のコマンドを使用する必要があります。

set_param(gcs,'EnableLBRepository','on');

このパラメーターはライブラリがライブラリ ブラウザーに属することを示しますが、これは単に最初の手順にすぎま せん。メイン メニューから [File] → [Save] コマンドを使用するか、ツールバーの ボタンをクリックしてライブラ リを保存します。

ライブラリ ブラウザーのライブラリには、ライブラリ モデルと同じディレクトリに、ライブラリと関連するメタデ ータを定義する slblocks.m というスクリプトも必要です。このスクリプトは、別のライブラリから既存のスクリ プトをコピーするか、MATLAB インストール ディレクトリからコピーするか、次のテキストを編集して slblocks.m として保存すると作成できます。

function blkStruct = slblocks

% This function adds the library to the Library Browser % and caches it in the browser repository

% Specify the name of the library Browser.Library = 'newlib';

% Specify a name to display in the library Browser Browser.Name = 'New Library';

blkStruct.Browser = Browser;

Browser.Library には .slx ファイル拡張子なしでライブラリ名を指定し、Browser.Name にはライブラリ ブラ ウザーに表示される名前を指定します。

注記: ライブラリはそれぞれ別のディレクトリに保存され、<library>.slxファイルとそのライブラリの slblocks.m スクリプトが含まれます。

ライブラリとslblocks.mスクリプトを作成したら、MATLAB で検出されるようにライブラリディレクトリを MATLAB パスに追加するか、MATLAB パスに既に含まれるフォルダーにライブラリをコピーします。MATLAB コマ ンド プロンプトに「path」と入力すると、MATLAB で現在使用されているパスが表示されます。また、次のコマン ドを使用して MATLAB パスにライブラリ ディレクトリを追加することもできます。

addpath ('library_folder') savepath

説明:

• 'library_folder': 新しいライブラリへのパスを指定します。

• savepath

ヒント: MATLAB パスからフォルダーを削除するには、次のコマンド シーケンスを使用します。

rmpath ('library_folder') savepath

最後に、ライブラリ ブラウザーのウィンドウの左側を右クリックし、[Refresh Library Browser] をクリックして新し いライブラリを表示させます。これでライブラリがツールに読み込まれ、インポートされたブロックが表示されて、

モデルにドラッグ アンド ドロップできるようになります。

インポートしたブロックのデバッグ

Model Composer には、デザイン全体を Simulink® でシミュレーション中に、xmcImportFunction コマンドでブロ

ックとしてインポートした C/C++ コードをデバッグする機能があります。この場合、

xmcImportFunctionSettings コマンドを使用してデバッグ ツールを設定します。

第 3 章: C/C++ コードのカスタム ブロックとしてのインポート

この機能を使用すると、デバッグ情報を含めて C/C++ 関数を構築し、Simulink に読み込んでシミュレーションできま す。読み込んだら、特定のインポート ブロックの C/C++ コードにステップインして、関数をデバッグします。デバ ッグ環境では、C/C++ コードにブレーク ポイントを設定してステップスルーし、中間結果を確認してシミュレーショ ンで関数を検証します。Simulink のシミュレーション中に C/C++ コードをデバッグすると、自然なフローになりま す。Simulink で必要な入力スティミュラスを設定し、コードをステップスルーしてその効果を確認します。

Model Composer のデバッグ フローの手順は次のとおりです。

1. xmcImportFunctionSettingsコマンドを使用してデバッグツールを指定します。

2. デバッグツールを起動します。

3. インポートした関数にブレークポイントを追加します。

4. MATLAB® プロセスにつなげます。

5. Simulink シミュレーションを開始します。

6. シミュレーション中にインポートした関数をデバッグします。

デバッグ モードのイネーブル

C/C++ 関数をデバッグするには、シミュレーション モデルを release ではなく debug モードで構築する必要がありま す。xmcImportFunctionSettings コマンドを使用すると、シミュレーションの起動前にビルド モードを設定で きます。デバッグ ビルドをイネーブルにするには、次のコマンドを使用します。

xmcImportFunctionSettings('build', 'debug')

コマンドの オプションの詳細は、xmcImportFunctionSettings コマンドの構文 を参照してください。Windows オペレ ーティング システムでデバッグ モードをイネーブルにすると、MATLAB® コマンド ウィンドウに次のようなメッセ ージが表示されます。

Imported C/C++ code will be built with MinGW compiler. You can use gdb to debug your C/C++ code.

MATLAB process ID is 4656.

You can also get the process ID by typing "feature getpid" in the MATLAB command window.

上記の情報は、次のセクションで説明するように、デフォルトのデバッグ ツールを起動し、MATLAB プロセスに接 続するために使用できます。

ヒント: release ビルド環境を復元するには、'build' オプションに 'release' を使用します。

xmcImportFunctionSettings('build','release')

デバッグ ツールの起動

デバッグ ビルド モードをイネーブルにすると、xmcImportFunctionSettings コマンドにより、提案されるデバ ッグ ツールへのリンクが返されるようになります。

Model Composer を使用したデバッグには、サードパーティのデバッガーが必要です。デフォルトのデバッガーは、

Linux および Windows オペレーティング システムのどちらでも GDB です。

ドキュメント内 Model Composer ユーザー ガイド (ページ 46-53)