FPGA Cyclone e Display LCD By Primok_V Bologna 2010

Stampa
( 0 Votes ) 
Valutazione attuale:  / 0
ScarsoOttimo 
Categoria principale: Elettronica Categoria: Microcontrollori
Data pubblicazione
Scritto da Primok_V Visite: 4710

FPGA Cyclone e Display LCD By Primok_V Bologna 2010

IL circuito che vi presento è costituito da una FPGA che trasmette,ciclicamente,  dei messaggi alfanumerici ad un display LCD ad essa interfacciato.In sintesi l’ FPGA non è altro che un chip digitale programmabile “Field Programmable Gate Array”che contiene al suo interno porte logiche AND,OR,FF,Multiplexer e interconnessioni.Quest’ultime sono appunto programmabili in modo da ottenere le funzioni logiche desiderate.




+

Altre immagini


+  

+

 

Schema Elettrico


+
 

N.B. Per una corretta visualizzazione del circuito elettrico , salvare l'immagine sul desktop e aprirla con il visualizzatore di immagini e fax per windows o altri visualizzatori a vostra disposizone.

FPGA Cyclone e Display LCD

IL circuito che vi presento è costituito da una FPGA che trasmette,ciclicamente,  dei messaggi alfanumerici ad un display LCD ad essa interfacciato.In sintesi l’ FPGA non è altro che un chip digitale programmabile “Field Programmable Gate Array”che contiene al suo interno porte logiche AND,OR,FF,Multiplexer e interconnessioni.Quest’ultime sono appunto programmabili in modo da ottenere le funzioni logiche desiderate.
La “capacita’ “ di una FPGA dipende dal numero di gates al suo interno . Le piu’ piccole sono dell’ordine di 10k gates, le piu’ grandi arrivano a 2M di gates ( ~ eq. 500.000 chip tipo 74LS00)
Un altro parametro importante è il numero di pin di Input/Output ,le piu’ piccole hanno circa 50 pins, le piu’ grandi possono arivare fino a 1000. Sono estremamente veloci con clock max di 200MHz.

Vantaggi:
1. La logica e’ riconfigurabile in qualsiasi momento
2. E’ possibile costruire la scheda ancor prima di aver
ben definito le sue funzioni.
3. Circuiti anche molto complessi possono essere
integrati in un solo circuito integrato.
Tutto quello che vi ho raccontato è sintetizzato nel seguente documento prelevato da internet.

FPGA DOC1  

 

ARCHITETTURA DI UN FPGA

L’array element è la parte preposta alla realizzazione della logica di utente. A seconda delle famiglie e del tipo di costruttore prende il nome di CLB (Configurable Logic Block), LAB (Logic Array Block), PFU (Programmable Function Unit). Ciascun
array element può essere visto come insieme di un certo numero di elementi base che prendono il nome di logic cell (LC) o logic element (LE). Questi elementi, a loro volta, sono composti da una LUT che può in certi casi essere usata come ram 16x1
e da un flip flop che in certi casi può essere sostituito da un latch. Tipicamente le LUT hanno 4 ingressi e realizzano quindi funzioni di quattro variabili. In certi casi è possibile estenderne il numero a nove utilizzando due LUT e uno o due multiplexer
previsti nell’architettura per tale scopo. L’uscita del segnale da una logic cell può avvenire escludendo o meno il flip flop, oppure pilotando un buffer tri-state interno (in quelle famiglie di componenti che ne prevedono l’esistenza).
Al fine di aumentare le prestazioni in termini di velocità, le LUT, possono essere collegate in modalità Carry Chain. In questa modalità una porzione di LUT genera la somma di due variabili, l’altra un segnale di riporto e produce un segnale di uscita e
uno di riporto che alimenterà la successiva LUT. Per aumentare invece le prestazioni in termini di ampio fan-in, le LUT possono essere collegate in Cascade Chain. In questo caso LUT adiacenti sono usate per calcolare porzioni di funzioni in parallelo e la catena viene usata per connettere i valori intermedi. Queste due modalità operative sono gestite dai programmi di sintesi e piazzamento in maniera automatica. Il clock e il segnale di reset hanno linee a basso skew ed alto fan-out ad essi
dedicati. In base al tipo di famiglia scelto è possibile avere due, quattro, otto linee di clock e fino a ventiquattro linee a basso skew da utilizzare sia come ulteriori linee di clock sia come reset o segnali di enable. Tipicamente i pin di clock sono I/O riservati e sono connessi direttamente a queste linee predefinite. Accanto ai numerosi array element che forniscono dei siti, occupabili o meno dalla logica di utente, gli FPGA possono avere degli elementi embedded di supporto quali
blocchi di memoria (single port o dual port), oscillatori interni, ampi decoder di segnali disposti alla periferia del chip, buffer tri-state interni e linee ad essi dedicati, pll interni per minimizzare lo skew sulle linee di clock nel caso di dispositivi di grosso taglio o aumentare la frequenza interna di 2 o 4 volte rispetto a quella fornita dall’esterno.Si è parlato di elementi di memoria. Da quanto detto è possibile in sintesi affermare che alcuni FPGA non hanno memoria disponibile, altri consentono di riciclare le LUT come elementi di memoria, e in questo caso si parla di memoria distribuita, altri hanno blocchi di memoria embedded ma di dimensioni rigide (tipicamente 2048x1,1024x2, 512x4, 256x8, 128x16 bit), altri hanno sia blocchi di memoria embedded
che memoria distribuita.I blocchi di I/O, programmabili da utente, forniscono l’interfaccia tra i pin esterni e la
logica interna. Ogni I/O controlla un pin e può essere configurato come input, output, porta bidirezionale. E’ possibile programmare le uscite, individualmente e dove la famiglia lo consente, sia in termini di slew rate, sia in termini di corrente di
uscita, sia in termini di livello logico (CMOS, TTL, LVCMOS, LVTTL), sia come open-drain, sia dotandole di una pull-up o pull-down. Il segnale entrante o uscente può essere riletto mediante flip flop o latch.Le interconnessioni o canali di routing stabiliscono le modalità di collegamento tra gli array element o tra un array element e una porta di I/O. Esistono due tipi di
interconnessione: segmentata (Segmented Routing Channels) o canalizzata (FastTrack Interconnect). Anche queste informazioni con le relative immagini le trovate al seguente documento prelevato da internet.


