Sei sulla pagina 1di 42

UNIVERSITÀ DEGLI STUDI DI ROMA

“TOR VERGATA”

FACOLTÀ DI INGEGNERIA

Corso di Circuiti Integrati per Telecomunicazioni

Studio ed implementazione di un PLL che utilizza


un Fine Tuning Circuit per aumentare la
risoluzione in frequenza del VCO

PROFESSORE CANDIDATI
G.C. Cardarilli Marco Mattei
Manuel Papasidero

Anno accademico

2009/20010
2
Sommario

Introduzione .............................................................................................................................. 4

Direct Digital Synthesis DDS....................................................................................................... 5

Fine Tuning Circuit...................................................................................................................... 7

Phase Locked Loop ................................................................................................................... 10

Approssimazione lineare e funzione di trasferimento .................................................................. 13


Progettazione PLL del secondo ordine........................................................................................... 16
Fine Tuning Circuit (Simulink) ................................................................................................... 17

Simulazione comportamento fine tuning circuit 4-stages............................................................. 18


DDS simulink .................................................................................................................................. 19
PLL double floating point precision ........................................................................................... 23

Simulazione Pll con salto di fase .................................................................................................... 27


Simulazione Pll con segnale d’ingresso rumoroso ......................................................................... 28
PLL fixed point precision........................................................................................................... 31

Analisi spettrale.............................................................................................................................. 33
HDL Coder ................................................................................................................................ 36

Conclusioni .............................................................................................................................. 41

Bibliografia .............................................................................................................................. 42

3
Introduzione

In questo lavoro siamo andati a realizzare il modello Simulink del Fine Tuning Circuit [1], e dopo
averne simulato il corretto funzionamento abbiamo connesso in cascata quattro stadi dello stesso
riuscendo ad aumentare notevolmente la risoluzione in frequenza di un DDS a 16 bit. Utilizzando
questo modello di DDS come oscillatore controllato in tensione (VCO) abbiamo realizzato una
struttura PLL in grado di seguire eventuali variazioni delle frequenze e delle fasi del segnale in
ingresso. Una volta realizzata la struttura in double precision siamo passati alla realizzazione dello
stesso circuito in precisione fixed point con diversi gradi di quantizzazioni andando poi a
confrontare tra loro le rispettive FFT del segnale d’uscita. Infine, servendoci di HDL Coder,
abbiamo ottenuto la descrizione del circuito tramite codice vhdl. Dopo aver sintetizzato il tutto su
diversi tipi di FPGA abbiamo verificato e messo a confronto tra loro diversi parametri, come
percentuale di area occupata e frequenza massima di funzionamento.

4
Direct Digital Synthesis DDS

La Direct Digital Synthesis (DDS) è una metodologia di generazione di forme d’onda arbitrarie
(generalmente sinusoidali) partendo da un singolo oscillatore di riferimento detto Numerically
Controlled Oscillator (NCO). In figura 1 è mostrato lo schema a blocchi di un generico generatore
di funzione DDS. La funzione seno viene immagazzinata in una memoria RAM, la cui uscita
sinusoidale in formato digitale può essere convertita in una forma d’onda analogica per mezzo di
un DAC. I gradini ottenuti all’uscita del DAC sono filtrati da un filtro passa basso per ottenere così
in uscita una forma d’onda sinusoidale pulita. La frequenza di oscillazione dell’onda sinusoidale
dipende dal rate con il quale vengono cambiati gli indirizzi di lettura delle locazioni della RAM. Gli
indirizzi sono generati sommando una costante, immagazzinata nel registro di incremento di fase
(PIR), all’accumulatore di fase. Solitamente il rate della somma è mantenuto costante e la
frequenza viene modificata andando a variare il numero nel PIR. [2]

Figura 1 schema a blocchi generico DDS

5
La risoluzione in frequenza dipende dal numero di bit del PIR. Se il PIR, il sommatore, e
l’accumulatore di fase supportano ad esempio somme a 48 bit, la risoluzione in frequenza sarà:

݂௖௟௞
∆݂ =
2ସ଼

e la frequenza in uscita:

݂௖௟௞ ∙ ݅݊ܿ‫݁ݏ݂ܽ_ݎ‬
݂௢௨௧ =
2ସ଼

Dalla prima equazione vengono introdotte due possibili alternative per permettere un incremento
della risoluzione in frequenza di un DDS. La prima è quella di ridurre la frequenza di clock, mentre
la seconda consiste nell’aumentare il numero di bit dell’accumulatore di fase. Il primo caso è di
difficile realizzazione in quanto, ad ogni variazione della ݂௖௟௞ , dovrebbe corrispondere una
variazione della frequenza di cut-off del filtro passa basso. Questa variazione porta ad una
diminuzione del range di frequenze in uscita che andrebbe a contrapporsi ad un eventuale
incremento della risoluzione. Pertanto il metodo più diffuso è proprio quello che porta ad un
aumento del numero di bit dell’accumulatore di fase. Questo può essere realizzato mettendo in
cascata due NCO utilizzando le connessioni di carry input e carry output. In questa situazione il
carry output dell’NCO di ordine più basso viene connessa al carry input dell’NCO di ordine
superiore. Questo metodo non è poi così appropriato in quanto se l’unico obbiettivo è quello di
migliorare la risoluzione in frequenza, molte delle funzioni contenute nel NCO di ordine più basso
non vengono di fatto utilizzate.

6
Fine Tuning Circuit

Se il DDS in questione presenta oltre all’ingresso per l’incremento di fase anche un ulteriore
ingresso di tipo ext_carry, è possibile effettivamente aumentarne la risoluzione, il funzionamento
classico richiede che il bit ext_carry sia settato al valore logico “0”, quando invece è settato a “1” il
valore effettivo dell’incremento di fase viene aumentato, ciò permette di poter variare la
risoluzione in frequenza di un DDS semplicemente andando a controllare l’ingresso ext_carry.

