Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

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.4s0.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 でコード生成レポートが表示されます。リソース共有の最適化の状態を確認するには、レポートの[ストリーミングおよび共有] セクションをクリックします。この共有グループは、最適化で共有されたドット積を表示します。[高水準リソース レポート] をクリックすると、加算器、乗算器、およびレジスタの消費が減少したことがわかります。

参考

関数

関連するトピック