PIL を使用したコードの検証と妥当性確認
この例では、PIL を使用したコードの検証と妥当性確認に Embedded Coder® Support Package for ARM® Cortex®-M Processors を使用する方法を示します。
はじめに
この例では、プロセッサインザループ (PIL) シミュレーションを実行するための Simulink® モデルの構成方法を学習します。PIL シミュレーションでは、生成されたコードは QEMU ARM Cortex-M3 エミュレーター上で実行されます。PIL シミュレーションの結果が Simulink に転送され、シミュレーションとコード生成の結果の数値的等価性が検証されます。PIL 検証プロセスは、設計サイクルの重要な部分であり、展開コードの動作が設計と一致することを確認します。
この例では、以下を行う方法を示して、Simulink のコード生成と検証のワークフローについて紹介します。
ARM Cortex-M3 (QEMU) エミュレーター ターゲット上で PIL シミュレーションを実行するように Simulink モデルを構成する
前提条件
Getting Started with Embedded Coder Support Package for ARM Cortex-M Processorsの例を完了することをお勧めします。

タスク 1 - PIL ブロックを使用してサブシステムの生成コードを検証する
この例では、サブシステム コードの検証に PIL ブロックを使用する方法を示します。このアプローチを使用すると、次のことが可能になります。
サブシステムの生成コードを検証できます。
テスト ベクトルまたはスティミュラスの入力を提供するためにテスト ハーネス モデルを提供する必要があります。
元のサブシステムを生成された PIL ブロックと入れ替える必要があります。元のサブシステムが失われるため、この状態でモデルを保存しないように注意する必要があります。
1. arm_cortex_m_pil_block.slx モデルを開きます。このモデルは "ARM Cortex-M3 (QEMU)" ターゲット用に構成されています。ここでの目的は、QEMU ARM Cortex-M3 エミュレーター上で実行する "Controller" サブシステムから PIL ブロックを作成することです。
2. [モデル化] タブを開き、Ctrl+E を押して [コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。[コード生成]、[検証]、[ブロックの作成] に移動し、[PIL] を選択します。

あるいは、MATLAB® コマンド ウィンドウからコマンド set_param('arm_cortex_m_pil_block','CreateSILPILBlock','PIL') を使用して PIL を有効にすることもできます。
3. "Controller" サブシステムの PIL ブロックを作成します。
a. PIL 内の "Controller" ブロックを右クリックし、[C/C++ コード] に移動して、[このサブシステムをハードウェアに展開] を選択します。
4. PIL シミュレーションを実行します。
a. "PIL Cortex-M3 Controller" ブロックをコピーして、PIL ブロック内に配置します。
b. [実行] アイコンをクリックして (または Ctrl+T を押して)、モデルをシミュレーションします。

5. シミュレーションを開始すると、PIL ブロックを実行する QEMU セッションが起動します。"Manual Switch" ブロックをダブルクリックすることで、元のサブシステムと PIL ブロックのサブシステムを切り替えることができます。"Numerical Differences" ブロックをダブルクリックすると、シミュレーションされた "Controller" サブシステムと QEMU エミュレーター上で実行されている PIL ブロックの違いが表示されます。

タスク 2 - PIL を使用して参照モデルのコードを検証する
この例では、PIL シミュレーションを実行して参照モデルの生成コードを検証する方法を示します。このアプローチを使用すると、次のことが可能になります。
参照モデルの生成コードを検証できます。
テスト ベクトルまたはスティミュラスの入力を提供するためにテスト ハーネス モデルを提供する必要があります。
Model ブロックをノーマル モードと PIL シミュレーション モードの間で簡単に切り替えることができます。
1. arm_cortex_m_model_pil_block.slx モデルを開きます。このモデルは "ARM Cortex-M3 (QEMU)" ターゲット用に構成されています。モデルには、両方とも同じ参照モデルを指す 2 つのModelブロックが含まれています。一方の Model ブロックを PIL モードで実行するように構成し、もう一方はノーマル モードに設定します。
2. "CounterA" Model ブロックを構成して PIL モードで実行します。
a. "CounterA" ブロックを右クリックし、[ブロック パラメーター (ModelReference)] を選択します。
b. [シミュレーション モード]、[プロセッサインザループ (PIL)] を選択し、[OK] をクリックします。

3. モデルの実行が始まると、"Scope1" に QEMU エミュレーターで実行中の PIL シミュレーションの出力が表示され、"Scope2" にノーマル モード シミュレーションの出力が表示されます。

タスク 3 - PIL を使用して最上位モデルのコードを検証する
この例では、PIL シミュレーションを実行してモデルの生成コードを検証する方法を示します。このアプローチを使用すると、次のことが可能になります。
最上位モデルの生成コードを検証できます。
MATLAB ワークスペースからテスト ベクトルまたはスティミュラスの入力を読み込むようにモデルを構成する必要があります。
モデル全体をノーマル モードと PIL シミュレーション モードの間で簡単に切り替えることができます。
1. arm_cortex_m_top_model_pil.slx モデルを開きます。このモデルは "ARM Cortex-M3 (QEMU)" ターゲット用に構成されています。
2. 最上位モデルの PIL シミュレーションを実行します。
a. [アプリ] タブを開き、[SIL/PIL マネージャー] を選択します。
b. [SIL/PIL] タブで [SIL/PIL モード]、[プロセッサインザループ (PIL)] オプションを選択し、[検証の実行] をクリックします。

3. PIL シミュレーションが終了すると、ベース ワークスペースに "logsOut" 変数が作成されます。"logsOut" のデータに PIL シミュレーションの結果が格納されます。以下のコマンドを使用して、信号 "count_a" と "count_b" についてログ記録されたデータにアクセスできます。
count_a = get(logsOut,'count_a');
count_a.Values.Data
count_b = get(logsOut,'count_b');
count_b.Values.Data
まとめ
この例では、PIL シミュレーションを使用したコード検証のワークフローを紹介しました。