Il Fine Tuning Circuit proposto nell’articolo “Increasing the Frequency Resolution of NCO-Systems
Using a Circuit Based on a Digital Adder” di R. Ertl e J. Baier [1], introduce un possibile modo per
aumentare la risoluzione controllando questo ingresso, utilizzando una struttura flessibile e con un
minimo overhead di Hardware. La cella base del Fine Tuning Circuit, è composta da un Full-Adder
più due registri di tipo D, posizionati sulle uscite.

Figura 2 schema e tabella verità full adder

7
La tabella di verità del Full-Adder è mostrata in figura 2. Possiamo vedere che l’uscita che
maggiormente ci interessa è Cout ; se Ti e Ci sono uguali l’uscita non commuta e il suo valore logico
è pari al valore degli ingressi, se invece essi differiscono Cout si prende il valore di Sout. Se ora
connettiamo l’uscita Cout all’ext_carry del NCO la risoluzione in frequenza potrebbe aumentare di
un fattore 2 in caso di Cout=1.

Un ulteriore incremento può essere realizzato andando a connettere in cascata più celle
elementari del circuito mostrato nella pagina precedente come mostrato in figura 3:

Figura 3 ftc 4-stages

I 4 bit di Fine Tuning T0…..T3 controllano l’ingresso della corrispettiva cella di Fine Tuning, il
secondo ingresso di ogni stato è il carry ouput dello stato precedente, mentre C4 è collegato
all’ ext_carry del NCO. In questo modo è possibile avere 24 combinazioni diverse del segnale
d’uscita e la nuova risoluzione in frequenza sarà:

∆݂
∆݂ ᇱ =
2௄

con K pari al numero di fine tuning bits. A seconda della configurazione degli ingressi abbiamo
un’uscita periodica con periodo 2K=16, maggiore è il numero di bit a 1 in un singolo periodo,
maggiore sarà il valore della Fout del DDS. La sequenza di Carry output di un K-stage Fine Tuning

8
Circuit è la stessa di un K-bit phase accumulator, dunque non ci sono differenze nelle proprietà
spettrali della sinusoide realizzata con questo metodo. Invece quando si vuole passare da una
frequenza ad un’altra, dobbiamo aspettare alcuni cicli di clock affinché si abbia in uscita (ossia sul
Carry output) la sequenza corretta.

Le 16 combinazioni del riporto d’uscita vengono mostrate nella figura seguente:

T0 T1 T2 T3 Carry output # 1 States # Clock Cycles


0 0 0 0 …0000 0000 0000 0000… 0 0
1 0 0 0 …1000 0000 0000 0000… 1 3
0 1 0 0 …1000 0000 1000 0000… 2 2
1 1 0 0 …1000 0010 0001 0000… 3 13
0 0 1 0 …0010 0010 0010 0010… 4 1
1 0 1 0 …0100 1001 0010 0010… 5 11
0 1 1 0 …1001 0100 1001 0100… 6 4
1 1 1 0 …1010 1010 0101 0100… 7 13
0 0 0 1 …0101 0101 0101 0101… 8 0
1 0 0 1 …0101 0110 1010 1011… 9 11
0 1 0 1 …1011 0110 1011 0110… 10 10
1 1 0 1 …0110 1110 1101 1011… 11 5
0 0 1 1 …1101 1101 1101 1101… 12 15
1 0 1 1 …1111 1011 1101 1110… 13 3
0 1 1 1 …1111 1011 1111 1011… 14 4
1 1 1 1 …1111 1111 1111 1110… 15 5

9
Phase Locked Loop

I phase-locked loop (PLL) sono dispositivi non lineari che vengono solitamente studiati attraverso
dei modelli linearizzati che sono però validi soltanto quando il segnale in uscita dall’oscillatore
controllato in tensione è agganciato al segnale di riferimento, perché fino ad allora hanno un
comportamento estremamente non lineare.

Il PLL è un sistema elettronico controreazionato, composto essenzialmente da tre componenti: un


circuito moltiplicatore o rivelatore di fase, un filtro lineare di tipo RC passa-basso e un oscillatore
controllato in tensione, come illustrato in figura 4:

Figura 4 pll generico con rivelatore di fase

Il rivelatore di fase, per segnali analogici, è formato da un circuito moltiplicatore, per cui produce
sulla sua uscita componenti con frequenza somma e differenza tra quelle applicate al suo ingresso.
Il filtro passa-basso elimina le componenti ad alta frequenza e lascia passare il segnale di tensione
proporzionale alla differenza tra le frequenze e le fasi dei segnali in ingresso al rivelatore di fase; il
segnale di uscita del filtro costituisce l'ingresso del VCO.

Il VCO è un oscillatore controllato in tensione, il quale genera un segnale con frequenza


dipendente dalla tensione applicata al suo terminale di controllo. In assenza di segnale in ingresso
al rivelatore di fase, il VCO genera un segnale con frequenza costante ݂଴ , detta frequenza di
oscillazione libera (free run). Quando, invece, è applicato un segnale di frequenza ݂௉
sufficientemente prossima a ݂଴ , il rivelatore di fase, che rappresenta il blocco di confronto del
sistema retroazionato, paragona la frequenza e la fase del segnale d'ingresso con quella del

10
segnale proveniente dal VCO e produce alla sua uscita una tensione di errore e(t) con componenti
a frequenza somma e differenza tra le due.

Da un punto di vista funzionale il rivelatore di fase non è altro che un moltiplicatore, tale che

Applicando le formule di Werner

