Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

ラピッド プロトタイピング展開のモデルの設計

Simulink® Coder™ を使用してラピッド プロトタイピングのコードを生成する場合、開始当初からコード生成による Simulink モデルの設計に留意することが重要です。

アプリケーションのアルゴリズムとランタイム環境

Simulink を使用して、展開可能なコードの生成元となるアプリケーションのアルゴリズムとランタイム環境を表すモデルを設計します。アプリケーションに応じて、以下の組み合わせで構成される実行環境にコードを展開する場合があります。

実行環境のコンポーネント選択肢
ハードウェア
  • 開発用コンピューター

  • ラピッド プロトタイピング ボード

  • マイクロプロセッサ

  • マイクロコントローラー

  • FPGA

  • ASIC

コア数
  • 単一

  • 複数

オペレーティング システム
  • 汎用

  • リアルタイム

  • なし (ベアメタル)

スケジューリング
  • シングルタスク

  • マルチタスク

  • 割り込み駆動型

  • 同時実行

  • オペレーティング システムによって提供

  • モデルから生成

アプリケーション アルゴリズム コード
  • モデルから生成

  • 外部コード

ラピッド プロトタイピング用または量産展開用の C または C/C++ コードを生成するモデルを設計する際には、実行環境に注意してください。実装要件を満たすコードを生成し、設計のやり直しを行う可能性を回避します。前述の表に反映されているとおり、生成するコードの実行環境は比較的単純なものから複雑なものまであります。たとえば、単純な例としては、シングルコア マルチプロセッサで実行する単一のシングルタスク モデルから生成するコードがあります。複雑な例としては、マルチコア マイクロプロセッサと FPGA で分散システムとして実行するように分割されたモデルから生成されるコードがあります。

生成されたコード用のソフトウェアの実行フレームワーク

アプリケーションの実行環境の一部は、生成されたコードのスケジューリングと実行を行うソフトウェアの実行フレームワークです。このソフトウェアは、オペレーティング システムやそのスケジューラの場合と同様に事前に配置することも、手動でコーディングすることもできます。複雑度のレベルは、適用される以下のモデル化のシナリオとコード生成のシナリオによって異なります。

  • 単一の最上位モデルから、実行環境での実行を目的としたアルゴリズムを表すコードを生成する。

  • アルゴリズム全体の一部を表すモデルからコードを生成する。生成されたコードは、他のソースまたは MathWorks® 製品のリリースから手動で生成されたコードと混在させることができます。

単一の最上位モデル

単一の最上位モデルの場合、ソフトウェアの実行フレームワークは Simulink でモデルのシミュレーションが実行されるのと同じ方法で、生成されたコードを実行します。Simulink が依存関係を認識しているため、生成されたコード内の関数は高度に調整および最適化されます。フレームワークは最上位モデルのみに対して生成されるコードとインターフェイスを取ります。最上位モデルに対して生成されるコードは参照される Model ブロックのコードとのインターフェイスを処理します。

単一の最上位モデルがシングルコア CPU で実行されるタスクにマッピングされる以下の例を考えます。

このシステムでは、モデルのクロック レートをハードウェアで実行するタスクにマッピングします。Simulink でレートを暗黙的にマッピングするか、モデルで明示的にマッピングするか、選択できます。シングルタスクまたはマルチタスクの実行環境に、モデル内のレートをマッピングする方法から生じるレイテンシの影響をモデル化できます。Simulink はモデル内のレートとタスク間のデータの依存関係に基づいてタスクを適切にスケジュールします。コード ジェネレーターは同じ依存関係を生成するコードに実装します。ソフトウェアの実行フレームワークは生成されたエントリポイント関数をシステム タイマーと割り込みに基づいたレートで呼び出します。生成されたコードは、Simulink でモデルのシミュレーションを実行し、異なるレートで実行される関数間のデータ通信に特化したコードを格納します。

複数の最上位モデル

コードを複数の最上位モデルから個別に生成し、そのコードをその他の方法で取得したコードと混在させる場合、アプリケーションの実行環境ではソフトウェアの実行フレームワークの役割が大きくなります。このモデル化シナリオでは、スタンドアロンの再利用可能なアトミック コンポーネントのコードを生成します。

