CAPITOLO 2 - bo.infn.itfalchier/tesifalchieri/cap2.pdf · L’uso dei vari programmi di...

42
27 CAPITOLO 2 Questo capitolo contiene una breve storia sull’evoluzione nella progettazione dei circuiti integrati, seguita da una approfondita analisi dei mezzi che vengono usati attualmente a tale scopo, dedicando particolare attenzione agli strumenti software utilizzati. L’uso dei vari programmi di composizione di circuiti e di simulazione è caldamente consigliato dalla fonderia ES2, la quale per garantire il corretto funzionamento dell’integrato una volta fabbricato, pretende siano state fatte tutte le simulazioni software possibili a priori. Alcuni passi della metodologia da seguire sono obbligatori, altri sono opzionali anche se caldamente raccomandati: io ho cercato di seguire tutti i passi descritti nell’ES2 Cadence Design Kit [7] che integra le librerie della fonderia ES2 nell’ambiente di lavoro di Cadence DFWII. 2.1 Evoluzione nella progettazione dei circuiti integrati La progettazione e la realizzazione di circuiti integrati è stata fino a pochi anni fa un’esclusiva degli Stati Uniti e del Giappone. Per questo motivo da alcuni anni la Comunità Economica Europea ha deciso di lanciare un programma di ricerca chiamato ESPRIT (European Strategic Program for Research in Information Technology) con lo scopo di promuovere iniziative di ricerca nel mondo delle industrie e delle università. Questo programma è nato proprio per rendere tecnologicamente indipendente l’Europa dagli altri Paesi per quanto riguarda la progettazione di circuiti integrati. In particolare nell’ambito di ESPRIT è nata un’organizzazione chiamata prima EUROCHIP e ora EUROPRACTICE a cui fanno riferimento diverse università e industrie europee. Il fine di Europractice è di favorire l’interazione ed uno scambio produttivo fra le università e le imprese private nel seguente modo: vengono forniti alle università a costi molto ridotti tutti i prodotti software necessari a sviluppare progetti completi purché le finalità siano di tipo didattico (in questo contesto anche la produzione dei prototipi ha un costo notevolmente ridotto). In questo modo le industrie possono poi acquisire personale specializzato nel settore senza dovere compiere questa formazione personalmente. Si tenta così di colmare il vuoto di competenze nel settore sia a livello industriale sia accademico. La progettazione di circuiti integrati è in continua evoluzione ed ha subito radicali cambiamenti negli ultimi 30 anni. Sin dalle prime esperienze di

Transcript of CAPITOLO 2 - bo.infn.itfalchier/tesifalchieri/cap2.pdf · L’uso dei vari programmi di...

27

CAPITOLO 2

Questo capitolo contiene una breve storia sull’evoluzione nellaprogettazione dei circuiti integrati, seguita da una approfondita analisi deimezzi che vengono usati attualmente a tale scopo, dedicando particolareattenzione agli strumenti software utilizzati.

L’uso dei vari programmi di composizione di circuiti e di simulazione ècaldamente consigliato dalla fonderia ES2, la quale per garantire il correttofunzionamento dell’integrato una volta fabbricato, pretende siano state fattetutte le simulazioni software possibili a priori. Alcuni passi della metodologiada seguire sono obbligatori, altri sono opzionali anche se caldamenteraccomandati: io ho cercato di seguire tutti i passi descritti nell’ES2 CadenceDesign Kit [7] che integra le librerie della fonderia ES2 nell’ambiente dilavoro di Cadence DFWII.

2.1 Evoluzione nella progettazione dei circuiti integrati

La progettazione e la realizzazione di circuiti integrati è stata fino apochi anni fa un’esclusiva degli Stati Uniti e del Giappone. Per questo motivoda alcuni anni la Comunità Economica Europea ha deciso di lanciare unprogramma di ricerca chiamato ESPRIT (European Strategic Program forResearch in Information Technology) con lo scopo di promuovere iniziative diricerca nel mondo delle industrie e delle università. Questo programma è natoproprio per rendere tecnologicamente indipendente l’Europa dagli altri Paesiper quanto riguarda la progettazione di circuiti integrati. In particolarenell’ambito di ESPRIT è nata un’organizzazione chiamata primaEUROCHIP e ora EUROPRACTICE a cui fanno riferimento diverseuniversità e industrie europee. Il fine di Europractice è di favorirel’interazione ed uno scambio produttivo fra le università e le imprese privatenel seguente modo: vengono forniti alle università a costi molto ridotti tutti iprodotti software necessari a sviluppare progetti completi purché le finalitàsiano di tipo didattico (in questo contesto anche la produzione dei prototipi haun costo notevolmente ridotto). In questo modo le industrie possono poiacquisire personale specializzato nel settore senza dovere compiere questaformazione personalmente. Si tenta così di colmare il vuoto di competenze nelsettore sia a livello industriale sia accademico.

La progettazione di circuiti integrati è in continua evoluzione ed hasubito radicali cambiamenti negli ultimi 30 anni. Sin dalle prime esperienze di

28

integrazione di più transistor su silicio, cioè dal 1960, la progettazione dicircuiti integrati era riservata esclusivamente ad ingegneri elettronici moltoesperti e a specialisti dei semiconduttori. L’unico tipo di progettazionepossibile era di tipo full-custom secondo cui tutti i dettagli implementativi delcircuito sono sotto il controllo del progettista il quale deve dimensionare itransistor uno a uno e comporre layout geometrici che vengono poi simulatiper mezzo di un simulatore analogico. Per questi motivi lo sviluppo di circuiticomplessi, contenenti decine o centinaia di migliaia di transistor, richiedevatempi molto lunghi e considerevoli sforzi.

Fig. 2.1 : Rapporto di produzione fra progettazione full-custom e semi-custom.

Nei primi anni Ottanta la progettazione full-custom cominciò a cedere ilpasso ad un tipo di progettazione più ad alto livello, la progettazione semi-custom In questa nuova modalità di lavoro il progettista tratta con celleottimizzate fornite direttamente dalle fonderie insieme con i loro parametri dilavoro, tipicamente porte logiche (ad esempio NAND, NOR, XOR), memorieRAM, dispositivi di I/O (pad), ecc., e le compone in schemi circuitali dovesono evidenziati i collegamenti (schematic se la visualizzazione è di tipografico o netlist se è di tipo descrittivo). Queste rappresentazioni sono poisimulate via software tenendo conto dei tempi di ritardo di ogni singola porta epoi sono trasformate in layout geometrici con l’aiuto di efficienti programmi

1982 1990 1995

10 %

20 %

30 %

40 %

50 %

60 %

70 %

Full-custom Semi-custom FPGA

29

(placement & routing) . In questo modo il progettista non tratta mai consingoli transistor, né è tenuto a sapere la struttura interna delle celle usate.

Per tutti questi motivi negli ultimi anni la progettazione semi-custom dicircuiti digitali è diventata dominante rispetto a quella full-custom comevisibile in fig. 2.1. Nella stessa figura è visualizzata anche la produzione diFPGA (Field Programmable Gate Array), circuiti standard programmabilidall’utente in base all’applicazione per cui verranno utilizzati. Comemetodologia di progetto gli FPGA possono essere ricondotti alla progettazionesemi-custom. La progettazione full-custom viene praticata tuttora nel campoanalogico e, in campo digitale, da chi non si accontenta delle prestazioni dellestandard cell, cioè delle porte logiche standard fornite dalla fonderia, mapreferisce ottimizzare ogni minimo dettaglio per incrementare al massimo lavelocità di funzionamento del circuito elettronico.

Fig. 2.2 : NOT CMOS rappresentato dal punto di vista del layout (a),schematic (b), simbolo (c) e descrizione VHDL (d).

Un ulteriore salto metodologico nella progettazione di circuiti elettronicidigitali è avvenuta con l’introduzione dei i linguaggi descrittivi ad alto livello

in o u t

V D D

(a) (b )

o u t < = n o t( in )

(d )

in ou t

(c )

d iffu s io n e n m eta l lo d iffu sio ne p

po lis il ic ioin

30

HDL (Hardware Description Language). Gli HDL sono linguaggi diprogrammazione ad alto livello che includono strutture dati e istruzioni tali dapoter descrivere il funzionamento dell’hardware. Essi supportano ladescrizione di un circuito su vari livelli di astrazione, partendo da una primadescrizione del comportamento voluto e introducendo via via struttureaggiuntive in un processo di raffinamento gerarchico finché non si raggiungeil livello delle porte logiche. In ognuno di questi livelli gerarchici il codiceHDL non rappresenta solo una descrizione ma può essere simulata perverificarne la funzionalità logica e sintetizzata cioè convertita in un circuitovero e proprio costituito da varie celle standard scelte dalle librerie di unafonderia. I più famosi linguaggi HDL sono il Verilog e il VHSIC HDL, piùcomunemente noto come VHDL . Il Verilog è usato soprattutto in Americamentre il linguaggio più diffuso in Europa è il VHDL, il cui standard è statofissato nel 1987 ed è chiamato IEEE-1076. La fig. 2.2 mette a confronto ilmodo di visualizzare una semplice porta logica NOT dal punto di vista full-custom, cioè a livello di layout, semi-custom a livello di schema elettrico e disimbolo dotato di parametri di funzionamento e al livello più generale didescrizione VHDL.

Grazie al linguaggio VHDL e all’uso dei programmi della Cadencecomprati attraverso Europractice i tempi di la progettazione di circuiti integratisono stati ridotti drasticamente: ad esempio la progettazione del processorefuzzy a 4 ingressi del ’94 è stata stimata in 1.5 anni uomo mentre il lavororelativo al processore HEPE96 ha richiesto in lavoro di 0.5 anni uomo. Il miolavoro relativo al processore HEPE97 è stato ancora più breve grazie aivantaggi offerti dal VHDL. Contemporaneamente sono stati abbassati anche itempi di attesa dal momento in cui un progetto viene inviato alla fonderia finoalla sua riconsegna. Ora infatti questo tempo si aggira sui 2 mesi di attesa e siprevede in un futuro non molto lontano la restituzione del circuito integrato intempi inferiori alle 2 settimane.

2.2 Flusso di progetto

