Insegnamenti di Sistemi Elettronici Dedicati 1 (Corso di Laurea in Ingegneria Elettronica) Sistemi Elettronici Digitali1 (Corso di Laurea Specialistica in Ingegneria delle Telecomunicaizoni) Introduzione ai Dispositivi FPGA Edizione 2004 Rodolfo Zunino FPGA (Field Programmable Gate Array) I dispositivi FPGA sono circuiti integrati contenenti molte celle logiche identiche, che possono essere viste come delle singole porte logiche. Ogni cella può indipendentemente prendere possesso di una funzione specifica, definita da una tabella e può comunicare con le altre celle tramite una fittissima trama di interconnessioni e di interruttori. Questa matrice di celle e di connessioni forma la base per la costruzione di ogni circuito, anche di quelli più complessi, grazie alla grande varietà di funzioni possibili e all'elevatissimo numero di connessioni. Sono dispositivi programmabili direttamente dall’utente, costituiti da un array di componenti logici, circondati da blocchi di I/O programmabili liberamente e collegabiti tra loro tramite interconnessioni programmabili; costituiscono un’importante evoluzione nel mondo dei dispositivi programmabili poichè hanno un’elevata potenza di calcolo e di connessione. Un aspetto molto importante sono i collegamenti locali che attraversano il dispositivo e che sono condivisi da pochi elementi logici, quindi la potenza utilizzata ed i ritardi che si generano sono contenuti. All’interno di uno stesso dispositivo possono esserci differenti linee locali di lunghezza differente e questo garantisce un’elevata flessibilità del sistema. Field Programmable significa che la funzione dell'FPGA è definita dal programma dell'utente, piuttosto che dalla disposizione, non modificabile, dei dispositivi che realizzano le funzioni logiche. Questi dispositivi permettono di raggiungere livelli di integrazione molto spinti, mantenendo la caratteristica di basso costo di produzione iniziale, tipico dei dispositivi programmabili. 2 I componenti FPGA si distinguono per il tipo di blocchi logici implementati all'interno del chip e per il modo di programmarle; vengono usati in applicazioni che richiedono alte prestazioni, dove sono necessari dei tempi di risposta brevi, in situazioni in cui sia necessario realizzare un data path, nelle I/O intensive applications oppure nelle register intensive applications (ad esempio possono essere utilizzate per realizzare un interfacciamento ad un bus PCI a 33MHz o a 66MHz, oppure un controllore di una DRAM con ts=3ns e tco=6ns, o ancora per applicazioni collegate a reti ETHERNET o reti ancora più prestanti come le reti ATM). Le MPGA (Mask Programmable Gate Array) hanno le stesse funzionalità degli FPGA, ma sono programmabili dalla sola ditta costruttrice attraverso le maschere tecnologiche e quindi non sono nè programmabili sul campo nè tantomeno riprogrammabili; sono gate array in cui viene fatta una prima fase tecnologica a livello di ossido sottile (TOX thin oxide), ma non vengono messe le metallizzazioni per realizzare le interconnessioni. Queste ultime vengono aggiunte in un secondo tempo in seguito ad una richiesta da parte dell'utente. Le FPGA sono commercialmente anche conosciute come: • LCA (Logic Cell Array) • pASIC (programmable ASIC) • FLEX, APEX (Altera) • ACT (Actel) • ORCA (Lucent) • Virtex (Xilinx) • pASIC (QuickLogic) Le FPGA sono particolarmente interessanti sotto alcuni punti di vista, poichè rappresentano: • il miglior compromesso tra flessibilità, prestazione e costo; • piattaforme per la realizzazione di sistemi completi, infatti possono essere sia definitivi sia prototipi. Sebbene abbiano prestazioni ridotte rispetto ad un ASIC (Application Specific Integrated Circuit), hanno: • un costo e un tempo di produzione inferiori; • un costo per unità più basso per bassi volumi di produzione; • la particolarità di poter far riversare sullo stesso dispositivo le configurazioni che descrivono applicazioni differenti; le descrizioni risiedono in ROM e, prima dell’uso, vengono caricate in RAM oppure direttamente caricate in RAM durante l’esecuzione. 3 Un tradizionale approccio allo sviluppo di questi dispositivi prevede che la simulazione comportamentale di un circuito venga svolta via software, purtroppo però la crescente complessità dei dispositivi mette in evidenza due svantaggi di tale modus-operandi, infatti la verifica di porzioni ridotte del dispositivo introduce problemi di verifica del funzionamento globale e riduce anche la possibilità di rispettare le scadenze imposte dal time-to-market. Le FPGA sono tipicamente inadatte per applicazioni puramente G.P. (General Purpose), basati su microprocessori, o anche S.P. (Special Purpose), dominio degli ASIC, ma col tempo il “gap” e la linea di confine presente tra FPGA, ASIC e µP si è assottigliata poichè si sono ottimizzate alcune aree del sistema. I. Tecnologie per programmare i dispositivi FPGA Le interconnessioni tra le celle possono essere di due tipi: • Volatili: si mette una RAM in cui si scrive la configurazione; • Non Volatili: si mette o una EEPROM, o una FLASH, o si può cablare direttamente nel FPGA le informazioni relative alle piste oppure si utilizza il metodo dell’AntiFuse[O1] (PROM) cioè si ha un circuito aperto fino al momento in cui viene forzata la corrente. Le tecnologie influenzano la scelta delle architetture per le interconnessioni e per il routing che, a loro volta, influenzano l'architettura dei blocchi logici (se un certo tipo di tecnologia permette di realizzare molte intercnnessioni la scelta del tipo di blocchi da utilizzare sarà orientata verso blocchi piccoli e poco complessi). Per la realizzazione delle interconnessioni ci sono tre possibilità: 1. Utilizzare delle "antifuse devices" che normalmente sono dei circuiti aperti, ma possono diventare dei conduttori se viene fatta passare una corrente elevata tramite una opportuna tensione. I dispositivi antifuse possono essere realizzati in due modi differenti: a. dispositivo antifuse che utilizza silicio amorfo; Si crea una "via" conduttrice (R=5ohm) nel silicio amorfo che normalmente è un isolante a causa degli ioni metallici che vi si insinuano quando si applica per un tempo adeguato una tensione di 10-12V. 4 Questa tecnologia non è riprogrammabile, ma ha il vantaggio che permette di realizzare dispositivi con matrici di interconnessioni ad alta densità, e questo consente di realizzare blocchi logici semplici. Il limite alla densità raggiungibile con questa tecnologia è dato dalla dimensione fisica minima che devono avere le linee di collegamento; b. dispositivo antifuse che utilizza oxide-nitride-oxide 2. Programmare le interconnessioni tramite celle di SRAM: questa tecnologia mi permette di riprogrammare sia le connessioni sia le funzionalità dei blocchi durante il funzionamento del dispositivo, perchè la SRAM è omogenea con la normale attività del sistema. La grande flessibilità consentita dall'utilizzo di SRAM si paga però in termini di area, perchè il suo utilizzo comporta dimensioni superiori di almeno un ordine di grandezza rispetto ai 5 dispositivi antifuse; inoltre questo tipo di tecnologia presenta una resistenza di interconnessione dell'ordine del KΩ. Per realizzare interconnessioni programmabili attraverso delle SRAM si utilizzano configurazioni di questo tipo: Esistono altre configurazioni, più complesse, che permettono la creazione di collegamenti estremamente flessibili come ad esempio: Per ottenere il collegamento completo non sarebbe necessario programmare tutti i transistor, ma in questo modo non ci sarebbe resistenza minima all'interconnessione. Una RAM statica si può realizzare con 5 transistor in questo modo: 6 3. Interconnessioni basate sui transistor floating gate; si distinguono in EPROM (cancellabili con i raggi ultravioletti) e EEPROM (cancellabili con la tensione, quindi hanno il pregio di essere riprogrammabili direttamente sulla scheda). Esse sono riprogrammabili e non volatili, richiedono un’area con dimensioni che stanno a metà strada tra le due tecnologie precedenti. La seguente tabella riassume le caratteristiche delle tre tecniche considerate sopra: Tecnologia Volatilità Programmabilità Area R (KΩ) 0.5-2 C Extra (pF) steps SRAM Si Si Grande 10-20 0 Antifuse No No Piccola 0.05-0.1 1.1-1.3 3 Antifuse ONO No No Piccola 0.3-0.6 3 EPROM No Si Media 2 10-20 3 EEPROM No 2 10-20 >5 silicio amorfo Si sul circuito Il doppio 5 dell’EPROM Nota: per “extra steps” si intendono i passi aggiuntivi richiesti dalla tecnologia rispetto al processo di produzione delle SRAM 7 Tecniche di programmazione dei dispositivi FPGA Il linguaggio di programmazione utilizzato è il VHDL e di seguito viene riportato uno schema semplificato di un tipico iter progettuale di dispositivo digitale basato su FPGA. Le varie fasi di questo iter possono essere cosi’ sintetizzate: Sintesi: descrizione schematica del dispositivo, prende in ingresso una descrizione comportamentale e dà in uscita una descrizione strutturale (rete logica); Simulazione: ricrea la rete, senza modificare nulla, ottimizza il tutto indipendentemente dalla tecnologia che si utilizzerà in seguito; Mapping: conversione della lista dei componenti base in una lista di componenti logici. Si ottimizza il circuito per ridurre o l’area da utilizzare o per aumentare le prestazioni, quindi è un passo che dipende dalla tecnologia che si utilizza; Simulazione (fisico-elettrica del circuito, ad esempio con programmi di CAD quali SPICE); 8 Place & Route: assegna le celle logiche ad una specifica locazione del FPGA e seleziona segmenti di linee di connessione, li collega alle celle e configura la matrice degli interruttori (se presente); Simulazione/Emulazione: dipende dalla tecnologia e dal FPGA utilizzati. Si inizia con la descrizione in HDL (può essere VHDL ma anche AHDL, Verilog o altro) dell’FPGA; in commercio esistono diversi tool che aiutano a scrivere in HDL. Un esempio di descrizione Vhdl è la seguente: Successivamente si effettua la simulazione per verificare che le temporizzazioni siano effettivamente quelle desiderate. Se ci sono ad esempio dei ritardi che possono provocare errori allora si andrà a rivedere la descrizione in HDL. 9 Con la simulazione si visualizzeranno le uscite desiderate ed il loro andamento nel tempo, ad esempio: Se la simulazione è corretta si passa alla sintesi, la quale produce lo schema elettrico, es: 10 Nella sintesi i blocchi dell’FPGA sono generici, nella fase successiva di place & route invece le risorse usate saranno reali: Il place & route è un processo semi-automatico nel quale è possibile inserire diversi vincoli, ad esempio che venga occupata la minore area possibile, oppure vincoli temporali tra due connessioni, ecc; quindi per ottenere una simulazione corretta ci sono molti vincoli che devono essere rispettati. Non sempre il processo di place & route viene completato in automatico, a volte perché il circuito è troppo complesso, a volte perché è proprio impossibile rispettare i vincoli. In tali casi si può agire manualmente sulla matrice dei CLB o sulle risorse usate. 11 Cenni sul VHDL Il VHDL è un linguaggio standard per la descrizione dell’hardware (Hardware Description Language) , che può essere utilizzato per la documentazione, la simulazione e la sintesi di sistemi digitali. Il VHDL è stato introdotto come linguaggio standard per la documentazione di sistemi digitali complessi, è nato con lo scopo di fornire una descrizione non ambigua di un sistema digitale, che potesse essere interpretata univocamente dai vari progettisti impegnati nello sviluppo dello stesso sistema. Una delle caratteristiche del VHDL è quella di poter simulare il sistema descritto, sia a livello funzionale sia tenendo conto dei ritardi del circuito; esso consente infatti di descrivere efficacemente sistemi complessi cui corrispondono netlist di milioni di porte logiche elementari, così come in un programma software ad alto livello è possibile ottenere facilmente programmi in linguaggio macchina costituiti da milioni di istruzioni elementari a partire da un listato di poche centinaia di righe. Un ulteriore vantaggio legato all’utilizzo di programmi di sintesi è legato al fatto che la descrizione di un sistema digitale in VHDL può essere (quasi del tutto) indipendente dalla particolare tecnologia scelta per l’implementazione del circuito, così come un programma descritto in un linguaggio ad alto livello può essere compilato ed eseguito su piattaforme hardware differenti. Cenno alle differenze tra DSP e FPGA DSP e FPGA coprono due fasce di mercato diverse; per applicazioni in cui è richiesta una grande potenza di calcolo è sicuramente meglio l’utilizzo dei DSP (per via dell’architettura, parallelismi vari, ecc…), mentre per gli FPGA è ancora la Glue-Logic a possedere la fetta di mercato maggiore, sebbene non manchino esempi di applicazioni complete di controllo basate su FPGA all-on-chip. Un’altra importante differenza che allontana gli FPGA dal mondo dei DSP è la libertà di configurazione dei PIN, quindi degli ingressi e delle uscite, i DSP infatti avevano una più rigida configurazione della piedinatura. Il punto fondamentale quindi è che con un FPGA si ha una maggiore flessibilità progettuale. In un’applicazione in cui conviene l’utilizzo di un DSP, si inserisce spesso un FPGA complementare, che possiede tutta la logica che non possiede il DSP, per sempio per generare segnali si servizio (refresh per DRAM) o sincronismi verso i dispositivi di I/O. 12 Inoltre un FPGA costa molto di più di un DSP, infatti un DSP può costare poche decine di dollari (5-10$ circa), mentre un FPGA economico può costare circa 100-150$. III. Appendice: Esempi di FPGA commerciali Fra i principali produttori di FPGA si annoverano Altera, Xilinx, ed ACTEL; dell’Altera verranno considerati il MAX7000, il FLEX 8000, il FLEX10 e l’APEX20, mentre della Xilinx verrà considerato l’XC4000. Altera MAX7000 Nella figura sottostante viene riportato lo schema a blocchi di una MAX7000, dispositivo EEPROM, dalle elevate prestazioni in termini di frequenza di funzionamento. Tale FPGA viene realizzato in tre differenti versioni, con Core alimentato a 5, 3.3 o 2.5 volt. Ovviamente i dispositivi a tensione minore sono quelli di ultima generazione, integrano perciò una tecnologia migliore che permette di raggiungere il massimo delle frequenze operative. Come in quasi la totalità dei dispositivi Altera, anche le MAX 7000 sono dotate di Multivolt I/O, ossia di un interfaccia che permette di collegare logiche con tensione differente. Particolare attenzione bisogna volgere al caso in cui si utilizzino FPGA con core a 3.3 v o 2.5 v. Per questi dispositivi la tensione massima di alimentazione dell’ interfaccia I/O è di 3.3 volt. 13 Nei ralativi datasheet però, viene dichiarata una compatibilità con le logiche a 5 volt; ovviamente una porta di output, il cui buffer è alimentato a 3.3 volt non potrà mai arrivare a 5 volt; il collegamento e’ possibile se il dispositivo a valle è conforme alle specifiche TTL 5V, per cui un segnale maggiore di 2.4 V viene riconosciuto come livello alto. Sebbene la figura di sopra riporti la struttura interna specifica di una MAX 7000 di Altera, si può considerare tale schema significativo per capire come in generale sia fatto un FPGA; gli elementi fondamentali sono: • Gruppi LAB (Logic Array Blocks) contenenti le macro-celle • Blocchi di connessione I/O • PIA (Programmable Interconnect Array) • Pin dedicati (GLCK1,GLCK2,OE1,OE2,GCLRn) Un gruppo LAB, racchiude un certo numero di macro-celle, ossia i "nuclei" che realizzano le strutture fondamentali del FPGA. Per capire a cosa servono tutti gli elementi visti nella struttura generale bisogna analizzare la macro-cella nel dettaglio. 14 La parte combinatoria, della logica che si deve implementare, è svolta da una serie di porte logiche predefinite, collegate in maniera opportuna, secondo le informazioni impartite dal programma utilizzato per lo sviluppo del progetto. L’elemento che realizza fisicamente tali connessioni è la Product Term Select Matrix. La cosa importante da osservare è che in questo dispositivo, le funzioni logiche combinatorie sono realizzate effettivamente attraverso una struttura logica cablata; negli FPGA RAM, le funzioni logiche combinatorie sono realizzate attraverso una memoria, in cui gli indirizzi costituiscono gli ingressi della rete logica e le uscite i dati. Questi due tipi di architetture hanno pregi e difetti facilmente intuibili; se da un lato un’architettura micro-cablata permette di raggiungere prestazioni elevate in termini di tempi di propagazione, d’altra parte l’integrazione che si riesce a raggiungere e’ notevolmente inferiore a quella ottenibile attraverso una analoga struttura RAM. E’ comunque opportuno tenere a mente un fatto sempre vero, ossia che confronti di questo tipo vanno fatti su logiche utilizzanti tecnologie analoghe; ovviamente passando ad un processo costruttivo piu’ moderno si possono realizzare logiche micro-programmate più veloci di quelle micro-cablate realizzate con una tecnologia di cinque anni fa. Qualora la macro-cella in questione non contenesse sufficienti elementi logici per implementare al funzione combinatoria richiesta, è possibile utilizzare una macro-cella adiacente; l’interconnessione avviene tramite i 16 Expander Product Terms. Notare che nel caso in cui questi 15 16 canali non bastassero, oppure le risorse interne al gruppo LAB fossero insufficienti, un ulteriore espansione potrebbe avvenire unicamente attraverso il circuito a valle del registro, tramite una nuova connessione con il PIA, con prestazione decisamente inferiori. Come visibile da schema, se il registro presente in ogni macro-cella, risultasse non necessario per la funzione che si deve realizzare, puo’ essere escluso attraverso un opportuno selettore. Altri interruttori logici, permettono di selezionare da quale fonte prelevare segnali come il clock del registro, il clear o il dato D. In particolare, è possibile connettere tali ingressi, ad un segnale proveniente dalla parte combinatoria della macro-cella, oppure ad un ingresso dedicato; in particolare, mentre il dato D puo’ essere collegato direttamente ad un pin di I/O, i segnali di clock e clear possono essere assegnati ai rispettivi ingressi dedicati; per raggiungere le massime prestazioni in termini di frequenza operativa, infatti, risulta indispensabile fare uso di questi I/O dedicati, in particolare del Global Clock. Altera FLEX8000, FLEX10K e APEX20k Sono tutti dispositivi SRAM aventi la struttura di interconnessione chiamata FastTrack. Questa modalità di interconnessione si realizza mediante dei fasci di fili raggruppati in righe o colonne che attraversano il componente in tutta la sua dimensione. Esistono interconnessioni a tre livelli tipiche delle famiglie FLEX8000 e FLEX10K, e interconnessioni a quattro livelli tipiche della famiglia APEX20K. Nelle strutture ad interconnessione a tre livelli i Logic Element sono organizzati in gruppi di otto o dieci per formare un blocco denominato Logic Array Block (LAB). I LAB sono organizzati in forma di matrice di righe e colonne e tra questi sono inseriti dei canali di routing sia orizzontali che verticali che forniscono le necessarie connessioni. L’interconnettività all’interno di un LAB è fornita da canali di interconnessione locali denominati LAB Local Interconnect. Il passaggio da colonna a riga è compiuto mediante dei multiplexer programmati in fase di configurazione e selezionati, in base al tipo di routing compiuto, mediante le celle static RAM della memoria di configurazione. Quando un LE di un LAB deve essere connesso a un LE di un qualsiasi altro LAB del dispositivo il segnale viene immesso in un canale della colonna che lambisce il LAB, poi in un canale della riga che serve il LAB destinatario e quindi raggiunge il LE mediante un canale del Local Interconnect. I canali usati per questo collegamento appartenenti sia ad una riga che ad una colonna, anche se in misura minore rispetto alla loro lunghezza totale, non possono più essere utilizzati per un altro collegamento. Se il LAB destinatario appartiene alla stessa riga del sorgente è 16 possibile evitare il passaggio mediante colonna entrando direttamente nella riga. Se il LE sorgente appartiene allo stesso LAB del LE destinatario allora è possibile evitare anche il passaggio della riga per compiere direttamente la connessione mediante l’interconnessione interna del LAB. Nella famiglia APEX20K sono previsti quattro livelli di interconnessione. Dieci Logic Element sono raggruppati in un LAB e sedici LAB e un blocco embedded ESB (Embedded System Block) sono raggruppati insieme per formare un MegaLAB. L’ESB può essere una ram, una rom, una cam, un blocco di sedici macrocelle basate sulla struttura a product term, xor e flip flop. L’interconnessione tra i LAB adiacenti è fornita dal Local Interconnect in maniera simile a come avviene nella FLEX8000, mentre l’interconnessione all’interno del MegaLAB è garantita dal MegaLAB Interconnect. All’interno del componente i MegaLAB sono connessi mediante canali di routing costituiti da righe e colonne. Sia per le interconnessioni a tre livelli che a quattro, alcuni blocchi di I/O sono direttamente connessi con i canali verticali, altri con quelli orizzontali. Di seguito sono riportati i diagrammi a blocchi dei rispettivi dispositivi. FLEX8000: 17 FLEX10K: APEX20K: 18 Xilinx XC4000 La serie XC4000 viene implementata con un’architettura di CLB regolare,flessibile e programmabile, circondata da un perimetro di blocchi di I/O programmabili (IOB). I CLB forniscono gli elementi funzionali per la costruzione della parte logica, mentre gli IOB serviranno da interfaccia tra i pin del package e le linee dei segnali interni. I principali elementi CLB sono mostrati nella figura seguente: Sono presenti due generatori di funzione a 4 ingressi (F e G) le cui uscite possono essere mandate all’ingresso di un terzo generatore di funzione a tre ingressi (H). Almeno un ingresso di H sarà esterno al CLB. Ogni CLB contiene due elementi di memoria (Flip-Flop) che possono essere usati per immagazzinare i risultati dei generatori di funzione. L’XC4000 adotta una logica per la propagazione rapida del carry tra i CLB secondo questo schema: 19 Quando non sono presenti CLB in alto o in basso (quindi ai vertici di questo schema) il carry viene propagato a destra. La figura seguente mostra lo schema di tale logica: 20 Per formare la somma i carry output sono combinati con gli operandi nei generatori di funzione. Per quanto riguarda gli IOB un diagramma a blocchi semplificato può essere il seguente: L1 e L2 portano i segnali di ingresso nell’array e sono connessi ad un registro che può funzionare da flip-flop o da latch. Gli ingressi L1 e L2 possono essere ritardati di diversi nanosecondi prima di entrare nel registro, in modo da alzarne il tempo di set-up. I segnali di uscita (out) possono passare direttamente al pad o essere immagazzinati nel flipflop. Il segnale T serve a mettere in alta impedenza il buffer di uscita. 21 Le linee di connessione dei CLB sono illustrate nel seguente diagramma ad alto livello: La seguente tabella mostra quante linee sono disponibili a seconda del loro tipo: 22 Il seguente diagramma invece rappresenta dettagliatamente il CLB con le relative linee di connessione: Gli ingressi e le uscite sono presenti su tutti e quattro i lati in modo da fornire la massima flessibilità; in generale l’intera architettura è simmetrica e regolare. Le linee orizzontali e verticali intersecano in un box chiamato PSM (Programmable Switch Matrix). Ogni matrice di interruttori consiste di pass transistor programmabili,usati per stabilire le connessioni tra le linee (vedere figura 26 nella pagina precedente). Le linee possono essere singole, doppie, quadruple (solo per l’XC4000X) e lunghe: 23 Le linee singole sono otto verticali e otto orizzontali per ogni CLB e sono usate nelle connessioni tra le PSM dei CLB. Le linee doppie sono quattro verticali e quattro orizzontali per ogni CLB e corrono attraverso due CLB prima di entrare in una PSM, sono lunghe il doppio delle linee singole. Le linee quadruple sono dodici verticali e dodici orizzontali per ogni CLB, corrono attraverso quattro CLB prima di entrare in una PSM e sono quattro volte più lunge delle linee singole. Le linee lunghe attraversano tutto l’array per lunghezza o per larghezza e sono usati per il fan-out o per reti distribuite in lunghe distanze. 24