電子設計において、ネットリストは電子回路の接続性を記述したものです。[ 1 ] [ 2 ]最も単純な形式では、ネットリストは回路内の電子部品のリストと、それらが接続されているノードのリストで構成されます。 [ 1 ] [ 3 ]ネットワーク(ネット)は、相互接続された 2 つ以上のコンポーネントの集合です。
ネットリストの構造、複雑さ、表現方法は大きく異なる可能性がありますが、すべてのネットリストの基本的な目的は接続情報を伝えることです。ネットリストは通常、関連するコンポーネントのインスタンス、ノード、場合によってはいくつかの属性のみを提供します。[ 4 ]ネットリストがこれよりもはるかに多くの情報を表現する場合、通常はVerilogやVHDLなどのハードウェア記述言語、またはシミュレータやハードウェアコンパイラへの入力用に特別に設計されたいくつかの言語( SPICEアナログシミュレーションネットリストなど) のいずれかとみなされます。
ネットリストは以下のとおりです。
ほとんどのネットリストには、使用されている部品やデバイスの説明が含まれているか、またはそれらへの参照が含まれています。ネットリスト内で部品が使用されるたびに、それを「インスタンス」と呼びます。
これらの説明には通常、その種類のデバイスへの接続箇所と、そのデバイスの基本的な特性が記載されています。これらの接続点は、「端子」や「ピン」など、いくつかの呼び方があります。
「インスタンス」とは、MOSFETトランジスタやバイポーラ接合トランジスタから、抵抗器、コンデンサ、集積回路チップまで、あらゆるものを指す可能性がある。
インスタンスには「端子」があります。掃除機の場合、これらの端子はプラグの3本の金属製の突起です。各端子には名前があり、掃除機の例を続けると、「ニュートラル」、「ライブ」、「アース」などになります。通常、各インスタンスには固有の名前が付けられるため、掃除機のインスタンスが2つある場合、一方は「vac1」、もう一方は「vac2」となるでしょう。名前以外は、両者は同一である可能性があります。
ネットワーク(ネット)とは、回路内で部品同士を接続する「配線」のことです。設計において、ネットに特別な属性が付与される場合とされない場合があります。これは、ネットリストが記述されている言語とその言語の機能によって異なります。
インスタンスベースのネットリストは通常、設計で使用されるインスタンスのリストを提供します。各インスタンスには、ネット名の順序付きリスト、またはインスタンスポート名とそのポートが接続されているネット名のペアのリストが付属します。このタイプの記述では、ネットのリストは接続リストから取得でき、ネット自体に特定の属性を関連付ける場所はありません。SPICEは インスタンスベースのネットリストの一例です。
ネットベースのネットリストは通常、すべてのインスタンスとその属性を記述し、次に各ネットを記述し、各インスタンスでどのポートに接続されているかを示します。これにより、属性をネットに関連付けることができます。EDIF はおそらくネットベースのネットリストの中で最も有名です。
大規模な設計では、設計を複数の部分に分割し、それぞれの部分を「定義」として、設計内のインスタンスとして使用するのが一般的です。掃除機の例で言えば、掃除機の定義にはポートが含まれていますが、この定義には、配線図のように、機械の内部コンポーネントとその接続方法(モーター、スイッチなど)の詳細な説明も含まれることになります。
インスタンスを含まない定義は「プリミティブ」(または「リーフ」など)と呼ばれ、インスタンスを含む定義は「階層的」と呼ばれます。
「折り畳まれた」階層では、単一の定義をインスタンスによって複数回表現できます。「折り畳まれていない」階層では、定義を階層内で複数回使用することはできません。
折り畳まれた階層構造は非常にコンパクトです。わずか数個のインスタンスからなる小さなネットリストで、非常に多くのインスタンスを持つ設計を記述できます。たとえば、定義Aがメモリセルなどの単純なプリミティブであるとします。次に、定義BにAのインスタンスが32個、CにBのインスタンスが32個、DにCのインスタンスが32個、EにDのインスタンスが32個含まれているとします。この場合、設計には5つの定義(AからE)と128個のインスタンスが含まれます。しかし、Eは100万個以上のメモリセルを含む回路を記述しています。
「フラット」な設計では、プリミティブのみがインスタンス化されます。階層的な設計は、使用されるたびに各定義の新しいコピー(新しい名前付き)を作成することで、再帰的に「展開」(「フラット化」)できます。設計が高度に折り畳まれている場合、このように展開すると、はるかに大きなネットリスト データベースが生成されますが、階層の依存関係は維持されます。階層的なネットリストが与えられた場合、ルート定義からプリミティブ インスタンスへのパスにあるインスタンス名のリストは、そのプリミティブへの一意のパスを指定します。すべてのプリミティブへのパスをまとめて、コンパクトな階層バージョンとまったく同じ、大きくてフラットなネットリストが構成されます。
バックアノテーションは、階層型ネットリストに追加できるデータです。通常、バックアノテーションはネットリストとは別に保持されます。これは、1つのネットリストに複数の代替データセットを適用できるためです。これらのデータは物理設計から抽出されたものであり、より正確なシミュレーションのための追加情報を提供する可能性があります。通常、データは階層パスと、そのプリミティブに関するデータ、または相互接続によるRC遅延の値を求めるデータで構成されます。
ネットリストでよく使われるもう1つの概念は、継承です。コンデンサの定義に「静電容量」という属性が関連付けられており、これは同名の物理特性に対応し、デフォルト値は「100 pF」(100ピコファラッド)であるとします。このコンデンサの各インスタンスにも同様の属性が存在します。ただし、静電容量の値は異なる場合があります。また、静電容量を全く関連付けないインスタンスもあります。インスタンスに静電容量が指定されていない場合、そのインスタンスは定義から100 pFの値を「継承」します。指定された値は、定義の値を「上書き」します。定義と同じ属性が多数存在する場合、大量の情報を「継承」することができ、ネットリストで重複して指定する必要がなくなるため、スペースを節約でき、マシンと人間の両方にとって設計が読みやすくなります。
ネットリストは 1 つのファイルに記述されますが、次の 4 つのセクションが含まれます。1) ファイル ヘッダー、2) 各コンポーネントをリストしたテーブル、3) 各ネット名をリストしたテーブル、4) 各ネット接続をリストしたテーブル。各テーブルのエントリは、
CRLF
で終わる 1 行のテキストを使用して記述されます。テーブルのフィールドはスペース文字 (0x20) で区切られます。文字列フィールドは、二重引用符で始まり、二重引用符で終わります。3 つのテーブルはそれぞれ、空白行 (CRLF) で終了します。