´ UNIVERSITA DEGLI STUDI DI PAVIA

´ FACOLTA 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 1.1 Lavoro svolto . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Scelta della tesi . . . . . . . . . . . . . . . . . . . . . . . . . .

6 7 9

2 Teoria del sistema 2

10

INDICE

3

2.1 Analogico o Digitale? . . . . . . . . . . . . . . . . . . . . . . . 12 2.2 Il trasmettitore LINC . . . . . . . . . . . . . . . . . . . . . . . 14 2.2.1 2.2.2 2.2.3 Struttura . . . . . . . . . . . . . . . . . . . . . . . . . 14 Teoria Matematica . . . . . . . . . . . . . . . . . . . . 17 Vantaggi . . . . . . . . . . . . . . . . . . . . . . . . . . 17

2.3 La sezione digitale . . . . . . . . . . . . . . . . . . . . . . . . 19 2.3.1 2.3.2 2.3.3 2.3.4 Modulazione PSK . . . . . . . . . . . . . . . . . . . . . 19 Interpolazione . . . . . . . . . . . . . . . . . . . . . . . 21 Il filtro FIR . . . . . . . . . . . . . . . . . . . . . . . . 23 Separazione del segnale . . . . . . . . . . . . . . . . . . 31

2.4 Valutazione dei risultati . . . . . . . . . . . . . . . . . . . . . 33 2.4.1 2.4.2 Maschera dello spettro . . . . . . . . . . . . . . . . . . 33 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 3.3.2 3.3.3

