Beruflich Dokumente
Kultur Dokumente
Introduzione
Nel seguito è fornita la descrizione funzionale dei blocchi che costituiscono il PLL. Da
questa occorre ricavare una descrizione VHDL equivalente, programmare l’Altera MAX
7128S presente sulla scheda Altera UP1 a disposizione su ogni tavolo e verificare il
funzionamento del dispositivo.
• Vin: segnale di ingresso del PLL: dinamica di frequenza tra circa 3kHz e circa
6kHz.
• Filout(5...0): segnale di uscita del filtro, numero binario positivo espresso su 6 bit.
Tale segnale è disponibile per poter visualizzare la caratteristica a farfalla del PLL:
collegando un convertitore D/A a questi piedini è possibile pilotare il canale Y di un
oscilloscopio con il segnale analogico corrispondente alla configurazione digitale in
ingresso all’NCO.
• Clk: segnale di clock presente sulla scheda UP1, fclk=25.175MHz; tale segnale viene
utilizzato come riferimento per tutte le funzioni svolte dal dispositivo.
ETLlb07bb - 3 ago. 00 1
Internamente, il PLL è costituito dai due blocchi funzionali riportati nella figura
seguente:
Clk
Vin
Vout
Demodulatore
NCO
di fase e filtro
Filout(5..0)
L’oscillatore a controllo numerico emula le funzioni del VCO nei PLL tradizionali. Lo
scopo è di avere un segnale di uscita la cui frequenza dipende dal valore presente
sull’ingresso. Il modo più semplice di realizzare tale funzione è di costruire un divisore
di frequenza programmabile, il cui modulo dipende dal numero di ingresso.
ETLlb07bb - 3 ago. 00 2
Caratteristica NCO
6.5
5.5
Frequenza Vout
4.5
3.5
3
0 10 20 30 40 50 60
Filout
Demodulatore a EX-OR
• Sincronizzatore di ingresso per Vin: non è altro che un registro a scorrimento a due
bit il cui ingresso è collegato a Vin, con segnale di clock clk, il cui scopo è
eliminare la possibilità di stati metastabili dovuti al fatto che questo segnale non è
sincorno con il PLL. L’uscita di questo circuito è il segnale Vinsync.
• Accumulatore di fase: è un contatore a sei bit, con clock clk, che è abilitato a contare
solo quando pgcout è attivo e contemporaneamente Vinsync EX-OR Vout vale 1.
Questo contatore è azzerato in modo sincrono ogni volta che EOC e pgcout sono
contemporaneamente attivi. In questo modo, dato che EOC si attiva una volta ogni
64 cicli in cui pgcout è attivo, subito prima dell’azzeramento è disponibile sulle
uscite un numero compreso tra 0 e 63, proporzionale allo sfasamento tra i segnali
Vin e Vout.
ETLlb07bb - 3 ago. 00 3
• Registro di uscita: è un registro a sei bit che campiona le uscite dell’accumulatore di
fase immediatamente prima dell’azzeramento e le mantiene costanti per il ciclo
successivo di Vout. Le uscite del registro costituiscono il segnale Filout che
comanda la variazione di frequenza dell’NCO.
Sarebbe possibile inserire tra l’uscita del registro e l’ingresso dell’NCO un ulteriore
blocco con funzioni di filtro passa-basso per modificare l’ampiezza della banda di
cattura del PLL. Questo filtro normalmente viene realizzato mediante una struttura FIR.
Tuttavia i coefficienti del filtro devono essere calcolati con cura e occorre valutare
attentamente gli effetti dovuti alle approssimazioni numeriche introdotte lavorando su
grandezze espresse con pochi bit. Inoltre, i filtri FIR sono generalmente realizzati con
dei moltiplicatori che richiedono un grosso numero di celle dell’FPGA. Di conseguenza
si è deciso di non inserire tale filtro in questo progetto. Il fatto di mantenere costante il
valore di Filout per un periodo di Vout introduce in ogni caso un effetto filtrante,
riscontrabile dall’esame della caratteristica a farfalla del PLL.
Demodulatore fase/frequenza
Il secondo PLL da realizzare differisce dal primo nel demodulatore. In questo caso il
demodulatore cerca di mantenere la posizione della transizione basso-alto del segnale di
ingresso coincidente con quella del segnale di uscita. Lo schema a blocchi è delineato
nella figura seguente:
Vin
Vinsync
Clk Sincronizzatore Phaseout
Rilevatore di
Calcolatore
transizione
di Filout
Div64
Inedge Noedge fase/frequenza
Rilevatore di
transizioni
Pgcout
Pgcout
Pgcout
EOC
Clk
Clk
• Rilevatore di transizione L->H del segnale Vinsync: è un blocco sincrono con clk
abilitato dal segnale pgcout, che confronta il valore del segnale Vinsync con quello
campionato nel ciclo precedente. Nel caso in cui il valore rilevato sia alto e quello
memorizzato sia basso, il valore corrente del contatore div64 viene memorizzato in
un registro. Questo blocco genera in uscita due segnali: phaseout, uscita del registro
(campo di valori possibili: [0…63]), e inedge, attivo per un periodo di pgcout ogni
volta che viene memorizzato un nuovo valore in phaseout.
ETLlb07bb - 3 ago. 00 4
• Rilevatore di transizioni multiple: è abilitato sui fronti di salita di clk in cui pgcout è
attivo. Genera due segnali: noedge e moreedges. Noedge è attivato quando EOC è
attivo e disattivato nel primo periodo in cui inedge viene campionato alto.
Moreedges è azzerato quando EOC è attivo e attivato se inedge è alto con noedge
non attivo. In questo modo vengono rilevate due condizioni che indicano che le
frequenze dei segnali Vin e Vout sono molto diverse.
+
Phaselast - Freqcoeff Newvco Clip
D Q 0
+ [0..63]
* + + 0
63 Filout
1 D Q
Phaseout 0
1 *
Noedge
+ Phasecoeff
Moreedges
ETLlb07bb - 3 ago. 00 5
Misure
Visualizzazione della
caratteristica a farfalla con
convertitore D/A. E’ riconoscibile
l’andamento iperbolico della
caratteristica (in pratica sull’asse
orizzontale compare il periodo,
non la frequenza)
ETLlb07bb - 3 ago. 00 6
SCHEDA ALTERA UP1
Connettore di alimentazione
Al connettore di alimentazione (jack marcato “DC IN” in alto a sinistra”) deve essere
collegata una tensione di 9V ottenuta da una sezione dell’alimentatore triplo presente
sul banco. Prestare attenzione alla polarità che deve ovviamente essere rispettata.
Seguire le indicazioni date in proposito da docente o coadiutore.
Connettore J-TAG
ETLlb07bb - 3 ago. 00 7
quattro jumper (denominati TDI, TDO, DEVICE e BOARD), devono essere tutti inseriti
e disposti nella posizione più vicina al connettore J-TAG, come nella figura seguente.
Pulsanti
I display a sette segmenti sono collegati direttamente alla 7128S. Non è quindi
necessario utilizzare dei cavetti di collegamento, ma occorre specificare in MAXPLUS2
i piedini cui collegare le uscite corrispondenti del dispositivo. I display accettano dei
segnali attivi bassi. Questo vuol dire che per accendere un segmento, bisogna porre a
zero logico l’uscita corrispondente. La mappatura tra piedini della 7128S e display è
descritta nella figura seguente.
ETLlb07bb - 3 ago. 00 8
Clock
Il file contenente il programma in VHDL può essere scritto con qualunque editor di
testi, purché non inserisca caratteri di controllo nel testo (es. Notepad, edit del DOS
ecc.). L’editor del sistema MAXPLUS2 ha alcuni vantaggi in quanto colora in modo
diverso le parole chiave, i commenti ed i caratteri vietati nella descrizione. Per poter
essere accettato dal compilatore Altera, il file in VHDL deve contenere una sola Entity,
il cui nome deve essere uguale al nome del file. L’estensione del file deve essere .VHD.
Per procedere alla compilazione del progetto occorre effettuare i passi seguenti:
ETLlb07bb - 3 ago. 00 9
7. Editare il file se sono necessarie modifiche (non dovrebbero mai comparire scritte in
rosso, tutte le parole chiave devono apparire in blu, i commenti e le stringhe
assumono colore verde).
8. Definire il progetto: con la finestra di editing del file selezionata, attivare il menù
File -> Project -> Set Project to Current File.
9. Quando il file sembra corretto, attivare il compilatore: menù Max+plus II ->
Compiler. Questo attiva una finestra di monitoraggio della compilazione ed una di
messaggi dove vengono riportati eventuali errori.
10. Con la finestra del compilatore selezionata, definire il dispositivo da utilizzare:
menù Assign -> Device…; nella finestra selezionare come device family
MAX7000S e come device EPM7128SLC84-7.
11. Definire i piedini cui devono essere collegate le uscite dei display 7 segmenti e
l’ingresso di clock (i piedini sono definiti nelle pagine precedenti): utilizzare il menù
Assign -> Pin, Location, Chip… ; nella finestra relativa specificare:
• il nome del segnale nella casella Node name:;
• il piedino cui deve essere collegato, nel riquadro Chip resource, alla voce Pin:;
• cliccare sul pulsante Add e ripetere la procedura per ogni segnale.
12. Terminata la fase di definizione, eseguire la compilazione, cliccando sul pulsante
Start nella finestra del compilatore. In caso di errori compariranno dei messaggi
nella finestra apposita. Molte volte è possibile richiedere al sistema di portarsi in
editing sulla riga dove si è verificato l’errore, utilizzando il pulsante Locate dopo
aver selezionato il messaggio.
13. Reiterare editing e compilazione fino ad ottenere un progetto funzionante. Le fasi di
definizione non devono essere ripetute, vengono mantenute dal sistema a meno che
non le si cancelli esplicitamente.
14. Quando la compilazione sia corretta, recuperare l’informazione sul posizionamento
dei pin relativi ai pulsanti: visualizzare il report file, cliccando sul simbolo rpt che
si trova sotto alla casella Fitter nella finestra del compilatore. Scorrere il file
notando quante celle sono state utilizzate (all’incirca alla linea 40 del file) e la
disposizione dei piedini. Per quest’ultima, data la mole di informazione presente nel
file, la procedura più semplice è utilizzare la funzione di Find (^F) specificando
il nome del piedino.
Completate con successo queste procedure, è possibile passare a verificare sulla scheda
il funzionamento del circuito.
Programmazione e verifica
Il primo passo da effettuare è controllare che la scheda sia configurata e collegata come
descritto nella sezione Scheda UP1.
ETLlb07bb - 3 ago. 00 10
hardware presente, specificare nella casella Hardware Type: la voce
ByteBlaster.
2. Nella finestra del programmatore, cliccare sul pulsante Program. Durante la
programmazione, si accenderà sulla scheda il LED TCK. Quando questo LED si
spegne, la scheda è pronta a funzionare come cronometro digitale.
3. Provare a premere i tasti e a verificare se il funzionamento rispetta le specifiche di
progetto. La parte più delicata generalmente è nel debounce dei pulsanti: se questo
non è effettuato in modo efficace, la scheda sembra non rispondere o rispondere
male ai comandi.
4. In caso di funzionamento non corretto, modificare il programma e riprogrammare il
dispositivo. Per fare ciò non è necessario spegnere e riaccendere la scheda.
ETLlb07bb - 3 ago. 00 11