Main Content

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: Out1Scope ブロックを開きます。上のグラフは生成されたモデルの出力を表し、中央のグラフは実装モデルの出力を表します。下のグラフは、両モデルの出力の差を計算します。出力が一致するため、誤差はゼロです。

参考

関数

関連するトピック