Il filtro passa-basso posto alla sua uscita lascia passare solo la componente a frequenza differenza
(naturalmente se il valore è tale da rientrare nella banda passante del filtro) ed elimina tutte le
altre ad alta frequenza presenti all'uscita del rivelatore di fase. La componente ݁଴ è quindi una
tensione di errore proporzionale alla differenza tra le due frequenze ݂௉ e ݂଴ e viene applicata al
terminale di controllo del VCO per variarne la frequenza di oscillazione in maniera tale da ridurre
lo scarto di frequenza con il segnale d'ingresso. In questa fase si dice che l'anello è nello stato di
cattura.

Conseguenza di questo funzionamento è che la differenza tra le due frequenze tende a ridursi a
zero; si ottiene così la sincronizzazione del VCO, che aggancia la frequenza del segnale d'ingresso e
la tensione di errore si mantiene costante. Il segnale di uscita del VCO presenta dunque la stessa
frequenza (݂௏஼ை = ݂௉ ) e fase molto prossima a quella del segnale d'ingresso (anello nello stato di
aggancio). In questa situazione il segnale di uscita dal filtro è una componente continua,
dipendente dal prodotto delle ampiezza dei due segnali e dalla differenza fra le loro fasi.

Viene definito campo di cattura l'intervallo di frequenze, intorno alla frequenza di oscillazione
libera ݂଴ del VCO, in cui l'anello riesce ad agganciare la frequenza del segnale d'ingresso. Si
definisce campo di aggancio l'intervallo di frequenze, intorno alla frequenza di oscillazione libera
del VCO, in cui l'anello riesce a seguire le variazioni di frequenza del segnale d'ingresso, dopo
averla agganciata. Il campo di cattura risulta più piccolo del campo di aggancio.

Durante la fase di aggancio la frequenza del VCO risulta uguale a quella del segnale esterno a
meno di una piccola differenza di fase che serve a produrre la tensione di errore che mantiene la
frequenza del VCO agganciata a quella del segnale d'ingresso, nel caso di variazione di
11
quest'ultima. La tensione di errore, durante l'aggancio di fase, è quindi un indicatore di qualsiasi
variazione di frequenza del segnale d'ingresso .

Se il segnale d'ingresso è modulato in frequenza e il PLL è agganciato alla frequenza portante ݂௉ ,


poiché questa contiene le deviazioni di frequenza dovute alla modulazione, il VCO tenderà a
seguire continuamente il valore istantaneo della frequenza del segnale d'ingresso. La tensione di
errore in uscita al filtro risulta proporzionale alle variazioni di frequenza del segnale ricevuto, per
cui una volta amplificata rappresenta il segnale modulante.

Un’altra applicazione di questo circuito è il sintetizzatore di frequenza, che è in grado di generare


frequenze variabili, il cui valore d’uscita risulta sempre essere multiplo di una frequenza di
riferimento in ingresso.

θ (t ) φ (t )
S (φ (t ))

θˆ ( t )
t
∫0

Figura 5 Modello in banda base di un anello ad aggancio di fase

Nella figura 5 viene presentato lo schema in banda base del PLL . Al posto del phase detector c’è
un sommatore seguito da un blocco non-lineare che ne rappresenta la caratteristica, in questo
caso (rivelatore moltiplicativo) ܵ൫߶(‫)ݐ‬൯ = ‫ ܣ‬sin ߶(‫)ݐ‬. Inoltre il VCO è stato sostituito da un
integratore ideale. E’ interessante notare che le variabili ߠ(‫ )ݐ‬e ߠ෠(‫ )ݐ‬appaiono esplicitamente in
questo modello mentre nello schema a blocchi del PLL esse comparivano solo come argomenti di
funzioni del tempo. Altro risultato importante è che in questo modello non è presente la
frequenza di riposo, questo spiega perché lo schema sia detto in banda base del PLL. Come si può
notare il modello adottato è non-lineare, il che rende una trattazione matematica del sistema
abbastanza difficoltosa. L’approssimazione lineare dell’equazioni che regolano il funzionamento
del PLL ci fornisce un metodo d’analisi semplice e veloce.[3]

12
Approssimazione lineare e funzione di trasferimento

Supponiamo che il PLL sia a regime di funzionamento e che non ci siano disturbi, se è
dimensionato correttamente, è lecito aspettarsi che la fase stimata ߠ෠ sia molto vicina alla fase in
ingresso ߠ. Sotto queste condizioni ߶(‫ ≪ )ݐ‬1 rad per ogni istante di tempo. In questo caso
possiamo far uso dell’ approssimazione :

sin ߶(‫)ݐ(߶ ≈ )ݐ‬

e quindi trascurare tutte le non-linearità. L’equazione linearizzata del PLL diventa quindi:

݀߶(‫ߠ݀ )ݐ‬ ௧
= − ‫ ܣܭ‬න ݂(‫ ݐ‬− ߬) ߶(߬)݀߬
݀‫ݐ‬ ݀‫ݐ‬ ଴

con ‫ܭ = ܣܭ‬଴ ‫ܭ‬௠ ‫ܭ‬ଵ ‫ܣ‬, rispettivamente i guadagni del VCO, del moltiplicatore e l’energia del
segnale generato localmente dall’oscillatore digitale.

Si può notare subito un limite dell’approssimazione lineare: durante la fase d’acquisizione,nella


quale ߠ෠ viene portata dal suo valore iniziale fino a ߠ, nulla garantisce che ߶(‫ ≪ )ݐ‬1 e che, quindi, il
modello lineare sia valido. Nonostante questo alcune importanti caratteristiche del PLL possono
essere facilmente ricavate dall’equazione linearizzata. Per analizzare un sistema lineare è
conveniente spostarsi nel dominio di Laplace. Ammettendo l’esistenza delle trasformate:


