CPLD by exampl1 new 2 - GRIX.IT1).pdf · doppio flip flop tipo D 7474, il contatore decimale 74160,...

21
1 CPLD by

Transcript of CPLD by exampl1 new 2 - GRIX.IT1).pdf · doppio flip flop tipo D 7474, il contatore decimale 74160,...

1

CPLD by

2

Evoluzione dei componenti programmabili

INTRODUZIONE Quante volte ci siamo sentiti dire che il tipico personal computer dei nostri giorni è molto più po-tente del più grande supercomputer di solo qualche decennio fa? Questa è la più evidente testimonianza, sotto gli occhi di tutti, dell'incredibile evoluzione che la tec-nologia del computer ha avuto negli ultimi decenni. Al contrario, molto di rado si sente parlare di un altro fenomeno, meno visibile ma non meno im-portante: di come un piccolo dispositivo programmabile e poche righe di codice possono oggi rim-piazzare letteralmente centinaia di circuiti integrati discreti. Convenienza delle logiche programmabili I componenti logici discreti, a lungo considerati i cavalli di battaglia dell'industria dei semicon-duttori, sono stati per parecchi anni avvantaggiati dai bassi costi, rispetto alle prime logiche pro-grammabili comparse agli inizi sul mercato. Oggi le cose sono cambiate significativamente. I progressi compiuti negli anni più recenti nel campo delle tecnologie di costruzione delle CPLD hanno abbassato i costi di questi dispositivi a un livello tale da farli diventare alternative molto ap-petibili rispetto alle logiche fisse discrete. Oltre alle semplici ragioni di costo, vi sono altri fattori rilevanti che rappresentano notevoli vantaggi a favore delle CPLD:

la flessibilità costituita dalla riprogrammabilità, cioè la possibilità di modificare il progetto rapi-damente, senza costi aggiuntivi e più volte1: in un contesto economico dove tutto può cambia-re da un momento all'altro è sempre più difficile, infatti, meritarsi la possibilità di riuscire a pensare, sviluppare e prototipare le nuove idee senza sentirsi chiedere di cambiare qualche funzionalità o un po' di parametri critici in corso d'opera;

la riduzione dell'area occupata sullo stampato; la superiore affidabilità rispetto alle logiche discrete; il ridotto time-to-market (tempo che intercorre tra la progettazione e la vendita di un prodotto,

che incide sul margine di guadagno dei prodotti ad alta tecnologia certamente più di ogni altra tipologia di costo e ancora di più rispetto ai costi di ricerca e sviluppo);

la semplicità d'uso, in quanto il progetto di CPLD è semplice e fa risparmiare tempo e denaro; la non volatilità, derivante dal fatto che la programmazione viene ritenuta anche in mancanza

di alimentazione; la possibilità di rimpiazzare le antiquate logiche discrete TTL/CMOS; l’ottimizzazione nella gestione dei magazzini componenti.

Le CPLD costituiscono oggi la soluzione ottimale per fornire pari, e in molti casi migliori, prestazioni rispetto ai più veloci tra i dispositivi logici discreti. L'industria ha da tempo recepito questo messaggio e da ciò dipende il fatto che la produzione dei CPLD è uno dei settori a crescita più dinamica dell'industria dei semiconduttori: sono sempre più numerosi, infatti, i prodotti che fanno uso di CPLD, con una proporzionale diminuzione dell'impiego di integrati logici tradizionali. Anche nel campo hobbistico l'utilizzo di questi componenti è molto promettente. Xilinx, insieme ad Altera, Actel, AMD, Anadigm, Atmel, Cypress, Lattice, Philips ed altri, è uno dei principali produttori di componenti programmabili e fornisce soluzioni complete per i progettisti, tra cui tools di progetto, messi a disposizione gratuitamente, help online, esempi e tutorials dettagliati.

1 Ciò è possibile in quanto la registrazione della configurazione circuitale è immagazzinata in un’area di memoria flash;

in linea di massima le CPLD sono progettate per almeno 10000 operazioni di riscrittura.

3

