Main Content

さまざまなサブシステム タイプの使用方法

設計にさまざまなサブシステム タイプを使用してアルゴリズムを階層的にモデル化する方法については、以下のガイドラインに従ってください。各ガイドラインに準拠要件のレベルを示す重大度レベルが割り当てられています。詳細については、HDL モデリング ガイドラインの重大度レベルを参照してください。

バーチャル サブシステム: DUT として使用する

ガイドライン ID

2.4.1

重大度

強く推奨

説明

バーチャル サブシステムは、条件付き実行でない subsystem または Atomic Subsystem である subsystem です。既定では、Simulink® モデルに追加する通常の Subsystem ブロックはバーチャル サブシステムです。非バーチャル サブシステム タイプには、Atomic Subsystem、モデル参照、Variant Subsystem、バリアント モデルが含まれます。

サブシステムがバーチャルかどうかを特定するには、関数 get_param をパラメーター IsSubsystemVirtual を指定して使用します。以下に例を示します。

get_param('sfir_fixed/symmetric_fir', 'IsSubsystemVirtual')

Atomic サブシステムとバーチャル サブシステム: 再利用可能な HDL ファイルを生成する

ガイドライン ID

2.4.2

重大度

推奨

説明

階層の下位レベルで使用するサブシステムの同一インスタンスに対して単一の HDL ファイルを生成するには、サブシステムで再利用可能なコードの生成およびコードの再利用を参照してください。

サブシステム ユニットでリソース共有を有効にするには、サブシステム共有の一般的な注意事項を参照してください。

Atomic サブシステムとバーチャル サブシステムから再利用可能なコードを生成するには、信号のログをオフにする必要があります。サブシステム内の信号をログに記録する場合は、Atomic サブシステムとバーチャル サブシステムからの再利用可能なコードの生成に失敗する可能性があります。

Variant Subsystem: HDL コード生成用に Variant Subsystem を使用する

ガイドライン ID

2.4.3

重大度

必須

説明

Variant Subsystem、Variant Modelブロックは、Variant Subsystem の選択肢として使用するために 2 つの Subsystem ブロックを含めるように事前構成されたテンプレートです。シミュレーション時に、バリアント制御は 2 つの Subsystem ブロックのどちらがアクティブであるかを決定します。したがって、Variant Subsystem を使用して 2 つの異なる構成またはサブシステムの動作を作成してから、シミュレーション時にアクティブな構成を指定できます。

  • Variant Subsystem を DUT として使用することはできません。コードを生成するには、DUT として使用するサブシステム内に Variant Subsystem を配置します。ファイル名と生成されたコードのインスタンス名は、コード生成時に選択されたアクティブな構成で一意です。

  • Variant Subsystem の最適化を使用して複数の Variant Subsystem ブロックを共有することはできません。

  • 生成されたコードの機能を検証する際に、モデルのシミュレーションで使用したアクティブなバリアントが HDL コードの生成で使用したアクティブなバリアントと同じであることを確認しなければなりません。

たとえば、モデル hdlcoder_variant_subsystem_design.slx を開きます。DUT サブシステムを開くと、Variant Subsystem ブロック Divide が表示されます。Variant Subsystem には RecipOp の 2 つの異なるサブシステムがあります。Divide サブシステムの [ブロック パラメーター] ダイアログ ボックスを開くと、シミュレーション時に有効にするサブシステムを決定する [バリアント制御式][条件] が表示されます。この場合、Recip1 であり、Recip サブシステムがシミュレーション時にアクティブになります。

load_system('hdlcoder_variant_subsystem_design')
set_param('hdlcoder_variant_subsystem_design','SimulationCommand','Update')
open_system('hdlcoder_variant_subsystem_design/DUT/Divide')
variantRecip =

Simulink.Variant
    Condition: 'Recip == 1'


variantOp =

Simulink.Variant
    Condition: 'Recip == 0'


Recip =

     1

HDL コードを生成するには、次のコマンドを実行します。

makehdl('hdlcoder_variant_subsystem_design/DUT')

コードはコード生成時にアクティブである Recip サブシステムに対して生成されるため、Recip.vhd という名前の HDL ファイルが生成されます。

モデル参照: 小規模な分割を使用したモデル設計をビルドする

ガイドライン ID

2.4.4