φ ( s ) = ∫ φ (t )e − st dt
0

θ ( s ) = ∫ θ (t )e− st dt
0

e per θ (t = 0) = φ (t = 0) = 0 , possiamo riscrivere l’equazione del PLL :

sφ ( s ) = sθ ( s ) − KAF ( s )φ ( s )

13
Dalla quale si ricava facilmente la funzione di trasferimento dell’errore:

φ (s) s

=
θ (s) s + KAF ( s )

Il diagramma a blocchi che realizza questa equazione è illustrato in Fig 6

θ( s ) φ (s )

θ̂(s)

1
s

Figura 6 Modello linearizzato di un PLL.


Sostituendo φ (s) con θ ( s ) − θ ( s ) otteniamo la funzione di trasferimento ad anello chiuso:

θ (s) G0 ( s )
H ( s) = ∧
=
θ (s) 1 + G0 ( s )

dove G0 ( s) è la funzione di trasferimento ad anello aperto e vale

KAF ( s )
G0 ( s ) =
s

Esiste quasi sempre una differenza ∆ω tra la frequenza del segnale e quella dell’oscillatore locale,
dovuta, ad esempio, alle inevitabili differenze esistenti tra l’oscillatore del trasmettitore e quello
del ricevitore. A causa di tutto questo, per annullare completamente l’errore, come verrà spiegato
in seguito, serve un PLL del secondo ordine. Un PLL si dice del secondo ordine se la sua funzione di
trasferimento ad anello chiuso ha almeno due poli, il che implica che F(s) deve avere almeno un

14
polo. Dato che i PLL del secondo ordine sono di gran lunga i più diffusi, limiteremo il nostro studio
a questo caso, sebbene i metodi usati valgano per i PLL di qualsiasi ordine. In Figura 7 sono
elencate le funzioni di trasferimento, le realizzazioni circuitali e i diagrammi di Bode di due tra i più
usati filtri d’anello, quello attivo e quello passivo. Il filtro passivo è un filtro Passa-Basso con un

polo in s = −1/ T1 , mentre quello attivo è un integratore perfetto, cioè sempre un Passa-Basso ma
con un polo in zero, e la sua realizzazione circuitale richiede la presenza di un amplificatore con un
alto guadagno.

Figura 7 Filtro attivo e passivo

15
Progettazione PLL del secondo ordine

Partendo dalle specifiche del nostro progetto, si illustrerà la progettazione di un filtro attivo del
secondo ordine con una frequenza di attraversamento:

߱௖ = 2ߨ30 ሾ‫ݖܪ‬ሿ = 188,4 ሾ‫݀ܽݎ‬/‫ܿ݁ݏ‬ሿ

e margine di fase pari a:

߶ோ = 60°

Ricordando che nel caso di Pll del secondo ordine si ha:

1/ 2 1/ 2
 KA  T  KA  T2ω n
ωn =   ζ = 2   =
 T1  2  T1  2

e che inoltre

߱௖ = 2ߞ߱௡

si passa alla progettazione vera e propria del filtro partendo dalla relazione che lega il margine di
fase al fattore di smorzamento ߞ:

ߞ ≈ 0.01߶ோ = 0.6 ሾ݃‫݅݀ܽݎ‬ሿ

Una volta calcolati i valori di ߞ ݁ ߱௡ , utilizzando le equazioni descritte in precedenza, è possibile


௄஺
derivare i valori di ܶଶ e ்భ
che rispettivamente saranno pari a :

(2ߞ)ଶ
ܶଶ = = 7,64 ݁ ିଷ
߱௖

‫ܣܭ‬ ߱௖ ଶ
= ߱௡ ଶ = ൬ ൰ = 24.649
ܶଵ 2ߞ

Pertanto, andando ad inserire i valori ottenuti all’interno della funzione ad anello aperto del
circuito attivo descritto nel paragrafo precedente, si ottiene:

݇‫ ܣ‬1 + ‫ܶݏ‬ଶ 1 + 7,64݁ ିଷ ‫ݏ‬


‫ܩ‬଴ (‫= )ݏ‬ =
‫ܶݏ ݏ‬ଵ 4,056݁ ିହ ‫ ݏ‬ଶ

16
Fine Tuning Circuit (Simulink)
Per poter realizzare la struttura di cui si è parlato nelle pagine precedenti è stato utilizzato
Simulink, un tool di Matlab, che ci permette di descrivere attraverso dei blocchi il comportamento
del sistema e eseguire le simulazioni opportune.

Prima di tutto si è realizzato un semplice Full-Adder, che è l’elemento base della struttura Fine-
Tuning, attraverso porte logiche di tipo AND, sommatori a 2 e 3 ingressi ed infine dei blocchi
Compare to Constant. Questi ultimi blocchi ci permettono di avere un valore logico 1 in uscita
rispettivamente se l’ingresso è pari a 1 (sul ramo relativo a Sout) oppure se il suo valore è maggiore
di 1 (sul ramo relativo a Cout).

Figura 8 ftc con blocchi simulink

Il valore che si propagherà agli stati successivi sarà dunque dipendente da ܶ଴ ; se sarà 0 si
propagherà anche anche su Cout, altrimenti in uscita passerà il valore logico di Sout. Per realizzare
una struttura a 4 stadi basta connettere in serie 4 Full-Adder di questo tipo. Ovviamente in questo
caso il valore di Cout dipenderà dai 4 Fine Tuning Bits ܶ଴ , ܶଵ , ܶଶ , ܶଷ .

17
Simulazione comportamento fine tuning circuit 4-stages

