Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

16
voti

FPGA

Con questa articolo si vuole dare una breve descrizione dell'architettura interna di una FPGA. Cercare di capire quali sono i pregi e i difetti di questo strumento digitale anche attraverso alcuni esempi veramente banali, che secondo me, sono molto utili alla comprensione del problema. Oltre a questo verrà descritta la miniboard che ho a disposizione per eventuali prove.

Cos’è una FPGA

L'FPGA (Field Programmable Gate Array) è un circuito integrato che contiene un vasto numero di blocchi logici configurabili (Configurable Logic Blocks, CLB) al suo interno. Questi blocchi logici possono essere interconnessi tra di loro al fine di sintetizzare qualsivoglia circuito logico mediante linguaggi di descrizione dell’hardware (Hardware Description Language, HDL) come il VHDL o il Verilog o anche attraverso un approccio "schematic-entry", in pratica attraverso l'utilizzo di un CAD. Questi dispositivi possono essere programmati (e/o riprogrammati) sul campo un numero infinite (teoricamente) di volte.

Vengono utilizzati principalmente per lo sviluppo di rapidi prototipi, ad esempio per lo sviluppo di microprocessori. Alcune caratteristiche di queste FPGA:

  • hanno un elevatissimo numero di CLB migliaia;
  • è solitamente presente della RAM al suo interno;
  • hanno alcuni blocchi destinatati all’I/O.
Fig. 1 - Struttura interna di una FPGA

Fig. 1 - Struttura interna di una FPGA

Come si può notare dalla figura 1, la struttura interna di una FPGA è costituita da dei blocchi I/O che permettono la gestione degli ingressi e delle uscite in formato esclusivamente digitale, e poi si può notare la fitta rete di interconnessioni tra le varie celle logiche. Molte celle logiche, al loro interno, possono contenere elementi di memoria quali potrebbero essere ad esempio dei semplici flip-flop.

Un problema che affligge questi SOPC (System On-a-Programmable-Chip) è rappresentato dai ritardi intrinseci dei segnali interni all’FPGA. Mi spiego meglio con un esempio: supponiamo di programmare l’FPGA in modo tale da fargli fare un semplice operatore logico AND; abbiamo quindi bisogno di almeno due segnali di ingresso e uno di uscita. Supponiamo che i due ingressi siamo il PIN1 e quello diametralmente opposto il PIN100 ad esempio. L’uscita la impostiamo sul PIN120. Una volta scritto il programma l’FPGA si configura nel modo mostrato in fig. 1.1

Guardando la figura 1.1 si nota fin da subito che il percorso che compie il segnale che entra nel PIN1 è molto più lungo del segnale che entra dal PIN100. Tenete presente che di CLB ce ne sono migliaia (possono arrivare tranquillamente a 60000 celle logiche e anche molte di più). Questo comporta ad avere un errore che cercherò di descrivervi con questo grafico.

Con riferimento alla figura 1.2 si osserva che se il Pin1 e il pin100 sono a livello logico basso (0) allora il Pin120 anche è basso, ma si osserva che tra gli istanti di tempo t1 e t2 dove sia il pin1 e il pin100 sono a livello logico alto il pin 120, cioè l’uscita, non è alta: questo è un errore! E’ causato dal fatto che il segnale Pin1 ha un ritardo, nel senso che impiega più tempo ad arrivare alla CLB, configurato come AND.

Ovviamente il programmatore, che è intelligente, non va a programmare la cella logica CLB rappresentata in fig. 1.1, ma va a programmare una cella logica che si trova in una posizione intermedia tra i due ingressi, in modo tale da minimizzare i tempi di propagazione interni dei due segnali di ingresso.

La piccola evaluation board Cyclone II

Ho a disposizione una piccola evaluation board con la quale mi diverto, a livello hobbistico, a costruire dei piccoli circuiti logici. La scheda è quella mostrata in fig. 2 equipaggiata con una FPGA Altera Cyclone II EP2C5T144C8N e con una piccola EEPROM (EPCS4) destinata al mantenimento del codice interno alla FPGA una volta tolta l’alimentazione della scheda.

Fig. 2 - Mini Evaluation Board Cyclone II

Fig. 2 - Mini Evaluation Board Cyclone II

