SIL シミュレーションおよび PIL シミュレーション
SIL シミュレーションおよび PIL シミュレーションとは
Embedded Coder® を使用して、モデルのソフトウェアインザループ (SIL) シミュレーションおよびプロセッサインザループ (PIL) シミュレーションを実行できます。これらのシミュレーションでは、最上位モデルまたはモデルの一部のソース コードを生成します。SIL シミュレーションでは、生成されたコードを開発用コンピューターでコンパイルおよび実行します。PIL シミュレーションでは、開発用コンピューターでソース コードをクロスコンパイルし、ターゲット プロセッサまたは同等の命令セット シミュレーターでオブジェクト コードをダウンロードして実行します。
SIL シミュレーションおよび PIL シミュレーションでは、以下を実行できます。
モデルおよび生成されたコードが数値的に等価であるかどうかをテストする。
コード カバレッジを確認する。
コード実行プロファイリングを実行する。
SIL および PIL を使用する理由
SIL および PIL により、テストを早期に実行し、欠陥を修正できます。たとえば、ノーマル モードでシステム コンポーネントをモデル化し、テストできます。その後、コンパイルされた生成コードを実行する SIL シミュレーションまたは PIL シミュレーションでテスト スイートを再利用できます。数値的な等価性をチェックするには、ノーマル シミュレーションと SIL シミュレーションまたは PIL シミュレーションの結果を比較します。Simulink® 環境に個別のインフラストラクチャでの生成コードのテストを任せる必要はありません。
以下の表に、SIL および PIL を使用できる状況を説明します。
状況 | 使用 |
---|---|
生成 (またはレガシ) コードの数値出力を検証するノーマル モードのシミュレーション用に開発されたテスト ベクトルを再利用して、モデルと生成コード間の数値的等価性をテストします。SIL/PIL Manager Verification WorkflowおよびTest Two Simulations for Equivalence (Simulink Test)を参照してください。 | SIL および PIL |
生成コードのメトリクスを収集します。
| SIL および PIL |
(IEC Certification Kit のライセンスが必要) 生成された C/C++ コードについて、ISO 26262-6、IEC 61508-3、IEC 62304、EN 50128、および EN 50657 機能安全規格で定義されたソフトウェア安全ライフサイクル全体の要件に従って、検証と妥当性確認のアクティビティを実行します。IEC Certification Kit モデルベース デザイン ワークフローにおける SIL および PIL の検証アクティビティの詳細については、Artifacts Explorer の Reference Workflow for Embedded C/C++ Applications ( | SIL および PIL |
(DO Qualification Kit のライセンスが必要) DO-178C および DO-333 安全規格の関連目標を満たすために統合プロセスの出力をテストします。詳細については、Testing of Outputs of Integration Process (DO Qualification Kit) を参照してください。この情報は、Artifacts Explorer の Model-Based Design Workflow for DO-178C ( | SIL および PIL |
ターゲット ハードウェアがない場合、PIL の便利な代替手段になります。 | SIL |
ターゲット ハードウェアがある場合、評価ボードまたは命令セット シミュレーターなどで以下を実行します。
ノーマル シミュレーション手法では、限られたメモリ リソースやターゲット固有に最適化されたコードの動作など、ハードウェアによって課される制限および要件が考慮されません。 特定のターゲットでの PIL シミュレーションの実行の詳細については、カスタム ターゲットのサンプルを参照してください。 | PIL |
メモ
SIL シミュレーション モードおよび PIL シミュレーション モードは、モデルのシミュレーション時間を短縮するように設計されていません。モデルのシミュレーションを高速化する場合は、ラピッド アクセラレータ モードを使用します。詳細については、アクセラレーションとはを参照してください。
SIL シミュレーションおよび PIL シミュレーションの仕組み
SIL シミュレーションまたは PIL シミュレーションでは、最上位モデルまたはモデルの一部についてコードが生成されます。SIL では、このコードは開発用コンピューター用にコンパイルされ、実行されます。PIL では、コードがターゲット ハードウェア用にクロスコンパイルされ、ターゲット プロセッサで実行されます。
通信チャネルを通じて、Simulink は、シミュレーションのサンプル間隔ごとにスティミュラス信号をコンピューターまたはターゲット プロセッサのコードに送信します。
最上位モデルの場合、Simulink はベース ワークスペースまたはモデル ワークスペースからのスティミュラス信号を使用します。
SIL モードまたは PIL モードでシミュレーションするモデルの一部のみを指定した場合、モデルの一部は Simulink 内に残り、モデルのこの部分についてコードは生成されません。通常、モデルのこの部分は、ハードウェアで実行されているソフトウェア向けにテスト ベクトルを提供するよう構成します。モデルのこの部分は、アルゴリズムの他の部分またはアルゴリズムが動作する環境を表すことができます。
コンピューターまたはターゲット プロセッサが Simulink から信号を受信すると、プロセッサで 1 つのサンプル ステップに対して SIL アルゴリズムまたは PIL アルゴリズムが実行されます。SIL アルゴリズムまたは PIL アルゴリズムは、このステップ中に計算された出力信号を、通信チャネルを通じて Simulink に返します。シミュレーションの 1 サンプル サイクルが完了すると、Simulink は次のサンプル間隔に進みます。プロセスは繰り返し実行され、シミュレーションが進行します。SIL シミュレーションおよび PIL シミュレーションはリアルタイムで実行されません。各サンプル期間に、Simulink およびオブジェクト コードが I/O データを交換します。
SIL シミュレーションと PIL シミュレーションの比較
SIL シミュレーションまたは PIL シミュレーションのタイプ | SIL シミュレーションの動作 | PIL シミュレーションの動作 |
---|---|---|
次で指定:
|
|
|
サブシステムから作成された SIL ブロックまたは PIL ブロックを使用する。 |
|
|
SIL および PIL のコード インターフェイス
最上位モデルなど、実行するときにスタンドアロン コードを作成するか、単一の展開可能なコンポーネントのサブシステムのビルドを右クリックします。スタンドアロン コードをコンパイルして、スタンドアロンの実行可能ファイルにリンクすることも、他のコードと統合することもできます。スタンドアロン コードのインターフェイスの詳細については、生成された C 関数インターフェイスをモデルのエントリポイント関数用に構成を参照してください。
参照モデルの階層構造のコードを生成すると、最上位モデルのスタンドアロン実行可能ファイルと、各参照モデルの "モデル参照ターゲット" と呼ばれるライブラリ モジュールが生成されます。コードが実行されると、スタンドアロンの実行可能ファイルは適用可能なモデル参照ターゲットを呼び出し、参照モデルの出力を計算します。詳細については、モデル参照ターゲットのビルドを参照してください。
生成されたコードをレガシ コードと統合するには、スタンドアロン コード インターフェイスがドキュメント化されるため、スタンドアロン コードを使用します。
メモ
SIL シミュレーションおよび PIL シミュレーションでは、カスタム コード インターフェイスは直接サポートされません。レガシ コード ツール、S-Function Builder、手書きのコードなどを使用してこれらのインターフェイスを Simulink に S-Function として組み込むことができます。その後、SIL シミュレーションおよび PIL シミュレーションを使用してカスタム コードを検証できます。
次の表に、SIL シミュレーションおよび PIL シミュレーションで生成されるインターフェイスを示します。
SIL/PIL シミュレーション | コード インターフェイス |
---|---|
最上位モデル | SIL/PIL シミュレーションでは、スタンドアロンのコード インターフェイスが生成されます。コードが存在する場合、モデルのスタンドアロン コードが呼び出されます。コードが存在しない場合、スタンドアロン コードが生成されます。 |
Model ブロック | [コード インターフェイス] ブロック パラメーターを [コード インターフェイス] ブロック パラメーターを |
SIL ブロックまたは PIL ブロック | ブロックは、スタンドアロンのコード インターフェイスを使用します。 |
スケジューリングに関する考慮事項
項目 | 情報 |
---|---|
代数ループ | SIL シミュレーションおよび PIL シミュレーションで発生するが、ノーマル モードのシミュレーションでは発生しない代数ループがあります。
詳細については、以下を参照してください。
|
フィードバック ループのエクスポートされた関数 | モデルに Function-Call Subsystem があり、コンテキストに依存する入力 (フィードバック信号など) のあるサブシステムをエクスポートすると、生成されたコードでの SIL/PIL シミュレーションの結果とモデルのノーマル モード シミュレーションの結果が異なる場合があります。SIL/PIL シミュレーションとノーマル モードのシミュレーションの結果を同一にするための 1 つの方法は、モデルでFunction-Call Feedback Latchブロックを使用することです。コンテキストに依存する入力をコンテキストに依存しない入力にすることができます。 [コンテキスト依存の入力] コンフィギュレーション パラメーターを 詳細については、以下を参照してください。
|
インポート データと追加の生成コード
SIL または PIL シミュレーションでは、モデルから生成されたコードは変更されません。インポート データを使用する場合、SIL または PIL シミュレーションによって、SIL または PIL ターゲット アプリケーションのコンパイルとリンクをサポートする必要がある追加のコードが生成されます。追加の生成コードはモデルで指定したインターフェイスに対応します。
このセクションでは、以下について説明します。
インポート データで、SIL または PIL シミュレーションでストレージが定義される場合と、ストレージを定義する必要がある場合。
SIL または PIL シミュレーションで追加のコードが生成されるインターフェイス
SIL または PIL シミュレーションのインポート データ
SIL シミュレーションおよび PIL シミュレーションでは、インポート データ定義をもつストレージ クラスを指定する信号、パラメーターおよびデータ ストアを使用できます。シミュレーションでは、以下に関連付けられたインポート データのストレージが定義されます。
コンポーネントのルート レベルにある信号 (I/O 境界上)。
ベース ワークスペースまたはデータ ディクショナリのパラメーター。モデル ワークスペースのパラメーターの場合は、次のようになります。
最上位モデルの SIL/PIL および SIL/PIL ブロック シミュレーションではストレージが定義される。
Model ブロックの SIL/PIL シミュレーションではストレージが定義されない。ストレージを定義し、MATLAB の値と一致する初期値を指定しなければなりません。
グローバルなデータ ストア。
SIL シミュレーションおよび PIL シミュレーションでは、他のインポート データのストレージは定義されません。たとえば、シミュレーションでは、次の関連付けられたインポート データのストレージは定義されません。
内部信号 (I/O 境界上にない)。内部信号のデータがポインターの使用によってインポートされた構造体内にある場合、シミュレーションでストレージが定義されることに注意してください。
ローカル データストア。
これらの場合は、テスト対象のコンポーネントによって含まれるカスタム コードまたは PIL rtw.pil.RtIOStreamApplicationFramework
API を通じてストレージを定義します。
Tunable Parameters and SIL/PILも参照してください。
追加の生成コードを生成するインターフェイス
次の表では、SIL または PIL シミュレーションでインターフェイスの追加コードが生成されるシナリオについて説明します。
シナリオ | 詳細 |
---|---|
GetSet カスタム ストレージ クラス | SIL シミュレーションおよび PIL シミュレーションは、 |
タイプ Other のカスタム ストレージ クラス | [タイプ] が classdef CSCOtherAttributes < Simulink.CustomStorageClassAttributes properties(PropertyType = 'logical scalar') SupportSILPIL = true; end end カスタム属性の詳細については、Further Customize Generated Code by Writing TLC Codeおよびストレージ クラスの TLC コードの記述によるデータ表現の詳細な制御を参照してください。 SIL または PIL アプリケーション インターフェイスを作成するために、コード ジェネレーターは、関連付けられたカスタム TLC ファイルで関数 グループ化されていないカスタム ストレージ クラスの場合は、次のようになります。
グループ化されているカスタム ストレージ クラスの場合は、次のようになります。
SIL アプリケーションまたは PIL アプリケーションがアドレスでコード内の変数にアクセスできるかどうかを判断するために、コード ジェネレーターは
コード ジェネレーターは、 タイプが ... %case "contents" %if !LibIsAccessingCustomDataForSILPIL(record) %matlab functionWithSideEffects() %endif %return LibDefaultCustomStorageContents(record, idx, reim) ... カスタム ストレージ クラスのその他の制限も参照してください。 |
AUTOSAR ランタイム環境 | 最上位モデルと Model ブロック SIL/PIL および SIL/PIL ブロックのシミュレーションを使用して、AUTOSAR ソフトウェア コンポーネントのモデルベースのテストを実行できます。ソフトウェアによって、AUTOSAR ソフトウェア コンポーネントの生成コードと基本のコンポーネント固有の AUTOSAR ランタイム環境 (RTE) がリンクされてテスト アプリケーションが作成されます。このアプリケーションでは、AUTOSAR ソフトウェア コンポーネントによって実行された AUTOSAR API の呼び出しがテストされます。 参照モデルを含む最上位の AUTOSAR ソフトウェア コンポーネントの場合は、最上位モデルまたは Model ブロック ([コード インターフェイス] が
最上位の AUTOSAR SWC 内の参照モデルに対して Model ブロック ([コード インターフェイス] が |