UN PO' DI STORIA Negli anni sessanta i circuiti logici digitali venivano in-teramente realizzati con resistenze, diodi e transistor. A questo proposito possiamo ricordare le soluzioni a Diode-Logic, Resistor-Transistor Logic, Diode-Transistor Logic (figura 1). Ma i gate logici elementari, i contatori e le altre fun-zioni logiche di media complessità, si dimostrarono troppo ingombranti se realizzati con componenti di-screti. A causa di questi limiti, si rese necessario sviluppare la tecnologia dei circuiti integrati, per poter raggiun-gere gli attesi livelli di integrazione. Il risultato fu l'introduzione delle prime famiglie com-merciali di dispositivi logici digitali; in Italia venivano chiamati "micrologici". La Texas, agli inizi degli anni anni '60 commercializzò alcuni dispositivi DTL, tra cui possiamo ricor-dare la serie 930, a cui fece seguito la serie SN 73/53, che rimase in produzione fino alla metà de-gli anni '70. La SN53 era specifica per le applicazioni militari, con un range di temperatura operativa da 55 °C a +125 °C; la serie SN73, invece, era indirizzata alle applicazioni industriali, con un range operativo da 0 °C a +70 °C gradi. In seguito si svilupparono i circuiti integrati conosciuti come Transistor-Transistor-Logic o TTL. La classica serie 74 (54 nell'equivalente militare) fu il capostipite di quello che sarebbe diventato un'ampio set di famiglie, tutte con componenti simili nelle funzionalità, ma con significative diffe-renze nelle performance e nei consumi individuali. L'era delle logiche TTL La tecnologia delle logiche discrete TTL ottenne il battesi-mo ufficiale quando, agli inizi degli anni '60, la Texas In-struments introdusse la già accennata famiglia 74 di circuiti integrati standard logic per supportare i programmi di e-splorazione spaziale, in particolare lunare, della NASA. La famiglia 74 comprendeva le porte logiche elementari, come ad esempio il quadruplo NAND 7400 (figura 2), il doppio flip flop tipo D 7474, il contatore decimale 74160, i sommatori binari e altre semplici sotto-funzioni. I primi integrati erano disponibili nei package dual-in-line a 14 e 16 pin. I successivi progressi nel packaging e l'introduzione di di-spositivi a livelli sempre crescenti d’integrazione consenti-rono ai progettisti di minimizzare drasticamente gli ingom-bri sui circuiti stampati e di ridurre il numero di componenti complessivo. Nuove famiglie venivano introdotte continuamente, atte a soddisfare le necessità di aumento delle prestazioni, minori consumi e riduzione dei costi. Il risultato fu la proliferazione di oltre trenta differenti sottofamiglie 74, ciascuna caratterizzata da specifiche caratteristiche. Negli anni '70, con l’avvento della tecnologia CMOS, si diffusero rapidamente dispositivi anche mol-to complessi. Nei primi anni '80 era presente sul mercato un'estrema varietà di tipologie (TTL, S, LS, AS, F, ALS, CD4000, HC, HCT, BCT, AC, ACT, FCT, ABT, LVT, AHC, AHCT) che costringeva i progettisti a de-

Figura 1 – Primi circuiti logici

Figura 2 – Logica nand TTL

4

streggiarsi a fatica tra le caratteristiche di ognuna e le reciproche compatibilità elettriche, per poter al meglio realizzare le proprie applicazioni.

La nascita delle CPLD Mentre la gamma dei dispositivi 74 si espandeva, cominciava ad apparire una nuova tendenza rivo-luzionaria nella forma dei componenti logici programmabili, detti SPLD (Simple Programmable Logic Devices). Si trattava di dispositivi elettronici digitali che permettevano la realizzazione di funzioni combinato-rie e/o sequenziali nello stesso circuito integrato. Il loro avvento fu determinato da una forte richiesta di maggior flessibilità da parte del mercato. Come allora, ancora oggi una tendenza costante del mercato dell'elettronica di vasto consumo è la crescente richiesta di vera e propria “customizzazione”, ovvero capacità di realizzare circuiti che soddisfino le specifiche esigenze applicative del cliente. I PLD offrono un compromesso tra qualcosa di personalizzato per ogni utente e un costo di svilup-po accessibile anche a budget limitati. Un dispositivo PLD generico, nella sua versione più semplice, comprende una matrice di connettivi-tà di porte AND seguita da una di porte OR, con collegamenti programmabili fra di esse. Un PLD supporta un numero di semplici funzioni logiche non concatenate, che l'utente può struttu-rare per realizzare una specifica funzione più complessa. La fase di progetto del circuito avviene mediante un software che tipicamente automatizza le fasi di calcolo (es. sintesi di reti combinatorie attraverso mappe di Karnaugh), ed un opportuno dispositivo 'programmatore' che 'incide' sul dispositivo PLD il circuito digitale risultante. Questo tipicamente avviene attraverso l'attivazione o meno (mediante fusibili o anti-fusibili) di cor-to circuiti nella matrice di connettività. Grazie alla programmabilità, la prima generazione di questi chip poteva rimpiazzare fino a una de-cina di integrati logici discreti. L'introduzione di nuovi materiali e di tecniche innovative di fabbricazione ha consentito un progres-sivo aumento della densità dei dispositivi: così le PLD hanno sostituito sempre più numerose fun-zioni logiche standard. Oggi, le più avanzate CPLD (Complex PLD) contengono decine di migliaia di gates e la loro capacità equivalente corrisponde a quella di centinaia di dispositivi della serie 74. Le altissime densità d’integrazione ottenute con le strutture regolari, quali memorie e logiche pro-grammabili, hanno consentito di incrementare ulteriormente le prestazioni raggiunte nei circuiti lo-gici complessi. In particolare, le tecnologie basate sul MOSFET attualmente sono preponderanti nel mercato dei semiconduttori e l'utilizzo delle tecnologie bipolari è limitato a particolari applicazioni. Costi Per chip di grandi dimensioni i costi sono elevati perché i wafer di silicio possono avere dei difetti e la probabilità che un difetto si verifichi entro un chip è tanto più alta quanto più è estesa l'area che lo stesso chip occupa sul wafer. Così, oltre un certo limite, il costo di un chip di grandi dimensioni aumenta in maniera esponenzia-le. Questi fattori, nel passato, hanno condizionato gli alti costi produttivi delle CPLD rispetto ai dispositivi discreti TTL, che occupavano un'area molto inferio-re sul silicio. Inoltre, in aggiunta al costo del chip, vi sono altri contributi da considerare, tra cui il package e i test, che concorrono a determinare il costo finale. La figura 3 mostra un diagramma che fotografa la

Figura 3 – Costo totale dell’IC

5

situazione attuale. In passato, gli alti costi avevano ristretto l'impiego delle CPLD soprattutto ai prototipi di pre-produzione o alle applicazioni in volumi limitati. Oggi la situazione è cambiata radicalmente e i campi d’applicazione sono sempre più estesi. Quando la serie 74 fu introdotta, il prezzo di partenza medio per un singolo dispositivo era di circa 1000 $ (1963). Con il procedere della tecnologia nel corso degli anni, il prezzo scese a circa 25 $ (1968). Allo stato attuale, i progressi nei processi di fabbricazione dei semi-conduttori e nelle tecniche di pac-kaging hanno fatto sì che oggi, per un circuito con oltre 8 integrati di-screti TTL, sia più economicamente conveniente utilizzare una CPLD (fi-gura 4) rispetto all'equivalente in-sieme di chip. Nei costi di produzione di una sche-da, vi sono poi altri elementi da tenere in considerazione, come il risparmio di area occupata sul circuito stampato, la riduzione nel numero di piste di interconnessione, la riprogrammabilità, l'affi-dabilità, il ridotto time-to-market: tutti fattori che vedono protagoniste le moderne CPLD.

APPLICAZIONI DELLE CPLD Grazie all'elevata velocità intrinseca e alla configurabilità, le CPLD sono utilizzabili in un vasto assor-timento d’applicazioni, dalla semplice glue logic alla prototipazione di piccoli gate array. Il termine glue logic (tradotto letteralmente dell’inglese al’italiano) significa logica collante, cioè una rete logica, spesso ma non necessariamente di tipo combinatorio, che serve ad interfacciare dispo-sitivi elettronici ad elevata integrazione (quali ad esempio CPU, memorie, ADC, DAC, display, ecc.) implementando di volta in volta le funzionalità richieste per attuare la connessione. Le interfacce glue logic sono anche indicate con il termine di logica sparsa proprio perché a livello pratico sono realizzate con l’impiego di circuiti logici “sparsi” attorno ai dispositivi più complessi di cui realizzano l’interfacciamento (o il “collante”). Si possono ottenere delle funzioni di logica combinatoria, come ad esempio un decoder per la ge-nerazione di chip select, o una tabella di transcodifica tra codici diversi (cioè in pratica una ROM), ma anche dei registri o dei blocchi di memoria RAM, compatibilmente con il numero di flip-flop che la CPLD contiene al suo interno. Per quanto riguarda la logica sequenziale, si possono realizzare macchine a stati finiti, contatori, di-visori, registri a scorrimento. Uno degli impieghi industriali più comuni, che rappresenta anche una forte motivazione alla crescita di questo mercato, è la conversione di progetti che contengono gates obsoleti di standard logic, oppure parecchie SPLD, verso soluzioni composte da un piccolo numero di CPLD (figura 5). Le CPLD possono realizzare funzioni piutto-sto complesse, come ad esempio controllori grafici, controllori LAN, dispositivi UART e gestori di memoria CACHE. Come regola generale, i circuiti dove è ri-chiesta un’alta velocità unità a predicibilità2, che fanno largo uso di gates semplici (AND,

2 Ovvero il sapere con buona precisione quale sarà il ritardo di propagazione introdotto dal dispositivo.

Figura 4 – Confronto tra il prezzo di un dispositivo 74 e quello di

una CPLD

Figura 5 – Equivalenza 74-CPLD

6

OR, NAND, NOR, NOT), che non necessitano di un gran numero di flip-flop, sono buoni candidati per essere convertiti entro una CPLD. Uno dei vantaggi significativi delle CPLD è che esse forniscono una modalità semplice e veloce per la modifica del progetto, grazie alla riprogrammabilità. Con le CPLD programmabili in-system è anche possibile riconfigurare l'hardware senza dover spe-gnere il circuito: un esempio può essere cambiare il protocollo in un circuito di comunicazione du-rante il suo funzionamento.

