Main Content

Simscape モデルの HDL コードの生成

この例では、Simscape™ ブロックを使用する半波整流器モデルの HDL コードを生成する方法を示します。Simscape HDL ワークフロー アドバイザーを使用して HDL 実装モデルを生成します。その後、実装モデルの HDL コードを生成できます。Simscape ハードウェアインザループ ワークフロー入門を参照してください。

半波整流器モデル

半波整流器モデルを開くには、MATLAB® コマンド プロンプトで、次のように入力します。

open_system('sschdlexHalfWaveRectifierModel')

このモデルを HalfWaveRectifier_HDL としてローカルに保存し、ワークフローを実行します。

open_system('HalfWaveRectifier_HDL')
set_param('HalfWaveRectifier_HDL', 'SimulationCommand', 'Update')

モデルの最上位レベルでは、Simscape_system ブロックが半波整流器アルゴリズムをモデル化しています。モデルは正弦波入力を受け入れ、Rate Transition ブロックを使用して連続時間入力を離散化し、出力を計算する Scope ブロックをもちます。半波整流器アルゴリズムを参照するには、Simscape_system サブシステムをダブルクリックします。

open_system('HalfWaveRectifier_HDL/Simscape_system')

半波整流器は、線形ブロックである Resistor と、線形スイッチド システム ブロックである Diode で構成されます。Simscape モデルは、HDL 互換性をもつように事前構成されています。入力端子と出力端子のインターフェイスにおいて、モデルには Simulink-PS Converter ブロックと PS-Simulink Converter ブロックがあります。ソルバー設定は、Simscape HDL ワークフロー アドバイザーと互換性をもつように構成されています。Solver Configuration ブロックの [ブロック パラメーター] ダイアログ ボックスを開くと、[ローカル ソルバーを使用] が選択されていて、Backward Euler[ソルバー タイプ] として指定されています。Simscape ハードウェアインザループ ワークフロー入門を参照してください。

機能を参照するには、モデルをシミュレートしてから Scope ブロックを開きます。

sim('HalfWaveRectifier_HDL')
open_system('HalfWaveRectifier_HDL/Scope')

Simscape HDL ワークフロー アドバイザーの実行

コードを生成できる HDL 実装モデルを生成するには、Simscape HDL ワークフロー アドバイザーを使用します。アドバイザーを開くには、次のコマンドを実行します。

sschdladvisor('HalfWaveRectifier_HDL')

このコマンドで、モデル アドバイザーのキャッシュが更新され、Simscape HDL ワークフロー アドバイザーが開きます。Simscape HDL ワークフロー アドバイザーと各種のタスクの詳細については、そのフォルダーまたはタスクを右クリックして、[これはなに?] を選択します。Simscape HDL ワークフロー アドバイザーのタスクも参照してください。

ワークフローを実行して、HDL 実装モデルの機能を元の Simscape アルゴリズムと比較するには、[実装モデルを生成] ステップを選択し、次に [実装モデルの検証ロジックの生成] チェック ボックスを選択します。[検証ロジックの許容誤差]0.001 を使用します。[実装モデルを生成] ステップを右クリックし、[選択したタスクまで実行] を選択します。

アドバイザーにより、HDL 実装モデルと状態空間検証モデルが生成されます。実装モデルは、元の Simscape モデルと同じ名前をもち、接頭辞 gmStateSpaceHDL_ を使用します。状態空間検証モデルは、実装モデルと同じ名前をもち、接尾辞 _vnl を使用します。

HDL 実装モデルを開いて調査

[実装モデルを生成] タスクで、実装モデルを開くリンクをクリックします。モデルには、HDL Subsystem ブロックを含む Simscape_system サブシステムが含まれています。HDL Subsystem は、Simscape モデルから生成した状態空間表現をモデル化します。

open_system('gmStateSpaceHDL_HalfWaveRectifier_HDL')
open_system('gmStateSpaceHDL_HalfWaveRectifier_HDL/Simscape_system')
set_param('gmStateSpaceHDL_HalfWaveRectifier_HDL','SimulationCommand','Update')

このサブシステムの端子は、元の Simscape モデル内の Simulink-PS Converter ブロックおよび PS-Simulink Converter ブロックと同じ名前を使用します。このサブシステム内を移動すると、いくつかの遅延、加算器、および Matrix Multiply ブロックが状態空間方程式をモデル化していることがわかります。

open_system('gmStateSpaceHDL_HalfWaveRectifier_HDL/Simscape_system/HDL Subsystem/HDL Algorithm')