Abbiamo effettuato la simulazione del comportamento del riporto d’uscita per una combinazione
di questi ingressi pari a “1011”, imponendo che i Fine Tuning Bits (settati a precedentemente a
“0000”) assumano questi valori al 5° colpo di clk. La tabella 2 [1] riporta la sequenza del Carry
Output, il numero di ‘1’ logici presenti in essa ed il numero di clock cycles necessari prima che essa
si ripeti in maniera periodica, proprio per la combinazione di ingressi da noi utilizzata nella
simulazione:

Tabella 2 dati per ingressi “1011”

Dai risultati ottenuti nella nostra simulazione (mostrati in figura 9), si può notare come
effettivamente il numero di clock cycles che bisogna attendere affinché la sequenza del carry
ouyput sia quella desiderata è pari a 5 (partendo dal 5° clk in cui commutano gli ingressi), ed il
numero di livelli logici alti è proprio pari a 11 su 16. A causa di questo # di Clock Cycles, la nostra
analisi va considerata tra l’11° e il 27° colpo di clk.

Figura 9 simulazione ftc ingressi "1011"

Dal confronto tra la sequenza periodica del carry out ottenuta dalla nostra simulazione e quella
riportata in tabella 2, rispettivamente “0110110110110111” e “0110111011011011”, abbiamo
dimostrato che la sequenza della tabella indica solamente quanti bit a 0 e a 1 sono presenti nella
Word in uscita, e la loro alternanza.

18
DDS simulink

Il passo successivo è la realizzazione del DDS, sempre sulla stessa piattaforma di sviluppo. Gli
ingressi all’accumulatore sono tre:

• L’incremento principale: che definisce la Frequenza della sinusoide generata


• Il carry output della struttura precedente analizzata
• Il valore della somma dell’istante precedente

Figura 10 DDS ingresso pll

Il compito che ha l’accumulatore è la generazione di una rampa che vada a leggere


oppurtanamente i valori della funzione coseno (in questo caso), presenti nella ROM.

Figura 11 simulazione accumulatore

19
La frequenza del coseno in uscita dipende dal valore dell’incremento principale secondo:

݂௖௟௞ ∙ ݅݊ܿ‫݁ݏ݂ܽ_ݎ‬
݂௢௨௧ =
2ே

con N pari al numero di bit dell’accumulatore. Dunque a parità di incremento i parametri su cui
possiamo agire per avere una determinata frequenza sono Fclk e la profondità della memoria.

Fclk Profondità memoria Risoluzione Risoluzione


no FT con FT
20 Mhz 12 bit 4.885 Hz 305 Hz
20 MHz 16 bit 305 Hz 19 Hz
Tabella 3 risoluzione in frequenza 12-16 bit

In tabella 3 si nota la differenza della risoluzione che si ottiene scegliendo una ROM con 4096
locazioni o 65536, per il nostro progetto abbiamo optato per la seconda scelta, perché con l’uso
del Fine Tuning siamo riusciti ad ottenere una risoluzione pari a 19 Hz, ottimale anche per quanto
riguarda l’uso di questo dispositivo come VCO di un Phase Locked Loop. Con queste specifiche per
raggiungere la Fout desiderata, pari a 10 Khz, l’incremento da dare all’accumulatore è 32. La forma
d’onda generata si può vedere in figura 12:

Figura 12 uscita DDS 10kHz

20
Ovviamente dobbiamo ricordare che la forma d’onda in uscita non è una sinusoide pura, in quanto
stiamo leggendo la ROM con passo 32, e dunque rappresentandola con soli 2048 campioni e non
con i totali 65536. Ciò produce delle spurie che si vanno a sommare alla frequenza portante.

Figura 13 fft sinusoide d’uscita DDS

In figura si può notare che comunque essendo un progetto fatto in double floating point precision
l’ SFDR (Spurious Free Dinamic Range) risultante è circa 159.6 dB

Ovviamente per poter implementare un dispositivo di questo tipo su un hardware dedicato è


necessario passare il progetto in fixed point, ossia andare a quantizzare la parte decimale dei valori
memorizzati in tabella. La memoria è infatti l’elemento che occupa maggiore area e quindi è
necessario andare a ridurre la lunghezza di parola dei campioni memorizzati nella ROM.

21
Quantizzando a 16 e a 8 bit otteniamo rispettivamente un SFDR pari a 61 dB e 36 dB, come
mostrato nelle figure 14 e 15:

Figura 14 fft sinusoide d’uscita DDS fxp 16 bit

Figura 15 fft sinusoide d’uscita DDS fxp 8 bit

22
PLL double floating point precision

Una volta descritta e simulata la struttura del DDS che utilizza un Fine Tuning Circuit per
aumentare la risoluzione in frequenza abbiamo realizzato, sempre su simulink,
simulink, un circuito PLL che
utilizza questa particolare struttura di DDS come oscillatore controllato in tensione (VCO). Lo
schema del circuito
ito è rappresentato in Figura 1:

Figura 16 schema a blocchi PLL

Come si può notare dalla figura, un segnale sinusoidale


