このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
ラピッド プロトタイピング展開のモデルの設計
Simulink® Coder™ を使用してラピッド プロトタイピングのコードを生成する場合、開始当初からコード生成による Simulink モデルの設計に留意することが重要です。
アプリケーションのアルゴリズムとランタイム環境
Simulink を使用して、展開可能なコードの生成元となるアプリケーションのアルゴリズムとランタイム環境を表すモデルを設計します。アプリケーションに応じて、以下の組み合わせで構成される実行環境にコードを展開する場合があります。
実行環境のコンポーネント | 選択肢 |
---|---|
ハードウェア |
|
コア数 |
|
オペレーティング システム |
|
スケジューリング |
|
アプリケーション アルゴリズム コード |
|
ラピッド プロトタイピング用または量産展開用の C または C/C++ コードを生成するモデルを設計する際には、実行環境に注意してください。実装要件を満たすコードを生成し、設計のやり直しを行う可能性を回避します。前述の表に反映されているとおり、生成するコードの実行環境は比較的単純なものから複雑なものまであります。たとえば、単純な例としては、シングルコア マルチプロセッサで実行する単一のシングルタスク モデルから生成するコードがあります。複雑な例としては、マルチコア マイクロプロセッサと FPGA で分散システムとして実行するように分割されたモデルから生成されるコードがあります。
生成されたコード用のソフトウェアの実行フレームワーク
アプリケーションの実行環境の一部は、生成されたコードのスケジューリングと実行を行うソフトウェアの実行フレームワークです。このソフトウェアは、オペレーティング システムやそのスケジューラの場合と同様に事前に配置することも、手動でコーディングすることもできます。複雑度のレベルは、適用される以下のモデル化のシナリオとコード生成のシナリオによって異なります。
単一の最上位モデルから、実行環境での実行を目的としたアルゴリズムを表すコードを生成する。
アルゴリズム全体の一部を表すモデルからコードを生成する。生成されたコードは、他のソースまたは MathWorks® 製品のリリースから手動で生成されたコードと混在させることができます。
単一の最上位モデル
単一の最上位モデルの場合、ソフトウェアの実行フレームワークは Simulink でモデルのシミュレーションが実行されるのと同じ方法で、生成されたコードを実行します。Simulink が依存関係を認識しているため、生成されたコード内の関数は高度に調整および最適化されます。フレームワークは最上位モデルのみに対して生成されるコードとインターフェイスを取ります。最上位モデルに対して生成されるコードは参照される Model ブロックのコードとのインターフェイスを処理します。
単一の最上位モデルがシングルコア CPU で実行されるタスクにマッピングされる以下の例を考えます。
このシステムでは、モデルのクロック レートをハードウェアで実行するタスクにマッピングします。Simulink でレートを暗黙的にマッピングするか、モデルで明示的にマッピングするか、選択できます。シングルタスクまたはマルチタスクの実行環境に、モデル内のレートをマッピングする方法から生じるレイテンシの影響をモデル化できます。Simulink はモデル内のレートとタスク間のデータの依存関係に基づいてタスクを適切にスケジュールします。コード ジェネレーターは同じ依存関係を生成するコードに実装します。ソフトウェアの実行フレームワークは生成されたエントリポイント関数をシステム タイマーと割り込みに基づいたレートで呼び出します。生成されたコードは、Simulink でモデルのシミュレーションを実行し、異なるレートで実行される関数間のデータ通信に特化したコードを格納します。
複数の最上位モデル
コードを複数の最上位モデルから個別に生成し、そのコードをその他の方法で取得したコードと混在させる場合、アプリケーションの実行環境ではソフトウェアの実行フレームワークの役割が大きくなります。このモデル化シナリオでは、スタンドアロンの再利用可能なアトミック コンポーネントのコードを生成します。
このシナリオでは、Simulink はモデルの依存関係を認識しません。異なるモデルで生成されたコード内の関数は最小限に調整および最適化されます。たとえば、生成されるユーティリティ関数をモデルで共有する場合があります。モデルの境界を越える可能性のある最適化は実行できません。ソフトウェアの実行フレームワークを設計する際は、実行順序も含め、コードのユニット間の依存関係を考慮しなければなりません。複数のコア間での同時実行が必要なアプリケーションでは、コア間のデータ レイテンシの影響を考慮しなければなりません。
コード ジェネレーターは、グローバル データを共有したり、識別子の競合を回避する場合など、ソフトウェアの実行フレームワークの課題に対処するのに役立ちます。各モデルに生成されるコードは、参照される Model ブロックのインターフェイスを処理します。
組み込みシステム アーキテクチャの Simulink モデリング環境へのマッピング
ラピッド プロトタイピング展開のモデルを設計する場合、以下の設計要因を考慮します。
アルゴリズムのモデル化 | 必要とする正確な結果を効率的に生み出すための、特定の初期状態と入力、一連のタスクまたは命令。 |
インターフェイスのモデル化 | アルゴリズム コンポーネントがコンポーネントの境界を越えて情報を通信および交換できるようにするメカニズム。 |
システムのモデル化 | 高度なドメイン固有の目的または結果を達成するアルゴリズム コンポーネントのコレクション。コンポーネントは多くの場合リソースを共有します。 |
ランタイム環境のモデル化 | システムのアルゴリズム リソースと実行のスケジューリングを処理するフレームワーク。 |
モデリング機能に関する以下の質問について考えます。モデルを設計する際に、質問とともにリストされている情報をガイドとして使用します。特定のランタイム実行環境を考慮してモデルを設計すると、やり直しや将来の変換および保守コストを回避できます。
アルゴリズムのモデル化
アーキテクチャにおける考慮事項 | モデル化における考慮事項 | 関連情報 |
---|---|---|
システムのドメインは? | 製品の必要条件 (コンポーネントのドメインに基づく) |
|
システムは機械ドメイン、電気ドメイン、油圧ドメインなどの物理ドメインに関連していますか? | 物理システム |
|
MathWorks 製品で提供されるブロックで表現できるアルゴリズムの特性は?作成しなければならないブロックは? | ブロックの使用方法、作成、カスタマイズ | |
アーキテクチャにステート マシン コンポーネントは含まれますか? | イベントドリブン システム | Stateflow チャートを使用した有限ステート マシンのモデル化 (Stateflow) |
インターフェイスのモデル化
アーキテクチャにおける考慮事項 | モデル化における考慮事項 | 関連情報 |
---|---|---|
| データの表現 | |
データはシステムのどこでどのように取得されてシステム内部に入力されますか? | 入力 | |
| 出力 |
|
| 関数および関数呼び出し | |
モデルの外側のロジックを制御することによって呼び出される関数をエクスポートする必要はありますか? | 関数のエクスポート | |
システムは信号またはログ データを (たとえば、キャリブレーションを行うために) 監視しますか? | C API および ASAP2 データ交換インターフェイス | |
たとえば、特定のハードウェアのコードを最適化するために、生成されたコードで関数または演算子を置換する必要はありますか? | コード置換 |
|
詳細化の要件および今後の考慮事項はありますか? | 詳細化および今後の考慮事項 |
システムのモデル化
アーキテクチャにおける考慮事項 | モデル化における考慮事項 | 関連情報 |
---|---|---|
| コンポーネント化 | |
| モデル参照 | |
クライアント/サーバー アーキテクチャをモデル化していますか? | Simulink Function と Caller ブロック | |
関連するレガシまたはカスタムのコードは使用可能ですか? | 外部コードの統合 | 外部コード統合ワークフローの選択 (Embedded Coder) |
参照アーキテクチャまたは参照コンポーネントを適用できますか? | モデルおよびプロジェクト テンプレート | |
関数は再利用できますか? | 関数の再利用 | |
| 共有データ |
ランタイム環境のモデル化
アーキテクチャにおける考慮事項 | モデル化における考慮事項 | 関連情報 |
---|---|---|
| ランタイム インターフェイス |
|
パラレル化を最大化するためにシステムは同時実行コンポーネントに分割されますか? どのコンポーネントですか? | 同時実行 | |
| クロックおよびクロック レート | |
| 時間ベースのスケジューリング | |
| イベントベースのスケジューリング | |
システムが初期化イベント、リセット イベント、終了イベントを処理する必要はありますか? | 初期化、リセット、終了 | |
| タスクの実行 | |
| 処理プラットフォーム | マルチコア プロセッサ ターゲット |
コード生成のモデル テンプレート
Embedded Coder® には、一般的なアプリケーションの設計用にモデルを作成する開始点として使用する一連の組み込みのテンプレートが用意されています。テンプレートを使用して、組み込みシステム アプリケーション向けのコード生成を事前に構成するモデルを作成します。
テンプレート | 説明 |
---|---|
コード生成システム | Inport ブロックと Output ブロックで構成される基本モデル。 |
エクスポートする関数 | Function-Call Subsystem からコードを生成するためのモデル。各 Function-Call Subsystem は、サブシステムを右クリックして [C/C++ コード] 、 [関数のエクスポート] を選択し、[ビルド] をクリックして個別にエクスポートできます。 |
固定ステップ、マルチレート | 複数のレートを使用し Inport ブロック、Output ブロック、Sum ブロックで構成される固定ステップ モデル。モデルは固定ステップ離散ソルバーを使用して、モデル コンフィギュレーション パラメーター [周期的なサンプル時間の制約] を [制約なし] に設定し、パラメーター [各離散レートを個別のタスクとして扱う] を選択した状態で 2 つのレートを使用するように構成されます。Simulink は Rate Transition ブロックを挿入して 2 つのサンプル レートを処理します。 |
固定ステップ、シングル レート | シングル レートを使用し Inport ブロック、Output ブロック、Sum ブロックで構成される固定ステップ モデル。モデルは固定ステップ離散ソルバーを使用するように構成されます。 |
テンプレートからモデルを作成するには
MATLAB® の [ホーム] タブで [Simulink] をクリックします。
Simulink のスタート ページで [Embedded Coder] を展開します。
テンプレートにカーソルを合わせて [モデルを作成] をクリックします。テンプレートのコンテンツと設定を使用する新規モデルが Simulink エディター ウィンドウで開きます。
たとえば、テンプレートをリファレンス設計として作成して使用する方法の詳細については、モデルからのテンプレートの作成を参照してください。