Main Content

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

HDL 実装モデルの Simscape アルゴリズムに対する検証

Simscape™ の線形スイッチド システム ブロックを使用してアルゴリズムを設計する場合、Simscape HDL ワークフロー アドバイザーを実行して HDL 実装モデルを生成できます。HDL 実装モデルは、HDL コード生成と互換性のある Simulink® ブロックを使用することによって Simscape アルゴリズムを表します。

実装モデルを FPGA モジュールまたはターゲット Speedgoat FPGA I/O モジュール上でプロトタイピングする前に、Simulink モデリング環境で設計の機能を検証できます。機能を検証するため、Simscape HDL ワークフロー アドバイザーの実行時に HDL 実装モデルへの検証ロジックの挿入を指定します。このロジックは、HDL 実装モデルの数値結果が元の Simscape アルゴリズムと一致するかどうかを検証します。

場合によっては、Simscape アルゴリズムと、対応する HDL 実装の間に、シミュレーション結果の不一致が生じることがあります。そのような不一致が発生すると、実装モデルをシミュレートしたときに警告またはアサーションが生成されます。警告を解決するため、以下に示すように、[実装モデルを生成] タスクの各種設定を組み合わせて使用します。

ブリッジ整流器モデル

この例では、ブリッジ整流器モデルを使用して、モデルに検証ロジックを挿入した実装モデルを生成する方法と、実装モデルをシミュレートしたときに生成される可能性のあるアサーションを解決する方法を示します。

  1. ブリッジ整流器モデルを開きます。MATLAB® コマンド ウィンドウで次のように入力します。

    open_system('sschdlexBridgeRectifierExample')
    open_system('sschdlexBridgeRectifierExample/Simscape_system')

    Simscape_system 内に、ブリッジ構成で並べられた 4 つのダイオードが表示されます。正の入力値と負の入力値の両方について、この構成は正の整流した出力を提供します。

  2. モデルで Simscape HDL ワークフロー アドバイザーを開きます。

    sschdladvisor('sschdlexBridgeRectifierExample')
  3. [状態空間パラメーターを取得] タスクを右クリックして [選択したタスクまで実行] を選択し、アドバイザーにあるタスクのうち [実装モデルを生成] を除くすべてのタスクを実行します。

  4. [実装モデルを生成] タスクで、[実装モデルの検証ロジックの生成] チェック ボックスをオンにします。その他のオプションを既定値のままにして、[このタスクを実行] を選択します。

    このタスクの実行後、このタスクの UI ウィンドウを開いたままにします。HDL 実装モデルのシミュレーションを実行すると警告が生成される場合、[実装モデルを生成] タスクで設定を変更してから、このタスクを再実行します。他のタスクを変更または再実行する必要はありません。

  5. リンクをクリックして、HDL 実装モデルを開きます。Simscape モデルのシミュレーション結果を HDL 実装モデルと比較する Validation サブシステムが表示されます。実装モデルをシミュレートします。

モデルのシミュレーションによって、シミュレーション結果の不一致を示す複数のアサーションが生成されることがわかります。診断ビューアーを開くと、次のメッセージが表示されます。

Assertion detected in 'gmStateSpaceHDL_BridgeRectifier_HDL_SimMismatch/Validation/Check Static Range1' at time 0.04186 [4982 similar]

このメッセージは、Simscape™ アルゴリズムが同等の HDL 実装と一致しないことを示しています。検証の不一致を解決するために、HDL 実装モデルが Simscape アルゴリズムと一致するまで [実装モデルを生成] タスクの各種設定を変更できます。ほとんどの場合は、数値的不一致を解決するために、これらの設定の組み合わせを使用します。

検証ロジックの許容誤差を増やす

Simscape アルゴリズムから同等の HDL 実装への変換は、丸め誤差につながります。既定の許容誤差値は比較的小さいため、特に HDL 実装モデルの単精度データ型では得ることが難しい場合があります。不一致を解決するには、以下を行います。

  1. [検証ロジックの許容誤差]1e-4 のような初期値に増やすことから開始します。

  2. [実装モデルの検証ロジックの生成] を選択してタスクを実行し、検証ロジックを含む HDL 実装モデルを生成します。

  3. モデルをシミュレートし、診断ビューアーにシミュレーションのアサーションが表示されているかどうかを確認します。シミュレーション結果で警告が発生した場合、次のステップに進んでソルバーの反復回数を増やします。

ソルバーの反復回数を増やす

物理システムで各モードに対して、線形スイッチド システム ワークフローは状態空間表現に到達します。ソルバー メソッドは反復法であり、複数の計算を実行して次のタイム ステップの正しいモードを判断します。一定数の反復が行われた後、次のタイム ステップからの出力値は前のタイム ステップからの値と同じになります。出力値におけるこの整合性は、ソルバーの反復回数が正しいことを示しています。

アドバイザーは、既定で、ソルバーの反復回数に最適な値を選択します。ソルバーの反復回数の使用を参照してください。許容誤差の値を大きくしても HDL 実装モデルの精度が向上しない場合は、ソルバーの反復回数を増やすことにより数値の不一致を解決できます。

ソルバーの反復回数を増やすと、コード ジェネレーターによって、生成された HDL 実装モデルのサンプル時間が変更されます。反復回数を大きくすると、シミュレーション時間が大幅に増えることがあります。ソルバーの反復回数を減らすを参照してください。このフローチャートは、[ソルバーの反復回数] を変更する方法を示しています。

大きい浮動小数点精度の使用

[実装モデルを生成] タスクで [浮動小数点精度] 設定を使用し、HDL Subsystem 内のアルゴリズムに使用する浮動小数点データ型を指定できます。行列係数を single または double のどちらのデータ型に保存し、計算の実行時に single または double のどちらを使用するかを指定します。

浮動小数点精度説明
Doubledouble 浮動小数点精度を使用すると、生成されたモデルの数値精度と達成可能な最大ターゲット周波数が向上します。ただし、面積の消費量とパイプライン レイテンシも増大します。
Singleこれは浮動小数点精度の既定の設定です。
Single coefficient, double computationこのモードは、浮動小数点精度の Single モードと Double モード間のトレードオフを提供します。メモリ使用量を節約するために、係数が single に保存されます。次に、精度を向上するために行列計算が double で実行されます。

このフローチャートは、[浮動小数点精度] を変更する方法と、生成された HDL 実装モデルの数値精度を向上する方法を示しています。

メモ

倍精度演算はレイテンシが大きく、浮動小数点演算に十分な遅延を割り当てるために [オーバーサンプリング係数] を大きくする必要があり、これによりサンプリング周波数が低下します。正確性と精度間のトレードオフの場合、Single coefficient, double computation[浮動小数点精度] として使用します。

double データ型を指定した後に、シミュレーション結果でまだ警告が発生する場合は、以下を行います。

  1. 最初のステップに戻って検証ロジックの許容誤差をさらに増やします。許容誤差値 1e-03 を使用してモデルをシミュレートし、数値精度要件を満たしているかどうかを確認します。

  2. 診断ビューアーにまだ警告が表示されている場合、ソルバーの反復回数を増やします。HDL 実装モデルが Simscape アルゴリズムと数値的に一致するまでこれらのステップを繰り返します。

ブリッジ整流器モデルで警告を解決するには、[検証ロジックの許容誤差]1e-4 に設定し、[浮動小数点精度]double として指定します。この検証ロジックで実装モデルを生成した後は、モデルをシミュレーションしても診断ビューアーに警告が表示されないことがわかります。

参考

関数

関連するトピック