Model Composer ユーザー ガイド...Model Composer ユーザー ガイド UG1262 (v2019.1) 2019...

217
Model Composer ユーザー ガイド UG1262 (v2019.1) 2019 5 22 この資料は表記のバージョンの英語版を翻訳したもので、内容に相違が生じる場合には原文を優先します。資 料によっては英語版の更新に対応していないものがあります。日本語版は参考用としてご使用の上、最新情報 につきましては、必ず最新英語版をご参照ください。

Transcript of Model Composer ユーザー ガイド...Model Composer ユーザー ガイド UG1262 (v2019.1) 2019...

  • Model Composer ユーザー ガイドUG1262 (v2019.1) 2019 年 5 月 22 日

    この資料は表記のバージョンの英語版を翻訳したもので、内容に相違が生じる場合には原文を優先します。資料によっては英語版の更新に対応していないものがあります。日本語版は参考用としてご使用の上、最新情報につきましては、必ず最新英語版をご参照ください。

    https://www.xilinx.comhttps://japan.xilinx.com/bin/public/docSeeAllVersions?productType=DesignTools&documentId=UG1262

  • 改訂履歴次の表に、この文書の改訂履歴を示します。

    セクション 改訂内容2019 年 5 月 22 日 バージョン 2019.1

    第 1 章: 概要• Model Composer にタイミングなしのビット精度の高いモデルが含まれることを記述。

    • 新機能と制限 を追加。Model Composer への C/C++ のインポート

    • ソース ブロックと [Sample Time] パラメーターの説明を追加。

    • 複素数型の使用 を追加。xmcImportFunction のプラグマ

    • SUPPORTS_STREAMING および BUFFER_DPETH プラグマを編集。

    • XMC THROUGHPUT_FACTOR を追加。デバッグ ツールの起動 Visual Studio の例外に関する注記を追加。第 4 章: 出力の生成 Model Composer のログ ファイル を追加。付録 B: Model Composer ブロック ライブラリ RTL IP ベースのブロック を追加。Model Composer ブロック Model Composer ブロックに次の新規ブロックを追加。

    • FIR

    • FFT

    • IFFT

    改訂履歴

    UG1262 (v2019.1) 2019 年 5 月 22 日 japan.xilinx.comModel Composer ユーザー ガイド 2

    https://japan.xilinx.comhttps://japan.xilinx.com/about/feedback/document-feedback.html?docType=User_Guides&docId=UG1262&Title=Model%20Composer%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B&releaseVersion=2019.1&docPage=2

  • 目次改訂履歴..........................................................................................................................................................................2第 1 章: 概要................................................................................................................................................................. 5

    Model Composer とは...................................................................................................................................................5新機能と制限...................................................................................................................................................................7

    第 2 章: Model Composer デザインの作成......................................................................................... 8Model Composer の起動............................................................................................................................................... 9新規モデルの作成........................................................................................................................................................... 9モデルへのブロックの追加.......................................................................................................................................... 10ブロックの接続............................................................................................................................................................. 12データ型の使用............................................................................................................................................................. 13最上位サブシステム モジュールの作成.......................................................................................................................22

    第 3 章: C/C++ コードのカスタム ブロックとしてのインポート.......................................23概要................................................................................................................................................................................23xmcImportFunction コマンドの使用......................................................................................................................... 23Model Composer への C/C++ のインポート..............................................................................................................26関数テンプレートを使用したブロックの定義.............................................................................................................30xmcImportFunction のプラグマ.................................................................................................................................42ライブラリ ブラウザーへのユーザー ライブラリの追加............................................................................................47インポートしたブロックのデバッグ........................................................................................................................... 48

    第 4 章: 出力の生成...............................................................................................................................................54概要................................................................................................................................................................................54Model Composer Hub ブロックの追加......................................................................................................................54インプリメンテーションのスループットの制御.........................................................................................................56インターフェイス仕様の定義.......................................................................................................................................62Vivado 用 IP パッケージの生成................................................................................................................................... 66System Generator IP の生成.......................................................................................................................................70C++ コードの生成......................................................................................................................................................... 74Model Composer のログ ファイル............................................................................................................................. 76

    第 5 章: デザインのシミュレーションおよび検証.........................................................................78概要................................................................................................................................................................................78Simulink のシミュレーション......................................................................................................................................78Model Composer のキャッシュの管理.......................................................................................................................79C++ コードの検証......................................................................................................................................................... 80C/RTL コードの検証..................................................................................................................................................... 81

    UG1262 (v2019.1) 2019 年 5 月 22 日 japan.xilinx.comModel Composer ユーザー ガイド 3

    https://japan.xilinx.comhttps://japan.xilinx.com/about/feedback/document-feedback.html?docType=User_Guides&docId=UG1262&Title=Model%20Composer%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B&releaseVersion=2019.1&docPage=3

  • 付録 A: ターゲット デバイスまたはボードの選択........................................................................ 82[Device Chooser] ダイアログ ボックス......................................................................................................................82

    付録 B: Model Composer ブロック ライブラリ............................................................................ 83サポートされる Simulink ブロック............................................................................................................................. 83Model Composer ブロックの分類.............................................................................................................................. 84RTL IP ベースのブロック..............................................................................................................................................87Model Composer ブロック......................................................................................................................................... 89

    付録 C: その他のリソースおよび法的通知........................................................................................215ザイリンクス リソース...............................................................................................................................................215Documentation Navigator およびデザイン ハブ.................................................................................................... 215参考資料...................................................................................................................................................................... 216お読みください: 重要な法的通知...............................................................................................................................216

    UG1262 (v2019.1) 2019 年 5 月 22 日 japan.xilinx.comModel Composer ユーザー ガイド 4

    https://japan.xilinx.comhttps://japan.xilinx.com/about/feedback/document-feedback.html?docType=User_Guides&docId=UG1262&Title=Model%20Composer%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B&releaseVersion=2019.1&docPage=4

  • 第 1 章

    概要Model Composer とは

    Model Composer は、MathWorks Simulink® 環境でデザインを短時間で試行できるモデル ベースのデザイン ツールで、自動コード生成により、ザイリンクスのプログラマブル デバイスのプロダクションまでの期間を短縮できます。MATLAB® のアドオン製品である Simulink では、システム レベル デザインのモデリング、シミュレーション、解析、および検証をインタラクティブなグラフィカル環境で実行できます。Model Composer は、MathWorks Simulink 環境に合わせたザイリンクス ツールボックスとして構築されており、アルゴリズム開発者が Simulink のグラフィカル環境のすべての機能を使用して、アルゴリズムの設計および検証できるようになっています。アルゴリズムは、Model Composer ライブラリからのブロックやユーザーがインポートしたカスタム ブロックを使用して Simulink で記述できます。Model Composer では、自動最適化機能と Vivado® HLS の高位合成テクノロジを使用して、ユーザーのアルゴリズム仕様をプロダクション品質の IP インプリメンテーションに変換します。VivadoDesign Suite の IP インテグレーター機能を使用すると、その IP をプラットフォーム (Zynq® デバイス、DDR3DRAM、Arm® プロセッサで実行されるソフトウェア スタックなど) に統合できます。Model Composer には、Simulink 環境内で使用可能な最適化済みのブロックを 80 以上含むライブラリが含まれます。これには、数学、線形代数、論理、ビット演算などのアルゴリズムを記述した基本的な論理ブロックが含まれます。また、画像処理およびコンピューター ビジョン用の特定用途向けブロックも多く含まれます。ザイリンクス ModelComposer ブロック ライブラリには、次のカテゴリが含まれています。表 1: ザイリンクス Model Composer ブロック ライブラリ

    ライブラリ 説明Computer Vision デジタル化された画像の解析、操作、および最適化をサポートするブロック。Logic and Bit Operations 論理演算とビット単位演算をサポートするブロック。Lookup Tables 入力インデックスを使用して 1 次元のルックアップ演算を実行するブロックセット。Math Functions 数学関数をインプリメントするブロック。Ports and Subsystems サブシステムと入力/出力ポートを作成できるようにするブロック。Relational Operations 2 つの入力間の関係 (数値等価および不等価) を定義するブロックセット。Signal Attributes 入力型と出力型の互換性をサポートするためのブロック (型変換など)。Signal Operations 新しい信号を生成するために、信号の時間変数の単純な変更をサポートするブロック (Unit Delay など)。Signal Routing 信号のソースおよびデスティネーションを監視するための設定をサポートするブロック (Bus Selector など)。Sinks ほかのブロックからの物理的な信号出力を受信するブロック。

    UG1262 (v2019.1) 2019 年 5 月 22 日 japan.xilinx.comModel Composer ユーザー ガイド 5

    https://jp.mathworks.com/products/simulink.htmlhttps://japan.xilinx.com/products/design-tools/vivado/integration/esl-design.htmlhttps://japan.xilinx.comhttps://japan.xilinx.com/about/feedback/document-feedback.html?docType=User_Guides&docId=UG1262&Title=Model%20Composer%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B&releaseVersion=2019.1&docPage=5

  • 表 1: ザイリンクス Model Composer ブロック ライブラリ (続き)ライブラリ 説明

    Source 信号データを生成またはインポートするブロック。Tools モデルのインプリメンテーション/インターフェイスを制御するブロック。

    ザイリンクス Model Composer ブロック ライブラリの特定のブロックに関する詳細は、付録 B: Model Composer ブロック ライブラリ を参照してください。Model Composer ブロック ライブラリは、標準 Simulink ブロック ライブラリと互換性があり、Simulink でシミュレーション可能なモデルを作成する際に一緒に使用できます。ただし、Model Composer によるコード生成がサポートされるのは、一部の Simulink ブロックのみです。Model Composer の出力生成と互換性のある Simulink ブロックは、ザイリンクス Model Composer ブロック ライブラリに含まれます。Model Composer では、既存の C/C++ コードからモデルで使用可能なカスタム ブロックを作成できます。詳細は、第 3 章: C/C++ コードのカスタム ブロックとしてのインポート を参照してください。Model Composer を使用すると、ハードウェアの最終インプリメンテーション (タイミングなし) でビット精度のデザインになりますます。デザイン モデルを Vivado HLS で合成できるように C++ コードにコンパイルしたり、SystemGenerator ブロックを作成したり、Vivado Design Suite で使用できる IP パッケージを作成したりできます。次の図に、通常のツール フローを示します。

    図 1: Model Composer ツール フロー

    Model Composer について学ぶには、『Model Composer チュートリアル: Model Composer を使用したモデル ベースデザイン』 (UG1259) の演習およびデータを使用することをお勧めします。この資料の残りの部分では、次について説明します。• ブロック ライブラリを使用した Model Composer モデルの作成

    第 1 章: 概要

    UG1262 (v2019.1) 2019 年 5 月 22 日 japan.xilinx.comModel Composer ユーザー ガイド 6

    https://japan.xilinx.com/cgi-bin/docs/rdoc?v=2019.1;d=ug1259-model-composer-tutorial.pdfhttps://japan.xilinx.comhttps://japan.xilinx.com/about/feedback/document-feedback.html?docType=User_Guides&docId=UG1262&Title=Model%20Composer%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B&releaseVersion=2019.1&docPage=6

  • • 既存の C コードを Model Composer ブロック ライブラリへインポートしてモデルで使用• モデルをコンパイルしてダウンストリーム デザイン ツールで使用• Model Composer モデル、C++、および RTL 出力の検証

    新機能と制限特定リリースの Model Composer の新機能については、https://japan.xilinx.com/products/design-tools/vivado/integration/model-composer.html#new を参照してください。また、Model Composer は MathWorks Simulink 環境に組み込まれたツールボックスですが、Model Composer でサポートされない特定の Simulink 機能もあります。サポートされない機能には、次のようなものがあります。• Simulink Performance Advisor。• モデル リファレンス。• さまざまなサブシステム。• Model Composer ブロックでは、Simulink の固定小数点型はサポートされず、ザイリンクスの固定小数点型のみをサポート。

    • 固定小数点デザイナーと Model Composer との統合なし。• [Accelerator] モードと [Rapid Accelerator] モード。

    第 1 章: 概要

    UG1262 (v2019.1) 2019 年 5 月 22 日 japan.xilinx.comModel Composer ユーザー ガイド 7

    https://japan.xilinx.com/products/design-tools/vivado/integration/model-composer.html#newhttps://japan.xilinx.com/products/design-tools/vivado/integration/model-composer.html#newhttps://japan.xilinx.comhttps://japan.xilinx.com/about/feedback/document-feedback.html?docType=User_Guides&docId=UG1262&Title=Model%20Composer%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B&releaseVersion=2019.1&docPage=7

  • 第 2 章

    Model Composer デザインの作成次の図に示すように、Model Composer デザインには次が含まれます。1. 入力を決定し、ソース信号を提供する Simulink ブロック。これらのブロックは、デザインのシミュレーションに使用されますが、Model Composer で生成される出力には影響しません。

    2. Model Composer モデルで定義されたアルゴリズムをカプセル化した最上位サブシステム ブロック (最上位サブシステム モジュールの作成 を参照)。このサブシステム モジュールには、次を含めることができます。• アルゴリズムを定義する Model Composer ブロック ライブラリからのブロック (付録 B: Model Composer ブロック ライブラリ を参照)。

    • カスタムのインポート関数 (第 3 章: C/C++ コードのカスタム ブロックとしてのインポート を参照)。• ハードウェア インターフェイスを定義する Interface Specification ブロック (インターフェイス仕様の定義 を参照)。

    3. デザインのスループットを制御し、さまざまなオプションを使用して出力を生成する Model Composer Hub ブロック (Model Composer Hub ブロックの追加 を参照)。

    4. 出力信号、または Simulink で出力を処理するシンク。これらのブロックは、第 5 章: デザインのシミュレーションおよび検証 で説明されるように、デザインのシミュレーションに使用されますが、Model Composer で生成される出力には影響しません。

    図 2: Model Composer デザインの要素

    第 2 章: Model Composer デザインの作成

    UG1262 (v2019.1) 2019 年 5 月 22 日 japan.xilinx.comModel Composer ユーザー ガイド 8

    https://japan.xilinx.comhttps://japan.xilinx.com/about/feedback/document-feedback.html?docType=User_Guides&docId=UG1262&Title=Model%20Composer%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B&releaseVersion=2019.1&docPage=8

  • Model Composer の起動Model Composer はデスクトップ アイコンまたはコマンド ラインから起動できます。Model Composer アイコンをダブルクリックするか、Windows オペレーティング システムの [スタート] メニューから起動するか、コマンド プロンプトから次のコマンドを使用します。model_composer

    ヒント: Model Composer でコマンド ラインを使用するには、コマンド シェルを次のように設定します。ディレクトリを /Model_Composer/ に変更し、settings64-Model_Composer.bat (または .sh) ファイルを実行します。 はインストール フォルダー、 はツールのバージョンです。MATLAB が開き、Model Composer ライブラリと機能がこの環境に読み込まれます。ここで、メイン ツールバー メニューから Simulink アイコンをクリックするか、MATLAB コマンド プロンプトから Simulink と入力します。>> simulink

    Simulink のスタート ページが表示されます。Model Composer の機能が Simulink プラットフォームに読み込まれます。Model Composer では、最新リリースの MATLAB がサポートされます。このリリースの Model Composer でサポートされている MATLAB リリースについては、『Vivado Design Suite ユーザー ガイド: リリース ノート、インストールおよびライセンス』 (UG973) の「互換性のあるサードパーティ ツール」を参照してください。システムに複数バージョンの MATLAB をインストールしている場合は、PATH で見つかった最初のバージョンが Model Composer で使用されます。特定のバージョンを使用するには、PATH をその MATLAB バージョンに変更しておきます。または、次のように -matlab オプションを使用して、特定のバージョンを直接開くこともできます。model_composer -matlab C:\Progra~1\MATLAB\R2018b

    ヒント: MATLAB バージョンへのパスを指定する際は、実行ファイルへのフル パス (bin/MATLAB) を指定しないでください。「C:\Progra~1\」文字列は「C:\Program Files\」へのショートカットで、コマンド パスからスペースを削除します。Model Composer でコマンド ラインを使用するには、コマンド シェルが先ほど説明したように設定されている必要があります。

    新規モデルの作成新しいモデルを作成するには、ライブラリ ブラウザーから Simulink Editor にブロックを追加します。この後、これらのブロックを信号ラインに接続し、ブロック間の関係を構築します。Simulink Editor では、スマート ガイドおよびスマート信号配線を使用して接続が管理され、構築中のモデルの表示が制御されます。モデルに階層を追加するには、ブロックおよび信号のグループを 1 つのブロック内のサブシステムとしてカプセル化します。Model Composer には、定義済みのブロックセットが含まれており、これらを組み合わせてアプリケーションの詳細なモデルを作成できます。Simulink のスタート ページで [Blank Model] を選択して新しいモデルを開きます。

    第 2 章: Model Composer デザインの作成

    UG1262 (v2019.1) 2019 年 5 月 22 日 japan.xilinx.comModel Composer ユーザー ガイド 9

    https://japan.xilinx.com/cgi-bin/docs/rdoc?v=2019.1;t=vivado+install+guidehttps://japan.xilinx.comhttps://japan.xilinx.com/about/feedback/document-feedback.html?docType=User_Guides&docId=UG1262&Title=Model%20Composer%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B&releaseVersion=2019.1&docPage=9

  • ヒント: Model Composer テンプレートが定義されている場合は、既存のテンプレートを開くこともできます。モデルテンプレートは、設定およびブロック コンフィギュレーションを再利用するための開始点として使用できます。テンプレートの詳細は、Simulink 資料の「モデルからのテンプレートの作成」を参照してください。Simulink のスタート ページの左側には、最近開いたモデルがリストされ、これらの 1 つを開くこともできます。空のモデルを開いたら、ブロックを追加して、ブロック パラメーターを指定し、信号ラインを使用してブロック間を接続して、Model Composer モデルを作成します。重要: Model Composer では、モデルに対して 1 サンプル時間しかサポートされず、複数のサンプル時間はサポートされません。すべての Model Composer ブロックに、モデルのソース ブロックからのサンプル時間が継承されます。詳細は、Simulink 資料の「サンプル時間とは」を参照してください。モデルを保存するには、メイン メニューから [File] → [Save] をクリックします。[Save As] ダイアログ ボックスが開きます。正しいフォルダーまたはディレクトリを指定し、[File Name] フィールドにモデルの名前を入力します。[Save]をクリックします。モデルが .slx という拡張子のファイルに保存されます。Model Composer のサンプル モデルには、[Help] メニューから表示可能なザイリンクス Model Composer 資料の「Model Composer Examples」セクションからアクセスできるほか、MATLAB コマンド プロンプトからxmcOpenExample コマンドを入力してもアクセスできます。>> xmcOpenExample

    このコマンドを実行すると、使用可能なサンプル モデルのリストが表示されます。xmcOpenExample コマンドで、サンプル モデルを指定したターゲット ディレクトリ (ターゲット ディレクトリが指定されていない場合は temp ディレクトリ) にコピーし、Model Composer で開きます。次は、サンプルとターゲット ディレクトリを指定する方法を示しています。xmcOpenExample('importing_c_code','C:\Data\importing_code')

    ヒント: 指定したターゲット ディレクトリが存在しない場合は、Model Composer により自動的に作成されます。

    モデルへのブロックの追加ブロックを現在のモデルに追加するには、ライブラリ ブラウザーを開いて、ブロックを Simulink エディターのデザイ

    ン キャンバスにドラッグ アンド ドロップします。ライブラリ ブラウザーは、 ボタンをクリックするか、メイン メニューから [View] → [Library Browser] をクリックすると開くことができます。ライブラリ ブラウザーには、標準的な Sumulink ライブラリおよびザイリンクスの Model Composer ライブラリが表示されます。ヒント: ライブラリ ブラウザーは、コマンド プロンプトで slLibraryBrowser コマンドを入力しても開くことができます。Xilinx Model Composer ブロックは、機能別に分類されています。次の図は、ライブラリ ブラウザーの [Xilinx ModelComposer] の [Computer Vision] ブロック ライブラリを示しています。

    第 2 章: Model Composer デザインの作成

    UG1262 (v2019.1) 2019 年 5 月 22 日 japan.xilinx.comModel Composer ユーザー ガイド 10

    https://jp.mathworks.com/help/simulink/ug/create-a-template-from-a-model.htmlhttps://jp.mathworks.com/help/simulink/ug/what-is-sample-time.htmlhttps://japan.xilinx.comhttps://japan.xilinx.com/about/feedback/document-feedback.html?docType=User_Guides&docId=UG1262&Title=Model%20Composer%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B&releaseVersion=2019.1&docPage=10

  • 図 3: ライブラリ ブラウザー

    ライブラリ ブラウザー内でブロックをダブルクリックすると、[Block Parameter] ダイアログ ボックスが開き、選択したブロックで定義されるさまざまなパラメーターがデフォルト値で表示されます。ブロックはライブラリに含まれているので、パラメーターは表示しかできません。パラメーターを編集するには、ブロックをデザイン キャンバスに追加する必要があります。ブロックの詳細は、ライブラリ ブラウザーでブロックを右クリックして、[Help] をクリックすると確認できます。または、ライブラリ ブラウザーでブロックをダブルクリックし、ダイアログ ボックスで [Help] をクリックしても確認できます。ヘルプ ブラウザーが開き、ブロックの情報が表示されます。ブロックをキャンバスにドラッグ アンド ドロップすると、定義済みのデフォルトのパラメーター値でブロックが追加されます。ヒント: Simulink エディターのデザイン キャンバスをクリックしてブロック名を入力しても、ブロックを現在のモデルにすばやく追加できます。ライブラリから入力した名前に一致するものが表示されるので、該当するブロックを選択して追加します。Simulink モデルには、信号とパラメーターの両方が含まれます。信号はブロックに接続されるラインで表記されます。パラメーターは、ブロックの主な特徴および動作を定義する係数です。

    第 2 章: Model Composer デザインの作成

    UG1262 (v2019.1) 2019 年 5 月 22 日 japan.xilinx.comModel Composer ユーザー ガイド 11

    https://japan.xilinx.comhttps://japan.xilinx.com/about/feedback/document-feedback.html?docType=User_Guides&docId=UG1262&Title=Model%20Composer%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B&releaseVersion=2019.1&docPage=11

  • ブロックの接続ブロックの出力ポートは、ほかのブロックの入力ポートに信号ラインで接続できます。信号ラインは、モデルを通過するデータフローを定義します。信号には次のような複数の属性を含めることができます。• データ型: 信号で運ばれるデータ型を定義します。整数、浮動小数点型、固定小数点型などのさまざまなデータ型を使用できます。詳細は、データ型の使用を参照してください。

    • 信号の次元: 値をスカラー、ベクター、または行列として定義します。詳細は、Simulink 資料の「信号の次元」および「行列、ベクトル、およびスカラー」を参照してください。

    • 複雑性: 値を複素数または実数として定義します。詳細は、Simulink 資料の「信号値」を参照してください。次の図は、複素数がモデルを伝搬するところを示しています。

    図 4: 複素数信号値

    信号ラインを追加するには、カーソルを Simulink ブロックの入力または出力ポートの上に置きます。カーソルがプラス (+) マークに変わります。クリックして、ポートからドラッグします。マウス ボタンを押したままにしてドラッグして動かすと、接続ラインが点線で表示されます。点線は、完全に接続されていない信号を示します。カーソルを接続する 2 つ目のポートまで移動したら、マウス ボタンを放します。入力ポートから開始する場合は出力ポートで止めるか別の信号ラインに接続し、出力から開始する場合は入力で止めます。Simulink でポートが信号ラインで接続されます。矢印は、信号フローの方向を示します。マウスを右クリックしてドラッグすると、既存のラインに接続できます。これにより、分岐ラインが作成され、既存の信号ラインの指定した位置に接続されます。分岐ラインは、接続された信号によって、入力または出力に接続できます。ヒント: ブロックは、Ctrl キーを押したまま順に選択しても接続できます。1 つ目のクロックの出力が 2 つ目のブロックの入力に接続されます。Ctrl キーを押したまま別のブロックを接続すると、チェーン接続されます。

    第 2 章: Model Composer デザインの作成

    UG1262 (v2019.1) 2019 年 5 月 22 日 japan.xilinx.comModel Composer ユーザー ガイド 12

    https://jp.mathworks.com/help/simulink/ug/signal-dimensions.htmlhttps://jp.mathworks.com/help/comm/ug/matrices-vectors-and-scalars.htmlhttps://jp.mathworks.com/help/simulink/ug/signal-values.htmlhttps://japan.xilinx.comhttps://japan.xilinx.com/about/feedback/document-feedback.html?docType=User_Guides&docId=UG1262&Title=Model%20Composer%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B&releaseVersion=2019.1&docPage=12

  • Simulink では、シミュレーションの [Run] をクリックすると、モデルがアップデートされます。モデルは、デザインプロセスの任意の段階で [Simulation] → [Update Diagram] メニュー コマンドを使用するか、Ctrl+D キーを押してもアップデートできます。ソース ブロックからのデータ型、信号次元、サンプル時間がモデルに伝搬されるのを確認できます。ヒント: [Display] → [Signals and Ports] メニュー コマンドをクリックすると、[Signal Dimensions] および [Port DataTypes] などのさまざまなデータがモデルで表示されます。Xilinx Model Composer ブロック ライブラリの Source ライブラリの Constant ブロックを除き、Model Composer ブロックにはサンプル時間は指定できません。Model Composer では、モデルの入力に接続されたソース ブロックからサンプル時間が推論されるので、複数のサンプル時間はサポートされません。ダイアグラムをアップデートすると、モデルの開発中に発生する可能性のある問題を発見して解決できます。頻繁にアップデートすることで、デザインへの最近のアップデートに範囲を絞れるので、問題の原因を見つけやすくなります。また、[Update Diagram] はシミュレーションを実行するよりも高速です。

    データ型の使用Model Composer では、次のデータ型がサポートされます。表 2: Model Composer のデータ型

    名前 説明double 倍精度浮動小数点single 単精度浮動小数点half* 半精度浮動小数点int8 符号付き 8 ビット整数uint8 符号なし 8 ビット整数int16 符号付き 16 ビット整数uint16 符号なし 16 ビット整数int32 符号付き 32 ビット整数uint32 符号なし 32 ビット整数fixed* 符号付きおよび符号なしの固定小数点boolean Simulink では 0 以外の実数値が TRUE (1) と表示されます。

    重要: * の付いたデータ型は Model Composer 特有のもので、Simulink ではサポートされません。Simulink では固定小数点データ型がサポートされていますが、Fixed-Point Designer™ をインストールしてライセンスを取得しておく必要があります。また、Xilinx Model Composer でサポートされる固定小数点データ型は、表記は同様ですが、Simulink でサポートされる固定小数点データ型とは互換性がありません。

    第 2 章: Model Composer デザインの作成

    UG1262 (v2019.1) 2019 年 5 月 22 日 japan.xilinx.comModel Composer ユーザー ガイド 13

    https://japan.xilinx.comhttps://japan.xilinx.com/about/feedback/document-feedback.html?docType=User_Guides&docId=UG1262&Title=Model%20Composer%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B&releaseVersion=2019.1&docPage=13

  • 前述の表には、Model Composer ではサポートされても、Simulink ではデフォルトでサポートされないデータ型も含まれています。fixed または half データ型を使用する Model Composer ブロック ライブラリからのブロックをSimulink ネイティブのブロックに接続すると、Simulink でシミュレーションを実行、[Update Diagram] コマンドを使用、または Ctrl+D キーを押したときに、次のようなエラー メッセージが表示されます。RelationalOperator does not accept signals of data type 'x_sfix16'. 'ConstRE_or_IMpartBug/Relational Operator' only accepts numeric and enumerated data types.

    このエラーは、Simulink では Xilinx Model Composer の固定小数点型を倍精度の浮動小数点型に変換できないことを示しています。データ型が一致しない場合は、Data Type Conversion ブロックを使用しモデルの動作を指定し、データ型の変換を指定することをお勧めします。Data Type Conversion (DTC) ブロックは、Xilinx Model Composer ライブラリの SignalAttributes ライブラリに含まれています。

    図 5: Data Type Conversion ブロック

    DTC ブロックでは、出力データ型 ([Output data type]) を指定できますが、入力データ型は入力ポートに接続される信号によって自動的に決まります。DTC ブロックを使用すると、たとえば単精度の浮動小数点を倍精度に変換したり、倍精度を単精度に変換したりできます。重要: 精度の高いデータ型を精度の低いデータ型に変換する場合は、精度の損失により、丸めまたは切り捨てが発生し、データが損失する可能性があるので注意が必要です。

    固定小数点データ型の使用前述のように、Simulink では固定小数点データ型はサポートされていますが、Fixed-Point Designer™ 製品が必要となります。また、ザイリンクス Model Composer でサポートされる fixed データ型は Simulink のものと互換性がありません。

    第 2 章: Model Composer デザインの作成

    UG1262 (v2019.1) 2019 年 5 月 22 日 japan.xilinx.comModel Composer ユーザー ガイド 14

    https://japan.xilinx.comhttps://japan.xilinx.com/about/feedback/document-feedback.html?docType=User_Guides&docId=UG1262&Title=Model%20Composer%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B&releaseVersion=2019.1&docPage=14

  • 図 6: 固定小数点データ型

    ザイリンクス Model Composer の固定小数点型を表示するのに使用されるフォーマットは x_[u/s]fix[wl]_E[n][fl] です。説明:• x_: ザイリンクスの固定データ型を示す接頭辞。• [u/s]: 符号なしか符号ありを表記。• fix: 固定小数点データ型であることを表記。• [wl]: データのワード長を指定。• E: 固定小数点データ型の分数部の接頭辞。分数長が 0 の場合は表示されません。• n: 2 進数小数点がワードの最下位ビットの左にある場合は n を表示、最下位ビットの右にある場合は n の表示なし。

    • [fl]: 固定小数点データ型の分数部の長さを指定して、ワードの最下位ビットに対する 2 進数小数点の位置を示す。たとえば、'x_sfix16_En6' の場合、符号付き 16 ビットの固定小数点で、2 進数小数点の右側に 6 ビットが割り当てられています。また、固定小数点データ型では、データ オーバーフローが発生した場合にどうするか、丸めまたは切り捨てが必要かどうかも指定できます。詳細は、Data Type Conversionを参照してください。Xilinx Model Composer の固定小数点データ型は DTC ブロックを使用して Simulink の固定小数点データ型に変換する必要がありますが、Xilinx Model Composer の固定小数点データ型と Simulink の固定小数点データ型を直接変換することはできないので、次の方法を使用して変換してください。1. ライブラリ ブラウザーの Xilinx Model Composer ライブラリにある DTC ブロックを使用して、ザイリンクス

    Model Composer の固定小数点型を double に変換します。2. ライブラリ ブラウザーの Simulink の Signal Attributes ライブラリにある Simulink Data Type Conversion ブロックを使用して、double データ型を Simulink フォーマットの固定小数点データ型に変換します。

    3. 2 つの固定小数点データ型間の符号の有無、ワード長、分数長を同じにします。

    第 2 章: Model Composer デザインの作成

    UG1262 (v2019.1) 2019 年 5 月 22 日 japan.xilinx.comModel Composer ユーザー ガイド 15

    https://japan.xilinx.comhttps://japan.xilinx.com/about/feedback/document-feedback.html?docType=User_Guides&docId=UG1262&Title=Model%20Composer%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B&releaseVersion=2019.1&docPage=15

  • ヒント: Xilinx Model Composer の固定小数点データ型と Simulink の固定小数点データ型間の変換は、必要な場合以外は実行することはお勧めしません。ほとんどのアプリケーションで、最初の手順の Model Composer の固定小数点データ型を double に変換するだけで十分なはずです。固定小数点データ型の操作には時間がかかりますが、FPGA にインプリメントするアプリケーションの場合は、固定小数点データ型を使用する価値があります。これは通常、浮動小数点で設計した方がデザインの消費電力が大きくなるからです。FPGA には浮動小数点の DSP ブロックが搭載されており、DSP ブロックとその他のデバイス リソースを使用して浮動小数点ソリューションをインプリメントする必要があるので、消費電力が大きくなります。浮動小数点のインプリメンテーションには、同等の固定小数点のソリューションよりも多くの FPGA リソースが必要になります。リソース使用量が多くなると、消費電力も大きくなるので、デザインのインプリメンテーションの全体的なコストも高くなります。詳細は、ホワイト ペーパー 『浮動小数点から固定小数点への変換による消費電力およびコストの削減』 (WP491) を参照してください。

    half データ型の使用ザイリンクス Model Composer では、半精度の half 浮動小数点データ型 (32 ビットではなく 16 ビット) もサポートされています。このデータ型を使用すると、FPGA にインプリメントする際にターゲット デバイスのリソース使用量が少なくなります。Model Composer で設計する場合は、半精度データ型も考慮してみてください。ただし、Simulinkでは half データ型はサポートされていないので、シミュレーションでエラーが発生する可能性があります。この場合、Model Composer サブモジュールに含まれず、生成される出力に含まれないデザイン部分に、Model Composerの DTC ブロックを使用して、half データ型を Simulink でサポートされる single データ型に変換します。

    データ型式の使用Model Composer では、データ型を式として指定できます。現在のところ、次の Model Composer ライブラリ ブロックでデータ型式がサポートされています。• Constant

    • Data Type Conversion

    • Gain

    • Look-Up Table

    • Reinterpret

    データ型式を指定するには、それをサポートするブロック タイプの 1 つを開いて、データ型と値を編集します。次の図では、Constant ブロックにデータ型式を定義しています。[Output data type] に [data type expression] を選択し、データ型の値を指定する文字列 (この例では 'uint32') を指定します。

    第 2 章: Model Composer デザインの作成

    UG1262 (v2019.1) 2019 年 5 月 22 日 japan.xilinx.comModel Composer ユーザー ガイド 16

    https://japan.xilinx.com/cgi-bin/docs/ndoc?t=white_papers;d=wp491-floating-to-fixed-point.pdfhttps://japan.xilinx.comhttps://japan.xilinx.com/about/feedback/document-feedback.html?docType=User_Guides&docId=UG1262&Title=Model%20Composer%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B&releaseVersion=2019.1&docPage=16

  • 図 7: データ型式

    データ型の値は、データ型の使用 セクションの Model Composer のデータ型の表に示すサポートされるデータ型の文字列表記で指定します。ただし固定小数点データ型は例外で、fixed 文字列で指定せず、固定小数点データ型の使用で説明する表示フォーマット (例: 'x_sfix16_En8') に従って定義します。データ型を式として定義する利点は、モデルからの変数を使用してデータ型の値をプログラムで決定できることです。たとえば、次のように MATLAB® コマンド ラインから変数を定義します。>> InputDataType = 'x_ufix8_En7';

    この変数は、データ型式を定義する際に使用できます。図 8: 変数データ型

    変数は、MATLAB コマンド ラインから定義するか、[Tools] → [Model Explorer] メニュー コマンドを使用してモデル内で定義するか、Ctrl+H キーを押して指定できます。Model Explorer からは、モデルまたはブロックで使用する変数を作成、編集、管理できます。ヒント: [View] → [Property Inspector] をオンにすると、現在選択しているオブジェクトの変数が表示されます。

    第 2 章: Model Composer デザインの作成

    UG1262 (v2019.1) 2019 年 5 月 22 日 japan.xilinx.comModel Composer ユーザー ガイド 17

    https://japan.xilinx.comhttps://japan.xilinx.com/about/feedback/document-feedback.html?docType=User_Guides&docId=UG1262&Title=Model%20Composer%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B&releaseVersion=2019.1&docPage=17

  • オーバーフローの管理ブロックのデータ型定義で信号に入力されるデータ値がサポートされないことがあります。信号の値がブロックのデータ型で表現するには大きすぎるか小さすぎる場合、オーバーフローが発生することがあります。発生する可能性のあるオーバーフローのタイプには、折り返しオーバーフローと飽和オーバーフローがあります。• [Wrap on Overflow]: デフォルトのオーバーフロー メカニズムで、ビット値がオーバーフロー ポイントで折り返されます。たとえば、2 つの値の乗算などの算術演算でデータ型の最大値よりも大きな結果が生成された場合、結果が折り返されます。

    • [Saturate on Overflow]: 加算および乗算などのすべての演算を、データ型でサポートされる最小値と最大値の固定範囲に制限します。つまり、値が最大値または最小値に達すると停止します。

    折り返しは、値がデータ型を超えると自然に発生するので、これがオーバーフロー処理のデフォルトです。チェックは必要ありません。[Saturate on Overflow] オプションを選択した場合、折り返されないように許容される最大値または最小値に対してデータ値をチェックする追加ロジックが必要になります。この追加ロジックにより、ターゲット デバイスで使用可能なリソースが消費されます。

    [Saturate on integer overflow] オプション[Saturate on integer overflow] オプションModel Composer では、現在のところ信号上の整数データ値のオーバーフロー検出がサポートされています。前述のように、デフォルトのオーバーフロー メカニズムは折り返し ([Wrap on Overflow]) です。標準 Simulink ライブラリおよび Xilinx Model Composer ライブラリの一部のブロックには、[Block Parameters] ダイアログ ボックスに [Saturateon integer overflow] という整数のオーバーフローで飽和させるオプションがあります。このパラメーターは、出力が整数 (int8、int16、int32、uint8、uint16、uint32) の場合にのみ適用されます。ブロックに特定の情報は、付録 B:Model Composer ブロック ライブラリを参照してください。

    図 9: [Saturate on integer overflow] オプション

    [Saturate on integer overflow] を選択すると、入力値が出力でサポートされる値の範囲よりも大きすぎたり小さすぎたりする場合や、単に最大値やサポートされる最小値に到達した場合に、飽和処理されることを意味します。値は飽和したら、変更されません。

    第 2 章: Model Composer デザインの作成

    UG1262 (v2019.1) 2019 年 5 月 22 日 japan.xilinx.comModel Composer ユーザー ガイド 18

    https://japan.xilinx.comhttps://japan.xilinx.com/about/feedback/document-feedback.html?docType=User_Guides&docId=UG1262&Title=Model%20Composer%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B&releaseVersion=2019.1&docPage=18

  • [Saturate on fixed point overflow] オプション固定小数点データ型の場合、たとえば DTC (Data Type Conversion) ブロックでサポートされるように、オーバーフロー モードが [Saturate on integer overflow] オプションよりも詳細に制御できます。

    図 10: 固定小数点のオーバーフロー

    それぞれの固定小数点オーバーフロー モードの詳細は、次を参照してください。

    第 2 章: Model Composer デザインの作成

    UG1262 (v2019.1) 2019 年 5 月 22 日 japan.xilinx.comModel Composer ユーザー ガイド 19

    https://japan.xilinx.comhttps://japan.xilinx.com/about/feedback/document-feedback.html?docType=User_Guides&docId=UG1262&Title=Model%20Composer%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B&releaseVersion=2019.1&docPage=19

  • 表 3: 固定小数点のオーバーフロー モードモード 説明 グラフ

    Saturation 入力値が出力データ型でオーバーフローする場合、出力値がその最小値または最大値で飽和に達したら、変更されません。

    Saturation to Zero 入力値が出力データ型でオーバーフローする場合、出力値がその最小値または最大値で飽和に達したら、0 に戻ります。

    SymmetricalSaturation

    [Saturation to Zero] と同じですが、最小値と最大値が対称だったり、値は反対ですがサイズが同じであったりする点が違います。

    第 2 章: Model Composer デザインの作成

    UG1262 (v2019.1) 2019 年 5 月 22 日 japan.xilinx.comModel Composer ユーザー ガイド 20

    https://japan.xilinx.comhttps://japan.xilinx.com/about/feedback/document-feedback.html?docType=User_Guides&docId=UG1262&Title=Model%20Composer%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B&releaseVersion=2019.1&docPage=20

  • 表 3: 固定小数点のオーバーフロー モード (続き)モード 説明 グラフ

    Wrap around 入力値が出力データ型を超えたら、出力値は最大値から最小値へ折り返されるか、最小値から最大値に折り返されるので、許容値の範囲で循環します。

    Sign-MagnitudeWrap Around

    入力値が出力データ型を超える場合、出力値が最大値になったら、値が減少し始めて、最小値に戻ります。アンダーフローの場合は、最小値になったら、値が増加し初めて、最大値に戻ります。

    オーバーフロー警告の設定折り返しまたは飽和のどちらのオプションを選択している場合でも、オーバーフローがいつ発生するのかを知っておくことが重要です。ツールバー メニューの [Model Configuration Parameters] コマンド ( ) をクリックするかCtrl-E キーを押すと、これらの各オーバーフロー状態を Simulink でどのように処理するか指定できます。[Configuration Parameters] ダイアログ ボックスの [Diagnostics] → [Data Validity] タブで [Wrap on Overflow] および[Saturate on Overflow] で値を指定します。これらのフィールドで指定可能な設定は、次のいずれかです。• [none]: Simulink でオーバーフローを処理またはレポートするための特別な操作は実行されません。• [warning]: Diagnostic Viewer にメッセージが表示されます。同じブロックに対する次の警告は無視され、シミュレーションは続行されます。

    • [error]: Diagnostic Viewer にエラー メッセージが表示され、シミュレーションが停止します。ヒント: このダイアログ ボックスに関するヘルプ情報は、Simulink 資料の「モデル コンフィギュレーション パラメーター: データ有効性の診断」を参照してください。

    第 2 章: Model Composer デザインの作成

    UG1262 (v2019.1) 2019 年 5 月 22 日 japan.xilinx.comModel Composer ユーザー ガイド 21

    https://jp.mathworks.com/help/simulink/gui/diagnostics-pane-data-validity.htmlhttps://jp.mathworks.com/help/simulink/gui/diagnostics-pane-data-validity.htmlhttps://japan.xilinx.comhttps://japan.xilinx.com/about/feedback/document-feedback.html?docType=User_Guides&docId=UG1262&Title=Model%20Composer%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B&releaseVersion=2019.1&docPage=21

  • 最上位サブシステム モジュールの作成Model Composer モデルから出力を生成するには、Model Composer モデルの最上位に Model Composer Hub ブロック (Model Composer Hub ブロックの追加を参照) とアプリケーション デザインを含むサブシステムが含まれている必要があります。デザインの最上位にインスタンシエートされているサブシステムから出力を生成するには、XilinxModel Composer ブロックと特定の Simulink ブロックのみがサブシステムに必要です。Xilinx Model Composer ブロックでは、関数を IP パッケージ用にコンパイルするか、C++ コード用にコンパイルするかが定義されます。最上位デザインには、シミュレーションなどの別の目的用にほかのブロックおよびサブシステム モジュールを含めることもできますが、基本的なアプリケーションは指定したサブシステム内に完全に含まれるようにしておく必要があります。ヒント: Model Composer サブシステムでサポートされる特定の Simulink ブロックは Xilinx Model Composer ブロック ライブラリにも表示されます。リストの内容は、サポートされる Simulink ブロックを参照してください。モデル内からサブシステムを作成するには、1 つまたは複数のブロックをモデル キャンバスに追加し、そのブロックをサブシステムに変更します。1. モデルへのブロックの追加に説明されているように、Simulink Editor でブロックをモデル キャンバスにドラッグアンド ドロップします。

    2. 1 つまたは複数のブロックを選択して右クリックし、[Create Subsystem from Selection] をクリックします。3. サブシステムに名前を付けます。名前は生成される出力アプリケーションまたは IP と同じ名前にします。4. サブシステムをダブルクリックして Simulink Editor で開きます。Simulink ヘルプのエクスプローラー バーおよびモデル ブラウザーを使用すると、モデルを探しやすくなります。

    • エクスプローラー バー ( ) を使用すると、Simulink Editor 内のビュー間で階層を上下や前後に移動できます。

    • モデル ブラウザーの [Model Hierarchy] ビューからは、別のレベルを選択して開いて、階層内をすばやく移動できます。

    第 2 章: Model Composer デザインの作成

    UG1262 (v2019.1) 2019 年 5 月 22 日 japan.xilinx.comModel Composer ユーザー ガイド 22

    https://japan.xilinx.comhttps://japan.xilinx.com/about/feedback/document-feedback.html?docType=User_Guides&docId=UG1262&Title=Model%20Composer%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B&releaseVersion=2019.1&docPage=22

  • 第 3 章

    C/C++ コードのカスタム ブロックとしてのインポート概要

    Model Composer では、C または C++ コードをインポートし、新しいブロックを作成できます。このブロックは、ライブラリに追加してほかの Model Composer ブロックと共にモデル内で使用できます。この機能を使用すると、カスタム ブロック ライブラリを構築して、それを Model Composer で使用できるようになります。ヒント: import_function の例は、小さな一連の例を使用して C/C++ コードをインポートする機能のほとんどを示します。この例は、MATLAB のコマンド ウィンドウに「xmcOpenExample('import_function')」と入力すると開くことができます。

    xmcImportFunction コマンドの使用ザイリンクス Model Composer には MATLAB コマンド ラインから使用可能な xmcImportFunction コマンドが含まれており、ソースおよびヘッダー ファイルで定義された関数を指定して、Model Composer ブロックまたはブロック ライブラリ作成できます。xmcImportFunction コマンドには、次の構文を使用します。xmcImportFunction('libName',{'funcNames'},'hdrFile',{'srcFiles'},{'srchPaths'},'options')

    説明:• libName: 新しいブロックを追加する Model Composer ライブラリの名前を指定します。新しく作成するライブラリの名前または既存のライブラリ名を指定できます。

    • funcNames: ソースまたはヘッダー ファイルで定義された Model Composer ブロックとしてインポートする 1 つまたは複数の関数名のリスト (セル配列) を指定します。{} のように空にすると、指定したヘッダー ファイル(hdrFile) で定義されているすべての関数がインポートされます。名前空間内の関数には、完全な名前空間接頭辞を指定する必要があります。たとえば、hls_math 内の 'sinf' 関数をインポートするには、完全な関数名'hls::sinf' を指定する必要があります。

    • hdrFile: 関数宣言または定義を含むヘッダー ファイル (.h) を指定します。現在の作業ディレクトリに含まれていない場合は、ヘッダー ファイルへの完全パスを指定する必要があります。たとえば、hls_math.h から関数をインポートするには、完全な関数名 '$XILINX_VIVADO/include/hls_math.h' を指定する必要があります。

    重要: 関数シグネチャはヘッダー ファイルで定義する必要があり、Model Composer (XMC) プラグマはヘッダー ファイルの関数シグネチャの一部として指定する必要があります。

    UG1262 (v2019.1) 2019 年 5 月 22 日 japan.xilinx.comModel Composer ユーザー ガイド 23

    https://japan.xilinx.comhttps://japan.xilinx.com/about/feedback/document-feedback.html?docType=User_Guides&docId=UG1262&Title=Model%20Composer%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B&releaseVersion=2019.1&docPage=23

  • • srcFiles: 関数定義を検索する 1 つまたは複数のソース ファイルのリストを指定します。モデルで使用すると、ヘッダーおよびソース ファイルはモデルのメイン ヘッダー ファイル (headerFile) と共にシミュレーション用の共有ライブラリにコンパイルされ、Model Composer Hub ブロックの追加に説明するように、Model ComposerHub ブロックで出力を生成するのに指定したターゲット ディレクトリにコピーされます。

    • srchPaths: ヘッダーおよびソース ファイルの検索パスを 1 つまたは複数指定します。{} のように空にすると、検索パスがないことを示し、MATLAB の現在のフォルダーが検索されます。HLS ヘッダー ファイルを含めるには、'$XILINX_VIVADO/include' を使用します。

    xmcImportFunction コマンドには次の options もあり、必須の引数の後に任意の順序で指定できます。• 'unlock': 既存のライブラリがロックされている場合にロックを解除します。xmcImportFunction コマンドで既存のライブラリにブロックを追加できますが、そのためにはまずロックを解除する必要があります。

    • 'override': 指定したライブラリ内に存在する同じ名前のブロックを上書きします。ヒント: xmcImportFunction のヘルプを表示するには、MATLAB コマンド ラインで「helpxmcImportFunction」と入力します。前述の情報が表示されます。たとえば、次の simple.h ヘッダー ファイルでは 2 つの倍精度浮動小数点の入力とポインター出力を含むsimple_add 関数が定義されています。この関数では、2 つの入力が加算され、その合計が出力として返されます。void simple_add(const double in1, const double in2, double *out) { *out = in1 + in2;}

    Model Composer ライブラリに simple_add 関数をブロックとしてインポートするには、MATLAB コマンド プロンプトに次のコマンドを入力します。xmcImportFunction('SimpleLib',{'simple_add'},'simple.h',{},{})

    説明:• SimpleLib: ブロックを追加する Model Composer ライブラリの名前を指定します。• simple_add: インポートする関数の名前を指定します。• simple.h: 検索するヘッダー ファイルを指定します。• C ソース ファイルおよび検索パスは指定されていません。この場合、関数定義が指定したヘッダー ファイルに含まれている必要があり、指定したファイルは MATLAB の現在のフォルダーのみで検索されます。

    ヒント: インポートするブロックと同じ関数名のブロックが指定したライブラリに既に存在する場合は、ModelComposer で警告メッセージが表示されます。xmcImportFunction が完了すると、作成された simple_add ブロックを含む SimpleLib ライブラリ モデルが開きます。

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

    UG1262 (v2019.1) 2019 年 5 月 22 日 japan.xilinx.comModel Composer ユーザー ガイド 24

    https://japan.xilinx.comhttps://japan.xilinx.com/about/feedback/document-feedback.html?docType=User_Guides&docId=UG1262&Title=Model%20Composer%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B&releaseVersion=2019.1&docPage=24

  • 図 11: simple_add ブロック

    シミュレーションでは、ライブラリ ブロックの C/C++ コードがコンパイルされ、ライブラリ ファイルが作成されて読み込まれます。ライブラリ ファイルは、その後の実行でシミュレーションの初期化にかかる時間を短縮するためにキャッシュされます。ライブラリ ブロックに含まれるソース コードは、ブロックをインポートし直したりライブラリを作成し直さなくても変更できますが、キャッシュされたライブラリ ファイルは C/C++ ソース コードを変更するとアップデートされます。ただし、関数シグネチャまたは関数へのパラメーターを変更した場合は、xmcImportFunction を再実行してブロックを作成し直す必要があります。この場合、override オプションを使用して、ライブラリ内の既存のブロック定義を上書きする必要があります。重要: インポートされた関数へのインターフェイスまたは関連の XMC プラグマを変更した場合は、xmcImportFunction コマンドを再実行する必要があります。この場合、デザインからブロックを削除し、新しく生成されたブロックをライブラリから追加してください。関数の内容を変更した場合は、xmcImportFunction を再実行する必要はありません。ブロック シンボルが作成されたら、そのシンボルをダブルクリックすると、インポートしたブロックのパラメーターを確認できます。パラメーターを表示すると、関数ポートが正しく定義されたかどうかを確認できます。

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

    UG1262 (v2019.1) 2019 年 5 月 22 日 japan.xilinx.comModel Composer ユーザー ガイド 25

    https://japan.xilinx.comhttps://japan.xilinx.com/about/feedback/document-feedback.html?docType=User_Guides&docId=UG1262&Title=Model%20Composer%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B&releaseVersion=2019.1&docPage=25

  • 図 12: simple_add の [Block Parameters] ダイアログ ボックス

    Model Composer への C/C++ のインポートModel Composer では、C または C++ 関数をインポートしてブロックのライブラリを作成できますが、特別な要件に従わないと、コードが正しく認識および処理されません。関数ソースは、ヘッダー ファイル (.h)、C または C++ ソース ファイル (.c、.cpp) のいずれかで定義できますが、ヘッダー ファイルには関数シグネチャを含める必要があります。関数引数が実数または複素数型のスカラー、ベクター、または行列の関数をインポートできるほか、固定小数点型を含む Model Composer でサポートされるすべてのデータ型を使用することもできます。Model Composer では、テンプレートとして関数を定義することも可能です。テンプレート変数は入力信号で定義するか、ブロックをモデルに追加したときまたはシミュレーション前に指定する必要のあるカスタマイズ パラメーターとして定義します。コードで関数テンプレートを使用すると、異なるアプリケーションをサポートする Model Composer ブロックを作成でき、ブロック ライブラリの再利用性が高まります。詳細は、関数テンプレートを使用したブロックの定義を参照してください。

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

    UG1262 (v2019.1) 2019 年 5 月 22 日 japan.xilinx.comModel Composer ユーザー ガイド 26

    https://japan.xilinx.comhttps://japan.xilinx.com/about/feedback/document-feedback.html?docType=User_Guides&docId=UG1262&Title=Model%20Composer%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B&releaseVersion=2019.1&docPage=26

  • 重要: 関数シグネチャはヘッダー ファイルで定義する必要があり、Model Composer (XMC) プラグマはヘッダー ファイルの関数シグネチャの一部として指定する必要があります。xmcImportFunction コマンドでは std::complex または hls::x_complex 型を使用した C/C++ 関数がサポートされます。詳細は、複素数型の使用 を参照してください。インポートされた関数の入力が 1D 配列の場合は、入力信号と関数引数間で自動マッピングを実行できます。たとえば、関数引数が a[10] の場合、Model Composer で接続される信号は、サイズ 10 のベクターか、1x10 または 10x1サイズの行行列または列行列のいずれかにできます。ただし、インポートした関数の入力および出力すべてがスカラー引数である場合、ベクター信号または行列信号をスカラー入力に接続できます。この場合、インポートした関数が入力信号のベクターの各値を処理するか、行列を別々の値として処理することで、これらの値が出力信号のベクターまたは行列にまとめられます。たとえば、スカラー入力に接続されるサイズが 10 のベクターの場合、ベクターの各要素が処理され、出力信号にサイズ 10 のベクターが返されます。入力を持たず、出力を生成するだけの関数をインポートできます。これはソース ブロックと呼ばれ、出力はスカラー、ベクター、複素数、行列のいずれかになります。複数出力を持つソース ブロックをインポートすることもできます。次の関数例の場合、入力ポートがなく、y が出力です。#include #include

    #pragma XMC OUTPORT y#pragma XMC PARAMETER Limittemplate void counter(T &y, int16_t Limit){ static T count = 0; count++; if (count > Limit) count =0; y = count;}

    ヒント: ソース ブロックに入力がないので、次の図の関数宣言に示すように、ブロックが xmcImportFunction コマンドで作成されると、SampleTime パラメーターが自動的に追加されます。デフォルト値は 1 なので、サンプル時間はモデルから継承されます。このサンプル時間は、次に示すように、ブロックをモデルに追加する際にカスタマイズして、明示的に指定することもできます。

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

    UG1262 (v2019.1) 2019 年 5 月 22 日 japan.xilinx.comModel Composer ユーザー ガイド 27

    https://japan.xilinx.comhttps://japan.xilinx.com/about/feedback/document-feedback.html?docType=User_Guides&docId=UG1262&Title=Model%20Composer%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B&releaseVersion=2019.1&docPage=27

  • 図 13: ソース ブロックのサンプル時間の設定

    関数引数のポートの方向は、xmcImportFunction コマンドで自動的に決定されるか、ヘッダー ファイルの関数シグネチャでプラグマを使用して手動で指定できます。• 入力および出力ポートの自動決定:

    ○ 関数の return 値は、戻り値が void の場合を除き、常に出力として定義されます。○ const 修飾子で宣言される仮関数引数は、入力として定義されます。○ 参照、ポインター型、または const 修飾子のない配列型で宣言された引数は、出力として定義されます。○ その他の引数 (値で読み込まれるスカラーなど) は、デフォルトで入力として定義されます。

    • 入力および出力ポートの手動定義:○ ヘッダー ファイルの関数宣言の直前に INPORT および OUTPORT プラグマを追加すると、入力および出力として定義する関数引数を指定できます。

    ○ #pragma XMC INPORT [, ...]

    ○ #pragma XMC OUTPORT [, ...]

    次の例では、const 修飾子があるので、in は自動的に入力として定義され、out は出力として定義されます。インポートされたブロックには、関数の return 整数値があるので、2 つ目の出力も含まれます。int func(const int in, int &out);

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

    UG1262 (v2019.1) 2019 年 5 月 22 日 japan.xilinx.comModel Composer ユーザー ガイド 28

    https://japan.xilinx.comhttps://japan.xilinx.com/about/feedback/document-feedback.html?docType=User_Guides&docId=UG1262&Title=Model%20Composer%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B&releaseVersion=2019.1&docPage=28

  • 次の関数では、in は自動的に入力として定義され、out は出力になりますが、return 値はありません。void func(const in[512], int out[512]);

    次の例では、ソース コードの関数宣言の直前にプラグマを追加することで、ポートが手動で指定されています。関数を Model Composer にインポートする必要のある元の C++ コードに加えた変更はこれだけです。この例の場合、どのパラメーターをブロックの入力にするか、どのパラメーターをブロックの出力にするかをプラグマで指定しています。#pragma XMC INPORT din#pragma XMC OUTPORT doutvoid fir_sym (ap_fixed din[100], ap_fixed dout[100]);

    ヒント: ap_fixed は Vivado HLS と互換性のある固定小数点を指定しています。

    ヘッダー ファイルの関数シグネチャにプラグマを手動で追加して関数の入力および出力パラメーターを定義する方法は、コードに const 修飾子が使用されておらず、関数に階層があり、const 修飾子を追加するためにソース コードを大幅に変更する必要のある場合に便利です。また、入力および出力をコード内で明示的に指定できるので、インポート ブロックとの関連をより明確にできます。Model Composer にインポートする C または C++ コードを記述する際は、次の点にも注意する必要があります。• ソース コードは 32 ビットおよび 64 ビット アーキテクチャ間で移植できるように開発する必要があります。• ソース コードには、リソースおよびパフォーマンス最適化に Vivado HLS のプラグマを使用できます。これらのプラグマは Model Composer でも使用されますが、Model Composer により変更されたり追加されたりすることはありません。

    • コードにスタティック変数がある場合、その関数をインポートするブロックのインスタンスすべてで共有されます。この変数をすべてのインスタンスで共有しない場合は、スタティック変数を含む関数をコピーして名前を変更し、xmcImportFunction コマンドを使用して新しいライブラリ ブロックをインポートします。

    • C++ (.cpp ソース ファイル) ではなく C (.c) ソース ファイルを使用してライブラリ関数をモデリングする場合は、Vivado HLS などのダウンストリーム ツールのために、.h ヘッダー ファイルに extern "C" 宣言を含める必要があります。次に、ヘッダー ファイルでの extern "C" の宣言例を示します。// c_function.h:#ifdef __cplusplusextern 'C' {#endifvoid c_function(int in, int &out);#ifdef __cplusplus}#endif

    複素数型の使用Vivado HLS の C/C++ コードでは、std::complex や hls::x_complex を使用して xmcImportFunction ブロックの複素数信号を記述できますが、 が ap_fixed または ap_int でない限り、ストリーミングstd::complex 変数はサポートされません。ストリーミング以外の大きな配列変数は、かなりのハードウェアリソースを使用する可能性があります。Model Composer で生成されるコードでは、hls::x_complex を使用して複素数信号を記述します。インポートした C/C++ ブロック関数が std::complex を使用して記述される場合、出力コードを生成すると、hls::x_complex-to-std::complex アダプターに自動的に挿入されて、そのブロック ポートの複素数型に変換されます。

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

    UG1262 (v2019.1) 2019 年 5 月 22 日 japan.xilinx.comModel Composer ユーザー ガイド 29

    https://japan.xilinx.comhttps://japan.xilinx.com/about/feedback/document-feedback.html?docType=User_Guides&docId=UG1262&Title=Model%20Composer%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B&releaseVersion=2019.1&docPage=29

  • std::complex を使用する関数のインポートもこれまで同様サポートされますが、インポートした関数にstd::complex データ型のスカラー以外の引数が含まれる場合は、コード生成時に、hls::x_complex を使用して関数を書き直すと、結果の質が改善されて複素数変数をストリーミングできるようになることを示す警告メッセージが表示されます。C/C++ コードには、複素数型の宣言に必要なヘッダー ファイルも含める必要があります。hls::x_complex 型の場合、xmcImportFunction コマンドに hls_x_complex.h ヘッダー ファイルの検索パス ‘$XILINX_VIVADO/include’ も含める必要があります。たとえば、次は complex_mult 関数をインポートして、必要なインクルードパスを指定しています。xmcImportFunction('my_lib',{'complex_mult'}, 'complex_mult.h', {}, {'$XILINX_VIVADO/include'});

    複素数型を使用した関数の例#include "hls_x_complex.h"hls::x_complexcomplex_mult(hls::x_complex in1, hls::x_complex in2){ return in1 * in2; }

    #include std::complex complex_mult2(std::complex in1, std::complex in2){ return in1 * in2; }

    #include void complex_mult3(std::complex in1, std::complex in2, std::complex &out1) { out1.real(in1.real() * in2.real() - in1.imag() * in2.imag()); out1.imag(in1.real() * in2.imag() + in1.imag() * in2.real()); }

    関数テンプレートを使用したブロックの定義重要: テンプレート構文を使用するには、xmcImportFunction を実行したときに、関数シグネチャおよび定義がヘッダー ファイルで指定されている必要があります。int32 のように定義したデータ型のみをサポートする関数を記述するのが一般的ですが、異なるサイズの入力または異なるデータ型をサポートするブロックや、固定小数点長および小数部の長さが異なる信号をサポートするブロックを作成することが必要な場合もあります。これには、関数テンプレートを使用してさまざまな信号サイズ、データ型、またはデータ次元をサポートするブロックを作成します。ブロックは、次の例のように関数テンプレートを使用して定義できます。#include template void simple_matrix_add(const int16_t in1[ROWS][COLS], const int16_t in2[ROWS][COLS], int16_t out[ROWS][COLS]) { for (int i = 0; i

  • for (int j = 0; j

  • ほかにも、テンプレート パラメーターおよび整数定数の両方を使用した +、-、*、/、%、 などの単純な演算がサポートされています。次に例を示します。templatevoid func(const int in[M][N], int out[M*2][M*N]);

    templatevoid func(array[2 * (ROWS + 1) + COLS + 3]);

    また、次に示すような関数テンプレートを使用し、可変ワード長および整数長の固定小数点データ型を使用する関数テンプレートを定義することもできます。#include #include #pragma XMC OUTPORT outtemplate void fixed_add(const ap_fixed in1, const ap_fixed in2, ap_fixed &out) { out = in1+in2;}

    上記の例では、Vivado HLS からの固定小数点表記が使用され、ワード長および整数長が指定されています。ModelComposer では、データ型の使用に説明するように、ユーザーがワード長と小数部の長さを指定します。この場合、Model Composer の固定小数点データ型をインポートされた fixed_add ブロックに接続する際に注意が必要です。たとえば、上記の関数で WordLen が 16、IntLen が 11 の場合、Model Composer の固定小数点型ではワード長が16、小数部の長さが 5 になります。Vivado HLS での固定小数点の表記については、『Vivado Design Suite ユーザー ガイド: 高位合成』 (UG902) を参照してください。ヒント: 上記の例に示すように、固定小数点のテンプレート パラメーターでは単純な算術演算もサポートされています。fixed_add 関数をインポートして Model Composer でブロックを作成するには、次のコマンドを使用します。xmcImportFunction('SimpleLib',{'fixed_add'},fixed_example.h',{},...{'$XILINX_VIVADO/include'})

    データ型の関数テンプレートデータ型の関数テンプレートは、汎用データ型を使用可能な関数です。関数テンプレートを使用すると、複数のデータ型をサポートするライブラリ関数を作成でき、各データ型をサポートするために Model Composer ブロック ライブラリでコードまたはブロックを複製する必要はありません。Model Composer の xmcImportFunction コマンドを使用して、ブロックでサポートされるどのデータ型の信号にでも接続可能な汎用ライブラリ ブロックを作成します。データ型 (typename) テンプレート パラメーターは、コードおよびシミュレーション ラッパーが生成されるシミュレーション実行時間に解決されます。パラメーターはシミュレーション中にライブラリ ブロックに接続されている信号で指定された実際のデータ型に置き換えられます。置き換えられるデータ型は、データ型の使用に説明されているModel Composer でサポートされるデータ型である必要があります。複数のデータ型をサポートするブロックをインポートするには、関数テンプレートを使用します。次に例を示します。template T max(T x, T y) { return (x > y) ? x : y;}

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

    UG1262 (v2019.1) 2019 年 5 月 22 日 japan.xilinx.comModel Composer ユーザー ガイド 32

    https://japan.xilinx.com/cgi-bin/docs/rdoc?v=2019.1;d=ug902-vivado-high-level-synthesis.pdfhttps://japan.xilinx.comhttps://japan.xilinx.com/about/feedback/document-feedback.html?docType=User_Guides&docId=UG1262&Title=Model%20Composer%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B&releaseVersion=2019.1&docPage=32

  • または、complex 関数引数を使用した関数の場合、この例は次のようになります。#include template void mult_by_two(std::complex< T > x, std::complex< T > *y){ *Out = In1 * 2;}

    データ型は Model Composer によりシミュレーション中に決定されます。typename (または class) パラメーターはブロックの入力信号から伝搬されるか、シミュレーション前にユーザーが定義する必要のあるカスタマイズ パラメーターです。重要: 関数またはクラスのデータ型は、出力から伝搬させることはできません。

    次の例では、関数テンプレートでパラメーター T をカスタマイズ パラメーターとして定義しています。入力引数 x または y に関連付けられていないので、ブロックをモデルに追加したときにユーザーが値を指定する必要があります。template T min(int x, int y) { return (x < y) ? x : y;}

    生成された Library Function ブロックの [Block Parameters] ダイアログ ボックスには、次の図に示すように、テンプレート引数を入力する編集フィールドがあります。

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

    UG1262 (v2019.1) 2019 年 5 月 22 日 japan.xilinx.comModel Composer ユーザー ガイド 33

    https://japan.xilinx.comhttps://japan.xilinx.com/about/feedback/document-feedback.html?docType=User_Guides&docId=UG1262&Title=Model%20Composer%20%26%2312518%3B%26%2312540%3B%26%2312470%3B%26%2312540%3B%20%26%2312460%3B%26%2312452%3B%26%2312489%3B&releaseVersion=2019.1&docPage=33

  • 図 15: Library Function の [Block Parameters] ダイアログ ボックス

    テンプレート構文では、関数またはクラスのデータ型テンプレート パラメーターをほかのテンプレート パラメーターで指定できます。指定順序は重要ではありません。次に例を示します。template T1 func(T1 x[ROW][COLS], ap_fixed &y) {...}

    重要: 上記の例では、T1 テンプレート パラメーターが関数の戻り値および入力 x のデータ型の両方を指定するのに使用されています。この場合、これは 1 つのテンプレート パラメーターなので、両方の引数が同じデータ型になります。

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

    UG1262 (v2019.1) 2019 年 5 月 22 日 j