Sei sulla pagina 1di 9

Alan Lenisa

Luglio 2011 - A.A. 2010 / 2011

Sistemi integrati per FPGA - Progetto d’esame

Manuale dello sviluppatore

Introduzione

In questo documento viene illustrato lo sviluppo di un’applicazione 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.

realizzare, secondo quanto descritto nell' introduzione. Il sistema è stato suddiviso nelle seguenti funzioni

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.

nel display: questo dato è fornito dalla memoria. Il clock del sistema, a frequenza 50 Mhz,

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.)

utilizzato) ∑ rx_data(bus di 8 bit con il dato letto.) Memory_vga (Dispositivo di memorizzazione dei caratteri)

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

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 )

Uscite

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)

vga (controller VGA) Ha il compito di generare i segnali necessari alla visualizzazione dell'output su

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)

uscite

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”).

seven (pilotaggio del display a 7 segmenti) La scheda ha a disposizione un display di

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

utilizzato. Quindi, in breve, i segnali CA

visualizzare (se 0 il segmento sarà acceso). Solo un anodo alla volta viene alimentato e questo determina come risultato il pilotaggio della singola cifra.

CG

sono i catodi dei sincoli segmenti. Il segnale DP (punto decimale) non è

CG

vengono impostati in base al valore della cifra da

Ingressi   ∑ ck (clock) ∑ dato (bus di 13 bit contenente il dato da
Ingressi   ∑ ck (clock) ∑ dato (bus di 13 bit contenente il dato da

Ingressi

 

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)

Uscite

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)

Cenni sulle BRAM Descrizione dell Tutti gli FPGA della generazione Spartan (ed altri della xilinx)

Cenni sulle BRAM

Descrizione dell

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.

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)

Software

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.

Riferimenti

Protocollo PS/2 e interfaccia

Manuale scheda Basys 2

Manuale BRAM Spartan 3e

Software xilinx

Software digilent