Lik doc2 .

Non intendo prolungarmi oltre poiché ritengo che lo scopo di questo progetto è quello di dimostrare come procedere per programmare l’FPGA e interfacciare un display LCD.Il software che ho utilizzato per la programmazione dell’FPGA è Quartus 2 scaricabile gratuitamente da internet dopo l’iscrizione.Per far ciò è sufficiente andare al seguente https://www.altera.com/support/soft ... enter.html e seguire le istruzioni.In sintesi possiamo dire che questo software traduce in binario lo schema elettrico disegnato e lo trasferisce all’FPGA attraverso un programmatore.


Quartus è abbastanza complesso e permette di programmare l’FPGA in diversi linguaggi che sono: • VHDL • Verilog HDL • Block Diagram/Schematic file ecc.. Nel mio progetto ho utilzzato il linguaggio VHDL.Per chi vuole cominciare a studiarlo è possibile fare riferimento al seguente link http://xoomer.virgilio.it/nitorqua/ ... .html#sez1 oppure su altri siti sparsi per la rete sia in inglese che in italiano.

Piedinatura dell'FPGA Cyclone EP1C6T144C8

Prima di descrivere i passi necessari per programmare l'FPGA con Quartus,esaminiamo un attimo  la piedinatira del dispositivo.

+
L'immagine è stata prelevata direttamente dal data sheet di Altera; per i dettagli potete tranquillamente guardare quessto documento a pag 120. Piedinatura_doc.Propabilmente qualcuno di voi si chiederà a cosa può servire la disposizione dei piedini.La risposta è che per comprendere lo schema elettrico , bisogna conoscere la funzionalità di alcuni pin.Per questo Quartus ci viene incontro disponendo una funzione che visualizza la leggenda dei pin con relativa posizione.

+

Alcuni pin dell'FPGA hanno funzioni specifiche come ad esempio clock in ( piedino 16 ) , I/O differenziali, Vcc,GND,PLL ecc..



Nell'immagine di sopra a sinistra potete osservare la leggenda con la spiegazione della funzione che può svolgere ogni pin.
In particolare i pin interessati alla programmazione seriale  sono i seguenti:

DATA0,DCLK,nCS0,ADS0 ,rispettivamente pin 13,24,12,25 per l'FPGA e 2,6,1,5 per l'EPCS1.Per comprendere il collegamento tra FPGA e EEPROM EPCS1 guardate le seguenti immagini:

+
+

Se guardate lo schema elettrico in basso a destra potete osservare anche i segnali di programmazione per le CPLD che utilizzano il connettore JTAG.In questo dispositivo , comunque, è possibile usare le 2 modalità di programmazione per programmare l'FPGA.Se si usa il JTAG  , dopo lo spegnimento del dispositivo bisognerà riprogrammare di nuovo tutto.Utilizzando invece la programmazione seriale ( cioè scaricando il firmware nell'EPCS1), una volta programmata l'FPGA , questa funzionerà anche dopo lo spegnimento.Parlavamo prima dei pin dell'FPGA ; in questo progetto sono stati utilizzati i seguenti pin:

+

