このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
Simscape からの最適化された HDL 実装モデルの生成
この例では、リソース共有や RAM マッピングなどの最適化を使用して、Simscape™ Vienna 整流器モデルの最適化された HDL 実装モデルを生成する方法を説明します。
HDL 実装モデルを最適化する理由
多くの切り替え要素をもつ Simscape モデルの場合、状態空間表現には多数の構成が含まれます。Simscape HDL ワークフロー アドバイザーは、Simscape モデルをシミュレートして、関連のある構成の数を計算します。特定の Simscape モデルが、関連のある構成を数多くもつ場合があります。このような大規模な設計で生成された HDL 実装モデルは、大量のリソースを消費する可能性があります。生成されたコードを合成すると、設計が FPGA デバイス上の大量のリソースを占める可能性があります。場合によっては、設計がターゲットの FPGA デバイスに収まらないことがあります。リソースを節約し、設計が FPGA に収まるようにするために、Simscape HDL ワークフロー アドバイザーでは、クロックレート パイプライン、リソース共有、RAM マッピングなどの HDL Coder™ 最適化を使用します。
Vienna 整流器モデル
モデルを開くには、MATLAB® コマンド プロンプトで次を入力します。
open_system('sschdlexViennaRectifierExample')
このモデルを ViennaRectifier_HDL という名前で保存してワークフローを実行します。
open_system('ViennaRectifier_HDL') set_param('ViennaRectifier_HDL', 'SimulationCommand', 'Update')
Control
サブシステムは、空間ベクトル変調を使用して Vienna rectifier
サブシステムの閉ループ制御手法を実装します。シミュレーション時間 0.1s
で、Vienna 整流器が係合されます。時間 0.4s
と 0.6s
で、負荷が DC 側で増大します。
Vienna rectifier
サブシステムは、三相のレッグで構成されています。それぞれのレッグには、電源スイッチが 1 つと、パワー ダイオードが 6 つあります。Vienna 整流器制御 (Simscape Electrical)を参照してください。
open_system('ViennaRectifier_HDL/Vienna rectifier')
モデルのシミュレーションを実行します。Scopes
サブシステム内の Scope ブロックをダブルクリックしてシミュレーション結果を表示します。
sim('ViennaRectifier_HDL') open_system('ViennaRectifier_HDL/Scopes/Scope')
HDL 実装モデルの生成と HDL アルゴリズムの検証
HDL 実装モデルを生成するには、Simscape HDL ワークフロー アドバイザーを使用します。実装モデルの HDL コードを生成できます。アドバイザーを開くには、次のコマンドを実行します。
sschdladvisor('ViennaRectifier_HDL')
HDL 実装モデルを生成するには、[実装モデルの生成] サブフォルダーで、[実装モデルを生成] タスクを右クリックし、リストから [選択したタスクまで実行] を選択します。タスクが成功すると、HDL 実装モデルへのリンクが表示されます。構成の数を確認するには、[状態空間の変換] サブフォルダーで [方程式の抽出] タスクを選択します。タスクをクリックすると、モデルのシミュレーションが 397
モードに達していることがわかります。これほどモード数が多いと、FPGA 上の設計のリソース消費量が増える可能性があります。
HDL 実装モデルを開くには、以下のコマンドを入力します。
open_system('gmStateSpaceHDL_ViennaRectifier_HDL') set_param('gmStateSpaceHDL_ViennaRectifier_HDL', 'SimulationCommand', 'Update')
このサブシステムの端子は、元の Simscape モデル内の Simulink-PS Converter ブロックおよび PS-Simulink Converter ブロックと同じ名前を使用します。このサブシステム内を移動すると、いくつかの遅延、加算器、および Matrix Multiply ブロックが状態空間方程式をモデル化していることがわかります。
open_system('gmStateSpaceHDL_ViennaRectifier_HDL/HDL Subsystem/HDL Algorithm')
HDL アルゴリズムを検証するには、[実装モデルを生成] タスクで、[検証設定] にある [実装モデルの検証ロジックの生成] チェック ボックスを選択し、[検証ロジックの許容誤差] を 0.001
に設定して、このタスクを再実行します。タスクは、実装モデルと元の Simscape モデルを比較する状態空間検証モデルを生成します。
open_system('gmStateSpaceHDL_ViennaRectifier_HDL_vnl') set_param('gmStateSpaceHDL_ViennaRectifier_HDL_vnl', 'SimulationCommand', 'Update')
モデルをシミュレートしてもアサーションは表示されませんが、これは、HDL アルゴリズムが元のモデルと一致することを示しています。
sim('gmStateSpaceHDL_ViennaRectifier_HDL_vnl')
実装モデルの状態空間パラメーターの RAM へのマッピング
HDL 実装モデルは single
データ型を使用し、HDL Algorithm
サブシステムのフィードバック ループ内に大きな Delay ブロックを含んでいます。大きな遅延を含めて、ターゲット FPGA で設計をより速いクロック レートで実行するために、モデルでは、クロックレート パイプラインを大きい値の [オーバーサンプリング係数] と組み合わせて使用します。
hdlsaveparams('gmStateSpaceHDL_ViennaRectifier_HDL')
詳細は、以下を参照してください。
[実装モデルを生成] タスクにおいて、[状態空間のパラメーターを RAM にマッピング] 設定では既定値である [Auto
] を使用します。この設定は、モードの数がしきい値である 200
を超えたときに、HDL 実装モデル内の大きい状態空間パラメーターを RAM にマッピングします。Vienna 整流器モデルは多数のモードを使用するため、状態空間パラメーターは RAM にマッピングされます。RAM にマッピングすることにより、FPGA 上のルックアップ テーブル リソースが節約されます。RAM マッピングを有効にするために、状態更新を実行して出力を計算するマスク サブシステム ブロックでUseRAMパラメーターが有効になります。
しきい値に関係なくパラメーターを RAM にマッピングするには、[状態空間のパラメーターを RAM にマッピング] を [on
] に設定します。
Vienna 整流器モデルに対する RAM マッピングの効果を確認するには、以下を行います。
1. Multiply Input
ブロックおよび Multiply State
ブロックで関数 hdlget_param
を実行することにより、UseRAM パラメーターの設定を確認します。
Multiplysubsys1 = 'gmStateSpaceHDL_ViennaRectifier_HDL/HDL Subsystem/HDL Algorithm/State Update'; Multiplysubsys2 = 'gmStateSpaceHDL_ViennaRectifier_HDL/HDL Subsystem/HDL Algorithm/Output'; UseRAM1 = hdlget_param([Multiplysubsys1 '/Multiply Input'], 'UseRAM') UseRAM2 = hdlget_param([Multiplysubsys1 '/Multiply State'], 'UseRAM')
UseRAM1 = 'on' UseRAM2 = 'on'
2.リソース利用レポートの生成を有効にします。
hdlset_param('gmStateSpaceHDL_ViennaRectifier_HDL', 'ResourceReport', 'on')
3.実装モデルの HDL コードを生成します。
makehdl('gmStateSpaceHDL_ViennaRectifier_HDL/HDL Subsystem');
コード生成すると、HDL Coder でコード生成レポートが表示されます。[高水準リソース レポート] に、136
の RAM が使用されていることが表示されます。
状態更新ブロックおよび出力計算ブロックのリソース共有
HDL Subsystem の HDL コードを作成する前に、HDL Coder でリソース共有最適化を使用してアルゴリズムを最適化できます。リソース共有とは、機能的に等価な複数のリソースを特定して単一の等価なリソースに置き換える、面積の最適化です。同じ演算を実行するために、データが共有リソース全体で時間多重化されます。リソース共有を参照してください。
HDL 実装モデルでは、状態更新を実行し、出力を計算するマスク サブシステム ブロックを共有できます。
Vienna 整流器用にこれらのサブシステムを共有して HDL コードを生成するには、以下を行います。
1. Multiply Input サブシステムと Multiply State サブシステムで SharingFactor を 2 に指定します。
hdlset_param([Multiplysubsys1 '/Multiply Input'],'SharingFactor', 2) hdlset_param([Multiplysubsys1 '/Multiply State'],'SharingFactor', 2) hdlset_param([Multiplysubsys2 '/Multiply Input'],'SharingFactor', 2) hdlset_param([Multiplysubsys2 '/Multiply State'],'SharingFactor', 2)
2.最適化レポートの生成を有効にします。
hdlset_param('gmStateSpaceHDL_ViennaRectifier_HDL', 'OptimizationReport', 'on')
3.実装モデルで HDL Subsystem ブロックの HDL コードを生成します。
makehdl('gmStateSpaceHDL_ViennaRectifier_HDL/HDL Subsystem');
コード生成すると、HDL Coder でコード生成レポートが表示されます。リソース共有の最適化の状態を確認するには、レポートの[ストリーミングおよび共有] セクションをクリックします。この共有グループは、最適化で共有されたドット積を表示します。[高水準リソース レポート] をクリックすると、加算器、乗算器、およびレジスタの消費が減少したことがわかります。