Il diagramma di flusso di figura 2.3 evidenzia tutti i passi necessarinell’ordine in cui devono essere eseguiti, con le necessarie iterazioni cheservono a migliorare e ad ottimizzare il progetto. I passi principali possonoessere così elencati :

(1) Generazione dello schema elettrico del circuito (schematic)(1.1) Stesura del codice VHDL.(1.2) Generazione di megacelle (opzionale).

31

(1.3) Simulazione funzionale del codice VHDL(Leapfrog).(1.4) Generazione dello schema elettrico attraverso la sintesi del codice

VHDL (Synergy).(1.5) Inclusione dei pad di I/O (dispositivi per l’input/output) e di

alimentazione.

(2) Simulazione(2.1) Simulazione circuitale (Verilog XL ).(2.2) Simulazione temporale (Veritime ).(2.3) Simulazione dei difetti di fabbricazione (Verifault XL ).

(3) Generazione del layout(3.1) Posizionamento delle megacelle.(3.2) Posizionamento delle porte logiche standard (standard cell).(3.3) Creazione dei canali di collegamento.(3.4) Routing globale (attribuzione delle connessioni logiche ai canali

fisici)(3.5) Routing dettagliato (creazione delle connessioni fisiche).(3.6) Estrazione delle capacità parassite post-layout.(3.7) Simulazione post-layout tenendo conto delle capacità parassite

dovute alle connessioni fisiche.

(4) Verifica del progetto(4.1) DRC (Design Rule Check) : verifica che i parametri geometrici

del circuito siano rispettati.(4.2) ERC (Electrical Rule Check) : verifica che i parametri elettrici

del circuito siano rispettati.(4.3) LVS (Layout Versus Schematic) : verifica che le strutture dello

schematic e del layout coincidano.

(5) Sottomissione del progetto e fabbricazioneUna volta finito il progetto viene inviato alla fonderia ES2 per uncontrollo e per la fabbricazione finale.

Nei seguenti paragrafi verranno spiegati in dettaglio tutti i passi quimenzionati, sottolineando con particolare attenzione come funzionanointernamente i vari programmi di sintesi e di simulazione e come riescono afornire un circuito finale le cui probabilità di funzionare sono molto alte.

32

Fig. 2.3 : Diagramma di flusso nella progettazione di circuiti integrati.

no

33

2.3 Il linguaggio VHDL [8]

Il linguaggio VHDL è un linguaggio descrittivo dell’hardware digitaleche permette di descrivere le funzionalità dei circuiti elettronici con un livellodi astrazione più alto del livello delle singole porte logiche. Il VHDL stadiventando rapidamente il mezzo più diffuso sia in Europa sia in America perla progettazione di circuiti integrati digitali. Le aziende americane cheprogettano e sviluppano ambienti integrati di CAD elettronico si stannostandardizzando sul VHDL come input e output dei lori prodotti. Fra questi sitrovano in commercio programmi di simulazione e di sintesi, programmi chegenerano codice VHDL a partire dallo schema elettrico e programmi checonvertono il VHDL in altri linguaggi descrittivi dell'hardware e viceversa.

La descrizione VHDL di un circuito può avere diversi livelli diastrazione : il livello più alto (quello più lontano dall’hardware) contiene unasommaria descrizione sul comportamento dell’intera rete, un livello intermediodescrive la suddivisione del circuito nei vari sottoblocchi ed il funzionamentodi ciascuno di questi mentre il livello di astrazione più basso, quello più vicinoall’hardware, è la descrizione del circuito a livello delle porte logiche. Ilgrande vantaggio di questo approccio risiede nel fatto che ogni descrizioneVHDL a qualsiasi livello può essere simulata funzionalmente e può essereeventualmente convertita in uno schema elettrico tramite sintesi, in modo cheil funzionamento del circuito può essere tenuto sotto stretto controllo ad ognilivello di astrazione.

Quando si comincia la progettazione di un circuito integrato convienedescrivere con il linguaggio VHDL il livello di astrazione più alto definendoingressi e uscite ed il comportamento interno a grandi linee, poi conviene fareuno schema a blocchi del circuito e una descrizione VHDL per ognuno diquesti blocchi. La descrizione VHDL del livello più alto conterrà al suointerno tutti i sottoblocchi collegati fra loro tramite segnali opportunamentetemporizzati.

Un altro grande vantaggio del linguaggio VHDL sta nel fatto che ilcodice può essere mappato in uno schema circuitale vero e proprio usando leporte logiche di una qualsiasi libreria tecnologica. Quando un circuito vienecostruito manualmente con un CAD elettronico qualsiasi come EDGE e sorgela necessità di riprogettarlo interamente con una libreria tecnologica diversatutto il progetto deve essere ricominciato da zero, in quanto i parametri difunzionamento delle celle variano da una fonderia all’altra. Invece il codiceVHDL che sta alla base di un progetto è assolutamente indipendente dallalibreria usata e rimane tale e quale qualsiasi sia la piattaforma tecnologica sullaquale verrà poi implementato. Questa caratteristica del VHDL risulta molto

34

utile in quanto dover riprogettare un intero circuito con una libreria diversapuò capitare più spesso di quanto non si creda : ad esempio il chip da meprogettato è stato implementato con la libreria tecnologica ES2 0.7 µm CMOSLibrary Design Kit , la libreria più moderna che la ES2 fornisce tramiteEuropractice. Se in un futuro prossimo si volesse riprogettare il processoreusando una tecnologia più avanzata per incrementarne ulteriormente leprestazioni, ad esempio a 0.5 µm, oppure si volesse passare ad una libreriatecnologica di un’altra fonderia non sarebbe necessario ripartire dal principio.In questo modo una nuova versione del chip potrebbe essere realizzatariducendo drasticamente il tempo e gli sforzi occorsi la prima volta.

Senza entrare nel merito di una approfondita descrizione della sintassi edelle istruzioni del linguaggio VHDL per la quale si rimanda al VHDLLanguage Reference Manual i paragrafi seguenti contengono una descrizionedella terminologia corrente usata in VHDL e una spiegazione di come ilVHDL riesce a tenere conto della natura intrinsecamente sequenziale /parallela dell’hardware da descrivere.

2.3.1 Terminologia VHDL

I termini elencati di seguito sono correntemente usati in VHDL everranno utilizzati nei capitoli successivi nella spiegazione del codice sorgentedei blocchi del processore. I commenti relativi alle linee di codice VHDL sonoriportate in corsivo.

Entità : costituisce l’interfaccia fra il circuito in esame ed il mondo esterno.Essa specifica il numero e il tipo delle porte di ingresso e di uscita senzacontenere alcun dettaglio sull’architettura interna del circuito.In VHDL l’entità corrisponde al simbolo nelle tradizionali metodologiedi progetto dei CAD elettronici. Negli schemi elettronici tradizionali soloi simboli delle porte logiche semplici come NOT, NAND, XOR, ecc.,hanno una rappresentazione grafica dedicata, riconosciuta ormai comestandard, mentre tutti i blocchi più complicati sono rappresentati comerettangoli dotati di ingressi e uscite e di un nome che li identifica. Questastessa funzione è svolta dal nome dato all’entità. Ad esempio l’entità diun semplice multiplexer a 2 ingressi può essere così descritta :

entity multiplexer is port(a,b,s : in bit ; out : out bit) ;end entity

35

Il nome multiplexer è assegnato all’entità che contiene tre bit in ingressoa, b, s ed un bit in uscita, out.

Architettura : descrive quanto avviene all’interno della “scatola nera” definitadall’entità.Continuando quindi il paragone di prima l’architettura è la controparteVHDL della vista schematic cosi come l’entità lo è del simbolo con unasostanziale differenza : mentre la vista schematic è ovviamente di tipostrutturale, cioè a livello di porte logiche e relativi collegamenti,l’architettura VHDL può essere sia di tipo strutturale sia di tipocomportamentale (behavioral). Una architettura di tipo strutturalecontiene una lista di tutte le porte usate con i relativi collegamenti,mentre una architettura di tipo comportamentale si limita a descrivere ilcomportamento logico desiderato del circuito con una serie di espressionilogiche comuni a molti linguaggi di programmazione. Ad esempiol’architettura behavioral del sopracitato multiplexer è semplicemente :

architecture behavioral of multiplexer is if(s = ’1’) then out <= a ; --assegnazione del valore di a all’uscita out else out <= b ; --assegnazione del valore di b all’uscita out end if ;end architecture ;

con una sintassi molto simile alla maggior parte dei linguaggi diprogrammazione.

Configurazione : si usa l’istruzione di configurazione quando si vuole porreall’interno della descrizione VHDL di un circuito un blocco appartenentealla libreria o un blocco costruito in precedenza. Ad esempio se si vuoleinserire la cella multiplexer descritta precedentemente la sintassidell’istruzione di configurazione è la seguente :

mpx : multiplexer port map(a => A, b => B, s => S, out => OUT) ;

Questa istruzione crea una copia della cella multiplexer di nome mpx e neassocia gli ingressi ai segnali esterni A, B, S e OUT.

36

Attributo : è un insieme di dati utili associato alla descrizione VHDL di uncircuito. Per esempio si possono attribuire ad un circuito caratteristichedi funzionamento quali la massima corrente d’uscita, la temperaturamassima di lavoro o il carico capacitivo che le uscite dovranno pilotare.

Processo : l’istruzione “process” è l’unità di base di una architettura di tipocomportamentale VHDL. Essa permette di rendere sequenziale l’ordinedi esecuzione di diverse istruzioni che altrimenti opererebbero inparallelo.

2.3.2 Esempi di progettazione VHDL

In questo paragrafo verranno descritti i vari modi possibili per descriverecon il linguaggio VHDL un semplice flip-flop di tipo set-reset. Il simbolo e loschema circuitale sono ovviamente noti e sono visualizzati in fig. 2.4 : si trattadi passare da questo tipo di descrizione schematica alla descrizione VHDL.

Fig. 2.4: Simbolo (a) e schematic (b) di un flip-flop di tipo set-reset.

La stesura del codice per l’entità non può essere che la seguente :

entity srff is port(set, reset : in bit ; -- set e reset sono ingressi a 1 bit q, notq : out bit) ; -- q e notq sono uscite a 1 bitend srff ;

Passando alla descrizione dell’architettura si possono intraprendere trestrade diverse :