SPLD COMMERCIALI Mattoni fondamentali per i progettisti hardware digitali da due decenni a questa parte, le Simple PLD costituiscono una categoria di dispositivi molto importante, apprezzata per avere prestazioni notevoli e bassi costi. Agli albori dell’elettronica moderna, i primi componenti programmabili erano memorie a sola lettu-ra, come le PROM; in seguito, nei primi anni 70, furono introdotte da Philips le PLA. PLA (Programmable Logic Array) Questi dispositivi contengono un piano AND e un piano OR, en-trambi programmabili (figura 6). Le PLA sono spesso integrate en-tro chip complessi, come i micro-processori. Non hanno avuto molto successo come dispositivi singoli perchè costose e dalle prestazioni limita-te. PAL (Programmable Array Logic) Sono costituite da una matrice di connettività AND programmabile, da una matrice OR fissa e da un buffer d’uscita (denominato ma-crocella) che permette di programmare le uscite in modo da soddisfare le esigenze più comuni: dirette, complementate, con memoria (funzione ottenuta per mezzo di flip-flop) e con la possibilità di riutilizzarle come ingressi (fi-gura 7). Sono più semplici da realizzare e meno costose rispetto alle PLA e, nel contempo, offrono miglio-ri prestazioni, tanto che sono divenute molto popolari nelle applicazioni pratiche. Tra le PAL più utilizzate, pos-siamo ricordare i dispositivi pro-dotti da AMD e conosciuti con le sigle 16R8 e 22V10 (figure 8 e 9): entrambe sono da tempo standard industriali e sono pro-dotte da più fabbricanti con la stessa sigla.

Figura 6 – Schema a blocchi di una PLA

Figura 7 – Schema a blocchi di una PAL

7

Sigle delle PAL Generalmente sono costituite da una prima parte numerica N1, un codice letterale CL, una seconda parte numerica N2 ed un suffisso S, come da esempio successivo:

PAL N1 CL N2 S

Il significato dei termini è il seguente:

PAL: indica che il dispositivo è un Programmable Array Logic; l'indicazione eventuale PALC indica che è realizzato in tec-nologia CMOS.

N1: è il numero d’ingressi della matrice AND programmabile. CL: codice di una o più lettere che caratterizza elettricamente le

uscite o H = uscita attiva alta; o L = uscita attiva bassa; o P = polarità dell'uscita programmabile; o C = uscite complementari; o R = registri (flip flop) in output; o V = versatile, ovvero che può essere con-

figurata in differenti modi, alcuni regi-strati e altri no (figura 10).

N2: numero delle uscite. S: suffisso che dà informazioni su velocità e po-

tenza dissipata. La sigla "PAL 16R8AC" significa che la PAL ha 16 ingressi (suddivisi in 8 ingressi dedicati e altri 8 configurabili come ingressi/uscite) e 8 uscite. La "R" indica che ciascun’uscita può essere "regi-strata", avendo un flip flop di tipo D. “A” significa che si tratta di un dispositivo con tem-po di propagazione di 25 nsec, mentre “C” indica che può operare tra 0°C e + 70°C. Similmente, la 22V10 ha un massimo di 22 ingressi e 10 uscite, di tipo versatile. Un'altra SPLD molto nota è la classica EP610 di Al-tera. Questo dispositivo è simile, nella com-plessità, alle PAL, ma offre una mag-giore flessibilità, perchè le uscite ven-gono prodotte mediante piani AND e OR di maggiore ampiezza. Nella EP610 le uscite possono essere registrate e i flip-flop sono configura-bili di tipo D, T, JK o SR. GAL (Generic Array Logic) Si tratta di una famiglia di dispositivi riprogrammabili elettricamente, rea-

Figura 8 – Struttura interna della

PAL16R8

Figura 9 – Struttura interna della PAL22V10

Figura 10 – Struttura della macrocella 22V10

Figura 11 – Schema a blocchi di una GAL

8

lizzata in tecnologia CMOS. Contengono un elemento innovativo denominato OLMC (output logic macro cell) che consente di modificare la configurazione dei terminali di I/O con grande flessibilità (figura 11). All’interno di un OLMC il costruttore può implementare funzioni complesse quali addizionatori, shift register e XOR, ad un livello d’integrazione molto elevato. Oltre alle SPLD che abbiamo appena citato, vi sono molti altri prodotti messi a disposizione da di-versi fabbricanti. Tutte le SPLD presentano caratteristiche simili, come il fatto di avere una struttura a "piani logici" (AND,OR,NOR o NAND), ma ciascun prodotto ha caratteristiche uniche che possono renderlo inte-ressante per particolari applicazioni. Tra i vari produttori di SPLD ricordiamo AMD, Altera, Lattice, Cypress, Atmel, ecc..

CPLD

