Analisi di Immagini e Dati Biologici Edge detection and sharpening L4-2 3131.
Implementazione della sezione digitale di un modulatore LINC per la trasmissione di segnali GSM-EDGE
description
Transcript of Implementazione della sezione digitale di un modulatore LINC per la trasmissione di segnali GSM-EDGE
UNIVERSITA DEGLI STUDI DI PAVIAFACOLTA DI INGEGNERIA
DIPARTIMENTO DI INFORMATICA E SISTEMISTICA
Implementazione
della sezione digitale
di un modulatore LINC
per la trasmissione
di segnali GSM-EDGE
Relatore:
Prof. Carla Vacchi
Correlatore:
Dott.ssa Paola Uggetti
Tesi di Laurea di
Marco Rossi
Anno Accademico 2004/2005
Indice
1 Introduzione 6
1.1 Lavoro svolto . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2 Scelta della tesi . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2 Teoria del sistema 10
2
INDICE 3
2.1 Analogico o Digitale? . . . . . . . . . . . . . . . . . . . . . . . 12
2.2 Il trasmettitore LINC . . . . . . . . . . . . . . . . . . . . . . . 14
2.2.1 Struttura . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.2.2 Teoria Matematica . . . . . . . . . . . . . . . . . . . . 17
2.2.3 Vantaggi . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.3 La sezione digitale . . . . . . . . . . . . . . . . . . . . . . . . 19
2.3.1 Modulazione PSK . . . . . . . . . . . . . . . . . . . . . 19
2.3.2 Interpolazione . . . . . . . . . . . . . . . . . . . . . . . 21
2.3.3 Il filtro FIR . . . . . . . . . . . . . . . . . . . . . . . . 23
2.3.4 Separazione del segnale . . . . . . . . . . . . . . . . . . 31
2.4 Valutazione dei risultati . . . . . . . . . . . . . . . . . . . . . 33
2.4.1 Maschera dello spettro . . . . . . . . . . . . . . . . . . 33
2.4.2 EVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3 Implementazione Matlab 36
3.1 Lo schema Simulink . . . . . . . . . . . . . . . . . . . . . . . . 37
3.2 Effetti di quantizzazione . . . . . . . . . . . . . . . . . . . . . 39
3.3 Risultati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.3.1 Quantizzazione FIR . . . . . . . . . . . . . . . . . . . . 41
INDICE 4
3.3.2 Quantizzazione Separazione . . . . . . . . . . . . . . . 45
3.3.3 Il filtro FIR . . . . . . . . . . . . . . . . . . . . . . . . 46
4 Implementazione VHDL 48
4.1 Note Implementative . . . . . . . . . . . . . . . . . . . . . . . 50
4.2 La libreria FIX-STD . . . . . . . . . . . . . . . . . . . . . . . 51
4.3 Descrizione generale . . . . . . . . . . . . . . . . . . . . . . . 53
4.4 Il filtro FIR . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.4.1 Specifiche di quantizzazione . . . . . . . . . . . . . . . 58
4.5 Il Separatore . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.5.1 Entita CORDIC.VHD . . . . . . . . . . . . . . . . . . 61
4.5.2 Specifiche di quantizzazione . . . . . . . . . . . . . . . 63
5 Conclusione 66
5.1 Risultati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.2 Sviluppi Futuri . . . . . . . . . . . . . . . . . . . . . . . . . . 68
A Fixed Point Toolbox 69
B L’algoritmo CORDIC 73
INDICE 5
C Acronimi 80
D Codice vhdl 82
11Capitolo
Introduzione
Il primo capitolo introduce al lettore l’argomento dell’elaborato, assieme ad
alcune considerazioni personali dell’autore sullo stato attuale della comuni-
cazione mobile.
6
1.1. LAVORO SVOLTO 7
Il mercato della telefonia mobile negli ultimi anni si e rivelato redditizio.
Le aziende produttrici sono incentivate dagli utili ad investire in ricerca e
sviluppo per migliorare le prestazioni dei propri prodotti; attualmente le so-
luzioni tecnologiche ci offrono apparecchi cellulari in grado di adempiere ad
una vasta gamma di funzionalita, impensabili fino a qualche anno addietro.
L’utente finale e ormai abituato ad usufruire di servizi che vanno ben al di
la della comunicazione vocale. Navigazione su Internet tramite il protocollo
WAP (Wireless Application Protocol), trasmissione in tempo reale di segna-
li video e SMS (Short Message Service) sono ormai diventati caratteristiche
comuni a molti modelli di telefoni cellulari attualmente in commercio. Per
permettere all’utente di usufruire di questi servizi sono stati sviluppati diversi
standard telefonici nei quali, tramite tecniche via via piu sofisticate di mo-
dulazione digitale, a spese di occupazioni di banda maggiori, si raggiungono
velocita di scambio dell’informazione (bit rate) sempre piu elevate. Purtroppo
l’utilizzo di queste funzionalita e ancora limitato dalla durata della batteria;
le industrie produttrici sono sempre alla ricerca del punto di equilibrio, che
minimizzi i costi (sviluppo, produzione e distribuzione) e i consumi energetici
ma allo stesso tempo offra funzionalita avanzate. Una possibile soluzione al
problema risiede nell’investire nel settore della ricerca per progettare dispo-
sitivi utilizzando componenti economici ma ad alto rendimento, in modo da
ammortizzare i costi fissi con un alto volume di vendite.
1.1 Lavoro svolto
Questa tesi ha come oggetto l’implementazione hardware della sezione di-
gitale di una tipologia di modulatore per apparecchi di comunicazione mo-
bile, in particolare del modulatore LINC (Linear Amplification using Non
linear Components). E stato progettato e ottimizzato secondo le specifiche
1.1. LAVORO SVOLTO 8
dello standard GSM-EDGE (Global System for Mobile communications -
Enhanced Data rate for GSM Evolution) ma la sua struttura modulare lo
rende adattabile a standard differenti. Il sistema nel suo complesso e compo-
sto da una sezione analogica e da una digitale. La sezione analogica e stata
studiata e implementata su silicio da dottorandi dell’universita di Pavia, in
collaborazione con ST Microelectronics. Uno studio teorico della parte digi-
tale e stato realizzato in particolare dalla dottoressa Paola Uggetti. I passi
fondamentali del mio lavoro sono stati:
• Comprendere a grandi linee il funzionamento del modulatore, at-
traverso articoli teorici pubblicati, il progetto Matlab della dott.ssa
Uggetti e i lavori di tesi precedenti.
• Studiare i risultati delle simulazioni Matlab, effettuate dalla dott.ssa
Uggetti in condizioni ideali e valutare l’impatto delle non idealita in un
sistema reale (in primis gli effetti di quantizzazione del segnale nei vari
punti del sistema, che contribuiscono in maniera notevole a degradare
le prestazioni)
• Proporre una soluzione concreta, tenendo conto dei vincoli di pro-
getto (area, potenza dissipata, velocita di funzionamento) cercando di
ottimizzare le prestazioni del sistema.
• Implementare in un linguaggio descrittivo dell’hardware il sistema, in
modo che potesse essere sintetizzato in un progetto successivo. In par-
ticolare e stato utilizzato il VHDL (Very high speed integrated circuit
Hardware Description Language).
1.2. SCELTA DELLA TESI 9
1.2 Scelta della tesi
Questa tesi sin dall’inizio mi ha molto interessato perche esamina un proble-
ma reale che puo essere risolto in modi differenti. L’ingegnere informatico
puro potrebbe risolverlo implementando algoritmi di ottimizzazione degli er-
rori di quantizzazione, mentre l’ingegnere elettronico potrebbe proporre con-
fronti con architetture differenti. Il software, sin dal nome, e qualcosa di
astratto, mentre studiare qualcosa che diverra un componente reale di un
circuito di trasmissione dati mi ha appassionato enormemente e descrivere
un circuito digitale in VHDL mi ha permesso di apprezzare ancora di piu il
punto d’incontro tra informatica ed elettronica digitale.
22Capitolo
Teoria del sistema
Per meglio comprendere l’implementazione del sistema, e necessario descrive-
re i principi teorici sui quali esso si basa. Questo capitolo contiene riferimenti
alla struttura del trasmettitore LINC e descrive come il segnale viene elabo-
rato per una corretta trasmissione. Include inoltre una descrizione dei metodi
che ho utilizzato per valutare l’esito delle simulazioni effettuate.
10
11
La comunicazione e sempre stata fondamentale per qualsiasi societa. Il lin-
guaggio, il disegno e in seguito la scrittura hanno permesso ai popoli di
evolversi e trasmettere il proprio sapere e i propri valori. In tutta la storia
dell’umanita, la quantita di informazioni accessibili a tutti non e mai stata
cosı importante come oggi. Essa si presenta sotto forma di dati, immagini,
suoni e filmati. Se l’avvento delle prime reti informatiche ha fatto intrave-
dere queste prospettive, oggi e l’insieme delle attivita umane che invoca uno
sviluppo dei sistemi di comunicazione che, al di la delle frontiere, diano nuove
dimensioni al nostro pianeta.
Sorgente Ricevente
Un sistema di comunicazione puo essere schematizzato a grandi linee con
trasmettitori di informazioni e ricettori potenziali collegati tra loro attraver-
so canali di comunicazione. I terminali sono dotati di componenti comuni,
che si occupano di ottenere l’informazione, elaborarla ed infine trasmetterla.
Il trasmettitore e un circuito che si occupa di trasferire l’informazione (sia
essa vocale o di altro genere) al canale di telecomunicazione. Il compito del
trasmettitore di cui mi occupero in questo lavoro di tesi puo essere diviso in
tre passi principali:
• modulazione
• mixing
• amplificazione
2.1. ANALOGICO O DIGITALE? 12
Tramite la modulazione si modificano le caratteristiche di ampiezza, fase o
frequenza di una portante, generata appositamente in funzione del segnale
che si vuole trasmettere. Tale segnale si trova inizialmente a una frequenza
inferiore rispetto alla frequenza prevista dallo standard di trasmissione (RF,
Radio Frequenza). Successivamente, tramite il mixing, si trasla il segnale
modulato sino alla frequenza definita. Infine, prima di giungere all’anten-
na, il segnale viene opportunamente amplificato per raggiungere i livelli di
potenza previsti. Obiettivo primario di questa tesi e di proporre una soluzio-
ne implementativa per la prima sezione, ovvero la modulazione, utilizzando
l’elettronica digitale.
2.1 Analogico o Digitale?
Realizzare il modulatore di segnale utilizzando circuiti analogici non e sempre
possibile o, per lo meno, potrebbe richiedere un grande sforzo di progettazio-
ne. Nel caso le operazioni di modulazione fossero particolarmente complesse
non e banale trovare una soluzione analogica, sempre che esista. Affidandosi
all’elettronica digitale, invece, il lavoro del progettista molte volte e facilitato.
A meno di esigenze particolari, infatti, deve implementare in un linguaggio
descrittivo le operazioni necessarie per ottenere il risultato, lasciando al cal-
colatore il compito di tradurre i costrutti in un circuito vero e proprio. Nel
caso di esigenze particolari, potrebbe essere costretto a progettare o migliora-
re manualmente sia il circuito che il layout finale. Un componente analogico
deve avere una risposta lineare alle sollecitazioni in ingresso, su tutta la banda
del segnale. Purtroppo piu le caratteristiche dei componenti analogici sono
spinte, piu il costo degli stessi aumenta. Il rovescio della medaglia e rappre-
sentato dal fatto che il circuito digitale soffre degli effetti di quantizzazione
del segnale. Diviene necessario prestare particolare attenzione alla progetta-
2.1. ANALOGICO O DIGITALE? 13
zione, per evitare di peggiorare (in termini qualitativi) il segnale elaborato
dal circuito; uno dei problemi piu impegnativi da affrontare, nella progetta-
zione di circuiti digitali, pertanto, e proprio quello di valutare l’impatto degli
errori di quantizzazione e dimensionare la dinamica del circuito. In natura i
segnali sono analogici, cioe sono funzioni continue di una variabile continua
(come ad esempio la voce), e quindi possono essere classificati come tempo
continui a valore continuo. In alcune applicazioni, pero, e necessario disporre
di segnali digitali, che possono essere classificati come tempo discreti a valore
discreto. Il passaggio tra mondo analogico e mondo digitale avviene attraver-
so un convertitore analogico digitale (ADC - Analog to Digital Converter)
ed implica due operazioni: una discretizzazione nel tempo (campionamento),
ed una discretizzazione in ampiezza (quantizzazione). Durante il processo
di campionamento, il segnale a tempo continuo x(t), viene convertito in se-
gnale a tempo discreto x(n), prelevando dei campioni (samples) del segnale
originario, in precisi istanti temporali, separati da un intervallo T. Il campio-
namento non comporta perdita di informazione, purche il segnale di ingresso
abbia banda finita e la frequenza di campionamento sia sufficientemente ele-
vata. Sotto queste condizioni, il processo di campionamento e reversibile, ed
il segnale analogico puo essere ricostruito esattamente a partire dal segnale
campionato. Durante il processo di quantizzazione, il segnale campionato
x(n), che ha valori continui in ampiezza, viene convertito in segnale a valori
discreti xq(n), scelti tra un numero finito di valori possibili. Rappresentando
un segnale a valori continui con un numero limitato di valori, si introduce un
errore, detto errore di quantizzazione (o rumore di quantizzazione eq(n), dato
dalla differenza tra il segnale in ingresso e quello in uscita dal quantizzatore:
eq(n) = xq(n) − x(n) (2.1)
Questo errore dipende dall’accuratezza, cioe dal numero di bit del processo
di conversione A/D.
2.2. IL TRASMETTITORE LINC 14
2.2 Il trasmettitore LINC
La tesi considera una tipologia di trasmettitori chiamati LINC. Il trasmettito-
re LINC fu inventato da Cox (1959) negli anni trenta allo scopo di ottenere
modulazioni di ampiezza (AM - Amplitude Modulation) di buona qualita
tramite valvole poco lineari e dalle prestazioni non propriamente ottimali.
2.2.1 Struttura
La struttura generale del sistema e la seguente:
CPUA/D
DATI
MODULATORE
PA
PA
I/O, GESTIONE TRASMISSIONE ANTENNA
Figura 2.1: Schema Funzionale - Sistema di comunicazione mobile
In ingresso si hanno due tipologie di dati: il segnale audio, che dev’essere
prima digitalizzato e altri dati, gia in formato digitale. Quando dev’essere
effettuata una trasmissione, l’unita di elaborazione centrale suddivide questi
dati in spezzoni (burst); a seconda dello standard utilizzato (GSM, GSM-
EDGE, UMTS), hanno lunghezza differente. Per semplicita durante la reda-
zione della tesi non si e tenuto conto di questo fattore, ma si e supposto che
il segnale fosse continuo. Ciascuno di questi burst viene suddiviso in blocchi
da 3 bit ciascuno, chiamati simboli (symbol).
2.2. IL TRASMETTITORE LINC 15
Definizione 2.2.1 La frequenza intersimbolica, legata al tempo che inter-
corre tra l’arrivo di un simbolo e il successivo e un parametro dettato dallo
standard di trasmissione. Essa vale 270.8 kHz e verra indicata da ora in
avanti come fL
Il blocco di trasmissione, evidenziato in verde, e formato da due sottosezioni
differenti:
MODULATORE
PA
PA
E(t)
S1(t)
S2(t)
cos(ωt)
SEZ. DIGITALE SEZ. ANALOGICA
Figura 2.2: Schema Funzionale - Trasmettitore LINC
La sezione digitale elabora il segnale d’ingresso, effettuando quattro opera-
zioni:
1. Assegna ad ogni simbolo in ingresso un punto sulla mappa di modu-
lazione PSK.
2. Interpola il segnale per poterlo filtrare in modo corretto.
3. Limita la banda del segnale che verra trasmesso, per eliminare fre-
quenze che non possono-non devono essere trasmesse.
2.2. IL TRASMETTITORE LINC 16
4. Separa il segnale in due componenti S1(t) e S2(t).
La parte della sezione digitale che raccoglie i simboli in ingresso, pertan-
to, lavora a frequenza pari a fL. Successivamente, con l’interpolazione, la
frequenza di elaborazione viene portata ad un valore piu alto.
Definizione 2.2.2 Studi teorici eseguiti dalla dott.ssa Paola Uggetti e da
collaboratori hanno stabilito che il coefficiente di sovracampionamento adatto
al sistema e 16×. La frequenza di elaborazione del segnale interpolato e quindi
16 × 270.8 kHz = 4332.8 kHz e verra indicata da ora in avanti con fM
E importante sottolineare che la variazione dei simboli si mantiene a
frequenza fL all’interno di tutta la sezione digitale. All’interno di essa,
pero, le elaborazioni sul segnale vengono eseguite a frequenza differente (fL
e fM)
La sezione analogica, invece, effettua queste operazioni:
1. Modula i segnali S1(t) e S2(t) con una portante di equazione cos(ω0t),
in modo da portarlo alla reale frequenza di trasmissione. Questa ope-
razione viene effettuata da un circuito chiamato PLL (Phase Locked
Loop). Matematicamente equivale a moltiplicare il segnale con la
sinusoide di frequenza ω0
2. Amplifica il segnale modulato per effettuare la trasmissione. Vengono
utilizzati due PA (Power Amplifiers) non lineari.
3. Ricombina il segnale modulato e lo trasmette.
2.2. IL TRASMETTITORE LINC 17
2.2.2 Teoria Matematica
Per meglio comprendere il funzionamento del trasmettitore, e opportuno esa-
minare il principio matematico su cui esso si basa. Per ipotesi suppongo di
avere a che fare con un generico segnale continuo, E(t). Questo segnale e
modulato su una generica portante descritta dall’equazione cos(ω0t + φ(t))
Sia
S(t) = E(t)cos(ω0t + φ(t)) con 0 < E(t) < Emax (2.2)
Questo segnale equivale, in forma esponenziale, a
S(t) = <{E(t)ejφ(t)ejω0t} (2.3)
Allora si puo dimostrare che
S(t) =S1(t) + S2(t)
2(2.4)
Dove
S1(t) = Emaxejφ(t)ejαejω0tS2(t) = Emaxe
jφ(t)e−jαejω0t (2.5)
e
α = arccosE(t)
Emax
(2.6)
Questo significa che il trasmettitore LINC puo produrre un segnale modulato
in ampiezza combinando l’uscita di due amplificatori pilotati tramite segnali
ad inviluppo costante modulati esclusivamente in fase.
2.2.3 Vantaggi
Il principale vantaggio del modulatore LINC e il poter trasmettere un flus-
so di dati (in rosso) utilizzando due segnali ad ampiezza costante (in blu)
2.2. IL TRASMETTITORE LINC 18
S1(t)
S2(t)
S(t)
Figura 2.3: Trasmettitore LINC - Schema fasoriale
ma a fase variabile. Cio permette di utilizzare amplificatori di potenza non
lineari e quindi economici. Per fare questo, pero bisogna investire risorse
sulla parte di sviluppo e progettazione del processore digitale di segnale. Un
altro importante vantaggio riguarda il consumo di potenza; la suddivisione
del segnale nelle due componenti di fase, infatti, non viene effettuata alla
frequenza di trasmissione del segnale (fH), ma ad una frequenza piu bassa
(fL), quindi con un minor consumo di energia. E opportuno sottolineare che
il ricevitore dovra possedere un circuito abbastanza complesso per ricavare
il segnale originario ma anche in questo caso la progettazione sara facilitata
sulla parte analogica, perche non serviranno preamplificazioni linenari.
2.3. LA SEZIONE DIGITALE 19
2.3 La sezione digitale
Una decrizione particolareggiata della sezione digitale del trasmettitore LINC
e necessaria per capire le scelte intraprese nell’implementazione. E impor-
tante, inoltre, effettuare richiami teorici sui concetti chiave che regolano il
funzionamento del sistema.
PSK INTERPOLAZIONE FIR SEPARAZIONE
MODULATORE LINC
Figura 2.4: Schema Funzionale - Modulatore LINC
2.3.1 Modulazione PSK
Il segnale di ingresso e formato da flussi di dati, composti da simboli. Ogni
simbolo, formato da 3 bit, viene assegnato ad una posizione sul cerchio di
raggio unitario, utilizzando le convenzioni della modulazione M-PSK (Phase
Shift Keying) (in questo caso M = 8). E doveroso sottolineare che la succes-
sione dei numeri, a partire dallo ‘0’, e scandita da un codice di numerazione
Gray.1
1La successione e ‘000’,’001’,’011’,’010’,’110’,’111’,’101’,’100’
2.3. LA SEZIONE DIGITALE 20
Trasmettere il simbolo 1-3-7 significa idealmente compiere il cammino trac-
ciato in figura 2.5. Nella realta cio significa trasmettere per ogni istante il
valore del modulo e della fase del vettore che si muove all’interno del cerchio
per passare tra tutti i punti. Siamo in ambito digitale, per cui il clock di
sistema definisce la frequenza intersimbolica, ovvero quella legata al tempo
che passa tra un simbolo e il successivo.
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
Im
Re
Mappatura M-PSK
1
3
2
6
7
5
4
0
Figura 2.5: Traiettoria 1-3-7
Nella figura 2.5 ogni punto in rosso rappresenta il momento in cui viene scan-
dito il clock del segnale d’ingresso. Al tempo zero ci troviamo al punto 1, e ci
2.3. LA SEZIONE DIGITALE 21
dirigiamo verso il 3, per trasmettere il secondo simbolo. Arrivati al simbolo
3, e necessario che la portante inverta bruscamente la fase. Questo si traduce,
nel dominio delle frequenze, in un’occupazione idealmente infinita della ban-
da del segnale trasmesso e impone la necessita di filtrare tale informazione.
In un sistema in cui il canale ha banda limitata, infatti, non ci si puo per-
mettere di avere un’estensione spettrale maggiore di quanto assegnato dallo
standard, poiche si potrebbe interferire con i canali adiacenti. Il filtraggio,
limitando l’estensione spettrale del segnale, modera tali interferenze. Dotare
l’apparato ricevente di un filtro in ingresso, inoltre, attenua (o elimina) le
componenti di ‘rumore’ che stanno al di fuori della banda del segnale.
2.3.2 Interpolazione
Prima dell’operazione di filtraggio e opportuno sovracampionare il segnale,
in modo da aumentare la risoluzione in uscita, e quindi delineare un cammino
piu ‘continuo’. L’interpolatore e definito come una scatola nera che raccoglie
il segnale d’ingresso ad una frequenza di valore basso e restituisce il segnale
ad una frequenza piu alta; il rapporto
OS = numero simboli in uscitanumero simboli in ingresso
e detto coefficiente di sovracampionamento (oversampling ratio).
Se indichiamo con n il numero di simboli del segnale di input e con m deno-
tiamo il fattore di sovracampionamento, il segnale in output sara costituito
da n blocchi, all’interno dei quali avremmo 1 simbolo (ossia il segnale in
ingresso) e m-1 zeri.
Esempio 2.3.1 Sia il fattore di sovracampionamento pari a 3x, sia il segnale
in input e A B C; allora il segnale di output sara A 0 0 B 0 0 C 0 0
2.3. LA SEZIONE DIGITALE 22
-1.5 -1 -0.5 0 0.5 1 1.5
-1.5
-1
-0.5
0
0.5
1
1.5Im
Re
Mappatura M-PSK
1
3
2
6
7
5
4
0
Figura 2.6: Traiettoria correttamente filtrata
In questa figura la traiettoria del segnale e correttamente filtrata, e nella
trasmissione non avvengono brusche variazioni di fase. Ogni punto rosso
rappresenta l’uscita della fase di filtraggio.
Bisogna porre attenzione alla classe di filtro utilizzato e alla scelta dei pa-
rametri, dato che un filtro troppo ‘aggressivo’ modificherebbe la traiettoria
del segnale, causando un overshoot: fenomeno per cui il modulo dell’invi-
luppo raggiunge valori molto maggiori di quelli ammissibili, determinando
uno spreco di potenza e/o cadendo in zone di non linearita (vedi figura 2.7).
Inoltre il filtraggio puo portare a interferenza intersimbolica (InterSymbol
2.3. LA SEZIONE DIGITALE 23
-1.5 -1 -0.5 0 0.5 1 1.5
-1.5
-1
-0.5
0
0.5
1
1.5Im
Re
Mappatura M-PSK
1
3
2
6
7
5
4
0
Figura 2.7: Traiettoria non correttamente filtrata
Interference) e causare mutua interferenza tra simboli consecutivi. Un’accu-
rata analisi del sistema e necessaria per trovare il compromesso tra potenza
dissipata e banda filtrata.
2.3.3 Il filtro FIR
Diversi studi teorici2 hanno dimostrato che il filtro indicato per questo tipo di
modulazione e un filtro FIR (Finite Impulse Response) con risposta impul-
2Mashhour (1999),Schell (2000)
2.3. LA SEZIONE DIGITALE 24
siva di tipo Gaussiano. Un generico filtro FIR di lunghezza M con ingresso
x(n) ed uscita y(n) e descritto dalla seguente equazione alle differenze :
y(n) = b0x(n) + b1x(n − 1) + ... + b(m−1)x(n − M) (2.7)
dove l’insieme {b1} costituisce l’insieme dei coefficienti del filtro.
Questa equazione suggerisce un modo possibile per la realizzazione di un
sistema di questo tipo: l’uscita non e altro che la somma degli ingressi ritar-
dati opportunamente e moltiplicati per i coefficienti bk. Si ricorda che in un
sistema FIR si ha: bk = 0 per k=0 e k=M, dove M e l’ordine del filtro. Per
implementare il sistema FIR con questa strategia, servono un numero finito
di elementi di ritardo, di moltiplicatori e di sommatori, come illustrato in
figura:
1
Output
K b(5)
K b(4)
K b(3)
K b(2)
K b(1)
z -1
z -1
z -1
z -1 1
Input1
Figura 2.8: Filtro FIR - Forma Canonica
E importante sottolineare che prima dell’applicazione del filtro, il segnale
modulato deve subire una pre-elaborazione secondo un preciso algoritmo, con
lo scopo di correggerne la traiettoria3. Per effettuare le simulazioni e stato
generato un vettore di numeri casuali di simboli da trasmettere. Possono
essere 8 simboli differenti, che si muovono verso uno degli altri 8 simboli. Per
un numero molto alto di prove, quindi, questo vettore copre tutte le possibili
traiettorie di input. La figura 2.9 rappresenta queste traiettorie.
3Schell (2000)
2.3. LA SEZIONE DIGITALE 25
−1.5 −1 −0.5 0 0.5 1 1.5−1.5
−1
−0.5
0
0.5
1
1.5
Figura 2.9: Traiettoria originale
Si nota immediatamente che in otto casi avviene il passaggio per il punto
(0,0); Cio rappresenta un notevole problema per l’architettura LINC, che
e basata su due segnali simmetrici, modulati in fase. Una spiegazione piu
dettagliata sara fornita piu avanti, quando sara descritta l’architettura della
seconda parte del modulatore. Per ovviare al problema, deve essere applicata
un’operazione matematica al segnale d’ingresso.
Questa operazione dev’essere:
1. Reversibile, in modo che l’unita ricevente possa ricavare il segnale
originale.
2. Ininfluente rispetto all’informazione da trasmettere, ovvero che non
cambi il significato delle informazioni da trasmettere.
3. Di facile implementazione, per non appesantire il circuito in modo
eccessivo.
2.3. LA SEZIONE DIGITALE 26
4. Funzionale, ovvero con lo scopo di impedire che il segnale percorra il
punto (0,0), per evitare che non linearita nelle regioni a bassa potenza
distorcano il segnale.
Indichiamo con cn il segnale che esce dal codificatore 8-PSK e inoltre sia
pn = e3πn
8
avremo che sn = pncn dove sn e il segnale risultante, sul quale verra applicato
il filtro FIR. La funzione e3πn
8 e periodica, con periodo n=16. In parole povere
ogni simbolo modulato in fase 8-PSK viene ulteriormente ruotato di 3πn8
dove
n e l’indice del simbolo; questo tipo di operazione di definisce Cumulative
Phase Shifting.
−1.5 −1 −0.5 0 0.5 1 1.5−1.5
−1
−0.5
0
0.5
1
1.5
1
2
3
456
7
8
9
10
11
12 13 14
15
16
A
B
C
D
E
F
G
H
Figura 2.10: Esempio CPS - figura 1
Il segnale originale e correttamente assegnato a valori della modulazione 8-
psk; in particolare nel nostro caso il segnale (in rosso) passa sui simboli
F-B-E-H
2.3. LA SEZIONE DIGITALE 27
−1.5 −1 −0.5 0 0.5 1 1.5−1.5
−1
−0.5
0
0.5
1
1.5
1
2
3
456
7
8
9
10
11
12 13 14
15
16
A
B
C
D
E
F
G
H
Figura 2.11: Esempio CPS - figura 2
Il segnale CPSK (in blu), parte correttamente dal simbolo 11 (che coincide
con F), il primo valore cade su 6, ovvero sarebbe il simbolo 3 ruotato di 3π8
,
il secondo su 15 (ovvero E-9 ruotato di 6π8
) e il terzo simbolo su 8 (ossia H-15
ruotato di 9π8
) ).
L’operazione di CPS trasforma il segnale di partenza in segnale ruotato, non
passante per (0,0). Questa operazione risolve anche il problema di trasmis-
sione di due simboli uguali uno dopo l’altro. Senza CPS il sistema si sarebbe
‘fermato’ nel suo stato, con il CPS un cammino avviene in tutti i casi.
A questo punto e effettivamente possibile applicare il filtro che riduca la
banda del segnale trasmesso. I coefficienti di questo filtro sono determinati
dalla sua risposta impulsiva, la quale e definita dalla seguente equazione, il
cui valore e diverso da zero nell’intervallo −52T < t < 5
2T e vale
p(t) = c0t +5
2T (2.8)
2.3. LA SEZIONE DIGITALE 28
−1.5 −1 −0.5 0 0.5 1 1.5−1.5
−1
−0.5
0
0.5
1
1.5
Figura 2.12: Traiettoria con CPS
dove T = 1fL
ovvero il tempo di arrivo di ogni simbolo.
Si ha che
c0(t) =
∏3i=0 f(t + iT ) per 0 ≤ t ≤ 5T
0 altrimenti(2.9)
f(t) =
sinπ∫ t0 g(u)du per 0 ≤ t ≤ 4T
cosπ∫ t−4T0 g(u)du per 4T ≤ t ≤ 8T
0 altrimenti
(2.10)
g(t) =1
2gGSMK(t − 2T ) (2.11)
gGSMK(t) =1
2Terfcα
t
T− 1
2− erfcα
t
T+
1
2(2.12)
2.3. LA SEZIONE DIGITALE 29
α = 2π(0.3)/√
2ln (2.13)
Essendo l’ordine pari a 5 e il fattore di interpolazione pari a 16, ci sono 80+1
coefficienti che moltiplicano i dati di ingresso, dopo che sono stati interpolati.
Di seguito le caratteristiche significative del filtro.
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9−250
−200
−150
−100
−50
0
50
Normalized Frequency (×π rad/sample)
Mag
nitu
de (
dB)
Magnitude Response (dB)
Figura 2.13: Risposta in frequenza (modulo) del filtro
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9−1400
−1200
−1000
−800
−600
−400
−200
0
Normalized Frequency (×π rad/sample)
Pha
se (
degr
ees)
Phase Response
Figura 2.14: Risposta in frequenza (fase) del filtro
2.3. LA SEZIONE DIGITALE 30
0 10 20 30 40 50 60 70 800
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
Samples
Impulse Response
Am
plitu
de
Figura 2.15: Risposta impulsiva del filtro
0 10 20 30 40 50 60 70 800
5
10
15
20
25
30
Samples
Step Response
Am
plitu
de
Figura 2.16: Risposta allo scalino del filtro
2.3. LA SEZIONE DIGITALE 31
Dopo l’applicazione del filtro, la traiettoria del segnale non e piu rettilinea a
tratti ma segue un cammino meno diretto.
−2 −1.5 −1 −0.5 0 0.5 1 1.5 2−2
−1.5
−1
−0.5
0
0.5
1
1.5
2
Figura 2.17: Traiettoria filtrata
2.3.4 Separazione del segnale
CONVERSIONE DA NUMERO COMPLESSO A MODULO E FASE
-+
++
NORM ARC COSIM
RE
MODULO
FASE
Figura 2.18: Schema Funzionale - Separazione del segnale
In entrata a questo stadio si ha un numero complesso, con la componente
reale e la componente immaginaria. Il primo blocco funzionale ne calcola
2.3. LA SEZIONE DIGITALE 32
modulo e fase. Il modulo viene normalizzato secondo un valore fisso, ricavato
dalle simulazioni e ne viene calcolato l’arcocoseno. Il risultato finale viene
sommato e sottratto al valore della fase sopra calcolato.
Osservazione 2.3.1 Dopo diverse simulazioni, si e visto che il valore mas-
simo in input e pari a circa 1.6, per cui la normalizzazione viene calcolata
su quel valore.
Bisogna trasmettere un segnale, di cui conosciamo modulo e fase (il vettore
blu). Imponiamo che il modulo dei vettori rossi sia identico, pari a uno (per
utilizzare un amplificatore non lineare) Quello che resta da calcolare e quanto
vale la fase dei due vettori rossi, ovvero quanto vale l’angolo α.
S1(t)
S2(t)
S(t)
α
Dato che α = arccos |ρ∗| , dove ρ∗ e il modulo normalizzato, per ρ∗ che tende
a zero, il valore di α non puo superare 90◦.
2.4. VALUTAZIONE DEI RISULTATI 33
Se il modulo tendesse a zero, i due vettori modulati in fase (i vettori rossi)
tenderebbero ad essere paralleli. La loro ricombinazione, percio, darebbe un
segnale nullo. Questo e uno dei motivi per cui al segnale dev’essere applicata
la rotazione cumulativa di fase prima di effettuare il filtraggio.
2.4 Valutazione dei risultati
Il progetto e stato sviluppato per lo standard GSM-EDGE, ma e stato im-
plementato considerando la possibilita di poterlo adattare ad altri standard
attualmente in vigore (GMS, UMTS). Per valutare la correttezza delle simu-
lazioni, pero, e necessario affidarsi a metodi precisi e a vincoli stabiliti dallo
standard. Durante la realizzazione del lavoro di tesi ho dovuto sottostare a
due parametri che indicano quanto il modulatore effettua correttamente il
suo compito.
2.4.1 Maschera dello spettro
Lo spettro del segnale in uscita deve essere contenuto in una maschera, de-
scritta con rigore dallo standard GSM EDGE, per non interferire con altri
canali adiacenti.
La maschera, disegnata in rosso, rappresenta il limite a cui lo spettro del
segnale puo arrivare. In condizioni ottimali (ovvero senza effetti di quantiz-
zazione del segnale, quindi nelle simulazioni Matlab a dinamica ‘illimitata’)
lo spettro e ben al di sotto dei valori limite (figura ??,in nero). In un si-
stema reale mantenere tale livello richiede uno sforzo non banale in termini
di tempo per lo sviluppo di una soluzione valida e di potenza dissipata per
effettuare i calcoli con una tale precisione. Per questa applicazione e piu
2.4. VALUTAZIONE DEI RISULTATI 34
−8 −6 −4 −2 0 2 4 6 8
x 106
−80
−70
−60
−50
−40
−30
−20
−10
0
10
Frequenza [Hz]
Spe
ttro
di p
oten
za [d
Bc]
− M
asch
era
ED
GE
MASKMatlab
Figura 2.19: Spettro del segnale
importante minimizzare i consumi e l’area occupata, quindi mi e stato posto
l’obiettivo di rimanere 15 dB sotto la maschera. Questo valore tiene conto
anche del fatto che alla sezione digitale seguira anche la sezione analogica,
che introdurra ulteriori non-linearita e peggiorera ulteriormente lo spettro.
Naturalmente l’operazione di filtraggio influisce notevolmente sullo spettro
di segnale. Senza di esso le frequenze in output si spostano ben al di fuori
della maschera.
2.4.2 EVM
Ad ogni trasmettitore progettato corrisponde un ricevitore. Anche nel caso
del LINC esiste un circuito che si occupa di ricevere il segnale ad alta fre-
quenza (fH) e riconvertirlo in simboli. A causa della non idealita del canale
di trasmissione e degli errori introdotti nella modulazione il segnale ricevuto
2.4. VALUTAZIONE DEI RISULTATI 35
non e mai uguale al segnale trasmesso. Il ricevitore, pertanto deve avere
un margine di errore, all’interno del quale il segnale viene riconosciuto con
successo. Dopo aver ricevuto il segnale e averlo translato alla frequenza fL,
il ricevitore vedra delle traiettorie simili alla figura 2.9. Un filtro particolare,
con annesso un decimatore (che funziona nella maniera opposta dell’inter-
polatore) trasforma il segnale come in figura 2.12. Infine al segnale verra
applicata l’operazione inversa alla CPS, ovvero una SPS (Subtractive Phase
Shifting) per ottenere un segnale simile a quello di figura 2.17. A questo
punto, teoricamente, la traiettoria di input (ovvero la sequenza di simboli
trasmessa) dovrebbe coincidere con la traiettoria ricevuta e filtrata, con un
margine di errore. Per quantificare questo margine dobbiamo definire una
grandezza conosciuta come EVM (Error Vector Magnitude). Il vettore er-
rore (error vector) (in rosso) e la differenza vettoriale tra il valore ideale e
quello effettivamente trasmesso del segnale. L’EVM e dato dal valor medio
del modulo (in blu) di tale vettore. Nella realizzazione del progetto l’errore
massimo ammesso per la parte digitale e pari al 5 %.
error vector
error vector magnitude
segnale ideale
segnale trasmesso
Figura 2.20: Misura dell’EVM
33Capitolo
Implementazione Matlab
Per lo studio teorico del circuito digitale e stato utilizzato l’ambiente di si-
mulazione Matlab-Simulink. Attraverso un semplice linguaggio di scripting,
progettato per il calcolo scientifico, e stato possibile ottenere da subito dei ri-
sultati concreti, senza doversi preoccupare delle funzioni di base (es. gestione
delle matrici, calcolo numerico approssimato, ecc)
36
3.1. LO SCHEMA SIMULINK 37
3.1 Lo schema Simulink
Grazie al lavoro svolto dalla Dott.ssa Uggetti, buona parte della modelliz-
zazione del progetto era gia pronta. Come prima cosa, ho investito un po
di tempo nel comprenderne il funzionamento e ho riorganizzato la struttura
secondo lo stile adottato nel resto del progetto.
I_AN1
I_AN2
O_ANT
Trasmissione
output
Signal To
Workspace
I_SEP
O_SEP1
O_SEP2
Separazione del Segnale
Random Integer
I_PSK O_FIR
Psk, Interpolazione, FIR
Integer to Bit Converter
Figura 3.1: Trasmettitore LINC - Modello Simulink - Generale
Lo schema e molto simile alla figura 2.4, per semplicita sono state raggruppate
alcune sezioni. Per simulare il flusso di dati GSM-EDGE si e utilizzato un
blocco che genera interi casuali da 0 a 7, convertiti poi in numeri binari.
1
O_FIR
Zero-Order Hold
Ramp
Product
M-PSK x[n/16]
FIR Interpolation
exp(jx)
1
I_PSK
Figura 3.2: Trasmettitore LINC - Modello Simulink - Sezione 1
La prima parte effettua la rotazione del segnale e il risultato viene immesso
in un blocco Simulink con interpolatore e filtro integrati. La rotazione viene
implementata mediante la moltiplicazione del segnale in input con un valore
che varia nel tempo. Il blocco ‘Ramp’ genera un segnale di tipo ‘rampa’ con
3.1. LO SCHEMA SIMULINK 38
pendenza pari a 3πn8
; il mantenitore di ordine zero (‘Zero-Order Hold’) cam-
piona il segnale, sincronizzandolo al tempo di simbolo. L’esponenziale calcola
il valore dell’espressione l(z) = eik(z) dove k(z) e l’output del mantenitore e
i =√−1; utilizzo z come variabile perche il sistema e a tempo discreto. Si
nota che ogni sedici iterazioni la successione si ripete. Questo coefficiente
(che mantiene una sorta di informazione di stato) viene moltiplicato con il
simbolo di ingresso, modulato con la codifica gray-PSK e il risultato viene
passato al blocco di interpolazione-filtraggio.
Osservazione 3.1.1 La funzione che regola l’ingresso del sistema ha due
variabili: il simbolo, ovvero una variabile indipendente dallo stato attuale
del sistema e il coefficiente di rotazione, che e una variabile di stato (imple-
mentata in simulink con una rampa). In un circuto hardware una soluzione
implementativa potrebbe essere l’utilizzo di un contatore.
Sul blocco filtro-interpolatore non c’e nulla di particolare da sottolineare. Ma-
tlab prende come parametri i coefficienti del filtro da applicare e il coefficiente
di sovracampionamento ed elabora automaticamente il risultato.
2
O_SEP2
1
O_SEP1
acos
Trigonometric Function
Divide
1.6
Constant
|u| u
Complex to Magnitude-Angle
1
I_SEP
Figura 3.3: Trasmettitore LINC - Modello Simulink - Sezione 2
3.2. EFFETTI DI QUANTIZZAZIONE 39
La sezione di separazone del segnale e realizzata con due blocchi principali,
che effettuano la conversione da coordinate cartesiane a coordinate polari, e il
calcolo dell’arcocoseno. Gli operatori di somma e moltiplicazione provvedono
a normalizzare il modulo e addizionare-sottrarre la fase.
1
O_ANT
UnwrapB
UnwrapA Product1
Product
Divide1
1.6
Constant2
2
Constant1
exp(jx)
exp(jx) 2
I_AN2
1
I_AN1
Figura 3.4: Trasmettitore LINC - Modello Simulink - Sezione 3
L’ultimo blocco dello schema provvede a simulare il comportamento della se-
zione analogica, gia realizzata da un altro team di sviluppo. Il segnale, dopo
essere stato modulato e amplificato, viene ricombinato e trasmesso all’an-
tenna; naturalmente non verra presa in considerazione nell’implementazione
VHDL)
3.2 Effetti di quantizzazione
Matlab effettua tutti i suoi calcoli utilizzando tipi di dati ad alta precisione
(a seconda del processore utilizzato) in virgola mobile. Implementare quel
genere di operazioni su un circuito hardware richiede un notevole sforzo di
progettazione ma soprattutto un notevole dispendio in termini di area del
3.3. RISULTATI 40
circuito e di potenza dissipata. Si e pertanto deciso di studiare a fondo il
problema della quantizzazione del segnale, ponendo un valore limite al nu-
mero di bit utilizzati per l’implementazione in VHDL delle varie operazioni.
Naturalmente questo valore non e fisso per tutto il percorso del segnale, ma
varia in funzione delle esigenze di precisione. Durante lo sviluppo del proget-
to ho dovuto valutare l’impatto sul risultato finale, in termini di spettro e di
EVM, dei cambiamenti alla risoluzione di ognuno di questi parametri. Natu-
ralmente non si poteva procedere effettuando le prove di quantizzazione su
una sezione sola, sperando che gli effetti si sommassero in maniera lineare, ma
per studiare la quantizzazione si e dovuto prendere in considerazione l’intero
sistema, effettuare parecchie prove e valutare i risultati. Questo puo essere
schematizzato come un problema di ottimizzazione: abbiamo n variabili da
minimizzare, ovvero l’errore di quantizzazione, il costo in termini di area e la
potenza dissipata. La prima la possiamo valutare immediatamente, perche
abbiamo gli strumenti offerti da Matlab, per le altre possiamo affidarci alla
sintesi, che fornisce un’idea approssimata di questi parametri. Si tratta di
un processo di tipo ‘trial and error’ condotto con buon senso e accortezza;
essenzialmente si eseguono modifiche sul progetto, si valutano i risultati e
si ricomincia a provare. Fortunatamente non e necessario riprogettare tutto,
Matlab offre strumenti validi che, cambiando pochi parametri, permettono di
visualizzare il nuovo risultato; lo strumento principale per lo studio di segnali
quantizzati e il Fixed Point Toolbox. Ulteriori indicazioni sull’uso di questo
toolbox sono contenute nell’appendice A.
3.3 Risultati
Sono stati svolti svariati esperimenti in ambiente Matlab, per comprendere
il funzionamento del sistema e per capire quali potessero essere i parametri
ottimali da inserire nel prototipo finale. Di seguito i risultati piu rilevanti.
3.3. RISULTATI 41
3.3.1 Quantizzazione FIR
Come primo esperimento ho quantizzato a dinamica differente l’output che
proveniva dal filtro FIR, e ho visualizzato il risultato ottenuto. Il segnale
originale, calcolato da MATLAB a precisione macchina compie un cammino
continuo su tutti i punti (figura 3.5). Quantizzando fino a 12 bit la differenza
tra il segnale originale e quello quantizzato si attesta in media a valori minori
di 10−4(figura 3.6). Nella figura 3.7 il segnale e stato quantizzato a 8 bit; si
nota che esso percorre una griglia, saltando i valori intermedi e introducendo
elevato rumore di quantizzazione.
−1.3 −1.2 −1.1 −1 −0.9 −0.8 −0.7 −0.6 −0.5 −0.4 −0.30.8
0.9
1
1.1
1.2
1.3
1.4
1.5
Figura 3.5: Output del FIR senza quantizzazione
In termini di spettro (figura 3.8)possiamo notare che a 10 e a 12 bit il segnale e
ancora correttamente contenuto nella maschera di trasmissione. Utilizzando
8 bit, pero, il segnale fuoriesce dalla maschera e crea interferenza con gli altri
canali di comunicazione.
Come si puo notare, 8 bit non sono sufficienti per immagazzinare tutte le
informazioni. 10 e 12 bit potrebbero andare bene, ma si sta valutando una
3.3. RISULTATI 42
−1.3 −1.2 −1.1 −1 −0.9 −0.8 −0.7 −0.6 −0.5 −0.4 −0.30.8
0.9
1
1.1
1.2
1.3
1.4
1.5
Figura 3.6: Output del FIR con quantizzazione a 12 bit
−1.3 −1.2 −1.1 −1 −0.9 −0.8 −0.7 −0.6 −0.5 −0.4 −0.30.8
0.9
1
1.1
1.2
1.3
1.4
1.5
Figura 3.7: Output del FIR con quantizzazione a 8 bit
situazione non reale. Quello che e stato quantizzato non e il segnale in
tutti i punti del processo, ma solamente il risultato finale. D’altronde cio ci
permette di delineare un limite, al di sotto del quale non e possibile ridurre
la dinamica. In relazione alla prima parte (modulazione PSK e filtraggio) gli
3.3. RISULTATI 43
−8 −6 −4 −2 0 2 4 6 8
x 106
−90
−80
−70
−60
−50
−40
−30
−20
−10
0
10
Frequenza [Hz]
Spe
ttro
di p
oten
za [d
Bc]
− M
asch
era
ED
GE
MASKmatlabmatlab 12 bitmatlab 8 bit
Figura 3.8: Spettro del segnale - Confronto tra differenti quantizzazioni
Quantizzazione (bit) EVM
nessuna 1.2689
12 1.5613
10 2.0305
8 6.1739
Tabella 3.1: Valori dell’EVM in funzione al numero di bit utilizzati
elementi che devono essere quantizzati sono:
• il valore iniziale della corrispondenza simbolo-posizione PSK; su questo
valore verranno effettuati tutti i calcoli.
• il valore dei coefficienti del filtro FIR; questi coefficienti dovranno essere
moltiplicati per i dati di ingresso
• la capacita (in termini di dinamica) delle unita di moltiplicazione dei
coefficienti.
• la capacita (in termini di dinamica) dell’unita di addizione dei prodotti.
3.3. RISULTATI 44
Per quanto riguarda la struttura interna del FIR, ho notato che dando un va-
lore basso alla dinamica dei moltiplicatori (16-18 bit) comparivano in output
alcuni ‘artefatti’.
−5 0 5 10 15 20 25
x 105
−95
−90
−85
−80
−75
−70
Frequenza [Hz]
Spe
ttro
di p
oten
za [d
Bc]
− M
asch
era
ED
GE
MASKmatlabmatlab16−16
Figura 3.9: Spettro del segnale - Artefatti di quantizzazione
Il fenomeno e causato dagli errori di arrotondamento nella moltiplicazione.
Se, per esempio volessimo moltiplicare due numeri, codificati con 16 bit di
dinamica ciascuno, il numero ideale di bit per contenere il risultato e 32. Un
numero inferiore provoca questo genere di artefatti. Per effettuare queste
prove sulla dinamica del segnale, e stato sufficiente inserire un blocco di tipo
‘data conversion’ appena prima del blocco ‘FIR / interpolation’. Simulink
supporta, per quel blocco, l’elaborazione di oggetti ‘fi’. E inoltre possibile
con facilita specificare all’interno del blocco come comportarsi con i parametri
relativi alla quantizzazione (ad esempio dinamica dei coefficienti, saturazione
o troncamento in caso di overflow, ecc). Diverse simulazioni hanno portato
a determinare che un giusto compromesso tra prestazioni e precisione della
dinamica si ottiene effettuando l’elaborazione a 13 bit.
3.3. RISULTATI 45
3.3.2 Quantizzazione Separazione
Lo studio degli effetti di quantizzazione sulla sezione di separazione del segna-
le si e rivelato molto piu complesso del previsto. Sono presenti due operazioni
non banali, ovvero calcolo di modulo e fase di un numero complesso e calcolo
dell’arcocoseno di un numero. Queste due operazioni non sono direttamente
implementabili in hardware (come la somma o la moltiplicazione) ma possono
essere implementate in maniera differente.
A questo punto si sono presentate due possibilita:
1. Effettuare i calcoli utilizzando i blocchi Matlab gia esistenti, per poi
quantizzare il risultato appena fosse possibile. E un’ipotesi abbastanza
plausibile, non porterebbe al medesimo risultato dell’implementazione
VHDL, ma servirebbe come punto di partenza per decidere i parametri
di quantizzazione.
2. Decidere come realizzare in hardware tali operazioni, e implementarle
sia in Matlab che in VHDL. E una soluzione piu azzardata, e sicu-
ramente piu dispendiosa in termini di tempo, ma che rende possibile
ottenere un risultato VHDL che coincide con le simulazioni Matlab.
I vantaggi di utilizzare Matlab per tutte le simulazioni sono i seguenti:
1. Portabilita: il team di sviluppo della sezione analogica ha progettato
il sistema utilizzando Matlab e programmi di simulazione circuitale; al
momento attuale non e prevista un’integrazione con modelli VHDL.
Per ovviare al problema, pero, si possono elaborare i dati in VHDL e
convertirli in un formato comprensibile a Matlab, stratagemma che ho
effettivamente utilizzato per valutare le prestazioni.
3.3. RISULTATI 46
2. Facilita di manutenzione: quella proposta in questa tesi e una so-
luzione ad uno specifico problema, con dei vincoli molto stringenti (in
particolare e una soluzione per lo standard GSM-EDGE). Dev’essere
possibile in ogni momento adattare la soluzione ad un altro sistema
oppure modificare facilmente (senza riprogettare il tutto) il trade-off
‘prestazioni’ (ovvero quanto lo spettro e sotto la maschera) e ‘costi’
(ovvero area occupata - potenza dissipata). Fortunatamente, per co-
me e stato implementato il codice VHDL, e possibile, tramite semplici
parametri, aumentare o diminuire la dinamica di ciascun punto del
sistema.
Dopo attente valutazioni ho deciso dei scegliere la prima strada, investendo
piu tempo sul codice VHDL, dato che come obiettivo primario era produrre
un risultato concreto. Varie simulazioni effettuati mi hanno portato a stabi-
lire a 15 bit il valore finale di uscita della sezione digitale. Per un’accurata
descrizione della dinamica scelta per ogni singolo componente del sistema
rimando alla sezione di implementazione VHDL.
3.3.3 Il filtro FIR
La figura 3.10 mette a confronto il segnale d’ingresso (colore blu e nero),
dopo che e stata effettuata la rotazione di 3π8
e il segnale filtrato, (in colore
rosso e verde), in un istante non determinato della simulazione. Il segnale
filtrato possiede una risoluzione maggiore, dato che e stato effettuato il so-
vracampionamento a 16x. Si parte dal punto ‘A’ per entrambi i segnali e
si prosegue il cammino. I cambiamenti di colore sono in corrispondenza del
simbolo trasmesso. Si puo notare che il segnale filtrato segue abbastanza
fedelmente l’originale, con le dovute eccezioni. Per esempio, al punto ‘B’ la
potenza del segnale e relativamente piu bassa, mentre tra il ‘C’ e il ‘D’ c’e
un leggero overshoot. Le circonferenze concentriche rappresentano il valore
3.3. RISULTATI 47
minimo e il valore massimo della potenza trasmessa, che in questo caso varia
da 1.3 a 0.5; nel complesso e compreso ta 0.2 e 1.6.
−1.5 −1 −0.5 0 0.5 1 1.5−1.5
−1
−0.5
0
0.5
1
1.5
A
B
C
D
E
F
Figura 3.10: Confronto fra segnale trasmesso e segnale filtrato - figura 1
La figura 3.11, invece, mette in evidenza le distanze simbolo reale-ideale at-
traverso delle circonferenze. Una modulazione accurata tende a minimizzare
questa distanza, permettendo al ricevitore di interpretare il segnale.
−1.5 −1 −0.5 0 0.5 1 1.5−1.5
−1
−0.5
0
0.5
1
1.5
A
A
B
C
D
E
F
Figura 3.11: Confronto fra segnale trasmesso e segnale filtrato - figura 2
44Capitolo
Implementazione VHDL
Il passo finale del lavoro e l’implementazione delle funzionalita del modula-
tore LINC in un Hardware Description Language (linguaggio di descrizione
dell’hardware) in modo da poter sintetizzare con semplicita il modulatore
in un circuito reale. E stato scelto il VHDL come linguaggio, per la sua
semplicita d’uso, l’elevata standardizzazione e il notevole supporto tecnico
disponibile in rete e all’interno dell’universita.
48
49
FIR
PSK
ADDER
MOLTIPL (5)
FPFF (4)
COEFF
TOP
SEPARAZION E
CORDIC
ADDERMOD2
ADDERMOD1
ARCOSENO
COEFF
COR _ N (16)
FPFF (4)
Figura 4.1: VHDL - Struttura gerarchica
Nella figura 4.1 e rappresentato lo schema gerarchico che descrive la struttura
dell’implementazione VHDL del progetto. Lo sviluppo e avvenuto secondo
la metodologia ‘bottom-up’. Partendo dalle fondamenta, ho costruito un
sistema correttamente funzionante, affiancato dalle unita di test-bench.
4.1. NOTE IMPLEMENTATIVE 50
4.1 Note Implementative
Il linguaggio VHDL e un linguaggio che permette di descrivere le funziona-
lita dei circuiti elettronici con un livello di astrazione piu alto delle singole
porte logiche. Il VHDL sta diventando rapidamente il mezzo piu diffuso per
la progettazione di circuiti integrati digitali. Le aziende che progettano e
sviluppano ambienti integrati di CAD elettronico stanno utilizzando VHDL
come standard di input e output dei lori prodotti. Fra questi si trovano in
commercio programmi di simulazione e di sintesi, che generano gli schemi
circuitali a partire dal codice VHDL, programmi che generano codice VHDL
a partire dallo schema elettrico e programmi che convertono un sottoinsieme
del VHDL in altri linguaggi descrittivi dell’hardware e viceversa. La descri-
zione VHDL di un circuito puo avere diversi livelli di astrazione : il livello piu
alto (quello piu lontano dall’hardware) contiene una sommaria descrizione sul
comportamento dell’intera rete, un livello intermedio descrive la suddivisio-
ne del circuito nei vari sottoblocchi ed il funzionamento di ciascuno di questi
mentre il livello di astrazione piu basso, quello piu vicino all’hardware, e
la descrizione del circuito a livello delle porte logiche. Il grande vantaggio
di questo approccio risiede nel fatto che ogni descrizione VHDL a qualsiasi
livello puo essere simulata funzionalmente e puo essere eventualmente conver-
tita in uno schema elettrico tramite sintesi. Nella progettazione del sistema
ho utilizzato un insieme ridotto delle istruzioni VHDL per realizzare codice
adatto alla sintesi. In particolare ho utilizzato una struttura del tipo RTL
(Register Transfer Language). Si basa sul concetto che qualsiasi rete sequen-
ziale puo essere descritta da una logica combinatoria ed un registro ad essa
associata (eventualmente la struttura deve essere retroazionata). Si descrive
il sistema come un flusso di dati tra registri. Si puo immaginare che il flusso
di dati venga elaborato nel sistema (una volta realizzato in modo hardware)
4.2. LA LIBRERIA FIX-STD 51
dalla logica combinatoria. Il mio progetto e sviluppato secondo una variante
della logica RTL, in particolare, tutte le unita che compongono il sistema si
comportano come registri , ovvero:
• Sono sincronizzate da un clock.
• Ad esse e associato un segnale di reset
• La logica combinatoria compare all’interno, attraverso una descrizione
comportamentale.
Nella scrittura del codice ho anche seguito le seguenti specifiche:
• Le strutture di controllo sono semplici (IF-THEN-ELSE, CASE)
• Non vi sono iterazioni (FOR, WHILE)
• Le variabili utilizzate hanno ampiezza fissa (ma parametrica, inserita
in un package per mantenere la modularita del progetto)
• Non vengono assegnati esplicitamente dei ritardi ai segnali
• I costrutti di tipo CASE vengono completamente definiti.
• I processi vengono attivati al fronte di salita del clock.
4.2 La libreria FIX-STD
Nello sviluppo del progetto e stata utilizzata una libreria, dedicata alla gestio-
ne delle variabili di tipo fixed point. Questa libreria contiene macroistruzioni
4.2. LA LIBRERIA FIX-STD 52
che facilitano la conversione da formati standard IEEE con differenti preci-
sioni, garantendo la possibilita di una successiva sintesi. Nella scrittura del
codice ho definito una convenzione per descrivere le variabili utilizzate. Ad
esempio:
FP S 3 14 e definito come un numero di tipo floating point con segno (S), 3
bit prima della virgola e 14 bit dopo. In definitiva si tratta di un standard
logic vector a 14+3+1 = 18 bit.
La libreria e solo una ‘maschera’, per gestire con piu semplicita le operazioni
in virgola mobile e renderle trasparenti al programmatore. Per il compila-
tore e (successivamente) per il sintetizzatore non crea problemi, dato che si
appoggia alle librerie standard IEEE.
All’interno del codice vengono spesso utilizzate le istruzioni ‘Copy S’ e ‘Co-
py V’. La sintassi e nella forma
Copy_[S|V] ( destinazione , sorgente )
Cio permette di assegnare al valore di ‘destinazione’ il contenuto di ‘sorgente’.
‘S’ oppure ‘V’ devono essere indicate, per specificare se ‘destinazione’ e di
tipo ‘signal’ oppure di tipo ‘variable’. A differenza dell’assegnazione standard
( utilizzando rispettivamente gli operatori ‘<=’ e ‘:=’) l’istruzione effettua
automaticamente la conversione dei tipi di dati.
Ulteriori informazioni su questo pacchetto si trovano sul sito dell’autore,
Jonathan Bromley, che lo ha reso disponibile gratuitamente. L’indirizzo e
http://www.geocities.com/bromley_jonathan/fix_std_02.zip
4.3. DESCRIZIONE GENERALE 53
4.3 Descrizione generale
L’implementazione VHDL puo essere suddivisa in due macroblocchi, rappre-
sentati dalla sezione di filtraggio/interpolazione e dalla sezione di separazione.
L’ingresso del circuito e rappresentato da un segnale a 3 bit, che viene letto da
un file di testo all’interno del blocco ‘input’. Per valutare i risultati ho dovuto
salvare l’output della sezione di separazione in un altro file di testo, per poi
elaborarlo con Matlab. Questo avviene nell’unita ‘output’. I restanti blocchi
sono flip-flop di servizio, servono per propagare il segnale di attivazione della
scrittura su file (solo quando esistono dati da immagazzinare).
I_output
R_output
clk
clkd
reset
sym(2:0)
U1
fir
clk_diviso
reset
clk
clk
fir_I_out
fir_R_out Mod_A
Mod_B
reset
clk_cordic
separatore
U4
Clk
S_out
Reset
S_in
U5
ff
Clk
S_out
Reset
S_in
U6
ff
Clk
S_out
Reset
S_in
U7
ff
Clk
S_out
Reset
S_in
U8
ff
Clk
S_out
Reset
S_in
U9
ff
Clk
I_ris
R_ris
Wr
U10
output
clk_cordic
Clk
Symbol(2:0)
Write
U2
input
Figura 4.2: VHDL - Data Flow - Entity TOP.VHD
4.4. IL FILTRO FIR 54
L’entita ‘top’ e necessaria per simulare l’ambiente nel quale il vero e proprio
circuito lavorera. Per il funzionamente del sistema sono necessari tre segnali
di clock.
1. clk diviso lavora alla frequenza fL, ovvero alla frequenza di arrivo di
ogni simbolo. Viene utilizzato solo nella prima sezione.
2. clk lavora alla frequenza fM , ovvero 16 volte fL; e la frequenza di
lavoro della maggioranza delle unita presenti del sistema ed e anche
la frequenza a cui viene aggiornato il segnale in output dalla sezione
‘separazione’.
3. clk CORDIC lavora alla frequenza fC , che equivale a fMx8. Viene
utilizzato solo nella seconda parte, ed e necessario all’unita di conver-
sione da notazione cartesiana a notazione polare. Una trattazione piu
approfondita di questa unita sara svolta piu avanti.
Al di sopra di questo schema lavora il file di testbench, che fornisce le indi-
cazioni al simulatore su quali segnali assegnare ai vari terminali in input (in
pratica si occupa di effettuare le oscillazioni dei clock per il tempo necessario
e di assegnare il valore di reset all’inizio della simulazione).
4.4 Il filtro FIR
Il filtro FIR in una forma canonica richiede un numero di moltiplicatori pa-
ri all’ordine del filtro stesso. In presenza di un interpolatore, pero, l’ordine
del filtro deve essere moltiplicato per il fattore di interpolazione. Nel no-
stro caso il FIR Gaussiano e di ordine 5, mentre il fattore di oversampling
4.4
.IL
FIL
TR
OFIR
55
Clk
I_out I_in
R_out R_in
Reset
U1
fpff
reset
Clk
I_out I_in
R_out R_in
Reset
U6
fpff
Clk
I_out I_in
R_out R_in
Reset
U2
fpff
Clk
I_out I_in
R_out R_in
Reset
U3
fpff
clk
clk
R_in
I_in coeff_in R_out
I_out
Reset
moltip
U9
clk
R_in
I_in coeff_in
R_out
I_out
Reset
moltip
U10
clk
R_in
I_in coeff_in R
_out
I_out
Reset
moltip
U11
clk
R_in
I_in coeff_in R_out
I_out
Reset
moltip
U12
clk
R_in
I_in coeff_in
R_out
I_out
Reset
moltip
U13
R_Ris
I_Ris clk
R_M
0
I_M0
R_M
1
I_M1
R_M
2
I_M2
R_M
3
I_M3
R_M
4
I_M4
Reset
adder
U14
clk
c0
c1
c2
c3
c4
Reset
U8
coeff
clk _ div
R_output I_output
Reset
I_out Symbol(2:0)
R_out
clk
U4
psk
sym(2:0)
Figu
ra4.3:
VH
DL
-D
ataFlow
-E
ntity
FIR
.VH
D
4.4. IL FILTRO FIR 56
e pari a 16; Ad ogni ciclo di clock a frequenza fL il filtro avrebbe effettuato
(5*16)=80+11 moltiplicazioni di cui 5 con valori diversi da zero e i restanti
con valori nulli2. Implementare uno schema canonico avrebbe richiesto un
enorme dispendio in termini di area occupata e potenza dissipata per effet-
tuare il piu delle volte operazioni a vuoto. Si e deciso quindi di ottimizzare la
struttura del filtro, minimizzano il numero di moltiplicatori necessari. Sono
state studiate diverse possibilita, tutte quante scartate perche richiedevano
molte piu risorse di quelle effettivamente utilizzate per cui ho sviluppato una
soluzione ‘ad hoc’. Il punto chiave di questa struttura e che richiede solo
cinque moltiplicatori. Nelle soluzioni standard i coefficienti rimangono fissi,
all’interno di ogni registro moltiplicatore e sono sintetizzati solitamente con
operazioni di shift e addizione. Nel mio caso, invece, sia i dati in ingresso,
sia i coefficienti, ruotano ad ogni ciclo di clock, per sfruttare al massimo l’a-
rea disponibile. Le celle superiori contengono il dato in input; esse vengono
aggiornate a frequenza fL. La prima unita (PSK) si occupa di convertire il
dato (da vettore 3 bit standard logic a vettore 15 bit standard logic, secondo
le convenzioni della modulazione PSK). Ad ogni ciclo di clock il dato viene
spostato nella cella successiva, in modo che i moltiplicatori possano leggerlo
correttamente; quando raggiunge la quinta cella il dato viene perso definiti-
vamente. L’unita sulla sinistra e la cella dei coefficienti. E un contatore, che
lavora a clock a frequenza fM . Ad ogni impulso emette in output i valori
dei coefficienti dello stato attuale. Le cinque unita centrali si occupano di
moltiplicare i dati in input per i coefficienti attuali; infine l’unita in basso
addiziona il risultato e lo manda alla seconda parte del sistema.
Per chiarire meglio le idee e opportuno fare un esempio pratico.
1ad un filtro FIR di ordine n sono associati n+1 coefficienti e quindi n+1 moltiplicatori2E opportuno ricordare che interpolare un segnale significa interporre tra i vari simboli
dei valori nulli.
4.4. IL FILTRO FIR 57
Sia dato il segnale d’ingresso
Q P O N M L I H G F E D C B A
Ovvero il primo simbolo e A, il secondo e B, eccetera; Bisogna interpolare
questo segnale; per semplicita pongo fattore di sovracampionamento 3x. A
regime, il segnale di ingresso sara
.... H 0 0 G 0 0 F 0 0 E 0 0 D 0 0 C 0 0 B 0 0 A
Questo entrera in un filtro FIR di ordine 5*Os =15 quindi avra 16 coefficienti,
che dovranno essere moltiplicati con il segnale di ingresso.
C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 C16
0 0 E 0 0 D 0 0 C 0 0 B 0 0 A -
Fortunatamente non e necessario fare tutte le moltiplicazioni ma solo 5 ,
perche il resto dei dati in ingresso e pari a zero.
E*C3 + D*C6 + C*C9 + B*C12 + A*C15
I successivi cicli:
C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 C16
F 0 0 E 0 0 D 0 0 C 0 0 B 0 0 A
C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 C16
0 F 0 0 E 0 0 D 0 0 C 0 0 B 0 0
C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 C16
0 0 F 0 0 E 0 0 D 0 0 C 0 0 B 0
e cosi via...
4.4. IL FILTRO FIR 58
Come si puo notare e possibile mettere in un cella di memoria i dati (ad esem-
pio F) e moltiplicarli consecutivamente per il C1, C2, C3, ad ogni periodo del
clock ad alta frequenza. All’arrivo del nuovo dato, (clock lento) il simbolo F
verra spostato nella seconda cella di memoria, per esser poi moltiplicato per
i coefficienti C4, C5, C6.
Il filtro che verra applicato e un FIR di tipo Gaussiano. I coefficienti C1 e
C16 tendono a zero; oltretutto, a causa di effetti di quantizzazione, nell’im-
plementazione pratica VHDL sono effettivamente pari a zero. Per come e
strutturato il FIR, il coefficiente 16 sarebbe utilizzato solo una volta su 5.
Per entrambi i motivi e per semplificare il sistema, si e deciso di non imple-
mentare un ulteriore moltiplicatore, e, a sua volta, un operatore di addizione
in piu.
4.4.1 Specifiche di quantizzazione
Di seguito le specifiche di quantizzazione per la sezione di filtro, proposte
dopo svariate simulazioni come un buon ‘trade-off’ tra prestazioni e potenza
dissipata.
• Dinamica del valore iniziale della corrispondenza simbolo-posizione PSK:
16 bit.
• Dinamica dei coefficienti del filtro FIR: 15 bit.
• Dinamica delle unita di moltiplicazione: 22 bit.
• Dinamica dell’unita di addizione (e dell’output della sezione FIR): 16
bit.
4.5. IL SEPARATORE 59
4.5 Il Separatore
fir_R_out fir_I_out
Mod_A
Mod_B
clk
Reset Ris
clk
cos
fase
U2
addermod1
Reset Ris
clk
cos
fase
U3
addermod2
Reset
acos
clk
prodotto
U4
arcoseno
reset
clk_cordic Clk Fase
Clk_slow
Modulo
I_in
R_in
Reset
U1
cordic
Figura 4.4: VHDL - Data Flow - Entity SEPARATORE.VHD
La seconda parte del circuito si occupa di modulare il segnale in uscita dal
FIR, come previsto dal modello Simulink. Il FIR restituisce un flusso di sim-
boli che rappresentano numeri complessi, ovvero i dati che dovranno essere
trasmessi. La prima sottounita del modulatore ha il compito di calcola-
re modulo e fase dei dati in ingresso e di trasmetterli ai successivi blocchi
funzionali. Calcolare il modulo e fase di un numero complesso utilizzando
linguaggi di programmazione ad alto livello e molto semplice, implementare
il calcolo su un dispositivo hardware, invece, si e rivelata un’impresa non
banale. Tra le tante possibilita, esistono due metodi relativamente semplici
da implementare:
4.5. IL SEPARATORE 60
• Un algoritmo iterativo, che, a passi successivi approssima la
soluzione cercata. Questa soluzione richiede maggior tempo di svi-
luppo, sempre che esista l’algoritmo adatto, e, probabilmente, se cor-
rettamente implementata, una minore occupazione d’area sul circuito
integrato. Si suppone che l’algoritmo richieda piu di un’iterazione per
essere completato con successo, quindi il circuito deve funzionare ad
una frequenza di clock maggiore rispetto al sistema.
• Una tabella precalcolata (look-up table) che, in funzione del-
l’ingresso, restituisce il valore di modulo e fase. Il tempo di
sviluppo di questa soluzione e praticamente nullo. Attraverso una pro-
cedura Matlab (o altri linguaggi) si crea il file VHDL che descrive
il comportamento desiderato dell’unita. L’occupazione su silicio puo
diventare notevole.
Dalle specifiche del filtro FIR si evidenzia che il segnale in uscita ha una
dinamica pari a 16 bit per la parte reale e 16 bit per la parte immaginaria.
Il risultato (modulo e fase), secondo le simulazioni Matalb, deve avere dina-
mica pari a 13 bit e a 15 bit rispettivamente. E’ possibile tramite semplici
calcoli verificare che lo spazio occupato dalla loookup table e enorme e quin-
di, per il calcolo del modulo e della fase, questa soluzione e stata scartata
a priori. Dopo ricerche su internet e studio di articoli scientifici ho scelto
di utilizzare l’algoritmo di CORDIC per effettuare i calcoli. Per i principi
teorici sull’algoritmo CORDIC si rimanda all’appendice B. Per il blocco ‘ar-
cocoseno’, invece, ho deciso di utilizzare una look-up table. Grazie ad alcune
simulazioni ho notato che il metodo CORDIC avrebbe richiesto molto piu
delle otto iterazioni concesse3, ed, allo stesso tempo, il numero di possibili
input era limitato (ricordiamo che il modulo e un valore compreso tra 0.2 e
1.6). La tabella e stata costruita con uno script Matlab, che genera il codice
3Il metodo CORDIC per calcolare l’arcocoseno si basa sull’approssimazione di Taylor
della funzione, pertanto introduce ulteriori errori di approssimazione
4.5. IL SEPARATORE 61
VHDL; dalla teoria sappiamo che il modulo calcolato da CORDIC e 1.6467
* il modulo reale del vettore; inoltre il modulo deve essere normalizzato con
un’operazione di moltiplicazione. Queste due operazioni sono state ‘incluse’
all’interno della lookup-table, in modo da risparmiare lo spazio dedicato ad
un moltiplicatore. I blocchi ‘addermod1’ e ‘addermod2’, infine sono semplici
addizionatori che sommano (o sottraggono) il risultato dell’arcocoseno dal
valore della fase, secondo quanto specificato dallo schema del modulatore
LINC.
Prima di descrivere il funzionamento del blocco ‘CORDIC’, e opportuno fare
una precisazione: quell’unita trasmette in output due dati, ovvero il valore
del modulo e il valore della fase. Il segnale si propaga nel tempo da sinistra a
destra; al primo ciclo il valore del modulo e contenuto nell’unita ‘CORDIC’,
al secondo nell’unita ‘arcocoseno’ e al terzo nelle unita di addizione. La
fase, invece si comporta diversamente; in un primo tempo per sincronizzare
il segnale si era pensato di interporre un flip-flop, dopo ho adottato una
soluzione differente, descritta nel prossimo paragrafo.
4.5.1 Entita CORDIC.VHD
L’intero blocco ‘CORDIC’ e formato da 16 celle (cor 1, cor 2, ecc..), ognuna
delle quali elabora i dati ad alta precisione. Utilizzano 18 bit per memorizzare
il modulo del vettore e 35 bit per memorizzare il valore della fase, durante
il calcolo. L’entita lavora alla frequenza fC , pari a 8 volte fM . Ognuna di
queste celle implementa un’iterazione dell’algoritmo di CORDIC.
Per i che va da 1 a 16
Dato il numero complesso z
Se im(z) > 0
//calcolo del modulo
4.5. IL SEPARATORE 62
Re(z) = Re(z) + sh(Im(z),i)
Im(z) = Im(z) - sh(Re(z),i)
//calcolo della fase
Ph=Ph+ffase(i)
Altrimenti
//calcolo del modulo
Re(z) = Re(z) - sh(Im(z),i)
Im(z) = Im(z) + sh(Re(z),i)
//calcolo della fase
Ph=Ph-ffase(i)
Fine se
dove Sh (numero, indice) e una funzione che effettua lo shift aritmetico del
numero e Ffase (indice) restituisce un valore precalcolato da aggiungere o
sottrarre al valore attuale della fase. La tabella contiene i valori dell’espres-
sione atan(2−k), con k = 1, 2, 3, ... Le simulazioni hanno dimostrato che il
calcolo della fase deve avvenire a massima precisione possibile per portare
risultati soddisfacenti, per cui questi valori sono stati quantizzati a 32 bit.
Sono tutti valori minori di uno. La variabile di accumulazione, pertanto,
necessita di 3 bit aggiuntivi per evitare overflow. Il valore del modulo e
correttamente calcolato dopo otto iterazioni di CORDIC ovvero dopo
otto cicli di clock a fC , e quindi un ciclo di clock a fM ; la successiva unita
(‘arcocoseno’) leggera il valore ed effettuera le necessarie operazioni. Il va-
lore della fase, invece e correttamente calcolato dopo sedici iterazioni di
CORDIC ovvero dopo sedici cicli di clock a fC , e quindi due ciclo di clock
a fM ; le unita di somma leggeranno il valore e lo combineranno in maniera
corretta con il valore in output dal blocco (‘arcocoseno’). Il segnale SIGN,
calcolato in ‘corin’ e l’input della sezione ‘CORDIC’, ovvero ‘R In’ e ‘I In’
vengono propagati all’interno dell’entita attraverso quattro flip-flop; Le unita
‘corout a’ e ‘corout b’ si occupano di effettuare le correzioni della fase e del
modulo, come descritto nella teoria, utilizzando il valore di quei segnali di
4.5. IL SEPARATORE 63
controllo. Il blocco ‘corout a’ e un semplice buffer che rende il risultato del
modulo all’unita ‘arcocoseno’, mentre ‘corout b’, a seconda del valore iniziale
del numero complesso e il valore di ‘SIGN’ corregge la fase e manda il valore
ai blocchi di somma.
4.5.2 Specifiche di quantizzazione
Di seguito le specifiche di quantizzazione per la sezione di separazione.
• Dinamica del valore iniziale proveniente dalla sezione FIR: 16 bit.
• Dinamica dei valori interni di modulo (reale e immaginario): 18 bit.
• Dinamica dei valori interni della fase: 35 bit.
• Dinamica dei coefficienti per il calcolo della fase: 32 bit.
4.5
.IL
SEPA
RA
TO
RE
64
R_in
I_in
Clk
Reset
Modulo
Clk
I_outI_tmp
Phase_outPhase
R_outR_tmp
Rese
t
U1
cor_2
Clk
I_outI_tmp
Phase_outPhase
R_outR_tmp
Rese
t
U2
cor_3
Clk
I_outI_tmp
Phase_outPhase
R_outR_tmp
Rese
t
U3
cor_4
Clk
I_outI_tmp
Phase_outPhase
R_outR_tmp
Rese
t
U4
cor_5
Clk
I_outI_tmp
Phase_outPhase
R_outR_tmp
Rese
t
U5
cor_6
Clk
I_tmp
Phase_outPhase
R_outR_tmp
Rese
t
I_out
U6
cor_7
Clk
I_out
I_in Phase
R_in R_out
Rese
tS
IGN
U8
cor_in
Clk_slow
Clk
I_outI_in
R_outR_in
Reset
U9
fpff
Clk
I_outI_in
R_outR_in
Reset
U18
fpff
Clk
S_outS_in
U20
ff
Clk
S_out
Reset
S_in
U21
ff
Clk
R_outR_in
Rese
t
U7
fpff2
Figu
ra4.5:
VH
DL
-D
ataFlow
-E
ntity
CO
RD
IC.V
HD
-prim
aparte
4.5
.IL
SEPA
RA
TO
RE
65
Clk
I_outI_tmp
Phase_outPhase
R_outR_tmp
Rese
t
U10
cor_8
Clk
I_outI_tmp
Phase_outPhase
R_outR_tmp
Rese
t
U11
cor_9
Clk
I_outI_tmp
Phase_outPhase
R_outR_tmp
Rese
t
U12
cor_10
Clk
I_outI_tmp
Phase_outPhase
R_outR_tmp
Rese
t
U13
cor_11
Clk
I_outI_tmp
Phase_outPhase
R_outR_tmp
Rese
t
U14
cor_12
Clk
I_outI_tmp
Phase_outPhase
R_outR_tmp
Rese
t
U15
cor_13
Clk
I_outI_tmp
Phase_outPhase
R_outR_tmp
Rese
t
U16
cor_14
Clk
Fase
I_in
Phase
R_in
R_tmp
Rese
t
Sig
n
U17
cor_out
Fase
Clk
I_tmp
Phase_outPhase
R_outR_tmp
Rese
t
U19
cor_15
Figu
ra4.6:
VH
DL
-D
ataFlow
-E
ntity
CO
RD
IC.V
HD
-secon
da
parte
55Capitolo
Conclusione
L’ultimo capitolo riporta i risultati piu importanti di questa esperienza di
progettazione e indica i possibili svliuppi futuri per questo progetto.
66
5.1. RISULTATI 67
5.1 Risultati
Lunghe sessioni di progettazione e simulazione hanno portato ad un risultato
soddisfacente, in termini sia di spettro che di EVM. Lo spettro del segnale
risiede all’interno della maschera, ed in alcuni punti tende ad i valori del-
lo spettro calcolati utilizzando i modelli Matlab senza quantizzazione. Le
sezioni laterali dello spettro, infatti, offrono un margine di errore rispetto
alla maschera di quasi 20 dB. L’EVM risulta essere pari a 3,208% Grazie
−8 −6 −4 −2 0 2 4 6 8
x 106
−100
−80
−60
−40
−20
0
20
Frequenza [Hz]
Spe
ttro
di p
oten
za [d
Bc]
− M
asch
era
ED
GE
MASKmatlabVHDL
Figura 5.1: Risultati - Spettro del segnale - 16 it. CORDIC
all’ampio margine di errore mi e stato consigliato di modificare in parte il si-
stema, ottimizzando la potenza dissipata; per fare cio ho sostituito le ultime
quattro sottounita di CORDIC con dei flip-flop standard. Successivamente,
quando verra effettuata la sintesi del sistema questi flip-flop saranno collegati
in modo da minimizzare il consumo di corrente. Le prestazoni del sistema
peggiorano lievemente, pur rimaendo in zona accettabile. Il margine d’errore
5.2. SVILUPPI FUTURI 68
nella maschera si riduce a 15 dB, l’EVM sale a 3,452%.
−8 −6 −4 −2 0 2 4 6 8
x 106
−100
−80
−60
−40
−20
0
20
Frequenza [Hz]
Spe
ttro
di p
oten
za [d
Bc]
− M
asch
era
ED
GE
MASKmatlabVHDL
Figura 5.2: Risultati - Spettro del segnale - 12 it. CORDIC
5.2 Sviluppi Futuri
Sono previsti i seguenti sviluppi per il futuro di questo progetto:
• La sintesi su silicio, che verra effettuata dagli ingegneri della ST Mi-
croelectronics; verranno effettuate simulazioni per stabilire la potenza
dissipata e l’area occupata.
• Le ottimizzazioni al codice VHDL, nel caso si stabilisse che la precisione
attuale dei calcoli non e necessaria.
• L’integrazione con la sezione analogica, gia sviluppata.
• L’ultimo passo prevede l’utilizzo del modulatore LINC su un reale
apparato di comunicazione mobile.
AAAppendice
Fixed Point Toolbox
Il Fixed Point Toolbox e un pacchetto aggiuntivo che si occupa di simulare
calcoli con aritmetica a punto fisso. Attraverso molteplici opzioni e possibile
specificare il numero di bit che ogni variabile deve avere, quanti prima e
dopo la virgola e se dev’essere mantenuta o meno l’informazione del segno.
E stato sviluppato per essere utilizzato nella modellizzazione di componenti
hardware i componenti del modello Simulink.
69
70
Questo toolbox si basa sull’oggetto ‘fi’, il quale contiene il numero (o la
matrice) e alcuni parametri relativi alla quantizzazione. Per utilizzare un
oggetto ‘fi’ e necessario crearlo, utilizzando il comando ‘fi’ con la seguente
sintassi:
v_q = fi(v,s,w,f)
Questo comando assegna alla variabile di tipo ‘fi’ chiamata v q il valore
quantizzato di v. Il parametro s indica se deve essere considerato il segno
di v, la conversione viene fatta in complemento a due. w e la lunghezza
della parola, espressa in bit che dovranno essere allocati. f e la lunghezza
in bit della parte frazionaria; nel caso che questi parametri venissero omessi,
Matlab cerca di selezionarli automaticamente, fino a raggiungere una soglia
di errore.
Per meglio comprendere il funzionamento del toolbox, utilizzo π come valore
da quantizzare; in Matlab il valore di π e definito nella variabile ‘pi’; una sua
visualizzazione, con le opzioni di default porta al seguente risultato.
>> pi
ans =
3.1416
Naturalmente tutti i calcoli con quella variabile vengono effettuati a massima
precisione possibile, a dispetto del numero di cifre visualizzate. Provando a
quantizzare il valore di π otteniamo
71
>> pi_q = fi(pi)
pi_q =
3.1416
DataTypeMode: Fixed-point: binary point scaling
Signed: true
WordLength: 16
FractionLength: 13
RoundMode: round
OverflowMode: saturate
ProductMode: FullPrecision
MaxProductWordLength: 128
SumMode: FullPrecision
MaxSumWordLength: 128
CastBeforeSum: true
Si evince dall’output che vengono utilizzati 16 bit, di cui 13 per la parte
frazionaria e uno per il segno. Ne restano 2 per il valore intero. Di que-
sto oggetto possiamo visualizzarne la rappresentazione binaria attraverso la
proprieta ‘.bin’
>> pi_q.bin
ans =
0110010010001000
e visualizzare lo scarto rispetto al valore non quantizzato (attraverso la
proprieta ‘.double’)
72
>> pi_q.double-pi
ans =
8.9089e-006
Facendo ulteriori prove si puo vedere come sia semplice valutare gli effetti di
quantizzazione su una serie di operazioni aritmetiche.
>> pi_q_8 = fi(pi,0,8,5)
pi_q_8 =
3.1563
>> pi_q_8.double-pi
ans =
0.0147
Il toolbox supporta l’esecuzione delle 4 operazioni aritmetiche su oggetti di
tipo ‘fixed-point’. Attraverso questa libreria e stato quindi possibile conver-
tire lo schema simulink originale in uno schema quantizzato. Naturalmente
il livello di quantizzazione e stato mantenuto paramentrico ad ogni blocco
simulink, in modo da concedere maggiore liberta nella progettazione. Sono
previste, pero, alcune operazioni sul segnale non banali (calcolo di modulo e
fase, operazioni trigonometriche). Per queste e stato necessario procedere in
un modo alternativo:
Per ipotesi, il blocco X non accetta in input dati di tipo ‘fi’, per cui all’entrata
del blocco si e dovuto convertire il segnale da fi a double e, all’uscita, da
double a ‘fi’. Questo significa che l’operazione viene calcolata a ‘precisione
macchina’, e poi viene quantizzato il risultato e cio e differente da quello
che avviene nell’implementazione VHDL (e quindi nella realta), dove tutto
il sistema e quantizzato.
BBAppendice
L’algoritmo CORDIC
Il metodo Cordic e’ uno dei modi piu’ validi per calcolare velocemente fun-
zioni trigonometriche come seni, coseni, esponenziali, coseni iperbolici, seni
iperbolici. E’ particolarmente impiegato nelle unita di calcolo o nelle cal-
colatrici tascabili per la sua velocita’ di esecuzione e semplicita di realizza-
zione pratica sia a livello hardware che software. Il suo nome e l’acronimo
di ‘COordinate Rotation DIgital Computer algorithm’. L’aspetto piu rile-
vante di questo algoritmo e la possibilita di realizzarlo unicamente tramite
73
74
addizioni, sottrazioni e divisioni o moltiplicazioni per il fattore due in mo-
do iterativo. Dato che moltipicare (o dividere) un numero per un fattore
due significa, a livello hardware, effettuare uno shift aritmetico (a destra o a
sinistra) l’algoritmo non necessita di moltiplicatori hardware e cio consente
di risparmiare notevolmente sull’area e sulla potenza dissipata. L’algoritmo
originale calcola seno e coseno di un numero reale, ma puo essere facilmente
adattato per il calcolo di modulo e fase di un numero complesso ed e proprio
questa versione che ho utilizzato all’interno del sistema.
Sia z = a + ib il valore di ingresso; si vogliono calcolare le componenti di
modulo ρ e fase θ di z.ρ
θ
a
b
Re
Im
Dato
zk = a + ib, per k = 1, 2, 3, ..., n
avremo che
zk+1 = zk ∗ (1 + αk2−ki)
75
dove
αk =
+1 se Im(zk) > 0
−1 se Im(zk) < 0
Graficamente:
Re
Im
Mano a mano che le iterazioni proseguono, il vettore in input viene molti-
plicato con i vettori disegnati in rosso; la sua parte reale tende al valore ρ∗,
mentre la sua parte immaginaria tende a zero. La fase puo essere calcolata
al procedere dell’algoritmo, aggiungendo o sottraendo i valori di atan(2−k)
ad una variabile accumulatrice, sempre in funzione del valore di Im(zk). Il
valore di ρ∗ equivale a ρ ∗ 1.64671
1piu precisamente equivale a 1.64676025812107. La motivazione per questa correzione
risiede nel fatto che i vettori per i quali il numero e moltiplicato non hanno modulo uguale
a zero.
76
Dato
z1 = a + bi e z2 = c + di
allora
z1 ∗ z2 = (a + bi)(c + di)
ma
c = 1
e naturalmente
i2 = −1
quindi l’algoritmo diventa
zk+1 =
(a + b ∗ d) + (b − a ∗ d) ∗ i se Im(zk) > 0
(a − b ∗ d) + (b + a ∗ d) ∗ i se Im(zk) < 0
dove d = 2−k
L’algoritmo funziona correttamente per valori di ρ compresi tra 0◦e 90◦, men-
tre non ha limiti di funzionamento per quanto riguarda i valori del modulo.
Per assicurarne il funzionamento per tutti i valori della fase, quando l’al-
goritmo viene avviato si ‘sposta’ il valore nel quadrante corretto (mediante
cambiamenti di segno) e si assegna ad una variabile il reale quadrante di
partenza. Alla fine verranno apportate le adeguate correzioni alla fase.
77
Re
Im
Figura B.1: CORDIC - Schema Correzione Quadrante
78
input z=a+ib
sposta z nel 1'
quadrante
z è nel 1' quadrante?
memorizza lo spostamento
calcola n iterazioni di
cordic
effettua le correzioni di
fase
output: abs(z),angle(z)
z è nel 1' quadrante?
si no
no si
Figura B.2: CORDIC - Diagramma di Flusso - Correzione Quadrante
79
input z ( k )=a+ ib
re( z ( k +1)) = re( z ( k )) + shift( im ( z ( k )))
im ( z ( k )) > 0
output: modulo =re( z ( k )),
fase
k < KMAX ?
no si
im ( z ( k +1)) = im ( z ( k )) - shift(re( z ( k )))
re( z ( k +1)) = re( z ( k )) - shift( im ( z ( k )))
im ( z ( k +1)) = im ( z ( k )) + shift(re( z ( k )))
fase = fase - funz _ fase ( k ) fase = fase + funz _ fase ( k )
k = k +1
si
no
Figura B.3: CORDIC - Diagramma di Flusso - Iterazione
CCAppendice
Acronimi
80
81
Sigla Significato.
WAP Wireless Application Protocol.
SMS Short Message Service.
LINC Linear Amplification using Non linear Components.
ADC Analog to Digital Converter.
VHDL Very high speed integrated circuit Hardware Description Language.
AM Amplitude Modulation.
RF Radio Frequenza.
PLL Phase locked Loop.
UMTS Universal Mobile Telecommunications System.
PA Power Amplifiers.
ISI InterSymbol Interference.
SPS Subtractive Phase Shifting.
CPS Cumulative Phase Shifting.
EVM Error Vector Magnitude.
GSM Global System for Mobile Communications.
EDGE Enhanced Data rates for GSM Evolution.
DDAppendice
Codice vhdl
La presente appendice contiene i listati in codice VHDL dei blocchi piu im-
portanti progettati in questo lavoro. Sono stati omessi quelli che non saranno
oggetto di sintesi. Le entity che descrivono una struttura (ad esempio FIR)
non sono state incluse, ma possono essere ricavate dalle figure.
82
83
Adder.vhd
E parte del blocco FIR; si occupa di sommare i risultati dei moltiplicatori
library IEEE;use IEEE.STD_LOGIC_1164.all;use WORK.fix_std.all;
entity Adder isport(R_M0 : in FP_S_3_18;I_M0 : in FP_S_3_18;R_M1 : in FP_S_3_18;I_M1 : in FP_S_3_18;R_M2 : in FP_S_3_18;I_M2 : in FP_S_3_18;R_M3 : in FP_S_3_18;I_M3 : in FP_S_3_18;R_M4 : in FP_S_3_18;I_M4 : in FP_S_3_18;clk : in std_logic;Reset : in std_logic;R_Ris : out FP_S_1_14;I_Ris : out FP_S_1_14
);end Adder;
architecture AdderA of Adder isbeginprocess (Clk,Reset)begin
if(Reset = ’0’)then
R_Ris <= (others => ’0’);I_Ris <= (others => ’0’);
elsif (Clk’event AND Clk=’1’) then
Copy_S(R_Ris,R_M0+R_M1+R_M2+R_M3+R_M4);Copy_S(I_Ris,I_M0+I_M1+I_M2+I_M3+I_M4);
end if;
end process;end AdderA;
Addermod1.vhd
E parte del blocco SEPARATORE; si occupa di sommare la fase e l’arcoco-seno.
84
library IEEE;use IEEE.STD_LOGIC_1164.all;use WORK.fix_std.all;
entity Addermod1 isport(cos : in FP_S_1_12;fase : in FP_S_3_12;clk : in std_logic;Reset : in std_logic;Ris : out FP_S_3_12
);end Addermod1;
architecture Addermod1A of Addermod1 is
beginprocess (Clk,Reset)beginif(Reset = ’0’)thenRis <= (others => ’0’);elsif (Clk’event AND Clk=’1’) thenCopy_S(Ris,cos+fase);end if;end process;end Addermod1A;
Addermod2.vhd
E parte del blocco SEPARATORE; si occupa di sottrarre l’arcocoseno dallafase.
library IEEE;use IEEE.STD_LOGIC_1164.all;use WORK.fix_std.all;
entity Addermod2 isport(cos : in FP_S_1_12;fase : in FP_S_3_12;clk : in std_logic;Reset : in std_logic;Ris : out FP_S_3_12
);end Addermod2;
architecture Addermod2A of Addermod2 is
beginprocess (Clk,Reset)beginif(Reset = ’0’)thenRis <= (others => ’0’);
85
elsif (Clk’event AND Clk=’1’) thenCopy_S(Ris,fase-cos);end if;end process;end Addermod2A;
Arcocoseno.vhd
E la lookup-table dell’arcocoseno. non sono stati riportati tutti i valori masolo un piccolo sottoinsieme.
library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_signed.all;use IEEE.std_logic_arith.all;use IEEE.numeric_std.all;use WORK.fix_std.all;
entity arcocoseno isport(prodotto : in FP_S_1_12;
clk : in STD_LOGIC;Reset : in STD_LOGIC;
acos : out FP_S_1_12);
end arcocoseno;
architecture arcocosenoA of arcocoseno isbeginprocess (Clk,Reset)begin
if(Reset = ’0’)thenacos <= (others => ’0’);elsif (Clk’event AND Clk=’1’) then
case prodotto is
when "00000000000000" =>acos <= "01100100100010";when "00000000000001" =>acos <= "01100100100001";when "00000000000010" =>acos <= "01100100100000";
.....
when "00111111111111" =>acos <= "00000001011011";when "01111111111111" =>acos <= "00000000000010";when "11111111111111" =>acos <= "01100100100010";
86
end case;
end if;end process;end arcocosenoA;
coeff.vhd
E l’entity che fornisce ai moltiplicatori i coefficienti del filtro FIR. E struttu-rata come macchina a stati finiti.
library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_signed.all;use IEEE.std_logic_arith.all;use IEEE.numeric_std.all;use WORK.fix_std.all;
entity coeff isport(
clk : in STD_LOGIC;Reset : in STD_LOGIC;
c0 : out FP_S_1_13;c1 : out FP_S_1_13;c2 : out FP_S_1_13;c3 : out FP_S_1_13;c4 : out FP_S_1_13);
end coeff;
architecture coeffA of coeff isbeginprocess (Clk,Reset)variable Cnt: std_logic_vector(3 downto 0);begin
if(Reset = ’0’)thenCnt := "0000";elsif (Clk’event AND Clk=’1’) thenCnt := Cnt + "0001";
case Cnt iswhen "0000" =>c0 <= "000000000000000";c1 <= "000000100010110";c2 <= "001100001011101";c3 <= "001100001011110";c4 <= "000000100010111";
....
when "1111" =>c0 <= "000000011000000";c1 <= "001011010000110";
87
c2 <= "001101000010001";c3 <= "000000110001001";c4 <= "000000000000000";
end case;
end if;
end process;end coeffA;
complfunc.vhd
Il package definisce le funzioni per l’algoritmo di CORDIC.
library ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all;use WORK.fix_std.all;
package compl_func is
function fffase(n: integer) return FP_S_0_31;function Smi(n: integer; Ing: FP_S_3_14) return FP_S_3_14;
end;
package body compl_func is
function fffase(n: integer) return FP_S_0_31 isvariable b : FP_S_0_31;begincase n iswhen 0 => b := ("01100100100001111110110101010001");when 1 => b := ("00111011010110001100111000001011");when 2 => b := ("00011111010110110111010111111001");when 3 => b := ("00001111111010101101110101001101");when 4 => b := ("00000111111111010101011011101110");when 5 => b := ("00000011111111111010101010110111");when 6 => b := ("00000001111111111111010101010110");when 7 => b := ("00000000111111111111111010101011");when 8 => b := ("00000000011111111111111111010101");when 9 => b := ("00000000001111111111111111111011");when 10 => b := ("00000000000111111111111111111111");when 11 => b := ("00000000000100000000000000000000");when 12 => b := ("00000000000010000000000000000000");when 13 => b := ("00000000000001000000000000000000");when 14 => b := ("00000000000000100000000000000000");when 15 => b := ("00000000000000010000000000000000");when others => b := (others => ’0’);end case;return b;end fffase;
function Smi(n: integer; Ing: FP_S_3_14) return FP_S_3_14 is
88
Variable a : std_logic_vector(FP_S_3_14’LENGTH-1 downto 0);Variable b : std_logic_vector(FP_S_3_14’LENGTH-1 downto 0);begina := std_logic_vector(Ing);if a (FP_S_3_14’LENGTH-1)=’0’ thencase n iswhen 0 => b := (a);when 1 => b := ("0" & a(a’LENGTH-1 downto 1));when 2 => b := ("00" & a(a’LENGTH-1 downto 2));when 3 => b := ("000" & a(a’LENGTH-1 downto 3));when 4 => b := ("0000" & a(a’LENGTH-1 downto 4));when 5 => b := ("00000" & a(a’LENGTH-1 downto 5));when 6 => b := ("000000" & a(a’LENGTH-1 downto 6));when 7 => b := ("0000000" & a(a’LENGTH-1 downto 7));when 8 => b := ("00000000" & a(a’LENGTH-1 downto 8));when 9 => b := ("000000000" & a(a’LENGTH-1 downto 9));when 10 => b := ("0000000000" & a(a’LENGTH-1 downto 10));when 11 => b := ("00000000000" & a(a’LENGTH-1 downto 11));when 12 => b := ("000000000000" & a(a’LENGTH-1 downto 12));when 13 => b := ("0000000000000" & a(a’LENGTH-1 downto 13));when 14 => b := ("00000000000000" & a(a’LENGTH-1 downto 14));when 15 => b := ("000000000000000" & a(a’LENGTH-1 downto 15));when others => b := (others => ’0’);end case;elsecase n iswhen 0 => b := (a);when 1 => b := ("1" & a(a’LENGTH-1 downto 1));when 2 => b := ("11" & a(a’LENGTH-1 downto 2));when 3 => b := ("111" & a(a’LENGTH-1 downto 3));when 4 => b := ("1111" & a(a’LENGTH-1 downto 4));when 5 => b := ("11111" & a(a’LENGTH-1 downto 5));when 6 => b := ("111111" & a(a’LENGTH-1 downto 6));when 7 => b := ("1111111" & a(a’LENGTH-1 downto 7));when 8 => b := ("11111111" & a(a’LENGTH-1 downto 8));when 9 => b := ("111111111" & a(a’LENGTH-1 downto 9));when 10 => b := ("1111111111" & a(a’LENGTH-1 downto 10));when 11 => b := ("11111111111" & a(a’LENGTH-1 downto 11));when 12 => b := ("111111111111" & a(a’LENGTH-1 downto 12));when 13 => b := ("1111111111111" & a(a’LENGTH-1 downto 13));when 14 => b := ("11111111111111" & a(a’LENGTH-1 downto 14));when 15 => b := ("111111111111111" & a(a’LENGTH-1 downto 15));when others => b := (others => ’1’);end case;end if;return FP_S_3_14(b);end Smi;
end;
corin.vhd
La prima cella dell’algoritmo CORDIC ha il compito di determinare la po-sizione del vettore all’interno dei quattro quadranti e assegnare alle variabilidi controllo i valori corretti.
89
library IEEE;use IEEE.STD_LOGIC_1164.all;use WORK.fix_std.all;use WORK.compl_func.all;
entity cor_in isport(R_in : in FP_S_1_14;I_in : in FP_S_1_14;Clk : in std_logic;Reset : in std_logic;R_out : out FP_S_3_14;I_out : out FP_S_3_14;Phase : out FP_S_3_31;SIGN : out std_logic
);end cor_in;
architecture cor_ina of cor_in is
beginprocess (Clk,Reset)variable Zero : FP_S_1_14 := (others => ’0’);variable Zero2 : FP_S_3_14 := (others => ’0’);variable R_sh : FP_S_3_14;variable I_sh : FP_S_3_14;variable R_next : FP_S_3_14;variable I_next : FP_S_3_14;variable R_tmp : FP_S_3_14;variable I_tmp : FP_S_3_14;
begin
if(Reset = ’0’)thenCopy_S(R_out,Zero);Copy_S(I_out,Zero);Copy_S(Phase,Zero);Sign<=’0’;elsif (Clk’event AND Clk=’1’) then
Copy_V (Phase_Tmp, Zero);
if (R_in>=Zero) thenCopy_V (R_tmp, R_in);elseCopy_V (R_tmp, -R_in);end if;
if (I_in>=Zero) thenCopy_V (I_tmp, I_in);elseCopy_V (I_tmp, -I_in);end if;
if (I_tmp>R_tmp) thenCopy_V (R_next, I_tmp);Copy_V (I_next, R_tmp);Sign<=’0’;elseCopy_V (R_next, R_tmp);
90
Copy_V (I_next, I_tmp);Sign<=’1’;end if;
Copy_S (R_out , R_next);Copy_S (I_out, I_next);
end if;end process;end cor_ina;
cor2.vhd
Un sottoblocco di CORDIC che implementa un’iterazione dell’algoritmo.
library IEEE;use IEEE.STD_LOGIC_1164.all;use WORK.fix_std.all;use WORK.compl_func.all;
entity cor_2 isport(
R_tmp : in FP_S_3_14;I_tmp : in FP_S_3_14;Phase : in FP_S_3_31;Clk : in std_logic;Reset : in std_logic;R_out : out FP_S_3_14;I_out : out FP_S_3_14;Phase_out : out FP_S_3_31);
end cor_2;
architecture cor_2a of cor_2 is
beginprocess (Clk,Reset)
variable Zero : FP_S_3_14 := (others => ’0’);variable R_sh : FP_S_3_14;variable I_sh : FP_S_3_14;variable R_next : FP_S_3_14;variable I_next : FP_S_3_14;
begin
if(Reset = ’0’)thenCopy_S(R_out,Zero);Copy_S(I_out,Zero);Copy_S(Phase_out,Zero);elsif (Clk’event AND Clk=’1’) then
91
if (I_tmp>=Zero) then
Copy_V( R_next , R_tmp + Smi(2,I_tmp));Copy_V( I_next , I_tmp - Smi(2,R_tmp));Copy_S( Phase_out,Phase+fffase(2));
elseCopy_V( R_next , R_tmp - Smi(2,I_tmp));Copy_V( I_next , I_tmp + Smi(2,R_tmp));Copy_S( Phase_out,Phase-fffase(2));
end if;
Copy_S( R_out , R_next);Copy_S( I_out , I_next);
end if;end process;end cor_2a;
corout.vhd
Si occupa di correggere il valore finale della fase, a seconda dell’ingressoiniziale e dei segnali di controllo.
library IEEE;use IEEE.STD_LOGIC_1164.all;use WORK.fix_std.all;use WORK.compl_func.all;
entity cor_out isport(R_in : in FP_S_1_14;I_in : in FP_S_1_14;R_tmp : in FP_S_3_14;Phase : in FP_S_3_31;Sign : in std_logic;Clk : in std_logic;Reset : in std_logic;Fase : out FP_S_3_12
);end cor_out;
architecture cor_outa of cor_out is
beginprocess (Clk,Reset)variable Zero : FP_S_1_14 := (others => ’0’);variable Und : FP_S_1_14 := (others => ’U’);variable Ics : FP_S_1_14 := (others => ’X’);variable Zero2 : FP_S_3_14 := (others => ’0’);variable Phase_Tmp : FP_S_3_31;
variable Pi : FP_S_3_14:= "001100100100010000"; --pigreco
92
variable Pim : FP_S_3_14:= "000110010010001000"; --pigreco mezzivariable Piq : FP_S_3_14:= "000011001001000100";
begin
if(Reset = ’0’)thenCopy_S(Fase,Zero);elsif (Clk’event AND Clk=’1’) then
if (sign=’0’) thenCopy_V(Phase_Tmp,Piq-Phase);elseCopy_V(Phase_Tmp,Piq+Phase);end if;
if (R_in>Zero) and (I_in>Zero) thenCopy_V(Phase_Tmp,Phase_Tmp);elsif (R_in>Zero) and (I_in<Zero) thenCopy_V(Phase_Tmp,Zero-Phase_Tmp);elsif (R_in<Zero) and (I_in>Zero) thenCopy_V(Phase_Tmp,Zero-Phase_Tmp+Pi);elsif (R_in<Zero) and (I_in<Zero) thenCopy_V(Phase_Tmp,Phase_Tmp-Pi);elsif (R_in=Zero) and (I_in>Zero) thenCopy_V(Phase_Tmp,Pim);elsif (R_in=Zero) and (I_in<Zero) thenCopy_V(Phase_Tmp,Zero-Pim);elsif (R_in>Zero) and (I_in=Zero) thenCopy_V(Phase_Tmp,Zero);elsif (R_in<Zero) and (I_in=Zero) thenCopy_V(Phase_Tmp,Pi);end if;
Copy_S(Fase,Phase_Tmp);
end if;end process;end cor_outa;
moltip.vhd
I moltiplicatori del FIR.
library IEEE;use IEEE.STD_LOGIC_1164.all;use WORK.fix_std.all;
entity moltip isport(
clk : in std_logic;Reset : in std_logic;R_in : in FP_S_1_14;I_in : in FP_S_1_14;coeff_in : in FP_S_1_13;
93
R_out : out FP_S_3_18;I_out : out FP_S_3_18
);end moltip;
architecture moltipa of moltip is
begin
process (Clk,Reset)beginif(Reset = ’0’)then
R_out <= (others => ’0’);I_out <= (others => ’0’);
elsif (Clk’event AND Clk=’1’) then
Copy_S(R_out,R_in * coeff_in);Copy_S(I_out,I_in * coeff_in);
end if;end process;end moltipa;
psk.vhd
L’unita che implementa la codifica PSK; non e stata riportata completamen-te, ma solo la struttura essenziale.
library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_signed.all;use IEEE.std_logic_arith.all;use IEEE.numeric_std.all;use WORK.fix_std.all;
entity psk isport(
clk : in STD_LOGIC;Reset : in STD_LOGIC;Symbol :in std_logic_vector(2 downto 0);
R_out : out FP_S_1_14;I_out : out FP_S_1_14
);end psk;
architecture psk_a of psk isbeginprocess (Clk,Reset)variable Cnt: std_logic_vector(3 downto 0);begin
if(Reset = ’0’)then
94
Cnt := "0000";elsif (Clk’event AND Clk=’1’) thenCnt := Cnt + "0001";
case Cnt iswhen "0000" =>case Symbol iswhen "000" =>R_out <= "0000000000000000";I_out <= "0000001000101100";when "001" =>R_out <= "0000000000000000";I_out <= "0000001000101100";.....
end case;when "0001" =>case Symbol iswhen "000" =>R_out <= "0000000000000000";I_out <= "0000001000101100";when "001" =>R_out <= "0000000000000000";I_out <= "0000001000101100";
.....end case;
........
when "1111" =>case Symbol iswhen "000" =>R_out <= "0000000000000000";I_out <= "0000001000101100";when "001" =>R_out <= "0000000000000000";I_out <= "0000001000101100";.......
end case;end case;
end if;
end process;
end psk_a;
Elenco delle figure
2.1 Schema Funzionale - Sistema di comunicazione mobile . . . . . 14
2.2 Schema Funzionale - Trasmettitore LINC . . . . . . . . . . . . 15
2.3 Trasmettitore LINC - Schema fasoriale . . . . . . . . . . . . . 18
2.4 Schema Funzionale - Modulatore LINC . . . . . . . . . . . . . 19
95
ELENCO DELLE FIGURE 96
2.5 Traiettoria 1-3-7 . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.6 Traiettoria correttamente filtrata . . . . . . . . . . . . . . . . 22
2.7 Traiettoria non correttamente filtrata . . . . . . . . . . . . . . 23
2.8 Filtro FIR - Forma Canonica . . . . . . . . . . . . . . . . . . . 24
2.9 Traiettoria originale . . . . . . . . . . . . . . . . . . . . . . . . 25
2.10 Esempio CPS - figura 1 . . . . . . . . . . . . . . . . . . . . . . 26
2.11 Esempio CPS - figura 2 . . . . . . . . . . . . . . . . . . . . . . 27
2.12 Traiettoria con CPS . . . . . . . . . . . . . . . . . . . . . . . 28
2.13 Risposta in frequenza (modulo) del filtro . . . . . . . . . . . . 29
2.14 Risposta in frequenza (fase) del filtro . . . . . . . . . . . . . . 29
2.15 Risposta impulsiva del filtro . . . . . . . . . . . . . . . . . . . 30
2.16 Risposta allo scalino del filtro . . . . . . . . . . . . . . . . . . 30
2.17 Traiettoria filtrata . . . . . . . . . . . . . . . . . . . . . . . . 31
2.18 Schema Funzionale - Separazione del segnale . . . . . . . . . . 31
2.19 Spettro del segnale . . . . . . . . . . . . . . . . . . . . . . . . 34
2.20 Misura dell’EVM . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.1 Trasmettitore LINC - Modello Simulink - Generale . . . . . . 37
3.2 Trasmettitore LINC - Modello Simulink - Sezione 1 . . . . . . 37
ELENCO DELLE FIGURE 97
3.3 Trasmettitore LINC - Modello Simulink - Sezione 2 . . . . . . 38
3.4 Trasmettitore LINC - Modello Simulink - Sezione 3 . . . . . . 39
3.5 Output del FIR senza quantizzazione . . . . . . . . . . . . . . 41
3.6 Output del FIR con quantizzazione a 12 bit . . . . . . . . . . 42
3.7 Output del FIR con quantizzazione a 8 bit . . . . . . . . . . . 42
3.8 Spettro del segnale - Confronto tra differenti quantizzazioni . . 43
3.9 Spettro del segnale - Artefatti di quantizzazione . . . . . . . . 44
3.10 Confronto fra segnale trasmesso e segnale filtrato - figura 1 . . 47
3.11 Confronto fra segnale trasmesso e segnale filtrato - figura 2 . . 47
4.1 VHDL - Struttura gerarchica . . . . . . . . . . . . . . . . . . . 49
4.2 VHDL - Data Flow - Entity TOP.VHD . . . . . . . . . . . . . 53
4.3 VHDL - Data Flow - Entity FIR.VHD . . . . . . . . . . . . . 55
4.4 VHDL - Data Flow - Entity SEPARATORE.VHD . . . . . . . 59
4.5 VHDL - Data Flow - Entity CORDIC.VHD - prima parte . . 64
4.6 VHDL - Data Flow - Entity CORDIC.VHD - seconda parte . 65
5.1 Risultati - Spettro del segnale - 16 it. CORDIC . . . . . . . . 67
5.2 Risultati - Spettro del segnale - 12 it. CORDIC . . . . . . . . 68
ELENCO DELLE FIGURE 98
B.1 CORDIC - Schema Correzione Quadrante . . . . . . . . . . . 77
B.2 CORDIC - Diagramma di Flusso - Correzione Quadrante . . . 78
B.3 CORDIC - Diagramma di Flusso - Iterazione . . . . . . . . . . 79
Bibliografia
(1998). A survey of cordic algorithms for fpga based computers. ACM/SIGDA
International Symposium on Field-Programmable Gate Arrays (FPGA
’98), ACM/SIGDA.
A.Th. Schwarzbacher, A. Brasching T. W.; Foley J. (1999). Optimisation of
trigonometric functions for low power cmos implementations. Relazione
tecnica.
Cannizzaro R. (2004). Trasmettitore multistandard LINC integrato in tec-
99
BIBLIOGRAFIA 100
nologia CMOS: studio architetturale e progetto dell’amplificatore e del
ricombinatore. Tesi di Dottorato di Ricerca, Universita di Pavia.
Cox D. C. (1959). Linear amplification using non-linear components.
Relazione tecnica, IEEE.
Giacomantone J. O. (1992). Tradeoffs in arithmetic architectures for cordic
algorithm design. Relazione tecnica, CeTAD Fac de Ingenieria UNLP.
J.Volder (September 1959). The cordic computing technique. IRETrans
Computers, vol EC 8, 330-334.
Mashhour A. (1999). Understanding offset 8-psk modulation for gsm-edge.
Relazione tecnica.
Packard H. (1997). Digital modulation in communications systems an
introduction. Relazione tecnica, Hewlett Packard.
Proakis J. (1995). Digital communications.
Satish Ravichandran V. A. (2004). Pre-computation of rotation bits in unidi-
rectional cordic for trigonometric and hyperbolic computations. Relazione
tecnica, Hewlett Packard.
Schell S. V. (2000). Implementation effects on gsm’s edge modulation.
Relazione tecnica, Tropian, Inc.
Tso-Pin Chuang, Chao-Chuan Huang S.-F. H. (1998). Design of a
cordic-based sin/cos intellectual property (ip) using predictable sign bits.
Relazione tecnica.
Turkowski K. (January 17, 1990). Fixed-point trigonometry with cordic
iterations. Relazione tecnica, Apple Computer.