Nei progetti di grandi dimensioni, è una pratica comune dividere il progetto in pezzi, ogni pezzo diventa una “definizione” che può essere usata come istanze nel progetto. Nell’analogia dell’aspirapolvere, si potrebbe avere una definizione di aspirapolvere con le sue porte, ma ora questa definizione includerebbe anche una descrizione completa dei componenti interni della macchina e di come sono collegati (motori, interruttori, ecc.), come fa uno schema elettrico.
Una definizione che non include istanze è chiamata “primitiva” (o “foglia”, o altri nomi); mentre una definizione che include istanze è “gerarchica”.
Una gerarchia “piegata” permette che una singola definizione sia rappresentata più volte da istanze. Una gerarchia “spiegata” non permette ad una definizione di essere usata più di una volta nella gerarchia.
Le gerarchie piegate possono essere estremamente compatte. Una piccola netlist di poche istanze può descrivere progetti con un numero molto grande di istanze. Per esempio, supponiamo che la definizione A sia una semplice primitiva, come una cella di memoria. Poi supponiamo che la definizione B contenga 32 istanze di A; C contiene 32 istanze di B; D contiene 32 istanze di C; ed E contiene 32 istanze di D. Il progetto ora contiene 5 definizioni (da A a E) e 128 istanze. Eppure, E descrive un circuito che contiene oltre un milione di celle di memoria.
UnfoldingEdit
In un design “piatto”, solo le primitive sono istanziate. I disegni gerarchici possono essere ricorsivamente “esplosi” (“appiattiti”) creando una nuova copia (con un nuovo nome) di ogni definizione ogni volta che viene usata. Se il progetto è molto ripiegato, espanderlo in questo modo risulterà in un database di netlist molto più grande, ma conserva le dipendenze della gerarchia. Data una netlist gerarchica, l’elenco dei nomi delle istanze in un percorso dalla definizione radice ad un’istanza primitiva specifica il singolo percorso unico per quella primitiva. I percorsi per ogni primitiva, presi insieme, comprendono una netlist grande ma piatta che è esattamente equivalente alla versione gerarchica compatta.
BackannotationEdit
Backannotation sono dati che potrebbero essere aggiunti a una netlist gerarchica. Di solito sono tenuti separati dalla netlist, perché diversi set di dati alternativi di questo tipo potrebbero essere applicati a una singola netlist. Questi dati potrebbero essere stati estratti da un progetto fisico e potrebbero fornire informazioni extra per simulazioni più accurate. Di solito i dati sono composti da un percorso gerarchico e un pezzo di dati per quella primitiva o per trovare i valori del ritardo RC dovuto all’interconnessione.
InheritanceEdit
Un altro concetto spesso usato nelle netlist è quello di ereditarietà. Supponiamo che una definizione di un condensatore abbia un attributo associato chiamato “Capacitance”, corrispondente alla proprietà fisica dello stesso nome, con un valore predefinito di “100 pF” (100 picofarad). Ogni istanza di questo condensatore potrebbe anche avere un tale attributo, solo con un valore diverso di capacità. E altre istanze potrebbero non associare alcuna capacità. Nel caso in cui nessuna capacità sia specificata per un’istanza, l’istanza “erediterà” il valore di 100 pF dalla sua definizione. Un valore specificato “sovrascriverà” il valore della definizione. Se un gran numero di attributi finiscono per essere gli stessi della definizione, una grande quantità di informazioni può essere “ereditata”, e non deve essere ridondantemente specificata nella netlist, risparmiando spazio, e rendendo il progetto più facile da leggere sia dalle macchine che dalle persone.