Come già accennato in precedenza, la CPLD consiste di più blocchi di tipo SPLD riuniti su un singolo chip (figura 12). Tuttavia, i dispositivi CPLD sono molto più sofisticati di quanto non siano le SPLD stesse, anche già a livello dei blocchi elementari simil-SPLD di cui sono composte. In questo paragrafo vedremo alcune delle più classiche CPLD commerciali e conside-reremo i campi d’applicazione tipici di questi dispositivi. Teniamo presente che, data la rapida evoluzione in questo settore, per avere informazioni aggiornate è bene consultare i siti web dei vari produttori. CPLD di Altera Altera ha sviluppato tre famiglie che rientrano nella categoria delle CPLD: MAX 5000, MAX 7000 e MAX 9000. La famiglia MAX 7000 è ampiamente utilizzata ed offre capacità e prestazioni in velocità tipiche del-lo stato dell'arte attuale. La serie MAX 5000 rappresenta la tecnologia più datata ed ha la maggiore convenienza economica, mentre la MAX 9000 è più simile alla MAX 7000 ed offre una capacità superiore in termini di gates equivalenti. I dispositici MAX 7000 sono disponibili in tecnologia EPROM o EEPROM e possono essere pro-grammati soltanto "out-of-circuit"; la serie 7000 S è invece programmabile in-circuit (o in system), caratteristica che permette di effettuare innumerevoli cicli di modifica durante le fasi di pro-totipazione CPLD di Advanced Micro Devices (AMD) Prima della cessione a Lattice della Divisione Logiche Programmabili, AMD metteva a disposizione una serie di CPLD comprendente 5 sottofamiglie denominate da MACH 1 fino a MACH 5. Ognuno di questi dispositivi contiene dei blocchi PAL-like: i tipi MACH 1 e 2 contengono blocchi PAL del tipo 22V10, mentre MACH 3 e 4 dispongono di blocchi tipo 34V16. La serie MACH 5 è simile alla MACH 4, ma offre prestazioni superiori in velocità. Tutte le sotto-famiglie MACH si basano su tecnologia EEPROM, sono programmabili in circuit e for-niscono un ampio range di chip, dai più piccoli a basso costo ai più potenti e costosi.

Figura 12 – Schema a blocchi di una CPLD

9

Ad esempio, una CPLD della serie MACH 4 ha una taglia che va da 6 a 16 blocchi PAL-like, che cor-risponde a circa 2000 + 5000 gates equivalenti. CPLD di Lattice Semiconductor Lattice, oltre a portare avanti le linee di prodotto già di AMD, ha sviluppato un proprio range com-pleto di CPLD, con due linee principali: il tipo pLSI, che contiene alcune famiglie di tipo EEPROM, e il tipo ispLSI, che ha in più la programmabilità in-circuit. Le due tipologie si differenziano anche nella capacità e nella velocità. La prima generazione di CPLD Lattice è rappresentata dalle serie 1000 pLSI e ispLSI; la capacità va da circa 1200 a 4000 gates mentre il ritardo di propagazione da pin a pin è di 10 nanosecondi. Lattice inoltre produce la serie 3000, che arriva a 5000 gates, con ritardi di circa 10-15 nsec. La funzionalità della serie 3000 è molto simile a quella della serie Mach 4 della AMD. La serie 3000 supporta gli stili di progetto più moderni, come quello del boundary scan. CPLD della serie Cypress FLASH 370 Cypress ha sviluppato una famiglia di CPLD che è simile per certi aspetti sia ai dispositivi AMD sia a quelli Lattice. Le CPLD Cypress della serie FLASH 370 sono basate sulla tecnologia EEPROM di tipo FLASH e han-no ritardi di propagazione compresi tra 8.5 e 15 nsec. I componenti di questa serie non sono programmabili in-circuit; in compenso, dispongono di più pin di I/O rispetto ai prodotti concorrenti. I chip più piccoli presentano 32 macrocelle e 32 pin di l/O, mentre i più grandi hanno 256 macro-celle e 256 I/O. CPLD della serie Altera FLASH Logic La serie FLASH logic di Altera, già nota come Intel FLEX logic, realizza la programmabilità in-circuit e mette a disposizione alcuni blocchi di Ram Statica sul chip, caratteristica questa unica tra i pro-dotti CPLD. CPLD della serie XC7000 di Xilinx Sebbene Xilinx sia soprattutto un produttore di FPGA, mette tuttavia a disposizione alcuni compo-nenti CPLD, che interessano una nicchia di mercato piuttosto ampia. Tra questi, possiamo menzionare la serie XC7000 e la più recente XC9500. Nella serie XC7000 vi sono due famiglie principali: la 7200 e la 7300. La prima comprende dispositivi di taglia piuttosto piccola, da circa 600 a 1500 gates di capacità, con ritardi di 25 ns pin-to-pin. I chip di entrambe le famiglie sono composti da una collezione di blocchi SPLD-like, con 9 macro-celle ciascuno. Le macrocelle della famiglia 7200 sono differenti da quelle tradizionali, in quanto ciascuna macro-cella contiene due gate di tipo OR, che alimentano un'unità aritmetico logica (ALU). La ALU ha il pregio di poter generare una qualunque funzione dei suoi due ingressi; la sua uscita comanda un flip-flop configurabile. La famiglia 7300 è una versione migliorativa della 7200 e fornisce una capacità superiore (fino a 3000 gates), oltre a una più elevata velocità.

PANORAMICA INTRODUTTIVA SULLA SERIE XC9500 Attualmente Xilinx offre due categorie principali di prodotti CPLD, identificate nelle serie XC9500 e CoolRunner. Le famiglie di CPLD Xllinx XC9500 sono intese per impieghi ad alte prestazioni e basso costo, in si-stemi che richiedono sviluppi rapidi di progetto, lunga vita e robustezza intrinseca. La serie XC9500 presenta densità che va da 36 a 288 macrocelle ed è disponibile nelle versioni a 2.5 Volt (XC9500XV), 3.3 Volt (XC9500XL) e 5 Volt (XC9500).

10

Questi dispositivi supportano la programmazione in-system ISP (in-system programming): è possi-bile quindi effettuare decine di migliaia di cicli di programmazione/cancellazione. Le prestazioni in velocità sono elevate (il ritardo di propagazione pin to pin è contenuto a 5 ns) e presentano capacità fino a 6400 gates logici Si possono considerare di complemento alle FPGA Xilinx, "sorelle maggiori" ad alta densità, tanto che l'ambiente di sviluppo sofware è il medesimo: il tool, scaricabile gratuitamente dal web, si chiama ISE Webpack. Il sito, all'indirizzo http://www.xilinx.com è una miniera di informazioni, sia per quanto riguarda i data sheet dei componenti, sia per gli strumenti software di sviluppo, per i quali esiste una ricca collezione di tutorials e di help on-line. Reperibilità Le CPLD della serie XC9500 sono rintracciabili, ad esempio, sul catalogo RS, all’indirizzo http://www.rs-components.it Per identificare il part number del dispositivo possiamo fare riferimento a questo schema:

