Sei sulla pagina 1di 9

Alan Lenisa

Luglio 2011 - A.A. 2010 / 2011

Sistemi integrati per FPGA - Progetto desame


Manuale dello sviluppatore Introduzione
In questo documento viene illustrato lo sviluppo di unapplicazione per la Digilent Basys2 Board, una piattaforma di sviluppo con FPGA Xilinx Spartan3E (nello specifico stata usata la versione a 250.000 gates). Il progetto consistito nel realizzare un sistema che riceve come input dei carattere premuti su una tastiera PS/2, 6 segnali rappresentanti altrettanti bit di colore (assegnati tramite gli switch della scheda) e restituisce su video VGA il testo digitato e sul display 7-segmenti in numero di caratteri digitati.

Progetto
Di seguito una rappresentazione grafica di quanto si vuole realizzare, secondo quanto descritto nell' introduzione.

Il sistema stato suddiviso nelle seguenti funzioni (blocchi) Un'interfaccia PS2, che si occupa di ricevere l'input da tastiera (in realt la comunicazione bidirezionale, ad esempio sarebbe possibile accendere il led Num lock, ma questo non

stato trattato nel presente progetto). Un dispositivo di memorizzazione dei caratteri digitati e dell'informazione del colore. Questo riceve il carattere digitato da tastiera e lo memorizza. Un controller dei segnali VGA (colore e sincronismo). In relazione alla posizione attuale del fascio elettronico del tubo catodico (o analogo degli LCD), richiede il carattare da visualizzare al dispositivo di memoria. Da questo ne ricava quindi le informazioni da visualizzare(colore). Contiene anche una ROM per la visualizzazione di una piccola immagine nella parte bassa dello schermo Un blocco di gestione del display a sette segmenti. Riceve il numero di caratteri attualmente digitati e si occupa di visualizzarli correttamente nel display: questo dato fornito dalla memoria.

Il clock del sistema, a frequenza 50 Mhz, stato ottenuto tramite un integrato optionale, per motivi che verranno descritti dopo. Si descrive ora il dettaglio delle singole funzioni. Ps2interface (interfaccia PS/2) Questo modulo sviluppato dalla Xilinx. E' una implementazione di una generica interfaccia PS/2. E' bidirezionale, ovvero che pu sia trasmettere che ricevere caratteri secondo il protocollo PS/2(In questa applicazione comunque utilizzata in sola lettura). In tramissione, converte un byte in ingresso in una sequenza di bit seriali. In ricezione, legge una sequenza di bit, esegue il controllo di parit e restituisce un byte, ovvero la forma parallela di quanto letto serialmente. Ingressi

clk (clock)