sinus in ingresso viene moltiplicato per il segnale
uscente dal VCO. Il risultato di questa moltiplicazione viene poi filtrato (e poi moltiplicato per un
guadagno opportuno) in modo tale da eliminare le componenti ad alte frequenze, così come
descritto in maniera più dettagliata nel capitolo precedente.. Il valore del guadagno, e dell’offset a
cui il segnale viene poi sommato, sono stati scelti in maniera tale da far oscillare il VCO alla sua
frequenza di riposo ݂଴ = 10T:;
T:;. Infatti nel momento in cui il segnale di ingresso abbia anch’esso
una frequenza pari a quella di riposo,
riposo, il segnale in ingresso al VCO oscillerà tra valori compresi tra
23
524,6 e 525,4, così in uscita dal convertitore ADC a 10 bit si avrà un segnale costante a 525. A
questo punto da questo segnale vengono estratti i 4 bit meno significativi che vanno in ingresso al
fine tuning circuit, diventando così i bit ܶଷ, ܶଶ, ܶଵ, ܶ଴ di cui si è parlato nel capitolo precedente. I bit
restanti, (opportunamente divisi per 2ସ ) vanno al quinto ingresso del DDS, ovvero quello dedicato
all’incremento di fase che, per far oscillare il segnale a 10݇‫ ݖܪ‬con un accumulatore di fase a 16
bit, deve valere 32. Infatti prendendo il segnale in uscita dal convertitore che in binario è pari a
“100001101” e andandolo a ‘tagliare’ dividendolo per 2ସ , si ottiene “100000” ovvero proprio il 32
decimale necessario all’incremento di fase del VCO. Le porte AND presenti tra il selettore di bit e il
VCO, e con un ingesso fisso ad 1, permettono di mandare in ingresso al fine tuning circuit valori
che siano o ‘0’ o ‘1’ andando in questo modo a simulare perfettamente il comportamento binario
del sistema.

Una volta descritto come inizializzare il VCO alla sua frequenza di riposo vediamo come
effettivamente l’oscillatore è in grado di dare in uscita un segnale della stessa frequenza del
segnale di ingresso, anche in presenza di variazioni della frequenza di quest’ultimo.

In figura 17 è mostrato il segnale di errore che va in ingresso al VCO prima della conversione
analogico digitale, nel caso in cui il segnale di ingresso passi da 10.015‫ ݖܪ‬a 10.030‫ݖܪ‬, e poi una
volta assestato il segnale di uscita a 10.065‫ݖܪ‬.

Figura 17 aggangio PLL

24
Dalla figura 17 si può facilmente vedere come si parte inizialmente da una situazione di equilibrio
in cui il VCO e il segnale di ingresso oscillano entrambi alla frequenza di riposo e il valore
dell’errore è proprio 525 per le ragioni descritte in precedenza. Questo equilibrio viene rotto a
0.01s quando la frequenza del segnale di ingresso passa istantaneamente a 10.030‫ ݖܪ‬. Dopo
0,15s il segnale di errore si assesta in maniera definitiva intorno a 526 mandando così in ingresso
al fine tuning “1101” e al phase accumulator 32, e proprio questi valori permettono al VCO di far
oscillare il suo segnale di uscita a 10.030‫ݖܪ‬, rendendo effettivo l’aggancio col segnale di ingresso.

Per confermare la flessibilità del PLL e verificare che una volta agganciato il segnale, questo sia
ancora in grado di seguire eventuali variazioni di quello in ingresso, a 0,5s viene portato il segnale
in ingresso a frequenze superiori. Si può vedere come ancora una volta l’errore dopo diverse
fluttuazioni, questa volta per un tempo maggiore dovuto al maggiore ∆݂ applicato al segnale in
ingresso, si assesti (a 0,67s) intorno ad un valore costante pari a 528. Questo valore manda in
ingresso al fine tuning una sequenza di bit pari a “0000” e il valore 33 al phase accumulator in
modo da generare una sinusoide a 10.060‫ ݖܪ‬proprio pari a quella in ingresso.

Un’ulteriore prova per dimostrare la validità del progetto è stata quella di applicare al segnale di
ingresso anche un ∆݂ negativo. Pertanto la frequenza del segnale di ingresso si sposterà dalla
frequenza di riposo ݂଴ verso frequenze più basse. L’andamento dell’errore è mostrato in figura 18:

Figura 18 aggangio PLL con variaz di freq negativa

25
Ancora una volta è possibile notare come, dopo diverse fluttuazioni, il segnale si stabilizzi intorno a
due valori costanti 524 e 523 rispettivamente per frequenze d’ingresso pari a 9.995‫ ݖܪ‬e 9.975‫ݖܪ‬.

Nelle figure seguenti vengono mostrate sovrapposte le forme d’onda in ingresso (viola) e in uscita
dal VCO (gialla) in due momenti differenti andando così a mostrare come, alla variazione dei
segnali d’ingresso, segua prima uno sfasamento tra i due segnali fino a 180° (figura 19) e poi un
riaggancio della fase a 90° (figura 20) nel momento in cui il segnale d’uscita riesce a raggiungere la
frequenza del segnale d’ingresso:

Figura 19 sfasamento segnali 180°

Figura 20 sfasamento segnali 90°


26
Simulazione Pll con salto di fase

Avendo realizzato un filtro del secondo ordine, oltre a variazione della frequenza, il nostro
dispositivo dovrebbe essere in grado di agganciare anche un salto di fase del segnale in ingresso.
Pertanto abbiamo simulato proprio questa situazione, applicando un gradino di ampiezza 500, alla
rampa di indirizzamento della memoria seno andando così a realizzare il salto di fase.

Dalla figura 20.1 è possibile notare come ancora una volta il dispositivo si comporti in maniera
corretta, rispettando le attese teoriche, agganciando la fase del segnale in ingresso oscillando così
alla sua stessa frequenza:

Figura 20.1 errore ingresso VCO dopo salto di fase

27
Simulazione Pll con segnale d’ingresso rumoroso

Un’ulteriore prova che si è effettuata è stata quella di vedere il comportamento del Pll nel caso in
cui in ingresso arrivi un segnale sinusoidale sporcato da rumore Gaussiano.

Figura 21 schema a blocchi con dds + rumore