4 Quantizzazione Separazione . . . . . . . . . . . . . . . 45 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 4.5.2 Entit` CORDIC.VHD . . . . . . . . . . . . . . . . . . 61 a 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 C Acronimi

5 80

D Codice vhdl

82

Capitolo

Introduzione

1
6

Il primo capitolo introduce al lettore l’argomento dell’elaborato, assieme ad alcune considerazioni personali dell’autore sullo stato attuale della comunicazione mobile.

1.1. LAVORO SVOLTO

7

Il mercato della telefonia mobile negli ultimi anni si ` rivelato redditizio. e Le aziende produttrici sono incentivate dagli utili ad investire in ricerca e sviluppo per migliorare le prestazioni dei propri prodotti; attualmente le soluzioni tecnologiche ci offrono apparecchi cellulari in grado di adempiere ad una vasta gamma di funzionalit`, impensabili fino a qualche anno addietro. a L’utente finale ` ormai abituato ad usufruire di servizi che vanno ben al di e l` della comunicazione vocale. Navigazione su Internet tramite il protocollo a WAP (Wireless Application Protocol), trasmissione in tempo reale di segnali 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 pi` sofisticate di mou dulazione digitale, a spese di occupazioni di banda maggiori, si raggiungono velocit` di scambio dell’informazione (bit rate) sempre pi` elevate. Purtroppo a u l’utilizzo di queste funzionalit` ` ancora limitato dalla durata della batteria; ae 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 funzionalit` avanzate. Una possibile soluzione al a problema risiede nell’investire nel settore della ricerca per progettare dispositivi 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 digitale di una tipologia di modulatore per apparecchi di comunicazione mobile, 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 ` compoe sto da una sezione analogica e da una digitale. La sezione analogica ` stata e studiata e implementata su silicio da dottorandi dell’universit` di Pavia, in a collaborazione con ST Microelectronics. Uno studio teorico della parte digitale ` stato realizzato in particolare dalla dottoressa Paola Uggetti. I passi e fondamentali del mio lavoro sono stati:

• Comprendere a grandi linee il funzionamento del modulatore, attraverso 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 idealit` in un a

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 progetto (area, potenza dissipata, velocit` di funzionamento) cercando di a 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 particolare ` stato utilizzato il VHDL (Very high speed integrated circuit e Hardware Description Language).

1.2. SCELTA DELLA TESI

9

1.2

Scelta della tesi

Questa tesi sin dall’inizio mi ha molto interessato perch´ esamina un problee ma reale che pu` essere risolto in modi differenti. L’ingegnere informatico o puro potrebbe risolverlo implementando algoritmi di ottimizzazione degli errori di quantizzazione, mentre l’ingegnere elettronico potrebbe proporre confronti con architetture differenti. Il software, sin dal nome, ` qualcosa di e astratto, mentre studiare qualcosa che diverr` un componente reale di un a circuito di trasmissione dati mi ha appassionato enormemente e descrivere un circuito digitale in VHDL mi ha permesso di apprezzare ancora di pi` il u punto d’incontro tra informatica ed elettronica digitale.

Capitolo

Teoria del sistema

2
10

Per meglio comprendere l’implementazione del sistema, ` necessario descrivee re i principi teorici sui quali esso si basa. Questo capitolo contiene riferimenti alla struttura del trasmettitore LINC e descrive come il segnale viene elaborato per una corretta trasmissione. Include inoltre una descrizione dei metodi che ho utilizzato per valutare l’esito delle simulazioni effettuate.

11 La comunicazione ` sempre stata fondamentale per qualsiasi societ`. Il line a 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’umanit`, la quantit` di informazioni accessibili a tutti non ` mai stata a a e cos` importante come oggi. Essa si presenta sotto forma di dati, immagini, ı suoni e filmati. Se l’avvento delle prime reti informatiche ha fatto intravedere queste prospettive, oggi ` l’insieme delle attivit` umane che invoca uno e a sviluppo dei sistemi di comunicazione che, al di l` delle frontiere, diano nuove a dimensioni al nostro pianeta.

Sorgente

Ricevente

Un sistema di comunicazione pu` essere schematizzato a grandi linee con o trasmettitori di informazioni e ricettori potenziali collegati tra loro attraverso canali di comunicazione. I terminali sono dotati di componenti comuni, che si occupano di ottenere l’informazione, elaborarla ed infine trasmetterla. Il trasmettitore ` un circuito che si occupa di trasferire l’informazione (sia e essa vocale o di altro genere) al canale di telecomunicazione. Il compito del trasmettitore di cui mi occuper` in questo lavoro di tesi pu` essere diviso in o o 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’antenna, il segnale viene opportunamente amplificato per raggiungere i livelli di potenza previsti. Obiettivo primario di questa tesi ` di proporre una soluzioe 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 ` sempre e possibile o, per lo meno, potrebbe richiedere un grande sforzo di progettazione. Nel caso le operazioni di modulazione fossero particolarmente complesse non ` banale trovare una soluzione analogica, sempre che esista. Affidandosi e all’elettronica digitale, invece, il lavoro del progettista molte volte ` facilitato. e A meno di esigenze particolari, infatti, deve implementare in un linguaggio descrittivo le operazioni necessarie per ottenere il risultato, lasciando al calcolatore il compito di tradurre i costrutti in un circuito vero e proprio. Nel caso di esigenze particolari, potrebbe essere costretto a progettare o migliorare 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 pi` le caratteristiche dei componenti analogici sono u spinte, pi` il costo degli stessi aumenta. Il rovescio della medaglia ` rappreu e 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 pi` impegnativi da affrontare, nella progettau zione di circuiti digitali, pertanto, ` proprio quello di valutare l’impatto degli e errori di quantizzazione e dimensionare la dinamica del circuito. In natura i segnali sono analogici, cio` sono funzioni continue di una variabile continua e (come ad esempio la voce), e quindi possono essere classificati come tempo continui a valore continuo. In alcune applicazioni, per`, ` necessario disporre o e di segnali digitali, che possono essere classificati come tempo discreti a valore discreto. Il passaggio tra mondo analogico e mondo digitale avviene attraverso 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 segnale a tempo discreto x(n), prelevando dei campioni (samples) del segnale originario, in precisi istanti temporali, separati da un intervallo T. Il campionamento non comporta perdita di informazione, purch´ il segnale di ingresso e abbia banda finita e la frequenza di campionamento sia sufficientemente elevata. Sotto queste condizioni, il processo di campionamento ` reversibile, ed e il segnale analogico pu` essere ricostruito esattamente a partire dal segnale o 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, cio` dal numero di bit del processo e 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 trasmettitore LINC fu inventato da Cox (1959) negli anni trenta allo scopo di ottenere modulazioni di ampiezza (AM - Amplitude Modulation) di buona qualit` a tramite valvole poco lineari e dalle prestazioni non propriamente ottimali.

2.2.1

Struttura

La struttura generale del sistema ` la seguente: e

PA A/D CPU MODULATORE

PA DATI

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, gi` in formato digitale. Quando dev’essere a effettuata una trasmissione, l’unit` di elaborazione centrale suddivide questi a dati in spezzoni (burst); a seconda dello standard utilizzato (GSM, GSMEDGE, UMTS), hanno lunghezza differente. Per semplicit` durante la redaa zione della tesi non si ` tenuto conto di questo fattore, ma si ` supposto che e e 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 intercorre tra l’arrivo di un simbolo e il successivo ` un parametro dettato dallo e standard di trasmissione. Essa vale 270.8 kHz e verr` indicata da ora in a avanti come fL

Il blocco di trasmissione, evidenziato in verde, ` formato da due sottosezioni e differenti:

S1(t)

PA cos(ωt)

E(t)

MODULATORE

S2(t)

PA

SEZ. DIGITALE

SEZ. ANALOGICA

Figura 2.2: Schema Funzionale - Trasmettitore LINC La sezione digitale elabora il segnale d’ingresso, effettuando quattro operazioni:

1. Assegna ad ogni simbolo in ingresso un punto sulla mappa di modulazione PSK. 2. Interpola il segnale per poterlo filtrare in modo corretto. 3. Limita la banda del segnale che verr` trasmesso, per eliminare frea quenze che non possono-non devono essere trasmesse.

2.2. IL TRASMETTITORE LINC 4. Separa il segnale in due componenti S1 (t) e S2 (t).

16

La parte della sezione digitale che raccoglie i simboli in ingresso, pertanto, lavora a frequenza pari a fL . Successivamente, con l’interpolazione, la frequenza di elaborazione viene portata ad un valore pi` alto. u

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 ` 16×. La frequenza di elaborazione del segnale interpolato ` quindi e e 16 × 270.8 kHz = 4332.8 kHz e verr` indicata da ora in avanti con fM a ´ E importante sottolineare che la variazione dei simboli si mantiene a frequenza fL all’interno di tutta la sezione digitale. All’interno di essa, per`, le elaborazioni sul segnale vengono eseguite a frequenza differente (fL o e fM ) La sezione analogica, invece, effettua queste operazioni:

1. Modula i segnali S1 (t) e S2 (t) con una portante di equazione cos(ω0 t), in modo da portarlo alla reale frequenza di trasmissione. Questa operazione 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, ` opportuno esae 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(ω0 t + φ(t)) Sia S(t) = E(t)cos(ω0 t + φ(t)) con 0 < E(t) < Emax (2.2)

Questo segnale equivale, in forma esponenziale, a S(t) = {E(t)ejφ(t) ejω0 t } Allora si pu` dimostrare che o S(t) = Dove S1 (t) = Emax ejφ(t) ejα ejω0 t S2 (t) = Emax ejφ(t) e−jα ejω0 t e α = arccos E(t) Emax (2.5) S1 (t) + S2 (t) 2 (2.4) (2.3)

(2.6)

Questo significa che il trasmettitore LINC pu` produrre un segnale modulato o 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 ` il poter trasmettere un fluse so di dati (in rosso) utilizzando due segnali ad ampiezza costante (in blu)

2.2. IL TRASMETTITORE LINC

18

S2(t) S(t)

S1(t)

Figura 2.3: Trasmettitore LINC - Schema fasoriale ma a fase variabile. Ci` permette di utilizzare amplificatori di potenza non o lineari e quindi economici. Per fare questo, per` bisogna investire risorse o 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 pi` bassa u ´ (fL ), quindi con un minor consumo di energia. E opportuno sottolineare che il ricevitore dovr` possedere un circuito abbastanza complesso per ricavare a il segnale originario ma anche in questo caso la progettazione sar` facilitata a sulla parte analogica, perch´ non serviranno preamplificazioni linenari. e

2.3. LA SEZIONE DIGITALE

19

2.3

La sezione digitale

Una decrizione particolareggiata della sezione digitale del trasmettitore LINC ´ ` necessaria per capire le scelte intraprese nell’implementazione. E impore 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 ` formato da flussi di dati, composti da simboli. Ogni e 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 successione dei numeri, a partire dallo ‘0’, ` scandita da un codice di numerazione e Gray.1
1

La successione ` ‘000’,’001’,’011’,’010’,’110’,’111’,’101’,’100’ e

2.3. LA SEZIONE DIGITALE

20

Trasmettere il simbolo 1-3-7 significa idealmente compiere il cammino tracciato in figura 2.5. Nella realt` ci` significa trasmettere per ogni istante il a o 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.
Mappatura M-PSK 1

3
0.8

2
0.6

1

0.4

0.2

Im

0

6

0

-0.2

-0.4

-0.6

7

4

-0.8

5
-1 -1 -0.8 -0.6 -0.4 -0.2 0 Re 0.2 0.4 0.6 0.8 1

Figura 2.5: Traiettoria 1-3-7 Nella figura 2.5 ogni punto in rosso rappresenta il momento in cui viene scandito 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, ` necessario che la portante inverta bruscamente la fase. Questo si traduce, e nel dominio delle frequenze, in un’occupazione idealmente infinita della banda del segnale trasmesso e impone la necessit` di filtrare tale informazione. a In un sistema in cui il canale ha banda limitata, infatti, non ci si pu` pero mettere di avere un’estensione spettrale maggiore di quanto assegnato dallo standard, poich´ si potrebbe interferire con i canali adiacenti. Il filtraggio, e 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 ` opportuno sovracampionare il segnale, e in modo da aumentare la risoluzione in uscita, e quindi delineare un cammino pi` ‘continuo’. L’interpolatore ` definito come una scatola nera che raccoglie u e il segnale d’ingresso ad una frequenza di valore basso e restituisce il segnale ad una frequenza pi` alta; il rapporto u numero simboli in uscita OS = numero simboli in ingresso ` detto coefficiente di sovracampionamento (oversampling ratio). e Se indichiamo con n il numero di simboli del segnale di input e con m denotiamo il fattore di sovracampionamento, il segnale in output sar` costituito a 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 ` A B C; allora il segnale di output sar` A 0 0 B 0 0 C 0 0 e a

2.3. LA SEZIONE DIGITALE
Mappatura M-PSK

22

1.5

1
3 2 1

0.5

Im

0

6

0

-0.5
7 4 5

-1

-1.5

-1.5

-1

-0.5

0 Re

0.5

1

1.5

Figura 2.6: Traiettoria correttamente filtrata In questa figura la traiettoria del segnale ` correttamente filtrata, e nella e 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 parametri, dato che un filtro troppo ‘aggressivo’ modificherebbe la traiettoria del segnale, causando un overshoot: fenomeno per cui il modulo dell’inviluppo raggiunge valori molto maggiori di quelli ammissibili, determinando uno spreco di potenza e/o cadendo in zone di non linearit` (vedi figura 2.7). a Inoltre il filtraggio pu` portare a interferenza intersimbolica (InterSymbol o

2.3. LA SEZIONE DIGITALE
Mappatura M-PSK

23

1.5

1
3 2 1

0.5

Im

0

6

0

-0.5
7 4 5

-1

-1.5

-1.5

-1

-0.5

0 Re

0.5

1

1.5

Figura 2.7: Traiettoria non correttamente filtrata Interference) e causare mutua interferenza tra simboli consecutivi. Un’accurata analisi del sistema ` necessaria per trovare il compromesso tra potenza e dissipata e banda filtrata.

2.3.3

Il filtro FIR

Diversi studi teorici2 hanno dimostrato che il filtro indicato per questo tipo di modulazione ` un filtro FIR (Finite Impulse Response) con risposta impule
2

Mashhour (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) ` descritto dalla seguente equazione alle differenze : e y(n) = b0 x(n) + b1 x(n − 1) + ... + b(m−1) x(n − M) 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 ` altro che la somma degli ingressi ritare 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 ` l’ordine del filtro. Per e 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 Input1 -1 z -1 z -1 z -1 z

(2.7)

b(1)

K

b(2)

K

b(3)

K

b(4)

K

b(5)

K

1 Output

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 ` stato e 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.
3

Schell (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); Ci` rappresenta un notevole problema per l’architettura LINC, che o ` basata su due segnali simmetrici, modulati in fase. Una spiegazione pi` e u dettagliata sar` fornita pi` avanti, quando sar` descritta l’architettura della a u a 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’unit` ricevente possa ricavare il segnale a 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 linearit` nelle regioni a bassa potenza a distorcano il segnale.

Indichiamo con cn il segnale che esce dal codificatore 8-PSK e inoltre sia pn = e
3πn 8

avremo che sn = pn cn dove sn ` il segnale risultante, sul quale verr` applicato e a il filtro FIR. La funzione e
3πn 8

` periodica, con periodo n=16. In parole povere e
3πn 8

ogni simbolo modulato in fase 8-PSK viene ulteriormente ruotato di Phase Shifting.
1.5

dove

n ` l’indice del simbolo; questo tipo di operazione di definisce Cumulative e

6
1

5 C

4 B 3 2 A 1 16

7 8 9 E 10

D

0.5

0

−0.5

−1

F 11 12 G 13
0

H 14
0.5

15

−1.5 −1.5

−1

−0.5

1

1.5

Figura 2.10: Esempio CPS - figura 1 Il segnale originale ` correttamente assegnato a valori della modulazione 8e 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

6
1

5 C

4 B 3 2 A 1 16

7 8 9 E 10

D

0.5

0

−0.5

−1

F 11 12 G 13
0

H 14
0.5

15

−1.5 −1.5

−1

−0.5

1

1.5

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 il secondo su 15 (ovvero E-9 ruotato di ruotato di
9π ) 8 6π ) 8 3π , 8

e il terzo simbolo su 8 (ossia H-15

).

L’operazione di CPS trasforma il segnale di partenza in segnale ruotato, non passante per (0,0). Questa operazione risolve anche il problema di trasmissione 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 ` effettivamente possibile applicare il filtro che riduca la e banda del segnale trasmesso. I coefficienti di questo filtro sono determinati dalla sua risposta impulsiva, la quale ` definita dalla seguente equazione, il e
5 5 cui valore ` diverso da zero nell’intervallo − 2 T < t < 2 T e vale e

5 p(t) = c0 t + T 2

(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 = Si ha che
1 fL

ovvero il tempo di arrivo di ogni simbolo.

c0 (t) =

  

3 i=0

0

f (t + iT ) per 0 ≤ t ≤ 5T altrimenti

(2.9)

f (t) =

        

sinπ cosπ 0

t 0 g(u)du t−4T g(u)du 0

per 0 ≤ t ≤ 4T altrimenti

per 4T ≤ t ≤ 8T

(2.10)

1 g(t) = gGSM K (t − 2T ) 2

(2.11)

gGSM K (t) =

1 t 1 t 1 erfcα − − erfcα + 2T T 2 T 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.
Magnitude Response (dB) 50

0

−50

Magnitude (dB)

−100

−150

−200

−250

0

0.1

0.2

0.3

0.4 0.5 0.6 Normalized Frequency (×π rad/sample)

0.7

0.8

0.9

Figura 2.13: Risposta in frequenza (modulo) del filtro
Phase Response 0

−200

−400

Phase (degrees)

−600

−800

−1000

−1200

−1400

0

0.1

0.2

0.3

0.4 0.5 0.6 Normalized Frequency (×π rad/sample)

0.7

0.8

0.9

Figura 2.14: Risposta in frequenza (fase) del filtro

2.3. LA SEZIONE DIGITALE

30

Impulse Response 1

0.9

0.8

0.7

0.6 Amplitude

0.5

0.4

0.3

0.2

0.1

0

0

10

20

30

40 Samples

50

60

70

80

Figura 2.15: Risposta impulsiva del filtro

Step Response 30

25

20

Amplitude

15

10

5

0

0

10

20

30

40 Samples

50

60

70

80

Figura 2.16: Risposta allo scalino del filtro

2.3. LA SEZIONE DIGITALE

31

Dopo l’applicazione del filtro, la traiettoria del segnale non ` pi` rettilinea a e u 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

MODULO CONVERSIONE IM DA NUMERO COMPLESSO A RE MODULO E FASE + + FASE NORM ARC COS

+

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 ` visto che il valore mase simo in input ` pari a circa 1.6, per cui la normalizzazione viene calcolata e 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 ` quanto e vale la fase dei due vettori rossi, ovvero quanto vale l’angolo α.

S2(t) S(t) α S1(t)

a zero, il valore di α non pu` superare 90◦ . o

Dato che α = arccos |ρ∗ | , dove ρ∗ ` il modulo normalizzato, per ρ∗ che tende e

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, perci`, darebbe un o segnale nullo. Questo ` uno dei motivi per cui al segnale dev’essere applicata e la rotazione cumulativa di fase prima di effettuare il filtraggio.

2.4

Valutazione dei risultati

Il progetto ` stato sviluppato per lo standard GSM-EDGE, ma ` stato ime e plementato considerando la possibilit` di poterlo adattare ad altri standard a attualmente in vigore (GMS, UMTS). Per valutare la correttezza delle simulazioni, per`, ` necessario affidarsi a metodi precisi e a vincoli stabiliti dallo o e 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, descritta 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 pu` arrivare. In condizioni ottimali (ovvero senza effetti di quantizo zazione del segnale, quindi nelle simulazioni Matlab a dinamica ‘illimitata’) lo spettro ` ben al di sotto dei valori limite (figura ??,in nero). In un sie 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 ` pi` e u

2.4. VALUTAZIONE DEI RISULTATI

34

10 MASK Matlab 0

−10 Spettro di potenza [dBc] − Maschera EDGE

−20

−30

−40

−50

−60

−70

−80 −8

−6

−4

−2

0 Frequenza [Hz]

2

4

6 x 10

8
6

Figura 2.19: Spettro del segnale importante minimizzare i consumi e l’area occupata, quindi mi ` stato posto e l’obiettivo di rimanere 15 dB sotto la maschera. Questo valore tiene conto anche del fatto che alla sezione digitale seguir` anche la sezione analogica, a che introdurr` ulteriori non-linearit` e peggiorer` ulteriormente lo spettro. a a a 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 frequenza (fH ) e riconvertirlo in simboli. A causa della non idealit` del canale a di trasmissione e degli errori introdotti nella modulazione il segnale ricevuto

2.4. VALUTAZIONE DEI RISULTATI

35

non ` mai uguale al segnale trasmesso. Il ricevitore, pertanto deve avere e 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 vedr` delle traiettorie simili alla figura 2.9. Un filtro particolare, a con annesso un decimatore (che funziona nella maniera opposta dell’interpolatore) trasforma il segnale come in figura 2.12. Infine al segnale verr` a 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 errore (error vector) (in rosso) ` la differenza vettoriale tra il valore ideale e e quello effettivamente trasmesso del segnale. L’EVM ` dato dal valor medio e del modulo (in blu) di tale vettore. Nella realizzazione del progetto l’errore massimo ammesso per la parte digitale ` pari al 5 %. e

error vector magnitude segnale ideale error vector

segnale trasmesso

Figura 2.20: Misura dell’EVM

Capitolo

Implementazione Matlab

3

Per lo studio teorico del circuito digitale ` stato utilizzato l’ambiente di sie mulazione Matlab-Simulink. Attraverso un semplice linguaggio di scripting, progettato per il calcolo scientifico, ` stato possibile ottenere da subito dei rie 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 modellizzazione del progetto era gi` pronta. Come prima cosa, ho investito un p` a o di tempo nel comprenderne il funzionamento e ho riorganizzato la struttura secondo lo stile adottato nel resto del progetto.
O_SEP1 I_PSK O_FIR I_SEP O_SEP2 I_AN2 I_AN1 O_ANT

Random Integer

Integer to Bit Converter

output Signal To Workspace

Psk, Interpolazione, Separazione del FIR Segnale

Trasmissione

Figura 3.1: Trasmettitore LINC - Modello Simulink - Generale Lo schema ` molto simile alla figura 2.4, per semplicit` sono state raggruppate e a alcune sezioni. Per simulare il flusso di dati GSM-EDGE si ` utilizzato un e blocco che genera interi casuali da 0 a 7, convertiti poi in numeri binari.

1 I_PSK

M-PSK x[n/16] Product FIR Interpolation exp(jx) 1 O_FIR

Ramp

Zero-Order Hold

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 pendenza pari a
3πn ; 8

38

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) ` l’output del mantenitore e e √ i = −1; utilizzo z come variabile perch` il sistema ` a tempo discreto. Si e e

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 ` una variabile di stato (implee 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’` nulla di particolare da sottolineare. Mae tlab prende come parametri i coefficienti del filtro da applicare e il coefficiente di sovracampionamento ed elabora automaticamente il risultato.
acos Divide Trigonometric Function 1.6 Constant 1 O_SEP1

1 I_SEP

|u| u Complex to Magnitude-Angle

2 O_SEP2

Figura 3.3: Trasmettitore LINC - Modello Simulink - Sezione 2

3.2. EFFETTI DI QUANTIZZAZIONE

39

La sezione di separazone del segnale ` realizzata con due blocchi principali, e 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.6 Constant2

1 I_AN1 UnwrapA

exp(jx) Product1 1

2 I_AN2 UnwrapB

exp(jx) Product

Divide1

O_ANT

2 Constant1

Figura 3.4: Trasmettitore LINC - Modello Simulink - Sezione 3 L’ultimo blocco dello schema provvede a simulare il comportamento della sezione analogica, gi` realizzata da un altro team di sviluppo. Il segnale, dopo a essere stato modulato e amplificato, viene ricombinato e trasmesso all’antenna; naturalmente non verr` presa in considerazione nell’implementazione a 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 ` pertanto deciso di studiare a fondo il e problema della quantizzazione del segnale, ponendo un valore limite al numero di bit utilizzati per l’implementazione in VHDL delle varie operazioni. Naturalmente questo valore non ` fisso per tutto il percorso del segnale, ma e varia in funzione delle esigenze di precisione. Durante lo sviluppo del progetto ho dovuto valutare l’impatto sul risultato finale, in termini di spettro e di EVM, dei cambiamenti alla risoluzione di ognuno di questi parametri. Naturalmente 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 ` dovuto prendere in considerazione l’intero e sistema, effettuare parecchie prove e valutare i risultati. Questo pu` essere o 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, perch´ e 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 ` necessario riprogettare tutto, e Matlab offre strumenti validi che, cambiando pochi parametri, permettono di visualizzare il nuovo risultato; lo strumento principale per lo studio di segnali quantizzati ` il Fixed Point Toolbox. Ulteriori indicazioni sull’uso di questo e 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 pi` rilevanti. u

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 ` stato quantizzato a 8 bit; si e nota che esso percorre una griglia, saltando i valori intermedi e introducendo elevato rumore di quantizzazione.
1.5

1.4

1.3

1.2

1.1

1

0.9

0.8 −1.3

−1.2

−1.1

−1

−0.9

−0.8

−0.7

−0.6

−0.5

−0.4

−0.3

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, per`, il segnale fuoriesce dalla maschera e crea interferenza con gli altri o canali di comunicazione. Come si pu` notare, 8 bit non sono sufficienti per immagazzinare tutte le o informazioni. 10 e 12 bit potrebbero andare bene, ma si sta valutando una

3.3. RISULTATI

42

1.5

1.4

1.3

1.2

1.1

1

0.9

0.8 −1.3

−1.2

−1.1

−1

−0.9

−0.8

−0.7

−0.6

−0.5

−0.4

−0.3

Figura 3.6: Output del FIR con quantizzazione a 12 bit
1.5

1.4

1.3

1.2

1.1

1

0.9

0.8 −1.3

−1.2

−1.1

−1

−0.9

−0.8

−0.7

−0.6

−0.5

−0.4

−0.3

Figura 3.7: Output del FIR con quantizzazione a 8 bit situazione non reale. Quello che ` stato quantizzato non ` il segnale in e e tutti i punti del processo, ma solamente il risultato finale. D’altronde ci` ci o permette di delineare un limite, al di sotto del quale non ` possibile ridurre e la dinamica. In relazione alla prima parte (modulazione PSK e filtraggio) gli

3.3. RISULTATI

43

10 MASK matlab matlab 12 bit matlab 8 bit

0

−10 Spettro di potenza [dBc] − Maschera EDGE

−20

−30

−40

−50

−60

−70

−80

−90 −8

−6

−4

−2

0 Frequenza [Hz]

2

4

6 x 10

8
6

Figura 3.8: Spettro del segnale - Confronto tra differenti quantizzazioni Quantizzazione (bit) nessuna 12 10 8 EVM 1.2689 1.5613 2.0305 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 capacit` (in termini di dinamica) delle unit` di moltiplicazione dei a a coefficienti. • la capacit` (in termini di dinamica) dell’unit` di addizione dei prodotti. a a

3.3. RISULTATI

44

Per quanto riguarda la struttura interna del FIR, ho notato che dando un valore basso alla dinamica dei moltiplicatori (16-18 bit) comparivano in output alcuni ‘artefatti’.

−70

MASK matlab matlab16−16

Spettro di potenza [dBc] − Maschera EDGE

−75

−80

−85

−90

−95

−5

0

5

10 Frequenza [Hz]

15

20

25 x 10
5

Figura 3.9: Spettro del segnale - Artefatti di quantizzazione Il fenomeno ` causato dagli errori di arrotondamento nella moltiplicazione. e Se, per esempio volessimo moltiplicare due numeri, codificati con 16 bit di dinamica ciascuno, il numero ideale di bit per contenere il risultato ` 32. Un e numero inferiore provoca questo genere di artefatti. Per effettuare queste prove sulla dinamica del segnale, ` stato sufficiente inserire un blocco di tipo e ‘data conversion’ appena prima del blocco ‘FIR / interpolation’. Simulink ´ supporta, per quel blocco, l’elaborazione di oggetti ‘fi’. E inoltre possibile con facilit` specificare all’interno del blocco come comportarsi con i parametri a 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 segnale si ` rivelato molto pi` complesso del previsto. Sono presenti due operazioni e u 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 possibilit`: a

1. Effettuare i calcoli utilizzando i blocchi Matlab gi` esistenti, per poi a ´ 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 pi` azzardata, e sicuu ramente pi` dispendiosa in termini di tempo, ma che rende possibile u ottenere un risultato VHDL che coincide con le simulazioni Matlab.

I vantaggi di utilizzare Matlab per tutte le simulazioni sono i seguenti:

1. Portabilit`: il team di sviluppo della sezione analogica ha progettato a il sistema utilizzando Matlab e programmi di simulazione circuitale; al momento attuale non ` prevista un’integrazione con modelli VHDL. e Per ovviare al problema, per`, si possono elaborare i dati in VHDL e o convertirli in un formato comprensibile a Matlab, stratagemma che ho effettivamente utilizzato per valutare le prestazioni.

3.3. RISULTATI

46

2. Facilit` di manutenzione: quella proposta in questa tesi ` una soa e luzione ad uno specifico problema, con dei vincoli molto stringenti (in particolare ` una soluzione per lo standard GSM-EDGE). Dev’essere e 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 ` sotto la maschera) e ‘costi’ e (ovvero area occupata - potenza dissipata). Fortunatamente, per come ` stato implementato il codice VHDL, ` possibile, tramite semplici e e parametri, aumentare o diminuire la dinamica di ciascun punto del sistema.

Dopo attente valutazioni ho deciso dei scegliere la prima strada, investendo pi` tempo sul codice VHDL, dato che come obiettivo primario era produrre u un risultato concreto. Varie simulazioni effettuati mi hanno portato a stabilire 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 ` stata effettuata la rotazione di e
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 ` stato effettuato il soe 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 pu` notare che il segnale filtrato segue abbastanza o fedelmente l’originale, con le dovute eccezioni. Per esempio, al punto ‘B’ la potenza del segnale ` relativamente pi` bassa, mentre tra il ‘C’ e il ‘D’ c’` e u 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 ` compreso ta 0.2 e 1.6. e
1.5 F

1

A

0.5

C

E

0

−0.5 D −1 B

−1.5 −1.5

−1

−0.5

0

0.5

1

1.5

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 attraverso delle circonferenze. Una modulazione accurata tende a minimizzare questa distanza, permettendo al ricevitore di interpretare il segnale.
1.5

F 1 A

0.5 C E

0

−0.5 A D −1 B

−1.5 −1.5

−1

−0.5

0

0.5

1

1.5

Figura 3.11: Confronto fra segnale trasmesso e segnale filtrato - figura 2

Capitolo

Implementazione VHDL

4

Il passo finale del lavoro ` l’implementazione delle funzionalit` del modulae a tore LINC in un Hardware Description Language (linguaggio di descrizione dell’hardware) in modo da poter sintetizzare con semplicit` il modulatore a ´ in un circuito reale. E stato scelto il VHDL come linguaggio, per la sua semplicit` d’uso, l’elevata standardizzazione e il notevole supporto tecnico a disponibile in rete e all’interno dell’universit`. a

48

49

TOP

FIR

SEPARAZION E

PSK

CORDIC

FPFF (4)

COR_ (16) N

MOLTIPL(5)

FPFF(4)

ADDER ARCOSENO

COEFF ADDERMOD1

ADDERMOD2

COEFF

Figura 4.1: VHDL - Struttura gerarchica Nella figura 4.1 ` rappresentato lo schema gerarchico che descrive la struttura e dell’implementazione VHDL del progetto. Lo sviluppo ` avvenuto secondo e la metodologia ‘bottom-up’. Partendo dalle fondamenta, ho costruito un sistema correttamente funzionante, affiancato dalle unit` di test-bench. a

4.1. NOTE IMPLEMENTATIVE

50

4.1

Note Implementative

Il linguaggio VHDL ` un linguaggio che permette di descrivere le funzionae lit` dei circuiti elettronici con un livello di astrazione pi` alto delle singole a u porte logiche. Il VHDL sta diventando rapidamente il mezzo pi` diffuso per u 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 descrizione VHDL di un circuito pu` avere diversi livelli di astrazione : il livello pi` o u alto (quello pi` lontano dall’hardware) contiene una sommaria descrizione sul u comportamento dell’intera rete, un livello intermedio descrive la suddivisione del circuito nei vari sottoblocchi ed il funzionamento di ciascuno di questi mentre il livello di astrazione pi` basso, quello pi` vicino all’hardware, ` u u 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 pu` essere simulata funzionalmente e pu` essere eventualmente convero o 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 sequenziale pu` essere descritta da una logica combinatoria ed un registro ad essa o associata (eventualmente la struttura deve essere retroazionata). Si descrive il sistema come un flusso di dati tra registri. Si pu` immaginare che il flusso o 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 ` sviluppato secondo una variante e della logica RTL, in particolare, tutte le unit` che compongono il sistema si a comportano come registri , ovvero:

• Sono sincronizzate da un clock. • Ad esse ` associato un segnale di reset e • 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 modularit` del progetto) a • 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 ` stata utilizzata una libreria, dedicata alla gestioe 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 precisioni, garantendo la possibilit` di una successiva sintesi. Nella scrittura del a codice ho definito una convenzione per descrivere le variabili utilizzate. Ad esempio: e FP S 3 14 ` 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 ` solo una ‘maschera’, per gestire con pi` semplicit` le operazioni e u a in virgola mobile e renderle trasparenti al programmatore. Per il compilatore 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 ‘Coe py V’. La sintassi ` nella forma

Copy_[S|V] ( destinazione , sorgente )

Ci` permette di assegnare al valore di ‘destinazione’ il contenuto di ‘sorgente’. o ‘S’ oppure ‘V’ devono essere indicate, per specificare se ‘destinazione’ ` di e 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 pu` essere suddivisa in due macroblocchi, rappreo sentati dalla sezione di filtraggio/interpolazione e dalla sezione di separazione. L’ingresso del circuito ` rappresentato da un segnale a 3 bit, che viene letto da e 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’unit` ‘output’. I restanti blocchi a sono flip-flop di servizio, servono per propagare il segnale di attivazione della scrittura su file (solo quando esistono dati da immagazzinare).
clk clk_cordic clk_diviso reset

U2
Clk
Symbol(2:0)

U1
reset
sym(2:0) I_output

U4
clk_cordic clkd
R_output

U10
reset Clk clk
Mod_A R_ris

clk

fir_R_out

fir_I_out

Mod_B

I_ris

Figura 4.2: VHDL - Data Flow - Entity TOP.VHD

Write

Wr

input U5
S_in S_out

fir U6
S_in S_out

separatore U8
S_in S_out

output

U7
S_in S_out

U9
S_in S_out

Reset

Reset

Reset

Reset

Reset

Clk

Clk

Clk

Clk

Clk

ff

ff

ff

ff

ff

4.4. IL FILTRO FIR

54

L’entit` ‘top’ ` necessaria per simulare l’ambiente nel quale il vero e proprio a e circuito lavorer`. Per il funzionamente del sistema sono necessari tre segnali a 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 ; ` la frequenza di e lavoro della maggioranza delle unit` presenti del sistema ed ` anche a e la frequenza a cui viene aggiornato il segnale in output dalla sezione ‘separazione’. 3. clk CORDIC lavora alla frequenza fC , che equivale a fM x8. Viene utilizzato solo nella seconda parte, ed ` necessario all’unit` di convere a sione da notazione cartesiana a notazione polare. Una trattazione pi` u approfondita di questa unit` sar` svolta pi` avanti. a a u

Al di sopra di questo schema lavora il file di testbench, che fornisce le indicazioni 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 pari all’ordine del filtro stesso. In presenza di un interpolatore, per`, l’ordine o del filtro deve essere moltiplicato per il fattore di interpolazione. Nel nostro caso il FIR Gaussiano ` di ordine 5, mentre il fattore di oversampling e

4.4. IL FILTRO FIR

reset clkdiv _

Figura 4.3: VHDL - Data Flow - Entity FIR.VHD

U4
clk Reset
R_out Symbol(2:0) I_out

U1
Reset Clk

U2
Reset Clk

U3
Reset Clk

U6
Reset Clk

sym(2:0)

R_in R_out I_in I_out

R_in R_out I_in I_out

R_in R_out I_in I_out

R_in R_out I_in I_out

psk clk

fpff

fpff

fpff

fpff

U8
Reset
c0 clk c1 c2 c3 c4

U9
Reset R_in clk I_in
coeff_in

R_out

I_out

U10 moltip
coeff_in

Reset

R_in

clk

I_in

R_out

I_out

U11 moltip
coeff_in

Reset

R_in

I_in

clk

R_out

I_out

moltip

U12
Reset R_in clk I_in
coeff_in

R_out

I_out

U13 moltip
coeff_in

Reset

R_in

I_in

clk

R_out

I_out

coeff U14
R_M0 I_M0 R_M1 I_M1 R_M2 I_M2 R_M3 I_M3

moltip
Reset

R_M4

I_M4

R_Ris I_Ris

clk

R_output I_output

adder

55

4.4. IL FILTRO FIR

56

` pari a 16; Ad ogni ciclo di clock a frequenza fL il filtro avrebbe effettuato e (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 effettuare il pi` delle volte operazioni a vuoto. Si ` deciso quindi di ottimizzare la u e struttura del filtro, minimizzano il numero di moltiplicatori necessari. Sono state studiate diverse possibilit`, tutte quante scartate perch´ richiedevano a e molte pi` risorse di quelle effettivamente utilizzate per cui ho sviluppato una u soluzione ‘ad hoc’. Il punto chiave di questa struttura ` che richiede solo e 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’area disponibile. Le celle superiori contengono il dato in input; esse vengono aggiornate a frequenza fL . La prima unit` (PSK) si occupa di convertire il a 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’unit` sulla sinistra ` la cella dei coefficienti. E un contatore, che a e lavora a clock a frequenza fM . Ad ogni impulso emette in output i valori dei coefficienti dello stato attuale. Le cinque unit` centrali si occupano di a moltiplicare i dati in input per i coefficienti attuali; infine l’unit` in basso a addiziona il risultato e lo manda alla seconda parte del sistema. Per chiarire meglio le idee ` opportuno fare un esempio pratico. e
1 2´

ad un filtro FIR di ordine n sono associati n+1 coefficienti e quindi n+1 moltiplicatori E opportuno ricordare che interpolare un segnale significa interporre tra i vari simboli

dei valori nulli.

4.4. IL FILTRO FIR Sia dato il segnale d’ingresso QPONMLIHGFEDCBA

57

Ovvero il primo simbolo ` A, il secondo ` B, eccetera; Bisogna interpolare e e questo segnale; per semplicit` pongo fattore di sovracampionamento 3x. A a regime, il segnale di ingresso sar` a .... H 0 0 G 0 0 F 0 0 E 0 0 D 0 0 C 0 0 B 0 0 A Questo entrer` in un filtro FIR di ordine 5*Os =15 quindi avr` 16 coefficienti, a a 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 ` necessario fare tutte le moltiplicazioni ma solo 5 , e perche il resto dei dati in ingresso ` pari a zero. e 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 0 F 0 0 0 F E 0 0 0 E 0 0 0 E D 0 0 0 D 0 0 0 D C 0 0 0 C 0 0 0 C B 0 0 0 B 0 0 0 B A 0 0 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 C16 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 C16

e cosi via...

4.4. IL FILTRO FIR

58

Come si pu` notare ` possibile mettere in un cella di memoria i dati (ad esemo e 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 verr` spostato nella seconda cella di memoria, per esser poi moltiplicato per a i coefficienti C4, C5, C6. Il filtro che verr` applicato ` un FIR di tipo Gaussiano. I coefficienti C1 e a e C16 tendono a zero; oltretutto, a causa di effetti di quantizzazione, nell’implementazione 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 ` deciso di non implee mentare un ulteriore moltiplicatore, e, a sua volta, un operatore di addizione in pi` . u

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 unit` di moltiplicazione: 22 bit. a • Dinamica dell’unit` di addizione (e dell’output della sezione FIR): 16 a bit.

4.5. IL SEPARATORE

59

4.5
reset clk U1
Clk_slow Reset

Il Separatore

U4
clk Reset

U2
Reset clk Ris

fir_R_out fir_I_out clk_cordic

R_in I_in

Modulo

prodotto

acos

Mod_A

arcoseno
Clk Fase

cos fase

cordic

addermod1 U3
Reset clk cos fase Ris

Mod_B

addermod2

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 simboli che rappresentano numeri complessi, ovvero i dati che dovranno essere trasmessi. La prima sottounit` del modulatore ha il compito di calcolaa 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 ` molto semplice, implementare e il calcolo su un dispositivo hardware, invece, si ` rivelata un’impresa non e banale. Tra le tante possibilit`, esistono due metodi relativamente semplici a da implementare:

4.5. IL SEPARATORE

60

• Un algoritmo iterativo, che, a passi successivi approssima la soluzione cercata. Questa soluzione richiede maggior tempo di svirettamente implementata, una minore occupazione d’area sul circuito integrato. Si suppone che l’algoritmo richieda pi` di un’iterazione per u 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 delluppo, sempre che esista l’algoritmo adatto, e, probabilmente, se cor-

l’ingresso, restituisce il valore di modulo e fase. Il tempo di sviluppo di questa soluzione ` praticamente nullo. Attraverso una proe cedura Matlab (o altri linguaggi) si crea il file VHDL che descrive il comportamento desiderato dell’unit`. L’occupazione su silicio pu` a o 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 dinamica pari a 13 bit e a 15 bit rispettivamente. E’ possibile tramite semplici calcoli verificare che lo spazio occupato dalla loookup table ` enorme e quine di, per il calcolo del modulo e della fase, questa soluzione ` stata scartata e 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 ‘arcocoseno’, invece, ho deciso di utilizzare una look-up table. Grazie ad alcune simulazioni ho notato che il metodo CORDIC avrebbe richiesto molto pi` u delle otto iterazioni concesse3 , ed, allo stesso tempo, il numero di possibili input era limitato (ricordiamo che il modulo ` un valore compreso tra 0.2 e e 1.6). La tabella ` stata costruita con uno script Matlab, che genera il codice e
3

Il 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 ` 1.6467 e * 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’, ` opportuno fare e una precisazione: quell’unit` trasmette in output due dati, ovvero il valore a del modulo e il valore della fase. Il segnale si propaga nel tempo da sinistra a destra; al primo ciclo il valore del modulo ` contenuto nell’unit` ‘CORDIC’, e a al secondo nell’unit` ‘arcocoseno’ e al terzo nelle unit` di addizione. La a a 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

Entit` CORDIC.VHD a

L’intero blocco ‘CORDIC’ ` formato da 16 celle (cor 1, cor 2, ecc..), ognuna e 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’entit` lavora alla frequenza fC , pari a 8 volte fM . Ognuna di a 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) ` una funzione che effettua lo shift aritmetico del e numero e Ffase (indice) restituisce un valore precalcolato da aggiungere o sottrarre al valore attuale della fase. La tabella contiene i valori dell’espressione 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 unit` a (‘arcocoseno’) legger` il valore ed effettuer` le necessarie operazioni. Il vaa a lore della fase, invece ` correttamente calcolato dopo sedici iterazioni di e CORDIC ovvero dopo sedici cicli di clock a fC , e quindi due ciclo di clock a fM ; le unit` di somma leggeranno il valore e lo combineranno in maniera a 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’entit` attraverso quattro flip-flop; Le unit` a a ‘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’ ` un semplice buffer che rende il risultato del e modulo all’unit` ‘arcocoseno’, mentre ‘corout b’, a seconda del valore iniziale a 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 SEPARATORE

Figura 4.5: VHDL - Data Flow - Entity CORDIC.VHD - prima parte

Clk_slow Reset U8
Clk

Clk U7
Clk Reset

U1
Reset Clk Reset
R_out I_out R_tmp I_tmp Phase R_out I_out Phase_out

U2
Clk Reset
R_tmp I_tmp Phase R_out I_out Phase_out

U3
Clk Reset
R_tmp I_tmp Phase R_out I_out Phase_out

U4
Clk Reset
R_tmp I_tmp Phase R_out I_out Phase_out

U5
Clk Reset
R_tmp I_tmp Phase R_out I_out Phase_out

U6
Clk Reset
R_tmp I_tmp Phase R_out I_out Phase_out

R_in

R_out

Modulo

R_in I_in

R_in

fpff2

I_in

Phase

SIGN

cor_in

cor_2

cor_3

U20
S_in S_out

cor_4

cor_5

cor_6

cor_7

U9
R_in R_out I_in Reset Clk I_out

U18
R_in R_out I_in Reset Clk I_out

Clk

ff

U21
S_in S_out Reset Clk

fpff

fpff

ff

64

4.5. IL SEPARATORE

Figura 4.6: VHDL - Data Flow - Entity CORDIC.VHD - seconda parte

U10
Reset
R_out I_out

U11
Reset Clk Clk

U12
Reset Clk

U13
Reset Clk

U14
Reset Clk

U15
Reset Clk

U16
Reset Clk

U19
Clk Reset
R_out I_out R_tmp I_tmp Phase Phase_out R_out

U17
Clk Reset
R_tmp Fase

R_tmp I_tmp

R_tmp I_tmp

R_out I_out

R_tmp I_tmp

R_out I_out

R_tmp I_tmp

R_out I_out

R_tmp I_tmp

R_out I_out

R_tmp I_tmp

R_out I_out

R_tmp I_tmp

Fase

Phase Phase_out

Phase Phase_out

Phase Phase_out

Phase Phase_out

Phase Phase_out

Phase Phase_out

Phase Phase_out

Phase

R_in

Sign

I_in

cor_8

cor_9

cor_10

cor_11

cor_12

cor_13

cor_14

cor_15

cor_out

65

Capitolo

Conclusione

5
66

L’ultimo capitolo riporta i risultati pi` importanti di questa esperienza di u progettazione e indica i possibili svliuppi futuri per questo progetto.

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 dello 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
20 MASK matlab VHDL 0

Spettro di potenza [dBc] − Maschera EDGE

−20

−40

−60

−80

−100 −8

−6

−4

−2

0 Frequenza [Hz]

2

4

6 x 10

8
6

Figura 5.1: Risultati - Spettro del segnale - 16 it. CORDIC all’ampio margine di errore mi ` stato consigliato di modificare in parte il sie stema, ottimizzando la potenza dissipata; per fare ci` ho sostituito le ultime o quattro sottounit` di CORDIC con dei flip-flop standard. Successivamente, a quando verr` effettuata la sintesi del sistema questi flip-flop saranno collegati a 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 nella maschera si riduce a 15 dB, l’EVM sale a 3,452%.
20 MASK matlab VHDL 0

68

Spettro di potenza [dBc] − Maschera EDGE

−20

−40

−60

−80

−100 −8

−6

−4

−2

0 Frequenza [Hz]

2

4

6 x 10

8
6

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 verr` effettuata dagli ingegneri della ST Mia dissipata e l’area occupata. • Le ottimizzazioni al codice VHDL, nel caso si stabilisse che la precisione

croelectronics; verranno effettuate simulazioni per stabilire la potenza

attuale dei calcoli non ` necessaria. e • L’integrazione con la sezione analogica, gi` sviluppata. a • L’ultimo passo prevede l’utilizzo del modulatore LINC su un reale apparato di comunicazione mobile.

Appendice

Fixed Point Toolbox

A

Il Fixed Point Toolbox ` un pacchetto aggiuntivo che si occupa di simulare e calcoli con aritmetica a punto fisso. Attraverso molteplici opzioni ` possibile e 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’ ` necessario crearlo, utilizzando il comando ‘fi’ con la seguente e 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 ` la lunghezza e della parola, espressa in bit che dovranno essere allocati. f ` la lunghezza e 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 π ` definito nella variabile ‘pi’; una sua e 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 questo oggetto possiamo visualizzarne la rappresentazione binaria attraverso la propriet` ‘.bin’ a >> pi_q.bin ans = 0110010010001000 e visualizzare lo scarto rispetto al valore non quantizzato (attraverso la propriet` ‘.double’) a

72 >> pi_q.double-pi ans = 8.9089e-006 Facendo ulteriori prove si pu` vedere come sia semplice valutare gli effetti di o 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 ` stato quindi possibile convere tire lo schema simulink originale in uno schema quantizzato. Naturalmente il livello di quantizzazione ` stato mantenuto paramentrico ad ogni blocco e simulink, in modo da concedere maggiore libert` nella progettazione. Sono a previste, per`, alcune operazioni sul segnale non banali (calcolo di modulo e o fase, operazioni trigonometriche). Per queste ` stato necessario procedere in e un modo alternativo: Per ipotesi, il blocco X non accetta in input dati di tipo ‘fi’, per cui all’entrata del blocco si ` dovuto convertire il segnale da fi a double e, all’uscita, da e double a ‘fi’. Questo significa che l’operazione viene calcolata a ‘precisione macchina’, e poi viene quantizzato il risultato e ci` ` differente da quello o e che avviene nell’implementazione VHDL (e quindi nella realt`), dove tutto a il sistema ` quantizzato. e

Appendice

L’algoritmo CORDIC

B

Il metodo Cordic e’ uno dei modi piu’ validi per calcolare velocemente funzioni trigonometriche come seni, coseni, esponenziali, coseni iperbolici, seni iperbolici. E’ particolarmente impiegato nelle unit` di calcolo o nelle cala colatrici tascabili per la sua velocita’ di esecuzione e semplicit` di realizzaa zione pratica sia a livello hardware che software. Il suo nome ` l’acronimo e di ‘COordinate Rotation DIgital Computer algorithm’. L’aspetto pi` rileu vante di questo algoritmo ` la possibilit` di realizzarlo unicamente tramite e a

73

74 addizioni, sottrazioni e divisioni o moltiplicazioni per il fattore due in modo 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 ci` consente o di risparmiare notevolmente sull’area e sulla potenza dissipata. L’algoritmo originale calcola seno e coseno di un numero reale, ma pu` essere facilmente o adattato per il calcolo di modulo e fase di un numero complesso ed ` proprio e 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. Im b

θ a Dato Re

zk = a + ib, per k = 1, 2, 3, ..., n

avremo che

zk+1 = zk ∗ (1 + αk 2−k i)

ρ

75 dove

+1 se Im(zk ) > 0 αk =  −1 se Im(zk ) < 0 Graficamente: Im

 

Re

Mano a mano che le iterazioni proseguono, il vettore in input viene moltiplicato con i vettori disegnati in rosso; la sua parte reale tende al valore ρ∗ , mentre la sua parte immaginaria tende a zero. La fase pu` essere calcolata o 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
1

pi` precisamente equivale a 1.64676025812107. La motivazione per questa correzione u

risiede nel fatto che i vettori per i quali il numero ` moltiplicato non hanno modulo uguale e a zero.

76 Dato z1 = a + bi e z2 = c + di allora ma z1 ∗ z2 = (a + bi)(c + di)

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◦ , mentre non ha limiti di funzionamento per quanto riguarda i valori del modulo. Per assicurarne il funzionamento per tutti i valori della fase, quando l’algoritmo 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

Im

Re

Figura B.1: CORDIC - Schema Correzione Quadrante

78

input z=a+ib

no

z è nel 1' quadrante?

si

sposta z nel 1' quadrante

memorizza lo spostamento

calcola n iterazioni di cordic

no

z è nel 1' quadrante?

si

effettua le correzioni di fase

output: abs(z),angle(z)

Figura B.2: CORDIC - Diagramma di Flusso - Correzione Quadrante

79

input zk)=a+ib (

si imzk)) > 0 ((

no

re(zk+1)) = re( zk)) + shift( im(())) ( ( zk

re(zk+1)) = re( zk - shift( im( ( ()) (z k)))

im((+1)) = im(()) - shift(re( zk zk zk ()))

im((k z+1)) = im(()) + shift(re( zk))) zk (

fase = fase - funz_fase(k )

fase = fase + funz_fase( k)

k= k+1

si k<KMAX ?

no

output: modulo=re(zk)), ( fase

Figura B.3: CORDIC - Diagramma di Flusso - Iterazione

Appendice

Acronimi

C
80

81

Sigla WAP SMS LINC ADC VHDL AM RF PLL UMTS PA ISI SPS CPS EVM GSM EDGE

Significato. Wireless Application Protocol. Short Message Service. Linear Amplification using Non linear Components. Analog to Digital Converter. Very high speed integrated circuit Hardware Description Language. Amplitude Modulation. Radio Frequenza. Phase locked Loop. Universal Mobile Telecommunications System. Power Amplifiers. InterSymbol Interference. Subtractive Phase Shifting. Cumulative Phase Shifting. Error Vector Magnitude. Global System for Mobile Communications. Enhanced Data rates for GSM Evolution.

Appendice

Codice vhdl

D
82

La presente appendice contiene i listati in codice VHDL dei blocchi pi` imu 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.

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 is port( 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 is begin process (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’arcocoseno.

84

library IEEE; use IEEE.STD_LOGIC_1164.all; use WORK.fix_std.all; entity Addermod1 is port( 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 begin process (Clk,Reset) begin if(Reset = ’0’)then Ris <= (others => ’0’); elsif (Clk’event AND Clk=’1’) then Copy_S(Ris,cos+fase); end if; end process; end Addermod1A;

Addermod2.vhd
´ E parte del blocco SEPARATORE; si occupa di sottrarre l’arcocoseno dalla fase.
library IEEE; use IEEE.STD_LOGIC_1164.all; use WORK.fix_std.all; entity Addermod2 is port( 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 begin process (Clk,Reset) begin if(Reset = ’0’)then Ris <= (others => ’0’);

85

elsif (Clk’event AND Clk=’1’) then Copy_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 ma solo 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 is port( 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 is begin process (Clk,Reset) begin if(Reset = ’0’)then acos <= (others => ’0’); elsif (Clk’event AND Clk=’1’) then case prodotto is when acos when acos when acos "00000000000000" => <= "01100100100010"; "00000000000001" => <= "01100100100001"; "00000000000010" => <= "01100100100000";

..... when acos when acos when acos "00111111111111" => <= "00000001011011"; "01111111111111" => <= "00000000000010"; "11111111111111" => <= "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 strutturata 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 is port( 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 is begin process (Clk,Reset) variable Cnt: std_logic_vector(3 downto 0); begin if(Reset = ’0’)then Cnt := "0000"; elsif (Clk’event AND Clk=’1’) then Cnt := Cnt + "0001"; case Cnt is when "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 is variable b : FP_S_0_31; begin case n is when 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); begin a := std_logic_vector(Ing); if a (FP_S_3_14’LENGTH-1)=’0’ then case n is when 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; else case n is when 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 posizione del vettore all’interno dei quattro quadranti e assegnare alle variabili di 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 is port( 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 begin process (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’)then Copy_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) then Copy_V (R_tmp, R_in); else Copy_V (R_tmp, -R_in); end if; if (I_in>=Zero) then Copy_V (I_tmp, I_in); else Copy_V (I_tmp, -I_in); end if; if (I_tmp>R_tmp) then Copy_V (R_next, I_tmp); Copy_V (I_next, R_tmp); Sign<=’0’; else Copy_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 is port( 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 begin process (Clk,Reset) variable variable variable variable variable begin if(Reset = ’0’)then Copy_S(R_out,Zero); Copy_S(I_out,Zero); Copy_S(Phase_out,Zero); elsif (Clk’event AND Clk=’1’) then Zero : R_sh : I_sh : R_next I_next FP_S_3_14 := (others => ’0’); FP_S_3_14; FP_S_3_14; : FP_S_3_14; : FP_S_3_14;

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)); else 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)); 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’ingresso iniziale 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 is port( 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 begin process (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 variable Piq begin

: FP_S_3_14:= "000110010010001000"; --pigreco mezzi : FP_S_3_14:= "000011001001000100";

if(Reset = ’0’)then Copy_S(Fase,Zero); elsif (Clk’event AND Clk=’1’) then if (sign=’0’) then Copy_V(Phase_Tmp,Piq-Phase); else Copy_V(Phase_Tmp,Piq+Phase); end if; if (R_in>Zero) and (I_in>Zero) then Copy_V(Phase_Tmp,Phase_Tmp); elsif (R_in>Zero) and (I_in<Zero) then Copy_V(Phase_Tmp,Zero-Phase_Tmp); elsif (R_in<Zero) and (I_in>Zero) then Copy_V(Phase_Tmp,Zero-Phase_Tmp+Pi); elsif (R_in<Zero) and (I_in<Zero) then Copy_V(Phase_Tmp,Phase_Tmp-Pi); elsif (R_in=Zero) and (I_in>Zero) then Copy_V(Phase_Tmp,Pim); elsif (R_in=Zero) and (I_in<Zero) then Copy_V(Phase_Tmp,Zero-Pim); elsif (R_in>Zero) and (I_in=Zero) then Copy_V(Phase_Tmp,Zero); elsif (R_in<Zero) and (I_in=Zero) then Copy_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 is port( 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) begin if(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’unit` che implementa la codifica PSK; non ` stata riportata completamena e 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 is port( 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 is begin process (Clk,Reset) variable Cnt: std_logic_vector(3 downto 0); begin if(Reset = ’0’)then

94

Cnt := "0000"; elsif (Clk’event AND Clk=’1’) then Cnt := Cnt + "0001"; case Cnt is when "0000" => case Symbol is when "000" => R_out <= "0000000000000000"; I_out <= "0000001000101100"; when "001" => R_out <= "0000000000000000"; I_out <= "0000001000101100"; ..... end case; when "0001" => case Symbol is when "000" => R_out <= "0000000000000000"; I_out <= "0000001000101100"; when "001" => R_out <= "0000000000000000"; I_out <= "0000001000101100"; ..... end case; ........ when "1111" => case Symbol is when "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 tec99

BIBLIOGRAFIA

100

nologia CMOS: studio architetturale e progetto dell’amplificatore e del ricombinatore. Tesi di Dottorato di Ricerca, Universit` di Pavia. a 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 unidirectional 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). Relazione tecnica. Turkowski K. (January 17, 1990). Fixed-point trigonometry with cordic iterations. Relazione tecnica, Apple Computer. Design of a

cordic-based sin/cos intellectual property (ip) using predictable sign bits.

Sign up to vote on this title
UsefulNot useful