F ig . 2 : S im b o lo (a ) e sch em atic (b ) d i u n flip - f lo p d i tip o se t-rese t.

(a ) (b )

Q

37

1) Architettura strutturale :Un primo modo di descrivere l’architettura del flip-flop è a livello delle

porte logiche che lo costituiscono : le due porte NAND vengono riferite ecollegate fra loro tramite opportuni segnali :

architecture netlist of srff is component nand2 -- descrizione del componente usato port(a, b : in bit ; -- a e b sono due ingressi a 1 bit c : out bit) ; --c è una uscita a 1 bit end component ; begin --inizia la descrizione dei collegamenti U1 : nand2 port map(a => set, b => notq, c => q) ; U2 : nand2 port map(a => reset, b => q, c => notq) ;end netlist ;

Vengono generate due copie U1 e U2 della porta logica nand2, unsemplice nand a due ingressi, e i rispettivi ingressi a, b e l’uscita c vengonocollegati come scritto. Una architettura di questo tipo si chiama netlist ed è unmodo esattamente equivalente di descrivere lo schema circuitale elencandotutte le singole porte ed i rispettivi collegamenti. È ovvio che adottandoquesto tipo di architettura il progettista deve già avere chiaro in mente loschema elettrico, quindi non sfrutta in pieno le potenzialità del linguaggioVHDL e dei programmi di sintesi.

2) Architettura comportamentale (behavioral) :In questo tipo di rappresentazione le uscite sono definite in base ad

operazioni logiche effettuate sugli ingressi :

architecture behavioral of rsff isbegin q <= NOT(notq AND set) ; --istruzione di assegnazione al segnale q notq <= NOT(q AND reset) ; --istruzione di assegnazione al segnale notqend behavioral ;

Tramite un programma di sintesi come Synergy gli operatori logici ANDe NOT vengono implementati in hardware con due porte NAND. Inoltreoccorre sottolineare che le due istruzioni di assegnazione ai segnali q e notqsono istruzioni concorrenti, cioè non vengono eseguite in un ordineprestabilito. Ogni assegnazione viene eseguita appena si ha un cambiamento su

38

uno dei due segnali che si trova alla destra del simbolo di assegnazione “<=”.Nel caso considerato appena si ha una variazione di notq viene eseguita laprima istruzione che produce una variazione di q, quest’ultima variazioneproduce quindi l’esecuzione della seconda istruzione di assegnazione.

3) Architettura sequenziale :Il terzo modo di rappresentare l’architettura di un circuito consiste

nell’usare l’istruzione “processo” che permette di rendere le istruzioni diassegnazione a segnale di tipo sequenziale :

architecture sequential of rsff isbegin process(set, reset) --inizio dell’istruzione “processo” begin if(set = ’1’ and reset = ’0’) then --caso 1

q <= ‘0’ ; notq <= ‘1’ ; elsif(set = ’0’ and reset = ’1’) then --caso 2 q <= ‘1’ ; notq <= ‘0’ ; elsif(set = ’1’ and reset = ’1’) then --caso 3

q <= NOT(notq) ;notq <= NOT(q) ;

end if ; end process ;end sequential ;

L’istruzione “process” viene eseguita quando avviene una variazione suuno dei due ingressi set e reset e le istruzioni contenute all’interno delprocesso sono eseguite in modo sequenziale. In questo modo una volta partitoil processo prima viene assegnato un valore a q e soltanto dopo a notq. Seinvece la riga di codice VHDL fosse stata :

notq <= ‘X’ ; q <= ‘X’ ;

dove per ‘X’ si intende un qualunque valore logico, allora l’ordine diesecuzione delle istruzioni sarebbe stato l’opposto.

In conclusione sono stati descritti tre tipi di architetture per la medesimaentità e può sorgere la domanda : quale è l’architettura più adatta perdescrivere il flip-flop set-reset ?

L’architettura di tipo netlist è indicata se si ha già chiaro in mente loschema circuitale ma può essere conveniente usarla solo per circuiti molto

39

piccoli; inoltre è la meno flessibile in quanto si riferisce a componenti di unaben precisa libreria, quindi non sfrutta in pieno i vantaggi offerti dal VHDL.

Per quanto riguarda gli altri due tipi di architettura un uso sapiente diistruzioni sequenziali e parallele all’interno della stessa architettura puòportare ad efficienti modellizzazioni del comportamento dell’hardware.

Gli esempi qui riportati dovrebbero permettere di leggere e capire come èstato strutturato il codice VHDL di ogni blocco del processore il cui codice èriportato in versione integrale e completo in Appendice B. Lo stile usato quasiovunque è quello di una architettura mista behavioral / sequenziale :l’architettura tipo è suddivisa in vari processi indipendenti, alcuni sincronizzaticon il clock (cioè vengono attivati solo dall’arrivo del fronte di salita o didiscesa del clock), altri sincronizzati con la variazione di segnali di tipo piùgenerale come reset o memory enable. Tutti questi processi sono indipendentifra loro, perciò a volte può risultare difficile avere un controllo pieno dellapropagazione dei segnali fra i vari processi. È per questo motivo che risultautile avere un simulatore di codice VHDL quale Leapfrog Simulator chepermette di conoscere istante per istante come variano i segnali all’interno diogni processo e quindi permette un controllo del comportamento globale.

2.4 Generazione delle megacelle

Alcuni componenti elettronici standard come le memorie RAM, ROM,FIFO ed i moltiplicatori possono essere generati automaticamente grazie adun programma fornito dalla fonderia ES2 senza doverli progettare a partire dauna descrizione VHDL o dal livello delle porte logiche. Il programma inlinguaggio C ES2generate permette di generare una qualsiasi delle megacellecitate inserendo soltanto i parametri di lavoro voluti dall’utente. Ad esempionel processore HEPE97 sono presenti tre memorie RAM generate comemegacelle. Il programma interattivo ES2generate richiede il numero di paroledella memoria ed il numero di bit per ogni parola e produce in uscita le diverseconfigurazioni finali fra cui è possibile scegliere. Per quanto riguarda lamemoria delle regole Ramrule, che contiene tutte le regole del sistema fuzzy,inserendo il numero di parole, 64, ed il numero di bit per parola, 9, si ottienein uscita la possibilità di scegliere fra 4 possibili configurazioni dellaRamrule :

Tempo d’accesso Dimensioni laterali Area totale1) 8.79 ns 0.372 x 0.847 mm x mm 0.32 mm2

2) 8.02 ns 0.574 x 0.549 mm x mm 0.32 mm2

3) 8.03 ns 0.903 x 0.391 mm x mm 0.35 mm2

40

4) 8.31 ns 1.761 x 0.307 mm x mm 0.54 mm2

La scelta fra queste 4 possibilità può sembrare del tutto arbitraria madeve essere guidata da precise linee guida : il parametro più importante dascegliere in base alla temporizzazione esterna della memoria è il tempod’accesso, cioè il tempo che passa dalla commutazione del segnale diabilitazione della memoria (memory enable) a quando il dato è stato letto oscritto. Occorre poi prestare attenzione alle dimensioni laterali della memoriail cui valore è del tutto irrilevante in fase di simulazione dello schemacircuitale ma che può diventare decisivo in fase di progettazione edottimizzazione del layout del progetto. Per riempire al meglio gli spaziall’interno dell’area utilizzata per realizzare il circuito integrato può risultarepiù conveniente scegliere una memoria RAM di forma quasi quadrata oppureuna memoria molto più lunga che larga. Nel nostro caso, per esempio, dopoavere provato tutte le possibili configurazioni nel layout finale del processorela scelta è caduta sulla terza possibilità in quanto le dimensioni laterali eranoquelle che meglio si adattavano alla geometria dei vari blocchi. Quando poi lafonderia ES2 dovrà realizzare fisicamente la memoria su silicio farà uso ditutti i file generati dal programma ES2generate per precisare i parametri fisicidella memoria.

2.5 Simulazione funzionale con Leapfrog Simulator

Leapfrog Simulator permette di simulare il funzionamento logicopartendo dalla descrizione VHDL di una rete logica a qualsiasi livello diastrazione. Questo risulta molto utile quando l’architettura VHDL è formata dapiù processi che lavorano in parallelo e può non essere più chiaro l’ordine incui i vari segnali commutano. Al variare dei segnali in ingresso Leapfrogvisualizza istante per istante il livello logico, “0” o “1” o “X” cioè indefinito,di qualsiasi segnale interno e di tutte le uscite della rete logica. In questo modola rete viene stimolata con valori in ingresso scelti dal progettista checontemporaneamente tiene sotto controllo l’evolversi temporale di tutti isegnali usati nell’architettura. Ad esempio il file contenente gli stimoli con cuisi può simulare logicamente una qualsiasi delle architetture con cui si èdescritto il flip-flop tipo set-reset può contenere i seguenti ingressi :

set <= ‘1’ ; reset <= ‘0’ ; --istruzione di assegnazione all’istante inizialewait for 50 ns ;set <= ‘0’ ; reset <= ‘1’ ; --istruzione di assegnazione dopo 50 nswait for 50 ns ;

41

set <= ‘1’ ; reset <= ‘1’ ; --istruzione di assegnazione dopo 100 nswait for 50 ns ;

All’inizio i due ingressi set e reset vengono settati a 0 e rimangono inquesta situazione per 50 ns, dopodiché variano portandosi nella configurazione1-0 e così via. Le forme d’onda (C-waves) generate da Leapfrog visualizzanola variazione delle uscite nel momento esatto in cui ciò dovrebbe avvenirelogicamente, come visibile in fig. 2.5.

Fig. 2.5: Forme d’onda relative alla simulazione del flip-flop.

La simulazione funzionale del codice VHDL è molto importante ancheperché, una volta accertata la sua correttezza, si può dedicare tutta l’attenzioneal processo di sintesi e alla simulazione dello schema circuitale così ottenuto.

2.6 Sintesi del codice VHDL

L’aspetto più interessante nella progettazione ad alto livello di circuitiintegrati è la sintesi del codice VHDL. La sintesi è un metodo completamenteautomatizzato di convertire un alto livello di astrazione (descrizione VHDL) inun livello di astrazione molto più basso (schema circuitale). A livellocommerciale esistono molti programmi di sintesi: i più usati sono Synergydella Cadence e Synopsys dell’omonima casa americana. Noi abbiamo usato

