チュートリアル :
Model Composer を使用した モデル ベースのデザイン
UG1259 (v2019.1) 2019 年 5 月 29 日
この資料は表記のバージョンの英語版を翻訳したもので、内容に相違が生じる場合には原文を優先します。資料に よっては英語版の更新に対応していないものがあります。日本語版は参考用としてご使用の上、最新情報につきま しては、必ず最新英語版をご参照ください。
Model Composer japan.xilinx.com 2
改訂履歴
次の表に、この文書の改訂履歴を示します。
セクション 改訂内容
2019 年 5 月 31 日バージョン 2019.1
資料全体 デザインファイルをアップデート。
演習 3: GDB デバッガーを使用したインポート済みの C/C++
コードのデバッグ
新しい演習を追加。
演習 4: Visual Studio を使用したインポート済み C/C++ コード のデバッグ
新しい演習を追加。
演習 5:自動コード生成
• 以前の演習 3 を演習 5 に移動。
• 演習 5 の手順 2 を変更。
Model Composer を使用したモデルベースのデザイン japan.xilinx.com 3
目次
改訂履歴 ... 2
Model Composer の演習の概要 ... 5
概要 ... 5
ソフトウェア要件 ... 6
Model Composer の起動 ... 6
チュートリアル ファイルの場所および準備 ... 7
演習 1: Model Composer の概要 ... 8
概要 ... 8
手順 1: Model Composer ライブラリの確認 ... 9
手順 2: Model Composer ブロックを使用したデザインの構築 ... 10
手順 3: データ型の使用 ... 13
まとめ ... 19
演習 2: Model Composer へのコードのインポート ... 20
概要 ... 20
手順 1: インポート関数例の設定 ... 20
手順 2: 関数テンプレートを使用したカスタム ブロック ... 22
まとめ ... 27
演習 3: GDB デバッガーを使用したインポート済みの C/C++ コードのデバッグ ... 28
概要 ... 28
手順 1: インポートした関数をデバッグするサンプルデザインの設定 ... 29
演習 2: GDB デバッガーを使用した C/C++ コードのデバッグ ... 32
まとめ ... 35
演習 4: Visual Studio を使用したインポート済み C/C++ コードのデバッグ ... 36
概要 ... 36
手順 1: インポートした関数をデバッグするサンプル デザインの設定 ... 37
演習 2: Visual Studio を使用した C/C++ コードのデバッグ ... 39
まとめ ... 46
演習 5:自動コード生成 ... 47
概要 ... 47
手順 1: コード生成の要件の確認 ... 47
手順 2: インターフェイスのマップ ... 50
手順 3: Model Composer デザインからの IP 生成 ... 53
手順 4: 高位合成可能なコードの生成 ... 57
Model Composer japan.xilinx.com 4
手順 5: Model Composer デザインを System Generator に統合 ... 61
まとめ ... 65
法的通知 ... 66
お読みください: 重要な法的通知 ... 66
Model Composer を使用したモデルベースのデザイン japan.xilinx.com 5
Model Composer の演習の概要
概要
ザイリンクス Model Composer は、Simulink® 環境でデザインを短時間で試行できるモデル ベースのデザイン ツールで、自動コード生成 により、ザイリンクス プログラマブル デバイスのプロダクションまでの期間を短縮できます。
Model Composer は Simulink へのアドオン機能として設計されており、ザイリンクス FPGA 用にアルゴリズムを設計およびインプリメン
テーションするためにパフォーマンスが最適化されたブロックのライブラリを提供します。Model Composer のライブラリには 80 を超える定 義済みブロックがあります。コンピューター ビジョンや画像処理などのアプリケーションに特化したブロックや、数学、線形代数学、論理、
ビット単位の操作用などの機能ブロックが含まれています。
Model Composer ライブラリのブロック、およびユーザーがインポートしたカスタムブロックを使用して、インプリメンテーションの詳細を気
にすることなくアルゴリズムの開発に集中することができ、またアルゴリズム設計、シミュレーション、機能検証用の Simulink グラフィカル 環境機能をフル活用できます。Model Composer では、ザイリンクス高位合成テクノロジを拡張する自動最適化機能を使用して、ユー ザーのアルゴリズム仕様がプロダクション品質のインプリメンテーションに変換されます。
このチュートリアルでは、Model Composer を使用したワークフロー全体を説明します。
含まれている演習は次のとおりです。
• 演習 1: Model Composer の概要
o 設計用 Model Composer ライブラリ ブロックの紹介
o ネイティブ Simulink との統合、ベクターおよびメトリクスのサポート o データ型の使用
• 演習 2: Model Composer でのカスタムブロックの作成
o xmcImportFunction コマンドを使用して、Model Composer にインポートするソースおよびヘッダー ファイルで定義さ れた関数を指定し、Model Composer ブロックまたはブロック ライブラリを作成。
o 関数テンプレートを使用したカスタム ブロックの作成。
• 演習 3: GDB デバッガーを使用したインポート済みの C/C++ コードのデバッグ
o xmcImportFunction 機能を使用して作成されたカスタムライブラリブロックを特定。
o GDB ツールを使用した C/C++ コードのデバッグ。
• 演習 4: Visual Studio を使用したインポート済み C/C++コードのデバッグ
o xmcImportFunction 機能を使用して作成されたカスタム ライブラリ ブロックを特定。
o Visual Studio を使用した C/C++ コードのデバッグ。
• 演習 5:自動コード生成 o コード生成の要件 o インターフェイスのマップ
o Vivado® IP インテグレーターで使用するための IP の生成
o Vivado HLS で生成可能なコードの生成
o Model Composer の合成済みデザインの System Generator for DSP への統合
Model Composer の演習の概要
Model Composer japan.xilinx.com 6
ソフトウェア要件
このチュートリアルの演習を実施するには、次のソフトウェアをインストールしておく必要があります。
• MATLAB™: このリリースの Model Composer でサポートされている MATLAB リリースおよびシミュレータは、『Vivado Design
Suite ユーザーガイド: リリースノート、インストールおよびライセンス』 (UG973) の「互換性のあるサードパーティツール」を参照
してください。
• Vivado® Design Suite のバージョン: 2019.1 (Vivado HLS を含む)
• Model Composer: 2019.1
システムおよびソフトウェアの要件の詳細は、『Vivado Design Suite ユーザーガイド: リリースノート、インストールおよびライセンス』
(UG973) を参照してください。
Model Composer の起動
Model Composer を起動します。
• Windows の場合:
o [スタート] → [すべてのプログラム] → [Xilinx Design Tools] → [Model Composer 2019.x] → [Model Composer 2019.x] を クリックします。
または
o インストール後にデスクトップに表示される Model Composer アイコンをダブルクリックします。
• Linux の場合:
<Model_composer_install_dir>/2019.x/bin にある model_composer というシェルスクリプトを使用して Model Composer を起動します。このスクリプトを実行する前に、使用している Linux の $PATH 環境変数に MATLAB 実行ファイル が指定されていることを確認してください。Model_composer スクリプトを実行すると $PATH で最初に検出された MATLAB 実行ファイルが実行され、Model Composer がその MATLAB のセッションに関連付けられます。また、model_composer シェル スクリプトでは、MATLAB でサポートされるすべてのオプションがサポートされているので、これらをコマンド ライン引数
として model_composer スクリプトに指定できます。
Model Composer が開いたら、MATLAB コマンド ウィンドウに「version 」と入力すると、Model Composer が関連付けられている MATLAB のバージョンを確認できます。
>> version ans =
'9.2.0.538062 (R2017a)'
Model Composer の演習の概要
Model Composer を使用したモデルベースのデザイン japan.xilinx.com 7
チュートリアル ファイルの場所および準備
このチュートリアルには演習ごとにプロジェクトファイルおよびソースファイルがあります。このチュートリアルのデザインファイルは、
japan.xilinx.com からダウンロードできます。
1. ザイリンクスウェブサイトから、リファレンスデザインファイルをダウンロードします。
2. ハード ドライブまたはネットワーク上の書き込み可能なディレクトリに ZIP ファイルの内容を解凍します。
推奨: このチュートリアルを通してチュートリアルデザインデータを変更します。このチュートリアルを開始するたびに、
ug1259-model-composer-tutorial.zip から新しく ModelComposer_Tutorial ディレクトリを解凍して使用する ことをお勧めします。
ヒント: この資料では、チュートリアル ファイルは C:\ModelComposer_Tutorial に保存されているものと想定していま
す。この資料内のパス名および図は、このパス名を参照しています。チュートリアル ファイルを別のディレクトリに保存する場 合は、それに合わせてパス名を変更してください。
ヒント: チュートリアル ファイルは、フォルダー名にスペースが含まれていないフォルダーに保存してください。ディレクトリ名に
スペースが含まれていると、コード生成で問題が発生するので、スペースはサポートされていません。
Model Composer japan.xilinx.com 8
演習 1: Model Composer の概要
概要
このチュートリアルでは、Model Composer を使用して、Simulink®環境でアルゴリズムをすばやく設計しシミュレーションする方法を説明 します。
手順
この演習では、次の手順を実行します。
• 手順 1: Model Composer の Simulink ライブラリを確認します。
• 手順 2: Model Composer ブロックを使用して単純なデザインを構築し、Model Composer ブロックがネイティブ Simulink ブロッ クおよびサポートされている Signal Dimensions とどのように統合されるのかを確認します。
• 手順 3: Model Composer でサポートされるすべてのデータ型、およびデータ型の変換を説明します。
演習 1: Model Composer の概要
Model Composer を使用したモデルベースのデザイン japan.xilinx.com 9
手順 1: Model Composer ライブラリの確認
この手順では、Model Composer が Simulink 環境でどのように使用されるのかを説明し、Model Composer ライブラリで使用可能なブロッ クのカテゴリを確認します。
Model Composer ライブラリへのアクセス
Model Composer には、Simulink 環境で使用するためのブロックが 80 以上あり、Simulink Library Browser からアクセスできます。
1. Simulink Library Browser は、次のいずれかの方法で開きます。
a. [Home] タブで、[Simulink] をクリックし、モデル テンプレートを選択します。選択したモデルで、[Library Browser] ボタン
をクリックします。
b. コマンド プロンプトに次を入力します。
slLibraryBrowser
2. ブラウザーで、[Xilinx Model Composer] ライブラリを参照します。
図 1: Xilinx Model Composer ライブラリ
Model Composer ブロックは機能別に分類されています。ここから数分時間をかけて、この中のライブラリをクリックして、どのようなブ
ロックがあるのかを確認します。
演習 1: Model Composer の概要
Model Composer japan.xilinx.com 10
手順 2: Model Composer ブロックを使用したデザインの構築
この手順では、Model Composer ブロックを使用して、単純なデザインを構築します。
Sobel エッジ検出 : アルゴリズムの概要
Sobel エッジ検出は、画像およびビデオ処理の分野で使用される物体エッジ抽出用のアルゴリズムです。Sobel 演算子を使用したエッジ 検出では、画像の一次微分を計算することにより、エッジ情報を抽出します。
図 2: Sobel エッジ検出
Model Composer でのアルゴリズムのインプリメント
1. MATLAB の [Current Folder] で ModelComposer_Tutorial\Lab1\Section1 に移動します。
2. Sobel_EdgeDetection_start.slx モデルをダブルクリックします。
このモデルには、ビデオ ファイルを入力としてアルゴリズムに直接ストリームし、その結果を表示するためのソースおよびシンク ブ ロック (Simulink の [Computer Vision System Toolbox] から) が含まれています。このセクションに必要な Model Composer ブロック の一部も含まれています。デザイン内の Model Composer ブロックと Simulink ブロックは見た目が違うことに注目してください。
3. Simulink Library Browser で [Xilinx Model Composer] → [Computer Vision] をクリックし、[Sobel Filter] ブロックを選択します。図 4 に示すように、このブロックを [Convolve Image Frame with Sobel Kernel and Compute Gradient] エリアにドラッグし、このブロックの
入力を [From Multimedia File] ブロックの出力に接続します。
注記: ブロック名をキャンバスに入力して (Simulink ブロックと同じ)、Model Composer を直接モデルに追加することもできます。
図 3: Sobel Filter ブロックの検索
4. Simulink Library Browser で [Xilinx Model Composer] → [Computer Vision] をクリックし、[Gradient Magnitude] ブロックを選択して モデルにドラッグして、Sobel Filter ブロックの X および Y 出力をこのブロックの入力に接続します。
演習 1: Model Composer の概要
Model Composer を使用したモデルベースのデザイン japan.xilinx.com 11
5. 残りのブロックを次の図に示すように接続し、アルゴリズムを完成させます。
図 4: Sobel フィルターおよび Gradient Magnitude ブロック
6. [Simulation] → [Run] コマンドをクリックするか ボタンをクリックしてモデルをシミュレーションし、Sobel エッジ検出アルゴリズム
の結果を確認します。
注記: Model Composer ブロックはメトリクスで操作可能です (画像フレームは次の図を参照)。
図 5: 入力および出力ビデオ
アルゴリズムのシミュレーション パフォーマンスを確認するには、シミュレーションのビデオ フレーム レートをチェックします。これには次を 実行します。
7. Simulink の [Computer Vision System Toolbox] から [Frame Rate Display] ブロックを追加し ([Sinks] の下)、図 6 に示すようにアル ゴリズムの出力に接続します。
演習 1: Model Composer の概要
Model Composer japan.xilinx.com 12
8. モデルを再びシミュレーションし、1 秒ごとに処理されるビデオフレームの数を確認します。
図 6: 1 秒ごとに処理されるフレームの数
9. 次を試してみます。
• [From Multimedia File] ブロックをダブルクリックして、[File Name] で別のビデオを選択し、入力ビデオを変更します。Source ブ
ロックでビデオの解像度を変更するのに、アルゴリズムに構造的な変更を加える必要はありません。
注記: 入力ファイルを変更するには、シミュレーションを停止する必要があります。また、MATLAB ビジョンデータツールボッ クス ディレクトリの MP4 ファイルはサポートされていません。
• Model Composer の [Computer Vision] サブディレクトリにあるほかのブロックを使用して、バリエーションを構築します。
注記: ModelComposer_Tutorial\Lab1\Section1\Examples には、参考用に小型のサンプル デザインがほかにも
あります。
演習 1: Model Composer の概要
Model Composer を使用したモデルベースのデザイン japan.xilinx.com 13
手順 3: データ型の使用
この手順では、Model Composer でサポートされているデータ型を学び、浮動小数点型を固定小数点型に変換する方法を説明します。
この演習には、次の 2 つのセクションと、オプションのセクションが 1 つあります。
• Model Composer を使用して単純な浮動小数点アルゴリズムを確認します。
• Model Composer デザインでのデータ型変換を確認します。
ネイティブ Simulink データ型
1. MATLAB の [Current Folder] で ModelComposer_Tutorial\Lab1\Section2 に移動します。
2. ColorSpace_Conversion.slx をダブルクリックして、デザインを開きます。
これは、基本的な Model Composer ブロックを使用して構築された色空間コンバーターのデザインで、RGB を YCbCr に変換します。
3. モデルをアップデートし (Ctrl+D キーを押す)、データ型、信号の次元、サンプル時間が Simulink の Source ブロックから Model Composer ブロックに伝搬されるのを確認します。このデザインでは単精度の浮動小数点データ型が使用されます。
4. モデルをシミュレーションし、その結果を確認します。
データ型の変換
前のデザインをザイリンクス固定小数点型を使用するよう変換するには、次の手順に従います。
注記: 使用しているデータセット/アルゴリズムによりますが、固定小数点を使用すると、許容可能な精度とのトレードオフで、最適なリ
ソース使用率およびパフォーマンスを得ることができます。
1. [Current Folder] で ColorSpace_Conversion_fixed_start.slx をダブルクリックし、デザインを開きます。
2. Simulink Library Browser で [Xilinx Model Composer] ライブラリを開きます。
3. [Signal Attributes] サブディレクトリに移動して [Data Type Conversion] ブロックを選択し、デザインの RGB to YCbCr サブシステム
前後の空スロットにドラッグします。
演習 1: Model Composer の概要
Model Composer japan.xilinx.com 14
図 7: Model Composer のデータ型変換ブロック
図 8: RGB to YCbCr サブシステム (DTC ブロックが接続されている状態)
4. RGB to YCbCr サブシステムの入力の Data Type Conversion ブロックを開き、次のように設定します。
o [Output data type] パラメーターを [fixed] に変更します。
o [Signedness] を [Unsigned] に設定します。
o [Word length] を 8 に設定します。
o [Fractional length] を 7 に設定します。
o [Apply] ボタンをクリックし、ダイアログボックスを閉じます。
演習 1: Model Composer の概要
Model Composer を使用したモデルベースのデザイン japan.xilinx.com 15
図 9: データ型変換ブロックのパラメーター
5. RGB to YCbCr サブシステムの出力に Data Type Conversion ブロックを追加し、[Output data type] パラメーターを [single] に設定し
ます。 これで、出力信号が Video Viewer ブロックに視覚的に接続されます。
図 10: 出力データ型の設定
演習 1: Model Composer の概要
Model Composer japan.xilinx.com 16
6. [RGB to YCbCr] サブシステムをダブルクリックし、下位階層に移動してモデルを開きます。RGB to YCbCr サブシステム内には、
Gain ブロックおよび Constant ブロックを使用して Y、Cb、Cr コンポーネントを計算するサブシステムがいくつかあります。
Gain ブロックの利得パラメーターおよび Constant ブロックの値の固定小数点型は変更可能です。これには、Calculate_Y、
Calculate_Cb、Calculate_Cr ブロックを開いて、データ型を次のように設定します。
Gain ブロックの場合は、[Gain data type] を [fixed] に設定すると、次のようなオプションが表示されます。
o [Signedness] を [Signed] に設定 o [Gain data type] を [fixed] に設定 o [Word length] を 8 に設定 o [Fractional length] を 7 に設定
Constant ブロックの [Data Types] タブで [Output data type] を [fixed] に設定すると、次のオプションが表示されます。
o [Signedness] を [Signed] に設定 o [Output data type] を [fixed] に設定 o [Word length] を 8 に設定 o [Fractional length] を 7 に設定
ヒント: [Property Inspector] ウィンドウを開くには、[View] → [Property Inspector] をクリックします。異なる Gain また は Constant ブロックを選択すると、そのブロックのプロパティを確認して変更できます。
デザインのすべての Constant および Gain ブロックに対して、この操作を実行します。モデルをアップデートし (Ctrl+D キーを押 す)、次の図に示すように、固定小数点データ型が Gain ブロックおよび加算器ツリーを介して自動的にビットを増加しながら伝搬さ れていることを確認します。
図 11: ザイリンクス固定小数点データ型の伝搬
ザイリンクス固定小数点データ型の表示フォーマットは次のとおりです。
x_[u/s]fix[wl]_En[fl]
u: 符号なし
s: 符号付き wl: ワードの長さ
演習 1: Model Composer の概要
Model Composer を使用したモデルベースのデザイン japan.xilinx.com 17
fl: 小数部の長さ
たとえば、x_sfix16_En8 は、ワードの長さ 16、小数部の長さ 8 の符号付きの固定小数点値です。
完成したデザインは次の場所にあります。
ModelComposer_Tutorial\Lab1\Section2\solution\Colorspace_Conversion_fixed.slx
データ型の変換 ( 代替法 )
Model Composer では、データ型を変更して、その結果をすばやく確認しやすくするデータ型式がサポートされています。
1. [Current Folder] で ColorSpace_Conversion_Expression.slx をダブルクリックし、デザインを開きます。
2. RGB to YCbCr サブシステムの入力にある Data Type Conversion ブロック、サブシステム内にある Gain ブロックおよび Constant ブ
ロックでは、対応する [Output data type] および [Gain data type] が [data type expression] に設定されていることに注目してください。
図 12: ワークスペース変数を使用したデータ型の制御
これにより、Model Composer ブロックでワークスペース変数を使用してデザインのデータ型を制御できます。この場合、
[InputDataType] および [FDataType] の 2 つを MATLAB コマンドプロンプトから簡単に変更できます。
3. モデルをアップデートし (Ctrl+D キーを押す)、固定小数点データ型がブロックを介して伝搬されるのを確認します。
ビットの増加は、デザインのほかの Model Composer ブロックで自動的に実行されます。デザインのほかの中間部分で固定小数点 データ型をさらに制御する必要がある場合は、適宜 Data Type Conversion ブロックを挿入できます。
4. Gain および Constant ブロックで固定小数点データ型を変更するには、MATLAB コマンド プロンプトで次のコマンドを入力します。
>> FDataType = 'x_sfix8_En6'
>> InputDataType = 'x_ufix8_En6'
x_sfix8_En6 は、ワードの長さ 8、小数部の長さ 6 の符号付き固定小数点値です。
モデルをアップデートし (Ctrl+D キーを押す)、固定小数点データ型がデザインで変更されたことを確認します。
5. モデルをシミュレーションし、その結果を確認します。コマンド ラインから [InpuDataType] および [FDataType] 変数を変更し、ワード の長さと小数部の長さのいくつかの組み合わせを試してみます。丸めモードおよびオーバーフロー モードの詳細は、次の「追加の 詳細」を参照してください。
演習 1: Model Composer の概要
Model Composer japan.xilinx.com 18
追加の詳細:
上記の例では、データ型式を使用して、固定小数点データ型のワードの長さと小数部の長さのみを指定しました。デザインの固定小数 点型をさらに制御するため、符号の有無、丸め、オーバーフローも指定できます。データ型式を使用して固定小数点データ型を指定す るには、通常次のフォーマットを使用します。
x_[u/s]fix[wl]_En[fl]_[r<round>w<overflow>]
u: 符号なし s: 符号付き wl: ワードの長さ fl: 小数部の長さ
<round>: 次の表から対応するうインデックスを指定します。これはオプションです。指定しない場合のデフォルト値は 6 (負の無限大へ の切り捨て) です。丸め (1 から 5) を指定すると、データがそのフォーマットで表現可能な最近似値に丸められます。最近似値が複数存 在する場合は、[動作] 列で指定されているように動作します。
表 1: 丸めインデックス
インデックス 動作
1 正の無限大への丸め
2 0 への丸め
3 負の無限大への丸め
4 無限大への丸め
5 収束丸め
6 負の無限大への切り捨て
7 0 への切り捨て
<overflow>: 次の表から対応するインデックスを指定します。これはオプションです。指定しない場合のデフォルト値は 4 (折り返し) です。
表 2: オーバーフローインデックス
インデックス 動作
1 飽和
2 0 への飽和
3 対称飽和
4 折り返し
5 符号絶対値の折り返し
例: x_ufix8_En6_r6w4 は、次のような固定小数点データ型を示します。
符号の有無: 符号なし ワードの長さ: 8 小数部の長さ: 6
丸めモード: 負の無限大への切り捨て オーバーフロー モード: 折り返し
演習 1: Model Composer の概要
Model Composer を使用したモデルベースのデザイン japan.xilinx.com 19
まとめ
この演習では、次のことを学びました。
• Model Composer ブロックをネイティブ Simulink ブロックに直接接続する方法。
• Model Composer ブロックでベクターおよびメトリクスがサポートされており、入力でフレームからピクセルのストリームに変換せず
に、画像のフレーム全体を処理できること。
• さまざまなデータ型を使用する方法。
• Data Type Conversion ブロックを使用して、浮動小数点から固定小数点への変換など、データ型変換を制御する方法。
注記: Model Composer では、Simulink ブロックと同じ浮動小数点および整数のデータ型がサポートされています。Model
Composer では、ザイリンクス固定小数点データ型もサポートされています。
この演習で使用した最終 Model Composer ファイルは、次の solution ディレクトリにあります。
C:\ModelComposer_Tutorial\Lab1\Section1\solution C:\ModelComposer_Tutorial\Lab1\Section2\solution
Model Composer japan.xilinx.com 20
演習 2: Model Composer へのコードのインポート
概要
Model Composer を使用すると、Vivado HLS ライブラリ関数および C/C++ コードをカスタムブロックとしてインポートでき、シミュレーショ
ンおよびコード生成用にユーザーのアルゴリズムで使用できます。
ライブラリインポート機能は MATLAB の関数 xmcImportFunction で、これを使用して必要なソースファイルを指定し、Simulink で モデルに追加可能な関連ブロックを自動作成できます。
この演習では、次の 2 つの手順を実行します。
• 手順 1: xmcImportFunction 関数を例を使用して説明します。
• 手順 2: 関数テンプレートを使用してカスタムブロックを作成する Model Composer の機能を学びます。
Model Composer のその他の機能は、『Model Composer ユーザー ガイド』 (UG1262) を参照してください。
手順 1: インポート関数例の設定
MATLAB の
[Current Folder]で
Lab2\Section1フォルダーに移動します。
1. basic_array.cpp および basic_array.h ファイルをダブルクリックして、MATLAB Editor にソース コードを表示します。
これらは、単純な C++ の basic_array 関数のソース ファイルで、サイズ 4 の配列 2 つの和を計算します。 この関数を、
xmcImportFunction 関数を使用して Model Composer ブロックとしてインポートします。
生成されたブロックの入力および出力は、ソース関数のシグネチャによって決定されます。Model Composer では、const 修飾子で 指定された引数はブロックへの入力として認識され、それ以外の引数は出力として認識されます。
注記: 引数の方向を指定するほかのオプションおよびその他の詳細は、『Model Composer ユーザー ガイド』 (UG1262) を参照
してください。
重要: ブロックへの入力を特定するには、関数シグネチャの const 修飾子を使用するか、または pragma INPORT を使用できます。
basic_array 関数では、in1 および in2 引数が入力として認識されます。
void basic_array(
uint8_t out1[4], const uint8_t in1[4], const uint8_t in2[4])
2. xmcImportFunction 関数の使用方法および関数シグネチャを理解するには、MATLAB コマンド プロンプトで「help xmcImportFunction」と入力してヘルプを表示します。
3. import_function.m MATLAB スクリプトを開き、xmcImportFunction 関数の必須フィールドを次のように入力します。
xmcImportFunction('basic_array_library', {'basic_array'}, 'basic_array.h', {'basic_array.cpp'}, {});
この情報は次のように定義されます。
• ライブラリ名: basic_array_library。新しいブロックで作成される Simulink ライブラリの名前です。
演習 2: Model Composer へのコードのインポート
Model Composer を使用したモデルベースのデザイン japan.xilinx.com 21
• 関数名: basic_array。ブロックとしてインポートする関数の名前です。
• ヘッダー ファイル: basic_array.h。関数のヘッダー ファイルです。
• ソース ファイル: basic_array.cpp。インポートされた関数のソース ファイルです。
• 検索パス: ヘッダーファイルの検索パスを指定します。この例では、追加で指定する検索パスはないので、{ } としてないことを 示します。
注記: 完成したファイルは、solution フォルダーにある create_libary_solution.m を確認してください。
4. MATLAB のコマンド ラインで import_function.m スクリプトを実行します。
>>run('import_function.m')
Simulink ライブラリ モデルが生成された basic_array ブロックと共に開きます。
この Simulink ライブラリ モデルを保存します。
5. [basic_array] ブロックをダブルクリックし、生成されたインターフェイスを確認します。
次の図に、basic_array の [Block Parameters] ダイアログ ボックスを示します。
図 13: basic_array ブロックの [Block Parameters] ダイアログボックス
6. test_array.slx モデルを開きます。これは生成されたブロックをテストするためのモデルで、中は空です。
7. このモデルに生成された basic_array ブロックを追加し、Source および Sink ブロックを接続します。
8. このモデルをシミュレーションし、表示ブロックで結果を確認します。
演習 2: Model Composer へのコードのインポート
Model Composer japan.xilinx.com 22
手順 2: 関数テンプレートを使用したカスタム ブロック
この手順では、例を使用して次の操作を実行します。
• さまざまなサイズの入力をサポートするカスタム ブロックを作成。
• 固定小数点および小数部の長さがさまざまな信号を受け入れるカスタムブロックを作成。
• テンプレート変数を使用して、単純な算術演算を実行。
1. Lab2/section2 フォルダーに移動します。
2. template_design.h ファイルをダブルクリックし、MATLAB Editor にソース コードを表示します。Demux および Mux の 2 つの 関数があります。これらの関数は、次に示すように、入力を多重化または多重分離します。
図 14: Demux 関数
3. この図のコードは、「#pragma XMC INPORT vector_in」で始まっています。 これは、pragma を使用してポートの方向を手動 で指定する 1 つの方法です。ここでは、関数の引数 vector_in を入力ポートとして指定しています。同様に、XMC OUTPORT も 定義できます。
注記: ポート指定の詳細は、『Model Composer ユーザーガイド』 (UG1262) の「C/C++ コードのカスタムブロックとしてのイン ポート」 を参照してください。
4. 関数宣言の前に template を使用します。異なるサイズの入力をサポートするには、次に示すように、NUMOFELEMENTS をパラ メーターとして宣言し、vector_in 配列を定義するときにも使用します。このようにすると、さまざまなサイズの信号をブロックの入 力ポートに接続できます。
5. テンプレートパラメーター W および I が、ワードおよび整数の長さが異なる信号を受け入れるよう宣言されています。
注記: 両方の関数に同じライブラリが指定されます。
6. 次のようにテンプレート変数を使用して算術演算子が実行されていることを確認します。これは、出力信号の長さが入力信号の長さ の半分であることを示しています。
演習 2: Model Composer へのコードのインポート
Model Composer を使用したモデルベースのデザイン japan.xilinx.com 23
7. Mux 関数も同様です。
図 15: Mux 関数
xmcImportFunction コマンドを使用して、Mux および Demux 関数のライブラリ ブロックを生成し、カスタム ブロックを使用して デザインを完成させます。
図 16: 初期デザイン
8. MATLAB コマンド プロンプトで import_function.m スクリプト ファイルをダブルクリックし、実際のデザインに組み込むライブラ
リブロックを生成する次のコマンドを確認します。
>>xmcImportFunction('design_lib',{'Demux'},'template_design.h',{},{'$XILINX_VIVADO_HLS/includ e'},'override','unlock')
>>xmcImportFunction('design_lib',{'Mux'},'template_design.h',{},{'$XILINX_VIVADO_HLS/include' },'over ide','unlock')
9. MATLAB のコマンド ラインで import_function.m スクリプトを実行します。
>>run('import_function.m')
10. design_lib.slx ライブラリ モデル ファイルに生成されたライブラリ ブロックを確認し、作業ディレクトリに保存します。
図 17: 生成されたライブラリブロック
11. Demux および Mux ブロックをコピーして design.slx ファイルに貼り付け、次のように接続します。
図 18: 完成したデザイン
演習 2: Model Composer へのコードのインポート
Model Composer japan.xilinx.com 24
12. カスタムブロックを組み込んだら、次の手順に従います。
a. Constant ブロックをダブルクリックし、double 型のベクター入力を確認します。SSR はワークスペース変数で、最初は initFcn
モデルのコールバックから 8 に設定されます。
b. Data Type Conversion (DTC) ブロックを使用し、double 型がワードの長さが 16 ビット、小数部の長さが 8 ビットの fixed 型
に変換されます。
このデザインはテンプレート化されているので、入力のワードは任意の長さに設定可能です。
c. Demux ブロックをダブルクリックし、[Function] タブの [Template parameters] セクション、および [Interfaces] セクションの [Dimension] 列を確認します。
図 19: ライブラリ関数ブロックのパラメーター
d. ブロックをダブルクリックし、[Template parameters] および [Dimension] を確認します。
13. 入力および出力に Display ブロックを次の図に示すように追加し、モデルをシミュレーションしてその結果を確認します。
図 20: シミュレーション後の出力
演習 2: Model Composer へのコードのインポート
Model Composer を使用したモデルベースのデザイン japan.xilinx.com 25
14. 入力をテンプレート化すると、デザインに柔軟性が追加され便利であることを理解するため、次の操作を実行します。
a. DTC ブロックをダブルクリックします。
b. [Block Parameters] ダイアログボックスで [Word length] を 16 から 32 に変更します。
c. [Fractional length] を 8 から 16 に変更します。
図 21: DTC ブロックパラメーター
d. [OK] をクリックし、Ctrl+D キーを押します。デザイン内の信号の次元を確認します。
図 22: デザイン内の信号の次元
出力が正しいことを確認するため、シミュレーションを実行し、同じブロックを異なるワードおよび小数部の長さに使用可能であること を確認します。これは、C デザインで W および I の値をテンプレート化したからです。
15. テンプレート パラメーターの理解をさらに深めるため、次の操作を実行します。
a. [Model Configuration Parameters] ボタンの横にある矢印をクリックし、[Model Properties] オプションを選択します。
図 23: [Model Configuration Parameters]
演習 2: Model Composer へのコードのインポート
Model Composer japan.xilinx.com 26
b. 次の図に示すように、[Model Properties] ウィンドウで [Callbacks] タブをクリックし、[InitFcn] を選択して SSR の値を 8 から 16 に変更します。
図 24: [Model Properties] ウィンドウ
c. [OK] をクリックし、Ctrl+D キーを押して、Constant ブロックの出力ベクターのエレメント数が変更されたことを確認します。 入力
DTC でデータ型を変更すると、ビット幅が変わります。これは、テンプレート パラメーターの NUMOFELEMENTS が設定されてい るからです。
図 25: 変更されたエレメント数
d. シミュレーションを実行し、入力値に基づいて出力を検証します。
注記: テンプレート変数でサポートされるデータ型を指定するためのデータ型および pragma の関数テンプレートなど、機能の
詳細は、『Model Composer ユーザー ガイド』 (UG1262) の「関数テンプレートを使用したブロックの定義」を参照してください。
演習 2: Model Composer へのコードのインポート
Model Composer を使用したモデルベースのデザイン japan.xilinx.com 27
まとめ
この演習では、次のことを学びました。
• Model Composer で xmcImportFunction を使用しカスタム ブロックを作成する方法。
• 固定小数点および小数部の長さがさまざまな信号を受け入れるブロックを作成する方法。
• さまざまな信号サイズまたはデータ次元を受け入れるブロックを作成するため、関数テンプレートを使用する構文を使用する方 法。
• テンプレート変数を使用して、単純な算術演算を実行。
注記: 現在の機能サポートでは、次の 2 つを使用するコードをインポートできます。
o ベクターおよび 2D メトリクス
o 浮動小数点、整数、および Vivado HLS の固定小数点のデータ型
この演習の最終 Model Composer ファイル (*.slx) は、次の solution ディレクトリにあります。
C:\ModelComposer_Tutorial\Lab2\section1\solution C:\ModelComposer_Tutorial\Lab2\section2\solution
Model Composer japan.xilinx.com 28
演習 3: GDB デバッガーを使用したインポート済みの C/C++
コードのデバッグ
概要
Model Composer には、Simulink® でデザイン全体をシミュレーションしながら、xmcImportFunction コマンドを使用してブロックとし
てインポートした C/C++ コードをデバッグする機能があります。
Model Composer でのデバッグフローは、次のとおりです。
1. xmcImportFunctionSettings コマンドを使用してデバッグ ツールを指定します。
2. デバッグ ツールを起動します。
3. インポートした関数にブレークポイントを追加します。
4. MATLAB®プロセスに接続します。
5. Simulink シミュレーションを開始します。
6. シミュレーションしながら、インポートした関数をデバッグします。
この演習には次の 2 つの手順があります。
• 手順 1: Model Composer で使用するオプティカルフローのサンプルデザインを設定します。xmcImportFunction 機能を
使用して作成されたカスタムのライブラリ ブロックを特定する方法を示します。
• 手順 2: GDB ツールを使用した C/C++ コードのデバッグ方法を説明します。
カスタム ブロックの作成方法は、『Model Composer ユーザー ガイド』 (UG1262) の第 3 章「C/C++ コードのカスタム ブロックとしてのイン ポート」を参照してください。
演習 3: GDB デバッガーを使用したインポート済みの C/C++ コードのデバッグ
Model Composer を使用したモデルベースのデザイン japan.xilinx.com 29
手順 1: インポートした関数をデバッグするサンプル デザインの 設定
1. MATLAB®コマンドプロンプトに次のコマンドを入力します。
>> xmcOpenExample
2. Enter キーを押して [Model Composer examples] ダイアログボックスを開きます。
図 26: [Model Composer examples] ダイアログボックス
3. [Model Composer examples] ダイアログ ボックスで [optical_flow] を選択し、[Open example] をクリックします。これでサンプル デザ
インが開きます。
演習 3: GDB デバッガーを使用したインポート済みの C/C++ コードのデバッグ
Model Composer japan.xilinx.com 30
図 27: サンプルデザイン
4. Lucas-Kanade ブロックをダブルクリックし、calculating_roots ブロックを確認します。
図 28: calculating_roots ブロック
演習 3: GDB デバッガーを使用したインポート済みの C/C++ コードのデバッグ
Model Composer を使用したモデルベースのデザイン japan.xilinx.com 31
このブロックは xmcImportFunction 機能を使用して生成されています。このブロックをダブルクリックすると、関数宣言を確認で きます。
図 29: calculating_roots の関数宣言
5. MATLAB のウィンドウで calculating_roots.h をダブルクリックして calculating_roots の関数宣言を表示します。
図 30: calculating_roots.h を開く
これで C/C++ コードをデバッグする準備が整いました。次の手順では、GDB ツールを使用したコードのデバッグ方法を説明します。
演習 3: GDB デバッガーを使用したインポート済みの C/C++ コードのデバッグ
Model Composer japan.xilinx.com 32
演習 2: GDB デバッガーを使用した C/C++ コードのデバッグ
1. xmcImportFunctionSettings コマンドを使用してデバッグ ツールを指定します。MATLAB コマンド プロンプトに次のコマン ドを入力します。
>> xmcImportFunctionSettings('build', 'debug');
2. Enter キーを押し、コマンド ウィンドウで適用された設定を確認します。
図 31: xmcImportFunction の設定
gdb リンクはデバッガー ツールを起動するのに使用し、MATLAB プロセス ID はデバッガーにプロセスを接続するのに使用します。
3. gdb リンクをクリックし、Windows コマンドプロンプトを開き、gdb を起動します。
図 32: GDB の起動
4. Windows コマンドプロンプトに次のコマンドを入力し、calculating_roots.h でコードの実行を停止する位置にブレークポイントを指定
します。Enter キーを押してコマンドを実行します。
(gdb) break calculating_roots.h:53
注記: 上記コマンドの「53」は、プログラムの 53 行目でシミュレーションを停止するよう GDB デバッガーに指示します。
図 33: ブレークポイントの設定
演習 3: GDB デバッガーを使用したインポート済みの C/C++ コードのデバッグ
Model Composer を使用したモデルベースのデザイン japan.xilinx.com 33
5. コマンドを実行すると、コマンドウィンドウで保留のブレークポイントを確認できます。これを次の図に示します。
図 34: 保留のブレークポイント
GDB で質問が表示される場合は、すべて「yes」と回答し、Enter キーを押します。
6. 次のコマンドを入力し、MATLAB プロセスを GDB デバッガーに接続します。
(gdb) attach <process_ID>
手順 2 で確認した「<process ID>」を入力します。たとえば「15972」と入力します。
MATLAB プロセスが接続されるとすぐに MATLAB アプリケーションが停止状態になり、応答しなくなります。
図 35: MATLAB プロセスの接続
7. Windows コマンド プロンプトに「cont」と入力します。
図 36: cont コマンドの使用
演習 3: GDB デバッガーを使用したインポート済みの C/C++ コードのデバッグ
Model Composer japan.xilinx.com 34
8. Simulink モデルに移動し、[Run] ボタンをクリックしてシミュレーションを実行します。
図 37: [Run] ボタン
9. モデルの初期化には少し時間がかかります。シミュレーションが開始すると、Windows コマンドプロンプトでシミュレーションが 53 行 目に設定されているブレークポイントまで実行されるのを確認できます。
図 38: 53 行目のブレークポイント
list コマンドを入力し、53 行目あたりのコードを表示します。
(gdb) list
10. step コマンドを入力し、シミュレーションを 1 行進めます。
(gdb) step
重要: 次の GDB コマンドは、デバッグに便利です。
• (gdb) list
• (gdb) next (step over)
• (gdb) step (step in)
• (gdb) print<variable>
• (gdb) watch <variable>
11. print r コマンドを入力し、そのシミュレーション ステップの変数値を表示します。次のような結果が表示されます。
図 39: print r コマンドの使用
12. さまざまな gdb コマンドを使用してデバッグしてみます。デバッグが終了したら、「quit」と入力して GDB を終了し、Simulink モデル が引き続き実行されるのを確認します。
演習 3: GDB デバッガーを使用したインポート済みの C/C++ コードのデバッグ
Model Composer を使用したモデルベースのデザイン japan.xilinx.com 35
まとめ
この演習では、次のことを学びました。
• xmcImportFunctionSettings を使用してサードパーティ デバッガーを指定し、デバッグモードを制御する方法。
• Simulink からのスティミュラス ベクターを利用して、GDB デバッガーを使用してカスタム ブロックに関連付けられたソース コー
ドをデバッグする方法。
Model Composer japan.xilinx.com 36
演習 4: Visual Studio を使用したインポート済み C/C++ コード のデバッグ
概要
Model Composer には、Simulink® でデザイン全体をシミュレーションしながら、xmcImportFunction コマンドを使用してブロックとし
てインポートした C/C++ コードをデバッグする機能があります。
Model Composer でのデバッグフローは、次のとおりです。
1. xmcImportFunctionSettings コマンドを使用してデバッグ ツールを指定します。
2. デバッグ ツールを起動します。
3. インポートした関数にブレークポイントを追加します。
4. MATLAB®プロセスに接続します。
5. Simulink シミュレーションを開始します。
6. シミュレーションしながら、インポートした関数をデバッグします。
この演習には次の 2 つの手順があります。
• 手順 1: Model Composer の色検出サンプルデザインを使用して、xmcImportFunction 機能を使用して作成されたカスタ
ム ライブラリ ブロックを特定します。
• 手順 2: Visual Studio を使用した C/C++ コードのデバッグ方法を説明します。
注記: この演習を完了させるには、Microsoft Visual Studio が Windows コンピューターにインストールされている必要があります。
カスタム ブロックの作成方法は、『Model Composer ユーザー ガイド』 (UG1262) の第 3 章「C/C++ コードのカスタム ブロックとしてのイン ポート」を参照してください。
演習 4: Visual Studio を使用したインポート済み C/C++ コードのデバッグ
Model Composer を使用したモデルベースのデザイン japan.xilinx.com 37
手順 1: インポートした関数をデバッグするサンプル デザインの 設定
1. MATLAB コマンド プロンプトに次のコマンドを入力します。
>> xmcOpenExample
2. Enter キーを押して [Model Composer examples] ダイアログ ボックスを開きます。
図 40: [Model Composer examples] ダイアログボックス
演習 4: Visual Studio を使用したインポート済み C/C++ コードのデバッグ
Model Composer japan.xilinx.com 38
3. 上記のリストから [color_detection] を選択し [Open example] をクリックします。次の図に示すようにサンプルデザインが開きます。
図 41: サンプルデザイン
4. Color_detection ブロックをダブルクリックし、RGB2HSV_XMC block ブロックを確認します。
図 42: 色検出ブロック
演習 4: Visual Studio を使用したインポート済み C/C++ コードのデバッグ
Model Composer を使用したモデルベースのデザイン japan.xilinx.com 39
このブロックは xmcImportFunction 機能を使用して生成されています。RGB2HSV_XMC ブロックをダブルクリックすると、関数宣 言を確認できます。
図 43: 関数宣言
5. MATLAB のウィンドウで RGB2HSV_wrap.h をダブルクリックし、RGB2HSV_XMC の関数宣言を表示します。
図 44: [Current Folder] ダイアログボックス
これで C/C++ コードをデバッグする準備が整いました。次の手順では、Visual Studio を使用したコードのデバッグ方法を説明します。
演習 2: Visual Studio を使用した C/C++ コードのデバッグ
1. xmcImportFunctionSettings コマンドを使用してデバッグ ツールを指定します。MATLAB コマンド プロンプトで次のコマン ドを入力します。
>> xmcImportFunctionSettings('build','debug','compiler','Visual Studio');
Enter キーを押します。
このコマンドにより、ご使用のコンピューターにインストールされている Visual Studio がデバッグ用に起動します。
2. MATLAB コマンド プロンプトに表示される Visual Studio のバージョンおよびディレクトリを確認します。
図 45: Visual Studio のディレクトリ
3. MATLAB コマンドプロンプトで次のコマンドを入力し、このコマンドのヘルプを表示し、別のバージョンの Visual Studio を設定する
方法を確認します。
>>help xmcImportFunctionSettings
演習 4: Visual Studio を使用したインポート済み C/C++ コードのデバッグ
Model Composer japan.xilinx.com 40
4. インストールディレクトリから Visual Studio を起動し、C/C++ コードのデバッグを開始します。
図 46: Visual Studio の起動
5. Visual Studio の [Start Page] で、デバッグする必要がある C/C++ ファイルを開きます。
[File] → [Open] → [File] をクリックし、色検出サンプルデザインファイルのあるディレクトリに移動します。RGB2HSV_wrap.h を選
択し、[Open] をクリックします。
図 47: ファイルを開く
演習 4: Visual Studio を使用したインポート済み C/C++ コードのデバッグ
Model Composer を使用したモデルベースのデザイン japan.xilinx.com 41
図 48: サンプルデザインファイル
6. 次の図に示すように、Vivsual Studio で RGB2HSV_wrap.h が開きます。
図 49: Visual Studio で開いた RGB2HSV_wrap.h
演習 4: Visual Studio を使用したインポート済み C/C++ コードのデバッグ
Model Composer japan.xilinx.com 42
7. RGB2HSV_wrap.h でブレークポイントを設定します。
ブレークポイントを設定するには、行番号の横にあるグレーの部分をクリックします。次の図に示すように、赤丸が表示されます。この 赤丸は、クリックした行にブレークポイントが設定されたことを示します。
図 50: ブレークポイントの設定
8. ツールバーの [Attach] ボタンをクリックし、MATLAB プロセスを Visual Studio に接続します。
図 51: [Attach] ボタン
演習 4: Visual Studio を使用したインポート済み C/C++ コードのデバッグ
Model Composer を使用したモデルベースのデザイン japan.xilinx.com 43
9. [Attach to Process] ダイアログボックスが開くので、そこで MATLAB.exe というプロセスを検索します。
図 52: [Attach to Process] ダイアログボックス
Visual Studio を MATLAB プロセスに接続するときは、[Attach to] フィールドに [Native Code] を選択し、ドロップダウン リストから該 当するプロセスを選択します。
[Attach] ボタンをクリックすると、MATLAB プロセスが Visual Studio に接続されます。
10. Simulink モデルに戻り、color_detection デザインのシミュレーションを開始します。
図 53: MATLAB 実行ボタン
演習 4: Visual Studio を使用したインポート済み C/C++ コードのデバッグ
Model Composer japan.xilinx.com 44
11. シミュレーション プロセスの初期化には少し時間がかかります。これが終了したら、Visual Studio の GUI に戻ってデバッグを開始し ます。
Visual Studio から例外が送信された場合は、[Exception settings] で [Break when this exception type is thrown] チェック ボックスを オフにし、[Continue] をクリックします。
図 54: 例外の設定 12. シミュレーションが Visual Studio のブレークポイントに達したことが示されます。
図 55: Visual Studio でのブレークポイント 13. デバッグには、ツールバーの [Step Over] ボタンを使用できます。
図 56: [Step Over] ボタン
重要: コードの次の行を実行するには、[Step Into] ボタンをクリックします。その行で演算が呼び出されると、そ
の演算のインプリメンテーションにステップし、そのインプリメンテーションの最初のアクションで停止します。
[Step Over] ボタンをクリックすると、その行のインプリメンテーションの詳細にはステップせず、呼び出しの後の 次の行にステップします。
演習 4: Visual Studio を使用したインポート済み C/C++ コードのデバッグ
Model Composer を使用したモデルベースのデザイン japan.xilinx.com 45
14. デバッグを進めながら各ステップの変数の値を確認します。
図 57: 変数の値
15. ブレークポイントを別の行に変更する場合は、まず最初に設定したブレークポイントを削除し、たとえば 22 行目に新しいブレークポ イントを設定してから、ツールバーの [Continue] ボタンをクリックします。
シミュレーションが 22 行目のブレークポイントに達したことが示されます。
16. すべてのブレークポイントを削除し、[Continue] ボタンをクリックします。モデルが実行されているのがわかります。
注記: デザインはデバッグ モードで実行されるので、シミュレーションはゆっくりと進みます。
注記: デザインのシミュレーション中は、ブレークポイントはいつでも設定可能です。
17. デバッグが終了したら、ツールバーの [Stop Debugging] ボタンをクリックします。
図 58: [Stop Debugging] ボタン
18. MATLAB でデバッグモードを終了するには、MATLAB コマンドプロンプトに次のコマンドを入力し、Enter キーを押します。
>> xmcImportFunctionSettings('build','release');
これで、インポートした C/C++ コードをリリースモードで実行できます。
演習 4: Visual Studio を使用したインポート済み C/C++ コードのデバッグ
Model Composer japan.xilinx.com 46
まとめ
この演習では、次のことを学びました。
• xmcImportFunctionSettings を使用してサードパーティ デバッガーを指定し、デバッグモードを制御する方法。
• Simulink からのスティミュラスベクターを利用し、Microsoft® Visual Studio を使用してカスタムブロックに関連付けられたソース
コードをデバッグする方法。
Model Composer を使用したモデルベースのデザイン japan.xilinx.com 47
演習 5: 自動コード生成
概要
この演習では、Model Composer モデルから出力を生成し、Vivado HLS (RTL 合成)、System Generator、Vivado Design Suite (ザイリンク ス デバイスへのインプリメンテーション) などのダウンストリーム ツールに送るフローを説明します。
手順
この演習には次の 5 つの手順があります。
手順 1: 自動コード生成の要件を確認します。
手順 2: デザインのインターフェイスのマップ方法を示します。
手順 3: Model Composer デザインから IP を生成するフローを説明します。
手順 4: Model Composer デザインから高位合成可能な C++ コードを生成するフローを説明します。
手順 5: Model Composer デザインをブロックとして System Generator for DSP に戻すフローを説明します。
手順 1: コード生成の要件の確認
この手順では、Simulink のアルゴリズムを自動コード生成機能を使用してインプリメンテーションに送るための 3 つの要件を確認します。
1. MATLAB の [Current Folder] で ModelComposer_Tutorial\Lab5 に移動します。
2. CodeGen_start.slx をダブルクリックしてデザインを開きます。
コード生成の準備のため、Model Composer デザインをサブシステムに含めます。
3. [Edge Detection] エリアを右クリックし、[Create Subsystem from Area] を選択します。
注記: コードが正しく生成されるようにするには、サブシステム内のすべてのブロック (後述の Simulink ブロックを除く) がすべて
Xilinx Model Composer ライブラリからのブロックである必要があります。サブシステムにサポートされていないブロックが含まれ ていると、コード生成中にエラーが発生します。Simulink の診断レポートには、エラー メッセージおよびサブシステム内のサ ポートされていないブロックへのリンクが含まれます。
注記: 基本の Model Composer ブロックだけでなく、From、Goto、Bus Creator、Bus Selector、If などのネイティブ Simulink ブ
ロックがサポートされています。サポートされている Simulink ブロックは Xilinx Model Composer ライブラリ内にも表示されま す。
次に、Model Composer Hub ブロックをデザインの最上位に追加します。
4. Simulink Library Browser で Xilinx Model Composer Tools サブライブラリに移動します。
5. Model Composer Hub ブロックを検索し、デザインに追加します。
演習 5:自動コード生成
Model Composer japan.xilinx.com 48
図 59: Model Composer Hub ブロックを追加したエッジ検出 次に、Model Composer Hub ブロックを使用して、デザインのコード生成オプションを選択します。
6. ブロックをダブルクリックしてブロックインターフェイスを開き、次の図に示すように設定します。
図 60: [Block Parameters] ダイアログボックス
演習 5:自動コード生成
Model Composer を使用したモデルベースのデザイン japan.xilinx.com 49
7. [Compilation] タブで、次のように設定します。
• [Target directory]: ./codegen_edge_detection を指定します。
• [Subsystem name]: 「Edge Detection」と入力します。最上位に複数のサブシステムを含め、Model Composer Hub ブロックを
使用して、必要なサブシステムを選択して個別にコンパイルできます。
• [Export Type]: デザインを何に変換するのかを設定します。ここでは [IP Catalog] (デフォルト) を選択します。ドロップダウ
ン リストからほかのコンパイル ターゲットを選択できます。
o Vivado HLS で合成可能な C++ コード
o System Generator for DSP
8. [Hardware] タブで [FPGA clock frequency in MHz] を指定します。デフォルト値は 200 MHz です。
演習 5:自動コード生成
Model Composer japan.xilinx.com 50
手順 2: インターフェイスのマップ
1. [Current Folder] で CodeGen_Interface.slx をダブルクリックし、この演習用のデザインを開きます。
これはエッジ検出アルゴリズムを少し変更したバージョンで、入力および出力で YCbCr ビデオフォーマットを使用します。
2. モデルをシミュレーションし、Video Viewer ブロックで結果を確認します。
3. Simulink Library Browser で [Xilinx Model Composer] → [Tools] サブライブラリに移動し、次の図に示すように、Edge Detection サ ブシステムに Interface Spec ブロックを追加します。
図 61: Interface Spec ブロック
4. Interface Spec ブロックをダブルクリックし、ブロックインターフェイスを開きます。
Interface Spec ブロックをサブシステムにインスタンシエートすると、そのサブシステムのポートに合成する必要のある RTL インター フェイスを指定できます。これはコード生成のみに影響し、デザインの Simulink シミュレーションには何の影響もありません。
演習 5:自動コード生成
Model Composer を使用したモデルベースのデザイン japan.xilinx.com 51
Interface Spec ブロックで収集された情報には、3 つの部分 (ブロックの 3 つのタブ) があります。
図 62: Interface Spec ブロックのパラメーター
• [Function Protocol]: データ処理をいつ開始するかを IP に伝えるブロックレベルのインターフェイスプロトコル。この情報は、IP
が新しいデータを受信するのか、演算を終了したのか、アイドル状態なのかを知らせる目的でも使用されます。
• [Input Ports]: サブシステム内の入力ポートを自動検出し、サブシステムの各入力ポートのポートレベルのインターフェイス プロト
コルを指定します。
• [Output Ports]: [Input Ports] タブと同様に、サブシステム内の出力ポートを検出し、サブシステムの各出力ポートのポートレベル
のインターフェイスプロトコルを指定します。
5. このデザインでは、[Function Protocol] をデフォルトの [AXI4-Lite Slave] のままにし、[Input Ports] および [Output Ports] タブを次の 図に示すように設定します。
図 63: 入力ポートの設定
演習 5:自動コード生成
Model Composer japan.xilinx.com 52
図 64: 出力ポートの設定
• [Bundle] パラメーターは、AXI4-Lite または AXI4-Stream (ビデオ) インターフェイスと共に使用され、複数のポートを同じイン
ターフェイスにまとめることを示します。複数の入力/出力信号に同じバンドル名を指定することにより 1 つのインターフェイス ポートにまとめ、対応する名前を RTL ポートに割り当てることができます。
ここでは、[Input Ports] タブでの設定により YCbCr の入力が AXI4-Stream (ビデオ) インターフェイスにマップされ、生成された
IP の image_in ポートとなります。YCbCr の出力は image_out ポートにまとめられます。
• [Video Format] ドロップダウン リストからは、次のフォーマットを選択できます。
o YUV 4:2:2 o YUV 4:4:4 o RGB o Mono/Sensor
• [Video Component] ドロップダウンリストからは、R、G、B、Y、U、V の中から正しいコンポーネントを選択します。