Simscape モデルの HDL コードの生成
この例では、Simscape™ ブロックを使用する半波整流器モデルの HDL コードを生成する方法を説明します。Simscape HDL ワークフロー アドバイザーを使用して HDL 実装モデルを生成します。その後、実装モデルの HDL コードを生成できます。Simscape ハードウェアインザループ ワークフロー入門を参照してください。
半波整流器モデル
半波整流器モデルを開くには、MATLAB® コマンド プロンプトで、次のように入力します。
open_system('sschdlexHalfWaveRectifierExample')
このモデルを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')
半波整流器は、線形ブロックである抵抗器と、線形スイッチド システム ブロックであるダイオードで構成されます。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', 'FloatingPointTargetConfiguration', hdlcoder.createFloatingPointTargetConfig('NativeFloatingPoint' ... , 'LatencyStrategy', 'Min', 'HandleDenormals', 'Off') ... ); 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', 60); % Set SubSystem HDL parameters hdlset_param('gmStateSpaceHDL_HalfWaveRectifier_HDL/Simscape_system/HDL Subsystem', 'FlattenHierarchy', '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 コードを生成します。浮動小数点演算子では遅延が生じる可能性があります。設計にはフィードバック ループが含まれているので、フィードバック ループ内の演算子に十分な遅延を割り当てるために、モデルではクロックレート パイプラインを[オーバーサンプリング係数]の大きい値と組み合わせて使用します。このモデルには、[オーバーサンプリング係数]の値60
と、クロックレート パイプラインの最適化が保存されています。
詳細は、以下を参照してください。
HDL コードを生成する前に、検証モデルの生成を有効にします。検証モデルでは、コード生成後に生成されたモデルの出力と元のモデルが比較されます。詳細については、生成されたモデルと検証モデルを参照してください。
次のコマンドを実行して、検証モデルの生成設定を Simulink モデルに保存します。
HDLmodelname =“gmStateSpaceHDL_HalfWaveRectifier_HDL'; hdlset_param(HDLmodelname,'TargetDirectory','C:/Temp/hdlsrc'); hdlset_param(HDLmodelname,'GenerateValidationModel','on');
HDL コードを生成するには、次のコマンドを実行します。
makehdl(“gmStateSpaceHDL_HalfWaveRectifier_HDL/HDL Subsystem');
生成された HDL コードと検証モデルはC:/Temp/hdlsrc
ディレクトリに保存されます。生成されたコードは、HDL_Subsystem_tc.vhd
として保存されます。検証モデルを開くには、コマンド ウィンドウのコード生成ログでgm_gmStateSpaceHDL_HalfWaveRectifier_HDL_vnl.slx
へのリンクをクリックします。
検証モデルのHDL Subsystem_vnl
サブシステムの出力でCompare
ブロックを開きます。次に、Assert_Out1
ブロックを開きます。HDL コード生成後のシミュレーション結果を確認するには、Compare: Out1
Scope ブロックを開きます。上のグラフは生成されたモデルの出力を表し、中央のグラフは実装モデルの出力を表します。下のグラフは、両モデルの出力の差を計算します。出力が一致するため、誤差はゼロです。
参考
関数
関連するトピック
- Simscape Electrical 入門(Simscape Electrical)
- Simscape ハードウェアインザループ ワークフロー入門
- HDL 実装モデルの Simscape アルゴリズムに対する検証