Main Content

Simscape アルゴリズムから生成された HDL 実装モデルの FPGA サンプリング周波数の改善

Simscape™ ブロックを使用してアルゴリズムを設計する場合、Simscape HDL ワークフロー アドバイザーを実行して HDL 実装モデルを生成できます。HDL 実装モデルを開くと、HDL コード生成と互換性のある Simulink® ブロックを使用して状態空間表現をモデル化している HDL アルゴリズムが表示されます。Simscape HDL ワークフロー アドバイザーの詳細については、Simscape HDL ワークフロー アドバイザーのタスクを参照してください。

FPGA サンプリング周波数

FPGA サンプリング周波数は、モデルがハードウェア上で実行される周波数です。HDL コードを生成して FPGA にプラント モデルを展開する際に、FPGA サンプリング周波数を改善できます。FPGA サンプリング周波数は次のパラメーターに依存します。

  • FPGA クロック周波数

  • オーバーサンプリング係数

  • ソルバーの反復回数

FPGA Sampling frequency equation.

FPGA サンプル時間は、モデルがハードウェア上で実行されるサンプル時間です。これは FPGA サンプリング周波数の逆数です。

FPGA Sample Time equation.

FPGA サンプリング周波数を改善するには、FPGA クロック周波数の改善と、オーバーサンプリング係数およびソルバーの反復回数の均衡化との間のトレードオフを求めます。FPGA サンプリング周波数へのこれらのパラメーターの影響の詳細については、Troubleshooting Real-Time Hardware Deployment Issues in Simscape Hardware-in-the-Loop Workflowを参照してください。

Simscape サンプリング周波数は、Simscape サンプル時間の逆数です。Solver Configuration (Simscape) ブロック ダイアログ ボックスで、[ローカル ソルバーを使用] オプションの下の [サンプル時間] パラメーターのテキスト ボックスに Simscape サンプル時間の値を指定できます。

メモ

ハードウェアで正確な結果を得るには、Simscape サンプル時間が FPGA サンプル時間と一致していることを確認してください。単一の Simscape ネットワークを含む Simscape モデルの場合、Simscape HDL ワークフロー アドバイザーはハードウェア上でモデルを実行するターゲット周波数を計算し、オーバーサンプリング係数を自動的に処理します。ただし、必要なサンプル時間が達成できない場合、アドバイザーは、達成可能な推定周波数の詳細を示す警告メッセージを表示します。詳細については、Estimate Achievable Target Frequency Without Running Synthesisを参照してください。

前のセクションでは、昇圧コンバーター モデルを例として使用し、オーバーサンプリング係数やソルバーの反復回数を変更して FPGA サンプル時間を改善する方法を示しました。

昇圧コンバーター モデル

