大規模な設計では、設計を断片に分割し、それぞれの断片が「定義」となって、設計のインスタンスとして使用できるようにするのが一般的です。 掃除機の例では、ポートを含む掃除機の定義があるかもしれませんが、この定義には、配線図のように、マシンの内部コンポーネントとそれらがどのように接続されるか (モーター、スイッチなど) の完全な記述も含まれるようになります。
インスタンスを含まない定義は「プリミティブ」(または「リーフ」、あるいは他の名前)と呼ばれ、一方、インスタンスを含む定義は「階層的」です。 unfolded」階層では、1つの定義が階層内で2回以上使用されることはありません。 わずか数個のインスタンスからなる小さなネットリストで、非常に多くのインスタンスを持つデザインを記述することができます。 たとえば、定義 A がメモリ セルのような単純なプリミティブであるとします。 次に、定義BにAの32個のインスタンス、CにBの32個のインスタンス、DにCの32個のインスタンス、EにDの32個のインスタンスが含まれるとすると、デザインには5つの定義(AからE)と128個のインスタンスが含まれることになります。 しかし、E は 100 万以上のメモリ セルを含む回路を記述しています。
UnfoldingEdit
「フラット」デザインでは、プリミティブのみがインスタンス化されます。 階層的なデザインは、使用されるたびに各定義の新しいコピー (新しい名前) を作成することで、再帰的に「展開」 (「フラット化」) することができます。 デザインが高度に折りたたまれている場合、このように展開すると、ネットリストのデータベースが非常に大きくなりますが、階層の依存関係は維持されます。 階層型ネットリストがある場合、ルート定義からプリミティブインスタンスへのパスにおけるインスタンス名のリストは、そのプリミティブへの単一のユニークなパスを指定します。
BackannotationEdit
バックアノテーションは、階層的なネットリストに追加されるデータです。 通常、このような代替データ セットが 1 つのネットリストに適用される可能性があるため、ネットリストとは別に保管されます。 これらのデータは物理的なデザインから抽出されたもので、より正確なシミュレーションを行うための追加情報を提供する可能性があります。 通常、データは階層パスとそのプリミティブのデータ、または相互接続による RC 遅延の値を見つけることで構成されます。
InheritanceEdit
ネットリストでよく使われるもうひとつの概念は、継承というものです。 コンデンサの定義に、同じ名前の物理プロパティに対応する “Capacitance” という関連属性があり、デフォルト値が “100 pF” (100 ピコファラッド) であるとします。 このコンデンサの各インスタンスも、異なる静電容量値でそのような属性を持つかもしれない。 また、他のインスタンスでは静電容量が全く関連付けられていないかもしれません。 インスタンスに静電容量が指定されていない場合、そのインスタンスはその定義から100pFの値を “継承 “する。 値が指定されると、定義上の値が「上書き」される。 多くの属性が定義と同じになれば、多くの情報が「継承」され、ネットリストで重複して指定する必要がなくなり、スペースを節約し、機械と人間の両方にとって読みやすいデザインになります
。