Le prime logiche programmabili nate negli anni ‘80 offrivano la possibilità di manipolare migliaia di gate di logica programmabile nelle tecnologie allora presenti. Questi dispositivi si indirizzavano ai progettisti che ambivano ad integrazioni logiche e volevano evitare i rischi connessi alle rigidità dei gate array ,ove potevano farne a meno. Inoltre,il tempo di ingresso nel mercato, dalla fase di stesura delle specifiche, era divenuto un requisito critico per la competitività sul mercato stesso.
Sfruttando la riduzione del ciclo progettuale che ne scaturiva con questo metodo di lavoro, i vari progettisti riuscivano ad introdurre nuovi prodotti sempre più rapidamente. Inizialmente questi dispositivi venivano chiamati High Density PLD ed erano considerate un’estensione logica delle logiche programmabili allora presenti (PAL e GAL). Essi venivano utilizzati in modo simile, cioè integrazione di logica sparsa (glue logic) precedentemente implementata usando circuiti integrati TTL e sostituzione di gate array di bassa densità.
Pian piano con l'avanzare del tempo e con l’introduzione di nuove famiglie di componenti, nel tentativo di distinguere le differenti architetture di PLD, le varie case produttrici proposero il termine Field Programmable Gate Array (FPGA). Attualmente il processo tecnologico a 28nm ha permesso alle grosse case produttrici come ad esempio la Xilinx, di produrre FPGA ad elevatissimo numero di celle logiche programmabili: ad esempio l'ultimo arrivato in casa Xilinx è il Virtex 7 il quale presenta ben 2 milioni di celle logiche, 8 porte PCIe GEN3 e la possibilità di disporre di 1200 pin di I/O..e molto altro!
Struttura interna delle FPGA:
Ogni FPGA viene realizzata attraverso una matrice di blocchi logichi configurabili o Configurable Logic Blocks (CLB), i quali vengono connessi attraverso delle opportune Interconnessioni (piste metalliche) sia tra di loro che con pin di I/O per comunicare con segnali esterni all'FPGA. Analizziamo prima i CLB: ogni elemento logico della matrice viene interconnesso a quelli circostanti tramite due canali: uno verticale e uno orizzontale. Nei punti in cui il canale orizzontale incrocia quello verticale, vengono posizionati degli elementi contenenti la logica programmabile necessaria a gestire le connessioni: gli switch modules.
Quindi grazie a tali elementi, è possibile realizzare un certo numero (finito) di funzioni logiche e il vantaggio sta tutto nel poter riprogrammare opportunamente le connessioni tra le varie CLB in modo tale da cambiare la funzione logica. Il limite ovviamente è dovuto al fatto che i CLB e i pin di I/O sono in numero finito quindi la funzione o le funzioni avranno un nummero di operazioni finito (ad esempio al più non possiamo realizzare più di 10 funzioni che fanno quattro somme tipo Y=A+B+C+D ecc..).
Per non appesantire troppo l'articolo descriviamo brevemente la struttura di un CLB: Ogni CLB è costituito a sua volta da un altro elemento logico di base chiamato BLE. Il BLE è composto a sua volta da elementi logici combinatori e sequenziali, in pratica una Look Up Table(a 4 ingressi nell'esempio in figura) e un flip flop D.
Il motivo per il quale si utilizza questa tecnica di raggruppare le LUT in BLE e poi in CLB è dovuto essenzialmente al fatto che facendo in questo modo si riducono i tempi di ritardo medi dovuti alla propagazione del segnale nelle varie interconnessioni. Le interconnessioni: Come già detto in precedenza i vari elementi logici sono connessi tra loro tramite due canali: ciascuno di questi due canali viene realizzato tramite delle piste metalliche le quali vengono anche dette "wire segment": ogni interconnessione si misura a seconda di quante CLB essa attraversa.
In realtà ci sono diverse tipologie di segment wire a seconda della loro lunghezza come mostrato in figura:
I programmi che eseguono l'operazione di routing delle CLB assegnano delle opportune funzioni di costo a tutte le possibili interconnessioni individuate, in modo da ridurre i tempi di ritardo e minimizzare i cammini di interconnessione.
Anche io mi accodo a quanto scritto da Mingele.
Le FPGA stanno per diventare il tema fondamentale di uno dei corsi che sto seguendo all’università e onestamente, anche se ne fa un gran parlare da tanto in ambito universitario, sembra quasi di parlare de Santo Graal.
Mi riesce tuttavia un pò dificile unire i pezzi di tutte le nozioni che ho appreso finora, forse perchè per il momento non ne ho ancora visto uno… Purtropo io ho una mente che ha davvero bisogno del contatto diretto, dell’esperienza sul campo per poter apprendere.
Ad ogni modo ci sono alcune domande che vorrei porre, tanto per capire qualcosino di più.
Innanzitutto, la mia prima domanda è sull’architettura. Si tratta d una unica soluzione che sostanzia più e più oggetti oppure si trata di diverso tipo di soluzioni circuitali versatili e tra le quali scegliere?
Mi spiego, credo che il dubbio mi nasca proprio da quanto dicevamo sul concorrente di Arduino proposto dalla Microsoft: personalizzabilità e rispondenza alle proprie esigenze sono soluzioni che vanno in netta opposizione al fatto che la prduzione sia su larga scala.
Ora, però, sentire quanto e come sono diffusi questi dispositivi mi fa chiedere: ma a livello di architettura, di cosa parliamo?
Ad un certo punto si dice: “il processo tecnologico è a 28nm”. Ma con quale tecnologie, materiali e macchinari si realizza?
Visto che, a quanto mi pare di aver capito, si tratta non solo d un dispositivo molto personalizzabile ma anche molto veloce, le pista di collegamento sono linee parallele, giusto?
Io sono abituato a pensare che il seriale crei colli di bottiglia. È così anche qui?
Insomma, riprendo quanto detto dal commento che mi ha preceduto, ovvero “Le potenzialità di questi dispositivi sembrano davvero tendere all’infinito ed è grazie a tali dispositivi che ,secondo me, abbiamo a disposizione prodotti sempre piu sofisticati ma al tempo stesso con dimensioni ridotte.
La cosa che al momento mi lascia qualche dubbio sono i costi legati allo sviluppo,mi riferisco a strumenti software e alle schede di sviluppo”, per chiedere dettagli circa queste considerazioni.
Che tipo di costi ha la produzione di queste schede? Come viene programmata? Si usa solo il VHDL o esistono altre soluzioni?
Chiudo dicendo: Gran bell’articolo! 😀
Per me, lo ribadisco, è una grande opportunità per approfondire un argomento che, finora, mi par di capire abbia risvolti e applicazioni tanto in special modo in campo industriale ma più in generale un pò dappertutto.
Proprio in questo periodo sto preparando un esame basato su progetti con fpga,e quindi sto scoprendo questo nuovo, e affascinante, mondo.Le potenzialità di questi dispositivi sembrano davvero tendere all’infinito ed è grazie a tali dispositivi che ,secondo me, abbiamo a disposizione prodotti sempre piu sofisticati ma al tempo stesso con dimensioni ridotte.
La cosa che al momento mi lascia qualche dubbio sono i costi legati allo sviluppo,mi riferisco a strumenti software e alle schede di sviluppo…comunque bell’articolo!
Allora cerco di rispondere alle tue domande in base alle cose che credo di aver capito,poi se qualcuno con piu esperienza possa chiarire ulteriormente le cone è ben accetto.
Per quanto riguarda l’architettura dei dispositivi,l’elemento fondamentale è la cella logica,o Logic Element.La struttura interna di queste celle varia da costruttore a costruttore ma in grandi linee è possibile classificarle in celle basate su multiplexer oppure su tabelle di verità,LUT(Look Up Table).La disposizione di tali elementi all’interno del dispositivo ne determina l’architettura,che ancora una volta varia al variare del produttore,e in grandi linee ne possiamo distinguere tre tipi:
SIMMETRICA:le celle logiche sono posizionate in modo da formare una matrice e tra una cella e l’altra vi sono le interconnessioni;
ROW-BASED:le celle logiche sono disposte in modo da formare delle righe,e le interconnessioni sono poste tra una riga e la successiva;
GERARCHIGA:le celle sono dispooste all’interno di blocchi più complessi,in modo che le interconnessioni avvengano tra i vari blocchi;
Andando avanti,quando si dice “il processo tecnologico è a 28 nm” ci si riferisce alla lunghezza della gate dei singoli transistori,di solito MOSFET,che servono per implementare i multiplexer o le LUT;i transistor sono realizzati in silicio e i dispositivi possono essere costruiti solo in particolari fabbriche,dette foundry,con macchinari molto sofisticati.
Infine quando parliamo di programmazione di questi dispositivi ci riferiamo proprio alle interconnessioni,cioè noi decidiamo il modo di connettere le varie celle logiche,e quello che ne viene fuori dai vari collegamenti è quello che ci serve.Tutto ciò avviene mediante linguaggi di tipo descrizione hardware,HDL=hardware description language,come ad esempio il VHDL oppure il Verilog,almeno questi sono quelli che conosco.
Tirando le somme in base alla descrizione che forniamo tramite software,e sono quelli che costano molto, noi possiamo fare della nostra FPGA un decoder,un contatore,un multiplexer,un sommatore,un moltiplicatore(o anche piu cose contemporaneamente)….insomma chi piu ne ha piu ne mettà….
Spero di esserti stato di aiuto e soprattutto preciso poiche non avendo ancora fatto l’esame nessuno ancora ha giudicato la mia conoscenza in materia.
Mi sa che chi confonde un po’ le idee con i microcontrollori,
Le FPGA non hanno un’architettura prestabilito dal fabbricante marines prestabilita via software con il linguaggio VHDL o Verilog,
Questi due linguaggi non sono linguaggi di programmazione delle proprie ma servono a rappresentare le connessioni che saranno effettuate all’interno FPGA.
Faccio l’esempio più concreto, un FPGA se ci metto il software A, si comporterà come un dispositivo che emula il funzionamento PIC con tutte le sue caratteristiche di architettura e è il funzionamento interno logico suo, dopo cambio software B e questa volta questo mi emula diffusamente interno di un microprocessore ARM è anche qui con tutte le sue caratteristiche di funzione, per di più mi potrei scrivere un piccolo programma VHDL che crea all’interno della mia FPGA un circuito è formato da solo porte logiche.
conclusioni FPGA può essere cosa uno desidera non basta scrivere il giusto programma.
Per cosa riguarda la tecnologia di costruzione allora attuale 28 nanometri viene usato in molte GPU delle schede grafiche.
http://www.tomshw.it/cont/news/gpu-amd-a-28nm-c-e-southern-islands-nei-driver/32342/1.html
Attualmente il processo e i macchinari necessari per applicare una tale tecnologia rimane nell’ambito del segreto industriale, fino a 10 o 15 anni fa era quasi impossibile perfino sapere come veniva fabbricato wafer silicio ma con il tempo il processo diventato di dominio pubblico
Per cosa ti riferisci al parallelo o un collegamento seriale in questo caso sei tu che scegli quando programmi FPGA, se l’interno del tuo programma decide di lavorare con tutti BUS paralleli o serie in fin dei conti non cambia nulla per cosa riguarda FPGA.
Con un collegamento seriale non si ottiene per forza una coda di bottiglia,
basta pensare ai dischi fissi che sono tutti collegati ormai con SATA che un collegamento seriale alta velocità, o le fibre ottiche dove i dati vengono modulati con tecniche di tipo seriali.
Per cosa riguarda il sì di sviluppo per le FPGA si trovano tranquillamente a prezzi abbordabili anche a partire da 30 a € 40.
ne abbiamo già parlato diverse volte sul forum
Infine per cosa riguarda la programmazione si usa il protocollo JTAG come inoltre si usa con i microcontrollori della famiglia ATmr i famosi AVR.
Ma quest’interfaccia è piuttosto comune si usa in qualsiasi RAM o ROM e può essere usato anche per fare il deDUG, comunque io ho cominciato a programmare su questi oggettivi e mi sono sempre trovato molto bene.
questi vengono usati soprattutto per fare delle prove prima di realizzare un chip dedicato.
Così puoi provare quasi infinito senza dovere sborsare i soldi per la progettazione susul Silicio vede proprio.
Linguaggi di programmazione principalmente per FPGA sono tre VHDL, Verilog e sytemC che sono interamente compatibili tra di loro e possono essere tranquillamente mescolati anche nello stesso progetto.
spero di aver risolto un po’ di dubbi tuoi.
Con un mito del collo di bottiglia e della seriale
In realtà i colli di bottiglia non si formano sulle linee di trasmissione ma al momento che vengono smistati i dati ad esempio in un HUB o Switch.
E attualmente non esiste nessun sistema moderno che usa commissioni parallele soprattutto per il fatto che attualmente spesso si lavora anche 32 bit quindi sarebbe necessario 32 cavi o fibre ottiche.
L’unico luogo dove si usa ancora il parallelismo è nelle schede madre per le comunicazioni tra processore e RAM, e sempre di meno con PIC perché l’ultima generazione anche lui lavoro in serie
Ragazzi questo è soltanto il primo articoletto che sto estrapolando dalla mia tesi 🙂 se avete pazienza un altro Po vedrete il resto in cui mostrero un esempio di architettura interna di una delle prime foga della xilinx 😉
E poi magari ci dilunghiamo nello specifico …la tesi userà tale fpga come elemento x fare un acquisizione con adc e sensore ottico cmos …prossimamente Su questi schermi 🙂
Io mi sono sempre chiesto come diavolo fanno a mettere tutti quei componenti dentro un piccolo spazio, non sono mai riuscito a trovare informazioni in merito a questo argomento e tanto meno dei video che mostrino tutta l’operazione fatta per costruire un fpga o qualsiasi altro integrato .
Se magari qualcuno a qualche link da mettere in merito…
hahaha… più che vederti un video ti consiglierei di seguire un corso in cui si parla di SoC.. dove non solo si integra un processore ma anche altre cose…vedi ad esempio il SoC i.MX51 della freescale, multimedial processor, il quale al suo interno ha processore, coder HDMI ecc..!
Ovviamente il linguaggio che si usa è VHDL per quanto riguarda la parte digitale..e poi si integra con circuiti analogici creati a CMOS-level.. il tutto ovviamente mirato a creare un dispositivo mix-signal !!
Dai un occhio qui ad esempio…
http://twins.ee.nctu.edu.tw/courses/soclab_04/handout_pdf/01_SoC_Overview_and_ARM_Integrator.pdf
Non conosco qualcosa simile Arduino fatta da voi ma per me è stata molto utile per cominciare a mettermi nel mondo dell’ FPGA una scheda sperimentale con una FPGA, che mi ho comprato, via internet. In quel momento ho trovato in promozioni una scheda della ditta Altera (150 dollaro, adesso costa 200 dollaro, ma si trovano più semplice e quindi meno costose), ci sono anche di Xilinx, di Actel, ecc. Il software si scarica gratuitamente del sito ufficiale della ditta. Questo software ti permette programmare VHDL, fare la simulazione e generare il programma adatto per caricare sulla FPGA, solo con l’ interfaccia USB del computer alla scheda e primere start nella finestrina del software (JTAG mode). La scheda ha 16 LED, pushbuttons, both toggles, display a 7 segmenti, interfaccia USB, una porta seriale, memori Flash, SRAM, SDRAM, memory card connector, numerosi componenti di contorno, indispensabili per l’interfacciamento con il computer, ecc. Sarebbe molto interesante avere una scheda similare fatta da voi come l’Arduino!