Questo caso rispecchia più fedelmente ciò che succede nella realtà, in cui le forme d’onda sono
difficilmente prive di rumore. Nelle prossime figure possiamo vedere come il seno generato dal
DDS in ingresso, sebbene oscilli alla frequenza di 10.03 Hz (figura 22), abbia molte più componenti
spettrali che si sommano alla portante (figura 23).

Figura 22 sinusoide 10kHz con rumore


28
Figura 23 fft sinusoide con rumore

In questo caso, come è possibile notare dalla figura, abbiamo dunque uno Spurious Free Dynamic
Range notevolmente minore rispetto alla stessa sinusoide priva di rumore, passiamo infatti da
circa 50 dB a 35 dB.

E’ interessante notare come la sinusoide che viene generata dal VCO del PLL in esame, che va ad
agganciare la forma d’onda in ingresso, sia invece abbastanza ‘pura’ e presenti addirittura un SFDR
notevolmente maggiore (figura 24).

Ciò può essere spiegato col fatto che la struttura realizzata è abbastanza rigida ai disturbi, infatti il
blocco che divide l’ampiezza del valore in uscita del filtro ci permette di limitare l’escursione
dell’errore intorno a quel valore binario che fa oscillare il VCO intorno al valore corretto, evitando
di produrre delle spurie a frequenza molto vicina a quella di aggancio. Si può inoltre osservare che
anche il filtro LP elimina quelle componenti a frequenza più alta che ‘sporcano’ la sinusoide in
ingresso.

29
Figura 24 fft sinusoide uscita VCO

30
PLL fixed point precision
Una volta realizzata la struttura in double floating point, si è passati alla realizzazione in precisione
fixed point per visualizzare eventuali differenze e per una descrizione del circuito in linguaggio
Vhdl tramite il tool di Simulink HDL Coder, a cui potrebbe seguire un’implementazione su
dispositivo Fpga.

Per fare questo, attraverso il Functional Block Parameter, abbiamo modificato la tipologia dei
segnali andando a variare i parametri dei singoli blocchi del circuito.

Figura 25 functional block parameters

La modifica probabilmente più significativa alla struttura double precision, è stata la


trasformazione del filtro passa basso dal dominio di Laplace a quello in ‫ ݖ‬in quanto, proprio per
definizione, la trasformata zeta può essere vista come l’analogo della trasformata di Laplace nei
casi di segnali a tempo discreto.

31
Utilizzando la trasformazione bilineare:
2 1 − ‫ି ݖ‬ଵ
‫ =ݏ‬ቆ ቇ
ܶ 1 + ‫ି ݖ‬ଵ

con ܶ pari al periodo di campionamento, si passa da una funzione di trasferimento del filtro pari a:

