Field Programmable Gate Array: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
template citazione; fix formato data; spostato template lingua all'interno di template cita |
m Ritocchi per migliorare la proprietà di linguaggio. |
||
Riga 2:
In [[elettronica digitale]], un dispositivo '''Field Programmable Gate Array''', solitamente abbreviato in '''FPGA''', è un [[circuito integrato]] le cui funzionalità sono programmabili via [[software]]. Tali dispositivi consentono l'implementazione di [[Funzione booleana|funzioni logiche]] anche molto complesse, e sono caratterizzati da un'elevata [[scalabilità]]. Questo tipo di tecnologia ha assunto un ruolo sempre più importante nell'elettronica industriale così come nella [[ricerca scientifica]]. Grazie al continuo progredire delle tecniche di miniaturizzazione, le capacità di tali dispositivi sono aumentate enormemente nel corso di due soli decenni, durante i quali si è passati da poche migliaia di [[Porta logica|porte logiche]] a qualche milione di porte logiche per singolo dispositivo FPGA.
Esistono diverse
I circuiti FPGA sono elementi che presentano caratteristiche intermedie rispetto ai dispositivi [[Application specific integrated circuit|ASIC]] (''Application Specific Integrated Circuit'') da un lato e a quelli con architettura [[Programmable Array Logic|PAL]] (''Programmable Array Logic'') dall'altro. L'uso di componenti FPGA comporta alcuni vantaggi rispetto agli ASIC: si tratta infatti di dispositivi standard la cui funzionalità da implementare non viene impostata dal produttore che quindi può produrre su larga scala a basso prezzo. La loro genericità li rende adatti a un gran numero di applicazioni come ''consumer'', comunicazioni, ''automotive'' eccetera. Essi sono programmati direttamente dall'utente finale, consentendo la diminuzione dei tempi di progettazione, di verifica mediante simulazioni e di prova sul campo dell'applicazione. Il grande vantaggio rispetto agli ASIC è che permettono di apportare eventuali modifiche o correggere errori semplicemente riprogrammando il dispositivo in qualsiasi momento. Per questo motivo sono utilizzati ampiamente nelle fasi di [[prototipizzazione]], in quanto eventuali errori possono essere risolti semplicemente riconfigurando il dispositivo. L'ambiente di progettazione è anche più ''[[user-friendly]]'' e di relativamente facile
Il costo di tali dispositivi è oggi in rapida diminuzione: ciò li rende sempre di più una valida alternativa alla tecnologia [[standard cell]]. Usualmente vengono programmati con linguaggi come il [[Verilog]] o il [[VHDL]], ma non bisogna dimenticare la modalità "schematic-entry", che consente un approccio veloce e semplificato a tale tecnologia
==Storia==
Line 35 ⟶ 34:
==Principali produttori==
[[Xilinx]] e [[Altera]] sono (2014) i due maggiori fabbricatori di FPGA.<ref>{{Cita web|nome=John |cognome=Edwards |sito=EDN |url=http://www.edn.com/article/CA6339519.html |titolo=No room for Second Place: Xilinx and Altera slug it out for supremacy in the changing PLD market |data=1º giugno 2006 |accesso=11 maggio 2012}}</ref> Le due aziende sono rivali "storiche", e insieme controllano oltre l'80% del mercato.<ref>{{Cita web|sito=Seeking Alpha|url=http://seekingalpha.com/article/85478-altera-and-xilinx-report-the-battle-continues|titolo= Altera and Xilinx Report: The Battle Continues|data=17 luglio 2008|anno=2008|accesso=13 novembre 2013}}</ref> Sia Xilinx
==Struttura==
[[File:FPGA cell example.png|thumb|upright=1.6|Descrizione semplificata di una ''logic cell'', in cui sono mostrate due [[Look-Up Table|LUT]] a 4 input, un [[full-adder]] (FA) e un [[flip-flop]] di tipo D.]]
[[Image:switch box.svg|thumb|upright=1.6|Le matrici di scambio (''switch matrix'') sono costituite da pass-transistor programmabili finalizzati all'instradamento dei segnali all'interno dell'organizzazione matriciale che costituisce l'FPGA]]
La struttura di una FPGA è in generale una matrice di blocchi logici configurabili, detti CLB (''Configurable Logic Blocks''), connessi fra loro attraverso interconnessioni programmabili. Ai margini di tale matrice vi sono i blocchi di ingresso/uscita, detti IOB (''Input Output Block''). I CLB realizzano le funzioni logiche, l'insieme di interconnessioni li mette in comunicazione, mentre gli IOB si occupano dell'interfacciamento del circuito con l'esterno. All'interno di tale matrice sono presenti anche altre
===Blocchi logici configurabili===
I blocchi CLB sono composti solitamente da due o quattro celle logiche (''logic cell''), che eseguono le [[Funzione booleana|operazioni booleane]]. Ogni logic cell è solitamente composta da una o più [[Look-Up Table|LUT]] (''Look Up Table'') programmabili. Le LUT sono utilizzate per implementare funzioni booleane generalizzate, e sono solitamente accompagnate da un registro. L'insieme di questi elementi è detto ''logic cell'', e rappresenta uno dei parametri più importanti nella valutazione della potenzialità di un FPGA.
I CLB possono essere connessi fra loro, permettendo così di realizzare funzioni booleane complesse. Le LUT sono composte da una memoria SRAM da 16 bit e da un multiplexer a 4 ingressi: una volta configurate possono generare qualsiasi funzione logica a quattro ingressi ciascuna. Vi sono anche le interconnessioni relative alla logica di set/reset e chip enable, ai segnali di clock, e ai segnali provenienti dalle altre slice del dispositivo. La scelta di utilizzare LUT a soli quattro ingressi risiede nel fatto che la complessità di una LUT cresce esponenzialmente all'aumentare del numero di ingressi, e risulta dunque poco gestibile. Raggruppare insieme alcune LUT in un CLB e di connetterle con una rete locale di interconnessioni
▲La scelta di utilizzare LUT a soli quattro ingressi risiede nel fatto che la complessità di una LUT cresce esponenzialmente all'aumentare del numero di ingressi, e risulta dunque poco gestibile. Raggruppare insieme alcune LUT in un CLB e di connetterle con una rete locale di interconnessioni fornisce infatti una maggiore velocità, dovuta al fatto che questa tipologia di interconnessione è più veloce di quella generale tra blocchi logici distinti. Il CLB è inoltre dimensionato al fine di ottimizzare il numero di connessioni locali e globali in funzione dell'area occupata: CLB troppo grandi implicano che l'area necessaria per le interconnessioni locali superi quella risparmiata grazie al raggruppamento delle LUT contenute in esse. Lungo il perimetro dei blocchi logici vi sono infine i pin di ingresso e uscita, collegati all'interconnessione adiacente tramite transistor programmabili.
===Blocchi di ingresso/uscita===
I blocchi di ingresso/uscita si occupano della gestione dei segnali da e verso l'esterno del FPGA attraverso il controllo dei pin del chip. Nei dispositivi Xilinx, per esempio, ogni IOB controlla un pin
===Linee di interconnessione===
|