この例では、昇圧コンバーター モデルを使用して、生成された HDL 実装モデルにおける Simscape サンプル時間と、モデルに保存されたオーバーサンプリング係数の変化を示します。

  1. 昇圧コンバーター モデルを開きます。昇圧コンバーターの実装方法を確認するには、Simscape_system サブシステムを開きます。昇圧コンバーター モデルを開くには、MATLAB® コマンド ウィンドウで次を入力します。

    openExample('plantdeployment/OpenTheSimscapeHDLWorkflowAdvisorExample','supportingFile','sschdlexBoostConverterExample')
    open_system('sschdlexBoostConverterExample/Simscape_system')

    モデルの Simscape サンプル時間が 1e-6 であることがわかります。サンプル時間 2.00e-7 は、Simscape アルゴリズムを駆動するソースのサンプル時間に対応します。

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

    sschdladvisor('sschdlexBoostConverterExample')
  3. [実装モデルを生成] タスクまでのワークフローを実行します。

    このタスクを実行すると、生成された HDL 実装モデルへのリンクが表示されます。リンクをクリックして、HDL 実装モデルを開きます。

  4. HDL 実装モデルをシミュレートします。モデルで HDL Algorithm サブシステムに移動すると、モデルで single データ型が使用され、サンプル時間 5.00e-7 で実行されることがわかります。これは、元の Simscape モデルよりも 5 倍高速です。

  5. 次のコマンドを実行して、モデルに保存された HDL パラメーター設定を表示します。

    hdlsaveparams('gmStateSpaceHDL_sschdlexBoostConverterExamp')

    %% Set Model 'gmStateSpaceHDL_sschdlexBoostConverterExamp' HDL parameters
    hdlset_param('gmStateSpaceHDL_sschdlexBoostConverterExamp', 'AutoRoute', 'off');
    hdlset_param('gmStateSpaceHDL_sschdlexBoostConverterExamp', 'FPToleranceValue', 1.000000e-03);
    fpconfig = hdlcoder.createFloatingPointTargetConfig('NATIVEFLOATINGPOINT' ...
    , 'LatencyStrategy', 'Min' ...
    );
    hdlset_param('gmStateSpaceHDL_sschdlexBoostConverterExamp', 'FloatingPointTargetConfiguration', fpconfig);
    hdlset_param('gmStateSpaceHDL_sschdlexBoostConverterExamp', 'HDLSubsystem',...
     'gmStateSpaceHDL_sschdlexBoostConverterExamp/Simscape_system/HDL Subsystem');
    hdlset_param('gmStateSpaceHDL_sschdlexBoostConverterExamp', 'MaskParameterAsGeneric', 'on');
    hdlset_param('gmStateSpaceHDL_sschdlexBoostConverterExamp', 'Oversampling', 55);
    hdlset_param('gmStateSpaceHDL_sschdlexBoostConverterExamp', 'UseFloatingPoint', 'on');
    
    hdlset_param('gmStateSpaceHDL_sschdlexBoostConverterExamp/Simscape_system/HDL Subsystem/HDL Algorithm...
    /Mode Selection/Generate Mode Vector', 'Architecture', 'MATLAB Datapath');
    
    

保存された HDL パラメーターは、モデルでネイティブ浮動小数点モードが有効になっており、[オーバーサンプリング係数]55 で、[レイテンシ手法]MIN に設定されていることを示します。ソルバーの反復回数と HDL パラメーターの組み合わせに関して選択されたこれらの既定値は、オーバーサンプリング係数とターゲット FPGA クロック周波数の最適なトレードオフを実現し、FPGA サンプリング周波数を改善します。FPGA サンプリング周波数をさらに改善するために、ここでの説明に従って反復回数とオーバーサンプリング係数を減らすことができます。推奨された変更に基づいて、モデルにこれらの変更に対する互換性があるかどうかを確認できます。

ソルバーの反復回数を減らす

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

アドバイザーは、既定で、ソルバーの反復回数に最適な値を選択します。ソルバーの反復回数の使用を参照してください。FPGA サンプリング周波数を改善するには、ソルバーの反復回数を減らします。ソルバーの反復回数は、設計の複雑度や、設計においてワークフローで計算するモード数など、さまざまな要素に依存します。

Solver Configuration (Simscape) ブロックで [固定コストでの実行時整合性の反復を使用] チェック ボックスを選択し、[非線形の反復] テキスト ボックスにソルバーの反復回数のカスタム値を指定します。ソルバーの反復回数を 3 などの値に削減することから開始します。

Simscape HDL ワークフロー アドバイザーの [実装モデルを生成] タスクで [実装モデルの検証ロジックの生成] を選択してから、HDL 実装モデルを生成します。HDL 実装モデルをシミュレートし、[診断ビューアー] を開いて、モデルで警告またはアサーションが発生していないことを確認します。

警告またはアサーションが表示されている場合、指定したソルバーの反復回数が、状態空間設計に必要なモード数の計算に適切でないため、シミュレーションの不一致が発生していることを示しています。不一致を解決するには、検証ロジックの許容誤差の値またはソルバーの反復回数を増やします。[浮動小数点精度] を [double] に変更することは推奨されません。倍精度演算はレイテンシが大きく、十分な遅延を割り当てるために [オーバーサンプリング係数] を大きくする必要があるため、サンプリング周波数が低下します。HDL 実装モデルの Simscape アルゴリズムに対する検証を参照してください。

オーバーサンプリング係数とレイテンシ手法の使用

[オーバーサンプリング係数] は、FPGA クロック レートが HDL 実装モデルの基本サンプル レートの何倍であるかを示す係数を指定します。HDL 実装モデルにはフィードバック ループがあり、フィードバック ループ内にある浮動小数点データ型の大規模行列の乗算を実行します。フィードバック ループ内におけるこれらの浮動小数点演算によって引き起こされる大きなレイテンシに対応するため、コード ジェネレーターでは、大きなオーバーサンプリング係数値と、モデルのクロック レートのパイプライン最適化を併用します。詳細については、グローバル オーバーサンプリング クロックの生成を参照してください。

オーバーサンプリング係数と、浮動小数点演算子のレイテンシ手法をあわせて変更します。既定のオーバーサンプリング係数 55 と、最小レイテンシ手法が、最適なサンプリング周波数を実現します。最大の FPGA クロック周波数を実現するには、最大レイテンシ手法を使用します。このレイテンシ手法を指定すると、浮動小数点演算によって最大の遅延数が導入され、より高い FPGA クロック周波数が実現可能になります。これらの遅延を割り当てるには、オーバーサンプリング係数を増やします。FPGA クロック周波数の増加がオーバーサンプリング係数の増加を上回る場合、より高いサンプリング周波数を達成します。

[コンフィギュレーション パラメーター] ダイアログ ボックスからレイテンシ手法とオーバーサンプリング係数をあわせて変更するには、以下を行います。

  1. [HDL コード生成][浮動小数点] ペインで、[レイテンシ手法]Max に変更します。

  2. [HDL コード生成][グローバル設定] ペインで、HDL 設計の複雑さに応じて [オーバーサンプリング係数]100 のような値に増やします。

昇圧コンバーター モデルでは、既定の設定である [ソルバーの反復回数] = 5[オーバーサンプリング係数] = 55[レイテンシ手法] = Min によって、最適な FPGA サンプリング周波数が得られます。

参考

関数

関連するトピック