1 + 7,8݁ ିଷ ‫ݏ‬
‫= )ݏ(ܪ‬
0,31݁ ିସ ‫ݏ‬
ad una in ‫ ݖ‬definita come:

0,98 − 0,979993‫ି ݖ‬ଵ


‫= )ݖ(ܪ‬
1 − ‫ି ݖ‬ଵ

Un’altra importante modifica effettuata al circuito, per rendere così possibile la generazione del
codice vhdl, è stata quella di sostituire i blocchi sommatori e di comparazione interni al Fine
Tuning Circuit, con delle porte logiche OR o XOR. Questa sostituzione non comporta variazioni a
livello funzionale del sistema rendendo però possibile l’utilizzo di HDL Coder. In figura 26 è
riportata la nuova struttura di un singolo stadio del fine tuning:

Figura 26 singolo stadio fine tuning circuit fxp

32
Analisi spettrale

Una volta verificato che la struttura fixed point manteneva lo stesso comportamento di quella
double, abbiamo verificato come varia la purezza spettrale della sinusoide generata nel VCO in
seguito a diverse quantizzazioni della lut in cui sono stati memorizzati i suoi valori.

Per effettuare queste misurazioni ci siamo serviti del seguente codice matlab:

prima si è definita la funzione positiveFFT:

per poi applicarla ai vettori di interesse prelevati dalla simulazione di simulink su un numero di
punti scelto in maniera opportuna:

33
Sono state fatte tre diverse prove mantenendo in tutte la lut del DDS d’ingresso quantizzata a 18
bit. Le figure 27, 28 e 29 riportano le FFT del segnale in uscita dal VCO quantizzato rispettivamente
a 18, 14 e 10 bit:

Figura 27 fft sinusoide VCO 18 bit

Figura 28 fft sinusoide VCO 14 bit

34
Figura 29 fft sinusoide VCO 10 bit

Dalle figure mostrate sopra, che riportano la purezza spettrale, è possibile notare come questa
vada a degradarsi all’aumentare della quantizzazione. I risultati ottenuti sono riportati in tabella 3:

#bit segnale SFDR out VCO [dB]

18 49
14 45
10 40
Tabella 3

35
HDL Coder

Per poter implementare il progetto del PLL su una FPGA, come descritto in precedenza, è
necessario convertire i blocchi simulink in un linguaggio HDL attraverso il tool di Matlab HDL
Coder.

Dopo aver effettuato le modifiche al circuito descritte nel capitolo precedente, abbiamo studiato
la sintesi del dispositivo descritto tramite il linguaggio vhdl per diversi livelli di quantizzazione.
Naturalmente il codice generato da HDL Coder del Pll in esame, non è ottimizzato come se lo
stesso codice fosse generato manualmente. Proprio per questo nel nostro caso abbiamo dovuto
aggiungere una piccola correzione al codice inserendo un registro in uscita dalla tabella in cui
vengono memorizzati i valori del seno, ottenendo così in uscita un campione ogni colpo di clk. Se
non fosse stato effettuato questo cambiamento la tabella sarebbe stata sintetizzata non sulla
memoria RAM dedicata, che hanno a disposizione le schede FPGA, ma utilizzando i blocchi di
logica combinatoria, sprecando dunque notevoli risorse hardware.

Soffermeremo la nostra analisi sulla velocità, in termini di frequenza di clock, e sull’area occupata
dal dispositivo su FPGA.

36
Le schede che abbiamo scelto per l’implementazione sono: Spartan3 XC3S700AN e Virtex5
XC5VTX240T. Nella tabella 4 possiamo vedere le caratteristiche di questi due dispositivi:

Device Logic Cells CLBs Slices Block RAM

XC3S700AN 13.248 1.472 5.888 360Kbits

XC5VTX240T 239.616 149.760 37.440 18,576 Mbits

Tabella 4 caratteristiche dispositivi

Come si vede dalla tabella 4, le differenze tra i due dispositivi sono piuttosto nette sia in termini di
memoria che di risorse hardware. Tenendo conto di queste differenze abbiamo provato ad
implementare il dispositivo da noi realizzato su entrambe le schede, per poter così confrontare la
frequenza massima raggiungibile dal sistema e l’area occupata.

Come prima prova abbiamo sintetizzato su dispositivo Spartan3 il Pll, con la Rom del VCO
quantizzata a 16 bit di parte decimale:

Possiamo quindi vedere che, utilizzando questo tipo di dispositivo, non si avrebbe la possibilità di
implementarlo sulla scheda in quanto le risorse hardware non sono sufficienti, infatti si avrebbe
bisogno di più Slices di quante ne siano disponibili sulla Spartan3.

Sebbene il tool di sintesi abbia comunque sintetizzato questo progetto, sarebbe stato impossibile
fare le operazioni di Mapping e Routing. Mentre la frequenza di Clock massima del sistema
sarebbe stata, come si vede dai dati riportati di seguito, di 27,365 MHz.
37
A questo punto per non cambiare dispositivo abbiamo pensato di quantizzare la Rom, non più a 16
bit ma ad 8, accettando di fatto di avere un SFDR minore (circa 20 dB, come visto nel capitolo
precedente), ma migliorando decisamente l’occupazione d’area:

In questo secondo caso abbiamo un’occupazione di risorse Hardware 10 volte minori rispetto al Pll
presentato precedentemente.

Mentre dal punto di vista delle prestazioni abbiamo un miglioramento minimo (passando da
27,36MHz a 28MHz), perché la lunghezza di parola dei valori memorizzati nella ROM influenza
solamente l’occupazione d’area e non rallenta il sistema.
38
A questo punto abbiamo ritenuto opportuno implementare il progetto su Virtex5, anziché su
Spartan3, per i seguenti motivi:

• La frequenza massima raggiungibile dall’implementazione su Spartan3 può non essere


sufficiente per sistemi che richiedono prestazioni maggiori.
• Sebbene abbiamo messo il registro in uscita dalla tabella Seno, sulla Spartan3 non
riusciamo comunque ad utilizzare la memoria Ram a disposizione, in quanto è troppo
piccola per memorizzare tutti i campioni.

La Virtex5 ha infatti una memoria Ram di profondità tale che ci permette di memorizzare il valore
del seno (65.536 locazioni x 18 bit di parola) anche quantizzandolo a 16 bit. . Nelle prossime
figure è riportata l’occupazione dell’intero sistema su questo dispositivo e l’occupazione della RAM
per la memorizzazione della tabella del seno:

39
Come ci si poteva aspettare utilizzando una FPGA decisamente più performante come la Virtex 5,
ne ha risentito anche la frequenza massima del circuito, si passa infatti dai circa 27 MHz agli attuali
51 MHz:

40
Conclusioni
Al termine di diverse prove e simulazioni abbiamo concluso che, tramite l’utilizzo del fine tuning
circuit 4-stages come extra_carry_in di un DDS, si migliora nettamente la risoluzione in frequenza
del segnale in uscita di un fattore 16, arrivando come nel nostro caso ad una risoluzione di circa
20Hz. Inoltre, utilizzando questo particolare DDS come oscillatore di un Pll, abbiamo reso possibile
l’aggancio del segnale in ingresso sia in caso di variazioni sulla frequenza che sulla fase di
quest’ultimo. Comportamento che non subisce variazioni sia per ∆݂ positive che negative ed
anche in presenza di sorgenti di rumore in ingresso. Andando a confrontare i risultati delle FFT del
segnale in uscita dal VCO, abbiamo constatato che l’SFDR subisce un peggioramento nel momento
in cui si applica ai campioni della sinusoide una quantizzazione più netta. Realizzato il codice vhdl e
sintetizzato il tutto su piattaforma Xilinx, è risultata evidente la superiorità della Virtex5 rispetto
alla Spartan3 in quanto è dotata di risorse hardware nettamente maggiori e permette al
dispositivo di lavorare ad una frequenza massima superiore.

41
Bibliografia

[1] “Increasing the Frequency Resolution of NCO-System Using a Circuit Bases on a Digital Adder”
R.Erlt and J.Baier IEEE Transactions on circuits and systems vol.43, NO. 3, March 1996

[2] Direct Digital Synthesis (Application Note #5)


http://www.thinksrs.com/downloads/PDFs/ApplicationNotes/DDS.pdf

[3] L.Malesani, G.Spiazzi - 2005 - 2.6.1 – “Complementi di Elettronica II - P.L.L.”

[4] D.R.Stephens 2002 Kluwer Academic Publishers “Phase-Locked Loop for wireless
communication-Digital, Analog and Optical Iplementations”

[5] G.C.Cardarilli 2008 “Dispense corso Circuiti Integrati per Telecomunicazioni”

[6] L.W.Couch II 2002 Apogeo “Digital and Analog Communication System”

42