重大度

推奨

説明

大規模な設計を階層的にモデル化すると、コード生成時間が増加する可能性があります。トレーサビリティ レポートなどのレポートの生成を指定する場合、コード生成時間はさらに大幅に増加する場合があります。このようなパフォーマンスの問題を回避するには、小規模な分割に設計を分割することをお勧めします。Modelブロックを使用して小規模な分割で構成されるモデルを統一します。また、インクリメンタルなコード生成を行うこともできます。親モデルまたは参照モデルに対して HDL コードを生成できます。生成された HDL コードを表示するには、hdlsrc フォルダーに、親モデル用のフォルダーが、参照モデル用の個別のサブフォルダーと共に作成されます。

HDL テスト ベンチの生成時に、テスト ベンチが連続サンプル時間で動作するブロックで構成されている場合、DUT を参照モデルに変換できます。この変換により、DUT を固定ステップ、離散サンプル時間で実行できます。詳細については、連続ブロックを使用したテストベンチ用のモデル参照への DUT サブシステムの変換を参照してください。

たとえば、モデル hdlcoder_divide_parentmodel.slx を開きます。DUT サブシステムをダブルクリックすると、モデル hdlcoder_divide_referencedmodel を参照する Model ブロックが表示されます。

load_system('hdlcoder_divide_parentmodel')
set_param('hdlcoder_divide_parentmodel', 'SimulationCommand', 'Update')
open_system('hdlcoder_divide_parentmodel/DUT')

参照モデルを表示するには、Model ブロックをダブルクリックします。

open_system('hdlcoder_divide_parentmodel/DUT/Model')

HDL コードを生成するには、次のコマンドを入力します。

makehdl('hdlcoder_divide_parentmodel/DUT')

詳細については、HDL コード生成でのモデル参照を参照してください。

Enabled Subsystem と Triggered Subsystem のブロック設定

ガイドライン ID

2.4.5

重大度

必須

説明

Triggered SubsystemTrigger ブロックから制御信号を受け取るサブシステムです。Triggered Subsystem はトリガー イベントが発生するたびに 1 サイクルを実行します。Triggered Subsystem の HDL コードを生成する場合、以下を考慮します。

  • Triggered Subsystem ブロックを DUT として使用しないでください。Triggered Subsystem を別の Subsystem ブロック内に配置し、その Subsystem を DUT として使用します。

  • Triggered Subsystem の初期条件がゼロであることを確認します。

  • Triggered Subsystem の出力信号に単位遅延を追加できます。単位遅延により、コード ジェネレーターで追加のバイパス レジスタが HDL コードに挿入されないようにします。

  • [トリガー信号をクロックとして使用] 設定により、テストベンチをシミュレートして生成されたコードを検証する際にタイミングの不一致が発生しないことを確認します。詳細については、HDL コード生成のための Triggered Subsystem の使用を参照してください。

HDL コード生成用に Triggered Subsystem ブロックを構成する際のその他の基本設定については、Triggered Subsystem ページのHDL コード生成を参照してください。

Enabled SubsystemEnable ブロックから制御信号を受け取るサブシステムです。Enabled Subsystem は制御信号に正の値がある各シミュレーション ステップで実行されます。Enabled Subsystem の HDL コードを生成する場合、以下を考慮します。

  • Enabled Subsystem ブロックを DUT として使用しないでください。Enabled Subsystem を別の Subsystem ブロック内に配置し、その Subsystem を DUT として使用します。

  • Enabled Subsystem の初期条件がゼロであることを確認します。

  • Enabled Subsystem の出力信号に単位遅延を追加できます。単位遅延により、コード ジェネレーターで追加のバイパス レジスタが HDL コードに挿入されないようにします。

  • State Control ブロックを Synchronous モードで Enabled Subsystem 内に追加できます。State Control ブロックは Enabled Subsystem ブロックを Enabled Synchronous Subsystem ブロックに変換します。このブロックはより効率的でハードウェア親和型の HDL コードを生成します。詳細については、State Control ブロックを使用する同期サブシステムの動作を参照してください。

HDL コード生成用に Enabled Subsystem ブロックを構成する際のその他の基本設定については、Enabled Subsystem ページのHDL コード生成を参照してください。

参考

関数

モデル設定

関連する例

詳細