XC xx yy kk - zz YYY t Dove XC xx identifica la serie Xilinx 9500, yy indica la capacità (36,72,..,288 macrocelle), kk indi-ca il processo tecnologico (niente se +5V, XL se 3.3V, XV se 2.5V), zz è lo speed-grade in nanose-condi, YYY rappresenta il package e il numero di pin (PC=PLCC, PQ=PQFP, ...) e infine t indica il range di temperatura operativa (C=commerciale, I=industriale). Architettura flessibile del pin lock Nel caso di modifiche l'architettura del chip, insieme al software, è tale da consentire di conservare l'assegnazione iniziale del pinout, fissata nelle fasi iniziali di progetto, anche in presenza di consi-stenti cambiamenti nel codice. Supporto JTAG IEEE 1149.1 La famiglia XC9500 è supportata da parecchi tool di sviluppo e di debug, che servono a sviluppare vettori di test per istruzioni del boundary scan allo scopo di analizzare, testare e debuggare gli e-ventuali malfunzionamenti del sistema. La famiglia a 5V XC9500 La famiglia di CPLD XC9500 contiene sei dispositivi, da 36 a 288 macrocelle di capacità, in un'am-pia varietà di package. La tabella 1 mostra una panoramica di questi componenti.

36 macrocelle 72 macrocelle 108

macro-celle

144 macrocelle 216

macro-celle

288 macrocelle

Caratteri-stiche

XC95

36

XC95

36XL

XC93

36XL

XC95

72

XC95

72XL

XC95

72XV

XC95

108

XC95

144

XC95

144X

L

XC95

144X

V

XC95

216

XC95

288

XC95

288X

L

XC95

288X

V

Speed grades

5, 6, 10,15

5, 7, 10

5, 7

7, 10, 15

5, 7, 10

5, 7

7, 10, 15, 20

7, 10, 15

5, 7, 10

5, 7

10, 15, 20

10, 15, 20

6, 7, 10

6, 7, 10

Max I/O 34 36 36 72 72 72 108 133 117 117 166 192 192 192 Vcc

(Volts) 5 3.3 2.5 5 3.3 2.5 5 5 3.3 2.5 5 5 3.3 2.5

Tabella 1 – Riassunto delle caratteristiche della serie XC9500

11

I pin di I/O si possono interfacciare a sistemi sia a 3.3 che a 5 Volt e arrivano a supportare fino a 192 segnali. La famiglia a 3.3V XC9500XL I componenti della famiglia di CPLD XC9500XL sono indirizzati a sistemi avanzati che richiedono sviluppi rapidi di progetto, lunga durata e necessità di upgrade sul campo. Questa famiglia di dispositivi fornisce ottime prestazioni e costi tra i più bassi nel settore. Le caratteristiche principali di questa famiglia sono le seguenti: bassi costi per macrocella, architet-tura a pin-lock avanzata, ritardo di 5 ns, frequenza massima di 178 MHz, tre ingressi di clock glo-bali, tempi di programmazione e cancellazione ridotti. La famiglia a 2.5V XC9500XV La caratteristica principale di questa famiglia è rappresentata dall'alimentazione del core a 2.5 V, che pertanto offre consumi ridotti del 30% rispetto alla famiglia XL. È prevista una futura versione a 275 MHz. LA SERIE COOLRUNNER Le famiglie di CPLD Xilinx della serie CoolRunner sono particolarmente interessanti. Caratterizzate dai consumi estremamente ridotti, impiegano la tecnologia Fast Zero Power™, che porta ad assorbire meno di 100 uA in standby mode: sono perciò adatte per impieghi in apparecchi portatili a batteria, come telefoni cellulari, giochi elettronici e PC portatili. La serie contiene due dispositivi: la XPLA3 (con core a 3.3 V, che consente di interfacciarsi con di-spositivi a 5V) e la CoolRunner-II, alimentata a 1.8 V. La tabella 2 riassume le caratteristiche di questi componenti, mentre in figura 13 è rappresentato il cam-po di applicazioni dell’intera produzione Xilinx nel settore delle CPLD.

XCR 3032XL

XCR 3064XL

XCR 3128XL

XCR 3256XL

XCR 3384XL

XCR 3512XL

Macrocelle 32 64 128 256 384 512 Porte 750 1500 3000 6000 9000 12000

TPD(nsec) 4.5 5.5 5.5 7.0 7.0 7.0 fMAX(MHz) 213 192 175 154 135 135 ICCS(µA) 17 17 17 18 18 18

Tabella 2 – Riassunto delle caratteristiche della serie Cool-Runner

Figura 13 – Trends delle applicazoni CPLD Xilinx

12

CRITERI DI SCELTA Per scegliere la CPLD giusta per le proprie esigenze è utile porsi prima alcune domande sulle carat-teristiche di cui si ha bisogno, così da individuare il prodotto più adatto. I criteri di scelta possono essere i seguenti: Densità Ogni famiglia di CPLD possiede una propria capacità, espressa in termini di gates equivalenti, che danno una stima della densità del chip. Numero di flip-flop Si fa una stima del numero di flip-flop di cui si ha bisogno per il progetto, che dipende da quanti contatori, macchine a stati, registri e latch saranno presenti; il numero di macrocelle del dispositivo dovrà essere tale da coprire questo fabbisogno. Numero di pin di I/O Quanti pin d’ingresso e uscita ci servono? Requisiti di velocità Qual'è il percorso combinatorio più veloce del nostro progetto? La risposta a questa domanda determina il tempo di propagazione (Tpd), in nanosecondi, del di-spositivo da scegliere. Qual'è il più veloce circuito sequenziale richiesto? La risposta ci indica quale frequenza massima (Fmax) scegliere. Package Abbiamo bisogno del più piccolo package (Ball Grid Array) o possiamo utilizzare un più comune QFP? Stiamo forse realizzando un prototipo e quindi ci serve una CPLD su zoccolo, come per il PLCC? Consumi La nostra applicazione sarà alimentata a batteria, da celle solari o dalla rete? Abbiamo bisogno di una CPLD che consumi il meno possibile? Vi sono problemi di dissipazione termica? Funzionalità a livello di sistema Il nostro circuito contiene componenti che sono alimentati a tensioni differenti? Dobbiamo interfacciare tra loro dispositivi con soglie diverse? Abbiamo dei clock critici da bufferare? Dobbiamo interfacciare la CPLD con microprocessori o memorie? Se sì, quali sono, per le memorie, i tempi d’accesso?

13