S E T

R E S E T

Q

N O T Q

50 n s 50 n s 50 n s

42

Synergy per ragioni di compatibilità col software utilizzato che è dellaCadence.

Il sintetizzatore Synergy prende in ingresso il codice VHDL e lotrasforma in una lista (netlist) di porte logiche prese dalla libreria tecnologicascelta (processo di mapping). Questa netlist può poi essere ottimizzata perrispettare vincoli come area, velocità, carico capacitivo, ecc., che sono sceltidal progettista a seconda dell’applicazione finale. Gli ingressi al processo disintesi sono la descrizione VHDL, i vincoli e la libreria tecnologica come sivede in fig. 2.6.

Fig. 2.6 : Schema a blocchi del processo di sintesi.

I prossimi tre paragrafi descrivono quali tipi di vincoli si possono usare ecome funziona più in dettaglio il processo di sintesi vero e proprio.

2.6.1 Il processo di sintesi

Per convertire una descrizione VHDL in uno schema circuitale occorronotipicamente tre passi. Prima di tutto la descrizione VHDL viene convertita inuna descrizione booleana delle uscite in funzione degli ingressi, cioè ogniuscita viene rappresentata come una serie di operazioni logiche AND e OReffettuate sugli ingressi. Tutte le normali istruzioni VHDL quali IF, CASE,LOOP e tutte le istruzioni di assegnamento a segnale vengono convertitenell’equivalente booleano attraverso semplici tabelle di verità che associano ivalori reali degli ingressi ai valori desiderati delle uscite. La descrizioneottenuta in questo modo è funzionalmente corretta ma non è per niente

descrizione VHDL

vincoli

sintesi

libreria tecnologica

netlist

43

ottimizzata, cioè se venisse direttamente convertita in uno schema circuitaleimplementando ogni operazione logica AND con la porta logica AND ed ognioperazione logica OR con la relativa cella il risultato ottenuto non sarebbeaccettabile né in termini di area né in termini di velocità. Per questo motivo ilsecondo passo consiste nell’applicare algoritmi di ottimizzazione booleana cheportano alla realizzazione di una descrizione logica equivalente maottimizzata. L’ultimo passo consiste nel mappare la descrizione booleanafinale in porte logiche appartenenti alla libreria scelta e produrre la netlistfinale. Questa netlist viene scelta fra una varietà di possibili soluzioni in baseai vincoli imposti dal progettista principalmente sull’area e sulla velocità.Alcune netlist danno origine a schemi circuitali che sono molto veloci marichiedono molte celle della libreria, altre producono schemi elettrici più lentima con una superficie minore.

2.6.2 Vincoli

I vincoli forniscono gli obiettivi che i processi di ottimizzazione emapping dovrebbero raggiungere e controllano l’implementazione strutturaledel progetto. I vincoli disponibili nei moderni programmi di sintesi riguardanol’area, i ritardi, la potenza assorbita, il carico, ecc., ma quelli più usatiriguardano essenzialmente l’area e la velocità. Più in dettaglio:1) Area : il vincolo sull’area viene usato per specificare il valore di superficie

desiderato entro il quale il progettista spera rientri il circuito. L’unità dimisura con cui viene specificata l’area può essere scelta dal progettista madi solito si usano i micrometri quadrati (µm2). Imponendo ad un circuito ilvincolo di non superare i 1200 µm2 il programma di sintesi ottimizza lanetlist ottenuta fino a soddisfare l’obiettivo richiesto se ciò è possibile,altrimenti ricerca il valore più vicino possibile a quello desiderato.Specificando come vincolo un’area uguale a 0 µm2 l’algoritmo diottimizzazione lavorerà fino a trovare l’area più piccola possibile anche seciò andrà interamente a scapito del tempo di propagazione del segnaledall’ingresso alle uscite.

2) Velocità : questo vincolo viene usato per tenere sotto controllo i ritardimassimi di propagazione del segnale in alcuni percorsi del circuito. Adesempio un vincolo temporale tipico è il ritardo massimo con cui il segnalesi propaga dall’ingresso all’uscita. Questo vincolo guida il processo diottimizzazione e di mapping fino ad una netlist che soddisfa la richiesta. Peril sintetizzatore questo tipo di richieste è il più difficile da rispettare. Lafigura 2.7 permette di chiarire meglio questo concetto. Lo schema disegnato

44

è molto rappresentativo per una tipica rete logica sequenziale : il flussologico dei dati è sincronizzato con un clock e nel tempo che passa da uncolpo di clock al successivo il segnale deve essere elaborato dalla logicacombinatoria che si trova fra uno strato di registri ed il successivo. Si puòcomunicare al sintetizzatore quale dovrebbe essere la frequenza di lavorodel clock in modo che l’ottimizzatore manipoli la logica combinatoria inmodo tale che il segnale prodotto faccia in tempo a sincronizzarsi con ilperiodo di clock successivo. Altrimenti si può direttamente porre un vincolotemporale sulle uscite della logica combinatoria in relazione agli ingressi.Per raggiungere questo obiettivo il sintetizzatore esegue un’analisitemporale dei ritardi in ogni nodo del circuito, tenendo conto del tempo dipropagazione di ogni singola porta e sommando questi ritardi per ogni portache viene attraversata. Se alla fine di questo lavoro di verifica ilsintetizzatore giunge alla conclusione che i vincoli temporali sono statirispettati, il processo di ottimizzazione e mapping può ritenersi concluso,altrimenti ulteriori strategie di ottimizzazione dovranno essere applicate.

Fig. 2.7: Struttura tipica di una rete logica sequenziale.

2.6.3 Libreria tecnologica

La libreria tecnologica contiene tutte le informazioni necessarie alprogramma di sintesi per creare una netlist di porte logiche che soddisfi aivincoli imposti dal progettista. Di ogni porta logica la libreria tecnologicacontiene non solo la funzionalità logica, ma anche l’area, il ritardodall’ingresso all’uscita (minimo, tipico, massimo), il fanin (il valore capacitivo

REGISTRO A REGISTRO B

CLOCK

INGRESSO USCITALOGICACOMBINATORIA

45

assegnato alla porta d’ingresso), il fanout (la capacita di pilotare le porte cheseguono) e tutte le caratteristiche fisiche utili al sintetizzatore. Le tabelle tab.2.1 e 2.2 riportano tutte le caratteristiche della porta logica AND2 (AND a dueingressi) della libreria StdLib della ES2.

Lunghezza 13.400 µmLarghezza 38.000 µm

Numero di transistor 7Dissipazione 4.26 µW/MHzFanin in A 0.029 pFFanin in B 0.033 pFFanout in Y 1.31 pF

Tab. 2.1: Tabella con le caratteristiche di una porta logica AND2 della libreriaStdLib della ES2.

CODICE DA A MIN TIP MAXtplh a y 0.14 ns 0.30 ns 0.60 nstphl a y 0.19 ns 0.40 ns 0.80 nstplh b y 0.17 ns 0.36 ns 0.71 nstphl b y 0.18 ns 0.38 ns 0.75 nsdtplh a o b y 0.37 ns/pF 0.78 ns/pF 1.55 ns/pFdtphl a o b y 0.39 ns/pF 0.82 ns/pF 1.63 ns/pF

Tab. 2.2: Tempi di ritardo fra ingresso e uscite della porta AND2.

Nella successiva fig. 2.8 è visualizzato il funzionamento dell’algoritmodel sintetizzatore per calcolare il tempo che il segnale impiega fra la porta A1e la C1. Esso è dato da:

ritardo totale = (ritardo intrinseco) + (ritardo dovuto al carico) + (ritardo dovuto alla connessione fisica)

dove:

• il ritardo intrinseco è il tempo che la porta B1 impiegherebbe percommutare se non dovesse pilotare altre porte;

46

• il ritardo dovuto al carico è il ritardo dovuto al carico capacitivo da pilotarerappresentato dalla porta C1 ;

• il ritardo dovuto alla connessione fisica è il tempo che il segnale impiegaper propagarsi lungo la connessione fisica fra le porte B1 e C1.

Fig. 2.8: Le tre componenti del ritardo attraverso la porta B1.

Normalmente il sintetizzatore tiene conto soltanto delle prime duecomponenti a meno che il ritardo dovuto alle connessioni fisiche non siagiudicato determinante dal progettista: in questo caso occorre settare le opzionidel sintetizzatore in modo che ad ogni collegamento sia assegnato un ritardo.In base ai valori riportati nella libreria tecnologica della cella ES2 ilsintetizzatore calcola il tempo minimo ed il tempo massimo che il segnaleimpiega per fare commutare la porta B1.

Inoltre il sintetizzatore tiene conto del fanin e del fanout di ogni porta percontrollare che non vi siano dei sovraccarichi (overload) : ad esempio la portaAND2 ha un fanout dichiarato di 1.31 pF, cioè può pilotare senza problemitante porte logiche in parallelo tali che la capacità totale risulti inferiore a 1.31pF. Se questo valore viene oltrepassato la cella AND2 non è più capace dipilotare le porte che la seguono e il funzionamento dell’intera rete risultapregiudicato.

A volte però può capitare che il sintetizzatore commetta degli errori eproduca degli schemi elettrici con sovraccarichi di diversa entità: si ha unimportant overload quando il rapporto fra il carico capacitivo effettivo equello massimo pilotabile è maggiore di 1.4, un overload normale invece

ritardo intrinseco

ritardo dovutoal collegamento fisico

ritardo dovuto al carico

B1 A1

C1

47

quando questo rapporto è compreso fra 1 e 1.4. L’unico modo per risolverequesto tipo di problema è intervenire direttamente sullo schema elettricointroducendo delle porte buffer (BUF39 nella libreria standard della fonderiaES2) che hanno un basso fanin e sono in grado di pilotare un alto caricocapacitivo.

La libreria tecnologica può anche contenere dati riguardanti le variazionidei parametri di funzionamento di una cella in funzione delle condizionieffettive di lavoro, quali la tensione di alimentazione o la temperatura deldispositivo. Tenendo conto di tutti questi fattori è molto probabile che loschema elettrico finale sia perfettamente corrispondente alle aspettative delprogettista sotto ogni punto di vista.

2.7 Strumenti di simulazione

