階層のフラット化
階層のフラット化とは
階層のフラット化により、設計から生成した HDL コードからサブシステム階層を除去できます。
HDL Coder™ では、フラットにしたサブシステム内のブロックは階層の同じレベルにあるものとみなされ、異なるサブシステムにグループ化されることがなくなります。これによって、機能性は維持しながら、コード ジェネレーターで元の階層的境界を越えて最適化のためにブロックを再編成することができます。
階層をフラット化する状況
設計のモジュール性を保持して、サブシステム名から対応する HDL module または entity 名との間で 1 対 1 のマッピングを行うには、階層をフラットにしないでください。階層をフラットにしない方が、生成された HDL コードが読みやすくなります。
階層は次の目的でフラットにします。
面積と速度の最適化をさらに拡張する。
HDL 出力ファイルの数を減らす。フラットにしたサブシステム 1 つにつき、HDL Coder によって生成される HDL 出力ファイルの数が 1 つ少なくなります。
考慮事項
階層をフラットにする前に、
MaskParameterAsGenericプロパティをoffに設定しなければなりません。詳細については、Generate parameterized HDL code from masked subsystemを参照してください。リソースの共有またはストリーミングといった最適化を階層のフラット化と一緒に使用するときは、場合によっては、HDL Coder によって生成モデル内でサブシステムの階層が保持されることがあります。ただし、フラットにしたサブシステム用に生成された HDL コードがインライン化されるため、HDL ファイルの数は少なくなります。
浮動小数点データ型を
Native Floating Pointモードで使用するときは、HDL Coder によって階層がフラットにされない場合があります。これは、浮動小数点設計によって何百行ものコードが生成され、HDL ファイルのインライン化によって生成コードの可読性が低下するためです。
階層をフラット化する方法
既定では、サブシステムは親サブシステムから階層のフラット化の設定を継承します。ただし、個々のサブシステムでフラット化を有効または無効にできます。次の表は、サブシステムの階層フラット化オプションで指定できるオプションの一覧です。
| 階層のフラット化の設定 | 説明 |
|---|---|
| inherit (既定の設定) | 親サブシステムの階層のフラット化の設定を使用します。このサブシステムが最上位のサブシステムである場合は、フラットにしません。 |
| on | このサブシステムをフラットにします。 |
| オフ | 親サブシステムをフラットにする場合でも、このサブシステムはフラットにしません。 |
[HDL ブロック プロパティ] ダイアログ ボックスを使用して階層のフラット化を設定するには、次の手順に従います。
[アプリ] タブで、[HDL Coder] を選択します。[HDL コード] タブが表示されます。Subsystem を選択し、[HDL ブロック プロパティ] をクリックします。[FlattenHierarchy] で [on]、[off] または [inherit] を選択します。
Subsystem を右クリックし、[HDL コード]、[HDL ブロック プロパティ] を選択します。[FlattenHierarchy] で [on]、[off] または [inherit] を選択します。
コマンド ラインから階層のフラット化を設定するには、hdlset_param を使用します。たとえば、サブシステム my_dut の階層のフラット化を有効にするには、次のコマンドを使用します。
hdlset_param('my_dut', 'FlattenHierarchy', 'on')
hdlset_paramも参照してください。階層のフラット化のレポート
階層のフラット化情報をレポートで見るには、各サブシステムまたはモデル参照のコードを生成する前に、最適化レポートを有効にします。このレポートを有効にするには、[HDL コード] タブで、[レポート オプション] を選択して、[最適化レポートを生成] を選択します。
レポートに表示されるのは、[FlattenHierarchy] が [on] および [off] に設定されていて、階層のフラット化ステータス、およびインライン化されている HDL ファイルが設定されているモデル内のサブシステムです。このレポートを使用して、サブシステム階層をより効率的にフラットにし、モデルでクロックレート パイプラインなどの最適化を適用する機会を増やします。
階層のフラット化に失敗すると、フラットにされていないサブシステムと、サブシステムがフラットにされていない理由を含む表がレポートに表示されます。サブシステムの横に * が強調表示されている場合、階層のフラット化に失敗したとしても HDL ファイルはインライン化されているかどうかを示します。
階層のフラット化の制限
サブシステムが次に該当する場合は、フラットにできません。
Synchronous Subsystem または State Control ブロックを
Synchronousモードで使用する場合モデル参照の実装。
Use trigger signal as clockが有効な場合の Triggered Subsystem。