Utilizzare le CPLD XC9500 CPLD XC9500 Analizziamo ora l'architettura in-terna delle CPLD della serie XC9500. Le considerazioni che faremo so-no di carattere generale e sono quindi valide per tutte le CPLD di questa serie. Occorre tenere presente che, da un componente all'altro, ciò che cambia è l'ammontare dei gate a disposizione, il numero di macro-celle e dei pin di I/O. I pin si suddividono in due cate-gorie: pin di I/O ordinari e pin di controllo. Questi ultimi comprendono il reset, le abilitazioni dei buffer tri-state d’uscita, gli ingressi dei clock globali e i segnali per la programmazione in-system. Struttura interna della CPLD La figura 1 ci presenta una vista d'assieme del top-level. Consideriamo quindi i blocchi in-terni e il loro significato. Blocchi di I/O In azzurro sono indicati i blocchi d’ingresso/uscita (I/O blocks). Nel dettaglio, ciascun blocco di I/O (figura 2) è com-posto da un buffer di ingresso, un buffer di uscita, un multiplexer per il controllo dell’uscita e un controllo di riferimento. Il multiplexer per il controllo dell’uscita (OE MUX) può abilitare il buffer d’uscita (con relativo pin utilizzabile come uscita) oppure metterlo in alta impedenza (con relativo pin utilizzabile come input). È controllato o dalla macrocella o dai segnali presenti sui pin GTS (Global Three-State control). Il controllo dello slew rate, se abilitato, elimina even-tuali disturbi dai fronti di salita e di discesa dei segnali di uscita. Il controllo di riferimento (ground cont) è utilizzato in particolari applicazioni in cui si vuole utilizzare un pin di I/O come terminale di riferimento. Ciascun pin di I/O può essere attraversato da una corrente massima di 24 mA.

Figura 1 – Diagramma a blocchi del dispositivo XC9500

Figura 2 – Blocco di I/O

14

Matrice d’interconnessione La matrice d’interconnessione è evidenziata in giallo nella figura 3. Essa controlla i segnali d’ingresso ai blocchi fun-zionali, denominati function block in figura. Tutti i segnali provenienti dalle porte d’ingresso/uscita e quelli dei function block sono collegati per mezzo di una matrice wired-AND, che è di tipo proprietario FastCONNECT™. La presenza della matrice determina:

un aumento delle capacità logiche del dispo-sitivo, incrementando il fan-in logico dei fun-ction block senza introdurre ritardi addizio-nali

la disponibilità per il programmatore della funzione di pin lock.

Blocco funzionale Un blocco funzionale è composto di un pia-no AND programmabile, di un allocatore di termini prodotto e di una serie di macrocel-le, come possiamo vedere dalla figura 4. A partire dalle 36 linee di segnale entranti nel function block si derivano le corrispon-denti linee negate, in modo che nell’AND array giungono 72 segnali diversi. L’allocatore di termini di prodotto applica la combinazione dei segnali, come program-mato nel piano AND, alle macrocelle. Una macrocella (figura 5) contiene un flip-flop di tipo D o T. I relativi segnali di set / reset / clock (pro-venienti dai pin) sono applicati al flip-flop solo se abilitati dall’allocatore dei termini prodotto. L’uscita del circuito logico può essere con-nessa al pin anche senza far utilizzo del flip-flop. Ci sono 18 macrocelle indipendenti in ciascun function block. Le 18 uscite provenienti dai function blocks sono connesse sia alla matrice di interconnessione sia ai blocchi di I/O. Il segnale PTOE (Product Term Output Enable) utilizzato dai blocchi di I/O è generato dall’allocatore dei termini prodotto. Il numero di function blocks dipende dal dispositivo, com’evidenziato nella tabella successiva. Spesso le macrocelle sono utilizzate internamente alla CPLD senza che esse trasmettano i segnali elaborati ai relativi pin di output.

Figura 3 – Matrice di interconnessione

Figura 4 – Function block

Figura 5 - Macrocella

15

Programmabilità in-system La programmabilità in-system è uno dei grandi vantaggi di questi dispositivi. La circuiteria interna al chip per l'interfaccia di programma-zione è evidenziata in figura 6. I dispositivi della serie XC9500 vengono programmati per mezzo del protocollo standard JTAG. Durante la programmazione i pin di I/O ordinari sono man-tenuti a livello alto. La serie XC9500 può essere riscritta molte volte perchè le informazioni di configurazione sono immagazzinate in una memoria flash, per la quale Xilinx dichiara un numero mas-simo di 10000 operazioni.

CPLD XC9536 Aspetto fisico e raccomandazioni sull’utilizzo Si tratta della CPLD più "piccola" della famiglia, reperibile in pac-kage PLCC (Plastic Leaded Chip Carrier) a 44 pin (figura 7). Per facilitare l’utilizzo di questo componente in un circuito stam-pato THT, si utilizza lo zoccolo riportato in figura 8. Per rimuovere la CPLD dallo zoccolo occorre inserire un cacciavi-te a punta piatta sottile in una delle apposite scanalature presen-ti nello zoccolo stesso, facendo poi leva in modo delicato fino all’estrazione del dispositivo. Al fine di non sforzare eccessivamente il contenitore dell’integrato, è consigliato alternare l’azione del cacciavite su due scanalature contrapposte lungo la diagonale dello zoccolo. Caratteristiche elettriche All'interno contiene due Function Blocks di tipo 36V18, per un ammontare di 800 gates, come possiamo vedere dall'architettura in figura 9. Il periodo di propagazione dei segnali è di 5 ns e la frequenza di lavoro può raggiungere i 100 MHz. La corrente massima erogabile per pin in uscita è pari a 24 mA, più che sufficiente a pilotare un led. Significato dei pin (tabella 1) I pin denominati VCCINT si riferiscono all'alimentazione per la lo-gica e per i buffers interni, mentre al pin VCCIO va data l'alimen-tazione per i drivers di uscita. Vi sono altri pin, denominati globali, che hanno il seguente significato: GSR è il pin di Global Reset: un impulso a livello basso all'accensione su questo pin, prodotto con un gruppo R-C, resetta il dispositivo (figura 10).

XC9536XL XC9572XL XC95144XL XC95288XL Macrocelle/FB 36/2 72/4 144/8 288/16

Porte 800 1600 3200 6400 Registri 36 72 144 288 TPD(nsec) 5 5 5 6 fMAX(MHz) 178 178 178 208

Figura 6 – Diagramma della sezione in-

system programming

Figura 7 – Pinout del dispositivo

Figura 8 – Zoccolo per circuito stampato THT

16

GCK1/2/3 sono i pin d’ingresso dedicati per i clock principali (Global Clock). Le possibili sorgenti di clock col-legabili al dispositivo, anche contemporaneamente, sono tre: il loro utilizzo è orientato ad ap-plicazioni di tipo sequenziale. I pin di controllo GTS1/2 (Global Tri-State) servono per abilitare i buffers tri-state di uscita. Essendo attivi bassi, l’abilitazione si ottiene collegan-do delle resistenze di pulldown. Riguardo l'interfaccia di pro-grammazione JTAG, nello sche-ma elettrico sono riportati i rela-tivi pin al connettore J02; per saperne di più sulla pro-grammazione in-system si ri-manda al paragrafo successivo. Possiamo notare che i pin di I/O che la CPLD ci mette a disposizione sono parecchi, 28 per la preci-sione e tutti di tipo general-purpose, disposti sul lato destro del dispositivo nello schema. Da notare che anche i pin di Global Clock possono esse-re utilizzati come I/O generico, mentre quelli del JTAG non si possono usare per questo scopo. Nella tabella 1 sono riportati tutti i pin della XC9536, suddivisi per tipo e funzione. Sono indicati anche i function blocks e le macrocelle a cui appartengono.

