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) について、最初のグラフは生成されたモデルの出力を表し、中央のグラフは実装モデルの出力を表します。下のグラフは、両モデルの出力の差を計算します。出力が一致するため、誤差はゼロです。
参考
関数
関連するトピック
- Simscape Electrical 入門 (Simscape Electrical)
- Simscape ハードウェアインザループ ワークフロー入門
- HDL 実装モデルの Simscape アルゴリズムに対する検証