Poiché le reti logiche diventano giorno dopo giorno sempre piùcomplicate i progettisti si trovano di fronte all’arduo problema di assicurarsiche i loro progetti funzionino correttamente una volta realizzati. I costi direalizzazione uniti al tempo totale di fabbricazione rendono vitale la necessitàche il progetto commissionato sia corretto e perfettamente funzionante in ognisua parte, prima di essere commissionato alla fonderia. È per tutti questimotivi che la simulazione circuitale assistita al calcolatore assume particolareimportanza, in quanto ci si aspetta che un progetto che abbia superato tutte lesimulazioni software funzioni esattamente allo stesso modo una voltaimplementato in hardware.

Un approccio possibile per simulare il funzionamento di un progetto èdividere la verifica funzionale e temporale in due processi separati, per mezzodi due programmi diversi ognuno ottimizzato per il proprio compito. In questomodo il simulatore funzionale è libero di usare un semplice modello per iritardi che permette una verifica funzionale molto veloce. Un secondoprogramma gestisce separatamente la verifica dei tempi usando algoritmisofisticati creati appositamente per l’analisi temporale. L’ambiente integrato dilavoro Cadence utilizza questo tipo di approccio con i due simulatori Verilog eVeritime. Verilog è un simulatore logico estremamente veloce che permetteuna rapida analisi funzionale, Veritime è il corrispettivo analizzatore dei tempiche permette un’approfondita analisi temporale del medesimo circuito.Veritime è capace di svolgere o una analisi temporale di ogni percorso dellarete logica desiderato oppure una unica forma di analisi ibrida che fonde lapotenza di una analisi temporale basata sulla conoscenza dei vettori di ingressoe di programmi che calcolano il tempo impiegato dal segnale su ogni possibilepercorso del circuito. I prossimi paragrafi descrivono più in dettaglio il

48

funzionamento di Verilog e Veritime e come devono essere usati per testarenel modo più approfondito possibile il funzionamento di un circuito.

2.8 Simulazione circuitale con Verilog XL

Il primo controllo da effettuare sullo schema elettrico ottenuto con ilsintetizzatore Synergy ha lo scopo di verificare che questo si comportiesattamente come descritto nel codice VHDL. Poiché il codice VHDL è statosimulato in precedenza con alcuni vettori di ingresso usando il simulatoreLeapfrog, conviene stimolare la rete circuitale ottenuta con gli stessi ingressiper verificare che i risultati siano compatibili.

Il procedimento è analogo alla simulazione logica: in un file di stimoloSTL (Simulation Test Language) vengono scritti i vettori di test che verrannoposti in ingresso al circuito; quindi le uscite e tutti i segnali interni richiesti dalprogettista vengono monitorati per controllare che i risultati siano corretti.Tutti i segnali di cui si vuole controllare l’evoluzione temporale sono graficaticon forme d’onda (c-waves) esattamente come avveniva con Leapfrog matenendo conto del ritardo introdotto da ogni cella. Fra le opzioni disimulazione si può scegliere se considerare per ogni cella il tipo di ritardominimo, tipico o massimo fra i tre valori che si trovano nella libreriatecnologica: di solito viene scelto il ritardo massimo per mettersi nel casopeggiore possibile, anche se la possibilità che tutte le celle di una retecommutino con il ritardo massimo è una situazione altamente improbabile, èmolto più probabile una distribuzione normale dei ritardi attorno ad un valoremedio. La fig. 2.9 mostra le forme d’onda relative al flip-flop set-reset

49

Fig. 2.9: Forme d’onda relative alla simulazione del flip-flop con Verilog.

generate da Verilog e va confrontata con la fig. 2.3 che riporta le forme d’ondagenerate da Leapfrog. Poiché il simulatore Verilog usa lo stesso algoritmo peril calcolo dei ritardi di Synergy si può verificare l’accuratezza del lavorosvolto dal sintetizzatore. In più Verilog produce in uscita il file dl.log nel qualeè riportato il carico capacitivo reale di tutti i segnali interni al circuito,compresi eventuali sovraccarichi che devono essere eliminati conl’introduzione di celle buffer nello schema circuitale.

Vediamo come esempio una parte di un file di stimolo STL relativo ad unflip-flop di tipo D per capire in particolar modo come temporizzare il clock edi segnali in ingresso rispetto al clock:

Input.stl di un flip-flop di tipo D

--definizione dei segnali usati

defpin Data_in in --dato in ingressodefpin Ck clk --clockdefpin Data_out out --dato in uscita

--definizione delle temporizzazioni

deftiming 100ps 2ns 20nsdefclock “…..11111” Ck --basso per 10 ns e alto per 10nsdefstrobe in edge “.....%%%%%” Data_in --il dato cambia dopo 10nsdefformat (Data_in)deftestxv(0) --entra il dato a livello logico 0xv(1) --entra il dato a livello logico 1

50

endtest

Fig. 2.10: Temporizzazione del flip-flop tipo D descritto nel file input.stl.

La visualizzazione grafica dei segnali relativi a questi stimoli è riportatain fig. 2.10. Per prima cosa con l’istruzione “defpin” vengono definiti gliingressi Data_in e Ck e l’uscita Data_out. Con l’istruzione “deftiming” vienespecificata la temporizzazione degli ingressi: 100ps è la risoluzione usata nellavisualizzazione delle forme d’onda d’uscita (ogni evento che ha una dinamicainferiore ai 100 ps non viene rilevato da Verilog), 20 ns è il periodo del clockusato, 2 ns è la decima parte del periodo clock, il valore temporale di ognunodei puntini, unità o percentuali che si trovano nelle istruzioni successive.L’istruzione “defclock” definisce la temporizzazione del segnale Ck, cioècome varia il clock all’interno dei 20 ns: cinque punti seguiti da cinque unitàstanno a significare che per 10 ns il clock sta a livello logico 0 per poicommutare e rimanere a livello logico 1 per i rimanenti 10 ns. Se l’istruzionedefclock fosse stata la seguente:

defclock “..11111…” Ck

allora il clock sarebbe rimasto a livello logico 0 per 4 ns (due puntiniequivalgono a 4 ns), a livello 1 per 10 ns e di nuovo a 0 fino alla fine delperiodo. Con la stessa istruzione si potrebbe definire un clock asimmetrico, adesempio un clock che rimane più tempo a livello logico 0 che a 1, mettendopiù puntini che unità. L’istruzione “defstrobe in edge” definisce latemporizzazione dell’unico ingresso Data_in rispetto al clock: i 5 punti seguitida 5 simboli “%” significano che il dato commuta 10 ns dopo l’inizio del

C k

D a ta_ in

10 ns 10 n s

2 0 ns

51

periodo clock, come visibile in fig. 2.10. Usando quindi le istruzioni defclocke defstrobe si può modellare a piacimento la temporizzazione dei segnali diingresso ad una rete data. La successiva istruzione “defformat” contiene unalista di tutti gli ingressi ad esclusione del clock (in questo caso solo Data_in)mentre tutte le istruzioni comprese fra “deftest” ed “endtest” contrassegnatecon la parola chiave “xv” costituiscono la successione dei livelli logici deisegnali d’ingresso con le temporizzazioni definite sopra: in questo caso adesempio durante il primo periodo di clock Data_in si trova a livello logico 0mentre durante il secondo si trova ad 1.

Una volta verificato il funzionamento del circuito con Verilog ènecessario passare ad una più approfondita analisi temporale con Veritime,che è capace di evidenziare problemi spesso invisibili a Verilog.

2.9 Analisi temporale con Veritime

Veritime è un programma della Cadence dedicato ad una analisiapprofondita della temporizzazione delle reti logiche digitali. I prossimiparagrafi sono dedicati ad una spiegazione dettagliata del modo di operare diVeritime e degli algoritmi che ne stanno alla base confrontandoli con quelliusati dal sintetizzatore Synergy e da Verilog.

2.9.1 Dispositivi di memoria e vincoli temporali

Le reti logiche contengono generalmente parti di logica puramentecombinatoria, dove il segnale scorre attraverso le porte rispettando i relativiritardi di propagazione. Ogni blocco di logica combinatoria è di solito seguitoe preceduto da uno o più elementi pilotati da un clock che servono amemorizzare lo stato dei segnali per il periodo di clock successivo. Questielementi di logica sequenziale, che d’ora in poi saranno chiamati dispositivi dimemoria, sono essenziali per costruire architetture di tipo pipeline e sonoparticolarmente importanti per Veritime.

Lo scopo principale dell’analisi dei tempi è verificare che il flusso di datiattraverso i blocchi di logica combinatoria sia sufficientemente veloce da nonviolare i vincoli imposti sui “dispositivi di memoria”. Dal punto di vistadell’analisi di una rete si può dire che tali dispositivi suddividono l’intera retein blocchi più semplici da trattare.

Questi dispositivi di memoria comprendono :• flip-flop di tipo latch : un flip-flop di questo tipo lascia passare il dato solo

se la linea del clock è attiva, mentre memorizza l’ultimo valore in ingressoquando il clock è a livello logico 0.

52

• flip-flop di tipo edge-triggered : un flip-flop di questo tipo trasferisce ildato dall’ingresso all’uscita solo quando si ha una transizione sul valore delclock (ad esempio quando passa dal valore 0 a 1). Si usa il termine registroper indicare un insieme di flip-flop di tipo edeg-triggered che sonocomandati in parallelo dal medesimo clock.

• memorie RAM : le memorie vengono usate per memorizzare una grandequantità di dati. Anche se di solito non sono pilotate da un clock devonorispettare alcuni rigidi vincoli temporali (timing check). Ad esempiol’indirizzo inviato ad una RAM non deve variare non solo durante la fase discrittura in memoria ma anche per un certo periodo precedente e seguente lascrittura. Vincoli temporali di questo tipo sono una parte importante delprogetto e una completa analisi temporale ne deve tenere conto.

In una analisi di Veritime i vincoli temporali imposti su ciascuno deidispositivi di memoria sopra descritti sono incorporati nella libreriatecnologica. I più comuni vincoli temporali sono quelli di setup, di hold e dinochange (vedi fig. 2.11 e fig. 2.12).

C lock

se tup ho ld

4 3

reg ione d i v io laz ione

(i l dato non deve cam bia re in questo p er iodo )Fig. 2.11: Diagramma temporale dei vincoli di setup e hold.

