Main Content

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

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

この例では、Simcape™ ブロックを使用する半波整流器モデルの 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')
### Running Simscape HDL Workflow Advisor for <a href="matlab:(HalfWaveRectifier_HDL)">HalfWaveRectifier_HDL</a>

このコマンドで、モデル アドバイザーのキャッシュが更新され、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 アルゴリズムに対する検証を参照してください。

Simscape アルゴリズムには、Simscape HDL ワークフロー アドバイザーを使用して実装モデルを生成するための互換性がない場合があります。このような場合、アドバイザーで特定のタスクを実行すると、タスクが失敗する可能性があります。HDL 互換にする方法の詳細については、以下を参照してください。

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

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

hdlsaveparams('gmStateSpaceHDL_HalfWaveRectifier_HDL');
%% Set Model 'gmStateSpaceHDL_HalfWaveRectifier_HDL' HDL parameters
hdlset_param('gmStateSpaceHDL_HalfWaveRectifier_HDL', 'FloatingPointTargetConfiguration', hdlcoder.createFloatingPointTargetConfig('NativeFloatingPoint' ...
, 'LatencyStrategy', 'MIN') ...
);
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 ブロックを開きます。上のグラフは生成されたモデルの出力を表し、中央のグラフは実装モデルの出力を表します。下のグラフは、両モデルの出力の差を計算します。出力が一致するため、誤差はゼロです。

参考

関数

関連するトピック