Se osservate la figura di sopra ( in basso) potete capire la funzione di tutti i pin utilizzati ( vedremo come è possibile associare ai pin dell'FPGA, i segnali di ingresso/uscita stabiliti in fase di creazione del progetto).In particolare il pin 16 è stato usato come ingresso per un clock esterno.In questo progetto tale clock è ottenuto con oscillatore quarzato in SMD montato già sulla schedina ; questo oscillatore è possibile acquistarlo già pronto in  SMD o costruirlo con delle porte logiche triggerate.I pin 109,110,111,112,113,114,123,124 sono uscite e rappresentano i dati che l'FPGA spedisce verso il display LCD.Anche i pin 42,53,60,68 sono uscite e sono rispettivamente: un'uscita per il lampeggio di un led ad una frequenza di 1Hz,il segnale RS ,ilsegnale RW ed il segnale EN per il display.

Creazione di un progetto con Quatus

1. Lanciando Quartus 2 , vi troverete di fronte la seguente schermata

+

A questo punto dovrete cliccare su File e poi su “New Project Wizard” per creare il vostro progetto.La schermata successiva sarà la seguente:

+

Poi cliccate su next

+

Posizionatevi dove c’è il cursore per scegliere il percorso dove salvare il vostro progetto

+

Poi…selezioneate la vostra cartella dove saranno aggiunti i files .



Nell’esempio , ho creato una cartella sul desktop di nome LCD.





Quindi la cartella scelta è C:\Documents and Settings\Primok_V\Desktop\LCD mentre il nome del progetto è display_LCD. Proseguendo clicchiamo su Next



Poi  di nuovo su Next….



In questa schermata , bisogna scegliere la famiglia ed il tipo del vostro dispositivo hardware.Nel mio caso si tratta di  un Cyclone EP1C6T144C8.



Ancora su Next



Poi su Finish



Il progetto è stato creato ma non finisce qui. Ora bisogna compilarlo ,  mappare gli ingressi/uscite del dispositivo e aggiungere eventuali componenti.

In questo esempio è stato creato un componente che serve ad ottenere un clock di 1Hz partendo da uno di 25MHz.Tutto ciò fa parte della teoria del linguaggio VHDL.E’ un po’ equivalente a fare una #include nomefile che si usa nei linguaggi ad alto livello.Più avanti vedremo come utilizzare un componente nel progetto.Questa possibilità è molto importante poiché permette di fare uso di pezzi di codici già pronti scritti da altri autori e pronti per l’uso.Comunque nel capitolo 4 del seguente link http://xoomer.virgilio.it/nitorqua/ ... iconc.html  potete studiare come creare un componente , capire cos’è e come utilizzarlo.

Procediamo….A questo punto bisogna aggiungere , al progetto creato, un file con il codice e per farlo ci sono 2 possibilità.
  1. Editare un codice in VHDL o altri linguaggi consentiti da QuartusUsare la programmazione grafica che consiste nel trascinare i componenti in un blocco e
  2. assegnare dei nomi agli ingressi e uscite dei segnali che verranno creati passo passo Io seguirò la prima strada.
Per inserire un file nel progetto cliccare su New come si evince in questa figura



Poi arriveremo qui



Sceglieremo il linguaggio VHDL e daremo ok.



Ora possiamo editare nel blocco bianco il nostro codice.Ovviamente io farò un copia incolla.



Ora bisognera salvare il file.vhd nella cartella del progetto e dargli un nome

( usate quello che  suggerisce Quartus).



In questo caso il nome è Vhdl1.vhd.

Adesso possiamo finalmente compilare ( ovviamente dopo aver scritto correttamente il codice).



Il pulsante per far partire la compilazione è quello mostrato nell’immagine.



Sorpresa!!! Il compilatore  ci avvisa che manca un’istanza , il nostro componente di cui vi avevo accennato in precedenza. Allora dobbiamo includerlo nel progetto affinchè il compilatore possa compilare in santa pace.

Vediamo come fare.Si è detto che questo componente serve per dividere il clock da 25 MHz per 25000000 per avere un clock di 1Hz.Bisogna creare un secondo file che chiameremo CLOCK_DIV.vhd come  detto in precedenza e aggiungerlo al progetto.

Per aggiungere un file al progetto dopo averlo creato si procede così:



Da project ->Add/Remove file in project si arriva a



Dopo aver selezionato il file da aggiungere al progetto non resta che dare ok e ricompilare.

 

Il compilatore ha compilato generando un lista di warning….andate a leggere per sapere di cosa si tratta.

Ora andate a vedere cosa c’è nella cartella LCD e vedrete una serie di file generati in automatico.Quelli che servono a noi per programmare l’FPGA sono solo

 

  1. display_LCD.pof e al limite
  2. display_LCD.sof solo per verificare il funzionamento.
Dato che siamo qui spiego perché il file display_LCD.sof non è indispensabile.Questo file infatti una volta caricato nell’FPGA attraverso il connettore JTAG , è volatile .Se lo carichiamo e poi spegniamo il circuito, riaccendendo non funzionerà più niente e dovremo ricaricarlo.

Caricando invece il file display_LCD.pof , questo andrà nella eeprom  alloggiata esternamente all’FPGA  cioè nell’EPCS1 percui anche spegnendo il dispositivo  e riaccendendo questo funzionerà ugualmente.

Ora dovremo collegare il programmatore al connettore per trasferire il file.pof nell’EPCS1 ma questo lo vedremo nella prossima puntata.

 

Saluti

Primok_
V
Joomla 1.7 Templates designed by College Jacke