Main Content

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

Simscape HDL ワークフロー アドバイザーを使用した HDL コードの生成

HDL Coder™ のライセンスをお持ちの場合は、Simscape™ HDL ワークフロー アドバイザーを使用して、FPGA プラットフォームに展開するための HDL コードを Simscape モデルから生成できます。Simscape HDL ワークフロー アドバイザーは Simscape モデルの Simulink® 実装を生成し、次に HDL Coder を使用して Simulink モデルを HDL コードに変換します。Simscape モデルを HDL コードに変換すると、以下が可能になります。

  • Simscape モデルの最適化された実装を使用することで、物理システムのシミュレーションを加速する

  • FPGA の再設定機能とパラレル化機能を使用して、モデルのプロトタイプを迅速に作成する

  • ハードウェアインザループ (HIL) シミュレーションを使用して HDL 実装をリアルタイムでシミュレートする

Simscape HDL ワークフロー アドバイザーの基本的な手順

以下の手順に従い Simscape HDL ワークフロー アドバイザーを使用して、Simscape モデルを HDL コードに変換します。

  1. Simscape モデルのベースライン結果を生成します。

  2. 関数 simscape.findNonlinearBlocks を使用して、モデルに線形ブロックまたは切り替えられた線形ブロックのみが含まれていることを確認します。

  3. モデルのシミュレーション結果が、ベースライン結果と一致することを確認します。

  4. Simscape ネットワークを、リアルタイム シミュレーションと HDL コード生成用に構成します。

    1. HDL ワークフローの進捗をシミュレーション時間によって監視できるブロックを追加します。

    2. サンプル時間の情報を表示します。

    3. Simscape ネットワークを固定ステップ、固定コストのシミュレーション用に構成します。

  5. 離散モデルのシミュレーション結果が、ベースライン結果と一致することを確認します。

  6. 関数 sschdladvisor (HDL Coder) を使用して、Simscape HDL ワークフロー アドバイザーのタスクを実行します。HDL ワークフロー アドバイザーは以下を行います。

    • モデルが線形ブロックと切り替えられた線形ブロックのみを含み、リアルタイム シミュレーション用に構成されていると確認することによって、HDL コード生成の互換性をチェックする。

    • Simscape ネットワーク用の状態空間係数を抽出する。

    • HDL コード生成と互換性のある、Simscape ネットワークの実装を生成する。

  7. HDL コード生成と互換性のある実装によるシミュレーション結果が、ベースライン結果と一致することを確認します。

  8. HDL コードを生成します。

    1. 関数 hdlsetup (HDL Coder) を実行します。関数 hdlsetup は、HDL コード生成用の固定ステップ ソルバーを構成し、シミュレーションの開始時間と終了時間を指定します。

    2. モデル パラメーターと検証モデル生成の設定を保存します。

    3. 関数 makehdl を使用してコードを生成します。

Simscape HDL ワークフロー アドバイザーを実行する前に、以下を除外するようネットワークを構成してください。

  • イベント

  • モード チャート

  • 遅延

  • 有効になっている実行時パラメーター

  • 周期的ソース

  • ネットワーク接続に起因する非線形性 — モデルにこのような非線形性が実際含まれている場合、関数 sschdladvisor ではすべてのタスクが最後まで実行される可能性もありますが、ゼロ値の出力が生成されます。

Simscape HDL ワークフロー アドバイザーを使用した Simscape モデル用 HDL コードの生成

この例では、Simscape HDL ワークフロー アドバイザーを使用して Simscape モデルを HDL コードに変換する方法を説明します。Simscape ネットワークと Simulink モデルをリアルタイム シミュレーションおよび HDL コード生成用に構成する場合は、モデルの準備を参照してください。Simscape HDL ワークフロー アドバイザーを使用する準備が既にできているバージョンのモデルを開くには、Simscape HDL ワークフロー アドバイザーを使用した HDL コードの生成を参照してください。

モデルの準備