Figura 9 – Architettura della XC9536

Tabella 1 – Pin diagram della XC9536 (i pin

con sfondo viola sono relativi al JTAG)

XC9536

U1

VC

CIO

32

VC

C41

VC

C21

I/O1

I/O2

I/O3

I/O4

I/O8

I/O9

I/O11

I/O12

I/O13

I/O14

I/O18

I/O19

TCK17

GN

D10

GN

D23

GN

D31

I/O20

I/O22

I/O24

I/O25

I/O37

I/O38

I/O43

I/O44

TDO30

TDI15

TMS16

I/O26

I/O27

I/O28

I/O29

I/O33

I/O34

I/O35

I/O36

I/O/GCK15

I/O/GCK26

I/O/GCK37

I/O/GSR39

I/O/GTS142

I/O/GTS240

R1

R2R3

R4 R5

+5V

C1

GND

C2

GNDJ1

123456

+5V

GND

+5V

C3

GND

GND

R6

D1

GND

INTE

RFA

CCIA

JTA

G

Figura 10 – Schema elettrico di base per l’accensione di un

LED

17

INTERFACCIA JTAG Le attività di debug del software per sistemi embedded presentano delle difficoltà aggiuntive ri-spetto alle normali attività previste per sistemi desktop: da ciò deriva l’esigenza di strumenti che garantiscono il controllo hardware dell’apparecchiatura sotto esame. Esistono differenti metodi e strumenti utilizzabili per condurre il collaudo del software/hardware; tra questi si può citare il trace mode, il JTAG, il BDM, l’ICE o il logic analyzer. JTAG, acronimo di Joint Test Action Group, sin dalla metà degli anni '80 rappresenta un proto-collo di test industriale, sancito dal comitato IEEE 1149.1, sempre più frequentemente impiegato per accedere in modalità seriale (a 20 Mbps) a segnali e punti di test di un circuito elettronico du-rante le procedure di built-in test (o debugging) e programmazione. Oggi molti circuiti integrati contengono un modulo di supervisione e di controllo remoto accessibile tramite l’interfaccia JTAG. L'architettura cui si applica l'interfaccia JTAG è quella del boundary scan, letteralmente "scansio-ne del contorno". Questa architettura prevede di progettare il circuito elettronico in maniera da partizionarlo in bloc-chi funzionali, fattore che facilita enormemente il test finale dell'intero assieme. Si tratta di una metodologia di progetto che ha comportato, da parte dei progettisti, un ripensa-mento radicale del metodo stesso di disegno dei circuiti elettronici complessi. Tutti i pin di I/O presenti nei dispo-sitivi con interfaccia JTAG (blocchi gialli in figura 11) possono essere connessi tra loro in modo da forma-re uno shift register sul quale tran-sitano i bit relativi al loro stato, al fine di formare un pacchetto che, gestito dal software di controllo per mezzo di un’opportuna interfaccia grafica, fornisce all’operatore tutte le informazioni sullo stato del di-spositivo. All’interno dei circuiti integrati che supportano il boundary-scan ven-gono aggiunte delle celle che per-mettono di pilotare i pin del disposi-tivo, oppure di catturare dati dai pin stessi o dalla logica del circuito. Come si può vedere dalla figura 11, esiste anche la possibilità di by-passare lo shift register, disabi-litando per l’integrato le funzioni di test. Il blocco TAP (Test Access Port), in base al comando ricevuto tramite la linea TMS (Test Mode Se-lect), stabilisce il modo di funzionamento dell’architettura JTAG presente nel dispositivo. Attraverso il JTAG è potenzialmente possibile:

eseguire il test delle connessioni tra i dispositivi JTAG e tutto ciò che li circonda nella scheda eseguire il test delle connessioni tra diversi dispositivi JTAG comunicare con la logica o il software contenuto in un microcontrollore, in un FPGA, in un CPLD

o qualsiasi altro dispositivo logico programmabile munito di registri JTAG accessibili programmare in-circuit dispositivi basati su tecnologia flash, quali FPGA, CPLD e microcontrollori aggiornare o riconfigurare i chip sul campo caricare la configurazione temporanea della RAM presente in alcuni tipi di FPGA testare la logica interna di un chip conformemente alle specifiche fornite in base a un modello o

Figura 11 – Schema di principio di un dispositivo con interfaccia

JTAG

18

a vettori di test effettuare il debugging dell’applicazione caricata nel dispositivo con funzioni di breakpoint,

stepping, osservazione/modifica della memoria e dei registri Inoltre, un test di tipo boundary scan, oltre a richiedere un’attrezzatura di collaudo economica, vie-ne effettuato in tempi molto rapidi. I segnali caratteristici dell'interfaccia JTAG, con evidenziati i relativi colori convenzionali di ricono-scimento dei pod di collegamento, sono i seguenti:

VCC: Alimentazione (ROSSO) TCK: Test Clock (GIALLO) TMS: Test Mode Select (VERDE) TDI: Test Data In (BIANCO) TDO: Test Data Out (BLU) GND: Massa (NERO)

In una procedura tipica di test per prima cosa si deve caricare, in forma seriale, il codice dell’istruzione relativa all’operazione da svolgere e, se occorre, anche i dati di inizializzazione. Successivamente la circuiteria di test selezionata è abilitata a rispondere. Una volta terminata l’istruzione di test che doveva essere eseguita, i risultati prodotti sono messi in forma seriale all’uscita del componente sotto test. JTAG consente anche di collegare in cascata più componenti tra loro. JTAG non è uno standard “aperto” come, ad esempio, SPI o USB. Mentre per questi ultimi è possibile scaricare da internet le specifiche, l’ente che ha “inventato” JTAG ha finanziato il proprio lavoro per mezzo della vendita delle informazioni inerenti lo standard. Ciò si traduce, in linea di massima, in un costo di circa 600 dollari tra software e manuale, al quale andrebbe aggiunto il costo del cavo di collegamento al personale computer, del valore di circa 100 dollari. Tale spesa è normalmente proibitiva per gli hobbisti, gli sviluppatori open-source e per chiunque non può permettersi di fare un simile investimento senza sapere in partenza se potrà essergli utile. Fortunatamente esistono in commercio dei software free che, pur se con funzionalità limitate, sfruttando le scarse informazioni presenti nella rete e cavi POD autocostruiti dalle prestazioni non eccelse (non si possono garantire, ad esempio, i 20 Mbps), permettono con un investimento di cir-ca 20 dollari di testare il funzionamento dei principali chip FPGA e CPLD con interfaccia JTAG di-sponibili in commercio.