Questa piccola scheda acquistabile su ebay al prezzo di circa 30€ (compreso del programmatore USB-Blaster) è molto ben strutturata. Infatti vedendo lo schematico [1] si nota che sono presenti due regolatori di tensione, uno per generare i 3.3 V (VCCIO1,VCCIO2,ecc.) necessari all’alimentazione dei diversi banchi di cui è costituita questa FPGA, e un altro regolatore al fine di avere 1.2 V (VCCINT) per l’alimentazione dei circuiti interni della FPGA. Tutto questo in accordo con le direttive imposte dalla casa costruttrice del chip Altera [2]. Inoltre è presente un piccolo Led che ci segnala la presenza dell’alimentazione.

Fig. 3 - Regolatori di tensione destinati all’alimentazione della FPGA

Fig. 3 - Regolatori di tensione destinati all’alimentazione della FPGA

Oltre a questi elementi, ci sono anche a nostra disposizione i due stadi per configurare questa FPGA. In particolare abbiamo due modi per configurarla

  • JTAG: il programma rimane in memoria fintanto che l’FPGA è alimentata;
  • AS (Active Serial): il programma viene passato all’intenro di una memoria EPCS4 e una volta che l’alimentazione ritorna l’EPCS4 programma in automatico l’FPGA.

Questi stadi sono mostrati qui di seguito

Fig. 4 - Stadi per la configurazione della FPGA

Fig. 4 - Stadi per la configurazione della FPGA

Infine abbiamo un clock a 50 MHz a nostra disposizione nel PIN17 della nostra FPGA.

Fig. 5 - Oscillatore a 50Mhz

Fig. 5 - Oscillatore a 50Mhz

Oltre a questi componenti sulla piccola schedina ci sono a disposizione 3 piccoli LED ed un tasto. Spendo due parole per questo tasto in quanto è semplicemente collegato tra massa e il PIN144 (l’ultimo) della mia scheda. Quindi questo tasto, quando è premuto, il PIN144, che andremo a configurarlo come ingresso, vedo un bit basso, mentre quando il tasto non è premuto, sempre il medesimo pin vede alta impedenza.

Fig. 6 - Pulsante Push1

Fig. 6 - Pulsante Push1

Ovviamente ho tutti i pin destinati all’I/O a mia disposizione a parte quelli già usati all’interno della scheda. Ora che abbiamo un quadro generale della scheda che ho a disposizione passiamo alla programmazione!

Link Esterni

  • [1] PDF dello schematico della scheda
  • [2] definizione dei PIN di input e Output della FPGA by Altera
  • [3] Il disegno con Fidocadj
10

Commenti e note

Inserisci un commento

di ,

ciao flz47655, e grazie per la risposta... visto che sono un neofita potresti darmi alcuni link magari di ebay dove acquistare un alimentatore adatto? dove dovrei inserire quelle impostazioni?

Rispondi

di ,

@cubone: servono entrambi, attenzione che devi impostare gli "unused pin" a "as input tri-stated" nella finestra "device and pin options" altrimenti mandi in corto la scheda, guarda lo schema della scheda Ciao

Rispondi

di ,

Ciao, ho comprato la tua stessa scheda (Cyclone II EP2C5T144C8N)... mi chiedevo se per programmarla fosse necessario un cavo d'alimentazione da 5v o se bastasse l'usb blaster.

Rispondi

di ,

Qualcuno di voi sa programmare in ambiente ISE le Xilinx in particolare la Spartan 6? ...Grazie

Rispondi

di ,

Ciao Giancarlo, Trovo molto interessante il mondo delle FPGA, ho acquistato da Digikey la scheda DE0-Nano per le prime prove e ho trovato un interessante forum dedicato alle FPGA in italiano: http://www.delucagiovanni.com/public/phpbb3/index.php

Rispondi

di ,

@Vincenzo37: principalmente dal percorso che compie.

Rispondi

di ,

PIN1

Rispondi

di ,

ciao Giancarlo, tu scrivi : che il percorso che compie il segnale che entra nel PIN1 è molto più lungo del segnale che entra dal PIN100. mi chiedo ma l'errore è legato alla differente lunghezza del percorso dei 2 segnali o dai ritardi che ogni cella ( o flip flop ) introduce sul percorso del PIN1 ?

Rispondi

di ,

Se non erro FPGA fa molto rima con National Instruments e il loro LabView, giusto?! Vado a memoria. Interessante, non avevo mai approfondito quest'architettura.

Rispondi

di ,

Non so bene il perchè, ma l'argomento mi incurioscisce ed ho la sensazione che prima o poi lo affronterò. Spero, quindi, che tu possa proseguire. Per ora grazie!

Rispondi

Inserisci un commento

Per inserire commenti è necessario iscriversi ad ElectroYou. Se sei già iscritto, effettua il login.

Tag Cloud

PDF by PrinceXML