Simscape モデルを FPGA 展開用に準備するには、以下の手順に従います。

  1. ssc_bridge_rectifier モデルを開き、非表示のブロック名を表示します。MATLAB® コマンド プロンプトで、次のように入力します。

    baselineModel = 'ssc_bridge_rectifier';
    load_system(baselineModel)
    set_param(baselineModel,'HideAutomaticNames','off')
    open_system(baselineModel)

  2. ベースライン シミュレーションの結果をそれ以降の反復と比較するために、Load Voltage スコープ ブロックというラベルのついた Scope ブロックのデータ点制限を取り除き、シミュレーション データ インスペクターでのデータ ログを有効にして、Scope ブロックにデータを入力する信号を取得します。

    1. Scope ブロックを開きます。[表示][コンフィギュレーション プロパティ] をクリックします。[ログ] タブで、[データ点の制限] をオフにします。

    2. Scope ブロックへの接続を右クリックし、[選択した信号のログ] を選択します。ログ バッジ が信号の上に表示されます。

    Baseline model of a full-wave bridge rectifier.

  3. モデルをシミュレートし、シミュレーション データ インスペクターで結果を表示します。

    %% Simulate baseline model
    sim(baselineModel)
    
    %% Get Simulation Data Inspector run IDs for 
    runIDs = Simulink.sdi.getAllRunIDs;
    runID = runIDs(end);
    run = Simulink.sdi.getRun(runID);
    signal1 = run.getSignalByIndex(1);
    % run.signalCount
    signal1.checked = true;
    Simulink.sdi.view

    必要に応じて、キーボードの Space キーを押して、シミュレーション データ インスペクターのプロットをビューに収めます。

    Simulation Data Inspector results from the baseline model.

    ベースライン シミュレーションでは、全波ブリッジ整流器の負荷電圧について想定どおりの結果が返されます。

  4. アドバイザーを実行する前に、ネットワークを非線形にするブロックを特定して置換します。ブロックを特定するには、関数 simcape.findNonlearBlocks を使用します。

    simscape.findNonlinearBlocks(baselineModel)
    Found network that contains nonlinear equations in the following blocks:
        'ssc_bridge_rectifier/AC Voltage Source'
    
    The number of linear or switched linear networks in the model is 0.
    The number of nonlinear networks in the model is 1.
    
    ans =
    
      1×1 cell array
    
        {'ssc_bridge_rectifier/AC Voltage Source'}

    モデルには AC Voltage Source ブロックが含まれていますが、これは非線形方程式を生成する周期的なソースです。

  5. Simscape ネットワーク内の Controlled Voltage Source ブロックをもつ周期的ソースを、ネットワーク外の Sine Wave ブロックと置換することができます。

    1. AC Voltage Source ブロックを削除します。

    2. [Simulink][Sources] ライブラリから Sine Wave ブロックを追加します。

    3. [Simscape][Utilities] ライブラリから Simulink-PS Converter ブロックを追加します。

    4. [Simscape][Foundation Library][Electrical][Electrical Sources] ライブラリから Controlled Voltage Source ブロックを追加します。

    5. Sine Wave ブロックを Simulink-PS Converter ブロックに接続し、Simulink-PS Converter ブロックを Controlled Voltage Source ブロックに接続します。

    Modified model. The Controlled Voltage Source block and Sine Wave block replaced the AC Voltage Source block in the baseline model.

  6. 削除した AC Voltage Source ブロックのパラメーターと一致するように Sine Wave ブロックを構成します。

    1. [振幅] パラメーターを sqrt(2)*120 に設定します。

    2. [周波数 (rad/sec)] パラメーターを 60*2*pi に設定します。

    3. [サンプル時間] パラメーターを 1e-5 に設定します。その後、[サンプル時間] ボックスの横にある 3 つのドットのアイコン Icon with three vertical dots をクリックして、[変数を作成] を選択します。変数に Ts という名前をつけて、[作成] をクリックします。これで、この変数をワークスペースで表示し編集できるようになりました。

  7. ネットワークを非線形にするブロックがないことを確認します。

    % Simulate
    sim(baselineModel)
    
    % Check for nonlinear blocks
    simscape.findNonlinearBlocks(baselineModel)
    The number of linear or switched linear networks in the model is 1.
    
    ans =
    
      0×0 empty cell array

    モデルには、線形方程式または切り替えられた線形方程式を生成するブロックのみが含まれています。

  8. モデルをシミュレートし、結果をシミュレーション データ インスペクターでベースライン結果と比較します。

    % Get Simulation Data Inspector run IDs 
    runIDs = Simulink.sdi.getAllRunIDs;
    runBaseline = runIDs(end - 1);
    runSwitchedLinear = runIDs(end);
    
    % Open the Simulation Data Inspector
    Simulink.sdi.view
    
    compBaseline1 = Simulink.sdi.compareRuns(runBaseline,...
        runSwitchedLinear);

    Simulation data inspector output comparing the Run 2 modifed model to the baseline. The inspector superimposes the new plot on the old and displays a plot of their difference below.

    結果はベースライン結果に類似しています。

  9. Simscape HDL ワークフロー アドバイザーの進捗状況チェックを今後実行するために、図に示すように、Digital Clock ブロックを [Simulink][Sources] ライブラリから、Display ブロックを [Simulink][Sinks] ライブラリから追加して接続します。Digital Clock では、[サンプル時間] パラメーターを Ts に設定します。

    HDL compatible model including the Digital Clock and Display blocks

  10. モデルは今のところ、可変ステップ ソルバーを使用するよう設定されています。リアルタイム シミュレーションでは、固定ステップ ソルバーを使用しなければなりません。サンプル時間の色と注釈を使用すると、モデルに連続設定が含まれているかどうかの判別に役立ちます。サンプル時間の色と注釈をオンにするには、[デバッグ] タブにある [情報のオーバーレイ] をクリックし、[サンプル時間] グループで [色][テキスト] を選択します。

    モデルのブロック線図が更新され、[タイミング凡例] ペインが表示されます。

  11. モデルをリアルタイム シミュレーション用に構成します。

    1. Simulink モデルを固定ステップ、固定コストのシミュレーション用に構成します。[コンフィギュレーション パラメーター] ウィンドウで [ソルバー] をクリックし、以下のように設定します。

      • [タイプ][固定ステップ] に設定

      • [ソルバー][離散 (連続状態なし)] に設定

    2. Simscape ネットワークを固定ステップ、固定コストのシミュレーション用に構成します。Solver Configuration ブロックで以下を実行します。

      • [ローカル ソルバーを使用] を選択する。

      • [ソルバー タイプ][後退オイラー] に設定されていることを確認する。

      • [サンプル時間]Ts を指定する。

  12. モデルをシミュレートし、結果をシミュレーション データ インスペクターでベースライン結果と比較します。

    % Simulate
    sim(baselineModel)
    
    % Get Simulation Data Inspector run IDs 
    runIDs = Simulink.sdi.getAllRunIDs;
    runBaseline = runIDs(end - 2);
    runRealTime = runIDs(end);
    
    % Open the Simulation Data Inspector
    Simulink.sdi.view
    
    compBaseline1 = Simulink.sdi.compareRuns(runBaseline,...
        runRealTime);

    Simulation data inspector output comparing the Run 3 modified model to the baseline. The inspector superimposes the new plot on the old and displays a plot of their difference below.

    結果はベースライン結果に類似しています。