rst (reset) write(segnale attivo alto che indica se scrivere dati seriali. E' posto a massa in quanto in questa applicazione viene solo utilizzata in lettura) txt_data(bus di 8 bit per i dati da trasmettere.Non utilizzato) ps2_clk e ps2_data (due segnali della cominucazione PS/2.Sono bidirezionali)

Uscite:

read(indica se un byte stato correttamente letto) busy(non utilizzato) err(presenza di errore, ad esempio controllo di parit in lettura.non utilizzato) rx_data(bus di 8 bit con il dato letto.)

Memory_vga (Dispositivo di memorizzazione dei caratteri) Premesso che i caratteri visualizzati a video hanno una dimensione di 8x8 pixel e che la risoluzione video adottata di 640x480, ne segue che ci sono 80x60 caratteri (4800). Questa la capacit di memoria necessaria, anche se non tutti i caratteri non vengono effettivamente utilizzati (ad esempio la parte bassa dello schermo utilizzata per l'immagine). Ogni locazione di memoria occupa 16 bit:8 per il carattere, 6 per il colore, 1 per l'effetto eviudenziato, 1 non utilizzato. Quindi la capacit totale 4800x16= 76800 bit= 9600 byte (occorre fare attenzione che il limite della scheda di circa 18kB) E' stata utilizzata una BRAM a due porte(Block RAM) disponibile nello Spartan 3E. La porta A utilizzata per la scrittura dei caratteri letti da tastiera, la porta B invece per fornire al controller VGA il carattere da visualizzare al momento.

Una breve descrizione delle BRAM fatta di seguito, anche se si rimanda alla documentazione ufficiale nei riferimenti, per una completa trattazione. Ingressi

ck (clock) write_char(il segnale che indica che presente un carattere in ingresso) input_char(bus di 8 bit per la lettura del carattere da memorizzare) display_col(colonna del carattere da visualizzare,bus a 7 bit, in modo da coprire tutti gli 80 valori) display_row(riga del carattere da visualizzare,bus a 6 bit, in modo da coprire tutti gli 60 valori) options(8 bit, collegati direttamente agli switch della scheda:6 sono per il colore ) output_char(bus di 16 bit, il carattere che viene fornito al controller, comprensivo delle opzioni sopracitate) counter_char(bus di 13 bit, il numero di caratteri digitati dall' utente e fornito poi al display 7 segmenti per la visualizzazione) new_char(segnale, sempre per il display, che indica che il numero di caratteri digitati cambiato)

Uscite

vga (controller VGA) Ha il compito di generare i segnali necessari alla visualizzazione dell'output su monitor. Genera i segnali di sincronismo. Fornisce i segnali di colore dello schermo nel seguente modo:

Se la riga di visualizzazione minore di 360(su 480 disponibili) richiede alla ram il carattere da visualizzare. Quindi, attraverso una ROM interna di 8x256 bit, converte il carattere in una sequenza di 8 bit che verranno utilizzati, in altrettanti cicli di clock, da una operazione di scorrimento per colorare o meno i pixel del monitor con i relativi colori. L'effetto evidenziatore, sopracitato, antro non fa che invertire i pixel del singolo carattere. Se la riga di visualizzazione almeno 360, invece, il controller interroga un'altra ROM interna, contenente una immagine precaricata:ogni 8bit della memoria contiene le indicazioni del colore del pixel da visualizzare (3 rosso, 3 verde, 2 blu)

ingressi ck (clock) reset chr_info(bus di 16 bit : il valore letto dalla singola cella di memoria dei caratteri presenti) Hsyn, Vsyn (i segnali di sincronizzazione del monitor) vga_r, vga_g, vga_b (i segnali di pilotaggio del colore del singolo pixel. La scheda fornische 3 bit per il rosso e verde, 2 per il blu) display_col(colonna del carattere da visualizzare,bus a 7 bit. Viene fornito al blocco di memoria per estrarne il dato) display_row(riga del carattere da visualizzare,bus a 6 bit. Viene fornito al blocco di memoria per estrarne il dato).

uscite

seven (pilotaggio del display a 7 segmenti) La scheda ha a disposizione un display di 4 cifre, utilizzato nell'applicazione per esporre il numero di caratteri digitati dall'utente. Le 4 cifre sono sufficienti a visualizzare, nel caso estremo, a visualizzare tutti i 4800 caratteri. Non possibile pilotare direttamente ogni singolo digit, ma si ricorre ad una multiplazione nel tempo dell'anodo comune, con una frequenza tale che l'occhio umano non se ne accorga. E' stato utilizzato un contatore interno sul clock di sistema, in modo da ottenere una frequenza di circa 190 Hz(un tempo di circa 5,2 ms per ogni cifra). Dal manuale della scheda, si riporta la schematizzazione del display, dove si vede come gli anodi comuni delle singole cifre siano attivati (alimentati) uno alla volta. I segnali CA...CG sono i catodi dei sincoli segmenti. Il segnale DP (punto decimale) non utilizzato. Quindi, in breve, i segnali CA...CG vengono impostati in base al valore della cifra da visualizzare (se 0 il segmento sar acceso). Solo un anodo alla volta viene alimentato e questo determina come risultato il pilotaggio della singola cifra.

Ingressi

Uscite

ck (clock) dato (bus di 13 bit contenente il dato da visualizzare: 2^13=8192 il numero minimo di bit per visualizzare gli ipotetici 4800 caratteri) start_conv(segnale che indica il cambiamento del numero da visualizzare:la decodifica del numero decimale in BCD avviene tramite una funzionalit sincrona, non tramite un circuito combinatorio) seg(bus di 7 bit, sono i catodi dei 7 segmenti) an(bus di 4 bit, sono gli anodi delle cifre da visualizzare) dp(punto decimale, sempre spento in questa applicazione)

Descrizione dell
Cenni sulle BRAM Tutti gli FPGA della generazione Spartan (ed altri della xilinx) hanno a disposizione delle celle di memoria on chip che possono essere organizzate in infiniti modi, a seconda delle necessit. Ci significa che si possono utilizzare delle strutture che leggano dati di una certa dimensione, indirizzati da un certo numero di bit. La versione a due porte di queste Block RAM hanno la comodit di poter, tra l'atro, avere due circuiti distinti di scrittura e lettura. Ed per questo che si utilizzato una cosiddetta Dual-Port BRAM per contenere i caratteri digitati da tastiera. Ogni porta pu essere dotata, attraverso l'uso delle funzionalita di configurazione dei moduli IP offerte dal software di svilupo, di

un clock un segnale di abilitazione alla scrittura un bus di indirizzo, di un numero di bit secondo le necessit un bus per il dato da scrivere, di un numero di bit secondo le necessit un bus per il dato letto, delle stesse dimensioni del dato scritto.

Realizzazione

Strumenti utilizzati
Hardware

Digilent Basys 2 Board (250k gates) Una tastiera PS/2 Un monitor LCD ( utilizzabile anche uno CRT) (Il pc per la programmazione della scheda) Xilinx ISE Webpack v.13.1 (versione gratuita) per lo sviluppo dell'applicazione HDL Digilent Adept Software rev. 2.4.2 per la programmazione della scheda Eclipse, per la creazione di una funzione java che estragga da una immagine i caratteri da memorizzare nella ROM del logo visualizzato a video.

Software

Riferimenti

Protocollo PS/2 e interfaccia Manuale scheda Basys 2 Manuale BRAM Spartan 3e Software xilinx Software digilent