このシナリオでは、Simulink はモデルの依存関係を認識しません。異なるモデルで生成されたコード内の関数は最小限に調整および最適化されます。たとえば、生成されるユーティリティ関数をモデルで共有する場合があります。モデルの境界を越える可能性のある最適化は実行できません。ソフトウェアの実行フレームワークを設計する際は、実行順序も含め、コードのユニット間の依存関係を考慮しなければなりません。複数のコア間での同時実行が必要なアプリケーションでは、コア間のデータ レイテンシの影響を考慮しなければなりません。

コード ジェネレーターは、グローバル データを共有したり、識別子の競合を回避する場合など、ソフトウェアの実行フレームワークの課題に対処するのに役立ちます。各モデルに生成されるコードは、参照される Model ブロックのインターフェイスを処理します。

組み込みシステム アーキテクチャの Simulink モデリング環境へのマッピング

ラピッド プロトタイピング展開のモデルを設計する場合、以下の設計要因を考慮します。

アルゴリズムのモデル化必要とする正確な結果を効率的に生み出すための、特定の初期状態と入力、一連のタスクまたは命令。
インターフェイスのモデル化アルゴリズム コンポーネントがコンポーネントの境界を越えて情報を通信および交換できるようにするメカニズム。
システムのモデル化高度なドメイン固有の目的または結果を達成するアルゴリズム コンポーネントのコレクション。コンポーネントは多くの場合リソースを共有します。
ランタイム環境のモデル化システムのアルゴリズム リソースと実行のスケジューリングを処理するフレームワーク。

モデリング機能に関する以下の質問について考えます。モデルを設計する際に、質問とともにリストされている情報をガイドとして使用します。特定のランタイム実行環境を考慮してモデルを設計すると、やり直しや将来の変換および保守コストを回避できます。

アルゴリズムのモデル化

アーキテクチャにおける考慮事項モデル化における考慮事項関連情報
システムのドメインは?製品の必要条件 (コンポーネントのドメインに基づく)
システムは機械ドメイン、電気ドメイン、油圧ドメインなどの物理ドメインに関連していますか?物理システム
MathWorks 製品で提供されるブロックで表現できるアルゴリズムの特性は?作成しなければならないブロックは?ブロックの使用方法、作成、カスタマイズ
アーキテクチャにステート マシン コンポーネントは含まれますか?イベントドリブン システム

Stateflow チャートを使用した有限ステート マシンのモデル化 (Stateflow)

インターフェイスのモデル化

アーキテクチャにおける考慮事項モデル化における考慮事項関連情報
  • 生成されたコードで表さなければならないデータは?

  • 入力と出力をどのように表す必要がありますか? (データ型、次元、実数/複素数)

  • データはどのように変化しますか?

データの表現
データはシステムのどこでどのように取得されてシステム内部に入力されますか?入力

信号読み込みの手法の比較

  • データはシステム内部のどこでどのようにプッシュされてシステム外に出力されますか?

  • 必要な外部トリガーは?

出力
  • 各コンポーネントに定義しなければならない関数は?

  • 各エントリ ポイント関数のプロトタイプは?

関数および関数呼び出し

生成された C 関数インターフェイスをモデルのエントリポイント関数用に構成

モデルの外側のロジックを制御することによって呼び出される関数をエクスポートする必要はありますか?関数のエクスポート
システムは信号またはログ データを (たとえば、キャリブレーションを行うために) 監視しますか?C API および ASAP2 データ交換インターフェイス
たとえば、特定のハードウェアのコードを最適化するために、生成されたコードで関数または演算子を置換する必要はありますか?コード置換
詳細化の要件および今後の考慮事項はありますか?詳細化および今後の考慮事項

モデル コンポーネントのインターフェイスの定義

システムのモデル化

アーキテクチャにおける考慮事項モデル化における考慮事項関連情報
  • システムのスコープは? コントローラーは? 外部環境またはプラントは? テスト ハーネスは?

  • システムをアルゴリズム コンポーネントに分割する方法 (ロジックのチャンク) は?

  • Simulink で表すことのできるコンポーネントは?

  • コンポーネントを再利用するために設計できますか? 再利用の目的は? (作業分担やプラグインプレイなど)

コンポーネント化
  • システムのさまざまな側面で単体テストは必要ですか?

  • 複数人のチームでプロジェクトの共同作業を行っていますか?

  • 知的所有権を保護する必要はありますか?

