Chi progetta sistemi elettronici è fatalmente attratto dalla flessibilità creatività permessa dalle Fpga e dalla possibilità di intervenire sui progetti con modifiche anche consistenti, anche quando il sistema è ormai in fase di collaudo finale o addirittura quando è già in funzione. Queste caratteristiche rendono le logiche programmabili particolarmente interessanti per le applicazioni destinate ai mercati emergenti, cioè le situazioni in cui i requisiti progettuali possono cambiare anche più volte e non esistono ancora componenti standardizzati application specific. La prestazioni delle moderne Fpga sono tali da permetterne l'uso anche in apparati 100 Gbit Ethernet (100 GbE) o Long-Term Evolution (LTE) e, grazie alla possibilità di utilizzare soluzioni IP, cioè implementazioni di cui si acquista la proprietà intellettuale per poi realizzarla fisicamente nell'architettura Fpga, permettono di ridurre notevolmente i tempi di sviluppo e la complessità di progetto. Fpga e altri tipi di logiche programmabili sono poi molto adatte alla applicazioni di nicchia, quando i ridotti volumi non giustificano la progettazione e la realizzazione di componenti standard e, naturalmente, in tutti i casi in cui occorre integrare in un singolo dispositivo quella che un tempo era definita glue logic, cioè la circuiteria logica che interconnette i componenti più sofisticati, oppure quando è necessario creare interfacce fisiche tra circuiti diversi: infine, ma non meno importante, le Fpga sono estremamente adatte alle realizzazioni che prevedono l'elaborazione digitale dei segnali, perché in effetti, le Fpga possono rappresentare a volte una soluzione più economica e più efficiente in termini di prestazioni dei classici Dsp. A fronte di tanti vantaggi, le Fpga hanno anche alcune limitazioni o controindicazioni: ad esempio richiedono comunque tempi di sviluppo non brevissimi e in generale (perché fondamentalmente si tratta sempre di progettare un circuito a livello gate e non semplicemente di scrivere il software per un comune microprocessore) e hanno prestazioni inferiori a quelle di un Asic o di un Assp (per garantire la flessibilità, saranno sempre presenti un certo numero di transistor o di gate che rimarranno inutilizzati, e questo penalizza l'efficienza circuitale).
Alternative cicliche
Ma questi piccoli svantaggi, su cui comunque i produttori stanno lavorando alacremente, non hanno impedito il successo di Fpga e logiche programmabili, successo testimoniato dai volumi di vendita. Secondo Gartner Group il mercato mondiale di Pld/Fpga varrà nel 2010 circa 4 miliardi di dollari; come evidenzia il grafico di Fig. 2, si tratta in realtà di un valore che è praticamente uguale a quelle di dieci anni fa, ma il fatto che la crescita prosegua ininterrottamente da vari anni e che questo settore dell'industria dei semiconduttori abbia saputo riprendersi rapidamente dalla grave crisi del 2001 - 2002, modificandosi e adattandosi a nuove applicazioni, è innegabile. Più difficile è capire se le logiche programmabili saranno effettivamente in grado di guadagnare ulteriori spazi a scapito dei progetti Asic; secondo alcuni analisti le nuove generazioni di Fpga, grazie al passaggio a geometrie inferiori e a nuove architetture possono ambire al salto di qualità, ma molti altri osservatori contestano questa previsione sostenendo che, anche se effettivamente continua a diminuire il numero di progetti Asic, in realtà ogni progetto è ormai un vero e proprio sistema on chip, quindi caratterizzato da maggiore complessità, maggior numero di transistor, maggiori costo e maggiori volumi (e quindi anche maggiore guadagno per chi li propone). Non per nulla anche il mercato Asic è cresciuto negli ultimi periodi e ha raggiunto un valore che oscilla ormai tra 22 e 24 milioni di dollari, molto maggiore a quelle del mercato logiche programmabili. Forse la verità sta nel mezzo: vent'anni fa un noto manager di una grande azienda giapponese teorizzò che l'alternanza tra il privilegiare soluzioni Asic o programmabili è ciclica, con un periodo di più o meno 10 anni, in funzione degli sviluppi delle tecnologie.
Progettare con Fpga e Pld
La progettazione di un sistema basato su Fpga è un compito tutt'altro che semplice e da non sottovalutare; in effetti, è molto più semplice progettare utilizzando un classico microprocessore e un po' di circuiteria logica standard di contorno. Un progettista che si accinge a sfruttare una Fpga deve per prima cosa progettare a livello logico e non semplicemente programmare, e l'utilizzo degli specifici strumenti software, anche se semplifica alcune fasi del progetto, richiede che successivamente il sistema venga compilato a livello RTL cosa che richiede tempo e attente verifiche a posteriori. Le tecniche di programmazione della Fpga e delle Pld sono strettamente dipendenti dal tipo di componente, ovvero dal tipo di interconnessione hardware tra le varie celle o porte logiche del dispositivo. Ad esempio, la tecnologia antifuse prevede che nel dispositivo vengano creati dei collegamenti a bassa resistenza quando si applica una tensione elevata a determinati percorsi del segnale; in questo caso, una volta programmato il dispositivo non può più essere modificato. In altri tipi di Fpga, è presente una serie di celle di memoria Sram che abilita o disabilita determinate connessioni; questa soluzione richiede più transistor, ma è interamente riprogrammabile. In altri casi ancora si utilizzano Eprom, Eeprom, o memorie flash per programmare la Fpga.
L'approccio più comune per tradurre un progetto in un circuito che può essere implementato dalle connessioni dei blocchi della logica programmabile è utilizzare un linguaggio di descrizione hardware, tipicamente Verilog o Vhdl per descrivere le funzioni o lo topologia del circuito, lasciando la successiva implementazione nelle Fpga (con tutte le fasi di partizionamento, piazzamento, sbroglio dei collegamenti e collaudo finale) agli strumenti software predisposti dai fornitori dei dispositivi. In pratica una compilazione a livello RTL che richiede anche un tempo non trascurabile. Una semplificazione sarebbe aumentare il livello di astrazione della descrizione iniziale di progetto, magari in linguaggio C o C++ anziché in Vhdl o in Verilog. Idea concettualmente semplice ma non indenne da errori e complicazioni quando si tratta di tradurla in pratica, per cui spesso si adotta un approccio intermedio in cui sia Vhdl/Verilog che C++ vengono utilizzati congiuntamente insieme a blocchi Ip preconfigurati. In effetti, all'aumentare della complessità dei dispositivi, era logico pensare di utilizzare blocchi modulari di codice Hdl opportunamente combinati per descrivere più applicazioni diverse; questi blocchi, detti appunto blocchi IP, permettono di riutilizzare elementi circuitali anche molto complessi, ad esempio Uart, interfacce Ethernet, codec e anche interi microcontrollori. I blocchi IP possono essere predisposti dagli stessi costruttori di Fpga, che a volte li integrano direttamente nei dispositivi (hard IP) oppure essere offerti da venditori terzi, che richiedono il pagamento di una licenza. I blocchi Ip embedded sono utilissimi nell'ottimizzare lo sfruttamento dello spazio sul die e nel ridurre al minimo la dissipazione di potenza (oltre ad avere il vantaggio di non comportare un costo aggiuntivo per la relativa licenza ) ma se il progettista non li sfrutta diventano semplicemente spazio sprecato; quindi i produttori di Fpga li usano in maniera prudente e solo quando hanno molte applicazioni per ambiti diversificati. I più comuni blocchi Ip embedded sono tipicamente i processori Pci Express, unità Mac, Dram controller; l'utilizzo di blocchi IP di terze parti, eventualmente anche integrati come hard IP embedded è ormai una consuetudine nella realizzazione di applicazioni 100 GbE e Interlaken, anche perché spesso i blocchi IP per le applicazioni emergenti sono disponibili in versione Fpga prima che in qualsiasi altra versione su silicio. nelle future generazioni di Fpga vedremo probabilmente anche interfacce Usb e intere Cpu tipo Arm o Mips. In altre parole vedranno la luce dispositivi che cercheranno di ottimizzare prestazioni e consumi magari penalizzando leggermente la flessibilità applicativa; forse potremo chiamarle Application Specific Fpga.
Evoluzione nelle tecnologie di processo
L'evoluzione delle tecnologie di processo è, come sempre nel caso dei circuiti integrati, la chiave per realizzare logiche programmabili che offrano maggiori prestazioni e velocità e minori consumi e dissipazione. Nel 2010 i leader di mercato, Altera e Xilinx avranno a disposizione, per la fornitura su vasta scala, i dispositivi realizzati con processi 40 nm , dispositivi che per altro sono già stati annunciati lo scorso anno. Il passo successivo sarà lo sfruttamento di processi a 28 nm, già allo studio in Altera e Xilinx, e i cui prototipi potrebbero vedere la luce sempre nel corso del 2010; Altera per la produzione utilizza gli stabilimenti Tsmc e, secondo quanto affermato dalla foundry taiwanese, rispetto alla tecnologia 40 nm la riduzione delle geometrie di integrazione dovrebbe permettere di raddoppiare la densità circuitale e ridurre la dissipazione di una percentuale compresa tra il 30% e il 50%. Miglioramenti dello stesso ordine di grandezza vengono dichiarati anche dalle altre foundry che lavorano su questo passaggio di processo, ad esempio Ibm, STMicroelectronics, Samsung, Chartered. Generalmente i processi tecnologici di avanguardia prevedono due diverse soluzioni, una che privilegia le prestazioni ed un'altra più attenta ai consumi; è ipotizzabile che le prime Fpga in tecnologia 28 nm proposte dai costruttori leader privilegino le prestazioni mentre altri produttori che si dedicano a soluzioni specializzate (ad esempio Lattice) potrebbero optare per una tecnologia che offra ridotti consumi. Nel 2011 parleremo probabilmente di Fpga in geometrie 22 nm e di altri vantaggi dovuti alla ulteriore riduzione delle dimensioni di cella, ma questa nuova generazione di dispositivi potrebbe però vedere la luce solo dopo un periodo di tempo relativamente lungo, cioè non prima del 2013. Purtroppo maggiore integrazione significa più transistor a parità di area del chip e maggiore velocità di commutazione, ma anche maggiori consumi e maggior dissipazione; il rapporto causa-effetto tra queste caratteristiche è inevitabile e poiché la dissipazione è data da una componente attiva o dinamica, dovuta ai circuiti che commutano e che trasmettono o elaborano il segnale e da una componente statica (i circuiti in condizioni di standby) per le Fpga il problema è ancora più pressante, visto che ogni componente comprende un numero più o meno grande di circuiti (semplici porte logiche o intere unità aritmetico-logiche) che sono del tutto inutilizzati ma che comunque consumano potenza. In questo caso la soluzione proposta dai fornitori di logiche programmabili consiste nell'aumentare l'efficienza di sfruttamento delle risorse hardware e anche nell'utilizzare varie tecniche di power management. Ad esempio alcuni costruttori permettono di ridurre il numero di cicli di clock per le risorse hardware non direttamente utilizzate dal circuito implementato, oppure impiegano una combinazione di circuiti più veloci e meno veloci per ottenere le prestazioni desiderate ma senza aumentare troppo i consumi oppure ancora riducono di alimentazione del dispositivo. La componente statica della potenza dissipata, essendo principalmente funzione della corrente di leakage di giunzione è invece una caratteristica intrinseca della cella Cmos e dipende quasi esclusivamente dalla tecnologia di processo utilizzata: più transistor o porte logiche ci sono nel dispositivo e più è la potenza dissipata; per risparmiare bisognerebbe ridurre il numero delle porte logiche ma questo diminuisce la flessibilità e le possibili applicazioni; perché invece non utilizzare al meglio quelli presenti, cioè aumentare la velocità di funzionamento e realizzare le stesse funzioni con meno porte logiche? La maggiore velocità aumenta la dissipazione ma complessivamente si usano meno porte e quindi si riduce la potenza globale: per ottenere questo risultato sarebbe necessaria una architettura di interconnessioni con una maggiore granularità e molto veloce. Achronix è uno dei costruttori che sta esplorando questa via, in particolare aumentando la velocità di trasferimento dei segnali nella rete di interconnessione dei propri dispositivi .
Esempi applicativi
Le applicazioni più recenti del settore telecom/datacom, come il già citato 100G Ethernet oppure OTU4 hanno bisogno di transceiver in grado di gestire fino a 10 Gbits/s. Altera è stata la prima a proporre una Fpga che integra un transceiver da 11 Gbit/s. Achronix propone un modello con transceiver a 10 Gbit/s e Xilinx ha annunciato che una funzione analoga sarà disponibile nella famiglia Virtex. Uno dei settori applicativi più interessanti per le Fpga è però quello dei prodotti embedded: un numero crescente di aziende sfrutta la tecnologia Fpga per realizzare prodotti anche molto complessi che devono durare a lungo. Ad esempio Quantum3D garantisce la non obsolescenza per le proprie applicazioni avioniche offrendo una scheda PCI XMC (express mezzanine card) Sentiris AV1 che integra un core basato su Fpga per l'elaborazione video e grafica, anziché utilizzare una tradizionale Gpu. Questa soluzione è utilizzabile anche per applicazioni nel settore medicale e le capacità di elaborazione video permettono di realizzare la grafica tridimensionale di cruscotti e strumentazione. L'intrinseca predisposizione all'elaborazione parallela. rende le Fpga molto adatte alle applicazioni multicanale, come software radio e acquisizione dati. Pentek ha recentemente annunciato un modulo software radio per il monitoraggio di segnali di telefonia cellulare Gsm in cui quattro convertitori AD da 200 MHz a 16 bit forniscono i dati da elaborare a un core Fpga-IP che dispone di 256 canali Ddc (Digital downconversion) in banchi di 64 configurabili per banda. In questo modo è possibile catturare simultaneamente centinaia di segnali indipendentemente dal tipo di modulazione, dall'ampiezza di banda o dalla sorgente. Anche le organizzazioni impegnate nella definizione degli standard industriali stanno adottando nuove specifiche basate sull'utilizzo delle Fpga. La definizione dello standard 57.1 Fmc (Fpga-mezzanine-card) certificato poco tempo fa dalla Vita (VMEbus International Trade Association) semplifica le modalità di integrazione di dispositivi Fpga in applicazioni embedded, in quanto definisce esattamente i dispositivi di I/O presenti su una scheda standard mezzanine da collegare a una Fpga sulla scheda principale in modo che la Fpga controlli direttamente il dispositivo. Il modulo Fmc ha dimensioni circa uguali alla metà di un modulo standard Pmc. Da non dimenticare però che, nelle applicazioni realizzate con logiche programmabile Pld o Fpga è indispensabile prendere sempre le opportune precauzioni per proteggere il progetto, ovvero garantire la sicurezza della proprietà intellettuale di ciò che si è realizzato. Alcuni tipi di Fpga, in particolare quelle che prevedono l'utilizzo di celle di memoria Sram per caricare la configurazione del dispositivo sono particolarmente vulnerabili ai tentativi di copia e la diffusione sul mercato di dispositivi contraffatti è ormai ben nota. Per difendere dal furto degli IP proprietari i costruttori di Fpga utilizzano sia tecniche di programmazione non volatili sia l'integrazione hardware nei dispositivi di numeri di codice che permettono la tracciabilità del singolo componente. Una soluzione più innovativa è stata proposta da Altera, che propone una famiglia di dispositivi (HardCopy Asic) con caratteristiche analoghe a quelle della famiglia Stratix, con cui è compatibile pin-to-pin pur offrendo un risparmio di area e minori consumi. Gli HardCopy sono preprogrammati di fabbrica e, oltre a non essere copiabili, permettono anche di eliminare il costo dei dispositivi di boot esterni.