HDL 実装モデルをシミュレートするには、次のコマンドを入力します。Scope ブロックを開いて結果を表示します。

sim('gmStateSpaceHDL_HalfWaveRectifier_HDL')
open_system('gmStateSpaceHDL_HalfWaveRectifier_HDL/Scope')

このモデル内の HDL Subsystem ブロックに対して HDL コードが生成されます。

HDL アルゴリズムの検証

HDL 実装モデルの機能を元の Simscape アルゴリズムと比較するには、状態空間検証モデルを開いてシミュレートします。

open_system('gmStateSpaceHDL_HalfWaveRectifier_HDL_vnl')
sim('gmStateSpaceHDL_HalfWaveRectifier_HDL_vnl')

このモデルの出力は、元の Simscape モデルと一致します。シミュレーションではアサーションが生成されませんが、これは、出力が一致することを示しています。より系統的な検証については、HDL 実装モデルの Simscape アルゴリズムに対する検証を参照してください。

HDL コードと検証モデルの生成

HDL モデルとサブシステム パラメーターの設定は、次のコマンドを使用して保存されます。

hdlsaveparams('gmStateSpaceHDL_HalfWaveRectifier_HDL');
%% Set Model 'gmStateSpaceHDL_HalfWaveRectifier_HDL' HDL parameters
hdlset_param('gmStateSpaceHDL_HalfWaveRectifier_HDL', 'FPToleranceValue', 1.000000e-03);
fpconfig = hdlcoder.createFloatingPointTargetConfig('NATIVEFLOATINGPOINT' ...
, 'LatencyStrategy', 'Min' ...
);
hdlset_param('gmStateSpaceHDL_HalfWaveRectifier_HDL', 'FloatingPointTargetConfiguration', fpconfig);
hdlset_param('gmStateSpaceHDL_HalfWaveRectifier_HDL', 'HDLSubsystem', 'gmStateSpaceHDL_HalfWaveRectifier_HDL/Simscape_system/HDL Subsystem');
hdlset_param('gmStateSpaceHDL_HalfWaveRectifier_HDL', 'MaskParameterAsGeneric', 'on');
hdlset_param('gmStateSpaceHDL_HalfWaveRectifier_HDL', 'Oversampling', 13);
hdlset_param('gmStateSpaceHDL_HalfWaveRectifier_HDL', 'UseFloatingPoint', 'on');

hdlset_param('gmStateSpaceHDL_HalfWaveRectifier_HDL/Simscape_system/HDL Subsystem/HDL Algorithm/Mode Selection/Generate Mode Vector', 'Architecture', 'MATLAB Datapath');

このモデルは single データ型を使用し、Native Floating Point モードで HDL コードを生成します。浮動小数点演算子では遅延が生じる可能性があります。設計にフィードバック ループが含まれているので、フィードバック ループ内の演算子に十分な遅延を割り当てるために、モデルでクロックレート パイプラインを使用します。

詳細は、以下を参照してください。

HDL コードを生成する前に、検証モデルの生成を有効にします。検証モデルでは、コード生成後に生成されたモデルの出力と元のモデルが比較されます。詳細については、生成されたモデルと検証モデルを参照してください。

次のコマンドを実行して、検証モデルの生成設定を Simulink モデルに保存します。

HDLmodelname = 'gmStateSpaceHDL_HalfWaveRectifier_HDL';
hdlset_param(HDLmodelname, 'TargetDirectory', 'C:/Temp/hdlsrc');
hdlset_param(HDLmodelname, 'GenerateValidationModel', 'on');

HDL コードを生成するには、次のコマンドを実行します。

makehdl('gmStateSpaceHDL_HalfWaveRectifier_HDL/Simscape_system/HDL Subsystem');

生成された HDL コードと検証モデルは C:/Temp/hdlsrc ディレクトリに保存されます。生成されたコードは、HDL_Subsystem.vhd として保存されます。検証モデルを開くには、コマンド ウィンドウのコード生成ログで gm_gmStateSpaceHDL_HalfWaveRectifier_HDL_vnl.slx へのリンクをクリックします。

検証モデルの HDL Subsystem_vnl サブシステムの出力で Compare ブロックを開きます。HDL コード生成後のシミュレーション結果を確認するには、Double click to turn 'on/off' all scopes ブロックをダブルクリックします。それぞれのスコープ (IR、Iout、および Vdiode) について、最初のグラフは生成されたモデルの出力を表し、中央のグラフは実装モデルの出力を表します。下のグラフは、両モデルの出力の差を計算します。出力が一致するため、誤差はゼロです。

参考

関数

関連するトピック