Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
E. Molinari, Gestione di una libreria di forme d'onda a dente di sega su Altera-DE2 board e visualizzazione VGA
PROGETTAZIONE CIRCUITI DIGITALI
AA 2011/2012
Gestione di una libreria di forme d’onda a
dente di sega su Altera-DE2 board e
visualizzazione VGA
Docente: Roberto Saletti
Autore: Enrico Molinari
Indice
--------------------------------------------------------
1) Presentazione del progetto “libreria di forme d’onda a dente di
sega”………………………………………………………………………………………………..Pag. 1
1.1) Obiettivo del progetto e ambiente di lavoro……………………………..Pag. 1
1.2) Breve descrizione dei blocchi e funzionamento del sistema………Pag. 4
2) Selezione della frequenza del dente di sega……………………………….Pag. 7
3) Modulazione della fase delle forme d’onda a dente di sega…….Pag. 17
4) Gestione della memoria SRAM………………………………………………...Pag. 28
4.1) Struttura della SRAM……………………………………………………………….Pag. 28
4.2) Fase di scrittura dati: rappresentazione delle forme d’onda in
memoria.……………………………………………………………………………………….Pag. 30
4.3) Fase di scrittura dati: temporizzazioni dei segnali di controllo della
SRAM……………………………………………………………………………………………..Pag. 32
4.4) Fase di lettura dati: interazione fra VGA_MODULATOR e
memoryMANAGER…………………………………………………………………………Pag. 50
5) Modulazione di ampiezza………………………………………………………….Pag. 59
5.1) Obbiettivo del sistema…………………………………………………………….Pag. 59
5.2) Realizzazione logica…………………………………………………………………Pag. 62
6) Interfacciamento con monitor CRT………………………………………..….Pag. 75
6.1) Standard VGA………………………………………………………………………….Pag. 75
6.2) Componentistica on-board per interfacciamento XGA…………….Pag. 78
6.3) Temporizzazioni di segnali RGB da FPGA per controllo XGA del
monitor………………………………………………………………………………….………Pag. 83
1
1) Presentazione del progetto
“libreria di forme d’onda a dente di sega”
1.1) Obiettivo del progetto e ambiente di lavoro
Lo scopo del mio progetto è stato di programmare un sistema FPGA in grado di visualizzare su un
monitor CRT una piccola libreria di forme d’onda a dente di sega a varia frequenza, per le quali
fosse possibile modulare fase e ampiezza.
Al fine di conseguire tale obiettivo ho utilizzato la scheda DE2 della Altera, equipaggiata con un
elemento programmabile FPGA chiamato “Cyclone II”, modello EP2C35F672C6, e con una serie di
dispositivi periferici (periferici rispetto all’elemento programmabile su cui programmare la rete
logica implementante l’intelligenza del sistema), come memorie, convertitori analogico -> digitale
e digitale -> analogico, tastiere, ecc…
Per realizzare i blocchi della rete logica da programmare in hardware, via canale USB-blaster,
sull’elemento programmabile FPGA, ho utilizzato l’ambiente di sviluppo Quartus II, versione 8.1,
sempre della Altera. Ho descritto le funzioni logiche implementanti i vari blocchi della rete per
mezzo del codice Verilog di descrizione dell’hardware.
Ho usato, oltre chiaramente all’FPGA la cui programmazione realizza l’intelligenza che pilota il
resto del sistema, alcuni dispositivi periferici, utilizzati appunto dal Cyclone II, una volta
programmato, durante il suo funzionamento. I dispositivi, montati sulla DE2, che ho utilizzato
sono:
7 commutatori switch (SW[6]…SW[0]) e i 4 pushbuttons (KEY[3]…KEY[0]) in qualità di
primo stadio per l’acquisizione di dati provenienti dall’esterno, ossia per l’acquisizione
delle impostazioni settate dall’utente della scheda ai fini della modulazione di frequenza,
fase e ampiezza del dente di sega da visualizzare
L’oscillatore quarzato a 50 MHz come sorgente dalla quale trarre il segnale di clock per la
sincronizzazione di tutti i blocchi del sistema programmato
La memoria SRAM IS61LV25616 della ISSI a 512 Mbytes, organizzati secondo una struttura
a 256 K locazioni, ciascuna di 16 bits (2 bytes), per l’immagazzinamento dei dati portatori
dell’informazione relativa alle varie forme d’onda visualizzabili
Il convertitore video digitale->analogico a 10 bits, a 3 canali paralleli (3 DACs a 10 bits),
modello ADV7123 della Analog Devices, per il pilotaggio di un monitor a raggi catodici
secondo lo standard analogico XGA 1024x768@60Hz
Il connettore VGA D-SUB a 16 PINs, pilotato sia dai 3 DACs di cui sopra (i 3 colori primari)
che direttamente dall’FPGA (sincronismo orizzontale e verticale), da collegare al monitor
CRT
Il canale USB-blaster attraverso il quale i programming files (la “mappa dei fusibili”, solo
per rendere l’idea) generati dall’ambiente di sviluppo dopo il compilamento del codice
2
sorgente verilog ed il successivo “placing & routing” del codice oggetto, vengono
programmati sul Cyclone II
Riporto qui di seguito una figura descrittiva dell’ambiente complessivo nel quale mi sono trovato
ad operare. Fig. 1
L’ambiente complessivo nel quale mi sono trovato ad operare: personal computer host sul quale
gira il software Altera-Quartus II di sviluppo per FPGA, la scheda DE2 della Altera, un monitor CRT
per la visualizzazione delle forme d’onda richieste dall’utente
3
Qui in basso invece riporto lo schematic rappresentativo del top-level file
“DENTE_SEGA_system.bdf” (Block Diagram File), raffigurante i blocchi logici e le interconnessioni
implementanti la rete logica, puramente combinatoria, da programmare sull’FPGA. Il
funzionamento di questa rete e la sua interazione con le periferiche montate sulla scheda DE2,
oltre che con il terminale video, determinano la visualizzazione delle forme d’onda a dente di sega
della libreria. 4
Fig. 2
Schematic rappresentativo del top-level file “DENTE_SEGA_system.bdf” raffigurante i blocchi logici
e le interconnessioni implementanti l’intelligenza da programmare sull’FPGA, che piloterà i
dispositivi periferici (sia il terminale video che i dispositivi a bordo della scheda) ai fini della
visualizzazione del dente di sega richiesto dall’utente
1.2) Breve descrizione dei blocchi e funzionamento del sistema
L’utente, premendo un qualunque pushbutton (KEY[3]…KEY[0]), può richiedere la visualizzazione
di una particolare frequenza del dente di sega. Premendo KEY[0] si richiede la visualizzazione del
dente di sega “f0_4” avente un periodo pari a circa un quarto della larghezza dello schermo,
premendo invece KEY[1] si richiede la visualizzazione del dente di sega “f0_2” avente un periodo
pari a circa metà della larghezza dello schermo, premendo KEY[2] si richiede la visualizzazione del
dente di sega “f0_half” avente semi-periodo pari alla larghezza dello schermo, mentre premendo
KEY[3] si richiede la visualizzazione del dente di sega “f0_quarter” avente un quarto di periodo pari
alla larghezza dello schermo (di fatto una rampa). Se l’utente non preme alcun pushbutton oppure
imposta una combinazione qualunque diversa da quelle descritte sopra, viene visualizzato il dente
di sega di default “f0”, avente periodo pari alla larghezza dello schermo. Il blocco C serve al
sistema ad acquisire l’informazione circa la frequenza richiesta dall’utente e ad imporre ai blocchi
A e B, per mezzo dell’accensione del corretto segnale di enable, fra i 5 disponibili in uscita (gli altri
4 rimarranno spenti), il giusto comportamento da seguire, al fine della corretta visualizzazione su
monitor.
L’utente, commutando SW[6], impone se la fase della forma d’onda da visualizzare deve
incrementare oppure decrementare lungo l’asse, mentre commutando SW[5], ad ogni switching
DOWN -> UP (allontanamento della levetta del commutatore dal bordo della scheda), l’utente
imposta l’entità, il modulo, in termini di numero di pixels, di tale sfasamento. Lo stato DOWN
oppure UP di SW[6] impone al blocco E, che è un contatore, il senso del conteggio, ovvero se deve
eseguire un up-counting oppure un down-counting, mentre le commutazioni DOWN -> UP di
SW[5] costituiscono gli eventi contati da E, di volta in volta incrementanti oppure decrementanti il
numero memorizzato, all’uscita del contatore E, in corrispondenza dell’evento precedente. Il
blocco E eroga un numero, un valore, il quale attraversando il “macro” flip-flop D positive edge
triggered, ossia il blocco F, per essere sincronizzato con il clock di sistema, va in ingresso al blocco
A, così che questo possa visualizzare lo sfasamento, in termini di pixels, rappresentato proprio da
quel valore “contato” da E.
L’utente, commutando opportunamente i 5 commutatori SW[4]…SW[0], può richiedere il
progressivo incremento oppure il decremento dell’ampiezza del dente di sega f0_4. Il dato
rappresentativo dell’informazione circa l’entità dello “stiramento”, lungo l’asse delle ordinate,
richiesto dall’utente, viene erogato dal blocco D, che funge appunto da selezionatore (abilitatore)
di ampiezza, e inviato in ingresso al blocco A per la visualizzazione.
5
Il blocco B serve alla scrittura in memoria SRAM, montata sulla scheda DE2, dell’informazione
relativa alle forme d’onda delle 5 frequenze di dente di sega che devono costituire la libreria. B
accede (indirizzandole) alle locazioni della SRAM, scrive, attraverso il buffer/bus tri-state G, reso
logicamente trasparente, gli opportuni dati della forma d’onda appena selezionata dall’utente
mediante i 4 pushbuttons, dopodiché alla fine della scrittura dei dati della forma d’onda richiesta
manda in alta impedenza G. Su sollecitazione del blocco A, B accede alle locazioni, prima accedute
per la scrittura, anche in fase di lettura, per consentire al blocco A di poter valutare in
corrispondenza di ciascun fronte positivo del clock di sistema, su uno dei suoi ingressi, il dato
memorizzato di volta in volta nella giusta locazione, al fine della visualizzazione della forma d’onda
alla quale quei dati, puntati in SRAM da B, si riferiscono.
Il blocco A implementa la funzionalità responsabile del corretto pilotaggio del convertitore digitale
-> analogico e del connettore D-SUB VGA. A, per mezzo di 2 suoi segnali di uscita, entranti nel
blocco B, impone a quest’ultimo l’indirizzamento, di volta in volta, cioè ad ogni fronte in salita del
clock di sistema, della giusta locazione SRAM, oltre al senso, crescente o decrescente, con il quale
B, che gestisce direttamente la memoria, deve scorrere le locazioni di quest’ultima. Questo duplice
verso di scorrimento della SRAM, da parte di B, richiedibile da A in fase di lettura dei dati, ossia in
fase di stampa su monitor, è utile per la visualizzazione di semionde positive e negative,
risparmiando metà del numero di locazioni SRAM che altrimenti sarebbero state necessarie se non
avessi previsto tale sistema di indirizzamento. In tal modo B punta sempre la corretta locazione
SRAM, pertanto A, su uno dei suoi ingresso, quello cioè che lo mette in comunicazione con la
SRAM, trova sempre, ad ogni fronte positivo del clock di sistema, il giusto dato. Questo dato viene
elaborato da A, così da visualizzare correttamente il dente di sega richiesto dall’utente. A pertanto
deve generare ad ogni colpo di clock le 3 parole digitali che, una volta decodificate in analogico dai
3 DACs della Analog Devices, costituiranno i segnali in corrente relativi ai 3 colori primari RGB
necessari alla corretta colorazione di ciascun pixel dello schermo. Inoltre A impone, direttamente
sul connettore VGA, ossia direttamente sul monitor CRT, i segnali di sincronizzazione responsabili
della deflessione orizzontale e verticale del pennello elettronico all’interno del tubo a raggi
catodici.
Il blocco H è un PLL che accetta in ingresso il clock a 50 MHz proveniente da uno dei 2 oscillatori al
quarzo montati sulla scheda DE2 e genera, in uscita, un clock alla frequenza desiderata (non tutti i
rapporti di conversione sono possibili), che nel mio caso è di 65 MHz (rapporto 13/10 realizzabile),
essendo tale frequenza di clock necessaria in ingresso al convertitore digitale -> analogico: ho
pertanto piegato tutta la tempistica di sincronismo dell’intero sistema programmato a questa
necessità del DAC video.
Qui di seguito riporto un diagramma di flusso descrivente il livello fondamentale di funzionamento
della rete logica che ho programmato sul Cyclone II, ovvero quella parte di logica che gestisce la
visualizzazione della frequenza di dente di sega selezionata dall’utente.
6
7
Fig. 3
Diagramma di flusso descrivente il livello fondamentale di funzionamento della rete logica, ovvero
quella parte di logica che gestisce la visualizzazione della frequenza di dente di sega selezionata
dall’utente
2) Selezione della frequenza del dente di sega
La scheda DE2 dispone di una tastiera formata da 4 tasti di tipo “pushbutton”, che io ho utilizzato
per consentire all’utente la scelta della frequenza di dente di sega che desidera visualizzare sul
monitor CRT. 8
Fig. 4
Componentistica costituente il primo stadio di acquisizione dati per il selezionatore di frequenze di
dente di sega
La pressione di ciascun pushbutton da parte dell’utente provoca la cortocircuitazione fra la lamella
metallica equipotenziale 1-2 collegata a massa e l’altra lamella equipotenziale 3-4 collegata,
tramite una resistenza di pull-up di valore molto elevato (100KΩ), all’alimentazione Vcc = 3,3 V.
Infatti prima della pressione del tasto di fatto non scorre corrente lungo la resistenza di pull-up,
quindi non vi è caduta di tensione ai suoi terminali, quindi la lamella collegata al circuito di
debouncing è di fatto cortocircuitata a Vcc. In seguito alla pressione del tasto, si crea il corto fra le
2 lamelle, la corrente può attraversare il corto Vcc -> GND appena resosi disponibile, si viene a
creare una forte caduta di tensione ai terminali della resistenza di pull-up (il suo valore elevato
sventa il pericolo di conflitto logico 1 vs 0 sulla lamella 3-4 all’atto della pressione del tasto),
pertanto sulla lamella 3-4 va ad insistere il valore logico basso (0 V). Il segnale in tensione
costituente il potenziale della lamella 3-4 passa attraverso una squadra RC e successivamente
attraverso uno dei 4 canali utilizzati (sugli 8 disponibili) di bufferaggio tri-state messi a disposizione
dal tranceiver 74HC245, della Philips Semiconductors, così da ricevere un’azione di filtraggio
passa-basso e dunque di debouncing, cioè di stabilizzazione del proprio transitorio 1 -> 0, affetto
(come del resto il transitorio 0 -> 1 di rilascio del tasto) dal noto problema del ringing. Ciascuno
9
dei 4 canali di acquisizione dati da tastiera di pushbuttons va poi ad insistere direttamente sul
corrispondente PIN del Cyclone II. Fig. 5
Segnale in ingresso al circuito di debouncing e corrispondente segnale debounced in ingresso
all’elemento programmabile FPGA
Dallo schematic del file “DENTE_SEGA_system.bdf” estraiamo la parte coinvolta nell’acquisizione e
successiva gestione dei comandi di selezione delle frequenze di dente di sega.
10
Fig. 6
Porzione dello schematic del file “DENTE_SEGA_system.bdf” coinvolta nell’acquisizione e
successiva gestione dei comandi di selezione delle frequenze di dente di sega
La situazione di default è quella che vede i 4 PINs di ingresso al blocco abilitatoreFreq, cioè il
blocco adibito alla selezione della frequenza da visualizzare, tirati su a Vcc (pulled-up), situazione
che si verifica quando l’utente non tiene premuto alcun tasto. La forma d’onda che viene
visualizzata su monitor è quella di default f0, avente periodo pari all’intera larghezza dello
schermo. L’utente può arbitrariamente premere uno qualunque dei 4 pushbuttons per richiedere
la visualizzazione della frequenza corrispondente. Tale pressione è ovviamente asincrona, cioè non
allineata temporalmente con il fronte positivo del clock di sistema, il q