Simscape HDL ワークフロー アドバイザーを使用した HDL コードの生成

HDL コードを生成するには、Simscape HDL ワークフロー アドバイザーを、モデルの準備の節で準備した Simscape モデル上で実行するか、またはコード生成用に準備された ssc_bridge_rectifier_hdl モデルを開いて実行します。

  1. モデルの名前を変更します。

    • 「モデルの準備」の節でモデルを準備した場合は、モデルの名前を ssc_model に変更します。

    • あらかじめ HDL コード生成用に準備されたモデルを開いて使用するには、MATLAB コマンド プロンプトで以下を入力します。

      open_system('ssc_bridge_rectifier_hdl')

      モデルをローカル ディレクトリに ssc_model として保存します。

    The HDL-ready bridge rectifier model. The labels and Simulink blocks and connections are now red.

  2. Simscape HDL ワークフロー アドバイザーを実行します。

    sschdladvisor('ssc_model')

    Simscape HDL ワークフロー アドバイザーが開きます。

  3. コード生成互換性チェックを実行します。

    1. [コード生成互換性][ソルバーのコンフィギュレーションのチェック] を選択し、[このタスクを実行] をクリックします。

    2. [モデルの互換性のチェック] を選択し、[このタスクを実行] をクリックします。

    モデルがこれらのチェックをパスすると、アドバイザーがレポートします。

  4. 状態空間係数を抽出します。[状態空間の変換] を選択し、[すべて実行] をクリックします。変換には時間がかかる場合があります。

    タスクの実行後、アドバイザーは状態空間表現の概要とパラメーターの表を表示します。

    • 状態数: 5

    • 入力数: 1

    • 出力数: 1

    • モードの数: 7

    • 微分変数の数: 1

    • 離散サンプル時間: 1e-05

    パラメーターパラメーター サイズ
    A5 x 5 x 7
    B5 x 1 x 7
    F05 x 1 x 7
    C1 x 5 x 1
    D1 x 1 x 1
    Y01 x 1 x 1

    状態、モード、およびパラメーター データのサイズは、モデルを展開するために必要な FPGA リソースの量の推定に役立ちます。値が大きいほど、必要とされる FPGA リソースの量は多くなります。入出力データは、リアルタイムの展開と可視化に必要な I/O 接続の数とタイプを示します。

  5. モデルの HDL 実装を生成します。[実装モデルの生成][実装モデルを生成] を選択し、[このタスクを実行] をクリックします。

    Simscape HDL ワークフロー アドバイザーが実装モデルを生成すると、アドバイザーはタスクがパスしたことをレポートし、生成された gmStateSpaceHDL_ssc_model という名前の実装モデルへのリンクを表示します。

  6. [gmStateSpaceHDL_ssc_model] をクリックして、生成された実装モデルを開きます。

    The HDL implementation model. The Simulink blocks from the previous model connect to an interface system that contains the HDL Subsystem block.

    モデルには、元のモデルのブロックに加えて、HDL ワークフロー アドバイザーをサポートする新しいブロックが含まれています。

    • Digital ClockDisplaySine WaveLoad Voltage — 元のモデルから残されているブロック

    • Rate Transition1 — 異なるレートで動作するブロック間でデータの転送を処理します。

    • Data Type Conversion1、Data Type Conversion2 — 倍精度と単精度のデータ型間で変換を行います。HDL コード生成には単精度データが必要です。

    • HDL Subsystem — Simscape ネットワークの HDL コード生成互換バージョンが含まれています。

    • Load Voltage — 負荷電圧を表示する Scope ブロック。

  7. シミュレーションをベースライン結果と比較するために実装モデルを準備します。

    1. 自動生成されたモデルの調整と残留ブロックの削除を必要に応じて行い、モデルをより良く整えることができます。Digial Clock ブロックと Display ブロックは不要ですが、シミュレーションの結果の妨げとなることはありません。

    2. Scope ブロックへの入力信号を右クリックし、[選択した信号のログ] をクリックします。

    モデル ウィンドウの Display ブロックは、シミュレーションの経過時間を示します。

    The model colors change after you complete a run.

  8. HDL サブシステムが元の Simscape モデルに対応していることを確認するため、モデルをシミュレートし、結果をベースライン シミュレーションの結果と比較します。

    % Simulate
    sim('gmStateSpaceHDL_ssc_model')
    
    % Get Simulation Data Inspector run IDs 
    runIDs = Simulink.sdi.getAllRunIDs;
    runBaseline = runIDs(end - 3);
    runHDLImplementation = runIDs(end);
    
    % Open the Simulation Data Inspector
    Simulink.sdi.view
    
    compBaseline1 = Simulink.sdi.compareRuns(runBaseline,...
        runHDLImplementation);

    Simulation data inspector output comparing the Run 4 modified model to the baseline. The inspector superimposes the new plot on the old and displays a plot of their difference below.

    結果はベースライン結果に類似しています。Simscape モデルは HDL コード生成と互換性があります。

  9. 実装から HDL コードを生成します。

    1. HDL 実装モデルから [コンフィギュレーション パラメーター] ウィンドウにアクセスします。[HDL コード生成] を展開して [レポート] を選択します。[トレーサビリティ レポートの生成] オプションと [リソース利用レポートを生成] オプションのボックスをオンにします。

    2. 関数 hdlsetup を実行します。

      hdlsetup('gmStateSpaceHDL_ssc_model')
    3. モデルとサブシステムのパラメーター設定を保存します。

      hdlsaveparams('gmStateSpaceHDL_ssc_model');
      
      %% Set Model 'gmStateSpaceHDL_ssc_model' HDL parameters
      hdlset_param('gmStateSpaceHDL_ssc_model', 'FloatingPointTargetConfiguration', hdlcoder.createFloatingPointTargetConfig('NativeFloatingPoint' ...
      , 'LatencyStrategy', 'MIN') ...
      );
      hdlset_param('gmStateSpaceHDL_ssc_model', 'HDLSubsystem', 'gmStateSpaceHDL_ssc_model/HDL Subsystem');
      hdlset_param('gmStateSpaceHDL_ssc_model', 'MaskParameterAsGeneric', 'on');
      hdlset_param('gmStateSpaceHDL_ssc_model', 'Oversampling', 49);
      
      % Set SubSystem HDL parameters
      hdlset_param('gmStateSpaceHDL_ssc_model/HDL Subsystem', 'FlattenHierarchy', 'on');
      
      hdlset_param('gmStateSpaceHDL_ssc_model/HDL Subsystem/HDL Algorithm/Mode Selection/Generate Mode Vector', 'Architecture', 'MATLAB Datapath');
      
      % Set SubSystem HDL parameters
      hdlset_param('gmStateSpaceHDL_ssc_model/HDL Subsystem/HDL Algorithm/State Update/Multiply State', 'SharingFactor', 1);
      
    4. 検証モデル生成の設定を保存します。

      HDLmodelname = 'gmStateSpaceHDL_ssc_model';
      hdlset_param(HDLmodelname, 'GenerateValidationModel', 'on');
    5. HDL コードを生成します。

      makehdl('gmStateSpaceHDL_ssc_model/HDL Subsystem')
      ### Generating HDL for 'gmStateSpaceHDL_ssc_model/HDL Subsystem'.
      ### Using the config set for model gmStateSpaceHDL_ssc_model for HDL code generation parameters.
      ### Running HDL checks on the model 'gmStateSpaceHDL_ssc_model'.
      ### Begin compilation of the model 'gmStateSpaceHDL_ssc_model'...
      ### Applying HDL optimizations on the model 'gmStateSpaceHDL_ssc_model'...
      ### The code generation and optimization options you have chosen have introduced additional pipeline delays.
      ### The delay balancing feature has automatically inserted matching delays for compensation.
      ### The DUT requires an initial pipeline setup latency. Each output port experiences these additional delays.
      ### Output port 1: 1 cycles.
      ### Begin model generation.
      ### Model generation complete.
      ### Clock-rate pipelining results can be diagnosed by running this script: hdlsrc\gmStateSpaceHDL_ssc_model\highlightClockRatePipelining.m
      ### To clear highlighting, click the following MATLAB script: hdlsrc\gmStateSpaceHDL_ssc_model\clearhighlighting.m
      ### Generating new validation model: gm_gmStateSpaceHDL_ssc_model_vnl.
      ### Validation model generation complete.
      ### Begin VHDL Code Generation for 'gmStateSpaceHDL_ssc_model'.
      ### MESSAGE: The design requires 49 times faster clock with respect to the base rate = 3.33333e-06.
      ### Working on gmStateSpaceHDL_ssc_model/HDL Subsystem/HDL Algorithm/Mode Selection/State Mode Vector To Index/Subsystem7 as ...
          hdlsrc\gmStateSpaceHDL_ssc_model\Subsystem1.vhd.
      ### Working on gmStateSpaceHDL_ssc_model/HDL Subsystem/HDL Algorithm/Mode Selection/State Mode Vector To Index/Subsystem6 as ...
          hdlsrc\gmStateSpaceHDL_ssc_model\Subsystem1_block.vhd.
      ### Working on gmStateSpaceHDL_ssc_model/HDL Subsystem/HDL Algorithm/Mode Selection/State Mode Vector To Index/Subsystem5 as ...
          hdlsrc\gmStateSpaceHDL_ssc_model\Subsystem1_block1.vhd.
      ### Working on gmStateSpaceHDL_ssc_model/HDL Subsystem/HDL Algorithm/Mode Selection/State Mode Vector To Index/Subsystem4 as ...
          hdlsrc\gmStateSpaceHDL_ssc_model\Subsystem1_block2.vhd.
      ### Working on gmStateSpaceHDL_ssc_model/HDL Subsystem/HDL Algorithm/Mode Selection/State Mode Vector To Index/Subsystem3 as ...
          hdlsrc\gmStateSpaceHDL_ssc_model\Subsystem1_block3.vhd.
      ### Working on gmStateSpaceHDL_ssc_model/HDL Subsystem/HDL Algorithm/Mode Selection/State Mode Vector To Index/Subsystem2 as ...
          hdlsrc\gmStateSpaceHDL_ssc_model\Subsystem1_block4.vhd.
      ### Working on gmStateSpaceHDL_ssc_model/HDL Subsystem/HDL Algorithm/Mode Selection/State Mode Vector To Index/Subsystem1 as ...
          hdlsrc\gmStateSpaceHDL_ssc_model\Subsystem1_block5.vhd.
      ### Working on gmStateSpaceHDL_ssc_model/HDL Subsystem/nfp_mul_single as hdlsrc\gmStateSpaceHDL_ssc_model\nfp_mul_single.vhd.
      ### Working on gmStateSpaceHDL_ssc_model/HDL Subsystem/nfp_add_single as hdlsrc\gmStateSpaceHDL_ssc_model\nfp_add_single.vhd.
      ### Working on dot_product_2 as hdlsrc\gmStateSpaceHDL_ssc_model\dot_product_2.vhd.
      ### Working on dot_product_1 as hdlsrc\gmStateSpaceHDL_ssc_model\dot_product_1.vhd.
      ### Working on gmStateSpaceHDL_ssc_model/HDL Subsystem/nfp_uminus_single as hdlsrc\gmStateSpaceHDL_ssc_model\nfp_uminus_single.vhd.
      ### Working on gmStateSpaceHDL_ssc_model/HDL Subsystem/nfp_relop_single as hdlsrc\gmStateSpaceHDL_ssc_model\nfp_relop_single.vhd.
      ### Working on HDL Subsystem_tc as hdlsrc\gmStateSpaceHDL_ssc_model\HDL_Subsystem_tc.vhd.
      ### Working on gmStateSpaceHDL_ssc_model/HDL Subsystem as hdlsrc\gmStateSpaceHDL_ssc_model\HDL_Subsystem.vhd.
      ### Generating package file hdlsrc\gmStateSpaceHDL_ssc_model\HDL_Subsystem_pkg.vhd.
      ### Code Generation for 'gmStateSpaceHDL_ssc_model' completed.
      ### Creating HDL Code Generation Check Report HDL_Subsystem_report.html
      ### HDL check for 'gmStateSpaceHDL_ssc_model' complete with 0 errors, 7 warnings, and 2 messages.
      ### HDL code generation complete.

      HDL コード生成レポートが開き、生成されたエラーまたは警告があれば表示されます。レポートには、FPGA 展開のリソース要件を記述するリソース利用レポートへのリンクが含まれます。

    生成された HDL コードと検証モデルは、hdlsrc\gmStateSpaceHDL_ssc_model\html ディレクトリに保存されます。生成されたコードは、HDL_Subsystem_tc.vhd として保存されます。

    指定したターゲットへの展開用に HDL コードを生成するには、HDL ワークフロー アドバイザーを使用します。

参考

ブロック

Simscape ブロック

関数

関連する例

詳細