Field Programmable Gate Array: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Riga 39:
==Dispositivi SRAM==
[[File:FPGA cell example.png|thumb|350 px|right|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|350 px|right|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]]
I dispositivi SRAM FPGA, le cui caratteristiche variano a seconda delle esigenze del produttore, si basano sull'elemento di memoria [[SRAM]], di tipo
volatile. L'importanza di questa particolare famiglia di dispositivi è dovuta al fatto che tali circuiti sono tra i più utilizzati nell'ambito degli esperimenti su satellite o sonda, oltre ad essere all'avanguardia nel settore delle tecnologie riprogrammabili integrate.
 
La struttura di una SRAM-FPGA può essere rappresentata come una matrice di blocchi logici configurabili, detti CLB (''Configurable Logic Blocks''), connessi fra loro attraverso interconnessioni programmabili detti PIP (''Programmable Interconnection Point''). I blocchi CLB sono composti solitamente da due o quattro celle logiche (''logic cell''), che eseguono le [[Funzione booleana|operazioni booleane]]. Ai margini di tale matrice vi sono i blocchi di ingresso/uscita, detti IOB (''Input Output Block''). I CLB realizzano le funzioni logiche, i PIP costituiscono l'insieme di interconnessioni attraverso le quali viene trasportato il segnale tra un CLB ed un altro, mentre gli IOB si occupano dell'interfacciamento del circuito con l'esterno. All'interno di tale matrice sono presenti anche altre tipologie di risorsa, come i DCM (''Digital Clock Manager''), che generano il segnale di [[clock]], la rete che trasporta il segnale di clock dai flip-flop ai CLB ed altre risorse di calcolo, come ad esempio le [[Unità aritmetica e logica|ALU]] (''Arithmetic Logic Unit''), e risorse di memoria distribuita. Ciascuno di questi elementi costitutivi ha un modello di funzionamento specifico, che riveste notevole importanza nella comprensione del corretto funzionamento del dispositivo.
 
LaI matrice diblocchi CLB èsono unocomposti deisolitamente da due costituentio fondamentaliquattro dicelle unlogiche (''logic FPGAcell''), eche permetteeseguono alle dispositivo[[Funzione dibooleana|operazioni realizzarebooleane]]. leOgni funzionilogic logiche. Un CLBcell è un blocco logico complesso solitamente compostocomposta 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 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.
 
La progettazione del circuito implementato sull'FPGA comincia solitamente con la scrittura della funzione logica mediante l'utilizzo di linguaggi [[Hardware description language|HDL]] (''Hardware Description Language''), come [[Verilog]] e [[VHDL]] (VHSIC HDL, o ''Very High Speed
Integrated Circuit HDL''). Successivamente un compilatore, o più frequentemente un sintetizzatore, converte il codice HDL in una descrizione a livello di porte logiche, indipendente dalle caratteristiche dell'FPGA che si vuole utilizzare: tale descrizione è contenuta in un file detto ''netlist''. La realizzazione del circuito avviene mediante uno specifico software, che attraverso alcuni passaggi assegna le risorse fisiche disponibili stabilendo la posizione nell'FPGA della logica e delle interconnessioni.
 
===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, che può essere configurato come input, output, bi-direzionale o tri-state. Posizionati lungo il perimetro della matrice di CLB, gli IOB della famiglia Virtex sono composti da flip-flop dedicati alla sincronizzazione dei dati, da multiplexer che gestiscono i segnali in modalità DDR (''Double Data Rate'') e da buffer per la gestione dei diversi standard logici.
I buffer permettono inoltre di controllare la rapidità di commutazione del segnale, detta slew rate, per comunicazioni in alta frequenza con i dispositivi esterni, mentre il buffer in ingresso è a soglia programmabile per consentire l'interfacciamento del dispositivo FPGA con diversi standard logici quali [[TTL]], CMOS o PCI. Sono inoltre presenti delle resistenze di pull-up/pull-down che permettono di caratterizzare lo stato del piedino nelle situazioni di alta impedenza.
 
===Linee di interconnessione===
Le linee di interconnessione hanno invece il compito di mettere in comunicazione le diverse risorse del dispositivo. Si possono distinguere due tipi di interconnessione: le linee fisse e le matrici di scambio, dette anche ''switch matrix''. Le linee fisse si dividono in linee "corte" e linee "lunghe": le linee "corte" sono interconnessioni che connettono CLB adiacenti, minimizzando il ritardo del segnale; le linee "lunghe" consentono invece di mettere in comunicazione risorse fra loro distanti 6 CLB tramite percorsi non configurabili, che non attraversano le matrici di scambio e che sono pertanto caratterizzati dal non introdurre ritardi significativi. Le matrici di scambio, infine, sono reti di pass-transistor programmabili e comunicanti. In un dispositivo SRAM-FPGA le linee di interconnessione sono fisse, e ciò che viene programmato sono le connessioni fra linee diverse: la maggior parte delle interconnessioni avvengono fra due lati diversi delle matrici di scambio, e sono abilitate da pass-transistor.
 
==Note==