Main Content

整数オーバーフローおよびゼロ除算エラーの検出

以下の節では、sldvdemo_cruise_control_fxp_fixed モデルの整数オーバーフローおよびゼロ除算エラーを解析する方法について説明します。

モデルの解析

モデルを開き、整数オーバーフローおよびゼロ除算エラーがあるかどうかをチェックします。

1.sldvdemo_cruise_control_fxp_fixed モデルを開きます。

open_system('sldvdemo_cruise_control_fxp_fixed');

2.[Design Verifier] タブの [準備] セクションのモード設定のドロップダウン メニューから、[設定] をクリックします。

3.[コンフィギュレーション パラメーター] ダイアログ ボックスで、[Design Verifier][設計エラー検出] を選択します。

4.[設計エラー検出] ペインで以下を選択します。

  • 整数のオーバーフロー

  • ゼロ除算

5.[コンフィギュレーション パラメーター] ダイアログ ボックスの [診断][データ有効性] ペインにおいて [信号][オーバーフロー時にラップ][信号][オーバーフローで飽和]、および [パラメーター][オーバーフローの検出] の設定を [エラー] にします。

6.[OK] をクリックしてそれらの設定を保存し、[コンフィギュレーション パラメーター] ダイアログ ボックスを閉じます。

7.[モード] セクションで、[設計エラー検出] を選択します。

8.[設計エラーの検出] をクリックします。

解析が完了すると、

  • 解析結果に基づいてモデルが強調表示されます。

  • Simulink® Design Verifier™ の [結果] ダイアログ ボックスが開き、解析の概要が表示されます。

解析結果のレビュー

モデルの結果のレビュー

以下の手順からわかるように、派生範囲を使用することで取り得る信号値が特定され、エラーの原因把握に役立ちます。

1.sldvdemo_cruise_control_fxp_fixed モデルの最上位で、Fixed-Point Controller サブシステムをクリックします。

Simulink® Design Verifier™ の [結果] ウィンドウに、解析で計算された Outport の取り得る信号値の派生範囲が表示されます。

  • Outport 1 (throt) の値の範囲は –2.6101 ~ 2.6096 です。

  • Outport 2 (target) の値の範囲は 0 ~ 255.9960 です。

fp_controller_sldv_results.png

2.sldvdemo_cruise_control_fxp_fixed モデルのそれぞれの Outport ブロックをクリックして、信号範囲の値が同じであることを確認します。

3.Fixed-Point Controller サブシステムを開きます。

このサブシステムの 2 つのオブジェクトがレッドの輪郭で表示されています。PI Controller サブシステムはグリーンの輪郭で表示されています。

4.レッドの輪郭の Sum ブロックをクリックします。これは PI Controller サブシステムにエラー入力を提供しています。

sum_block_red.png

この Sum ブロックはオーバーフロー エラーを生成できます。この解析では、Sum ブロックの出力が [–128..127.9960] の範囲を超える計算結果となり得るテスト ケースが見つかりました。

sum_overflow_sldv_results.png

5.このエラーについてより詳細に理解するには、Sum ブロックへの入力を提供する 2 つのブロックをクリックします。Simulink® Design Verifier™ の [結果] ウィンドウに、その派生範囲が表示されます。

  • Bus ブロックからの 3 番目の Outport の範囲は、[0..256] です。

  • Switch ブロックからの Outport の範囲は、[0..256] です。

これらの信号範囲の加算操作により Sum ブロックの Outport の範囲 [–128..128] を超える値が算出される可能性があることがわかります。

解析により、Sum ブロックのオーバーフロー エラーがレポートされます。解析はこのエラーを伝播せず、Sum ブロック出力がその後の計算で有効範囲内になると仮定します。

6.グリーンの輪郭の PI Controller サブシステムをクリックします。PI Controller サブシステム内のブロックは、オーバーフローまたはゼロ除算エラーを生成できません。PI Controller サブシステムが解析される際に、Sum ブロックからのオーバーフローは無視され、サブシステムへの入力は有効であると仮定されます。

sldvdemo_cruise_control_fxp_fixed モデルは開いたままにしておきます。次のセクションでは、Sum ブロックのオーバーフロー エラーを生成するテスト ケースを確認するためのハーネス モデルを作成します。

ハーネス モデルのレビュー

エラーの実例を示すテスト ケースを確認するため、Simulink® Design Verifier™ の [結果] ウィンドウからハーネス モデルを生成します。

1.sldvdemo_cruise_control_fxp_fixed モデル内で、Fixed-Point Controller サブシステムを開きます。

2.レッドの輪郭の Sum ブロックをクリックします。これは PI Controller サブシステムにエラー入力を提供しています。

Simulink® Design Verifier™ の [結果] ウィンドウには、オーバーフロー エラーが発生したという情報が表示されます。

3.Simulink® Design Verifier™ の [結果] ウィンドウで、[反例を表示] をクリックします。

このオーバーフロー エラーの原因となる信号値をもつテスト ケースを含むハーネス モデルが作成されます。

ハーネス モデルで [Signal Builder] ダイアログ ボックスが開き、Test Case 2 が表示されます。

4.[シミュレーションの開始] ボタンをクリックして、このテスト ケースを含むモデルのシミュレーションを実行します。

シミュレーションは想定されたとおり、Fixed-Point Controller サブシステムの Sum ブロックにおけるオーバーフロー エラーにより失敗します。

詳細については、Simulink Design Verifier ハーネス モデルの管理を参照してください。

解析レポートのレビュー

sldvdemo_cruise_control_fxp_fixed モデルの解析レポートに関する詳細情報を含む HTML レポートは、次の手順で表示します。

1.Simulink® Design Verifier™ の [結果] ウィンドウで、結果概要を再表示するには [概要に戻る] をクリックします。

2.[詳細な解析レポートを生成] をクリックします。

詳細な解析レポートが生成されます。これはブラウザーで開きます。

sldvdemo_cruise_control_fxp_fixed モデルについて、レポートの [設計エラー検出オブジェクティブのステータス] の章に詳細な結果が次の 2 つのカテゴリで表示されます。

  1. 有効なオブジェクティブ — エラーが生成されなかったモデル オブジェクト

  2. 反例によって反証されたオブジェクティブ — テスト ケースがエラーを生成したモデル オブジェクト

判定結果または条件結果をもつモデル オブジェクトは、デッド ロジック検出を受けます。判定オブジェクティブまたは条件オブジェクティブをもつモデル オブジェクトの完全なリストの詳細については、カバレッジの対象となるモデル オブジェクト (Simulink Coverage)を参照してください。

詳細については、結果の確認を参照してください。

参考

整数オーバーフロー エラーの検出

複素数入力をもつモデルでの整数オーバーフローの検出