19

FLUSSO CAD PER CPLD Quando ci si accinge a progettare un circuito che fa uso di componenti programmabili, è essenziale disporre di un si-stema di sviluppo software che supporti i componenti utiliiz-zati. I tools CAD sono importanti non solo per i dispositivi com-plessi, come le CPLD o le FPGA, ma anche per i più semplici SPLD (Simple PLD). Un tipico sistema CAD per CPLD consiste in un ambiente che include gli strumenti software per effettuare i seguenti pas-si: la descrizione comportamentale o entry del disegno, l'ot-timizzazione logica, il fitting entro il dispositivo, la simulazio-ne e infine la configurazione. Il flusso di progetto è illustrato in figura 12 e indica i pas-saggi da uno step all'altro. La descrizione comportamentale è la descrizione del comportamento del dispositivo ad alto livello; durante que-sta fase si definiscono perciò le funzionalità che questo deve realizzare. Può essere fatta per mezzo di un applicativo grafico di schematica o mediante una descrizione testuale in un lin-guaggio di descrizione dell'hardware (Hardware Description Language, HDL). Il linguaggio può essere ABEL, AHDL, VHDL, VERILOG o al-tro; in commercio esistono diversi tool che consentono di progettare in HDL. La descrizione è ideale, nel senso che non si prevedono ri-tardi fisici. La successiva fase di sintesi effettua la traduzione dalla de-scrizione comportamentale a quella strutturale, cioè a livello di porte logiche (netlist). La sintesi e si basa sulla presenza di librerie di simboli ade-guati. È suddivisa nelle seguenti fasi (figura 13):

analisi sintattica del sorgente compilazione, cioè traduzione a livello RTL (Register

Transfer Level) ottimizzazione, nel senso del miglioramento della logica

La sintesi è un procedimento guidato e può fare uso di op-portuni vincoli (constraints). La descrizione strutturale rappresenta il circuito in termi-ni di blocchi logici (quali porte, flip-flop, memorie, registri, eccetera) presenti nella libreria e collegati tra di loro a costi-tuire la lista segnali (netlist). Le informazioni supportate da questa descrizione riguardano i ritardi della logica e l'area occupata. La fase di implementazione traduce la descrizione in termini di gates logici in una descrizione fi-sica, che si traduce infine in un file di programmazione da scaricare nel dispositivo. Il flusso per CPLD (semplificato rispetto a quello per FPGA) contiene i seguenti step (come da figu-

Figura 12 – Fasi del flusso di progetto

Figura 13 – Passi della sintesi

20

ra 14):

translate (cioè traduzione con blocchi pre-configurati) fit (mappatura della logica nelle macrocelle, al fine di a-

dattarla al meglio) Il procedimento fa uso dei vincoli implementativi così come sono stati indicati nel file di constraint UCF, come ad esempio il pin lock. La descrizione fisica è quella che rappresenta il circuito in modo molto prossimo a quella reale, in quanto contiene le in-formazioni sui ritardi nella logica, sui ritardi introdotti dai col-legamenti, sull'area occupata e il dettaglio sull'ubicazione di ogni singola porta logica e dei pin di I/O. La realizzazione è la fase finale del procedimento; consiste nel trasferimento del codice di pro-grammazione sul componente. Prima di passare alla realizzazione, occorre tener presente l’importanza della simulazione disponi-bile al termine di tutte le fasi precedenti. Questa fase è essenziale per verificare la correttezza del progetto prima ancora di averlo fisicamen-te realizzato. Con la simulazione si visualizzano le uscite interessate e il loro andamento nel tempo; se vi sono, ad esempio, dei ritardi che possono provocare errori, allora si andrà a rivedere la descrizione in HDL e si ripeterà il processo. L'utente può da qui rientrare più volte alla fase della descrizione comportamentale per eliminare gli eventuali errori e ottimizzare il funzionamento del circuito logico.

PROGRAMMAZIONE: STATO DELL’ARTE Per quanto riguarda le SPLD, quando si utilizzavano i primi sintetizzatori (ad es. per il linguaggio ABEL) l'approccio era piuttosto "artigianale". Era fondamentale conoscere a fondo la struttura interna dai data sheet del dispositivo, in particola-re quanti termini di prodotto / flip-flop fossero presenti, la struttura della macrocella, ecc.. Conoscendo bene la struttura interna si riusciva ad ottimizzare fin dall'inizio la scrittura del codice sorgente e "riempire" il dispositivo al meglio. Il tool software forniva la percentuale di occupazione del dispositivo e, se questa superava il 100%, il buon progettista si metteva all'opera e, dopo diverse iterazioni e applicando i propri stratagemmi, riusciva a far "entrare" nel dispositivo la funzione desiderata, sfruttando anche il più nascosto re-cesso del chip. Con l'avvento delle CPLD ci si è svincolati sempre di più dalla necessità di avere la piena padronan-za a priori della struttura interna. La CPLD ha una struttura contenente diversi blocchi cosiddetti PAL- like, per cui le risorse sono mol-to più numerose di una volta. Per una CPLD sapere a priori se una certa funzione sarà implementabile, dal punto di vista del-l'ammontare di celle logiche e delle varie risorse specializzate presenti, è possibile in una certa mi-sura, ma è una strada non molto utilizzata. Quello che si fa è in primo luogo scegliere il dispositivo in base alla capacità e agli eventuali blocchi funzionali che possiede sulla base di progetti di pari complessità già noti, ma poi affidare comple-tamente al tool software il compito di ottimizzare il processo di implementazione e sintesi. L'utilizzatore può comunque (ed è bene che lo faccia) configurare alcuni parametri preferenziali di cui il sintetizzatore terrà conto. Se poi la funzione che si vuole implementare non "fitta" sul dispositivo, semplicemente si passa a scegliere un dispositivo di capacità più elevata e si ritenta la simulazione.

Figura 14 – Passi della sintesi

21

Il flusso di progetto più avanzato oggi svincola il progettista anche dal dover scrivere il codice Veri-log o VHDL. Infatti, si procede disegnando un modello del sistema ad alto livello, mediante schema a blocchi funzionali (vedi ad esempio l'ambiente MATLAB / SIMULINK). Dal modello, si genera in modo automatico il codice Verilog o VHDL corrispondente, il quale viene in seguito passato ai tool di sintesi per l'ottimizzazione e trasferito sul dispositivo target finale.