53

I vincoli di setup e hold specificano che il dato in ingresso deve rimanerestabile per un certo periodo di tempo prima e dopo che vari il segnale delclock. Il vincolo nochange invece è usato per specificare che il dato non deveassolutamente commutare di livello entro un periodo specificato dalprogettista. Le RAM hanno una serie di vincoli relativi alla temporizzazionedel bus di indirizzi, del bus di dati di ingresso e uscita e dei segnali di enabledi lettura e di scrittura che sono tutti specificati nella libreria Megacell.

Fig. 2.12: Diagramma temporale del vincolo nochange.

La maggior parte dei vincoli temporali è usata per governare il rapportofra due ingressi di un dispositivo di memoria, tipicamente un dato e un clock.Veritime trova una violazione quando la relativa temporizzazione dei percorsiche conducono a tali ingressi è tale da violare il vincolo temporale che governail dispositivo.

2.9.2 Come Veritime trova le violazioni temporali

Per verificare la presenza di violazioni temporali nella temporizzazionedi un flip-flop Veritime deve calcolare gli istanti di tempo in cui si ha unavariazione sul dato e sul clock. Per fare questo il simulatore deve analizzaretutta la logica combinatoria che sta a monte del flip-flop, tenendo inconsiderazione tutti i possibili percorsi che il dato e il clock possono scegliere.In più sia per il dato, sia per il clock, Veritime tiene conto dell’istante minimoe di quello massimo in cui può avvenire la commutazione : l’istante minimo ècalcolato utilizzando il percorso più corto assegnando ad ogni portaattraversata il ritardo di propagazione minimo, l’istante massimo invece è

c lo ck

4

lim ite 1

3

l im ite 2

reg io ne d i v io laz io ne

54

calcolato sul percorso più lungo assegnando il ritardo di propagazionemassimo ad ogni porta. In questo modo entrambi i segnali in ingresso al flip-flop avranno un intervallo di tempo in cui possono commutare.

La scelta del percorso più corto con ritardi minimi e di quello più lungocon ritardi massimi è dovuta alla necessità di prendere in considerazione i duecasi estremi che possono verificarsi. Una volta eseguiti questi calcoli Veritimeesamina la sovrapposizione dei due intervalli : se c’è la possibilità che ilvincolo temporale associato al flip-flop non sia rispettato viene visualizzato unmessaggio di errore. Di fronte ad un problema di questo tipo si possonointraprendere diverse azioni, ad esempio si può :

1) aumentare il periodo del clock (e quindi diminuire la frequenza di lavoro) ;2) diminuire la lunghezza del collegamento fisico fra due punti sul layout ;3) usare componenti più veloci o, in un progetto full-custom, riprogettare certi

transistor per renderli più veloci ;4) usare algoritmi logici più veloci, ad esempio sostituendo un sommatore in

cascata con un carry look ahead ;5) cambiare l’architettura del progetto, ad esempio spezzando in più periodi di

clock una operazione complessa .

Ognuno di questi accorgimenti richiede di dovere riprendere e modificarel’architettura del progetto fino a quando non siano state eliminate tutte leviolazioni. Il simulatore Veritime aiuta a scegliere fra le varie possibilidecisioni da prendere con alcune utilità che lo contraddistinguono : ad esempioVeritime può evidenziare il percorso che dà dei problemi direttamente sulloschematic in modo che si possa intervenire solo nel punto critico. Un’altracaratteristica utile di Veritime è la funzione distribuzione dei percorsi, chepuò aiutare a stimare quanto sia difficile correggere i problemi temporali nelcircuito. Questa routine calcola il tempo impiegato su ciascuno dei possibilipercorsi fra un insieme di ingressi e un insieme di uscite, producendo in uscital’istogramma della distribuzione dei ritardi : se solo pochi percorsi produconouna violazione allora il problema può essere risolto con il minimo sforzomodificando i soli percorsi interessati, se invece un numero di percorsi moltogrande è fonte di violazioni allora il blocco circuitale deve essere riprogettatoda capo. La funzione di distribuzione dei percorsi usa un algoritmo ottimizzatoper essere molto veloce anche quando il numero totale di percorsi possibili èenorme.

Prima di prendere delle decisioni drastiche occorre però studiareaccuratamente l’errore visualizzato da Veritime, in quanto si potrebbe anchetrattare di un falso errore. Una falsa violazione non rappresenta un errore vero

55

e proprio, ma solo una situazione che il simulatore presenta come unapotenziale violazione. In alcune reti è comune avere dozzine di false violazioniper ogni errore vero e proprio. Questa situazione può essere altrettantopericolosa quanto avere degli errori non trovati in quanto può essere moltodifficile trovare delle vere violazioni in mezzo ad una marea di falsi errori epuò diventare facile abituarsi ad ignorare tutti i messaggi d’errore di Veritime.

La causa primaria delle false violazioni sono i falsi percorsi, cioèpercorsi che esistono ma non sono effettivamente usati per opera della logicadi controllo che gestisce la funzionalità dell’intero progetto. Si veda adesempio il caso di una semplice ALU (Arithmetic Logic Unit), una retecombinatoria progettata per svolgere calcoli aritmetici e logici: mentre la ALUsta compiendo una operazione logica fra gli ingressi tutte le celle cheappartengono al blocco aritmetico non vengono usate, perciò eventualiviolazioni temporali che riguardano questa parte della rete sono assolutamenteprive di importanza. Una delle caratteristiche più apprezzabili di Veritime è lasua abilità di interagire con la simulazione logica per eliminare questi falsipercorsi. Conoscendo i vettori di ingresso e come si propagano all’internodella rete Veritime può sapere quale parte del circuito non è correntementeusata e quale invece lo è : in questo modo in uscita verranno visualizzatesoltanto le violazioni vere.

2.9.3 Calcolo della lunghezza dei percorsi con Veritime

Il modo in cui Veritime calcola la lunghezza minima e massima lungo unpercorso è abbastanza semplice come evidenziato in fig. 2.13. Il ritardo lungoogni porta logica sul cammino è specificato nel formato min:tip:max, cioèritardo minimo, tipico e massimo. Veritime calcola il ritardo minimo lungo unpercorso sommando tutti i ritardi minimi e, allo stesso modo, il ritardomassimo è dato dalla somma di tutti i singoli ritardi massimi. Le dueconnessioni in figura di cui non è specificato il ritardo sono considerate comese non avessero ritardo.

56

Fig. 2.13: Esempio di calcolo della lunghezza di un percorso con Veritime.

Oltre ai ritardi minimi e massimi di una porta, la libreria tecnologicacontiene due valori distinti per il ritardo nel caso di una transizione da 0 a 1

Fig. 2.14: Calcolo della lunghezza di un percorso in base alla commutazionepositiva o negativa del segnale di ingresso.(tplh) e da 1 a 0 (tphl). In fig. 2.14 è mostrato come Veritime tenga conto diqueste differenze di ritardo.

Facciamo il caso che ogni porta logica NOT che si trova sul tracciatoimpieghi 2 ns per commutare da 0 a 1 e 3 ns per portarsi da 1 a 0. In questomodo si avranno due ritardi diversi se in ingresso si avrà una transizionepositiva o negativa: se in ingresso si ha una transizione positiva il ritardo totale

perco rsom assim o

pun to d 'in iz io punto d i f ine

#(2:4:6)G 1

G 2

M O D 1

G 3

#(5:7:9 )# (8:10 :12 )

#(20:30 :40 )

#(4:6 :8 )

#(2 :4 :6 )

2 + 5 + 0 + 8 + 2 + 20 + 0 + 4 = 41

6 + 9 + 0 + 12 + 6 + 40 + 0 + 8 = 81

percorso m in im o

57

è di 7 ns in quanto due porte NOT commutano da 0 a 1; nel caso contrario è di8 ns. Questo modo di determinare la lunghezza temporale dei percorsi rendeVeritime meno “pessimistico” di altri simulatori che non fanno differenza fraritardi relativi a commutazioni da 0 a 1 e da 1 a 0.Quando Veritime conoscesia il ritardo minimo, tipico e massimo di propagazione, sia quello relativo alletransizioni positive e negative di tutti gli elementi che si trovano sul percorso,esso prende in considerazione tutte le possibili combinazioni rendendo ilprocesso di simulazione molto lungo, specialmente nel caso di circuiticomplessi.

2.9.4 Visualizzazione delle violazioni con Veritime

Appena viene scoperta una violazione temporale Veritime la visualizza inuscita e la registra su un file in modo che possa essere analizzata in unsecondo momento visto che una simulazione temporale può durare diverse orese il circuito è sufficientemente complesso. La visualizzazione dell’erroremostra:

• il tipo di violazione temporale scoperta (setup, hold o altri);• l’entità della violazione, cioè di quanti ns il vincolo è violato;• gli intervalli di arrivo dei segnali del dato e del clock.

Un esempio di violazione di setup può essere il seguente:

dff.dato 200 : 500 ns; dff.clock 300 : 700 ns;tempo di setup di 30 ns;violazione di setup di 230 ns.

Questa descrizione significa, come meglio intuibile in fig. 2.15, che ildato in ingresso al flip-flop può arrivare in qualsiasi istante fra 200 e 500 ns,mentre il clock fra 300 e 700 ns. Questo significa che potenzialmente si puòavere o una violazione di setup o una violazione di hold o nessuna violazione aseconda dell’istante in cui i due segnali commutano. Ad esempio se il datocommuta all’istante 400 ns ed il clock all’istante 420 ns si ha una violazione disetup; nel caso opposto si avrebbe una violazione di hold. Se il dato commutaall’istante 400 ed il clock all’istante 500 non si ha alcuna violazione.

58

Fig. 2.15: Diagramma temporale di una violazione di setup.

Compito di Veritime è segnalare che tale dispositivo di memoria puòdare dei problemi, sta poi al progettista scegliere l’accorgimento migliore pereliminare ogni possibilità di malfunzionamento. In questo caso particolareVeritime cataloga la violazione come violazione di setup in quanto il dato puòcommutare prima del clock. Nel caso in cui l’intervallo degli istanti di arrivodel clock fosse stato shiftato a destra rispetto a quello relativo al clockVeritime avrebbe catalogato la violazione come appartenente alla categoria dihold.