モデル参照
クライアント/サーバー アーキテクチャをモデル化していますか?Simulink Function と Caller ブロック
関連するレガシまたはカスタムのコードは使用可能ですか?外部コードの統合外部コード統合ワークフローの選択 (Embedded Coder)
参照アーキテクチャまたは参照コンポーネントを適用できますか?モデルおよびプロジェクト テンプレート
関数は再利用できますか?関数の再利用
  • コンポーネントでグローバル データへのアクセスを共有する必要はありますか?

  • システム内で、状態の変化は発生しますか?それぞれの場合において、結果はどのように伝達されますか?

  • 考慮すべき識別子 (命名) の問題はありますか?

共有データ

ランタイム環境のモデル化

アーキテクチャにおける考慮事項モデル化における考慮事項関連情報
  • アプリケーションに必要なランタイム インターフェイスの制御レベルは?

  • システムのどの程度の部分をモデルで表すことができますか?

ランタイム インターフェイス
パラレル化を最大化するためにシステムは同時実行コンポーネントに分割されますか? どのコンポーネントですか?同時実行

マルチコア プロセッサ ターゲット

  • コンポーネントは外部クロックで駆動されますか?

  • システム コンポーネントで使用するクロック レートは?

  • コンポーネントはシングル レートと複数のレートのどちらを使用しますか?

クロックおよびクロック レート

モデル コンポーネントのインターフェイスの定義

  • システム内のコンポーネントはクロックで駆動されますか?

  • システム コンポーネントで使用するクロック レートは?

  • コンポーネントはシングル レートと複数のレートのどちらを使用しますか?

  • システム タスクと関数の優先順位は?

時間ベースのスケジューリング
  • システム内のコンポーネントはイベント (割り込み) で駆動されますか?

  • システム タスクと関数の優先順位は?

イベントベースのスケジューリング
システムが初期化イベント、リセット イベント、終了イベントを処理する必要はありますか?初期化、リセット、終了
  • システムはシングルタスク システムとマルチタスク システムのどちらですか?

  • コンポーネントをリアルタイムで実行する必要はありますか?

  • コンポーネント間の実行順序 (シーケンス) の依存関係は?

  • タスクと関数実行の時間の制約は?

タスクの実行
  • 処理プラットフォームは? (わかっている場合)

  • システムはシングルコア プロセッサとマルチコア プロセッサのどちらで実行しますか?

  • システムは分散システムですか?

  • 処理プラットフォームはハイブリッドと異種混合のどちらですか?

  • アーキテクチャは対称型マルチプロセッシングと非対称型マルチプロセッシングのどちらを使用しますか? 非対称型の場合、プラットフォーム ソフトウェアは CPU 間でどのように分割されますか?

処理プラットフォームマルチコア プロセッサ ターゲット

コード生成のモデル テンプレート

Embedded Coder® には、一般的なアプリケーションの設計用にモデルを作成する開始点として使用する一連の組み込みのテンプレートが用意されています。テンプレートを使用して、組み込みシステム アプリケーション向けのコード生成を事前に構成するモデルを作成します。

テンプレート説明
コード生成システムInport ブロックと Output ブロックで構成される基本モデル。
エクスポートする関数Function-Call Subsystem からコードを生成するためのモデル。各 Function-Call Subsystem は、サブシステムを右クリックして [C/C++ コード][関数のエクスポート] を選択し、[ビルド] をクリックして個別にエクスポートできます。
固定ステップ、マルチレート複数のレートを使用し Inport ブロック、Output ブロック、Sum ブロックで構成される固定ステップ モデル。モデルは固定ステップ離散ソルバーを使用して、モデル コンフィギュレーション パラメーター [周期的なサンプル時間の制約][制約なし] に設定し、パラメーター [各離散レートを個別のタスクとして扱う] を選択した状態で 2 つのレートを使用するように構成されます。Simulink は Rate Transition ブロックを挿入して 2 つのサンプル レートを処理します。
固定ステップ、シングル レートシングル レートを使用し Inport ブロック、Output ブロック、Sum ブロックで構成される固定ステップ モデル。モデルは固定ステップ離散ソルバーを使用するように構成されます。

テンプレートからモデルを作成するには

  1. MATLAB® の [ホーム] タブで [Simulink] をクリックします。

  2. Simulink のスタート ページで [Embedded Coder] を展開します。

  3. テンプレートにカーソルを合わせて [モデルを作成] をクリックします。テンプレートのコンテンツと設定を使用する新規モデルが Simulink エディター ウィンドウで開きます。

たとえば、テンプレートをリファレンス設計として作成して使用する方法の詳細については、モデルからのテンプレートの作成を参照してください。

関連するトピック