L’entità della violazione si calcola sottraendo l’estremo sinistro del rangedel clock all’estremo destro del range del dato ed aggiungendo il tempo disetup di 30 ns che è una caratteristica intrinseca del flip-flop: si ottiene così ilvalore di 230 ns che è indicativo dell’entità delle modifiche da apportare alprogetto perché non dia più alcuna violazione.

Un altro dato importante che Veritime è capace di produrre è lo slacktime. Per i progettisti che lavorano con circuiti in cui la parte combinatoria staa malapena al passo della logica sequenziale Veritime fornisce una funzioneche permette di scegliere il periodo ottimale del clock. In pratica eseguendoquesta funzione dopo una normale analisi temporale si può vedere quanto si èandati vicini a violare certi vincoli temporali. Questa informazione èesattamente quella che serve per sapere se incrementare o decrementare ilperiodo del clock. La figura 2.16 mostra gli slack time associati ai vincolisetup e hold di un flip-flop. Come si vede ci sono due diversi slack timeassociati al vincolo temporale, uno che precede la transizione del clock e unoche la segue. Questi due tempi, chiamati A e D in figura, possono essere

0 500 1000

D ATO

C L O C K

V IO LA Z IO N E 230 ns

(ns)200 300 700

59

diminuiti il più possibile aumentando la frequenza del clock: quando però illoro valore dovesse diventare nullo Veritime sarebbe costretto a visualizzarequesta situazione come una possibile violazione temporale.

Fig. 2.16: Gli slack time per i vincoli di setup e hold.

In conclusione sfruttando in pieno le potenzialità di Veritime si puòraggiungere una conoscenza profonda del progetto sotto esame e dei modi percorreggerlo e migliorarlo, in modo che quando verrà poi implementatofisicamente su silicio non dia il minimo problema.

2.10 Simulazione dei difetti di fabbricazione con Verifault XL

Verifault XL è un simulatore di difetti di fabbricazione che opera nellostesso ambiente di Verilog XL e usa le medesime librerie tecnologiche.Verifault permette la simulazione di difetti di fabbricazione che possonoeventualmente essere presenti in un circuito integrato. Usando Verifault ilprogettista dovrebbe essere capace di costruire una serie di vettori di test dadare in ingresso al chip in modo da rivelare la presenza di tali errori, se, aparità di ingressi, il valore fornito in uscita differisce da quello previstoteoricamente dai programmi di simulazione.

Il modello logico usato da Verifault è molto semplice : Verifault pone indiversi punti della rete logica degli “errori”, cioè dei segnali che si

DATO

CLOCK

A B C D

A: slack timeprima del clockB: tempo di setupC: tempo di holdD: slack time dopo il clock

60

mantengono ad un valore costante comunque varino gli ingressi. Il livellologico a cui si mantengono questi punti influenza ovviamente la funzionalitàdell’intera rete, ma se i vettori di test non sono stati scelti con cura sipotrebbero avere lo stesso dei valori corretti anche in presenza di tali errori.Verifault effettua una statistica degli errori scoperti rispetto al numero di errorieffettivi con l’insieme di vettori in ingresso specificati dal progettista. Unesempio di statistica fornita da Verifault è la seguente :

Fig. 2.17: Schema logico di un full-adder con un segnale fisso a 1.

Errori trovati : 82.2 % (l’uscita ha livello logico opposto a quello corretto)Errori potenziali : 11.7 % (l’uscita si trova in alta impedenza e non a 0 o 1)Errori non rivelati : 6.1 % (le uscite sono le medesime del circuito corretto)

In questo caso il numero di difetti trovati è molto alto ma rimanecomunque una piccola percentuale di errori che non possono venire scopertimantenendo lo stesso set di vettori in ingresso. È quindi buona norma lavoraresul set di dati in ingresso per massimizzare la percentuale di errori trovati. In

G 3

G 2

G 4 G 5

C A R RY _IN

AB

SO M M A

C A R RY _ O U T

locazione de ll 'e rro re

Tab ella d i v erità

A B C IN SU M C O U T SU M * C O U T *0 0 0 0 0 1 00 0 1 1 0 0 10 1 0 1 0 1 00 1 1 0 1 0 11 0 0 1 0 1 01 0 1 0 1 0 11 1 0 0 1 1 11 1 1 1 1 0 1

G 1

61

fig. 2.17 viene riportato un esempio pratico per capire come funzionaeffettivamente Verifault : nel semplice full-adder rappresentato è statointrodotto un difetto sull’uscita della porta XOR G1 il cui stato è fissato allivello logico 1. Confrontando la tabella di verità della rete corretta con quelladella rete “errata” si vede che in quattro casi su otto le uscite hanno un valorediverso da quello corretto. Dal confronto delle due tabelle di verità Verifaultindividua la violazione e la classifica come rivelata, potenzialmente rivelata onon rivelata secondo quanto specificato nella tabella di fig. 2.18. Nella tabellasi vede che se l’uscita del circuito corretto e quella del circuito erratocoincidono l’errore non viene scoperto, altrimenti il difetto è rivelato. Quandol’uscita del circuito privo di errori si trova nello stato 1, mentre in presenza didifetti si trova in alta impedenza (Z) o in uno stato indefinito (X) il simulatorecataloga l’errore come potenzialmente rivelato. La certezza di avere scopertoun errore c’è solo quando l’uscita corretta è a livello logico 0 o 1 e l’uscitasbagliata si trova al livello logico opposto.

Fig. 2.18: Criteri per la catalogazione dei difetti.

0

1

Z

X

0 1 Z X

N R P P

PPNR

N

N N

N N

N N

N

circu ito co n erro ri

c ircu itoco rre tto

N : no n tro va to R : r ive la to P : po tenz ia lm ente trova to

Z : a lta im peden za X : s ta to lo g ico inde fin ito

62

La simulazione con Verifault, che si occupa di errori fisici e non più dierrori logici come i precedenti simulatori presi in rassegna, è caldamenteconsigliata nell’ES2 Cadence Design Kit. Infatti i vettori di ingressoselezionati appositamente per rivelare il numero più alto possibile di errorisaranno poi gli stessi dati in ingresso al chip una volta che ne sarà effettuato iltest con un ASIC tester qualsiasi. Se si usasse un insieme di vettori di test piùpiccolo non si potrebbe poi sapere se il chip può funzionare correttamente inqualsiasi tipo di applicazione sia utilizzato.

2.11 Dallo schematic al layout

Dopo avere realizzato lo schema circuitale e dopo avere superato consuccesso tutte le verifiche imposte dai tre simulatori Verilog, Veritime eVerifault il passo successivo della progettazione consiste nel passare da unarappresentazione logica del circuito ad una rappresentazione fisica vera epropria che contenga tutte le specifiche grazie alle quali la fonderia ES2 possarealizzare il circuito integrato richiesto. Nel tipo di progettazione semi-customda noi adottato la realizzazione del layout non è estremamente difficoltosa inquanto si riduce alla disposizione geometrica di standard cell e megacelleall’interno di una superficie delimitata dai dispositivi di input/output ma puòrichiedere un lavoro lungo parecchi mesi prima di raggiungere unaconfigurazione finale soddisfacente e ben ottimizzata. Fortunatamente l’operadi realizzazione del layout è assistita passo dopo passo da programmi di“placement & routing” all’interno dell’ambiente di lavoro “Cell Ensemble”. Iprogrammi offerti da Cell Ensemble assistono ogni passo logico che portadallo schematic al layout vero e proprio. In questo e nei prossimi paragrafisegue una descrizione sommaria di tutti questi passi.

2.11.1 Inclusione dei pad di I/O e di alimentazione

La prima cosa da fare è scegliere i pad di I/O dalla libreria PadLib e porlinegli ingressi e nelle uscite della vista schematic. I pad di I/O sono dellenormali porte logiche progettate ed ottimizzate appositamente per pilotare gliingressi e le uscite di una rete logica: le loro caratteristiche sono contenutenella libreria tecnologica PadLib, ma la loro composizione interna non èassolutamente di interesse per il progettista. Ci sono pad CMOS e pad TTL,pad invertenti e non invertenti, pad con resistenza di pull-up di vari valori, padcon trigger di Schmitt : il progettista sceglie fra essi i più adatti alle proprieesigenze. Il parametro più importante dei pad di uscita è il fanout : in tutti icomponenti della libreria questo valore non è inferiore a 100 pF in quanto le

63

uscite del chip devono essere in grado di pilotare qualsiasi dispositivo senzaproblemi (si ricordi che tipicamente una porta d’ingresso ha un fanin diqualche decimo di pF). Un’altra osservazione è che l’introduzione di ulterioriporte logiche in una rete potrebbe produrre dei problemi sui timing check inquanto ognuno dei pad aggiunti reca con sé un ritardo aggiuntivo che è di circa2 ns. Comunque se la temporizzazione interna dei segnali è corretta bastamodificare di poco la struttura della temporizzazione dei segnali in ingressoper eliminare qualsiasi tipo di problema.

Inoltre vanno inseriti nello schema circuitale i pad di alimentazione e dimassa che sono divisi in due categorie : in un circuito integrato un pad VDDpuò alimentare o solo il nucleo, cioè tutto quello che è compreso all’internodell’area delimitata dai pad, o solo la periferia , cioè tutti i pad di I/0 che sitrovano nell’anello esterno del chip, e lo stesso discorso vale per un pad GND.Quindi nell’elenco dei piedini di ingresso e uscita di un circuito integrato siuseranno sempre le seguenti notazioni :

VDD_Core: pad di alimentazione del nucleo ;VDD_Pery : pad di alimentazione della periferia ;GND_Core: pad di massa del nucleo ;GND_Pery : pad di massa della periferia.

Al progettista non rimane che scegliere quanti pad mettere per ogni categoriain base al calcolo della potenza assorbita dal nucleo e dalla periferia. Mettereun numero di pad insufficiente a fornire la corrente richiesta alla frequenzadi lavoro dell’integrato può compromettere gravemente la funzionalità delchip. Occorre quindi prestare grande attenzione alla scelta del numero di pad,così come alla scelta della larghezza delle piste per evitare che il chip nonriesca a raggiungere certe frequenze e bruci prima. Può capitare ad esempioche un circuito integrato assorba una quantità di corrente eccessiva rispettoalla larghezza delle piste interne (più una pista è larga maggiore è la correnteche può sopportare). In questo caso la pista si interrompe ed il circuito nonfunzionerà ovviamente più senza che sia possibile aggiustarlo. Compito delprogettista del layout è svolgere con cura questi calcoli prima che il circuitosia realizzato per evitare tali problemi. Tutti i dettagli relativi a questo generedi calcoli sul chip fuzzy HEPE97 sono riportati in dettaglio nel capitolo 4.

2.11.2 Fase di posizionamento delle celle (placement)

Una volta completato lo schema circuitale con tutti i pad di I/O si puòpassare direttamente alla fase di progettazione della geometria del circuitointegrato. In base al numero totale di pad Cell Ensemble calcola le dimensioni

64

approssimative che avrà il chip e visualizza questa regione contornata dai paddi I/O in alto, dalle standard cell a destra e dalle megacelle a sinistra comevisibile in fig. 2.19.

Fig. 2.19 : Regione centrale del chip contornata dai pad di I/O (sopra),dalle megacelle (a sinistra) e dalle standard cell (a destra).

L’area stimata per il chip è fortemente influenzata dal numero di pad chedeterminano il perimetro totale: infatti se questo numero è molto grande l’arearisulterà di conseguenza grande anche se il numero di celle con cui riempirlo èpiccolo. Visto che il costo della realizzazione è lo stesso sia che l’interno siapieno sia che sia semivuoto conviene riempirlo il più possibile. Il passosuccessivo consiste nel posizionare i piedini attorno alla regione di defaultnell’ordine che meglio si crede in relazione a come si pensa di posizionare ivari blocchi all’interno. Ad esempio se si pensa di collegare tutti i flip-flopedge triggered al piedino di ingresso del clock con una pista centrale da cui sidipartono tutti i singoli collegamenti conviene posizionare il pad del clock inalto al centro. Considerazioni simili possono condurre alla disposizione di tuttigli altri piedini. Fatto ciò si può passare alla disposizione delle megacelle edelle standard cell. Di solito le megacelle sono poche (meno di una decina) equindi possono essere piazzate direttamente trascinandole col mouse sullaregione “default”. Per le standard cell va fatto un discorso diverso visto che disolito sono diverse centinaia, nel caso di HEPE97 infatti ci sono più di 3000

65

standard cell. L’algoritmo di placement dispone le celle nella regione sceltadal progettista una accanto all’altra su più righe: una riga può contenere unnumero molto alto di standard cell e le varie righe sono separate fra loro dauno spazio equivalente allo spessore di una riga, cioè all’altezza di una cella(vedi fig. 2.20). Il modo in cui una cella è posizionata rispetto alle altre èguidato dalla necessità di minimizzare la lunghezza dei collegamenti fra lecelle e la sovrapposizione fra i due strati metallici che realizzano leconnessioni. Perciò lo scopo dell’algoritmo è fare in modo che due celle che sitrovano vicine logicamente, cioè che sono direttamente collegate nelloschematic, siano vicine anche fisicamente. Per raggiungere questo obiettivol’algoritmo è basato sul simulated annealing: partendo da una temperaturainiziale scelta dal progettista fra 0 e 1000 e facendola decrementare fino a 0 siprovano varie configurazioni possibili che minimizzano la funzione lunghezzadei collegamenti accettando sempre una variazione della disposizione dellecelle che porta ad una diminuzione della lunghezza ma accettando con unacerta probabilità proporzionale alla temperatura anche una variazione cheporta ad un aumento della funzione da minimizzare. Questa tecnica è moltousata per trovare un minimo assoluto evitando i minimi locali in cui potrebbecadere l’algoritmo. Vista la complessità dell’operazione da ripetere sucentinaia di celle l’operazione di placement può durare svariate ore tanto checonviene lanciare il processo di annealing la sera e lasciarlo lavorare per tuttala notte.

Fig. 2.20 : Disposizione delle celle l’una accanto all’altra.

2.11.3 Fase di collegamento delle celle (routing)

Alla fine della fase di placement i pad di I/O, le megacelle e le standardcell sono posizionate sull’area del chip : non rimane altro da fare che passarealla fase di routing nella quale vengono eseguiti tutti i collegamenti. Il primopasso consiste nella creazione dei canali di collegamento all’interno dei qualisaranno gettate le piste : in pratica tutto lo spazio vuoto sul chip, ad esempio

66

fra un pad ed il pad adiacente, fra due righe di standard cell o fra unamegacella e una regione di standard cell, viene suddiviso in canali fisici perora vuoti entro i quali verranno realizzati tutti i collegamenti. La fase direalizzazione di questi collegamenti, cioè la fase di routing vera e propria, èsuddivisa in due passi logici distinti chiamati global routing e detailedrouting . Il global routing consiste nell’attribuzione delle connessioni logichepresenti nello schematic ai canali fisici appena creati. La creazione vera epropria delle connessioni viene realizzata nella fase successiva del detailedrouting (routing dettagliato). Solo al termine di questo processo si perviene aduna visione della struttura vera e propria del layout con tutti i collegamenti frale celle realizzati con i due strati metallici metallo1 e metallo2 come si vede infig. 2. 21 (il metallo 1 è quello più scuro e si trova ad un livello superiore).

Fig. 2.21 : Particolare di un layout completo

Solo a questo punto si può quindi sapere se si è giunti ad unaconfigurazione accettabile oppure bisogna ricominciare tutto il processo dallafase di placement. Può capitare ad esempio di avere sottodimensionato uncanale in modo tale che non riesca a contenere tutte le piste che vanno inseriteal suo interno : in questo caso il detailed routing provvede ad espandere lalarghezza del canale a scapito della struttura geometrica complessiva del chip,che quindi si può ritrovare con molti “buchi”. Per questo e altri motivi ilprocesso di modellazione del layout può diventare molto lungo e faticoso.

67

Inoltre mentre la maggior parte dei collegamenti può essere realizzataautomaticamente dal global routing è fortemente consigliato eseguire il routingdi piste “critiche” come il clock, l’alimentazione e la massa a mano perottimizzare al massimo le prestazioni. Tale fase del lavoro porta via moltotempo.

Giunti ad una configurazione accettabile del layout la prima cosa da fareè l’estrazione delle capacità parassite dovute ai collegamenti metallici e allasovrapposizione fra i due strati metallo 1 e metallo 2. Un programma di nomeES2capExtract provvede ad estrarre le capacità parassite per ogni segnaleall’interno della rete e riporta i risultati all’interno del file net.cap. Una voltache si è in possesso di questo file occorre ripetere tutte le simulazioni logiche etemporali con Verilog e Veritime per verificare che i ritardi ulteriori indotti daqueste capacità parassite non provochino problemi come la violazione dialcuni vincoli temporali o come la comparsa di sovraccarichi che nonesistevano in una simulazione pre-layout. Infatti l’effetto duplice delle capacitàparassite è quello di aumentare i ritardi ed i carichi capacitivi da pilotare. Inpresenza dell’uno o l’altro di questi problemi la cosa migliore è ricominciareda capo la fase di generazione del layout: intervenire direttamente sul layoutper effettuare delle modifiche quali avvicinare due celle o aggiungere deibuffer è invece alquanto pericoloso e fortemente sconsigliato in quanto è facileintrodurre degli errori ancora maggiori.

2.11.4 Verifica finale del progetto

Quando poi tutte queste verifiche e simulazioni vengono superate consuccesso si può passare ai controlli finali, quelli che riguardano la correttezzae l’effettiva funzionalità del layout. Questi ultimi controlli si chiamano :

• DRC (Design Rule Check) ;• ERC (Electrical Rule Check) ;• LVS (Layout Versus Schematic).

DRC controlla che siano rispettati tutti i parametri geometrici del layoutquali la larghezza delle piste, la distanza tra due piste o due piedini adiacenti,le dimensioni di un contatto, confrontando i valori che trova sul layout contutte le specifiche della tecnologia CMOS 0.7 µm. In questo modo la fonderiasi cautela che il layout progettato sia effettivamente realizzabile fisicamentecon gli strumenti disponibili nella tecnologia corrente. Può capitare che DRCdia dei problemi sulla larghezza di certe piste disegnate automaticamente daldetailed routing senza l’intervento diretto del progettista : in questo caso

68

occorre ripercorrere dall’inizio la fase di routing sperando che il programma dirouting non sbagli più.

ERC si occupa di controllare che tutte le connessioni elettriche sianorispettate in modo che non vi siano piste “floating”, cioè non collegate anessuna altra pista, e che non vi siano sovrapposizioni indesiderate fra i duelivelli metallici che possono portare ad eventuali cortocircuiti.

Per ultimo LVS verifica che la struttura fisica del layout con tutte leporte logiche che contiene e le rispettive connessioni corrisponda esattamentealla struttura logica dello schematic per evitare che vi possano essere statierrori nella conversione: per fare questo LVS ricava la netlist sia delloschematic sia del layout e le confronta fino a trovare una corrispondenzacompleta.

2.12 Riflessioni finali

Alla fine di tutti questi passi e di questi innumerevoli controlli ilprogettista può essere ragionevolmente confidente che una volta trasformato incircuito integrato il proprio progetto possa funzionare e questa è la cosa piùimportante.

Una volta poi che il circuito integrato è stato realizzato può iniziare lafase di test e di collaudo per verificare la bontà dei risultati delle simulazionisoftware fatte a priori. Superata anche questa fase il chip è pronto per essereutilizzato. Penso che vedere funzionare perfettamente il chip sulla scheda percui è stato progettato sia una delle più grandi soddisfazioni a cui può ambirecolui che ha seguito tutte le fasi di progetto. Io ho avuto la fortuna di curaretutte le fasi di progettazione del processore fuzzy dalla descrizione VHDL finoal layout e spero di potere seguire anche il collaudo una volta che il chipritorni dalla fonderia. Nei grandi centri di sviluppo di circuiti integrati inveceuna situazione del genere non capita quasi mai: dove ci sono molte personeche lavorano ad uno stesso progetto ognuno si specializza in un determinatosettore, ad esempio c’è l’esperto in simulazioni temporali e l’esperto diprogettazione di layout: in questo contesto è molto probabile che l’addetto acompiere una simulazione con Veritime non abbia la minima idea delfunzionamento globale del circuito che sta testando.