143
Capitolul 1 - Introducere 1 CAPITOLUL 1 INTRODUCERE Procesoarele numerice de semnal realizează operaţii matematice. Calculatoarele folosite pentru afaceri şi alte aplicaţii generale nu sunt optimizate pentru algoritmi de prelucrare numerică a semnalelor (cum ar fi filtrarea digitală sau analiza Fourier). Microprocesoarele DSP sunt specializate pentru prelucrarea numerică a semnalelor. Numărul acestor dispozitive a cunoscut o creştere deosebită în ultimii zece ani, fiind folosite aproape în orice domeniu, de la telefoanele celulare până la instrumentele ştiinţifice avansate. Calculatoarele sunt extrem de utile în două direcţii principale: - manipularea datelor (procesarea cuvintelor şi managementul bazelor de date); - calculele matematice (folosite în ştiinţă, inginerie şi procesarea semnalelor digitale). Toate microprocesoarele pot realiza ambele sarcini. Este scump să realizezi un dispozitiv optimizat pentru amândouă. Există diferenţe în proiectarea hardware, cum ar fi mărimea numărului de instrucţiuni şi manipularea întreruperilor. Importante sunt şi problemele de marketing: costul de dezvoltare şi fabricare, durata de viaţă a produsului, etc. . Aplicaţii ale procesoarelor de semnal în comunicaţii 2 Microprocesoarele tradiţionale s-au îndreptat în principal către manipularea datelor. Similar, procesoarele DSP sunt concepute pentru realizarea calculelor matematice necesare procesării semnalelor digitale. Tabelul 1.1 arată cele mai importante diferenţe dintre aceste două categorii. Manipularea datelor este bazată pe mişcarea datelor şi verificarea inegalităţilor, în timp ce calculul matematic foloseşte în special înmulţirea şi adunarea. TABELUL 1.1 Manipularea datelor Calcul matematic Aplicaţii Procesarea cuvintelor, Managementul bazelor de date; Sisteme de operare, etc. Procesarea semnalelor digitale; Controlul mişcării; Simulări ştiinţifice şi inginereşti, etc Operaţii principale Mişcarea datelor (AB) Testarea valorii (if A=B then) Adunarea (A+B=C) Înmulţirea (AxB=C) Manipularea datelor implică stocarea şi sortarea informaţiei. Să considerăm un program de procesare a cuvintelor. Sarcina elementară este stocarea informaţiei (scrisă de către operator), organizarea informaţiei (ştergere şi copiere, verificarea ortografiei, încadrarea în pagină, etc.) şi apoi stocarea informaţiei (cum ar fi salvarea documentului sau printarea). Aceste sarcini sunt finalizate prin mutarea datelor de la o locaţie la alta şi prin verificarea inegalităţilor (A=B, A<B, etc.). Se doreşte sortarea unei liste de cuvinte în ordine alfabetică. Fiecare cuvânt este reprezentat de un număr pe 8 biţi, valoarea ASCII a primei litere din cuvânt. Aranjarea în ordine alfabetică implică rearanjarea ordinii

Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Embed Size (px)

DESCRIPTION

stocarea circularaamortizarea circularaaritmetica numerelor

Citation preview

Page 1: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 1 - Introducere 1

CAPITOLUL 1

INTRODUCERE

Procesoarele numerice de semnal realizează operaţii matematice.

Calculatoarele folosite pentru afaceri şi alte aplicaţii generale nu sunt

optimizate pentru algoritmi de prelucrare numerică a semnalelor (cum ar fi

filtrarea digitală sau analiza Fourier).

Microprocesoarele DSP sunt specializate pentru prelucrarea numerică a

semnalelor.

Numărul acestor dispozitive a cunoscut o creştere deosebită în ultimii

zece ani, fiind folosite aproape în orice domeniu, de la telefoanele celulare

până la instrumentele ştiinţifice avansate.

Calculatoarele sunt extrem de utile în două direcţii principale:

- manipularea datelor (procesarea cuvintelor şi managementul bazelor

de date);

- calculele matematice (folosite în ştiinţă, inginerie şi procesarea

semnalelor digitale).

Toate microprocesoarele pot realiza ambele sarcini.

Este scump să realizezi un dispozitiv optimizat pentru amândouă.

Există diferenţe în proiectarea hardware, cum ar fi mărimea numărului de

instrucţiuni şi manipularea întreruperilor.

Importante sunt şi problemele de marketing: costul de dezvoltare şi

fabricare, durata de viaţă a produsului, etc. .

Aplicaţii ale procesoarelor de semnal în comunicaţii2

Microprocesoarele tradiţionale s-au îndreptat în principal către

manipularea datelor.

Similar, procesoarele DSP sunt concepute pentru realizarea calculelor

matematice necesare procesării semnalelor digitale.

Tabelul 1.1 arată cele mai importante diferenţe dintre aceste două

categorii.

Manipularea datelor este bazată pe mişcarea datelor şi verificarea

inegalităţilor, în timp ce calculul matematic foloseşte în special înmulţirea şi

adunarea.

TABELUL 1.1

Manipularea datelor Calcul matematic

Aplicaţii

Procesarea cuvintelor,Managementul bazelor de date;Sisteme de operare, etc.

Procesarea semnalelor digitale;Controlul mişcării;Simulări ştiinţifice şiinginereşti, etc

Operaţiiprincipale

Mişcarea datelor (A→B)Testarea valorii (if A=B then)

Adunarea (A+B=C)Înmulţirea (AxB=C)

Manipularea datelor implică stocarea şi sortarea informaţiei.

Să considerăm un program de procesare a cuvintelor.

Sarcina elementară este stocarea informaţiei (scrisă de către operator),

organizarea informaţiei (ştergere şi copiere, verificarea ortografiei, încadrarea

în pagină, etc.) şi apoi stocarea informaţiei (cum ar fi salvarea documentului

sau printarea). Aceste sarcini sunt finalizate prin mutarea datelor de la o

locaţie la alta şi prin verificarea inegalităţilor (A=B, A<B, etc.).

Se doreşte sortarea unei liste de cuvinte în ordine alfabetică. Fiecare

cuvânt este reprezentat de un număr pe 8 biţi, valoarea ASCII a primei litere

din cuvânt. Aranjarea în ordine alfabetică implică rearanjarea ordinii

Page 2: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 1 - Introducere 3

cuvintelor până când valoarea ASCII creşte continuu de la început spre

sfârşitul listei. Aceasta poate fi realizată prin repetarea a doi paşi până când

aranjarea este terminată. Prima dată, se verifică dacă două cuvinte adiacente

sunt în ordine alfabetică. (IF A>B THEN…). Apoi, dacă cele două cuvinte nu

sunt în ordine alfabetică se schimbă între ele. Când acest proces de doi paşi se

repetă de câteva ori, pentru fiecare dintre perechile adiacente de cuvinte, lista

va fi eventual aranjată.

Ca un alt exemplu, se consideră printarea documentelor cu un soft de

procesarea cuvintelor. Computerul verifică continuu prin dispozitivul de

intrare (mouse sau tastatura) codul binar care indică printarea documentului.

Când acest cod este găsit, programul mută datele din memoria computerului

la imprimantă. Se observă aceleaşi două operaţii de bază: mutarea datelor şi

verificarea inegalităţilor. Operaţiile matematice sunt folosite ocazional şi nu

afectează semnificativ viteza de execuţie.

Comparativ, viteza de execuţie a celor mai mulţi algoritmi DSP este

limitată aproape complet de numărul de înmulţiri şi adunări. În Figura 1-1

este prezentată implementarea unui filtru digital FIR. Folosind notaţia

standard, semnalele de intrare sunt x[ ], în timp ce semnalele de ieşire sunt

notate y[ ].

Obiectivul este de a calcula eşantionul de la locaţia n (y[n]). Un filtru

FIR execută acest calcul prin adunarea eşantioanelor semnalului de intrare

ponderate cu coeficienţii a0, a1, a2, a3 … .

Ecuaţia y[n] este:

0 1 2 3 4[ ] [ ] [ 1] [ 2] [ 3] [ 4] ....y n a x n a x n a x n a x n a x n= + − + − + − + − +(1.1)

În funcţie de aplicaţie, pot fi puţini coeficienţi sau câteva mii. Deşi

există şi transfer de date şi evaluări ale inegalităţilor, operaţiile matematice

determină timpul de execuţie.

Aplicaţii ale procesoarelor de semnal în comunicaţii4

În afară de execuţia rapidă a calculelor matematice, procesoarele DSP

trebuie să realizeze un timp de execuţie prestabilit. Presupunem că am

programat computerul să efectueze o sarcină, de exemplu să convertească un

document realizat cu un procesor de cuvinte. Nu contează dacă execuţia

durează 10 milisecunde sau 10 secunde. Aşteptăm doar ca acţiunea să fie

terminată înainte să programăm computerul să execute o altă operaţie. Există

şi motive importante să nu fie mai rapid decât necesar. Odată cu creşterea

vitezei, va creşte costul, puterea consumată, dificultatea proiectării şi aşa mai

departe. Aceasta duce la o cunoaştere exactă a timpului de execuţie, (element

important pentru alegerea dispozitivului corespunzător) cât şi a algoritmului.

Figura 1-1 Filtrul digital FIR

Page 3: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 1 - Introducere 5

1.1 STOCAREA CIRCULARĂ

Procesoarele DSP sunt concepute să implementeze rapid algoritmii de

prelucrare numerică.

Pentru a înţelege partea hardware, trebuie să înţelegem mai întâi

algoritmii. În această secţiune vom face o listă detaliată a paşilor necesari

implementării unui filtru FIR. În următoarea parte vom vedea cum

procesoarele DSP sunt concepute să urmeze aceşti paşi cât mai eficient

posibil.

Pentru început, trebuie să facem diferenţa între procesarea întârziată şi

procesarea în timp real.

Un geofizician poate să folosească un seismograf pentru a înregistra

mişcarea pământului în timpul unui cutremur. După ce mişcarea s-a terminat,

informaţia poate fi citită cu ajutorul unui computer şi analizată cumva. Alt

exemplu al procesării întârziate este constituit de vizualizarea medicală, cum

ar fi tomografia computerizată. Datele sunt obţinute în timp ce pacientul este

legat la aparat, dar reconstituirea imaginii poate fi întârziată. Ideea este că

toate informaţiile sunt disponibile programului de procesare.

În cazul procesării în timp real, semnalul de ieşire este obţinut în

acelaşi timp în care semnalul de intrare este recepţionat. De exemplu, în

telefonie, pentru aparate auditive şi radar. Aplicaţiile trebuie să obţină

informaţia necesară imediat, deşi, uneori, poate fi întârziată puţin.

De exemplu, o întârziere de 10 milisecunde într-o convorbire telefonică

nu poate fi detectată de vorbitor sau ascultător.

Aplicaţiile în timp real primesc un eşantion, parcurg algoritmul, apoi

generează un eşantion (la ieşire) şi aşa mai departe. Alternativ, pot primi mai

multe eşantioane, parcurg algoritmul şi dau (la ieşire) un grup de eşantioane.

Aceasta este lumea DSP.

Aplicaţii ale procesoarelor de semnal în comunicaţii6

Acum ne uităm înapoi la Figura 1-1 şi ne imaginăm că este

implementat un filtru FIR în timp real. Pentru a calcula eşantionul de ieşire,

trebuie să avem acces la cele mai recente eşantioane de la intrare.

Presupunem că folosim 8 coeficienţi pentru acest filtru: a0, a1, …., a7.

Trebuie să cunoaştem valorile celor mai recente 8 eşantioane ale semnalului

de intrare: x[n], x[n-1],…, x[n-7]. Aceste 8 eşantioane trebuie stocate în

memorie şi reînnoite continuu pe măsură ce noi eşantioane sunt achiziţionate.

Care este cea mai bună metodă să prelucrăm aceste eşantioane?

Răspunsul este stocarea circulară.

Tabelele 1.2a şi b ilustrează o stocare circulară cu 8 eşantioane. Am

aşezat eşantioanele în 8 locaţii de memorie consecutive, 20041 până la 20048.

Tabelul 1.2a - Stocarea circulară la un moment dat

Adresa dememorie

Valoareamemorată

Eşantion

20041 -0.225767 x[n-3]

20042 -0.269847 x[n-2]

20043 -0.228918 x[n-1]

20044 -0.113940 x[n] cel mai nou eşantion

20045 0.048679 x[n-7] cel mai vechi eşantion

20046 0.222977 x[n-6]

20047 0.371370 x[n-5]

20048 0.462791 x[n-4]

Tabelul 1.2a arată cum 8 eşantioane de la intrare pot fi stocate la un

moment dat, în timp ce Tabelul 1.2b arată schimbările după ce următorul

eşantion este achiziţionat.

Sfârşitul şirului linear este conectat la începutul lui. Locaţia de

memorie 20041 este văzuta ca fiind următoarea după 20048, la fel cum 20044

Page 4: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 1 - Introducere 7

este lângă 20045. Urmărim şirul cu ajutorul unui pointer (a cărei variabilă este

o adresă) care indică unde sunt stocate cele mai recente eşantioane.

Tabelul 1.2b - Amortizarea circulară după eşantionul următor

Adresa dememorie

Valoareamemorată

20041 -0.225767 x[n-4]

20042 -0.269847 x[n-3]

20043 -0.228918 x[n-2]

20044 -0.113940 x[n-1]

20045 -0.062222 x[n] cel mai nou eşantion

20046 0.222977 x[n-7] cel mai vechi eşantion

20047 0.371370 x[n-6]

20048 0.462791 x[n-5]

De exemplu, în Tabelul a pointerul conţine adresa 20044, în timp ce în

Tabelul b conţine adresa 20045. Când este achiziţionat un nou eşantion, se

înlocuieşte cel mai vechi eşantion din şir, iar pointerul este mutat cu o adresa

înainte (este incrementat).

Stocarea circulară este eficientă deoarece, când este achiziţionat un nou

eşantion, trebuie schimbată o singură valoare.

Pentru a manevra un buffer circular avem nevoie de:

- un pointer care indică începutul bufferului circular în memorie (în

acest exemplu 20041);

- un pointer care să indice sfârşitul şirului (20048), sau o variabila

care să memoreze lungimea (8);

- trebuie să fie specificat pasul de citire al memoriei.

In Tabelul 1.2 pasul este 1, de exemplu: adresa 20043 conţine un

eşantion, adresa 20044 conţine următorul eşantion şi aşa mai departe.

Aplicaţii ale procesoarelor de semnal în comunicaţii8

Pointerul către cel mai recent eşantion trebuie modificat de fiecare dată

când noi eşantioane sunt achiziţionate. Cu alte cuvinte, trebuie să fie un

program logic care să controleze cum această valoare este reînnoita,

bazându-se pe parametrii bufferului circular.

Procesoarele DSP trebuie optimizate pentru manevrarea bufferelor

circulare pentru a obţine cea mai mare viteza de execuţie posibilă.

Stocarea circulara este folositoare şi în procesarea întârziată.

O metoda forţată este de a stoca în memorie întreaga lungime a fiecărui

semnal intermediar. Stocarea circulara oferă o altă opţiune: salvarea numai a

eşantioanelor necesare calculelor. Se reduce memoria necesara în schimbul

unui algoritm mult mai complicat.

Principalele companii producătoare de procesoare DSP sunt: Texas

Instruments, Analog Devices şi Motorola, etc.

Page 5: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 2 – Aritmetica numerelor 145

CAPITOLUL 2

ARITMETICA NUMERELOR

2.1 SISTEME DE NUMERAŢIE

Un sistem de numeraţie foloseşte pentru reprezentarea numerelor un set

de b simboluri:

{0, 1, 2, 3, … , b-1}

Dacă b>10 trebuie adăugate noi simboluri în afara cifrelor (litere etc.).

Un număr întreg pozitiv se scrie, în baza b, folosind simbolurile dk:

-1 3 2 1 0 b=(d d ...d d d d )k km

ceea ce este echivalent cu

-1 3 2 1 0-1 3 2 1 0d b d b ... d b d b d b d bk k

k km = + + + + + +

Similar pot fi reprezentate numerele raţionale folosind i+1 simboluri

pentru partea întreagă şi f simboluri pentru partea fracţionară:

-1 1 0 -1-1 1 0 -1d b d b ... d b d b d b ... d bi i f

i i fr −−= + + + + + + +

Exemple de sisteme de numeraţie: zecimal, binar, octal, hexazecimal.

a) Zecimal (b=10),

- setul de simboluri este {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

- reprezentarea numărului întreg 493 în baza 10:

49310 = 4•102 + 9•101 + 3•100 = 400 + 90 + 3

Aplicaţii ale procesoarelor de semnal în comunicaţii 146

- reprezentarea numărului raţional 35,54 în baza 10:

35,6410 = 3•101 + 5•100 + 6•10-1 + 4•10-2 = 30 + 5 + 0,6 + 0,04

b) Binar (b=2),

- setul de simboluri este {0, 1};

- valoarea numărului 110012 în zecimal este:

110012 = 1•24 + 1•23 + 0•22 + 0•21 + 1•20 = 16 + 8 + 1 = 25

- valoarea numărului 110,012 în zecimal este:

110,012 = 1•22 + 1•21 + 0•20 + 0•2-1 + 1•2-2 = 4 + 2 + 0.25 = 6,25

c) Octal (b=8),

- setul de simboluri este {0, 1, 2, 3, 4, 5, 6, 7};

- valoarea numărului 20768 în zecimal este:

20768 = 2•83 + 0•82 + 7•81 + 6•80= 2•512 + 56 + 6= 108610

d) Hexazecimal (b=16),

- setul de simboluri este {0, 1, 2, …, 9, A, B, C, D, E, F};

- reprezentarea numărului B3F16 în zecimal este:

B3F16=11•162 + 3•161 + 15•160= 11•256 + 48 + 15= 287910

2.2 CONVERSIA ÎNTRE SISTEMELE DE NUMERAŢIE

Conversia unui număr reprezentat într-o bază b în zecimal se face în

mod direct aşa cum s-a arătat în exemplele de mai sus.

Conversia din binar în hexazecimal se realizează grupând cifrele binare

în grupuri de câte 4 biţi, identificând simbolul hexazecimal corespunzător:

1101101,10011012 = 0110 1101,1001 10102 = 6D,9A16

Page 6: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 2 – Aritmetica numerelor 147

Conversia din zecimal în baza b se face separat pentru partea întreagă şi

pentru partea fracţionară:

- Pentru partea întreagă observăm că aceasta se mai poate scrie:

( )( )( )( )-1 3 2 1 0d b d b ... d b d b d b dk ki = + + + + + +

Se împarte i la b şi se obţine restul d0 şi un cât care are o

reprezentare similară cu i (pe mai puţini digiţi). Se repetă împărţirea

câtului la b până se ajunge la 0. Restul obţinut la fiecare împărţire

reprezintă simbolul dk al reprezentării în baza b a numărului întreg.

- Pentru partea fracţionară:

1 2 31 2 3d b d b d b ... d b ...k

kf − − − −− − − −= + + + + +

Se înmulţeşte f cu b şi se păstrează partea întreagă a membrului

drept, respectiv d–1.

1 2 11 2 3b d d b d b ... d b ...k

kf − − − +− − − −⋅ = + + + + +

( ) 1 21 2 3b b d =d d b ... d b ...k

kf − − +− − − −⋅ − + + + +

Se continuă înmulţind partea fracţionară a rezultatului la b până se

ajunge la 0. Reprezentarea în bază b a părţii fracţionare se face

luând în ordine inversă părţile întregi obţinute.

EXEMPLU: Reprezentarea în baza 2 a numărului 23,65:

- partea întreagă:

23 : 2 = 11 1 LSB 11 : 2 = 5 1 5 : 2 = 2 1 2 : 2 = 1 0 1 : 2 = 0 1 MSB

2310 = 101112

Aplicaţii ale procesoarelor de semnal în comunicaţii 148

- partea fracţionară:

0,65 × 2 = 1,3 1 MSB 0,3 × 2 = 0,6 0 0,6 × 2 = 1,2 1 0,2 × 2 = 0,4 0 0,4 × 2 = 0,8 0 0,8 × 2 = 1,6 1 0,6 × 2 = 1,2 1 0,2 × 2 = 0,4 0 ...

Rezultă că numărul 0,65 nu poate fi reprezentat în binar cu un număr finit de

biţi.

23,6510 = 10111,10100110…2

Reprezentarea numerelor, în cazul procesoarelor, este limitată la un

număr finit de biţi. Gama de lucru este astfel limitată. Considerând

reprezentarea unui număr binar pe N biţi vom avea un domeniu de 2N valori

zecimale care pot fi reprezentate.

2.3 REPREZENTAREA BINARĂ A NUMERELOR NEGATIVE

Pentru reprezentarea numerelor negative, bitul din stânga reprezentării

binare este folosit ca bit de semn.

Astfel avem bitul de semn:

- 0 pentru numere pozitive (+);

- 1 pentru numere negative (–).

Restul de N–1 biţi sunt folosiţi pentru reprezentarea valorii.

2N–2 ... 20

s m 1 bit N–1 biţi

Figura 2-1 Reprezentarea numerelor întregi cu semn

Page 7: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 2 – Aritmetica numerelor 149

2.3.1 Reprezentarea sub forma: bit de semn şi valoare absolută

(magnitudine)

Bitul de semn are semnificaţia arătată mai sus iar ceilalţi N-1 biţi

reprezintă valoarea absolută a numărului.

EXEMPLU:

Pentru N=6 biţi

9 = 0 01001

–9 = 1 01001

Domeniul de reprezentare:

- 2N–1 valori pozitive de la 0 la 2N–1–1.

- 2N–1 valori negative de la –(2N–1–1) la 0.

Se observă că:

a) avem două reprezentări ale lui zero, 000000 şi 100000.

b) maximul şi minimul (011111 şi 111111) au aceeaşi valoare absolută.

Principalele probleme sunt:

a) existenţa a două reprezentări ale lui zero;

b) pentru adunări avem nevoie de două sisteme de adunare şi de scădere

(în cazul numerelor negative).

2.3.2 Reprezentarea în complement faţă de 1

Pentru numerele pozitive, reprezentarea în complement faţă de 1 este

identică cu reprezentarea numerelor binare cu semn.

În cazul numerelor negative, reprezentarea este obţinută prin

complementarea (negarea) fiecărui bit. Această operaţie este echivalentă cu

adunarea cu 2N–1.

Aplicaţii ale procesoarelor de semnal în comunicaţii 150

EXEMPLU:

Pentru N=6 biţi

13 = 0011012

–13 = 1100102

EXEMPLU:

Pentru N=6 biţi, deoarece 2N–1 = 63, reprezentarea lui –13 se

poate obţine şi altfel:

63 + (–13) = 50 = 1100102

Se observă că numărul negativ este reprezentat prin schimbarea lui 0 în

1 şi 1 în 0 (deci bitul din stânga are semnificaţia de bit de semn).

–21 = –0101012 = 1010102

– (–13) = –1100102 = 0011012

Din nou există două reprezentări ale lui zero: 000000 şi 111111.

Numerele maxime şi minime ce pot fi reprezentate au în modul aceeaşi

valoare.

2.3.3 Reprezentarea în complement faţă de 2

Pentru numerele pozitive, reprezentarea în complement faţă de 2 este

identică cu reprezentarea numerelor binare cu semn.

În cazul numerelor negative, reprezentarea numărului negativ este

obţinută prin adunarea lui 2N la valoarea negativă.

EXEMPLU:

Pentru N=6 (deci 2N = 64).

13 = 0011012

–13 este 64 + (–13) = 51 = 1100112

Page 8: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 2 – Aritmetica numerelor 151

O metodă mai rapidă pentru obţinerea complementului faţă de 2 este:

a) Se complementează fiecare bit;

b) Se adună 1.

EXEMPLU:

Pentru N=6 biţi,

- pentru 13 = 0011012

se complementează biţii: 1100102

se adună 1: 1100112 = –13

- pentru –13 = 1100112

se complementează biţii: 0011002

se adună 1: 0011012 = +13

Bitul din stânga rămâne în continuare bit de semn. Există o singură

reprezentare a lui 0.

Domeniul de reprezentare a numerelor întregi în complement faţă de 2:

- 2N–1 valori pozitive de la 0 la 2N–1–1.

- 2N–1 valori negative de la –2N–1 la –1.

Avantajul reprezentării în complement faţă de 2 este că adunând un

număr cu complementul său faţă de 2 rezultatul este 0 (ignorând depăşirea)

ceea ce nu este valabil în cazul celorlalte reprezentări.

EXEMPLU:

Pentru N=6 biţi,

13+ 0011012

–13 1100112

= 0 10000002

Aplicaţii ale procesoarelor de semnal în comunicaţii 152

2.4 ARITMETICA NUMERELOR BINARE ÎN VIRGULĂ FIXĂ

În cele mai multe cazuri, procesoarele de semnal folosesc reprezentarea

în virgulă fixă pentru o reducere a costului şi a complexităţii şi pentru o viteză

de prelucrare mai mare. Considerând reprezentarea unui cuvânt în memorie

pe N biţi vom avea un domeniu de 2N valori zecimale care pot fi reprezentate.

Reprezentarea numerelor cu semn se face în complement faţă de 2.

2.4.1 Aritmetica numerelor întregi în virgulă fixă

Pentru reprezentarea numerelor întregi în virgulă fixă în complement

faţă de doi cuvântul binar este interpretat ca având virgula la dreapta celui

mai puţin important bit (LSB). Cel mai important bit (MSB) este bit de semn.

2N–1 2N–2 ... 20

s i . N biţi

Figura 2-2 Reprezentarea numerelor întregi în virgulă fixă

Domeniul în care pot fi reprezentate numerele întregi în complement

faţă de doi:

1 1,2 ..., 1,0,...,2 1N N− −− − −

EXEMPLU:

Reprezentarea numerelor întregi cu semn pentru N=4 biţi:

Zecimal Binar Zecimal Binar

0 0000 -8 1000 1 0001 -7 1001 2 0010 -6 1010 3 0011 -5 1011 4 0100 -4 1100 5 0101 -3 1101 6 0110 -2 1110 7 0111 -1 1111

Page 9: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 2 – Aritmetica numerelor 153

Adunarea numerelor întregi cu semn

EXEMPLU:

Pentru N=4 biţi,

1111 011 11 +3 0011 –5 1011 –3 1101 –2 1110 +3 0011 –4 1100

1 0001 –2 1110 –7 1001

Transportul de la bitul cel mai semnificativ se ignoră.

Pot apărea depăşiri ale formatului de reprezentare dacă rezultatul

adunării este mai mare ca 7 sau mai mic ca –8.

EXEMPLU:

Pentru N=4 biţi,

+3 0011 –3 1101 +6 0110 –6 1010

9 1001=–7 –9 0111 =7

Evident ambele rezultate sunt greşite, depăşirea fiind greu de detectat.

Se poate observa că, dacă adunând două numere cu acelaşi semn, rezultatul

are semn opus atunci a apărut depăşirea.

Procesoarele de semnal pot utiliza aritmetica cu saturaţie prin care, în

cazul unei depăşiri, rezultatul este înlocuit cu valoarea limită a intervalului de

reprezentare.

Scăderea numerelor întregi cu semn

Operaţia de scădere este echivalentă cu adunarea cu complementul faţă

de doi al descăzutului (scăderea unui număr e echivalentă cu adunarea

negativului numărului).

Aplicaţii ale procesoarelor de semnal în comunicaţii 154

Extensia bitului de semn

Este operaţia necesară la creşterea numărului de biţi pentru

reprezentarea binară a unui număr întreg. Bitul de semn este copiat de la

poziţia iniţială (al N-lea bit), spre stânga, până la MSB-ul noului cuvânt binar.

EXEMPLU:

N=4 biţi N’=8 biţi +3 0011 +3 0000 0011 –3 1101 –3 1111 1101

Înmulţirea / împărţirea cu o putere a lui 2

Înmulţirea cu 2k este echivalentă cu deplasarea numărului binar cu k

biţi spre stânga şi completarea cu 0 a biţilor mai puţin semnificativi.

Împărţirea cu 2k este echivalentă cu deplasarea numărului binar cu k

biţi spre dreapta şi extensia bitului de semn.

EXEMPLU:

N=8 biţi N=8 biţi 3 0000 0011 –3 1111 1101 3.22 0000 1100 –3.22 1111 0100

24 0001 1000 –24 1110 1000 24/23 0000 0011 –24/23 1111 1101

Înmulţirea numerelor întregi

Înmulţirea numerelor întregi fără semn în virgulă fixă necesită o

dublare a preciziei reprezentării rezultatului în caz contrar apar depăşiri.

Înmulţirea în binar se face la fel ca în zecimal doar că sunt numai două cifre

(0 şi 1).

Page 10: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 2 – Aritmetica numerelor 155

EXEMPLU:

Pentru N=4 biţi, rezultatul va fi reprezentat pe cel mult 8 biţi.

6 ×5

__ 30

0110 ×0101 0110 0000 0110 0000 + 0011110

În exemplul de mai sus au fost suficienţi 7 biţi dar dacă se înmulţesc

numere mai mari se poate avea transport şi la al 8-lea bit.

Înmulţirea poate fi privită şi ca o succesiune de deplasări la stânga şi

adunări ale înmulţitorului.

EXEMPLU:

În exemplul de mai sus numărul 5 poate fi scris:

0 25 2 2= +

Deci înmulţirea poate fi calculată ca o sumă:

( )0 2 26 5 6 2 2 6 1 6 2× = × + = × + ×

unde se face o deplasare la stânga a lui 6 cu 2 biţi.

6×1 6×22

0110 0110 + 0011110

Înmulţirea numerelor întregi cu semn trebuie să ia în considerare şi

extensia de semn. Astfel, pentru o reprezentare a rezultatului pe 2N biţi

trebuie ca cei doi operanzi cu semn reprezentaţi fiecare pe N biţi să fie extinşi

la 2N biţi înaintea înmulţirii. Pentru rezultatul înmulţirii vor fi consideraţi cei

mai puţin semnificativi 2N biţi.

Aplicaţii ale procesoarelor de semnal în comunicaţii 156

EXEMPLU:

–3 × 5

__

–15

11111101 ×00000101 11111101 11111101 + 1111110001

Având în vedere că reprezentarea pe 8 biţi a lui +15 este: 00001111

rezultatul înmulţirii cu semn este corect.

O altă metodă de înmulţire a două numere cu semn este de a înmulţi

numerele în valoare absolută (înmulţire fără semn) apoi se determină semnul

rezultatului din semnele celor doi operanzi şi se reprezintă rezultatul (în

complement faţă de 2 dacă e negativ).

Împărţirea numerelor întregi

Împărţirea numerelor întregi se face prin scăderi repetate ale

împărţitorului din deîmpărţit la fel ca împărţirea în zecimal.

EXEMPLU:

15| 3 1111 11 5 –11

0011 –11 00

101

Page 11: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 2 – Aritmetica numerelor 157

2.4.2 Aritmetica numerelor fracţionare în virgulă fixă

Un număr fracţionar f este un număr al cărui modul satisface

inegalitatea:

0.0 | | 1.0f≤ <

Exemple de numere fracţionare sunt: 0.15 şi –0.67.

Pentru reprezentarea numerelor fracţionare în virgulă fixă, pe N biţi, în

complement faţă de doi, cuvântul binar este interpretat ca având virgula la

dreapta bitului cel mai semnificativ (MSB) care este bitul de semn.

–20 2–1 ... 2–(N–1)

s . f N biţi

Figura 2-3 Reprezentarea numerelor fracţionare în virgulă fixă

Notând cu 1B N= − numărul de biţi alocaţi pentru valoarea

fracţionară, domeniul în care pot fi reprezentate numerele fracţionare în

complement faţă de doi pe N biţi este:

1,..., 2 ,0,2 ...,1 2B B B− − −− − −

EXEMPLU:

Reprezentarea numerelor fracţionare cu semn pentru N=4 biţi:

Zecimal Binar Zecimal Binar

0 0000 -1 1000 0.125 0001 -0.875 1001 0.250 0010 -0.750 1010 0.375 0011 -0.625 1011 0.500 0100 -0.500 1100 0.625 0101 -0.375 1101 0.750 0110 -0.250 1110 0.875 0111 -0.125 1111

Aplicaţii ale procesoarelor de semnal în comunicaţii 158

O metodă rapidă de conversie a numerelor fracţionare binare

Pentru o conversie mai rapidă a unui număr fracţionar din reprezentarea

binară în zecimal se observă că f reprezentat în binar pe N=B+1 biţi este

multiplu întreg de 2–B.

Fie i multiplul întreg corespunzător. Avem:

2Bi f= ⋅

ceea ce este echivalent cu o deplasare la stânga cu B biţi. Se obţine în binar un

număr întreg i cu aceeaşi reprezentare ca f.

–20 2–1 ... 2–B

s . f

–2B 2B–1 ... 20

s i . N biţi

Figura 2-4 Conversia fracţionar – întreg pentru reprezentarea pe N biţi

Astfel, pentru conversia binar-zecimal a unui număr fracţionar se

consideră reprezentarea binară ca un număr întreg cu semn şi se împarte la 2B.

EXEMPLU:

Conversia din binar în zecimal,

- pentru 0,010 0110 (N=8 biţi, B=7)

se calculează numărul întreg: 0010 0110 = 3810

se împarte la 27=128: 38/128 = 0.296875

- pentru 1,110 1100 (N=8 biţi, B=7)

se calculează numărul întreg 1110 1100

în complement faţă de 2: 0001 0100 = –2010

se împarte la 27=128: –20/128 = –0.15625

Page 12: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 2 – Aritmetica numerelor 159

Invers, pentru conversia unui număr fracţionar din reprezentarea

zecimală în binar se înmulţeşte numărul fracţionar f cu 2B şi se reprezintă în

binar partea întreagă i în complement faţă de 2 pe N=B+1 biţi.

EXEMPLU:

Conversia din zecimal în binar,

- pentru 0,875 (N=8 biţi, B=7)

se înmulţeşte cu 27=128: 0,875.128=11210

se reprezintă în binar pe 8 biţi: 11210 = 011100002

- pentru –0,625 (N=8 biţi, B=7)

se înmulţeşte cu 27=128: –0,625.128= –8010

se reprezintă pe 8 biţi: 8010 = 010100002

în complement faţă de 2: –8010 = 101100002

- pentru 0,65 (N=8 biţi, B=7)

se înmulţeşte cu 27=128: 0,65.128= 83,210

se reprezintă partea întreagă: 8310 = 010100112

În ultimul exemplu apare fenomenul de trunchiere deoarece numărul

fracţionar 0,65 nu poate fi reprezentat exact pe 8 biţi. Numărul 010100112

este în zecimal 0.6484375.

Adunarea numerelor fracţionare cu semn

Operaţia de adunare se face la fel ca pentru numerele întregi cu semn.

Reprezentarea în binar şi calculele se efectuează la fel, ceea ce este foarte util,

deoarece se pot folosi aceleaşi circuite de adunare şi pentru numerele întregi

şi pentru numerele fracţionare. Diferă reprezentarea în zecimal a rezultatelor.

Aplicaţii ale procesoarelor de semnal în comunicaţii 160

EXEMPLU:

Pentru N=4 biţi,

011 111 –0,625 1011 –0,25 1110 +0,375 0011 +0,375 0011 –0,25 1110 0,125 0001

Transportul de la bitul cel mai semnificativ se ignoră.

Pot apărea depăşiri ale formatului de reprezentare dacă rezultatul

adunării este mai mare ca 1–2–B sau mai mic ca –1.

EXEMPLU:

Pentru N=4 biţi,

0,75 0110 –0,875 1001 0,5 0100 –0,25 1110 1,25 1010 = –0,75 –1,125 0111 = 0,75

Înmulţirea numerelor fracţionare cu semn

În cazul înmulţirii numerelor fracţionare apar unele dificultăţi.

Rezultatul înmulţirii în binar a două numere reprezentate cu B biţi pentru

partea fracţionară + 1 bit de semn va trebui reprezentat pe 2B biţi + 1 bit de

semn. Aceasta este echivalent cu o dublare a zecimalelor pentru numerele

fracţionare reprezentate în zecimal.

N biţi s . f ×

1bit B biţi s . f

s . f

1bit 2B biţi

Figura 2-5 Reprezentarea rezultatului înmulţirii numerelor fracţionare

Page 13: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 2 – Aritmetica numerelor 161

Totuşi, folosind metoda de înmulţire a numerelor binare cu semn,

înmulţind două numere cu semn reprezentate pe N=B+1 biţi rezultă 2N biţi.

Rezultatul va avea cei mai puţin semnificativi 2B biţi corespunzând părţii

fracţionare iar cei mai semnificativi 2 biţi corespund părţii din stânga virgulei

(adică doi biţi de semn).

× N biţi

2N biţi s s . f

2 biţi 2B biţi

Figura 2-6 Reprezentarea rezultatului folosind înmulţirea numerelor întregi

Rezultatul binar astfel obţinut trebuie deplasat la stânga cu un bit pentru

a corespunde reprezentării unui număr fracţionar pe 2N biţi.

s . f 0 1bit 2B biţi 1bit

Figura 2-7 Reprezentarea rezultatului înmulţirii în format fracţionar

Rezultă că nu se pot folosi aceleaşi circuite de înmulţire şi pentru

numerele întregi cu semn şi pentru numerele fracţionare.

EXEMPLU:

0,5 × 0,5

____ 0,25

0100 × 0100 0000 0000 0100 + 00010000 0,0100000

În urma înmulţirii, precizia de reprezentare a rezultatului trebuie

dublată. Dacă se doreşte stocarea rezultatului în precizie simplă se poate face

Aplicaţii ale procesoarelor de semnal în comunicaţii 162

trunchierea celor mai puţini semnificativi biţi apărând o eroare de trunchiere

la ultimele zecimale ale numărului fracţionar. În cazul înmulţirii a două

numere întregi rezultatul nu poate fi trunchiat în mod direct.

Extinderea preciziei de reprezentare a numerelor fracţionare

În urma operaţiilor aritmetice cu numere fracţionare pot să apară două

fenomene: rezultatul înmulţirii trebuie stocat în dublă precizie şi rezultatul

adunării poate avea depăşiri spre partea întreagă. Pentru aceasta, în

procesoarele digitale de semnal există registre (acumulator) folosite pentru

stocarea în precizie extinsă a rezultatelor intermediare ale unor operaţii

aritmetice.

20.2–1 ... 2–(N–1) s . fracţionar 2M 21 20.2–1 ... 2–(N–1) 2–N ... 2–(2N–1) s întreg . fracţionar fracţionar

M biţi N biţi N biţi

Figura 2-8 Extinderea preciziei de reprezentare a numerelor fracţionare

Extinderea preciziei părţii fracţionare se face completând cu 0 la

dreapta LSB.

Extinderea preciziei părţii întregi se face prin extensie de semn la

stânga MSB.

EXEMPLU:

Să se reprezinte în precizie dublă pentru partea fracţionară şi cu

extensie de 4 biţi pentru partea întreagă numerele fracţionare reprezentate în

precizie simplă pe 8 biţi:

0,5 01000000 -0,25 11100000

0000 01000000 00000000 1111 11100000 00000000

Page 14: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 2 – Aritmetica numerelor 163

2.5 REPREZENTAREA NUMERELOR ÎN VIRGULĂ MOBILĂ

Formatele în virgulă mobilă pentru procesoarele de semnal din familia

Texas Instruments C3x constau în trei câmpuri:

- exponent;

- semnul;

- partea fracţionară.

Câmpul de semn şi câmpul parte fracţionară pot fi considerate ca o

singură entitate numită mantisa.

Figura 2-9 Formatul general în virgula mobilă

Ecuaţia generală pentru calculul valorii unui număr în virgulă mobilă

este:

2. 2eX ss f= ×

unde: s este bitul de semn, s este inversul valorii bitului de semn, f este

valoarea binară a câmpului reprezentând partea fracţionară şi e este

echivalentul zecimal al câmpului exponent.

Mantisa reprezintă un număr în complement faţă 2 normalizat.

Dacă s=0, atunci primii doi biţi ai mantisei sunt 01.

Dacă s=1, atunci primii doi biţi ai mantisei sunt 10.

Dacă bitul de semn este egal cu 0, mantisa devine 01.f2, unde f este

reprezentarea binară a câmpului parte fracţionară.

Dacă bitul de semn este egal cu 1, mantisa devine egala cu 10.f2, unde f

este reprezentarea binara a câmpului parte fracţionară.

Aplicaţii ale procesoarelor de semnal în comunicaţii 164

EXEMPLU:

Dacă f=000000000012 şi s=0, valoarea mantisei este

01.000000000012.

Dacă s=1 pentru aceeaşi valoare a lui f, valoarea mantisei este

10.000000000012.

Câmpul exponent este un număr în complement fată de 2 care

determină factorul lui 2 prin care numărul este înmulţit.

Câmpul exponent mută punctul binar în mantisă (la dreapta - dacă

exponentul este pozitiv şi la stânga - daca exponentul este negativ).

EXEMPLU:

Dacă

mantisa = 01.000000000012 şi e=1110

atunci punctul binar este mutat 11 locaţii la dreapta, obţinându-se numărul:

01000000000012

egal cu 2049 în zecimal.

‘C3x suportă patru formate în virgulă mobilă:

1. Imediat scurt, constând într-un exponent pe 4 biţi (în complement

faţă de 2), un bit de semn şi o parte fracţionara pe 11 biţi (sau echivalent un

câmp de 12 biţi reprezentând mantisa în complement fată de 2).

Figura 2-10 Formatul imediat scurt în virgula mobilă

Page 15: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 2 – Aritmetica numerelor 165

Operaţiile sunt realizate cu un punct binar între biţii 11 şi 10. Numărul

în format virgula mobila imediat scurt este dat de formula următoare:

e

e

01.f 2 daca 0

10.f 2 daca 1

0 daca e=-8

s

x s

⎧ × =⎪= × =⎨⎪⎩

În formatul scurt imediat în virgulă mobilă pentru a reprezenta 0

folosim următoarele valori rezervate:

e=–8, s=0, f =0

Următoarele exemple ilustrează gama de variaţie şi precizia formatului

scurt imediat în virgulă mobilă:

• Cel mai pozitiv: x = (2 – 2 –11 ) × 2 7 = 2.5594 × 102

• Cel mai puţin pozitiv: x = 1 × 2–7 = 7.8125 × 10–3

• Cel mai puţin negativ: x = (–1–2–11 ) × 2–7 = –7.8163 × 10–3

• Cel mai negativ: x = –2 × 27 = –2.5600 × 102

2. Normal scurt, pe 16 biţi, pentru date externe, în complement faţă de

2, format din un câmp de exponent de 8 biţi, un bit de semn şi o parte

fracţionară pe 7 biţi (Figura 2-11).

Figura 2-11 Formatul virgulă mobilă normal scurt pe 16 biţi, pentru date

externe

Numărul în formatul virgulă mobilă normal scurt pe 16 Biţi, pentru

date externe este dat de formula următoare:

Aplicaţii ale procesoarelor de semnal în comunicaţii 166

e

e

01.f 2 daca 0

10.f 2 daca 1

0 daca e=-128

s

x s

⎧ × =⎪= × =⎨⎪⎩

Pentru a reprezenta 0 folosim următoarele valori rezervate:

e =–128, s =0, f =0

Următoarele exemple ilustrează gama de variaţie şi precizia formatului

în virgulă mobilă normal scurt pe 16 Biţi, pentru date externe:

• Cel mai pozitiv: x = (2 – 2 –8 ) × 2 127 = 3.3961775 × 1038

• Cel mai puţin pozitiv: x = 1 × 2–127 = 5.8774717541 × 10–39

• Cel mai puţin negativ: x = (–1–2–8 ) × 2–127 = –5.9004306 × 10–39

• Cel mai negativ: x = –2 × 2127 = –3.4028236 × 1038

3. Precizie simplă cu un câmp de 8 biţi pentru exponent (e), un bit de

semn şi o parte fracţionara de 23 de biţi (mantisa de 24 de biţi in complement

binar - man), deci pe 32 biţi.

Figura 2-12 Formatul virgulă mobilă în precizie simplă

Operaţiile sunt realizate cu un punct binar implicit între biţii 23 si 22.

Când bitul implicit cel mai semnificativ este explicitat, el este localizat in

imediata vecinătate a punctului binar, in stânga.

Numărul in virgula mobila x este dat de următoarele relaţii:

e

e

01.f 2 daca 0

10.f 2 daca 1

0 daca e=-128

s

x s

⎧ × =⎪= × =⎨⎪⎩

Page 16: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 2 – Aritmetica numerelor 167

Trebuie folosite următoarele valori rezervate pentru a reprezenta 0:

e=-128, s=0, f=0

Gama de variaţie şi precizia formatului în virgulă mobilă în precizie

simplă:

Cel mai pozitiv: x = (2 – 2 –23 ) × 2 127 = 3.4028234 × 1038

Cel mai puţin pozitiv: x = 1 × 2–127 = 5.8774717 × 10–39

Cel mai puţin negativ: x = (–1–2–23 ) × 2–127 = –5.8774724 × 10–39

Cel mai negativ: x = –2 × 2127 = –3.4028236 × 1038

4. Precizie extinsă constând într-un exponent pe 8 biţi, un bit de semn

şi o parte fracţionara pe 31 de biţi (deci mantisa pe de 32 de biţi). Operaţiile

sunt realizate cu punct binar implicit între biţii 31 si 30.

Figura 2-13 Formatul virgulă mobilă în precizie extinsă

Numărul in virgula mobila x este dat de următoarele relaţii:

e

e

01.f 2 daca 0

10.f 2 daca 1

0 daca e=-128

s

x s

⎧ × =⎪= × =⎨⎪⎩

Trebuie folosite următoarele valori rezervate pentru a reprezenta 0:

e=-128, s=0, f=0

Gama de variaţie şi precizia formatului în virgulă mobilă cu precizie

extinsă:

• Cel mai pozitiv: x=(2-2-23) × 2127=3.4028234 × 1038

• Cel mai puţin pozitiv: x=1 × 2-127=5.8774717541 × 1038

Aplicaţii ale procesoarelor de semnal în comunicaţii 168

• Cel mai puţin negativ: x=(-1-2-31) × 2-127=-5.8774717569 × 10-39

• Cel mai negativ: x=-2× 2127=-3.4028236691 × 1038

Determinarea echivalentului zecimal a formatului în virgulă mobilă

Pentru a converti numărul ‘C3x în virgulă mobilă la echivalentul său

zecimal, trebuie respectaţi următorii paşi:

Pas 1: Se converteşte câmpul exponent la reprezentarea zecimală.

Câmpul exponent este un număr în complementul faţă de 2.

Pas 2: Se converteşte câmpul mantisa la reprezentarea zecimala. Dacă

bitul de semn este şters (s=0), se formează mantisa scriind 01 şi adăugând biţii

în câmpul fracţie după punctul binar.

EXEMPLU:

Dacă

f=101000000002

atunci

man=01.101000000002.

Dacă bitul de semn este setat (s=1), se formează mantisa prin scrierea

lui 10 şi adăugând biţii în câmpul fracţie după punctul binar.

EXEMPLU:

Dacă

f=101000000002

atunci

man=10. 101000000002

Page 17: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 2 – Aritmetica numerelor 169

Pas 3: Se deplasează punctul zecimal al mantisei în concordanţă cu

valoarea exponentului. Dacă exponentul este pozitiv, se deplasează punctul

binar la dreapta cu valoarea exponentului. Dacă exponentul este negativ, se

deplasează punctul binar la stângă.

EXEMPLU:

Daca e=210 şi man=01.110000000002, atunci mantisa devine

0111.0000000002, care este echivalent cu 7 în baza zece.

EXEMPLU:

Dacă e=2-10 şi man=01.100000000002, atunci mantisa deplasată devine

0.01100000000002, care este echivalentă cu 3/8 în bază zece.

EXEMPLU:

0 2 4 0 0 0 0 0 Valoarea hexazecimală

0000 0010 0100 0000 0000 0000 0000 0000 Valoarea binară

Exponentul = 0000 00102 = 2; Semn = 0; Fracţie = .100002;

Valoare = 01.12 × 22 = 01102. = 6

EXEMPLU:

0 1 C 0 0 0 0 0 Valoarea hexazecimală

0000 0001 1100 0000 0000 0000 0000 0000 Valoarea binară

Exponentul = 0000 00012 = 1; Semn = 1; Fracţie = .100002;

Valoare = 10.12 × 21 = 1012=–3

Operaţiile în virgulă mobilă presupun şi conversia (automată în

hardware) dintr-un format în altul (Figura 2-14).

Aplicaţii ale procesoarelor de semnal în comunicaţii 170

Figura 2-14 Conversii în virgulă mobilă

EXEMPLU:

F B 4 0 0 0 0 0 Valoarea hexazecimală

1111 1011 0100 0000 0000 0000 0000 0000 Valoarea binară

Exponent = 1111 10112 = –5; Semn = 0; Fracţie = .100002

Valoare = 01.12 × 2–5 = .0000112 = 3/64

Formatul ‘C3x în virgulă mobilă nu este compatibil cu standardul IEEE

754. Formatul IEEE pentru virgula mobilă foloseşte notaţie semn-

magnitudine pentru mantisă. Într-un cuvânt de 32 biţi reprezentând un număr

în virgulă mobilă, primul bit este bit de semn.

Page 18: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 31

CAPITOLUL 3

PROCESOARELE DSP MOTOROLA

- FAMILIA 56300 -

3.1 INTRODUCERE

Familia de procesoare Motorola DSP 56300 este prezentată în Figura

3.1-1.

Figura 3.1-1 Familia de procesoare Motorola DSP 56300

Procesoarele digitale de semnal DSP56311 şi DSP56307 sunt folosite

în special în telecomunicaţii. Ca si celelalte componente din familia

Aplicaţii ale procesoarelor de semnal în comunicaţii32

DSP56300, aceste dispozitive au evoluat din nucleul DSP56000 Motorola şi

păstrează coduri compatibile.

DSP56307 şi DSP56311, datorită memoriei mari integrate în chip şi a

coprocesorului, destinat în special operaţiilor de filtrare, sunt foarte potrivite

pentru aplicaţii DSP cum ar fi:

- eliminarea ecoului;

- procesarea benzii de baza;

- codarea si decodarea vocii.

Coprocesorul procesează algoritmi de filtrare în paralel cu funcţionarea

nucleului. Memoria RAM mare din interiorul chipurilor elimină stările de

aşteptare, permite funcţionarea pe mai multe canale, îmbunătăţeşte

performantele aplicaţiilor, şi reduce consumul de putere.

Principalele caracteristici ale procesorului DSP56307 sunt

• 170 MIPS, 100 Core MIPS

• EFCOP (coprocesor cu filtrare îmbunătăţită) 100 MIPS

• 64K cuvinte (24-bit) on-chip SRAM

• memoria de program: 16K, 24K, 32K, 40K sau 48K

• memoria de date: 48K, 40K, 32K, 24K sau 16K

• mai multe porturi: 2 porturi ESSI, portul SCI, interfaţa HI08, 6 canale

DMA

Principalele caracteristici pentru procesorul DSP56311 sunt:

• 255 MIPS, 150 Core MIPS;

• EFCOP (coprocesor de filtrare) 150 MIPS;

• memoria de program: 32K, 48K, 64K, 80K sau 96K;

• memoria de date: 96K, 80K, 64K, 48K sau 32K;

• 2 porturi ESSI, port SCI, interfaţa HI08, 6 canale DMA.

Page 19: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 33

Prezentăm două priviri de ansamblu pentru blocurile funcţionale la

DSP563xx.

Pentru privirea de ansamblu 1 apar:

1. Zona perifericelor (Peripheral Expansion Area)

2. Zona memoriei (Memory Expansion Area);

3. Nucleul (DSP56300 Core).

Figura 3.1-2 Privirea de ansamblu 1

Zona perifericelor (Peripheral Expansion Area)

• Coprocesorul - Enhanced Filter Coprocessor (EFCOP);

• Portul de comunicaţie serială - Serial Communications Interface (SCI)

port;

• Timerul - Triple Timer Module;

• Interfaţa HI08 - Host Interface (HI08) port;

Aplicaţii ale procesoarelor de semnal în comunicaţii34

• Porturile de comunicaţie serială sincronă - Dual Enhanced Synchronous

Serial Interface (ESSI) ports;

• Pinii I/O - 34 user-configurable General-Purpose I/O (GPIO) pins.

Figura 3.1-3 Privirea de ansamblu 2

Zona memoriei (Memory Expansion Area)

• 128K de cuvinte RAM;

• Memoria de program P: până la 96K x 24 biţi;

• Memoria de date X: până la 48K x 24 biţi;

• Memoria de date Y: până la 48K x 24 biţi;

• Până la 12M cuvinte de memorie externă pentru memoria de program – P

şi date X, Y.

Page 20: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 35

Figura 3.1-4 Nucleul

NUCLEUL (DSP56300 CORE)

• Unitatea aritmetică şi logică - Data Arithmetic Logic Unit (ALU);

• Unitatea de Generare a adreselor Address Generation Unit (AGU);

• Memoria portului A - Port A Memory Expansion;

• Memoria ROM;

• Program Control Unit – Program Control Unit (PCU);

• Controlerul DMA - Direct Memory Access (DMA) Controller;

• Oscilatorul - Phase Lock Loop (PLL) Clock Oscillator;

• Emulatorul - On-Chip Emulator.

Aplicaţii ale procesoarelor de semnal în comunicaţii36

3.2 UNITATEA ARITMETICĂ ŞI LOGICĂ (ALU)

Registrele ALU sunt (Figura 3-5):

a) de intrare: X(X1,X0) şi Y(Y1,Y0), cu lungime 48(24,24);

b) acumulatori: A(A2,A1,A0) şi B(B2,B2,B0) cu lungime 56(8,24,24).

47 0 47 0

23 0 23 0 23 0 23 0

55 0 55 0

23 7 0 23 0 23 0 23 7 0 23 0 23 0

*Citiţi ca biţi de extensie de semn.

X1 X0 Y0Y1

B1 B0A1 A0* A2 * B2

DATA ALUREGISTRE ACUMULATOR

DATA ALUREGISTRE DE INTRAREX Y

A B

Figura 3-5 Registrele ALU

În Figura 3-6 este prezentată structura ALU.

DSP56300 foloseşte reprezentarea fracţionară pentru toate operaţiile

ALU.

Virgula zecimală este aliniată la stânga (după bitul de semn).

Pentru a păstra alinierea la virgulă, datele pe 24 de biţi sunt scrise în

partea cea mai semnificativă a acumulatorului (A1 sau B1) iar A0 sau B0 vor

fi 0.

La scrierea operanzilor în acumulator se realizează extensia de semn în

registrele A2 sau B2.

Page 21: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 37

X0

X1

Y0

Y1

MULTIPLICARE

REGISTRE PIPELINE

MUX

REG PIPELINEREGISTRE PIPELINE

UNITATEA PRELUCRARE

PE BIT ŞI DE SHIFTARE

UNITATEA DE

ACUMULARE

ŞI ROTUNJIRE

ŞIFTARE

ACUMULATOR

A(56)

B(56)

SHIFTARE/LIMITARE

Y DATA BUS

P DATA BUS

24 24

X DATA BUS

OPERAND IMEDIAT

24 24

56

48

56

56

56

56 56 56

24

56

24

Figura 3-6 ALU

Rezultatele adunării şi scăderii sunt echivalente atât pentru numerele

fracţionare cât şi pentru numerele întregi.

Aplicaţii ale procesoarelor de semnal în comunicaţii38

La înmulţire sau la împărţire reprezentarea numerelor fracţionare diferă

de a numerelor întregi. Pentru înmulţirea numerelor întregi, datele sunt

aliniate la dreapta şi virgula zecimală este considerată la dreapta LSB.

Deoarece rezultatul înmulţirii este aliniat la dreapta, rezultă extensia la

doi biţi de semn. Pentru înmulţirea numerelor fracţionare, datele sunt aliniate

la stânga, cu virgula după bitul de semn.

Rezultatul înmulţirii este de asemenea aliniat la stânga şi se adaugă un

zero la LSB pentru completarea celor 2N biţi.

Rezultatul corect al înmulţirii numerelor întregi se obţine prin

deplasarea (shiftarea) aritmetică la dreapta cu un bit a rezultatului înmulţirii

fracţionare.

ÎNMULŢIREA NUMERELOR CU SEMN N x N –> 2N – 1 BIŢI

S

INTREG FRACŢIONAL

S

REZULTAT 2N – 1EXTENSIE DE SEMN

2N BIŢI

ÎNMULŢIRE CU SEMN

S MSP LSPS

S S

REZULTAT 2N – 1COMPLETARE CU ZERO

2N BIŢI

ÎNMULŢIRE CU SEMN

S MSP LSP 0

Figura 3-7 Înmulţirea numerelor întregi

Unitatea de înmulţire-acumulare (MAC UNIT)

Datele de intrare în MAC pot fi numai din registrele X sau Y.

Unitatea efectuează înmulţiri pe 24 x 24 biţi în format fracţionar,

operanzi cu sau fără semn.

Rezultatul înmulţirii este adunat la acumulatorul destinaţie

(instrucţiunea MAC).

Page 22: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 39

Dacă se foloseşte instrucţiunea MPY, acumulatorul este şters şi apoi se

scrie rezultatul înmulţirii.

Dacă rezultatul înmulţirii (56 biţi) este stocat ca operand pe 24 de biţi

LSP poate fi trunchiat sau rotunjit (rotunjirea cu instrucţiunile MACR,

MPYR, MACRI, MPYRI). Rotunjirea poate fi convergentă sau în

complement faţă de 2.

La stocarea în acumulator rezultatul înmulţirii poate fi saturat astfel ca

acesta să intre în 48 de biţi (fără a se mai folosi extensia acumulatorului A2

sau B2).

Înmulţirea cu acumulare

MAC (±)S1,S2,D 1 2D S S D± ⋅ →

S1, S2 - surse: registre: X0,Y0, X1,Y1

D - destinaţia: acumulator: A, B

MAC (±)S,#n,D 2 nD S D−± ⋅ →

S - sursa: registre: X0,Y0,X1,Y1

#n valoare imediată <23

D - destinaţia: acumulator: A,B

Înmulţirea

MPY (±)S1,S2,D 1 2S S D± ⋅ →

S1, S2 - surse: registre: X0,Y0,X1,Y1

D - destinaţia: acumulator: A,B

MPY (±)S,#n,D 2 nS D−± ⋅ →

S - sursa: registre: X0,Y0, X1,Y1

#n valoare imediată <23

D - destinaţia: acumulator: A,B

Aplicaţii ale procesoarelor de semnal în comunicaţii40

Înmulţirea cu acumulare cu operand imediat

MACI (±)#xxxx,S,D #D xxxx S D± ⋅ →

S - sursa: registre: X0,Y0, X1,Y1

#xxxx valoare imediată pe 24 biţi

D - destinaţia: acumulator: A, B

Înmulţirea cu operand imediat

MPYI (±)#xxxx,S,D # xxxx S D± ⋅ →

S - sursa: registre: X0, Y0, X1, Y1

#xxxx valoare imediată pe 24 biţi

D - destinaţia: acumulator: A, B

EXEMPLU:

Înmulţirea numerelor complexe se face conform formulei:

( ) ( )R I R I R IC jC A jA B jB+ = + ⋅ +

Rezultă:

R R R I I

I R I I R

C A B A BC A B A B

= ⋅ − ⋅= ⋅ + ⋅

Putem lua un exemplu numeric:

( ) ( )0.5 0.2 0.4 0.1 0.18 0.13j j j+ ⋅ + = +

Vom iniţializa registrele de date ale ALU astfel:

x1 x0 y1 y0

0.5RA = 0.4RB = 0.2IA = 0.1IB =

Rezultatul va fi obţinut în registrele acumulator astfel:

a b

0.18RC = 0.13IC =

Page 23: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 41

Programul în limbaj de asamblare este următorul:

move #0.5,x1 x1 x0move #0.4,x0 0.5 0.4move #0.2,y1 y1 y0move #0.1,y0 0.2 0.1

ampy x0,x1,a 0.2mac -y0,y1,a 0.2 + (-0.02) = 0.18 bmpy y0,x1,b 0.05mac x0,y1,b 0.05 + 0.08 = 0.13

Registrele acumulator A şi B

Sunt registrele de 56 de biţi, fiecare registru acumulator constă din trei

registre concatenate A2:A1:A0 sau B2:B1:B0. Oricare din cele 6 registre

menţionate pot fi scrise/citite pe magistrala de date X sau Y.

Dacă se doreşte transferul întregului acumulator pe magistrala X sau Y,

cei 56 de biţi din acumulator sunt shiftaţi/limitaţi la 24 de biţi.

Registrele acumulator sunt folosite ca:

- destinaţie pentru înmulţire şi operaţii logice;

- sursă / destinaţie pentru adunare şi deplasări.

Adunarea

ADD S,D S D D+ →

S - sursa: registru: B/A, X, Y, X0, Y0, X1, Y1

valoare imediată: #$xx, #$xxxxxx

D - destinaţia: acumulator: A/B

Aplicaţii ale procesoarelor de semnal în comunicaţii42

Scăderea

SUB S,D D S D− →

S - sursa: registru: B/A, X, Y, X0, Y0, X1, Y1

valoare imediată: #$xx, #$xxxxxx

D - destinaţia: acumulator: A/B

Un tip special de instrucţiuni sunt cele de înmulţire / împărţire cu 2 a

acumulatorului şi adunarea / scăderea unui operand. Aceste instrucţiuni sunt

utile în implementarea eficientă a fluturilor pentru decimare în timp la

algoritmii FFT.

Deplasarea la stânga şi acumularea

ADDL S,D 2S D D+ ⋅ →

Deplasarea la dreapta şi acumularea

ADDR S,D / 2S D D+ →

Deplasarea la stânga şi scăderea

SUBL S,D 2 D S D⋅ − →

Deplasarea la dreapta şi scăderea

SUBR S,D / 2D S D− →

S - sursa: acumulator: B/A

D - destinaţia: acumulator: A/B

Page 24: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 43

EXEMPLU:

Să considerăm funcţia de transfer:

1 * 1 * 1 * 2 1 2 2

1 1 1( )

(1 )(1 ) 1 ( ) 1 2Re{ } | |H z

pz p z p p z p pz p z p z− − − − − −= = =− − − + + − +

Ieşirea ( )y n poate fi calculată astfel:

2( ) 2Re{ } ( 1) | | ( 2) ( )y n p y n p y n x n= − − − +

Pentru un exemplu numeric:

0.8 0.5p j= − .

Avem

2| | 0.64 0.25 0.89p = + =

( ) 2 0.8 ( 1) 0.89 ( 2) ( )y n y n y n x n= ⋅ − − − +

Considerăm că avem în registrele y0, y1 şi b stările filtrului:

y1 y0 b

( 2)y n − ( 1)y n − ( )x n

Deoarece termenul 2Re{ }p are valori supraunitare nu putem stoca

direct valoarea 1.6 în registrul x0.

x1 x02| | 0.89p = Re{ } 0.8p =

Programul va calcula ieşirea ( )y n folosind instrucţiunea addl astfel:

mac x0,y0,a ; 0.8 ( 1)a y n= −

mac -x1,y1,b ; ( ) 0.89 ( 2)b x n y n= − −

addl b,a ; 2 ( )a a b y n= + ⇒

Aplicaţii ale procesoarelor de semnal în comunicaţii44

3.3 UNITATEA LOGICĂ ŞI DE DEPLASARE

Conţine un registru de deplasare pe 56 de biţi, bidirecţional, multi-bit şi

unitatea de procesare logică. Operaţiile efectuate sunt:

- deplasare stânga / dreapta multi-bit aritmetică şi logică;

- rotaţie cu 1 bit stânga / dreapta;

- extragerea, inserţia, concatenarea unui câmp de biţi;

- normalizarea acumulatorului;

- operaţii logice.

Deplasare aritmetică la stânga

ASL D cu un bit

ASL S1,S2,D cu mai mulţi biţi

Deplasare aritmetică la dreapta

ASR D cu un bit

ASR S1,S2,D cu mai mulţi biţi

S1 - număr de biţi: registru: X0,Y0,X1,Y1,A1,B1 sau

valoare imediată pe 6 biţi: #n

S2 - sursa: acumulator: A,B

D - destinaţia: acumulator: A,B

Page 25: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 45

EXEMPLU:

asl #7,a,b

asr x0,a,b

Deplasare logică la stânga

LSL D cu un bit

LSL S,D cu mai mulţi biţi

Deplasare logică la dreapta

LSR D cu un bit

LSR S,D cu mai mulţi biţi

S - număr de biţi: registru: X0, Y0, X1, Y1, A1,B1

valoare imediată pe 6 biţi: #n

D - destinaţia: acumulator: A, B

Aplicaţii ale procesoarelor de semnal în comunicaţii46

EXEMPLU:

lsl #7,a

lsr x0,b

Rotaţie la stânga cu un bit

ROL D

D: acumulator A,B

Rotaţie la dreapta cu un bit

ROR D

D: acumulator A,B

Page 26: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 47

Normalizarea acumulatorului

• pasul 1: se numără câţi biţi de 0 sau de 1 consecutivi sunt în acumulator

începând de la MSB (bitul 55);

• pasul 2: se scade acest număr din 9 şi se scrie rezultatul în MSP a

acumulatorului destinaţie (A1 sau B1). Acest rezultat este în intervalul –47,

+8;

• pasul 3: se shiftează aritmetic acumulatorul, la dreapta dacă operandul e

pozitiv, sau la stânga dacă e negativ, cu numărul de biţi egal cu diferenţă

anterioară.

CLB S,D D = 9 nr. MSB de 0 sau de 1din S

S - sursa: acumulator: A/B

D - destinaţia: MSP acumulator: B/A

Normalizarea acumulatorului

NORMF S,D dacă S[23]=0 atunci ASR S,D altfel ASL –S,D

S - sursa: registru: X0,Y0,X1,Y1,A1,B1

D - destinaţia: acumulator: A,B

EXEMPLU:

Înaintea execuţiei După execuţie

clb a,b A: $20:0000:0000 B: $00:0007:0000

normf b1,a A: $20:0000:0000 A: $00:4000:0000

Aplicaţii ale procesoarelor de semnal în comunicaţii48

Manipularea câmpurilor de date

EXEMPLU:

extract b1,a,a

EXEMPLU:

insert b1,x0,a

EXEMPLU:

merge x0,b

Page 27: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 49

Instrucţiuni logice

Şi logic

AND S,D [47 24] [47 24]S D D• − → −

S - sursa: registru: X0,Y0, X1,Y1

valoare imediată: #$xx, #$xxxxxx

D - destinaţia: acumulator: A/B

Sau logic

OR S,D [47 24] [47 24]S D D+ − → −

S - sursa: registru: X0, Y0, X1, Y1

valoare imediată: #$xx, #$xxxxxx

D - destinaţia: acumulator: A/B

Nu logic

NOT D [47 24] [47 24]D D− → −

D - destinaţia: acumulator: A/B

Sau exclusiv

EOR S,D [47 24] [47 24]S D D⊕ − → −

S - sursa: registru: X0, Y0, X1, Y1

valoare imediată: #$xx, #$xxxxxx

D - destinaţia: acumulator: A/B

Aplicaţii ale procesoarelor de semnal în comunicaţii50

EXEMPLU: Conversia din binar în cod Gray

Două numere consecutive scrise în codul Gray diferă printr-un singur

bit.

Binar Gray Binar Gray

0000 0000 1000 1100

0001 0001 1001 1101

0010 0011 1010 1111

0011 0010 1011 1110

0100 0110 1100 1010

0101 0111 1101 1011

0110 0101 1110 1001

0111 0100 1111 1011

Obţinerea numărului în cod Gray se face cu operaţia sau-exclusiv între

numărul scris în binar şi numărul binar deplasat (shiftat la dreapta) cu un bit.

De exemplu: codul Gray pentru numărul 0110:

0110 EOR 0011 = 0101

Pseudocodul programului este:

for (b=0,b<N,b++)

{ a = b;

x0 = a;

a = lsr a;

a = x0 eor a;

}

Valoarea binară care trebuie convertită este scrisă din acumulatorul b în

a cu instrucţiunea tfr b,a care utilizează magistrala internă ALU (56 biţi).

Page 28: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 51

Registrul x0 este folosit ca registru temporar pentru a păstra valoarea

lui a1.

Instrucţiunea lsr a efectuează deplasarea logică la dreapta cu un bit a

registrului a1 (biţii 47-24).

Instrucţiunea eor x0,a efectuează operaţia sau-exclusiv între x0 şi a1 iar

rezultatul este în a1.

Valoarea binară din b este incrementată (x1=1) şi se continuă cu

următoarea valoare binară.

Etichetă Instr. OperanziMagistrala de

date XMagistralade date Y

Cicluriceas

clr b #>1,x1 1

do #N,_endtst 5

tfr b,a 1

lsr a a1,x0 2 i’lock

eor x0,a 1

add x1,b a1,x:output 2 i’lock

_endt

TOTAL 6N+6

Unitatea de Scalare şi Limitare

Datele transferate din acumulator spre magistralele de date XDB sau

YDB trec prin aceste unităţi de scalare şi limitare.

Scalarea se poate face în funcţie de biţii S1 şi S0 din Status Register

(SR) astfel:

• S1=1, S0=0 în sus – shiftează data la stânga cu un bit.

• S1=0, S0=1 în jos – shiftează data la dreapta cu un bit.

• S1=0, S0=0 nu se efectuează scalarea – datele trec nemodificate.

Aplicaţii ale procesoarelor de semnal în comunicaţii52

Scalarea se face automat asupra datelor pe 24 de biţi transferate pe

magistrală, fără a afecta rezultatul din acumulator.

Limitarea apare dacă vrem să transferăm pe magistrala XDB sau YDB

(de 24 de biţi) operanzi din acumulator reprezentaţi pe 56 de biţi (care

folosesc şi cei 8 biţi de extensie). Nu apare limitarea dacă operanzii transferaţi

sunt din A1, A0, B1, B0.

Sunt două unităţi de scalare-limitare ceea ce permite transferul pe XDB

şi YDB prin limitarea a doi operanzi simultan sau limitarea unui operand la

48 de biţi.

Valorile la care sunt limitaţi operanzii ce depăşesc numărul de biţi ai

magistralei de date sunt:

• $7FFFFF – pentru valori pozitive pe 24 de biţi

• $7FFFFF FFFFFF – pentru valori pozitive pe 48 de biţi

• $800000 – pentru valori negative pe 24 de biţi

• $800000 000000 – pentru valori negative pe 48 de biţi

Operaţia de limitare nu afectează conţinutul acumulatorului, spre

deosebire de operaţia de saturare aritmetică.

EXEMPLU:

Fără limitare Cu limitare

A2 A1 A0 A2 A1 A00000 10000…0 00000…0 = 1 0000 10000…0 00000…0 = 1

move a1,x0 move a,x0

X0 10000…0 = –1 X0 01111…1 = 0.999999Eroarea = 2 Eroarea = 0.000001

Page 29: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 53

Saturarea aritmetică

Acest mod este setat de bitul SM din Status Register (SR). Rezultatul

oricărei operaţii aritmetice este limitat la 48 de biţi în acumulator.

Acest mod foloseşte algoritmilor care nu lucrează cu extensia

acumulatorului (A2 sau B2) obţinându-se un rezultat saturat la 48 de biţi.

Saturarea se efectuează în funcţie de trei biţi: EXT[7], EXT[0] din

partea extinsă a acumulatorului şi bitul cel mai semnificativ al lui A1 sau B1:

MSP[23].

EXT[7] EXT[0] MSP[23] ACUMULATOR

0 0 0 neschimbat

0 0 1 $00 7FFFFF FFFFFF

0 1 0 $00 7FFFFF FFFFFF

0 1 1 $00 7FFFFF FFFFFF

1 0 0 $FF 800000 000000

1 0 1 $FF 800000 000000

1 1 0 $FF 800000 000000

1 1 1 neschimbat

Modurile de rotunjire

Instrucţiunile care efectuează operaţii de rotunjire a rezultatului din

acumulator pe 24 de biţi sunt:

• MACR, MACRI – înmulţire cu acumulare şi rotunjire.

• MPYR, MPYRI – înmulţire cu rotunjire.

• RND – rotunjirea valorii din acumulator.

Unitatea ALU de date efectuează rotunjirea porţiunii superioare MSP a

acumulatorului în funcţie de conţinutul părţii inferioare LSP a acumulatorului.

Aplicaţii ale procesoarelor de semnal în comunicaţii54

Sunt două tipuri de rotunjiri în funcţie de bitul Rounding Mode (RM) din

porţiunea EMR a Status Register:

• rotunjire convergentă (rotunjire la numărul par).

X X X …X X X0100 011XXX…XXXX X..XX A2 A1 A0

CAZUL I: DACĂ A0< $800000 (1/2), ATUNCI ROTUNJEŞTE ÎN JOS (NU SE ADUNĂ NIMIC)

ÎNAINTEA ROTUNJIRII

55 48 47 24 23 0

0

X X X …X X X0100 000…………000X X..XX A2 A1 A0*

DUPĂ ROTUNJIRE

55 48 47 24 23 0

X X X …X X X0100 1110XX….XXXX X..XX A2 A1 A0

CAZUL II: DACĂ A0> $800000 (1/2), ATUNCI ROTUNJEŞTE ÎN SUS (ADUNĂ 1 LA A1)

ÎNANTEA ROTUNJIRII

55 48 47 24 23 0

1

X X X …X X X0101 000…………000X X..XX A2 A1 A0*

DUPĂ ROTUNJIRE

55 48 47 24 23 0

X X X …X X X0100 10000…….000X X..XX A2 A1 A0

CAZUL III: DACĂ A0= $800000 (1/2), ŞI LSB A1=0, ATUNCI ROTUNJEŞTE ÎN JOS (NU ADUNĂ NIMIC)

ÎNAINTEA ROTUNJIRII

55 48 47 24 23 0

0

X X X …X X X0100 000…………000X X..XX A2 A1 A0*

DUPĂ ROTUNJIRE

55 48 47 24 23 0

X X X …X X X0101 10000………000X X..XX A2 A1 A0

CAZUL IV: DACĂ A0= $800000 (1/2), ŞI LSB A1=1, ATUNCI ROTUNJEŞTE ÎN SUS (ADUNĂ 1 LA A1)

ÎNAINTEA ROTUNJIRII

55 48 47 24 23 0

1

X X X …X X X0110 000…………000X X..XX A2 A1 A0*

DUPĂ ROTUNJIRE

55 48 47 24 23 0

Page 30: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 55

• rotunjire în complement faţă de 2.

X X X …XXX0100 011XXX…XXXX X..XX A2 A1 A0

CAZUL I: DACĂ A0< $800000 (1/2), ATUNCI ROTUNJEŞTE ÎN JOS (NU SE ADUNĂ NIMIC)

ÎNAINTEA ROTUNJIRII

55 48 47 24 23 0

0

X X X …X X X0100 000…………000X X..XX A2 A1 A0*

DUPĂ ROTUNJIRE

55 48 47 24 23 0

X X X …X X X0100 1110XX….XXXX X..XX A2 A1 A0

CAZUL II: DACĂ A0> $800000 (1/2), ATUNCI ROTUNJEŞTE ÎN SUS (ADUNĂ 1 LA A1)

ÎNAINTEA ROTUNJIRII

55 48 47 24 23 0

1

X X X …X X X0101 000…………000X X..XX A2 A1 A0*

DUPĂ ROTUNJIRE

55 48 47 24 23 0

X X X …X X X0100 10000…….000X X..XX A2 A1 A0

CAZUL III: DACĂ A0= $800000 (1/2), ŞI LSB A1=0, ATUNCI ROTUNJEŞTE ÎN SUS (ADUNĂ 1 LA A1)

ÎNAINTEA ROTUNJIRII

55 48 47 24 23 0

1

X X X …X X X0101 000…………000X X..XX A2 A1 A0*

DUPĂ ROTUNJIRE

55 48 47 24 23 0

X X X …X X X0101 10000………000X X..XX A2 A1 A0

CAZUL IV: DACĂ A0= $800000 (1/2), ŞI LSB A1=1, ATUNCI ROTUNJEŞTE ÎN SUS (ADUNĂ 1 LA A1)

ÎNAINTEA ROTUNJIRII

55 48 47 24 23 0

1

X X X …X X X0110 000…………000X X..XX A2 A1 A0*

DUPĂ ROTUNJIRE

55 48 47 24 23 0

Aplicaţii ale procesoarelor de semnal în comunicaţii56

3.4 UNITATEA DE GENERARE A ADRESELOR (AGU)

Unitatea de generare a adreselor este prezentată în Figura 3.3-1.

N0 M0

N1 M1N2 M2N3 M3

R0 R4

R1 R5R2 R6R3 R7

M4 N4

M5 N5M6 N6M7 N7

EI

Multiplexor Triplu

ALUAdrese

ALUAdrese

Magistrala de date globale

Magistrala de date de program

XAB YAB PAB

ALU adrese primare ALU adrese secundare

Figura 3.3-1 Unitatea de generare a adreselor DSP 56300

AGU calculează adresa efectivă pentru adresarea operanzilor în

memorie.

Sunt realizate patru tipuri de calcule aritmetice:

- liniar;

- modulo;

- modulo cu revenire la adresa de bază;

- bit-reversed.

AGU este compusă din două părţi, fiecare având o unitate aritmetico-

logică de adrese şi patru grupe de registre.

Page 31: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 57

Fiecare grup conţine trei tipuri de registre:

• Rn - registru de adresă;

• Nn - registru ofset;

• Mn - registru de modificare.

Registre R, N şi M sunt tratate împreună (de exemplu numai N2 şi M2

sunt folosiţi pentru actualizarea adresei din R2). Cele două ALU pot genera

două adrese pe 24 de biţi într-un singur ciclu instrucţiune pentru adresarea pe

magistralele XAB, YAB, sau o adresă pentru PAB. Spaţiul de memorie

adresabil este de 16M cuvinte, pentru fiecare zonă de memorie (X, Y, P).

Fiecare unitate ALU de adrese conţine:

a) un sumator de ofset pe 24 de biţi care adună la registrul adresă R:

• plus unu;

• minus unu;

• conţinutul registrului ofset N corespunzător;

• minus ofsetul N.

b) un sumator modulo care adună rezultatul primului sumator la valoarea

modulo (M sau minus M) conţinută în registrul modificator M.

c) un sumator cu transport invers care adună la registrul R (cu transport de

la MSB la LSB):

• plus unu;

• minus unu;

• conţinutul registrului ofset N corespunzător;

• minus ofsetul N.

Printr-un test logic se selectează ieşirea sumatorului ce va fi folosită

drept adresă efectivă şi actualizarea registrului R.

Aplicaţii ale procesoarelor de semnal în comunicaţii58

Modelul de Programare AGU

Pentru programator, AGU reprezintă trei grupuri de 8 registre care pot

fi folosiţi atât ca registre temporare de date cât şi ca pointeri pentru adresarea

indirectă (Figura 3.3-2).

Fiecare registru de adresare R are asociat un registru ofset N şi un

registru modificator M.

Registrele R sunt utilizate la calculul adresei efective a operanzilor în

memorie.

Registre N sunt folosite pentru furnizarea unui ofset pentru actualizarea

adresei.

Registre M selectează tipul de actualizare aritmetică a adresei.

R7R6R5R4R3R2R1R0EP

N7N6N5N4N3N2N1N0

M7M6M5M4M3M2M1M0

23 0 23 0 23 0

Registre adresă Registre ofset Registre modificator

Setul secundar

Setul primar

Figura 3.3-2 Modelul de Programare AGU

La transferul paralel al datelor din memoria X şi Y registre de adresă

trebuie folosite separat:

- pentru transferul din memoria X - registrele R0 - R3;

- pentru transferul din memoria Y - registrele R4 - R7.

Page 32: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 59

Moduri de Adresare

Se specifică dacă operanzii sunt în registre şi / sau în locaţii din

memorie şi oferă adresa acestora.

Familia DSP56300 oferă patru moduri principale de adresare:

- adresare directă cu registru;

- adresare indirectă cu registru;

- adresare relativă la PC;

- alte adresări speciale (adresare imediată, adresare absolută, etc.).

Adresare directă cu registru

Operandul este în unul din registre

- de date: A2, A1, A0, B2, B1, B0, X1, X0, Y1, Y0;

- de adrese: R0-R7, N0-N7, M0-M7;

- de control: OMR, SR, PC, VBA, LA, LC, SP

EXEMPLU:

Adresare cu registru de date

move x0,a1 X X X X X X 8 7 6 5 4 3

X X X X X X X X X X X XX X

X1 X0

A2 A1 A0

ÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE

X X X X X X 8 7 6 5 4 3

8 7 6 5 4 3 X X X X X XX X

X1 X0

A2 A1 A0

EXEMPLU:

Adresare cu registru de adrese

move a,n7

X X X X X X

1 2 3 4 5 6 7 8 9 a b c0 0

N7

A2 A1 A0

ÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE

1 2 3 4 5 6

1 2 3 4 5 6 7 8 9 a b c0 0

N7

A2 A1 A0

Aplicaţii ale procesoarelor de semnal în comunicaţii60

Adresare indirectă cu registru

Un registru adresă Rn este folosit pentru a indica adresa operandului în

memorie. Pot fi efectuate operaţii aritmetice asupra adresei înainte sau după

execuţia instrucţiunii. Registrul ofset Nn asociat registrului adresă Rn indică

valoarea care va fi adunată la Rn. Registrul modificator Mn indică tipul

operaţiei aritmetice care urmează să fie efectuată când este actualizat Rn.

Pentru adresare liniară M=$FFFFFF.

EXEMPLU:

Fără actualizare (Rn)

move a1,x:(r0)

1 2 3 4 5 6 X X X X X XX X A2 A1 A0

ÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE

1 2 3 4 5 6 X X X X X XX X A2 A1 A0

::

X X X X X X::

0 0 1 0 0 0

X X X X X X

F F F F F F

Memoria X:

23 0

$ 1000

R0

N0

M0

::

1 2 3 4 5 6::

0 0 1 0 0 0

X X X X X X

F F F F F F

Memoria X:

23 0

$ 1000

R0

N0

M0

EXEMPLU:

Postincrementare cu o unitate (Rn)+

move b0,y:(r1)+

X X X X X X 1 2 3 4 5 6X X B2 B1 B0

ÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE

X X X X X X 1 2 3 4 5 6X X B2 B1 B0

::

X X X X X X:

0 0 2 0 0 0

X X X X X X

F F F F F F

Memoria Y:

23 0

$ 2000

R1

N1

M1

:X X X XX X

1 2 3 4 5 6:

0 0 2 0 0 1

X X X X X X

F F F F F F

Memoria Y:

23 0

$ 2000

R1

N1

M1

$ 2001

Page 33: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 61

EXEMPLU:

Postdecrementare cu o unitate (Rn)–

move y0,y:(r2)–

X X X X X X F E D C B A Y1 Y0

ÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE

X X X X X X F E D C B A Y1 Y0

:X X X X X X

::

0 0 3 0 0 0

X X X X X X

F F F F F F

Memoria Y:

23 0

$ 3000

R2

N2

M2

:F E D C B AX X X X X X

:

0 0 2 F F F

X X X X X X

F F F F F F

Memoria Y:

23 0

$ 2FFF

R2

N1

M1

$ 3000

EXEMPLU:

Postincrementare cu ofset (Rn)+Nn

move x1,x:(r4)+n4

9 8 7 6 5 4 X X X X X X X1 X0

ÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE

9 8 7 6 5 4 X X X X X X X1 X0

::::

0 0 5 0 0 0

0 0 0 0 0 4

F F F F F F

Memoria X:

23 0

$ 5000

R4

N4

M4

X X X X X::

0 0 5 0 0 4

0 0 0 0 0 4

F F F F F F

Memoria X:

23 0

$ 5000

R4

N4

M4

$ 5004

X X X X X 9 8 7 6 5 4

Aplicaţii ale procesoarelor de semnal în comunicaţii62

EXEMPLU:

Postdecrementare cu ofset (Rn)–Nn

move x:(r5)–n5,a0

ÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE

4 5 6 7 8 9:::

0 0 6 0 0 0

0 0 0 0 0 5

F F F F F F

Memoria X:

23 0$ 6000

R5

N5

M5

4 5 6 7 8 9::

0 0 5 F F B

0 0 0 0 0 5

F F F F F F

Memoria X:

23 0

$ 5FFB

R5

N5

M5

$ 6000

: :

X X X X X X X X X X X XX X A2 A1 A0

0 0 0 0 0 0 4 5 6 7 8 90 0 A2 A1 A0

: X X X X X

EXEMPLU:

Predecrementare cu o unitate –(Rn)

move x:–(r3),b

ÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE

:X X X X X X

1 2 1 2 1 2:

0 0 4 0 0 0

X X X X X X

F F F F F F

Memoria X:

23 0

$ 4000

R3

N3

M3

:X X X X X X

1 2 1 2 1 2:

0 0 3 F F F

X X X X X X

F F F F F F

Memoria X:

23 0

$ 3FFF

R3

N3

M3

$ 4000

X X X X X X X X X X X XX X B2 B1 B0

1 2 1 2 1 2 0 0 0 0 0 00 0 B2 B1 B0

Page 34: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 63

EXEMPLU:

Deplasament scurt (Rn+#nn)

move a,x:(r0+#<$07)

ÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE

X X X X X X:::

0 0 2 0 0 0

X X X X X X

F F F F F F

Memoria X:

23 0$ 2000

R0

N0

M0

1 2 3 4 5 6:::

0 0 2 0 0 0

X X X X X X

F F F F F F

Memoria X:

23 0

$ 2000

R0

N0

M0

$ 2007

: :

1 2 3 4 5 6 0 0 0 0 0 00 0 A2 A1 A0

1 2 3 4 5 6 0 0 0 0 0 00 0 A2 A1 A0

X X X X X X X X X X X$ 2000

EXEMPLU:

Deplasament lung (Rn+#nnnnnn)

move y:(r1+#>$123456),x0

ÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE

a b c d e f:::

0 0 0 0 0 0

X X X X X X

F F F F F F

Memoria Y:

23 0$ 123456

R1

N1

M1

a b c d e f:::

0 0 0 0 0 0

X X X X X X

F F F F F F

Memoria Y:

23 0

$ 0000000

R1

N1

M1

$ 123456

: :

X X X X X XX0

a b c d e fX0

X X X X X X X X X X X$ 000000

Aplicaţii ale procesoarelor de semnal în comunicaţii64

EXEMPLU:

Indexare cu ofset (Rn+Nn)

move y0,x:(r6+n6)

ÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE

:X X X X X X

::

0 0 7 0 0 0

0 0 0 0 0 3

F F F F F F

Memoria Y:

23 0

$ 7003

R6

N6

M6

:A B C D E F

:

0 0 7 0 0 0

0 0 0 0 0 3

F F F F F F

Memoria Y:

23 0

$ 7000

R6

N6

M6

$ 7003

X X X X X X X X X X X X: :

X X X X X X A B C D E F Y1 Y0

X X X X X X A B C D E F X1 X0

$ 7000

Moduri speciale de adresare

Acestea nu folosesc un registru pentru a specifica adresa operandului.

Operandul sau adresa acestuia sunt conţinute în codul instrucţiunii.

Adresare imediată.

Acest mod de adresare indică un operand pe 24 biţi în cadrul

instrucţiunii.

EXEMPLU:

Date în acumulator pe 24 biţi

move #$123456,a0ÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE

X X X X X X X X X X X XX X A2 A1 A0

X X X X X X 1 2 3 4 5 6X X A2 A1 A0

Page 35: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 65

EXEMPLU:

Date pozitive în acumulator pe 56 biţi

move #$654321,aÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE

X X X X X X X X X X X XX X A2 A1 A0

6 5 4 3 2 1 0 0 0 0 0 00 0 A2 A1 A0

EXEMPLU:

Date negative în acumulator pe 56 biţi

move #$876543,bÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE

X X X X X X X X X X X XX X B2 B1 B0

8 7 6 5 4 3 0 0 0 0 0 0F F B2 B1 B0

Adresare imediată cu date scurte.

Operandul este pe 8 sau 12 biţi.

EXEMPLU:

Date scurte în registru pe 24 biţi

move #$FE,y1ÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE

X X X X X X X X X X X X Y1 Y0

F E 0 0 0 0 X X X X X X Y1 Y0

EXEMPLU:

Date scurte în acumulator 24 biţi

move #$FE,a1ÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE

X X X X X X X X X X X XX X A2 A1 A0

0 0 0 0 F E X X X X X XX X A2 A1 A0

EXEMPLU:

Date scurte pozitive în acumulator 56 biţi

move #$34,aÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE

X X X X X X X X X X X XX X A2 A1 A0

3 4 0 0 0 0 0 0 0 0 0 00 0 A2 A1 A0

Aplicaţii ale procesoarelor de semnal în comunicaţii66

EXEMPLU:

Date scurte negative în acumulator 56 biţi

move #$87,bÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE

X X X X X X X X X X X XX X B2 B1 B0

8 7 0 0 0 0 0 0 0 0 0 0F F B2 B1 B0

Dacă destinaţia este A2, A1, A0, B2, B1, B0, R0-R7, N0-N7 atunci

operandul imediat pe 8 biţi este tratat ca un întreg fără semn.

Dacă destinaţia este X1, X0, Y1, Y0, A, B atunci operandul imediat pe

8 biţi este tratat ca un număr fracţionar cu semn.

Adresare absolută.

Adresa operandului este conţinută în codul instrucţiunii.

EXEMPLU:

Adresare absolută lungă (adresa pe 24 biţi)

move y:$1000,b0

X X X X X X X X X X X XX X B2 B1 B0

ÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE

X X X X X X 7 6 5 4 3 2X X B2 B1 B0

:7 6 5 4 3 2

:

Memoria Y:

23 0

$ 1000:

7 6 5 4 3 2:

Memoria Y:

23 0

$ 1000

EXEMPLU:

Adresare absolută scurtă (adresa pe 6 biţi)

move a1,x:$21

7 6 5 4 3 2 X X X X X XX X A2 A1 A0

ÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE

7 6 5 4 3 2 X X X X X XX X A2 A1 A0

::

X X X X X X::

Memoria X:

23 0

$ 000021

::

7 6 5 4 3 2::

Memoria X:

23 0$ 00003F

$ 000000

Domeniupentru

adresareabsolutăscurtă

$ 000021

$ 00003F

$ 000000

Page 36: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 67

Adresarea absolută scurtă foloseşte o adresă de 6 biţi în codul

instrucţiunii completată cu zerouri.

Este posibilă adresarea primelor 64 cuvinte din memorie (vectori de

întrerupere etc.)

Adresare I/O scurtă.

Acest mod foloseşte o adresă de 6 biţi în codul instrucţiunii completată

cu unu. Sunt adresate ultimele 64 cuvinte din memorie.

EXEMPLU:

movep a1,x:$fffffd

A B C D E F X X X X X XX X A2 A1 A0

ÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE

A B C D E F X X X X X XX X A2 A1 A0

::

X X X X X X::

Memoria X:

23 0

$ FFFFFD

::

A B C D E F::

Memoria X:

23 0$ FFFFFF

$ FFFFC0

Spaţiul pentruadresareaabsolută

scurtă I/O

$ FFFFFD

$ FFFFFF

$ FFFFC0

Adresare scurtă pentru salt.

Acest mod foloseşte o adresă de 12 biţi în codul instrucţiunii pentru

saltul în program. PC este modificat cu această adresă completata cu zero.

Sunt adresate ultimele 4096 cuvinte.

Aplicaţii ale procesoarelor de semnal în comunicaţii68

EXEMPLU:

jmp <$123

ÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE

::

jmp $0123::

Memoria P:

23 0

$ 000000

Memoria P:

23 0

$ 000FFF

Spaţiu deadresă pentru

salt scurt

:::::::::::::

::::::::::

Instr. următ.Instr. următ.

::::::

$001FF9

$ 000000

$ 000FFF

PC

$000123PC

Adresare relativă la PC (Program Counter)

Adresa operandului este obţinută adunând un deplasament la adresa

instrucţiunii curente aflată în PC. Deplasamentul poate fi:

• scurt (9 biţi), conţinut în codul instrucţiunii.

• lung (24 biţi), conţinut în cuvântul extensie din codul instrucţiunii.

• conţinutul unui registru R.

Moduri de Modificare a Adresei

Registrele de modificare Mn definesc tipul de operaţie aritmetică a

adresării care urmează a fi efectuată şi permite utilizatorului să creeze diferite

structuri de date în memorie cum ar fi:

• liste (FIFO).

Page 37: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 69

• linii de întârziere.

• buffere circulare.

• stive (LIFO).

• cadre în ordinea inversă a biţilor pentru FFT.

Tabelul de mai jos arată modurile de calcul a adresei în funcţie de valoarea

scrisă în Mn.

Registrul modificator Mn Modul de calcul al adresei

$XX0000 În ordinea inversată a biţilor (Bit-Reverse)

$XX0001 Modulo 2

$XX0002 Modulo 3

: :

$XX7FFE Modulo 32767 (215–1)

$XX7FFF Modulo 32768 (215)

$XX8001 Modulo 2 de la adresa de bază

$XX8003 Modulo 4 de la adresa de bază

$XX8007 Modulo 8 de la adresa de bază

: :

$XX9FFF Modulo 213 de la adresa de bază

$XXBFFF Modulo 214 de la adresa de bază

$XXFFFF Liniar (Modulo 224)

Aplicaţii ale procesoarelor de semnal în comunicaţii70

Modificarea liniară

Mn=$FFFFFF

Calculul adresei se face liniar pe 24 de biţi

Se poate folosi incrementarea, decrementarea sau ofsetul din registrul

Nn pentru calculul adresei.

EXEMPLU:

move x0, y:(r0)+n0

Registrulincrement

No$0000C3(195)

$0000B4(180)

Adresa de start $0000A5(165)

$0000D2(210

Memoria Y

Adresa de start:

$0000A5(165)R0

Increment:

$00000F(15)N0

Adresare liniară:

$FFFFFFM0

Modificarea modulo

Calculul adresei se face modulo M, forţând adresa să rămână într-un

interval de lungime M.

Page 38: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 71

EXEMPLU:

move x0, x:(r0)+n0

Incrementul înregistrul N0

210 ($0000D2)

195 ($0000C3)

180 ($0000B4)

Adresa de start 165 ($0000A5)

135 ($000087)

Modululîn registrul

M0

Adresa dinregistrul

R0

Mj ≥2Lower Bound 128 ($000080)

XX…XX00…00 →← j

Limita maximă 217 ($0000D9)XX…XX00…00 + M -1

→← j

Adresa de start

R0 165 ($0000A5)

Increment

N0 15 ($00000F)

Modulo M=90

M0 89 ($000089)

Reguli pentru obţinerea unui cadru adresat circular:

• Valoarea scrisă în registrul modificator: 1M= −Mn

• Adresa de bază trebuie aleasă o putere a lui 2 care să îndeplinească

condiţia: 2 j M≥ . Astfel adresa de bază are j zerouri LSB.

• Adresa de sfârşit este: 2 1j M+ −

• Adresa iniţială din R nu trebuie neapărat să fie adresa de bază a cadrului,

putând fi oriunde în cadrul domeniului de adrese.

• Adresa de bază a cadrului sau cea de sfârşit nu sunt stocate. Numai

lungimea este scrisă în Mn. Adresa de bază este determinată de adresa

scrisă în Rn (anulând ultimii j biţi).

Aplicaţii ale procesoarelor de semnal în comunicaţii72

Acest tip de modificare a adresei este utilă în crearea de:

• liste circulare.

• linii de întârziere.

• cadre de eşantioane pe care se efectuează decimarea, interpolarea şi

generare de sinusoide.

Dacă adresarea circulară este folosită cu ofset (registrul N), acesta nu

trebuie să depăşească valoarea M.

O excepţie este cazul în care 2 jN p= ⋅ este un multiplu al lungimii

cadrului, adresa rezultată va avea aceeaşi poziţie relativă în bufferul de ordin

p.

Principalele aplicaţii sunt filtrarea IIR prin structuri paralele.

Modificarea modulo cu revenire la adresa de bază

Este cazul în care bitul 15 din registrul M este 1.

Depăşirea adresei maxime a cadrului va forţa adresa să ajungă la adresa

de bază, iar decrementarea sub adresa minime va duce adresa la adresa

maximă a cadrului.

Se foloseşte doar în cazul adresării cu ofset.

Modificarea în ordinea inversă a biţilor

Mn=$000000

Modificarea adresei este realizată hardware prin incrementarea şi

propagarea transportului în sens invers, de la MSB la LSB ai adresei.

Este echivalent cu inversarea ordinii biţilor registrelor Rn şi Nn,

adunarea ofsetului la adresă şi, reinversând ordinea biţilor, obţinerea

rezultatului.

Page 39: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 73

Acest mod de adresare este util în calculul FFT la adresarea factorilor

de rotaţie dintr-un cadru de lungime 2kN = sau a ordonării datelor (decimare

în timp etc.).

Pentru un cadru de lungime 2kN = rezultă că ultimii k biţi ai adresei

vor trebui inversaţi.

Pentru aceasta registrul Nn trebuie să aibă valoarea 12k−=Nn .

Adresa de bază a secvenţei de intrare trebuie să fie putere întreagă a lui

2 îndeplinind condiţia 2m N≥ .

EXEMPLU:

M0 = $000000 R0 = $000008 N0 = 4 = 23–1

O secvenţă de intrare de 8 elemente are adresa de bază $8 = 1000.

Ultimii trei LSB ai adresei vor fi: 000,001,002,...,111.

Adresasecvenţeiiniţiale

Secvenţainiţială

Modificareaadresei cu

transport invers

Secvenţareordonată

$8 = 1000 #0.0 R0 = 1000 +N0 = 0100

$8 #0.0

$9 = 1001 #0.1 R0 = 1100 + 0100

$C #0.4

$A = 1010 #0.2 R0 = 1010 + 0100

$A #0.2

$B = 1011 #0.3 R0 = 1110 + 0100

$E #0.6

$C = 1100 #0.4 R0 = 1001 + 0100

$9 #0.1

$D = 1101 #0.5 R0 = 1101 + 0100

$D #0.5

$E = 1110 #0.6 R0 = 1011 + 0100

$B #0.3

$F = 1111 #0.7 R0 = 1111 + 0100

$F #0.7

Aplicaţii ale procesoarelor de semnal în comunicaţii74

EXEMPLU:

Adresade start

Indexulîn cadru

Increment

Bit Reverse

R0 3072 ($000C00) ( 0)

N0 512 ($000C00)

M0 0 ($000000)

move x:(r0)+n0, x0

R0 3584 ($000E00) (512)

move x:(r0)+n0, x0

R0 3328 ($000D00) (256)

move x:(r0)+n0, x0

R0 3840 ($000F00) (768)

Nk ≥2Adresa minimă 3072 ($000C00)

XX…XX00…00 →← k

Limita maximă 4095 ($000FFF)XX…XX11…11 →←k

CadruFFT delungimeN=1024

Memoria X

Instrucţiuni de transfer paralel al datelor

Este posibil transferul paralel al datelor pe magistralele de date X şi Y.

Aceasta permite operaţiilor ALU să fie efectuate în paralel cu transferul

datelor într-un singur ciclu de ceas.

Sunt permise transferuri paralele: de la registru la registru, de la

registru la memorie şi de la memorie la registru.

Page 40: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 75

Pot fi specificate două adrese efective independente în transferul paralel

al datelor dacă una din adrese foloseşte bancul inferior al registrelor de adrese

(r0-r3) iar cealaltă adresă, bancul superior de registre (r4-r7).

EXEMPLU:

Transferuri în paralel

instrucţiune operanzisursa 1 →

destinaţia 1

sursa 2 →

destinaţia 2

add x0,a a,x:(r0)+n0 y:(r4)– ,y0

Pot fi:

1. Operaţii ALU

2. Operaţii logice

3. Rotunjiri convergente

Sunt suportate:

1. Coduri condiţionale

Pot fi:

1. Până la două transferuri de date

2. Două moduri de adresare diferite

3. Acces la memoria X, Y, L, XY.

Sunt suportate:

1. Scalarea

2. Limitarea

3. Extensie de semn sau completarea cu

zeroruri a acumulatorului

4. Două surse identice

5. NU E PERMISĂ aceeaşi destinaţie

Aplicaţii ale procesoarelor de semnal în comunicaţii76

EXEMPLU:

Transferuri în paralel cu instrucţiuni aritmetice

Instrucţiunesursa 1 →

destinaţia 1

sursa 2 →

destinaţia 2

Transfer cu date imediate add a,b #$44,a1Transfer între registre add x0,a a1,y0Actualizare registru adresă add y1,a (r0)+n0Transfer cu memoria X sau Y add x1,b b,x:$100Transfer cu registre şi cu

memoria X sau Yadd y0,a a,x1 y:(r2)–,y0

Transfer cu memoria L add x,a a10,L:$300Transfer cu memoria X şi Y add y,b b,x:(r3)+n3 y:(r7)+n7,y1

mac x0,y0,a x:(r0)+,x0 y:(r4)–,y0Instrucţiuni de multiplicare şi

adunare macr –y0,y0,b x1,x:(r1)+ b,y:(r5)–

Page 41: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 77

3.5 UNITATEA DE CONTROL AL PROGRAMULUI (PCU)

PCU efectuează încărcarea şi decodificarea instrucţiunilor, controlul

ciclurilor DO şi REP şi procesarea situaţiilor de excepţie într-un cadru de

execuţie pe şapte niveluri pipeline.

Arhitectura PCU este formată din trei blocuri:

GDB PDB PAB GDB

Cereri de ÎntrerupereRESET

CONTROLER DEÎNTRERUPERE APROGRAMULUI

CONTROLER DEDECODIFICARE APROGRAMULUI

GENERATORDE ADRESE

DE PROGRAM

Controler de întrerupere a programului (Program Interrupt Controller)

- arbitrează toate cererile de întrerupere (interne sau externe) şi

generează adresa vectorului de întrerupere corespunzătoare.

Controler de decodificare a Programului (Program Decode Controller)

- decodifică cei 24 de biţi de instrucţiune încărcaţi într-un latch şi

generează toate semnalele de control pipeline.

Generator de adrese de program (Program Address Generator)

- conţine tot hardware-ul necesar pentru generarea adreselor de program,

stiva sistemului şi controlul ciclurilor.

Aplicaţii ale procesoarelor de semnal în comunicaţii78

Facilităţile oferite de PCU sunt:

• Moduri de adresare optimizate pentru aplicaţiile DSP;

• Controler pentru cache de instrucţiuni;

• Extensia stivei sistemului;

• Cicluri DO suprapuse;

• Revenire rapidă din întreruperi.

Operaţiile Pipeline

Arhitectura organizată pe şapte niveluri de pipeline permite execuţia

majorităţii instrucţiunilor la o rată de o instrucţiune pe ciclu de ceas.

PreFetch

Nivelul pipeline Descrierea operaţiilor

PreFetch I • Generarea adresei pentru instrucţiune

• Incrementarea PC

PreFetch II • Instrucţiunea este citită din memorie

Decodificare

Nivelul pipeline Descrierea operaţiilor

Decodificare • Decodificarea instrucţiunii

Generarea Adreselor

Nivelul pipeline Descrierea operaţiilor

Address Gen I • Generarea adresei pentru operaţii de transfer a

datelor

Address Gen II • Actualizarea pointerului de adresă

Page 42: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 79

Execuţie

Nivelul pipeline Descrierea operaţiilor

Execuţie I • Citirea operanzilor sursă pentru înmulţire sau

adunare

• Citirea registrelor sursă pentru scrierea în memorie

• Înmulţirea

• Scrierea registrelor destinaţie pentru citirea din

memorie

Execuţie II • Citirea operanzilor sursă pentru adunare dacă aceştia

au fost scrişi într-o operaţie ALU precedentă

• Adunarea

• Scrierea rezultatului adunării în registrul destinaţie

• Scrierea rezultatului înmulţirii în registrul destinaţie

Aplicaţii ale procesoarelor de semnal în comunicaţii80

Unele instrucţiuni necesită un timp suplimentar de execuţie şi anume:

• Toate instrucţiunile care ocupă două cuvinte de memorie.

• Instrucţiunile care folosesc un mod de adresare care necesită mai mult de

un ciclu pentru calculul adresei.

• Instrucţiunile care provoacă o schimbare în cursul programului.

Operaţiile pipeline ale PCU rămân ascunse utilizatorului, uşurând

programarea.

Hardware-ul prezent în fiecare unitate de execuţie a procesorului

detectează orice conflict pipeline şi opreşte desfăşurarea pipeline până când

rezultatele instrucţiunii precedente sunt disponibile pentru instrucţiunea

următoare.

Programatorul poate reduce întârzierile în pipeline şi îmbunătăţi viteza

de execuţie prin modificări adecvate ale programului.

Întârzieri datorate operaţiilor aritmetice

Apar când se încearcă citirea din acumulator dacă acelaşi acumulator

este destinaţia instrucţiunii aritmetice anterioare. Se poate introduce o altă

instrucţiune între cele două.

mac x0,y0,amove a1,x:(r0)+

mac x0,y0,a

mac x1,y1,bmove a1,x:(r0)+

Întârzieri datorate transferurilor de date

Apar când registrul sursă al unei instrucţiuni move este registrul

destinaţie al instrucţiunii move anterioare. Se poate introduce o altă

instrucţiune între cele două.

Page 43: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 81

move y(r1)+,a1move a,x:(r0)+

move y(r1)+,a1

mac x1,y1,bmove a,x:(r0)+

Întârzieri datorate generării adreselor

Apar când o instrucţiune move foloseşte pentru generarea sau

calcularea adresei drept pointer unul din registrele de adresă R0-R7 şi una

din ultimele trei instrucţiuni modifică tripletul de registre R, N, M respectiv.

Se introduc până la trei instrucţiuni nop.

move $123456,r1move a,x:(r1)+ ; se introduc 3 instrucţiuni nop

Modelul de Programare PCU:

23 0 48 SSH 2423 SSL 0 23 0 0

CONTOR PROGRAM (PC) CONTOR CICLURI (LC)

23 16 15 8 7 0 23 16 15 8 7 0

REGISTRU MOD OPERARE (OMR) REGISTRU DE STARE (SR)

23 0 STIVA SISTEMULUI 4 0

REGISTRU ADRESĂ CICLU (LA) CONTOR STIVĂ (SC)

23 87 0 23 6 5 4 3 0 23 0

ADRESA DE BAZĂ A VECTORULUI INDICATOR STIVĂ (SP) DIMENSIUNEA STIVEI (SZ)DE ÎNTRERUPERI (VBA)

* BIŢII SUNT 0

SCS EOM COM

*

EMR MR CCR

Aplicaţii ale procesoarelor de semnal în comunicaţii82

Contor program (Program Counter)

Registru pe 24 de biţi care păstrează adresa din memoria de program a

instrucţiunii curente.

Este salvat în stivă

• la începerea unui ciclu hardware;

• la apelul unei subrutine;

• în cazul unei întreruperi lungi.

Contor ciclu (Loop Counter)

Contor pe 24 de biţi care specifică de câte ori este repetat un ciclu (DO

sau REP). Este stocat în stivă de instrucţiunea DO şi scos din stivă la sfârşitul

ciclului sau la ENDDO.

Registrul adresei de sfârşit de ciclu (Loop Address)

Registru pe 24 de biţi care indică adresa ultimei instrucţiuni din ciclu.

Este stocat în stivă de instrucţiunea DO şi scos din stivă la sfârşitul ciclului

sau la ENDDO.

Adresa de bază a vectorului de întreruperi (Vector Base Address)

Registru pe 24 de biţi (cu ultimii 8 LSB zero) care păstrează adresa de

bază a vectorului de întreruperi.

Stiva sistemului (System Stack)

Zonă de memorie de 16cuvinte pe 48 biţi împărţită în două zone (pe 24

biţi fiecare):

• System Stack High (SSH).

• System Stack Low (SSL).

Page 44: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 83

Funcţiile stivei:

• păstrează adresa de revenire (PC) şi registrul de stare (SR) la apelul

unei subrutine.

• păstrează LA, LC, PC şi SR la efectuarea ciclurilor.

• păstrează variabile la apeluri de subrutine.

Stiva poate fi folosită pentru implementarea de cicluri suprapuse

deoarece la iniţierea unui ciclu hardware sunt stocate automat în stivă LA,

LC, PC şi SR anterioare, iar la terminarea ciclului acestea sunt restabilite

(permiţând continuarea unui eventual ciclu anterior).

endlp – 1

SYSTEM STACK (Registru adresa de salt)

(Contor ciclu)

(Registru de stare)

(Contor Program)

Comparator 0

LF=1 (Fanion ciclu) DO #count,endlp

PC

Ciclu

(Ultima LAInstructiune)

endlp instr

UNITATEA DE CONTROL AL PROGRAMULUI

COMPARATOR STIVA DE SISTEM 0

SP =

-1

(Contor ciclu) 15 ieşire la LC=1

LA

PC

LCSR

LA LC PC SR

instrinstrinstr:::::instrinstr

Aplicaţii ale procesoarelor de semnal în comunicaţii84

Dacă nu se realizează extensia stivei, se pot implementa 7 cicluri DO

suprapuse, 15 apeluri de subrutine sau 15 deserviri de întreruperi lungi, sau

combinaţii între ele.

La apelul unei subrutine (JSR) adresa de revenire (PC) este scrisă în

SSH iar registrul de stare (SR) este scris în SSL.

La revenirea din subrutină (RTS) numai PC este scris din stivă, SR

rămânând nemodificat.

La revenirea din subrutina de întrerupere (RTI), atât PC cât şi SR

sunt rescrise din stivă.

Extensia stivei poate fi activată de Stack Extension Enable (SEN),

bitul 20 din OMR.

Stack Extension Pointer (EP) aflat în AGU păstrează adresa din

memoria de date a extensiei de stivă.

Stack Size Register (SZ) determină numărul locaţiilor de memorie

alocate pentru extensia stivei în memoria de date.

Stack Counter Register (SC)

Registru pe 5 biţi folosit pentru a monitoriza câte intrări în stivă sunt

folosite.

Registrul indicator de stivă (Stack Pointer Register)

Registru care indică vârful stivei şi eventualele condiţii de eroare.

Ultimii 4 biţi sunt incrementaţi/decrementaţi la fiecare scriere/citire din

stivă.

Biţii 4 şi 5 indică posibile erori de tipul stivă goală sau plină precum şi

depăşirea limitelor stivei.

Page 45: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 85

23 6 5 4 3 0

Indicator stivă Fanion Eroare-Stivă/P4 Fanion stivă goală/P5 P[23:6]

P[23:6] UF/P5 SE/P4 P[3:0]

Registrul de stare (Status Register)

Registru de 24 de biţi alcătuit din 3 părţi:

• Extended Mode Register (EMR)

• Mode Register (MR)

• Condition Code Register (CCR)

CP1 – Nivel Prioritate Bit 1 LF – Fanion buclă DO S – Bit scalare

CP0 – Nivel Prioritate Bit 0 DM – Înmulţire precizie dublă L – Limitare

RM – Mod de rotunjire SC – Copatibilitate 16-Biţi E – Extensie

SM – Saturare aritmetică S1 – Mod de scalare Bit 1 U – Nenormalizat

CE – Activare cache instr. S0 – Mod de scalare Bit 0 N – Negativ

SA – Aritmetică pe 16 biţi I1 – Mascare întreruperi Bit 1 Z – Zero

FV – Fanion DO-Forever I0 – Mascare întreruperi Bit 0 V – Depăşire

C – Depăşire

Registrul de condiţii (Condition Code Register)

Registru de control care defineşte rezultatele calculelor aritmetice

anterioare.

Biţii CCR sunt afectaţi de operaţii ALU, transferuri paralele sau

instrucţiuni care fac referire directă la acest registru.

Aplicaţii ale procesoarelor de semnal în comunicaţii86

Mode Register şi Extended Mode Register

Sunt registre de control care definesc starea curentă a sistemului.

Biţii MR şi EMR sunt afectaţi de resetarea procesorului, întreruperi,

DO, ENDDO, RTI şi alte instrucţiuni care modifică biţii din acest registru.

Instrucţiuni de ciclare

Repetarea unei instrucţiuni de n ori

REP n

n: valoarea aflată la o adresă efectivă sau absolută;

orice registru intern;

valoare imediată pe 8 biţi: #xxx;

Valoarea n este scrisă în LC şi decrementată la fiecare repetare a

instrucţiunii până când LC = 1.

Pentru instrucţiunea repetată se face fetch o singură dată, aceasta

rămânând în registrul de instrucţiune până la terminarea ciclului. De aceea

instrucţiunea REP este neîntreruptibilă.

Dacă LC este 0 instrucţiunea este repetată de 65536 ori.

Repetarea de n ori a instrucţiunilor aflate până la eticheta label

DO n,label

n: valoarea aflată la o adresă efectivă sau absolută;

orice registru intern;

valoare imediată pe 8 biţi: #xxx;

label: adresă absolută.

Page 46: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 87

Pentru fiecare instrucţiune din ciclu face fetch de fiecare dată. De

aceea instrucţiunea DO este întreruptibilă.

Ciclurile DO pot fi suprapuse (efectuarea unui ciclu în interiorul altuia).

Adresa sfârşitului ciclului este calculată (şi scrisă în LA) prin evaluarea

adresei etichetei label şi scăzând unu (pentru cazul în care ultima instrucţiune

ocupă două cuvinte de memorie). De aceea eticheta sfârşitului de ciclu trebuie

să reprezinte adresa instrucţiunii de după ciclu.

Repetarea de n ori a instrucţiunilor aflate până la adresa PC+val

DOR n,val

n: valoarea aflată la o adresă efectivă sau absolută;

orice registru intern;

valoare imediată pe 8 biţi: #xxx;

val: valoarea relativă adunată la PC reprezentând

sfârşitul ciclului adresă absolută.

Repetarea continuă a instrucţiunilor aflate până la adresa etichetă

DO FOREVER,label

Repetarea continuă a instrucţiunilor aflate până la adresa PC+val

DOR FOREVER,val

Ieşirea din ciclurile DO, DOR, DO FOREVER, DOR FOREVER se

face cu instrucţiunile:

ENDDO se iese din ciclul curent înainte ca LC să ajungă la 1.

BRKcc se iese din ciclul curent dacă se îndeplineşte condiţia cc.

Aplicaţii ale procesoarelor de semnal în comunicaţii88

Condiţiile testate la execuţia instrucţiunilor condiţionale se determină

din biţii din registrul CCR (Condition Code Register) pe baza unor ecuaţii

prezentate mai jos:

Codul Condiţional Semnificaţia ‘cc’ Condiţia

CC(HS) Carry Clear (Higher or Same) C = 0

CS(LO) Carry Set (Lower) C = 1

EC Extension Clear E = 0

EQ EQual Z = 1

ES Extension Set E = 1

GE Greater than Equal N ⊕ V = 0

GT Greater Than Z + (N ⊕ V) = 0

LC Limit Clear L = 0

LE Less than or Equal Z + (N ⊕ V) = 0

LS Limit Set L = 1

LT Less Than N ⊕ V = 1

MI Minus N = 1

NE Not Equal Z = 0

NR NoRmalized Z + (U • E) = 1

PL PLus N = 0

NN Not Normalized Z + (U • E) = 1

Unde:

+ reprezintă operatorul SAU

⊕ reprezintă operatorul SAU-EXCLUSIV

• reprezintă operatorul ŞI

Page 47: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 89

Alte instrucţiuni de control al programului

Aplicaţii ale procesoarelor de semnal în comunicaţii90

Page 48: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 91

EXEMPLE DE PROGRAME:

Calculul sumei de produse

Să se realizeze programul care calculează suma de produse (convoluţie

sau corelaţie):

1

0

( ) ( ) ( )N

ks n x k y n k

=

= −∑

Pseudocodul pentru acest program este:

s(n)=0;

for (k=0,k<N,k++)

s(n) = s(n) + x(k) * y((n-k)%N);

În limbaj de asamblare suma se poate calcula repetând instrucţiunea

mac într-un ciclu do astfel:

...

clr a

do #N,_end

...

mac x0,y0,a

_end

• suma se calculează în acumulatorul a care se iniţializează cu 0.

• instrucţiunea mac calculează x0*y0 şi adună la valoarea din a.

În registrele de date x0 şi y0 trebuie transferaţi din memorie operanzii

( )x k şi ( )y n k− :

• avem nevoie de două registre de adresă r0 şi r4 care să fie

iniţializate cu adresele de start ale celor două şiruri şi să indice pe

parcurs adresa elementului ( )x k respectiv ( )y n k− din şir.

Aplicaţii ale procesoarelor de semnal în comunicaţii92

• considerăm stocate în memorie şirurile de N valori ( )x k şi ( )y n k− ;

Registru adresă Memoria X Memoria Y

r0 (0)x

r4 ( )y n

• se va folosi modificarea modulo N a adresei pentru ca la sfârşitul

ciclului, registrele r0 şi r4 să indice adresele de unde s-a pornit.

• registrul de adresă r0 este incrementat pentru următorul ( )x k .

• registrul r4 este decrementat pentru ( )y n k− .

Etichetă Instr. OperanziMagistralade date X

Magistralade date Y

Cicluriceas

N equ 14 0

org x:0 0

x_addr dsm N 0

org y:0 0

y_addr dsm N 0

org p:$100 0

move #x_addr,r0 1

move #N-1,m0 1

move #y_addr,r4 1

move m0,m4 1

clr a 1

do #N,_end 5

move x:(r0)+,x0 1

move y:(r4)-,y0 1

mac x0,y0,a 1

_end

TOTAL 3N+10

Page 49: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 93

Optimizarea programului.

Optimizarea programului se poate face prin utilizarea transferurilor

paralele şi a instrucţiunii rep care repetă de N ori o singură instrucţiune.

Cele două instrucţiuni de transfer care se efectuau înaintea înmulţirii cu

acumulare pot fi efectuate în paralel cu aceasta. Diferenţa este că transferul

operanzilor din memorie în registre se face după citirea operanzilor din

registrele x0 şi y0 şi începerea efectuării înmulţirii. De aceea pentru prima

înmulţire din ciclu, operanzii trebuie iniţializaţi înaintea ciclului (în paralel cu

ştergerea acumulatorului, de exemplu).

Etichetă Instr. OperanziMagistralade date X

Magistralade date Y

Cicluriceas

...

clr A x:(r0)+,x0 y:(r4)-,y0 1

rep #N-1 5

mac X0,y0,a x:(r0)+,x0 y:(r4)-,y0 1

macr X0,y0,a 1

TOTAL N+6

Ciclul este efectuat de 1N − ori pentru ca numărul transferurilor din memorie

să fie egale cu N. Ultima înmulţire şi acumulare se face în afara ciclului

folosind şi rotunjirea rezultatului pe 24 de biţi.

Aplicaţii ale procesoarelor de semnal în comunicaţii94

Calculul valorii unui polinom

Să se realizeze programul care calculează polinomul:

1

0

( ) ( )N

k

kp x a k x

=

= ⋅∑

Pseudocodul pentru acest program este:

x_k = x;

p(x) = a(0);

for (k=1,k<N,k++)

{ p(x) = p(x) + a(k) * x_k;

x_k = x_k * x;

}

• registrul de adresă r0 este iniţializat cu adresa coeficienţilor ( )a k .

• valoarea lui x este păstrată în registrul y1.

• calculul lui kx se face păstrând pe 1kx − în registrul x0 şi înmulţind

această valoarea cu valoarea lui x din registrul y1.

• noua valoare kx se transferă apoi în registrul x0 pentru următoarea

iteraţie.

• polinomul se calculează în acumulatorul a cu instrucţiunea

mac y0,x0,a. La valoarea anterioară din a se adună produsul între

coeficientul ( )a k din registrul y0 şi kx din registrul x0.

Page 50: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 95

Etichetă Instr. OperanziMagistralade date X

Magistralade date Y

Cicluriceas

N equ 10 0

org x:0 0

a_addr dsm N 0

org p:$100 0

move #a_adr,r0 1

move x:#val_x,y1 1

move x:(r0)+,a 1

move x:(r0)+,y0 1

move y1,x0 1

do #N-1,_end 5

mac y0,x0,a x:(r0)+,y0 1

mpyr x0,y1,b 1

move b,x0 2 i’lock

_end

TOTAL 4N+6

• deoarece rezultatul înmulţirii 1kx x− ⋅ este în acumulatorul b, acesta

trebuie transferat în registrul x0 (o instrucţiune de transfer

suplimentară).

• deoarece registrul sursă de transfer b este acelaşi cu destinaţia

instrucţiunii anterioare de înmulţire, apare o întârziere de o

instrucţiune în execuţia programului (transfer stall).

Aplicaţii ale procesoarelor de semnal în comunicaţii96

Optimizarea programului.

Se poate efectua în avans calculul 1kx x− ⋅ astfel ca transferul din b să

nu se facă pentru valoarea calculată în instrucţiunea anterioară, ci în paralel cu

aceasta (deci pentru valoarea din b înaintea înmulţirii).

Etichetă Instr. OperanziMagistralade date X

Magistralade date Y

Cicluriceas

move #a_adr,r0 1

move x:#val_x,x0 1

move x:(r0)+,a 1

mpyr x0,x0,b x:(r0)+,y0 1

move b,y1 2 i’lock

do #N-1,_end 5

mac y0,x0,a x:(r0)+,y0 1

mpyr y1,x0,b b,x0 1

_end

macr y0,x0,a 1

TOTAL 2N+10

Succesiunea operaţiilor este:

x0 = x

a = a(0)

b = x2 y0 = a(1)

y1 = b = x2

a = a(1) * x + a(0) y0 = a(2)

b = x2 * x = x3 x0 = x2

a = a + a(2) * x2 y0 = a(3)

b = x2 * x2 = x4 x0 = x3

a = a + a(3) * x3 y0 = a(4)

b = x2 * x3 = x5 x0 = x4

Page 51: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 97

Sortarea unui vector prin selecţie directă

Algoritmul sortează elementele unui vector aflate în memoria X. Sortarea este

efectuată “in place” (în aceeaşi zonă de memorie) şi nu necesită memorie

suplimentară.

Algoritmul caută minimul elementelor ne-sortate din vector pe care îl schimbă

cu primul element de după secvenţa sortată.

Timpul de execuţie este proporţional cu pătratul numărului de elemente din

vector şi este constant chiar dacă vectorul este deja ordonat crescător,

descrescător sau elementele sunt în ordine aleatoare.

iniţializării = 0j = 0

a>b

a = bk = j

j = j + 1

NU

DA

a = data[i]

j = i + 1k = i

b = data[j]

data[k] = data[i]data[i] = a

i = i + 1

Aplicaţii ale procesoarelor de semnal în comunicaţii98

Registre folosite:

• indexul elementelor: r0 = j , r1 = k , r2 = i

• ciclul de căutare a minimului (numărul de elemente nesortate): r4 = j.

Instrucţiunea cmp b,a face diferenţa între a şi b şi modifică biţii de

condiţii din CCR în funcţie de rezultatul scăderii. Dacă a – b < 0 bitul n = 1.

Instrucţiunea tge y0,a r0,r1 transferă valoarea din y0 în a şi valoarea

din r0 în r1 dacă rezultatul comparaţiei anterioare este mai mare sau egal ca

0.

move #N_ITEMS,r4

move #ARRAY,r2

move #-2,n1

nop

do #N_ITEMS-1,_loop2

lua (r2)+,r0

nop

nop

move x:(r2),a y:(r4)-,b

move x:(r0)+,b

move r0,r1

do r4,_loop1

cmp b,a x:(r0)+,b b,y0

tge y0,a r0,r1

_loop1

nop

move x:(r2),y0

move a,x:(r2)+

move y0,x:(r1+n1)

_loop2

Page 52: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 99

Instrucţiunea IFcc

Execută instrucţiunea aritmetică dacă este îndeplinită condiţia din IFcc

(bazată pe operaţia anterioară). Altfel nu se execută instrucţiunea ALU.

move #>2,a ; a = 2

move #>1,x0 ; x0 = 1

add x0,a ; a = 2 + 1 = 3

sub x0,a ifne ; dacă rezultatul anterior

; nu e 0 se scade x0 din a

move #>-2,a ; a = -2

move x0,b ; b = 1

addl a,b ; b = 2*b + a = 0

sub x0,a ifne ; rezultatul anterior e 0

; nu se executa scaderea

nop

Instrucţiunea DEBUGcc

Dacă este îndeplinită condiţia se intră în modul “debug” (depanare) şi

se asteaptă o comandă OnCE (“run” sau “step” din debugger).

move y0,a ; init a

neg a ; a = -a

add y0,a ; a = 0

debugeq ; opreste executia si asteapta

nop ; comanda OnCE (run sau step)

Aplicaţii ale procesoarelor de semnal în comunicaţii100

Instrucţiunea BRKcc

Se iese condiţionat din ciclu do (dacă este îndeplinită condiţia cc).

a y0

a a – 1

a = 0? NU

LC = 1 NULC--

DABRKeqZ=0

DA

do #loop_c,loop1

loop1

move #>3,a ; init accumulator

do #6,loop1 ; init ciclu (LC = 6)

sub #1,a ; decrementare acumulator

brkeq ; iese din ciclu daca a=0

nop ; ultimele trei linii din cilu

nop ; nu trebuie sa contina brkcc

nop ; (conflict pipeline)

loop1

nop

Page 53: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 101

3.6 CONTROLERUL DMA (DIRECT MEMORY ACCESS)

Controlerul de acces direct la memorie (DMA) asigură transferul de

date între memoria internă şi/sau externă sau dispozitive de I/O în orice

combinaţie fără nici o intervenţie externă.

Deoarece există magistrale de date şi adrese dedicate DMA, precum şi

datorită modului de împărţire a memoriei interne rezulta că operaţiile de acces

direct la memorie nu interferă cu restul operaţiilor ce au loc în interiorul

DSP56300.

Unitatea de interfaţă cu magistrala (BIU) primeşte comenzile necesare

de la controlerul DMA şi poate prelucra activităţile externe cu maximum de

flexibilitate şi performanţă.

Controlerul DMA are 6 canale, fiecare cu setul propriu de registre

mapate în zona memoriei interne de I/O.

Tipurile de transfer de date efectuate de controlerul DMA sunt:

Sursa / destinaţia transferuluiNumărul minim de cicluri de ceas

pentru transferul unui cuvânt

Memorie internă → Memorie internă 2

Memorie externă ↔ Memorie internă 2 + timp acces memoria externă

Memorie externă → Memorie internă 2 + timp acces memoria externă

Memorie internă ↔ Porturi I/O 2

Memorie externă ↔ Porturi I/O 2 + timp acces memoria externă

Porturi I/O → Porturi I/O 2

Aplicaţii ale procesoarelor de semnal în comunicaţii102

Transferul de date pentru un singur canal ocupă minimum 2 tacturi de

ceas pentru un singur cuvânt.

Numărul de tacturi de ceas per transfer poate fi mai mare dacă există un

conflict între activitatea DMA şi nucleul DSP56300 (de exemplu dacă ambele

accesează aceiaşi 1/4K de RAM intern în acelaşi tact de ceas, sau dacă ambele

vor să acceseze memoria externă).

Controlerul de DMA are 6 canale identice. Fiecare canal are 6 registre

dedicate:

• DSRi – registrul sursa DMA pentru canalul i care conţine adresa de bază

a sursei următorului transfer DMA.

• DDRi – registrul destinaţie DMA pentru canalul i care conţine adresa de

bază a destinaţiei următorului transfer DMA.

• DCOi – registrul contor DMA pentru canalul i care conţine numărul de

transferuri DMA rămase de executat.

• DCRi – registrul de control DMA pentru canalul i care conţine biţii

necesari controlului operaţiilor de pe canal.

Mai sunt 5 registre nededicate:

• 4 registre DMA de ofset (DOR0, DOR1, DOR2, DOR3) care conţin

ofseturile pentru adrese ce vor putea fi folosite de orice canal, dacă este

necesar, folosind modurile de adresare specifice.

• un registru read-only de stare DMA (DSTR).

Page 54: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 103

Registrul de control DMA (DCR)

Aplicaţii ale procesoarelor de semnal în comunicaţii104

Registrul contor DMA (DCO)

Modul A – un singur contor (transfer unidimensional).

23 0

DCO

Numărul de transferuri este egal cu DCO+1. Înainte de fiecare transfer

DMA, registrul DCO este testat astfel:

• DCO > 0 – este iniţiat transferul de la adresa sursă, DCO este decrementat

şi registrul de adresă DSR este actualizat în funcţie de modul de adresare a

sursei din registrul de control DCR.

• DCO = 0 – ultimul transfer este iniţiat de la adresa sursă, registrul de

adresă este actualizat şi DCO este încărcat cu valoarea iniţială.

Înaintea transferului După transfer

DSR DCO Adresa sursă atransferului

DSR DCO

S 5 S S+1 4

S+1 4 S+1 S+2 3

S+2 3 S+2 S+3 2

S+3 2 S+3 S+4 1

S+4 1 S+4 S+5 0

S+5 0 S+5 S+6 5

În exemplul de mai sus am considerat că adresa sursă este modificată

(incrementată) în timpul transferului. Acelaşi lucru se poate întâmpla şi cu

adresa destinaţie a transferului în funcţie de modul de adresare destinaţie din

registrul de control DCR

Page 55: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 105

Transferuri DMA multidimensionale

DMA-ul este capabil de transferuri de date aflate în structuri complexe.

Modul de adresare al sursei sau destinaţiei poate fi bi sau tridimensional (2D

sau 3D).

Transferul bidimensional (2D)

Pentru transferul 2D, numărătorul DCO este divizat în DCOL şi

DCOH.

Modul B – două contoare (transfer bidimensional):

23 12 11 0

DCOH DCOL

Un registru de ofset DOR este folosit pentru a calcula saltul de adresă.

Adresa transferului DMA este conţinută de registrul de adrese (DSRi

sau DDRi).

Acest mod este util în transferuri bidimensionale (de exemplu liniile

unei matrice). Înainte de fiecare transfer DMA, registrele DCOH şi DCOL

sunt testate dacă au ajuns la 0 astfel:

• DCOH > 0 şi DCOL > 0 – este iniţiat transferul de la adresa sursă, DCOL

este decrementat şi registrul de adresă DSR este incrementat.

• DCOH > 0 şi DCOL = 0 – este iniţiat transferul de la adresa sursă,

registrul de adresă DSR este incrementat cu valoarea aflată într-un registru

ofset DOR asociat transferului bidimensional în registrul de control,

DCOH este decrementat şi DCOL este încărcat cu valoarea iniţială.

• DCOH = 0 şi DCOL = 0 – ultimul transfer este iniţiat de la adresa sursă,

registrul de adresă este actualizat şi DCOH şi DCOL sunt încărcate cu

valorile iniţiale. Odată cu acest ultim transfer de bloc de date, DMA-ul ori

Aplicaţii ale procesoarelor de semnal în comunicaţii106

încetează să mai execute orice operaţie, ori aşteaptă o nouă declanşare a

transferului.

Înaintea transferului După transfer

DSR DCOH:L Adresa sursă atransferului

DSR DCOH:L

S 1:2 S S+1 1:1

S+1 1:1 S+1 S+2 1:0

S+2 1:0 S+2 S+O+2 0:2

S+O+2 0:2 S+3 S+O+3 0:1

S+O+3 0:1 S+4 S+O+4 0:0

S+O+4 0:0 S+5 S+2O+4 1:2

Numărul total de transferuri efectuat este (DCOH + 1) x (DCOL + 1).

EXEMPLU:

Salt cu ofset

Transfer liniar 2D

Page 56: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 107

Transferul tridimensional (3D)

Pentru transferul 3D, registrul contor este împărţit în trei registre

DCOH, DCOM şi DCOL, având dimensiuni diferite.

Modurile C, D, E – trei contoare (transfer tridimensional):

23 12 11 6 5 0

DCOH DCOM DCOL

23 18 17 6 5 0

DCOH DCOM DCOL

23 18 17 12 11 0

DCOH DCOM DCOL

Acest mod de transfer utilizează 2 registre de ofset pentru calculul

adresei de salt.

Înainte de fiecare transfer DMA, registrele contor sunt testate dacă au

ajuns la 0 şi se efectuează următoarele operaţii:

• DCOH > 0, DCOM > 0 şi DCOL > 0 – este iniţiat transferul de la adresa

sursă, DCOL este decrementat şi registrul de adresă este incrementat.

• DCOH > 0, DCOM > 0 şi DCOL = 0 – este iniţiat transferul de la adresa

sursă, registrul de adresă este incrementat cu valoarea aflată în primul

registru ofset DOR specificat pentru transferul 3D în registrul de control,

DCOM este decrementat şi DCOL este încărcat cu valoarea iniţială.

• DCOH > 0, DCOM = 0 şi DCOL = 0 – este iniţiat transferul de la adresa

sursă, registrul de adresă este incrementat cu valoarea aflată în al doilea

registru ofset DOR specificat pentru transferul 3D în registrul de control,

DCOH este decrementat şi DCOM şi DCOL sunt încărcate cu valorile

iniţiale.

• DCOH = 0, DCOM = 0 şi DCOL = 0 – ultimul transfer este iniţiat de la

adresa sursă, registrul de adresă este incrementat cu al doilea ofset şi

Aplicaţii ale procesoarelor de semnal în comunicaţii108

DCOH, DCOM şi DCOL sunt încărcate cu valorile iniţiale. După acest

ultim transfer, DMA-ul aşteaptă o nouă declanşare.

Înaintea transferului După transfer

DSR DCO Adresa sursă atransferului

DSR DCO

S 1:1:2 S S+1 1:1:1

S+1 1:1:1 S+1 S+2 1:1:0

S+2 1:1:0 S+2 S+O0+2 1:0:2

S+O0+2 1:0:2 S+O0+2 S+O0+3 1:0:1

S+O0+3 1:0:1 S+O0+3 S+O0+4 1:0:0

S+O0+4 1:0:0 S+O0+4 S+O0+O1+4 0:1:2

S+O0+O1+4 0:1:2 S+O0+O1+4 S+O0+O1+5 0:1:1

S+O0+O1+5 0:1:1 S+O0+O1+5 S+O0+O1+6 0:1:0

S+O0+O1+6 0:1:0 S+O0+O1+6 S+2O0+O1+6 0:0:2

S+2O0+O1+6 0:0:2 S+2O0+O1+6 S+2O0+O1+7 0:0:1

S+2O0+O1+7 0:0:1 S+2O0+O1+7 S+2O0+O1+8 0:0:0

S+2O0+O1+8 0:0:0 S+2O0+O1+8 S+2O0+2O1+9 1:1:2

Numărul total de transferuri este (DCOH+1)x(DCOM+1)x(DCOL+1).

Page 57: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 109

EXEMPLU:

Salt cu ofsetul 1

Salt cuofsetul 1

Salt cuofsetul 1

Salt cuofsetul 1

Salt cuofsetul 1

Salt cuofsetul 1

Salt cu ofsetul 2

Transfer 3D 2D

Registrul de stare DMA (DSTR)

23 22 21 20 19 18 17 16 15 14 13 12

11 10 9 8 7 6 5 4 3 2 1 0

DCH2 DCH1 DCH0 DACT DTD5 DTD4 DTD3 DTD2 DTD1 DTD0

• Biţii DCH indică ce canal DMA este activ (000 – 101 reprezintă canalele

DMA 0 - 5).

• Bitul DACT indică dacă există cel puţin un canal DMA activ.

• Biţii DTDi indică transfer terminat pe canalul i şi sunt setaţi la transferarea

ultimului cuvânt la destinaţie.

Aplicaţii ale procesoarelor de semnal în comunicaţii110

Exemple de folosire a DMA

În aceste exemple se foloseşte un singur canal DMA fără interferenţe

din alte surse, cum ar fi alte canale DMA, conflicte cu nucleul DSP56300 etc.

Transferul de la memoria de date x la y

Următorul program foloseşte canalul 0 al DMA pentru a transfera liniar

un bloc de N cuvinte din memoria interna X in memoria interna Y:

movep #source_addr,x:M_DSR0 ;adresa sursă

movep #dest_addr,x:M_DDR0 ;adresa destinaţie

movep #(N-1),x:M_DCO0 ;se vor efectua N transferuri

movep #%100110000000001011010100,x:M_DCR0

nop

nop

jclr #0,x:M_DSTR,* ;interogarea lui DTD0

În acest program, în DSR0 este înscrisă adresa primei valori ce

urmează să fie transferată.

Nu este necesar să specificăm că adresa este internă. Partea hardware a

DMA evaluează această informaţie în mod automat în concordanţă cu harta

memoriei.

Numărul N de transferuri de efectuat este (DCO+1), deci valoarea

scrisă în DCO0 este N-1.

Conţinutul registrului de control DCR0 este următorul:

• DE = 1 începe un transfer DMA.

• DIE = 0 dezafectează întreruperea către procesor la sfârşitul unui bloc.

• DTM = 011 transferul blocului este activat software de DE prin setarea

bitului DE.

Page 58: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 111

• DPR = 00 nivel de prioritate zero (cel mai mic).

• DCON = 0 modul continuu nu este activat.

• DRS = 00000 in modul activat software acest câmp este ignorat.

• D3D = 0 mod ne-tridimensional.

• DAM = 101101 adresa sursă este post incrementată cu 1 (adresare

liniară), adresa destinaţie este de asemenea incrementată în mod liniar.

• DDS = 01 destinaţia este în memoria Y.

• DSS = 00 sursa în memoria X.

În acest exemplu, nucleul procesorului este inactiv în timpul în care

DMA-ul transferă blocurile de date.

Programul testează bitul DTD0 al acestui canal şi continuă execuţia

programului după ce DMA termină de transferat datele.

Datorită structurii de tip pipeline a execuţiei şi deoarece procesorul

interoghează bitul DTD0 până când acesta este egal cu 0, programul trebuie

să aştepte 2 cicluri de ceas până ce DE este scris iar DTD0 este resetat la

începutul blocului de transfer pentru a indica ocuparea canalului.

O altă opţiune este aceea de a interoga bitul DACT (bitul 8) din DSTR

până ce acesta este setat. Acest bit indică daca pe orice canal DMA se

efectuează un transfer de date. Programul trebuie să aştepte 3 cicluri de ceas

(3 instrucţiuni NOP) până când acest bit este setat şi poate fi interogat.

Transferul datelor de la portul ESSI

Canalul DMA5 este programat pentru a recepţiona date de la un port

periferic ESSI.

Aplicaţii ale procesoarelor de semnal în comunicaţii112

În acest caz adresa sursă trebuie să fie în modul "fără actualizare"

deoarece DMA-ul citeşte registrul de recepţie de date mapat la o adresă fixă

în memoria perifericelor.

Datele sunt transferate într-un buffer de tip circular în memoria X

internă. Buffer-ul circular este implementat folosind adresarea liniară; la

terminarea transferului este generată o întrerupere iar adresa destinaţie este

reiniţializată.

În acest exemplu se ignoră conţinutul contorului DCO5, care este însă

folosit pentru generarea unei întreruperi pentru a se face saltul la începutul

buffer-ului după ce acesta este umplut.

M_RX1 equ $ffffa8 ;registrul de recepţie ESSI1

movep #M_RX1,x:M_DSR5 ;adresa sursă

movep #$int_addr,x:M_DDR5 ;adresa destinaţie

movep #(N-1),x:M_DCO5 ;buffer circular de lungime N

movep #111011100110001011000000,x:M_DCR5

;transferul cuvintelor declanşat de ESSI1 Rx

;din memoria X fără actualizare in X act. liniara

;DE nu este şters la terminarea blocului

;intreruperea este generata la sfarsitul blocului

;prioritatea canalului este 3 (nu conteaza aici)

...

;rutina intreruperii terminării transferului pe DMA5

I_DMA5

movep #$int_addr,x:M_DDR5

;se modifică adresa de inceput a buffer-ului

;realizând o adresare circulară

Page 59: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 113

Exemple pentru realizarea altor moduri de adresare cu DMA

Adresare circulară folosind transferul 2D

Se transferă un cuvânt de date pe cerere până la sfârşitul cadrului

circular, după aceea se efectuează un salt înapoi (registru de ofset are valoare

negativă) la începutul cadrului.

M_RX1 equ $ffffa8 ;registrul de recepţie

ESSI1

movep #-(N-1),x:M_DOR0 ;offset de salt inapoi

movep #M_RX1,x:M_DSR5 ;adresa destinatie

movep #int_addr,x:M_DDR5 ;adresa de inceput buffer

movep #$(fff000+(N-1)),x:M_DCO5

movep #$ae6040,x:M_DCR5

;transferul declansat de ESSI1 Rx

;x no update -> x 2D cu DOR0

;DE nu este resetat la sfarsitul blocului de date

;intreruperea nu este generata

;prioritate canal: 3 (nu conteaza aici)

În acest exemplu registrul contor DCO5 este încărcat cu N-1 în DCOL şi cu

$fff în DCOH pentru un număr total mare de transferuri.

Transfer cu ofset echidistant

Modul de adresare postincrementare cu ofset Nn care are sintaxa

(Rn)+Nn poate fi folosit, de exemplu, pentru a efectua o decimare a datelor.

Folosind DMA-ul pentru a efectua aceeaşi operaţie se poate elibera

registrul Rn.

Transfer 3D 2D

Aplicaţii ale procesoarelor de semnal în comunicaţii114

Se programează canalul DMA pentru transfer 2D cu DCOL=0. La

fiecare transfer, registrul de adrese este modificat cu ofsetul N aflat în

registrul de ofset DORi.

Programând acelaşi canal pentru transfer 3D cu DCOH=0 si DCOL=0,

dar cu DCOM>0 şi DORi=N (ofset) şi DORj=–(N*DCOM) se

implementează un buffer circular care efectuează un algoritm de decimare

asemănător (modul de adresare rezultat este similar cu cel rezultat în urma

folosirii adresării ((Rn) + Nn) mod Mn.

Operarea cu mai multe canale DMA

Deoarece un canal DMA poate fi controlat din 32 de surse, transferuri

DMA multiple pot fi efectuate în serie sau paralel.

Orice canal poate fi controlat de întreruperi venite din 32 de surse:

• 4 externe (IRQA, IRQB, IRQC şi IRQD),

• 22 de evenimente sosite de la periferice,

• 6 moduri "sfârşit de transfer pe canalul A declanşează transferul pe canalul

B".

Ultimele 6 moduri sunt folositoare în cazul în care 2 transferuri

trebuiesc efectuate secvenţial, adică un canal DMA efectuează un transfer,

timp în care celuilalt canal i se setează toţi parametrii necesari pentru un al

doilea transfer.

Când primul transfer s-a efectuat, începe al doilea, iar primul DMA este

setat pentru un nou transfer programat să înceapă când al doilea canal DMA

termină transferul.

Page 60: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 115

EXEMPLU: Compresia imaginilor color

În televiziunea în culori fiecare pixel este reprezentat prin 3 octeţi

corespunzători culorilor roşu, verde, albastru.

În sistemul PAL reprezentarea RGB este transformată într-o

reprezentare YUV în care Y este luminanţa iar U si V sunt componentele de

crominanţă, conform ecuaţiilor:

Y = 0.299*R + 0.587*G + 0.114*B

U = (B – Y) / 2.03

V = (R – Y) / 1.14

Folosind sistemul YUV se poate ajunge la o compresie de 50% fără a

se reduce calitatea imaginii.

Datele sunt stocate conform standardului MPEG în cuvinte de 16 biţi

conform următoarei hărţi de memorie:

ADRESA DATA

000000 Y00, Y01

000001 Y02, Y03

000002 U0, V0

000003 Y10, Y11

000004 Y12, Y13

000005 U1, V1

Aplicaţii ale procesoarelor de semnal în comunicaţii116

Y00 Y01

Y02 Y03

U0 V0

Y10 Y11

Y12 Y13

U1 V1

Y20 Y21

Y22 Y23

U2 V2

Y30 Y31

Y32 Y33

Memoriasistemului

Y00 Y01

U0 V0

Y10 Y11

U1 V1

Y20 Y21

U2 V2

Y30 Y31

Memoria video(o linie de imagine)

Primul canal DMA transferă datele din Y00, Y01 deoarece acestea

diferă de structura celorlalte.

Al doilea canal DMA este declanşat de primul şi transferă din 2D în

liniar când DCOL=1 (o incrementare şi un salt).

Priorităţi între canale

Fiecare canal DMA are un nivel de prioritate definit de biţii DPR1,

DPR0 din DCR al canalului respectiv. Nivelul poate fi 0, 1, 2 sau 3.

Prorităţile sunt necesare deoarece un singur canal DMA poate efectua

un transfer într-un ciclu de ceas deoarece există o singură magistrală DMA de

adrese (DAB).

În cazul în care canalele DMA active au priorităţi diferite atunci

canalul cu prioritatea cea mai mare efectuează transferul, celelalte canale

aşteaptă.

Page 61: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 3 – Procesoarele DSP Motorola 56300 117

Dacă sunt două canale active cu aceeaşi prioritate se foloseşte o

metodă în care fiecare canal transferă cate un cuvânt periodic. Acest

algoritm denumit "round-robin" nu asigură că numărul de cuvinte transferate

de canalul A este egal cu cele transferate de B în acelaşi timp. Aceasta

deoarece un al treilea canal cu o prioritate mai mare poate interveni, iar

sistemul nu îşi aminteşte care canal a efectuat ultimul transfer înainte de

intervenţie.

EXEMPLU:

0 0 0 1 0 1 2 2 2 3 2 3 4 4 4 4 4 2 3 5 2 3 5 2 3 5 3 5 3 5 3 5 5 5 0 1 0 1 0 1 1 1 1

↑ ↑ ↑ ↑ ↑ ↑ ↓ ↓ ↓ ↓ ↓ ↓

Sta

rt C

h0

Sta

rt C

h1

Sta

rt C

h2

Sta

rt C

h3

Sta

rt C

h4

Sta

rt C

h5E

nd C

h4

End

Ch2

End

Ch3

End

Ch5

End

Ch0

End

Ch1

Round robin

În acest exemplu:

• Canalele 0 şi 1 au prioritatea 0

• Canalele 2, 3 şi 5 au prioritatea 1

• Canalul 4 are prioritatea 2.

Modul de transfer continuu

Un canal DMA poate lucra în modul continuu dacă bitul DCON din

registrul de control al canalului respectiv este setat.

Celelalte canale cu aceeaşi prioritate nu pot interveni până când nu se

termină transferul unui bloc întreg sau a unei linii.

Canalele cu prioritate mai mare întrerup transferul canalului chiar

dacă acesta este în modul continuu.

Aplicaţii ale procesoarelor de semnal în comunicaţii118

EXEMPLU:

0 0 0 1 0 1 2 2 2 3 2 3 4 4 4 4 4 2 3 5 5 5 5 5 5 5 5 2 3 2 3 3 3 3 0 1 0 1 0 1 1 1 1

↑ ↑ ↑ ↑ ↑ ↑ ↓ ↓ ↓ ↓ ↓ ↓

Sta

rt C

h0

Sta

rt C

h1

Sta

rt C

h2

Sta

rt C

h3

Sta

rt C

h4

Sta

rt C

h5E

nd C

h4

End

Ch5

End

Ch2

End

Ch3

End

Ch0

End

Ch1

Modul continuu

În acest exemplu

• canalele 2, 3 şi 5 au prioritatea 1;

• canalul 5 este setat în modul continuu.

Page 62: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 4 – Generarea semnalelor sinusoidale 119

CAPITOLUL 4

GENERAREA SEMNALELOR SINUSOIDALE

4.1 GENERAREA SEMNALELOR SINUSOIDALE FOLOSIND

DEZVOLTAREA ÎN SERIE TAYLOR A FUNCŢIEI SINUS

Pentru calculul funcţiei sin( )x se poate folosi dezvoltarea în serie

Taylor dată de ecuaţia:

3 5 7 9

sin( )1! 3! 5! 7! 9!

≈ − + − +x x x x x

x (4.1)

Această formulă aproximează funcţia sinus cu o precizie de până la 14

biţi pentru valori ale lui x în intervalul: / 2 / 2π π− ≤ ≤x .

Pentru / 2π>x se va face substituţia:

, 0 / 2

, / 2

( ), 3 / 2

(2 ), 3 / 2 2

ππ π π

π π ππ π π

≤ ≤ − ≤ ≤= − − ≤ ≤− − ≤ ≤

x x

x xx

x x

x x

(4.2)

Pentru 0<x se va folosi relaţia de calcul:

sin( ) sin( )− = −x x (4.3)

Dacă | | 2π>x funcţia va returna 0.

Aplicaţii ale procesoarelor de semnal în comunicaţii120

x < 0

x < π/2

x = |x|

s1 = −1NU

DA

x = x − π/2

NU

x < π/2

s2 = −1x = x − π/2

NU

x < π/2

x = x − π/2

NU

x < π/2

sin = 0

NU

x = π/2 − x

sgn = s1 * s2x = sgn * x

DA

DAEchivalent cu

π/2 < x < π

Echivalent cuπ < x < 3π/2

Echivalent cu3π/2 < x < 2π

DA

DA

STOP

Calcul sin(x)

Figura 4.1. Organigrama pentru stabilirea intervalului de valori pentru x

Page 63: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 4 – Generarea semnalelor sinusoidale 121

Rutina de calcul pentru sin( )x va avea două părţi:

1. Stabilirea intervalului de valori pentru x şi realizarea substituţiilor

pentru obţinerea rezultatului corect. Organigrama este prezentată în

figura 4.1.

2. Calculul valorii sin( )x conform formulei (4.1).

Pentru generarea unui semnal sinusoidal 0sin( )ωn de frecvenţă 0ω ,

programul principal va calcula valoarea lui 0ω=x n pentru n întregi şi va

verifica dacă | | 2π<x . Apoi se apelează rutina de calcul pentru sin( )x .

Pentru procesoarele de semnal în virgulă fixă, această implementare

ridică unele probleme datorită reprezentării în format fracţionar pentru x.

Aceasta implică scalarea acestuia (deoarece / 2 / 2π π− ≤ ≤x ) în intervalul

[ 1,1)− , adică:

2

π=s

xx . (4.4)

De asemenea pentru o arhitectură cu acumulator (cum este cazul

familiei DSP56300) este mai avantajoasă formula de calcul ca sumă de puteri

ale lui 2x , adică:

3 5 7 9 2 4 6 8

sin( ) 11! 3! 5! 7! 9! 3! 5! 7! 9!

≈ − + − + = − + − +

x x x x x x x x xx x (4.5)

Dacă avem în vedere şi scalarea lui x obţinem:

( )2 4 6 81 2 3 4sin( ) 1

2

π= + + + +s s s s sx x a x a x a x a x (4.6)

Unde constantele includ semnul şi factorii de scalare:

21

0.41123353! 2

π = − = −

a , 4

2

10.0507339

5! 2

π = =

a ,

6

3

10.0029804

7! 2

π = − = −

a ,8

4

10.0001021

9! 2

π = =

a .

Aplicaţii ale procesoarelor de semnal în comunicaţii122

În continuare este prezentat programul în limbaj de asamblare pentru

familia DSP56300:

move #xaddr,r4 ;adresa lui x

move #const,r0 ;adresa constantelor ai

move #sinrez,r1 ;adresa rezultatului

move #1.0,a x:(r4),x1 ; x1=x

mpyr x1,x1,b

move b,x1 ; x1=x^2

mpyr x1,x1,b x:(r0)+,x0 ; b=x^4, x0=a1

mac x0,x1,a x:(r0)+,x0 b,y1 ; a=1+a1*x^2, x0=a2

mpyr x1,y1,b ; b=x^6, y1=x^4

mac x0,y1,a x:(r0)+,x0 b,y1 ; a=a+a2*x^4, x0=a3

mpyr x1,y1,b ; b=x^8, y1=x^6

mac x0,y1,a x:(r0)+,x0 b,y1 ; a=a+a3*x^6, x0=a4

macr x0,y1,a x:(r4),x1 ; a=a+a4*x^8

move a,x0

mpyr x1,x0,a ; a=x*a

Pentru un procesor de semnal care foloseşte registre de uz general

pentru stocarea rezultatelor operaţiilor aritmetice şi nu mai este nevoie de

transferul din acumulator în registru de date, descompunerea în serie Taylor

se mai poate face folosind formula:

3 5 7 9 2 2 2 2

sin( ) 1 1 1 11! 3! 5! 7! 9! 2 3 4 5 6 7 8 9

≈ − + − + = − − − − ⋅ ⋅ ⋅ ⋅

x x x x x x x x xx x (4.7)

Page 64: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 4 – Generarea semnalelor sinusoidale 123

4.2 GENERAREA SINUSULUI CU AJUTORUL UNUI TABEL

DE CĂUTARE

Generarea sinusului este folositoare în comunicaţii şi aplicaţii de

control. Odată cu introducerea procesoarelor digitale de semnal cu viteză şi

precizie ridicate se poate genera digital un sinus stabil şi cu distorsiuni mici la

orice frecvenţă folosind un tabel de căutare cu interpolare pentru reducerea

distorsiunilor. În continuare vom descrie trei metode de generare a sinusului si

vom obţine Frecventa Sintetizabilă Maximă (FSM) pentru fiecare din cazuri.

Valorile folosite pentru generarea sinusului sunt înmagazinate într-un

tabel în memorie după cum urmează:

1= −i N [ ]sin ( 1) 2 /π− ⋅N N

.

.

→i [ ]sin ( ) 2 /π⋅i N

.

.

2=i [ ]sin (2) 2 /π⋅ N

1=i [ ]sin (1) 2 /π⋅ N

ADRESA DE START:0=i

[ ]sin (0) 2 /π⋅ N

unde:

N = lungimea tabelului;

i = indexul în tabel, 0 1≤ ≤ −i N ;

sin( 2 / ) ( )π⋅ =i N S i = valoarea înmagazinată la locaţia i din tabel.

Aplicaţii ale procesoarelor de semnal în comunicaţii124

Frecvenţa sinusului generat digital depinde de intervalul de timp şi de

pasul delta (∆) dintre două valori succesive din tabel. Dacă 1∆ = (intrările

sunt citite succesiv) şi tabelul este accesat la fiecare sT secunde ( sT =

perioada de eşantionare), frecvenţa fundamentală a sinusului sintetizat va fi:

1= =

⋅S

f

FF Hz

N T N(4.8)

Pe de altă parte, dacă 1∆ > , de exemplu 2∆ = , fiecare a doua intrare

este citită, şi tabelul este accesat la fiecare sT secunde, atunci frecvenţa

sinusului sintetizat va fi:

= ∆ ⋅ fF F Hz (4.9)

Dacă ∆ este întreg, doar multiplii ai fF pot fi generaţi.

Dacă ∆ este raţional atunci orice frecvenţă mai mică decât FSM poate fi

generată. Valoarea maximă pentru ∆ este / 2N deoarece pentru sintetizarea

sinusului fără aliere sunt necesare cel puţin două eşantioane pe perioadă.

Valoarea eşantionului de ieşire ( )x n , va depinde de faza iniţială f şi de

timp (sau indexul de eşantionare) n, după cum urmează:

( ) sin( 2 / )π= + ⋅ ∆ ⋅x n f n N , 0, 1, 2,= …n (4.10)

4.2.1 Căutarea în tabel cu delta întreg

Această implementare este o metodă de căutare directă în tabel cu delta

fiind un număr întreg şi pozitiv. Deoarece delta este întreg, toate eşantioanele

cerute sunt conţinute în tabel; nu sunt necesare aproximări. Figura de mai jos

ilustrează această metodă pentru 8=N şi 2∆ = .

Page 65: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 4 – Generarea semnalelor sinusoidale 125

1 2 3 4 5 6 7 8

-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

2=∆

Valorile din tabel

Valorile generate

Figura 4.2. Generarea eşantioanelor sinusului pentru delta întreg

În această rutină tabela cu valorile sinusului are lungime 256=N şi

este încărcată în memoria X începând de la adresa 0. Ieşirea poate fi citită din

locaţia de memorie Y:$100.

Harta memoriei:

X Data

TABELSINUS

NR1

adresa de bază = $0

Y Data

ieşire y:$100

Program

Start = $100

Figura 4.3. Harta memoriei pentru programul de generare a sinusului cu delta

întreg

Aplicaţii ale procesoarelor de semnal în comunicaţii126

Programul de asamblare pentru generarea sinusului când delta este

întreg este prezentat mai jos:

N equ 256 ; lungimea tabelei

table equ 0 ; adresa de început a tabelei

delta equ 2 ; delta = 2

pi equ 3.141592654

angle set 0.0

inc set 2.0*pi/N

org x:table

dup N

dc 0.5*@sin(angle) ; generarea unei perioade a

angle set angle+inc ; sinusului de 256 eşantioane

endm

org y:$100

y_dat ds $50 ; rezervam memorie Y pentru ieşire

org p:$100

start

move #table,r1 ; inceputul tabelei

move #y_dat,r4 ; adresa de iesire

move #N-1,m1 ; setarea adresarii modulo N

move #delta,n1 ; deplasare = delta

sineg

move x:(r1)+n1,x0 ; pune eşantionul sinusului în x0

move x0,y:(r4)+ ; mută eşantionul la ieşire

jmp sineg ; buclă infinită

Instrucţiunea MOVE utilizează modul de adresare modulo cu

postindexare a procesorului DSP56300. Trei registre de adrese ai unităţii

Page 66: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 4 – Generarea semnalelor sinusoidale 127

aritmetice sunt folosite în această rutină: registrul de adresă R1 pentru indexul

din tabela sinusului, registrul de deplasare N1 conţine valoarea lui delta, şi

registrul modificator M1 conţine valoarea 1−N pentru setarea bufferului

modulo.

Frecvenţa sintetizabilă maximă este dată prin formula:

1

2=

⋅ ⋅FSM

lcyc CIS(4.11)

unde:

CIS = numărul total de cicluri ale instrucţiunilor pentru generarea unui

eşantion al sinusului.

lcyc = timpul de execuţie al unui ciclu instrucţiune

Dacă considerăm 50=lcyc ns şi 4=CIS cicluri, valoarea FSM este cea

mai mare care s-ar putea obţine. Avem:

2,5=FSM MHz (4.12)

4.2.2 Căutarea în tabel cu delta raţional

Această implementare este o metodă directă de căutare în tabel cu delta

număr raţional pozitiv, adică, un număr compus dintr-o parte întreagă şi o

parte fracţionară. Când partea fracţionară este nenulă, eşantioanele din

punctele aflate între două elemente din tabel trebuie estimate folosind valorile

din tabel. Cea mai directă estimare este cea care foloseşte valoarea anterioară

din tabel. Această abordare este descrisă în această secţiune şi este ilustrată în

figura următoare pentru 8=N şi 2,5∆ = .

Aplicaţii ale procesoarelor de semnal în comunicaţii128

1 2 3 4 5 6 7 8

-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

5,2=∆

Valorile din tabel

Valorile generate

Figura 4.4. Generarea eşantioanelor sinusului pentru delta raţional

Delta este acum un număr raţional. Modul standard de adresare modulo

al procesorului DSP56300 nu poate fi folosit şi de aceea o schemă de adresare

modulo trebuie implementată software. În continuare vom descrie o metodă

de implementare a unei asemenea scheme. Aceasta foloseşte ambele registre

acumulator.

În această rutină partea întreagă a lui delta este stocată în partea

superioară a acumulatorului (B1 pentru exemplul dat). Trebuie avută grijă ca

partea fracţionară să fie stocată corect. Numărul mutat în B0 ca rezultat al

extragerii părţii întregi din delta, de exemplu ∆-@cvi(∆), este o fracţie cu

semn, de exemplu pozitiv. Acest lucru este nedorit cât timp bitul de semn

trebuie asociat părţii întregi. De aceea o deplasare către stânga trebuie

realizată pentru a elimina bitul de semn lăsând partea fracţionară din B0 fără

semn.

Page 67: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 4 – Generarea semnalelor sinusoidale 129

Separarea părţilor întregi şi fracţionare este realizată folosind directiva

de conversie la întregi a asamblorului: @cvi(“ConVert to Integer”). Funcţia

CVI converteşte numere raţionale în numere întregi prin simpla trunchiere a

părţii fracţionare a numărului raţional. De aceea:

• @cvi(D) returnează partea întreagă a lui delta.

• ∆-@cvi(∆) returnează partea fracţionară cu semn a lui delta.

Aceasta presupune că delta nu este o variabilă de lucru. Dacă se cere ca

delta să fie o variabilă de lucru, o separăm într-un întreg cu semn şi o fracţie

fără semn pe care le stocăm în B1 şi respectiv B0.

Al doilea acumulator, A în acest exemplu, conţine numărul raţional

pozitiv folosit pentru a încărca registrul de deplasare N1 care este folosit la

deplasarea pointerului R1. R1 este folosit pentru a adresa locaţia corectă din

tabela sinusului. Atât timp cât indexul tabelului trebuie să fie un întreg, doar

A1 este mutat în N1. Adunarea lui delta este făcută atât în partea întreagă cât

şi fracţionară a acumulatorului A. Punctul binar este unul imaginar între cele

două părţi A1 şi A0 ale acumulatorului. Trebuie notat că adresarea cu

registrul R1 este făcută prin indexarea cu registrul offset N1, lăsând astfel

neschimbată valoarea originală a lui R1 (adresa de bază).

Ca exemplu sunt arătate evoluţiile registrelor A şi N1 pentru 2,5∆ = şi

lungimea tabelei sinusului 8=N . Valoarea lui A1 este calculată modulo 8

prin mascare (operaţia “and”) cu valoarea 1 7− =N (111 în binar).

2,5∆ = B1 = 2 B0 = 0.5 (fără semn)

MASK = 7 (111) B1 00 … 00010 B0 10000 … 00 R1 = 0

A = 0 A1 00 … 00000 A0 00000 … 00 N1 = 0

A = A + B A1 00 … 00010 A0 10000 … 00

A = A and 111 A1 00 … 00010 A0 10000 … 00 N1 = A1 = 2

Aplicaţii ale procesoarelor de semnal în comunicaţii130

1

A = A + B A1 00 … 00101 A0 00000 … 00

A = A and 111 A1 00 … 00101 A0 00000 … 00 N1 = A1 = 5

A = A + B A1 00 … 00111 A0 10000 … 00

A = A and 111 A1 00 … 00111 A0 10000 … 00 N1 = A1 = 7

1

A = A + B A1 00 … 01010 A0 00000 … 00

A = A and 111 A1 00 … 00010 A0 00000 … 00 N1 = A1 = 2

A = A + B A1 00 … 00100 A0 10000 … 00

A = A and 111 A1 00 … 00100 A0 10000 … 00 N1 = A1 = 4

Programul în limbaj de asamblare pentru generarea sinusului cu delta

raţional este:

N equ 256 ; lungimea tabelei

table equ 0 ; adresa de început a tabelei

delta equ 2.5

pi equ 3.141592654

angle set 0.0

inc set 2.0*pi/N

org x:table

dup N

dc 0.5*@sin(angle) ; generarea unei perioade a

angle set angle+inc ; sinusului de 256 eşantioane

endm

org y:$100

y_dat ds $50

Page 68: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 4 – Generarea semnalelor sinusoidale 131

org p:$100

start

move #table,r1 ; r1 = începutul tabelei

move #y_dat,r4 ; r4 = pointerul ieşirii

move #(delta-@cvi(delta)),b0 ; partea fracţionara în b0

asl b ; elimina bitul de semn

move #@cvi(delta),b1 ; partea întreagă în b1

clr a #0,n1 ; iniţializează a şi n1

move #>N-1,x1 ; setează masca modulo

sineg

add b,a x:(r1+n1),y0 ; actualiz. a, y0 = sinus

and x1,a y0,y:(r4) ; mask a

move a1,n1 ; actualiz. reg. ofset n1

jmp sineg ; buclă infinită

Harta memoriei pentru acest program este:

X Data

TABELSINUS

N(R1+N1)

adresa de bază = $0

Y Data

ieşire y:$100

Program

Start = $100

Figura 4.5. Harta memoriei pentru programul de generare a sinusului cu delta

raţional

Frecvenţa sintetizabilă maximă este:

11,667

2 50 6= =

⋅ ⋅FSM MHz (4.13)

Aplicaţii ale procesoarelor de semnal în comunicaţii132

4.2.3 Căutarea în tabel cu interpolare liniară

Pentru a sintetiza sinusul de orice frecvenţă cu distorsiuni mici, o

metodă de interpolare trebuie folosită împreună cu căutarea în tabel. Folosind

interpolarea, valorile sinusului aflate între elementele din tabel pot fi

reprezentate mai precis. Cea mai uşoară tehnică de interpolare este

interpolarea liniară. Pentru interpolarea liniară presupunem că valoarea

sinusului într-un punct dintre două intrări succesive ale tabelei se află pe o

dreaptă între cele două valori. Acest lucru este ilustrat în figura următoare

pentru 8=N şi 2,5∆ = .

1 2 3 4 5 6 7 8

-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

5,2=∆

Valorile din tabel

Valorile generate

Eroarea fără interpolare liniară

Eroarea cu interpolare liniară

Figura 4.6. Generarea eşantioanelor sinusului prin interpolare liniară

Page 69: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 4 – Generarea semnalelor sinusoidale 133

Algoritmul folosit pentru interpolarea liniară se bazează pe ecuaţia

dreptei în două puncte:

1 1( )− = −y y m x x (4.14)

Pentru interpolarea liniară avem:

• [ 1] [ ]= + −m S i S i este panta segmentului de dreaptă între două

elemente, i si 1+i succesive ale tabelului;

• 1 [ ]=y S i este valoarea din tabelul sinusului de la adresa de bază +

deplasamentul i;

• [ ]= +y S i f este eşantionul aproximat;

• 1= −f x x este partea fracţionară a lui delta, 0 1< <f .

De aceea avem:

( )[ ] [ ] [ 1] [ ]+ = + ⋅ + −S i f S i f S i S i (4.15)

Diagrama de desfăşurare a programului de generare a sinusului cu

interpolare liniară este prezentată în figura 4.7.

Tabela sinusului este înmagazinată în memoria X începând de la adresa

0. Pointerul adresă R1 indică valoarea curentă a sinusului, în timp ce poinerul

adresă R2 indică valoarea următoare valorii curente a sinusului, R2 = R1 + 1.

Panta dintre două valori succesive este determinată prin diferenţa valorilor din

memorie de la adresele din R2 şi R1.

Pentru generarea eşantionului sinusului folosind interpolarea liniară,

partea fracţionară a aproximării liniare f, este înmagazinată în acumulatorul

A0 iar partea întreagă este înmagazinată în A1. A1 este mutat în N1 care este

folosit pentru indexarea registrului R1. Aceeaşi valoare care este mutată în N1

este mutată şi în N2 care este folosit pentru indexarea registrului R2. De

remarcat că spre deosebire de metoda anterioară de generare cu delta raţional,

conţinutul lui A0 trebuie deplasat la dreapta astfel încât să reprezinte un

Aplicaţii ale procesoarelor de semnal în comunicaţii134

număr în format fracţionar corect, cu semn pozitiv, pentru a realiza înmulţirea

care generează aproximarea liniară.

Iniţializări registrede adrese

Separare delta: parteîntreagă → Y1

fracţionară → Y0

Iniţializare adresătabelă sinus

Calculeazăm, f

Efectueazăinterpolarea liniară

[ ]S i f+

Generează eşantionieşire x(n)

Actualizează pointertabel sinus (modulo)

Figura 4.7. Organigrama pentru generarea sinusului cu interpolare liniară

Delta poate fi orice număr raţional pozitiv între 0 şi / 2N .

Acumulatorul B este mai întâi folosit pentru a separa delta într-un întreg cu

semn şi o fracţie fără semn şi apoi este folosit pentru a calcula valoarea

eşantionului interpolat. De remarcat că o adresare imediată lungă (de exemplu

folosind semnul “>”) trebuie specificată la salvarea părţii întregi în Y1

deoarece (@CVI(∆)) trebuie să fie interpretată ca o fracţie cu semn.

Page 70: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 4 – Generarea semnalelor sinusoidale 135

Partea de program pentru generarea sinusului foloseşte 6 registre ale

unităţii aritmetice, pe lângă registrele R1, R2, R4, N1, N2, M2. Registrul M2

este folosit mai întâi pentru a memora masca înainte de a fi folosit în operaţia

“and” de mascare (această operaţie de mascare obligă R1 + N1 să fie în

regiunea de memorie dorită, implementând adresarea modulo). M2 este

folosit apoi pentru actualizarea aritmetică modulo a lui R2 + N2. Este necesar

să avem grijă în cazul special când R1 + N1 indică $1FF. Deoarece R2 + N2

= R1 + N1 + 1, va trebui să indice $200 în loc de $100 fără operaţia

aritmetică modulo.

Programul de asamblare este prezentat mai jos:

N equ 256 ; lungimea tabelei

table equ 0 ; adresa de inceput a tabelei

delta equ 5.35

pi equ 3.141592654

angle set 0.0

inc set 2.0*pi/N

org x:table

dup N

dc 0.5*@sin(angle) ; generarea unei perioade a

angle set angle+inc ; sinusului de 256 esantioane

endm

org y:$100

y_dat ds $50

org p:$100

start

move #table,r1 ; r1 = adresa de start a tabelei

move #y_dat,r4 ; iesirea in memoria Y

Aplicaţii ale procesoarelor de semnal în comunicaţii136

move #(delta-@cvi(delta)),b0 ;parte fractionara delta

asl b ; elimina bitul de semn

move #>@cvi(delta),y1 ; partea intreaga delta

in y1

move b0,y0 ; partea fractionara fara semn

clr a #0,n1 ; initializeaza a si n1

move #N-1,n0 ; valoarea masca modulo

move #0,n2 ; initializeaza n2

move #table+1,r2 ; r2 = r1+1

sineg move a0,b ; delta fract. in b1, b0 = 0

lsr b x:(r1+n1),x0 ; b1 = f, x0 = S[i]

move b1,x1 ; x1 = f

move x:(r2+n2),b ; b1 = S[i+1]

sub x0,b ; panta m = S[i+1] – S[i]

move b,x0 ; x0 = m

move x:(r1+n1),b ; b1 = S[i]

macr x0,x1,b ; S[i+f] = m * f + S[i]

add y,a b,y:(r4) ; delta se aduna la a

move n0,x1 ; x1 valoarea masca modulo

and x1,a ; masca a1 = modulo

move a1,n1 ; actualiz. registrul ofset n1

move a1,n2 ; actualiz. registrul ofset n2

jmp sineg ; bucla infinita

Page 71: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 4 – Generarea semnalelor sinusoidale 137

Harta memoriei este:

X Data

TABELSINUS

N

(R2+N2)

(R1+N1)

adresa de bază = $0

Y Data

ieşire y:$100

Program

Start = $100

Figura 4.8. Harta memoriei pentru programul de generare a sinusului cu

interpolare liniară

Resursele necesare pentru această subrutină sunt:

Frecvenţa sintetizabilă maximă este:

10.625

2 50 16= =

⋅ ⋅FSM MHz (4.16)

Aplicaţii ale procesoarelor de semnal în comunicaţii138

4.3 METODA OSCILATORULUI DIGITAL

O metodă utilă de generare a unei sinusoide de o anumită frecvenţă este

folosirea unui rezonator aflat la limita stabilităţii care are o pereche de poli

complex conjugaţi pe cercul de rază unitate. Metoda oscilatorului recursiv

este cea mai eficientă şi precisă metodă de generare a semnalelor sinusoidale.

Fie sistemul digital care are răspunsul la impuls de forma:

0( ) sin( ) ( )ω=h n A n u n (4.17)

unde ( )u n este treapta unitate, A este amplitudinea sinusoidei generate,

iar 0ω este frecvenţa unghiulară.

Funcţia de transfer a sistemului (considerând 1=A ) se obţine aplicând

transformata Z ecuaţiei (4.17):

( )( )

0 0

0 0 0 0

1

1 1 1 2

1 1 1( )

2 1 1 2 1

ω ω

ω ω ω ω

− −

−− − − − −

− = − = − − − + +

j j

j j j j

e e zH z

j e z e z j e e z z(4.18)

Evident acest sistem are polii 0ωje şi 0ω− je aflaţi pe cercul de rază

unitate. Efectuând calculele rezultă:

10

1 20

( ) sin( )

( ) 1 2cos

ωω

− −= =− +

Y z zH z

X z z z(4.19)

Ecuaţia cu diferenţe finite este:

0 0( ) 2cos ( 1) ( 2) sin ( 1)ω ω= − − − + −y n y n y n x n (4.20)

Dacă la intrarea sistemului se aplică impulsul unitate pentru 2≥n ,

ieşirea ( )y n poate fi calculată recursiv astfel:

0( ) 2cos ( 1) ( 2), 2ω= − − − ≥y n y n y n n (4.21)

cu condiţiile iniţiale 0(1) sinω=y şi (0) 0=y .

Page 72: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 4 – Generarea semnalelor sinusoidale 139

Deoarece termenul 02cosω poate avea valori supraunitare algoritmul

va calcula ieşirea ( )y n astfel:

1. 0( 1)cosω= −a y n (instrucţiunea mpy)

2. ( ) 2 ( 2)= − −y n a y n (instrucţiunea subl)

0cos2 ω

1−1−z

1−z

)(ny

)1(1 −= nys

)2(2 −= nys

Figura 4.9. Structura oscilatorului digital

Erorile care apar în acest sistem sunt date de reprezentarea valorii

0cosω pe un număr finit de biţi (24 de biţi în cazul Motorola DSP56300) şi la

trunchierea rezultatului după adunare (scădere de fapt).

Dacă valoarea 0cosω este cuantizată pe 24 de biţi eroarea (deviaţia) de

frecvenţă unghiulară este:

( )230 0 0arccos cos 2ω ω ω −∆ = − − (4.22)

ceea ce, pentru o frecvenţă de eşantionare de 48 kHz conduce la o

diferenţă de frecvenţă faţă de valoarea nominală de maxim 0.01 Hz pentru

frecvenţe situate în intervalul 500 Hz – 23 kHz şi de maxim 0.1 Hz în afara

acestui interval.

În urma cuantizării coeficientului 0cosω este afectată numai frecvenţa

sinusoidei generate nu şi amplitudinea acesteia deoarece se modifică numai

argumentul polilor, modulul rămânând 1.

Aplicaţii ale procesoarelor de semnal în comunicaţii140

Exemplu: Generarea unui sinus de 60Hz:

Fs set 48000.0 ;Frecvenţa de eşantionare

PI set 2.0*@asn(1.0) ;PI calculat ca 2.0*arcsin(1.0)

freq_a set 60.0 ;Frecvenţa dorită în Hertzi

amp_a set 0.3 ;Amplitudinea (0-1)

omega set 2.0*PI*freq_a/Fs ;Pulsaţia unghiulară normată

s1_a set amp_a*@sin(omega) ;Valori iniţiale y(1) şi y(0)

s2_a set 0.0

coeff_a set @cos(omega) ;Calcul coeficient cos

org x:

DOSC_BUFF_BASE EQU *

coeff ds 1 ;Adresa coeficient

s1 ds 1 ;Adresa s1

s2 ds 1 ;Adresa s2

org p:$100

START

;Iniţializări Oscilator Digital

move #coeff_a,x0

move x0,x:DOSC_BUFF_BASE

move #s1_a,x0

move x0,x:DOSC_BUFF_BASE+1

move #s2_a,x0

move x0,x:DOSC_BUFF_BASE+2

loop

move #DOSC_BUFF_BASE,r5

jsr dosc_sin ;Apel subrutină oscilator

move a,x0 ;Copiază noul eşantion în x0

jmp loop ;Buclă infinită

Page 73: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 4 – Generarea semnalelor sinusoidale 141

dosc_sin

move x:(r5)+,x0

move x:(r5)+,y0

move x:(r5)-,b ;r5 e decrementat pentru a indica s1

mpy x0,y0,a ;cos*s1

subl b,a ;(cos*s1 - s2)=sin_val

move a,x:(r5)+ ;Salvează noul s1

move y0,x:(r5) ;Salvează noul s2

rts

Aplicaţii ale procesoarelor de semnal în comunicaţii142

4.4 GENERAREA SEMNALELOR SINUSOIDALE ÎN

CUADRATURĂ

O altă soluţie simplă, rapidă, de tip recursiv de generare a sinusului este

propusă în rândurile următoare. Avantajul este că se pot genera simultan o

sinusoidă şi o cosinusoidă de aceeaşi frecvenţă (necesare în aplicaţii unde se

cer semnale modulatoare în cuadratură) iar rezultatele sunt de mare precizie.

Operaţiile efectuate de sistem sunt de fapt două formule binecunoscute

din trigonometrie şi anume cosinusul şi sinusul unei sume de arce.

Recursivitatea se scrie:

cos ( 1) cos cos sin sinα α α α α+ = −n n n (4.23)

sin ( 1) cos sin sin cosα α α α α+ = +n n n (4.24)

unde 02α πω=

Pentru generarea frecvenţei dorite trebuie iniţializate valorile cos0 1=

şi sin 0 0= . Calculul celor două forme de undă se realizează apoi doar prin

patru multiplicări, o adunare şi o scădere. Parametrii de intrare sunt locaţiile

de memorie folosite pentru cosαn şi sinαn şi cele două constante cosα şi

sinα ce dau frecvenţa de oscilaţie.

cosα

sinα

1−z 1−z

nαcos nαsin

-sinα

cosα

Figura 4.10. Structura generatorului de semnale sinusoidale în

cuadratură

Page 74: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 4 – Generarea semnalelor sinusoidale 143

Frecvenţa va fi dată deci de incrementul de fază 02α πω= . În cazul

procesorului DSP56300 precizia frecvenţelor generate depinde de precizia

reprezentării lui cosα şi sinα pe 24 de biţi.

cosα

sinα

1−z 1−z

nαcos

nαsin

-sinα

cosα

)(sin)(cos 22 nn αα + )(sin)(cos 22 nn αα +

1

-

1

err

nαcos

nαsin

Figura 4.11. Compensarea amplificării în generatorul de semnale sinusoidale

în cuadratură

Recursivitatea necesită controlul ciclurilor limită pe termen lung. Din

cauza faptului că sinusul şi cosinusul sunt generate recursiv, erorile se pot

propaga foarte rapid. Pentru a preveni ca amplitudinea să scadă sau să crească

în decursul timpului, se adaugă un sistem de compensare a amplificării.

Acesta se realizează prin calcularea unui semnal de eroare, semnal ce este dat

de diferenţa între amplitudinea dorită (1 de exemplu) şi amplitudinea actuală

(cea generată), care se calculează cu formula:

2 2cos ( ) sin ( )α α+n n (4.25)

Aplicaţii ale procesoarelor de semnal în comunicaţii144

Semnalul de eroare este apoi utilizat ca o reacţie negativă, pentru

controlul amplitudinii, ceea ce conferă acestui algoritm o mare precizie la

generarea sinusoidelor. Semnalul eroare va fi calculat după formula:

2 21 cos ( ) sin ( )α α= − +err n n (4.26)

Pot apare trei cazuri de-a lungul desfăşurării programului :

1. Dacă 0=err , deci suma de sub radical va fi 1, semnalul nu va avea

nici o eroare, iar semnalele sin( )αn şi cos( )αn vor fi amplificate cu

1, păstrându-şi astfel valoarea.

2. Dacă sinusoida are tendinţa să scadă în amplitudine, de exemplu

dacă radicalul ia valoarea 0,9 , va rezulta un semnal de eroare

0,1=err . Acesta se va aduna cu 1 şi se va înmulţi cu valorile

anterioare ale sin( )αn şi cos( )αn , pentru a se mări amplitudinea.

3. Dacă sinusoida are tendinţa să crească în amplitudine, de exemplu

dacă radicalul ia valoarea 1,1, va rezulta un semnal de eroare

0,1= −err . Acesta se va aduna cu 1 şi se va înmulţii cu valorile

anterioare alesin( )αn şi cos( )αn , pentru a scădea amplitudinea.

Page 75: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 5 – Realizarea filtrelor digitale 145

CAPITOLUL 5

REALIZAREA FILTRELOR DIGITALE

5.1 IMPLEMENTAREA FILTRELOR CU RĂSPUNS FINIT LA

IMPULS (FIR)

Funcţia de transfer a unui filtru cu răspuns finit la impuls de lungime N

este de forma:

1 10 1 1

( )( ) ..

( )N

N

Y zH z h h z h z

X z− −

−= = + + + (5.1)

Ecuaţia cu diferenţe finite este:

1

0

( ) ( )N

kk

y n x n k h−

=

= −∑ (5.2)

unde ( )x n este intrarea filtrului la momentul n, ( )y n este ieşirea, kh

sunt coeficienţii funcţiei pondere şi N este lungimea filtrului.

5.1.1 Forma transversală

Ecuaţia (5.2) poate fi implementată într-o structură transversală ca în

figura următoare.

Aplicaţii ale procesoarelor de semnal în comunicaţii 146

0h

( )x n 1z− 1z−

( 1)x n − ( 1)x n − 1z−

1h 2h 1Nh −

( 1)x n N− +

( )y n

Figura 5.1. Forma transversală pentru FIR

Pentru calculul ieşirii ( )y n trebuie memorate stările filtrului şi

coeficienţii funcţiei pondere. De exemplu, pentru implementarea filtrelor FIR

pe procesoarele din familia DSP56300, memoria este organizată după cum

urmează:

• stările filtrului (ultimele N eşantioane de intrare) în memoria de date

X, într-un buffer circular de lungime N.

• coeficienţii filtrului în memoria de date Y începând de la adresa $0,

de asemenea într-un buffer circular de lungime N.

Memoria X

r0

Memoria Y

1Nh −

1h

0h

( 1)x n −

( )x n

( 1)x n N− +

Adresa de bază: $0 $0 r4

Figura 5.2. Organizarea memoriei pentru filtrul FIR

Page 76: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 5 – Realizarea filtrelor digitale 147

Registrul r4 indică adresa coeficienţilor filtrului. r4 este incrementat

modulo N, astfel că la terminarea sumei (după N incrementări) el revine la

adresa primului coeficient 0h .

Registrul r0 indică adresa celui mai recent eşantion ( )x n . La sfârşitul

efectuării sumei, r0 (incrementat tot modulo N) va ajunge în aceeaşi poziţie,

de aceea el trebuie decrementat pentru a indica adresa celui mai vechi

eşantion ( 1)x n N− + . Astfel, următorul eşantion de intrare va fi scris în locul

acestuia, eşantionul anterior devenind ( 1)x n − etc.

Programul de calcul al ieşirii ( )y n este dat sub forma unui macro în

care:

- acumulatorul a este şters, eşantionul ( )x n este salvat din x0 în memorie la

adresa indicată de r0, coeficientul 0h este adus din memorie în registrul

y0. Aceste trei operaţii se efectuează în paralel într-un singur ciclu maşină.

- se face suma primelor 1N − produse. Înmulţirea şi sumarea operanzilor se

face cu instrucţiunea mac x0,y0,a rezultatul sumei fiind în acumulatorul a.

În paralel cu aceasta sunt transferaţi din memorie operanzii următori:

eşantionul ( )x n k− în x0 şi coeficientul kh în y0.

- după terminarea ciclului rep se face ultima înmulţire cu acumulare şi

rotunjire pentru ca ( )y n să fie pe 24 de biţi, precum şi decrementarea lui

r0.

Aplicaţii ale procesoarelor de semnal în comunicaţii 148

fir macro ntaps

;------------------------------------------------

; eşantionul de intrare în x0

; ieşirea în acumulatorul a

; registrul r0 indică adresa esantionului x(n)

; registrul r4 indică adresa coeficientului h0

; parametru de intrare ntaps = lungimea filtrului

;------------------------------------------------

clr a x0,x:(r0)+ y:(r4)+,y0

rep #ntaps-1

mac x0,y0,a x:(r0)+,x0 y:(r4)+,y0

macr x0,y0,a (r0)-

endm

Programul principal trebuie să iniţializeze adresele pentru stările şi

pentru coeficienţii filtrului, precum şi modul de adresare circulară. Eşantionul

de intrare este transferat în x0, iar ieşirea este citită din a.

datin equ $ffffff

datout equ $fffffe

ntaps equ 4 ;lungimea filtrului

org x:0 ;rezervă memorie pentru

states dsm ntaps ;stările filtrului

org y:0

coef dc .1,.3,-.1,.2 ;coeficienţii filtrului

org p:$100

start

move #states,r0 ;adresa stărilor filtrului

move #ntaps-1,m0 ;adresare modulo(ntaps)

Page 77: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 5 – Realizarea filtrelor digitale 149

move #coef,r4 ;adresa coeficienţilor

move #ntaps-1,m4 ;adresare modulo(ntaps)

filtr movep y:datin,x0 ;eşantionul de intrare

fir ntaps ;calculează fir

movep a,y:datout ;ieşirea

jmp filtr

end

Programul este valabil pentru orice tip de FIR. Toţi coeficienţii sunt

consideraţi în format fracţionar (de modul subunitar). Dacă în urma proiectării

filtrului FIR apar şi coeficienţi de modul supraunitar, atunci toţi coeficienţii

trebuie scalaţi prin împărţirea cu:

( )max km h= (5.3)

De asemenea, pentru a evita depăşirea capacităţii registrelor, dacă

eşantioanele intrării sunt în intervalul ( 1,1)− , atunci trebuie îndeplinită

condiţia:

1

0

1N

kk

s h−

=

= ≤∑ (5.4)

Dacă nu este îndeplinită condiţia (5.4) atunci fie intrarea ( )x n , fie

coeficienţii kh trebuie scalaţi cu factorul s. Dacă intrarea este împărţită la s,

atunci gama dinamică a semnalului la intrare se micşorează, deci şi raportul

semnal-zgomot al structurii se micşorează. Pe de altă parte, dacă sunt scalaţi

coeficienţii, aceştia vor putea fi reprezentaţi pe mai puţini biţi şi este afectat

răspunsul în frecvenţă al filtrului. Aceste implicaţii trebuie evaluate în funcţie

de aplicaţie şi aleasă una din variante.

Aplicaţii ale procesoarelor de semnal în comunicaţii 150

5.2 IMPLEMENTAREA FILTRELOR CU RĂSPUNS INFINIT

LA IMPULS (IIR)

Pentru un filtru IIR avem funcţia de transfer de forma:

0

1

( )( )

( ) 1

Mk

kk

Nk

kk

b zY z

H zX z a z

=

=

= =+

∑ (5.5)

Coeficienţii numărătorului kb şi ai numitorului ka se determină printr-

una din metodele de proiectare a filtrelor digitale cu răspuns infinit la impuls

(folosind eventual mediul MATLAB) în funcţie, bineînţeles, de condiţiile de

proiectare cerute.

Notând cu ( )x n secvenţa de la intrarea filtrului şi cu ( )y n secvenţa de

la ieşirea filtrului, rezultă ecuaţia cu diferenţe finite:

0 1

( ) ( ) ( )M N

k kk k

y n b x n k a y n k= =

= − − −∑ ∑ (5.6)

Pentru calculul ieşirii ( )y n există mai multe posibilităţi de

implementare în funcţie de structura aleasă. Performanţele implementării

(complexitate aritmetică memorie ocupată, transferuri paralele) diferă în

funcţie de structura aleasă.

De asemenea, în proiectare şi implementare trebuie evaluate efectele

reprezentării semnalelor utilizând un număr finit de biţi. În cazul reprezentării

numerelor în formate cu virgulă fixă apare o depăşire dacă rezultatul unei

operaţii aritmetice este de modul supraunitar. Acest lucru este posibil după

operaţiile de însumare şi de înmulţire cu o constantă de modul supraunitar.

Page 78: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 5 – Realizarea filtrelor digitale 151

Analiza posibilităţii depăşirilor comportă două aspecte:

• analiza funcţiei de transfer, ( )H z şi eventual scalarea acesteia astfel

încât să se elimine sau să se reducă suficient de mult probabilitatea

ca semnalul de ieşire să fie de modul supraunitar;

• analiza posibilităţii depăşirilor în toate nodurile reţelei, conducând

(dacă este necesar) la o scalare a semnalului compensată în final,

astfel încât să nu afecteze realizarea funcţiei de transfer impuse.

În filtrele digitale atât amplitudinea semnalului cât şi coeficienţii sunt

valori discrete sau cuantizate cu un număr finit de biţi. Deşi astfel de sisteme

sunt neliniare, efectele acestor cuantizări pot fi interpretate ca fiind surse de

zgomot aditiv. Erorile de cuantizare ale coeficienţilor modifică funcţia de

transfer a filtrului şi se produc astfel variaţii ale zerourilor şi polilor, variaţii

care schimbă nedorit răspunsul în frecvenţă al filtrelor. Erorile de cuantizare a

semnalului pot fi privite ca surse de zgomot aditiv în diferite noduri ale

reţelei.

Principala sursă de zgomot de cuantizare o reprezintă rotunjirea sau

trunchierea rezultatului înmulţirii. Rezultatele înmulţirii şi adunării sunt

stocate în registrele acumulator, care la familia DSP56300 sunt de 56 de biţi.

Dacă se doreşte salvarea rezultatului în memorie este necesară limitarea

acestuia la 24 de biţi. În acest caz este de preferat o rotunjire în loc de

trunchiere, pentru o eroare mai mică. Alte surse sunt cuantizarea intrării la

convertorul analog-digital şi limitarea numărului de biţi la ieşire, de exemplu

trecerea de la o reprezentare internă pe 24 de biţi la 16 biţi pentru un

convertor digital-analog.

Cuantizarea coeficienţilor are efecte diferite de cuantizarea semnalului

din punct de vedere al zgomotului. Cuantizarea coeficienţilor produce erori în

răspunsul în frecvenţă şi în amplitudine ale filtrului, fiind erori deterministe.

Aplicaţii ale procesoarelor de semnal în comunicaţii 152

Aceste erori pot fi minimizate folosind structuri de filtre mai puţin sensibile,

cu aceeaşi funcţie de transfer şi alocând un număr suficient de biţi pentru

coeficienţi.

Cuantizarea semnalului are efecte în diferite noduri ale filtrului, putând

fi considerate ca surse de zgomot alb, aditiv, înrăutăţind RSZ al ieşirii. Aceste

erori pot fi minimizate realizând înmulţirea şi acumularea rezultatului în

registre de lungime dublu-cuvânt.

O cale de mijloc pentru evitarea înrăutăţirii raportului semnal-zgomot

(RSZ) şi, pe de altă parte, evitarea depăşirii gamei dinamice (overflow) este

scalarea. Nu este nevoie de scalare în fiecare nod al reţelei deoarece

semnalele în unele noduri sunt doar întârzieri ale semnalelor din alte noduri.

De asemenea, dacă rezultatul final al adunării semnalelor din mai multe

noduri este subunitar, în cazul adunării în complement faţă de doi în final se

obţine rezultatul corect indiferent dacă în diferite noduri apar depăşiri la

sumele parţiale. Trebuie astfel realizată o tehnică de scalare a semnalului la

intrare pentru a evita depăşirile numai în nodurile unde acestea pot apare.

Se presupune că semnalul de intrare este în modul subunitar:

( ) 1x n ≤ (5.7)

Fie ( )mH z funcţia de transfer de la intrare la nodul m. Pentru a nu avea

depăşire în nodul m trebuie îndeplinită condiţia:

( ) 1my n ≤ (5.8)

Avem:

0 0 0

( ) ( ) ( ) ( ) ( ) ( )m m m m mk k k

y n h k x n k h k x n k h k k∞ ∞ ∞

= = =

= − ≤ − ≤ =∑ ∑ ∑ (5.9)

Nodurile în care pot apare depăşiri sunt în partea recursivă a structurii

şi, bineînţeles, la ieşirea filtrului. Scalarea este necesară dacă cel puţin unul

Page 79: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 5 – Realizarea filtrelor digitale 153

din coeficienţii mk este supraunitar. Coeficientul cu care se face scalarea la

intrarea structurii va fi:

1 2

1 1 1min , ,...,

m

sk k k

⎛ ⎞≤ ⎜ ⎟

⎝ ⎠ (5.10)

În cazul în care intrarea este zero sau o constantă, există posibilitatea ca

ieşirea filtrului, în loc de o apropiere asimptotică de o valoarea constantă, să

oscileze cu amplitudini relativ mici. Aceste oscilaţii sunt numite cicluri

limită. Aceştia pot fi reduşi la amplitudini acceptabile crescând numărul de

biţi de reprezentare cu virgulă fixă a semnalului.

Oscilaţiile în depăşiri sunt produse de caracteristica circulară a

sumatorului în complement faţă de 1 sau faţă de 2. Aceste oscilaţii pot

produce depăşiri ale gamei dinamice a filtrului IIR. Soluţia acestei probleme

este folosirea aritmeticii cu saturaţie la adunare ceea ce limitează rezultatul

adunării în modul subunitar.

Un alt factor ce influenţează implementarea software a filtrelor IIR este

numărul de instrucţiuni pe ciclu (aceasta mai ales pentru implementări în timp

real). Alţi factori ţin de natura procesorului (de exemplu: stocarea datelor şi

programelor în memorie, utilizarea registrelor, folosirea autoscalării, etc.).

Prima şi cea mai importantă problemă implică reducerea ciclurilor de

instrucţiune în programul de implementare a filtrului. Acest lucru este facilitat

de arhitectura pipe-line a procesorului, de multiplicarea cu acumulare

efectuată într-un singur ciclu şi de modurile de adresare ce se desfăşoară

paralel cu instrucţiunile aritmetice.

Pentru implementarea unui filtru digital pe DSP56300 trebuie mai întâi

proiectat filtrul şi obţinuţi coeficienţii pentru o formă particulară (directă,

latice, etc.) ce va fi implementată.

Aplicaţii ale procesoarelor de semnal în comunicaţii 154

O procedură generală de utilizare a unui macro:

1. Definirea locaţiilor datelor pentru coeficienţii filtrului şi stările

acestuia;

2. Scrierea coeficienţilor în zona de memorie rezervată;

3. Scrierea stărilor iniţiale ale filtrului (la momentul 0n = );

4. Apelul macroului pentru calculul ieşirii;

5. Stările şi coeficienţii nu trebuie modificate între două apeluri

succesive ale macro-ului.

Când se foloseşte un macro într-o buclă pentru a genera o secvenţă de

eşantioane la ieşire prin prelucrarea eşantioanelor de la intrare, stările şi

coeficienţii sunt stocaţi în memorie, iar macro-ul este apelat în buclă. Bucla

va citi intrarea, va face apelul macro-ului şi va depune eşantioanele de la

ieşire în locaţia specificată (de obicei în acumulator). Pentru implementarea

aceluiaşi filtru se poate alege dintre mai multe macro-uri. În acest caz se

selectează macro-ul care are cele mai puţine cicluri de instrucţiuni.

5.2.1 Forma directă 1

Scriind relaţia intrare-ieşire sub forma:

0

( ) ( )M

kk

k

W z X z b z−

=

= ⋅∑ (5.11)

1

( )( )

1N

kk

k

W zY z

a z−

=

=+∑

(5.12)

Rezultă ecuaţiile cu diferenţe finite:

0

( )M

kk

k

w n b z−

=

=∑ (5.13)

1

( ) ( ) ( )N

kk

y n w n a y n k=

= − −∑ (5.14)

Page 80: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 5 – Realizarea filtrelor digitale 155

Astfel, pentru un filtru de ordin N rezultă schema de mai jos:

( )x n 0b ( )y n

1z−

1z−

1z−

1b

2b

Mb

( )w n

( 1)x n −

( )x n M−

1z−

1z−

1z−

1a−

2a−

Na−

( 1)y n −

( )y n N−

Figura 5.3. Filtru IIR forma directă 1

Evident, pentru calculul lui ( )w n se foloseşte macroul de fir.

Să considerăm acum implementarea unui filtru de ordin 2 numai cu

poli, cu funcţia de transfer de forma:

1 2

1 2

1( )

1H z

a z a z− −=+ +

(5.15)

Ieşirea va fi calculată cu formula:

1 2( ) ( ) ( 1) ( 2)y n x n a y n a y n= − ⋅ − − ⋅ − (5.16)

Organizarea memoriei:

Memoria X

r0

Memoria Y

2a−

1a−

( 2)y n −

( 1)y n − r4

Figura 5.4. Organizarea memoriei pentru un filtru de ordin 2 numai cu poli

Aplicaţii ale procesoarelor de semnal în comunicaţii 156

Registrele modulo m0 şi m4 sunt setate –1 pentru adresare liniară.

Coeficienţii 1a şi 2a se consideră de modul subunitar. Înainte de apelul

macro-ului se scrie în registrul acumulator a valoarea eşantionului de intrare

( )x n .

iir1 macro

iir1 ident 1,0

;

; IIR1 - Implementare filtru IIR de ordin 2 numai cu poli

; x(n) este stocat în acumulatorul a

;

move x:(r0)+,x0 y:(r4)+,y0 ; x0 = y(n-1) y0 = -a1

mac x0,y0,a x:(r0),x1 y:(r4)-,y0

; x1 = y(n-2), y0 = -a2

; r4 este decrementat la adresa de bază a coeficienţilor

macr x1,y0,a ; a = y(n)

move x0,x:(r0)- ; y(n-1) se scrie în locul lui y(n-2)

move a,x:(r0) ; si y(n) în locul lui y(n-1)

endm

În exemplul anterior am considerat coeficienţii numitorului de modul

subunitar. Fie un filtru de ordin 2 stabil. Polii funcţiei de transfer sunt în

cercul de rază unitate, deci de modul subunitar.

Avem:

1 2 1 2

1 2 1 2

1 1( )

1 (1 )(1 )H z

a z a z p z p z− − − −= =+ + − −

(5.17)

Folosind relaţiile între coeficienţii şi rădăcinile polinomului de la

numitor obţinem:

Page 81: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 5 – Realizarea filtrelor digitale 157

1 1 2 1 2

2 1 2

2

1

a p p p p

a p p

= + ≤ + ≤

= ≤ (5.18)

Aceasta înseamnă că, în cazul unui filtru de ordin 2 coeficienţii

numitorului sunt de modul mai mic ca 2. Pentru a-i putea reprezenta în virgulă

fixă, în complement faţă de 2, este necesară scalarea coeficienţilor cu 2.

Structura echivalentă este prezentată mai jos:

( )x n 1/ 2 ( )y n

1z−

1z−

1 / 2a−

2 / 2a−

2

Figura 5.5. Filtru IIR de ordin 2 numai cu poli cu coeficienţii scalaţi

Ecuaţia cu diferenţe finite devine:

1 2( )( ) 2 ( 1) ( 2)

2 2 2

x n a ay n y n y n⎡ ⎤= − − − −⎢ ⎥⎣ ⎦

(5.19)

Vom folosi modul de scalare automată implementat în unitatea ALU a

DSP56300. Pentru acesta trebuie setat modul de scalare corespunzător cu biţii

S1 şi S0 din registrul de mod (MR). Dacă S1=1 şi S0=0, atunci, când se

citeşte rezultatul din acumulatorul a sau b, valoarea citită este deplasată cu un

bit la stânga astfel ca ieşirea ( )y n să fie înmulţită cu 2.

Registrul de mod (MR)

7 6 5 4 3 2 1 0

LF DM SC 0 S1 S0 I1 I0

În exemplul următor este implementat un filtru IIR de ordin 2, numai

cu poli, cu coeficienţii scalaţi cu 2. Programul este similar celui anterior,

Aplicaţii ale procesoarelor de semnal în comunicaţii 158

numai că la începutul macroului este setat modul de scalare iar la sfârşit se

dezactivează acest mod.

Organizarea memoriei:

Memoria X

r0

Memoria Y

2 / 2a−

1 / 2a−

( 2)y n −

( 1)y n − r4

Figura 5.6. Organizarea memoriei pentru un filtru de ordin 2 numai cu poli cu

coeficienţii scalaţi

iir2 macro

iir2 ident 1,0

;

; IIR2 - Implementare filtru IIR de ordin 2 numai cu poli

; x(n) se considera scalat cu 2 si este stocat in a

;

ori #$08,mr ;setare mod scalare

move x:(r0)+,x0 y:(r4)+,y0

mac x0,y0,a x:(r0),x1 y:(r4)-,y0

macr x1,y0,a x0,x:(r0)-

nop

move a,x:(r0)

andi #$f7,mr ;dezactivare mod scalare

endm

Pentru cazul general al unui filtru de ordin N implementat în forma

directă 1, secţiunea nerecursivă trebuie calculată separat cu macroul de fir, iar

pentru secţiunea recursivă macroul va avea un ciclu în care se realizează

1N − operaţii de multiplicare şi acumulare.

Page 82: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 5 – Realizarea filtrelor digitale 159

( )x n ( )y n

1z−

1z−

1z−

1a−

2a−

Na−

( 1)y n −

( )y n N−

Figura 5.7. Filtru IIR de ordin N numai cu poli

Acest filtru poate fi implementat eficient prin utilizarea adresării

modulo şi a două adresări în paralel cu doi pointeri r0 şi r4. Harta memoriei

este prezentată mai jos:

Memoria X

r0

Memoria Y

Na−

2a−

1a−

( 1)y n −

( )y n

( 1)y n N− +

r4

m0 = N – 1

m4 = N – 1

Figura 5.8. Organizarea memoriei pentru un filtru de ordin N numai cu poli

Aplicaţii ale procesoarelor de semnal în comunicaţii 160

Macroul primeşte ca argument numărul coeficienţilor. Pentru adresarea

modulo, registrele m0 şi m4 trebuie iniţializate cu 1N − . Registrul r0 nu

trebuie modificat în afara macroului deoarece păstrează adresa stării ( 1)y n − .

iir3 macro ncoef

iir3 ident 1,0

;

; IIR3 - Implementare filtru IIR numai cu poli

;

move x:(r0)+,x0 y:(r4)+,y0 ;y(n-1) si -a1

rep #ncoef-1 ;repetă de N–1 ori

mac x0,y0,a x:(r0)+,x0 y:(r4)+,y0

macr x0,y0,a (r0)- ;r0 este adus la adresa

nop ;celei mai vechi ieşiri

move a,x:(r0) ;unde se scrie ieşirea

y(n)

endm

5.2.2 Forma directă 2

Relaţia intrare-ieşire se scrie:

1

( )( )

1N

kk

k

X zW z

a z−

=

=+∑

(5.20)

0

( ) ( )M

kk

k

Y z W z b z−

=

= ∑ (5.21)

De unde rezultă ecuaţiile cu diferenţe finite:

0

( ) ( ) ( )N

kk

w n x n a w n k=

= − −∑ (5.22)

0

( ) ( )M

kk

y n b w n k=

= −∑ (5.23)

Page 83: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 5 – Realizarea filtrelor digitale 161

Aceste relaţii conduc la structura din figura următoare (cunoscută şi cu

denumirea de forma canonică):

( )x n 0b ( )y n

1b

2b

Mb

( )w n

1z−

1z−

1z−

1a−

2a−

Na−

Figura 5.9. Filtru IIR forma directă 2

Se observă pentru această structură o reducere a numărului celulelor de

întârziere faţă de forma directă 1, deci o reducere a memoriei necesare.

Să considerăm pentru început un filtru de ordin 2 cu 0 1b = . Funcţia de

transfer poate fi scrisă:

1 2

1 21 2

1 2

1( )

1

b z b zH z

a z a z

− −

− −

+ +=

+ + (5.24)

Filtrul implementat în forma directă 2 are structura de mai jos şi se mai

numeşte şi filtru biquad:

( )x n ( )y n

1b

2b

( )w n

1z−

1z−

1a−

2a−

Figura 5.10. Filtru IIR biquad

Aplicaţii ale procesoarelor de semnal în comunicaţii 162

Pentru filtrul de mai sus, harta memoriei pentru stările filtrului şi

coeficienţi este prezentată în figura următoare:

Memoria X

r0

Memoria Y

2b

1b

2a−

1a−

( 2)w n −

( 1)w n − r4

m4 = 3m0 = –1

Figura 5.11. Organizarea memoriei pentru filtrul biquad

Registrul de adresă r0 este iniţializat să indice prima stare a filtrului, iar

r4 coeficienţii filtrului. Registrul modulo m0 este setat cu –1 pentru adresare

liniară, iar m4 cu 3 pentru adresare modulo 4.

iir4 macro

iir4 ident 1,0

;

; IIR4 - Implementare filtru biquad

;

move x:(r0)+,x0 y:(r4)+,y0

;x0=w(n-1), y0=-a1

mac x0,y0,a x:(r0),x1 y:(r4)+,y0

;a=x(n)-a1*w(n-1), x1=w(n-2), y0=-a2

macr x1,y0,a x0,x:(r0)- y:(r4)+,y0

;a=a-a2*w(n-2), w(n-1) e scris

;în locul lui w(n-2), y0=b1

nop

mac x0,y0,a a,x:(r0) y:(r4)+,y0

;a=w(n)+b1*w(n-1), w(n) e scris

;în locul lui w(n-1), y0=b2

macr x1,y0,a ;y(n)=a+b2*w(n-2)

endm

Page 84: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 5 – Realizarea filtrelor digitale 163

Trebuie menţionat că în cazul unei funcţii de transfer cu 0 1b ≠ se poate

face o normare a coeficienţilor numărătorului cu 0b , normare care poate fi

compensată la ieşire prin înmulţirea cu o constantă corespunzătoare.

Ca şi în cazul formei directe 1, pentru coeficienţi mai mici ca 2 în

modul poate fi implementat un program cu scalare automată cu 2 pornind de

la ecuaţia cu diferenţe finite:

1 2 1 2( )( ) 2 ( 1) ( 2) ( 1) ( 2)

2 2 2 2 2

x n b b a ay n x n x n y n y n⎡ ⎤= + − + − − − − −⎢ ⎥⎣ ⎦

(5.25)

şi având structura:

( )x n ( )y n

1 / 2b

2 / 2b

( )w n

1z−

1z−

1 / 2a−

2 / 2a−

1/ 2 2

Figura 5.12. Filtru biquad cu coeficienţii scalaţi

Harta memoriei pentru stările filtrului şi coeficienţi este prezentată în

figura următoare:

Memoria X

r0

Memoria Y

2 / 2b

1 / 2b

2 / 2a−

1 / 2a−

2 ( 2)w n⋅ −

2 ( 1)w n⋅ − r4

m4 = 3m0 = –1

Figura 5.13. Organizarea memoriei pentru filtrul biquad cu coeficienţii scalaţi

Aplicaţii ale procesoarelor de semnal în comunicaţii 164

Coeficienţii sunt stocaţi împărţiţi la 2. Când stările filtrului ( )w n k−

sunt salvate din acumulator în memorie, ele sunt înmulţite cu 2 (prin scalare

în sus). Astfel, la înmulţirea stărilor cu coeficienţii scalarea se compensează.

iir5 macro

iir5 ident 1,0

;

; IIR5 - Implementare filtru biquad cu scalare

;

ori #$08,mr ;setare mod scalare

move x:(r0)+,x0 y:(r4)+,y0

mac x0,y0,a x:(r0),x1 y:(r4)+,y0

macr x1,y0,a x0,x:(r0)- y:(r4)+,y0

nop

mac x0,y0,a a,x:(r0) y:(r4)+,y0

macr x1,y0,a

andi #$f7,mr

endm

5.2.3 Realizarea în cascadă

Se realizează factorizarea funcţiei de transfer în funcţii de ordin 2 cu

coeficienţi reali implementate cu structuri biquad:

1 2

,1 ,21 2

1 1,1 ,2

1( ) ( )

1

p pk k

kk kk k

b z b zH z H z

a z a z

− −

− −= =

+ += =

+ +∏ ∏ (5.26)

Coeficienţii secţiunilor de ordin 2 au garantat modulul mai mic decât 2

dacă filtrul este stabil şi de fază minimă. Aceasta permite implementarea

eficientă pe DSP56300 folosind scalarea automată cu un bit.

Forma cascadă pentru două structuri biquad este prezentată mai jos:

Page 85: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 5 – Realizarea filtrelor digitale 165

( )x n ( )y n

1,1b

1,2b

1( )w n

1z−

1z−

1,1a−

1,2a−

2,1b

2,2b

2 ( )w n

1z−

1z−

2,1a−

2,2a−

Figura 5.14. Forma cascadă cu structuri biquad

În macroul de filtru, eşantionul de intrare este stocat în acumulatorul a

iar ieşirea se află tot în a. Aceasta permite calculul următoarei secţiuni

pornind tot de la valoarea din a, programul de filtru biquad fiind repetat într-

un ciclu DO pentru numărul total de secţiuni.

Harta memoriei pentru forma cascadă cu două secţiuni biquad este

prezentată mai jos. Trebuie observat cum sunt stocate stările filtrului. Primul

element este ( 2)w n − şi al doilea este ( 1)w n − . De asemenea coeficienţii sunt

stocaţi similar; primul element este 2a− apoi 1a− urmaţi de 2b şi 1b . În acest

mod registrul adresă r0 poate fi incrementat să treacă direct la următoarea

secţiune.

Memoria X

r0

Memoria Y

2,1 / 2b

2,2 / 2b

2,1 / 2a−

2,2 / 2a−

1,1 / 2b

1,2 / 2b

1,1 / 2a−

1,2 / 2a−

22 ( 1)w n⋅ −

22 ( 2)w n⋅ −

12 ( 1)w n⋅ −

12 ( 2)w n⋅ − r4

m4 = –1m0 = –1a 2-a secţiune

prima secţiune

prima secţiune

a 2-a secţiune

Figura 5.15. Organizarea memoriei pentru forma cascadă

Aplicaţii ale procesoarelor de semnal în comunicaţii 166

Macroul pentru implementarea formei cascadă cu secţiuni biquad este

prezentat în continuare. Macroul primeşte ca argument numărul de secţiuni.

iir6 macro nsec

iir6 ident 1,0

;

; Implementare forma cascadă cu secţiuni biquad

;

ori #$08,mr ;mod scalare

move x:(r0)+,x0 y:(r4)+,y0 ;r0->w(n-2) r0+

do #nsec,_ends ;repetă fiecare secţiune

mac x0,y0,a x:(r0)-,x1 y:(r4)+,y0 ;r0->w(n-1) r0+

macr x1,y0,a x1,x:(r0)+ y:(r4)+,y0 ;r0->w(n-2) r0+

nop

mac x0,y0,a a,x:(r0)+ y:(r4)+,y0 ;r0->w(n-1) r0+

mac x1,y0,a x:(r0)+,x0 y:(r4)+,y0 ;r0->w(n-2) din

;următoarea secţiune

_ends

rnd a ;rotunjire rezultat

andi #$f7,mr ;dezactivare mod scalare

endm

5.2.4 Realizarea în forma latice

Forma latice unui filtru IIR de ordinul 3:

eb

ef

z-1z-1z-1

k1k2

-k1-k2-k3

k3

y(n)

Figura 5.16. Forma latice pentru filtru IIR numai cu poli

Page 86: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 5 – Realizarea filtrelor digitale 167

Pentru filtrul de mai jos (ordin 3), pointerii r0 si r4 sunt iniţializaţi

astfel:

1s

2s

3s

Memoria X

r0

Memoria Y

3k

2k

1k r4m0 = 2

m4 = 2

Figura 5.17. Organizarea memoriei pentru forma latice

Registrele modulo sunt fixate la numărul coeficienţilor minus 1 (în

acest exemplu sunt 3 coeficienţi). Eşantioanele de intrare se pun în registrul

a şi apoi este apelat macro-ul filtrului. Rezultatul filtrării se depune în a.

Se presupune că registrele r0, r4, m0 şi m4 au fost iniţializate

corespunzător. Eşantioanele de intrare sunt în registrul a, iar filtrul se

apelează în programul principal cu:

latiir order ;apel latice iir

unde 'latiir' este numele macro-ului şi 'order' este numărul de coeficienţi

de reflexie.

latiir macro order

latiir ident 1,0

;

; Latice IIR

;

move x:(r0)-,x0 y:(r4)+,y0 ;primul k, prima stare

macr -x0,y0,a x:(r0)-,x0 y:(r4)-,y0

;prima secţiune

do #order-1,_endlat ;restul secţiunilor

macr -x0,y0,a ;a=a-k*s

Aplicaţii ale procesoarelor de semnal în comunicaţii 168

nop

tfr y0,b a,x1 b,y:(r4)+n4

;transferă a pentru înmulţire

;transferă starea în b

;salvează starea anterioară

macr x1,x0,b x:(r0)-,x0 y:(r4)-,y0

;următoarea stare, următorul k

_endlat

nop

move b,y:(r4)+ ; salvează a doua ultima stare

move x:(r0)+,x0 a,y:(r4)+ ;actualizare r0

;salvează ultima stare

endm

Explicarea programului:

1. Eşantionul de intrare este în registrul a şi pointerii r0 şi r4 sunt

iniţializaţi corect. Ieşirea din stânga-jos a secţiunii nu este necesară la

această implementare şi nici nu se va calcula.

2. Primul move încarcă primul k (k3) în registrul de produs x0 şi

decrementează pointerul r0 pentru următorul coeficient. Simultan, se

încarcă starea filtrului şi pointerul r4 este incrementat pentru a indica

spre următoarea stare.

3. Prima secţiune a filtrului este generată de instrucţiunea mac.

Coeficientul k aflat în x0 este înmulţit cu starea y0 şi rezultatul se scade

din registrul a care conţine valoarea intrării. Următorul coeficient k (k2)

este apoi încărcat în x0 şi pointerul r0 e din nou decrementat.

Următoarea stare se încarcă în y0 şi pointerul r4 se decrementează

pentru a indica spre starea anterioară. Acum, r4 indică înapoi spre

starea folosită în instrucţiunea precedentă. Deoarece această valoare nu

mai e necesară, în această locaţie se va memora noua stare calculată.

Page 87: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 5 – Realizarea filtrelor digitale 169

4. Bucla do va calcula celelalte secţiuni ale filtrului. Prima secţiune a fost

calculată în afara buclei, deci au rămas numai 1N − secţiuni.

5. Primul macr va calcula valoarea ieşirii de sus scăzând din valoarea

care se află în a produsul dintre k (x0) şi starea (y0).

6. Valoarea din a este apoi mutată în registrul x1 astfel încât să poată fi

multiplicată ulterior. Registrul b este încărcat cu variabila stării curente

care a fost stocată în y0. Starea iniţial calculată b se salvează în

variabila stării precedente, iar pointerul către variabilele de stare (r4) se

incrementează cu 2 pentru a indica spre noua variabilă de stare.

7. Noua stare se calculează prin adunarea produsului dintre prima valoare

din a şi coeficientul k (x0) la valoarea stării curente (b). Se încarcă un

nou coeficient k, iar r0 e decrementat pentru a indica spre următorul

coeficient k. Se aduce noua stare, iar r4 se decrementează pentru a

indica spre starea precedentă. În acest punct se observă că în următorul

pas al ciclului do starea care tocmai a fost calculata (b) este salvată în

memorie.

8. La sfârşitul buclei, valoarea ieşirii se rotunjeşte, a doua stare se

salvează şi este incrementat r4.

9. Pointerul către coeficienţii k se incrementează. Deoarece r0 este

decrementat de două ori înaintea buclei, iar bucla îl decrementează de

1N − ori rezultă că numărul de decrementări este 1N + . Aceasta

înseamnă că se depăşeşte memoria ocupată de coeficienţi şi pointerul

trebuie decrementat pentru a-l indica pe k3. Valoarea de ieşire din a este

de asemenea salvată ca ultima stare şi pointerul r4 este incrementat la

următoarea locaţie. Este interesant de observat că în acest punct că

valoarea din acumulatorul a a fost salvată peste valoarea necunoscută

din bufferul de stări scrisă în primul etaj. Registrul r4 indică apoi către

următoarea stare care este folosită pentru următorul eşantion de intrare.

Page 88: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Aplicaţii ale procesoarelor de semnal în comunicaţii170

CAPITOLUL 6

TRANSFORMATA FOURIER RAPIDĂ ŞI APLICAŢII

6.1 APLICAŢII ALE TRANSFORMATEI FOURIER

Din cauza naturii de bază a conceptului de frecvenţă, aplicaţiile practice

ale transformatei Fourier abundă. Pe măsură ce metode eficiente din punct de

vedere al costului vor fi disponibile să calculeze transformata Fourier,

numărul aplicaţiilor practice bazate pe frecvenţă vor fi mai numeroase. În

aceste aplicaţii bazate pe frecvenţă un procesor de semnal digital poate

calcula în mod eficient transformata Fourier şi poate efectua prelucrări

specifice domeniului frecvenţei, precum eliminarea unor anumite componente

ale frecvenţei.

Există trei tipuri generale ale aplicaţiilor transformatei Fourier:

1. Aplicaţii bazate pe calcule numerice – majoritatea aplicaţiilor care

analizează spectrul necesită evaluarea directă a transformatei Fourier.

Deoarece transformata Fourier e o expresie matematică aceste aplicaţii

sunt bazate pe calcule numerice. Exemplele se întind de la analiza

spectrului instrumentelor de laborator şi al echipamentului audio

profesional până la estimarea vitezei la radar. De observat ca în aplicaţiile

bazate pe numere, acurateţea calculelor e de importanţa vitală pentru

Capitolul 6 – Transformata Fourier rapidă şi aplicaţii 171

performanţele întregului sistem. De exemplu, aplicaţiile audio de calitate

necesită o precizie de cel puţin 16 biţi pentru a elimina distorsiunile audio.

2. Aplicaţii de recunoaştere – multe probleme implică recunoaşterea şi

detectarea semnalului cu un conţinut de frecvenţă specific (un model

spectral predefinit). De exemplu, vorbitul constă în secvenţe de sunete cu

caracteristici specifice ale frecvenţei. În acest tip de aplicaţie conversia în

domeniul frecvenţă e adesea doar un pas în tot sistemul. E important ca

procesul de conversie să fie rapid pentru a avea timp suficient pentru a

aplica restul tehnicilor de analiză şi recunoaştere. În plus faţă de viteza

calculelor transformatei Fourier procesorul în discuţie trebuie să fie rapid

la operaţii de prelucrare generale pentru a realiza o varietate de calcule în

domeniul frecvenţă.

3. Aplicaţii bazate pe convoluţie – a treia clasă de aplicaţii a transformatei

Fourier foloseşte transformarea ca pe un instrument matematic simplu

pentru a realiza filtrarea generală într-o manieră foarte eficientă. Acest

concept e bazat pe proprietatea că transformata Fourier a convoluţiei a

două semnale în timp e egală cu produsul transformatelor celor două

semnale. Volumul calculelor implicate în produsul de convoluţie devine

mare dacă lungimea filtrului este foarte mare. Astfel, dacă transformata

Fourier a semnalului de la intrarea filtrului se poate calcula eficient,

filtrarea se realizează prin înmulţirea acesteia cu funcţia de transfer în

frecvenţă a filtrului (care poate fi precalculată). Numărul de calcule pentru

transformata Fourier directă şi inversă şi pentru filtrare în domeniul

frecvenţei poate fi mai mic decât pentru convoluţie mai ales pentru filtre

cu funcţii de transfer simple (trece jos, trece bandă, etc.) unde înmulţirea în

domeniul frecvenţă poate fi înlocuită cu o simplă operaţie de mascare care

elimină benzile de oprire (spectrul ieşirii este 0) şi lasă spectrul semnalului

de intrare în benzile de trecere nemodificat.

Page 89: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Aplicaţii ale procesoarelor de semnal în comunicaţii172

6.2 ALGORITMI RAPIZI PENTRU CALCULUL

TRANSFORMATEI FOURIER DISCRETE

Fie secvenţa complexă ( )x n de suport finit, 0,1,..., 1n N= − . Se

defineşte transformata Fourier discretă (TFD) a acestei secvenţe prin:

1

0

( ) TFD{ ( )}( ) ( )N

nkN

n

X k x n k x n W−

=

= =∑ , 0,1,..., 1k N= − (6.1)

unde 2

jN

NW eπ

−= se numesc coeficienţi de rotaţie.

Cunoscând ( )X k se poate determina secvenţa ( )x n cu ajutorul

transformatei Fourier discretă inversă (TFDI) definită de relaţia:

1

0

1( ) TFDI{ ( )}( ) ( )

Nnk

Nk

x n X k n X k WN

−−

=

= = ∑ , 0,1,..., 1n N= − (6.2)

Pentru efectuarea transformatei Fourier discrete, conform formulei

(6.2), sunt necesare 2N înmulţiri complexe şi ( 1)N N − adunări complexe. O

înmulţire complexă necesită patru înmulţiri şi două adunări reale. Rezultă un

număr de 24N înmulţiri reale şi 24 2N N− adunări reale. Complexitatea

aritmetică este de forma 2( )O N deci creşte cu 2N . Astfel, pentru 1024N =

sunt necesare 4.194.304 înmulţiri reale care, pe un procesor de semnal cu un

ALU, necesită un număr aproape dublu de cicluri maşină.

Există algoritmi care permit efectuarea TFD cu un număr mai mic de

operaţii. Să observăm întâi câteva proprietăţi ale coeficienţilor de rotaţie NW :

1kNNW = , 2 1

Nj

NW e π−= = − (6.3)

de aici rezultând o formulă mai generală:

2 ( 1)N

N NW Wα β β α+

= − (6.4)

Capitolul 6 – Transformata Fourier rapidă şi aplicaţii 173

De asemenea printr-o simplă schimbare de notaţie obţinem:

2 2

/j nk j n

nk nN N kN N

k

W e e Wπ π

− −= = = (6.5)

Dacă alegem 1 2N N N= ⋅ , se poate descompune transformarea de ordin

N în transformări de ordin 1N şi 2N care la rândul lor se calculează pornind

de la o descompunere similară.

Un caz important este acela în care MN R= , R numindu-se bază. De

exemplu, dacă 2R = avem algoritmi în baza 2, cu N putere întreagă a lui 2,

etc.

Pornind de la o reprezentare a indicilor sub forma:

1 1 2 2

3 1 4 2

n K n K n

k K k K k

≡ +≡ +

(6.6)

în cazul algoritmilor în baza R sunt posibile următoarele moduri de

reprezentare a indicilor:

1 2 1 2

1 2 1 2

, 0,1,..., 1, 0,1,..., 1

, 0,1,..., 1, 0,1,..., 1

Nn Rn n n n R

RN N

k k k k k RR R

≡ + = − = −

≡ + = − = −(6.7)

ceea ce conduce la algoritmi cu decimare în timp şi

1 2 1 2

1 2 1 2

, 0,1,..., 1, 0,1,..., 1

, 0,1,..., 1, 0,1,..., 1

N Nn n n n n R

R RN

k R k k k k RR

≡ + = − = −

≡ + = − = −(6.8)

ceea ce conduce la algoritmi cu decimare în frecvenţă.

Page 90: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Aplicaţii ale procesoarelor de semnal în comunicaţii174

6.2.1 Algoritmi FFT cu decimare în timp în baza 2

Aceşti algoritmi au fost introduşi de Cooley şi Tukey pentru 2MN = ,

M ∈N .

În acest caz indicii se vor scrie:

1 2 1 2

1 2 1 2

2 , 0,1,..., 1, 0,12

, 0,1,..., 1, 0,12 2

Nn n n n n

N Nk k k k k

≡ + = − =

≡ + = − =(6.9)

şi rezultă:

1 2 1 2

1 2

112 (2 ) ( )

21 2 1 2

0 0

( ) ( ) (2 )2

NN

n n k k

Nn n

NX k X k k x n n W

−+ +

= =

= + = +∑∑ (6.10)

sau:

1 21 1 1 1

1 1

1 12 2

21 2 1 1

0 02 2

( ) (2 ) (2 1)2

N NN

k kn k n kN N N

n n

NX k k x n W W x n W

− −+

= =

+ = + +∑ ∑ (6.11)

Dar:

( )1 1 2 12 1N

k k k kN NW W

+= − (6.12)

aşa încât, scriind separat pentru 2 0k = şi 2 1k = :

{ } { }

1 1 1 1 1

1 1

1

1 12 2

1 1 10 02 2

1 1

2 2

( ) (2 ) (2 1)

TFD (2 ) TFD (2 1)

N N

n k k n kN N N

n n

kN N N

X k x n W W x n W

x n W x n

− −

= =

= + + =

= + +

∑ ∑(6.13)

{ } { }

1 1 1 1 1

1 1

1

1 12 2

1 1 10 02 2

1 1

2 2

( ) (2 ) (2 1)2

TFD (2 ) TFD (2 1)

N N

n k k n kN N N

n n

kN N N

NX k x n W W x n W

x n W x n

− −

= =

+ = − + =

= − +

∑ ∑(6.14)

Capitolul 6 – Transformata Fourier rapidă şi aplicaţii 175

Fiecare din sumele ce apar în cele două relaţii de mai sus, reprezintă

câte o TFD în / 2N puncte, primele pentru secvenţa formată cu eşantioanele

pare, a doua, cu eşantioanele impare. Rezultă schema din figura 0.1:

0

TFDN/2 k1

N/2-1

X(k1)x(2n1)

X(k1+N/2)-1x(2n1+1)

0

TFDN/2 k1

N/2-1

1kNW

Figura 0.1. Descompunerea TFD de ordin N în transformate de ordin / 2N

Trecerea de la transformatele de ordin / 2N la transformata de ordin N

se face prin intermediul unor structuri de tip fluture (figura 0.2). Această

structură este constituită dintr-o înmulţire cu factorul kNW , şi o transformată

Fourier discretă de ordinul doi.

A

-1kNW

B

A'

B'

Figura 0.2. Fluturele pentru FFT în baza 2 DIT

Procedeul descris mai înainte se va aplica recursiv pentru

transformatele de ordin / 2N până se ajunge la transformate de ordinul 2.

Rezultă că pentru o transformată de ordin 2MN = sunt necesare M

etaje, fiecare conţinând / 2N fluturi, deci în total sunt necesari 22logN N

fluturi.

Page 91: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Aplicaţii ale procesoarelor de semnal în comunicaţii176

Graful complet al unei transformate în baza 2 cu decimare în timp în

opt puncte este ilustrat în figura 0.3.

X(0)

X(1)

X(2)

X(3)

X(4)

X(5)

X(6)

X(7)

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

x(0)

x(4)

x(2)

x(6)

x(1)

x(5)

x(3)

x(7)

W0

W1

W2

W3

W0

W2

W0

W2

W0

W0

W0

W0

Figura 0.3. Graful unei FFT în baza 2 cu decimare în timp în opt puncte

Din graful transformatei se observă că ieşirile sunt ordonate secvenţial

iar intrările nu. Aceasta se datorează divizării repetate a intrării în sub-

secvenţe de eşantioane de ordin par şi impar. Dacă indicii eşantioanelor de

intrare sunt reprezentaţi în formă binară se observă că aceştia sunt în ordinea

inversă a biţilor (bit-reversed).

Putem reordona intrările din graful anterior, x(4) şi x(6) în locul lui x(1)

şi lui x(3), rezultând un graf pentru transformata în 8 puncte cu intrările în

ordinea firească ca în figura 0.4:

Se observă însă că după această rearanjare, coeficienţii de rotaţie

precum şi ieşirile grafului vor fi în ordine bit-reversed.

Capitolul 6 – Transformata Fourier rapidă şi aplicaţii 177

X(0)

X(4)

X(2)

X(6)

X(1)

X(5)

X(3)

X(7)

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

x(0)

x(1)

x(2)

x(3)

x(4)

x(5)

x(6)

x(7)

W0

W0

W0

W0

W0

W0

W2

W2

W0

W2

W1

W3

Figura 0.4. Rearanjarea grafului pentru calculul FFT cu decimare în timp

6.2.2 Algoritmi FFT cu decimare în frecvenţă în baza 2

În acest caz se reprezintă indicii sub forma:

1 2 1 2

1 2 1 2

, 0,1,..., 1, 0,12 2

2 , 0,1,..., 1, 0,12

N Nn n n n n

Nk k k k k

≡ + = − =

≡ + = − =(6.15)

deci:

1 2 1 2

1 2

112 ( ) (2 )

21 2 1 2

0 0

(2 ) ( )2

NN

n n k k

Nn n

NX k k x n n W

−+ +

= =

+ = +∑∑ (6.16)

din care rezultă pentru 1 0k = şi 2 1k = :

1 1

1

12

1 1 10 2

1 1

2

(2 ) [ ]2

TFD [ ] [ ]2

N

n kN

n

N

NX k x n x n W

Nx n x n

=

= + + =

= + +

∑(6.17)

Page 92: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Aplicaţii ale procesoarelor de semnal în comunicaţii178

1 1 1

1

1

12

1 1 10 2

1 1

2

[2 1] [ ]2

TFD [ ] [ ]2

N

n n kN N

n

nN N

NX k x n x n W W

Nx n x n W

=

+ = − + =

= − +

∑(6.18)

Se constată iarăşi descompunerea transformatei de ordin N în două

transformate de ordin / 2N (figura 0.5).

0

TFDn1 N/2

N/2-1

X(2k1)x(n1)

X(2k1+1)-1

x(n1+N/2)

0

TFDn1 N/2

N/2-11k

NW

1

Figura 0.5. Descompunerea TFD de ordin N în transformate de ordin

/ 2N

În continuare fiecare din cele două grupuri de câte / 2N semnale ce

constituie intrările transformatelor în / 2N puncte se desparte în două, după

acelaşi procedeu (primele / 4N şi următoarele / 4N ).

De exemplu pentru 8N = , se obţine graful din figura 0.6.

Capitolul 6 – Transformata Fourier rapidă şi aplicaţii 179

X(0)

X(4)

X(2)

X(6)

X(1)

X(5)

X(3)

X(7)

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

x(0)

x(1)

x(2)

x(3)

x(4)

x(5)

x(6)

x(7)

W0

W1

W2

W3

W0

W2

W0

W2

W0

W0

W0

W0

Figura 0.6. Graful unei FFT în baza 2 cu decimare în frecvenţă în opt puncte

Ca şi în cazul precedent, rezultă 2log N etaje, în fiecare efectuându-se

/ 2N operaţii de tip “fluture”. Structura fluturelui este însă cea din figura 0.7.

A

-1B

'A

'BnNW

Figura 0.7. Fluturele pentru FFT în baza 2 DIF

Evident complexitatea, exprimată prin numerele de înmulţiri reale şi de

adunări reale este aceeaşi ca în algoritmul precedent.

În acest caz eşantioanele semnalului se iau în ordinea naturală, iar ale

ieşirii, rezultă în ordinea inversată a biţilor.

Page 93: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Aplicaţii ale procesoarelor de semnal în comunicaţii180

6.3 IMPLEMENTAREA FFT PE PROCESOARELE DIN

FAMILIA MOTOROLA DSP56300

6.3.1 Resursele hardware necesare calculului FFT

Principalul element de calcul al rutinei FFT este fluturele din figura 0.2

pentru decimare în timp (DIT) şi din figura 0.7 pentru decimare în frecvenţă

(DIF). Acesta include înmulţiri şi adunări/scăderi complexe (atât intrările

fluturelui cât şi factorii de rotaţie sunt numere complexe). De aceea este

necesară o arhitectură capabilă să suporte reprezentarea şi operaţiile

aritmetice cu numere complexe.

Pentru înmulţire şi adunare arhitectura DSP56300 oferă instrucţiunea

MAC (multiplicare şi acumulare) precum şi două registre acumulator. De

asemenea, intrările şi ieşirile fluturelui sunt mutate între unitatea aritmetică a

procesorului şi memorie ceea ce necesită operaţii de transfer eficiente.

Pentru reprezentarea numerelor complexe, DSP56300 are două zone de

memorie pentru date: X şi Y. Astfel, partea reală şi partea imaginară a

numerelor complexe pot fi stocate în memoria X, respectiv Y. De asemenea,

pot fi efectuate simultan două citiri şi scrieri în memorie într-un singur ciclu

maşină.

Algoritmul de calcul FFT implică repetarea structurii de tip fluture de

un număr de ori depinzând de numărul de puncte N. Pentru un program de

calcul al FFT, este importantă o implementare eficientă a repetării fluturilor.

O soluţie hardware este dată de instrucţiunea DO loop, fără a fi

necesare alte operaţii de iniţializare (zero overhead). Fiecare iteraţie este

astfel realizată fără întârzieri suplimentare în execuţie.

Capitolul 6 – Transformata Fourier rapidă şi aplicaţii 181

Aşa cum s-a observat în prezentarea algoritmului FFT, intrările, ieşirile

sau factorii de rotaţie pot surveni în ordinea inversată a reprezentării binare a

indecşilor. Aceasta implică o reordonare a operanzilor conform algoritmului

bit-reversed. Procesoarele de semnal din familia DSP56300 au facilitatea de a

adresa în ordinea inversată a biţilor adresei.

Alt aspect privitor la resursele hardware îl reprezintă numărul de

registre interne disponibile pentru stocarea rezultatelor intermediare, avându-

se în vedere că stocarea acestora în memorie necesită mai mult timp de

procesare.

Datele de la intrarea FFT sunt în general eşantioane primite de la un

convertor A/D. Achiziţia datelor trebuie efectuată în paralel cu calculul FFT

pentru o aplicaţie de timp-real. De aceea DSP trebuie să ofere o interfaţă

simplă cu diversele convertoare A/D precum şi tehnici de întreruperi sau

DMA pentru stocarea datelor achiziţionate fără a interfera cu calculul FFT.

În concluzie, obţinerea unei implementări eficiente a FFT pe DSP

depinde de următorii factori hardware:

1. Instrucţiune de multiplicare/acumulare;

2. Transferul datelor dual în memorie într-un singur ciclu maşină;

3. Instrucţiune de ciclare fără overhead;

4. Mod de adresare bit-reversed;

5. Număr suficient de registre;

6. Interfaţă rapidă I/O pentru achiziţia datelor în timp real.

Page 94: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Aplicaţii ale procesoarelor de semnal în comunicaţii182

6.3.2 Caracteristicile fluturilor pentru FFT în baza 2 DIT şi DIF

Să considerăm reprezentarea datelor de la intrarea şi ieşirea fluturilor

precum şi a factorilor de rotaţie sub forma complexă: parte reală şi parte

imaginară.

2 2 2cos sin

r i

j kk N

N

W W

W e k j kN N

π π π− = = + − (6.19)

Ecuaţiile de calcul ale ieşirilor complexe ale fluturilor pentru DIT şi

DIF sunt date în tabelul următor:

A

-1kNW

B

kNWBAA ⋅+='

kNWBAB ⋅−='

Fluturele pentru FFT în baza 2 DIT

A

-1B

BAA +='

nNWBAB ⋅−= )('n

NW

Fluturele pentru FFT în baza 2 DIF

( )( )( )( )

'

'

'

'

r r r r i i

i i i r r i

r r r r i i

i i i r r i

A A B W BW

A A BW B W

B A B W BW

B A BW B W

= + +

= + −

= − +

= − −

Ecuaţiile ieşirilor fluturelui DIT

( ) ( )( ) ( )

'

'

'

'

r r r

i i i

r r r r i i i

i r r i i i r

A A B

A A B

B A B W A B W

B A B W A B W

= +

= +

= − − −

= − + −

Ecuaţiile ieşirilor fluturelui DIF

Teoretic, aşa cum rezultă din ecuaţiile de calcul ale ieşirilor, fluturii

pentru DIT şi DIF în baza 2 au aceeaşi complexitate aritmetică: trei adunări,

trei scăderi şi patru înmulţiri. Pe procesoarele de semnal care nu efectuează în

paralel înmulţirea şi adunarea sunt necesare zece instrucţiuni pentru un

fluture.

Capitolul 6 – Transformata Fourier rapidă şi aplicaţii 183

Pentru familia DSP56300 instrucţiunea MAC efectuează o înmulţire şi

o adunare în paralel. Pentru fluturele DIT patru dintre adunări pot fi efectuate

în paralel cu înmulţirile rămânând de efectuat două adunări. Pentru fluturele

DIF însă, numai două dintre adunări pot fi efectuate în paralel cu înmulţirea,

rămânând de efectuat patru adunări. Din acest punct de vedere arhitectura

DSP Motorola implementează mai eficient fluturele pentru DIT.

A

-1kNW

B

kNWBAA ⋅+='

kNWBAB ⋅−='

Fluturele pentru FFT în baza 2 DIT

A

-1B

BAA +='

nNWBAB ⋅−= )('n

NW

Fluturele pentru FFT în baza 2 DIF

1

'1

' '

2

'2

' '

2

2

r r r

r i i

r r r

i r i

i i r

i i i

T A B W

A T BW

B A A

T A B W

A T BW

B A A

= +

= +

= −= −

= +

= −

MAC

MAC

SUBL

MAC

MAC

SUBL

'

1

'

2

3 1

'3 2

4 2

'4 1

r r r

r r

i i i

i i

r

r i

r

i i

A A B

T A B

A A B

T A B

T TW

B T T W

T T W

B T TW

= += −

= += −=

= −=

= +

ADD

SUB

ADD

SUB

MPY

MAC

MPY

MAC

Page 95: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Aplicaţii ale procesoarelor de semnal în comunicaţii184

6.3.3 Programul pentru calculul fluturelui DIT pe DSP56300

Ecuaţiile pentru programul de calcul al fluturelui pentru DIT sunt:

( )( )

'

'

' '

' '

2

2

r r r r i i

i i i r r i

r r r

i i i

A A B W BW

A A BW B W

B A A

B A A

= + +

= + −

= −

= −

(6.20)

unde indicii r şi i reprezintă partea reală, respectiv imaginară.

Primele două ecuaţii reprezintă o sumă de produse şi sunt obţinute cu

instrucţiunea MAC. Ultimele două ecuaţii se bazează pe instrucţiunea SUBL

care realizează deplasarea la stânga (înmulţire cu 2) şi scăderea

acumulatorilor.

Valorile iniţiale ale registrelor sunt date în tabelul de mai jos:

r0 Ar , Ai r4 Ar' , Ai' b = Ai

r1 Br , Bi r5 Br' , Bi' x1 = Br y1 = Bi

r6 Wr , Wi m6 = 0 (bitreversed)

x0 = Wr y0 = Wi

Datele sunt stocate în memoria de date X pentru partea reală şi Y

pentru partea imaginară. Registrele de adresă permit adresarea duală în

memoria de date X şi Y.

Programul în limbaj de asamblare pentru calculul fluturelui este

prezentat în continuare. Timpul de execuţie este de şase cicluri instrucţiune

sau douăsprezece cicluri de ceas. Aceasta este posibil datorită arhitecturii

paralele a DSP56300 care permite până la două operaţii ALU

(înmulţire/acumulare) în paralel cu două transferuri cu memoria şi două

modificări ale registrelor de adresă într-un singur ciclu instrucţiune.

Capitolul 6 – Transformata Fourier rapidă şi aplicaţii 185

mac x1,y0,b y:(r1)+,y1 ; b=Ai+BrWi, y1=Bimacr -x0,y1,b a,x:(r5)+ y:(r0),a ; b=b-BiWr , a=Aisubl b,a x:(r0),b b,y:(r4) ; a=2Ai–b , b=Armac -x1,x0,b x:(r0)+,a a,y:(r5) ; b=Ar+BrWr, a=Armacr -y1,y0,b x:(r1),x1 ; b=b–BiWi , x1=Brsubl b,a b,x:(r4)+ y:(r0),b ; a=2Ar–b , b=Ai

6.3.4 Caracteristicile unei transformate DIT

Pornim de la graful pentru DIT cu intrările rearanjate în ordine naturală.

Fiecare pereche de săgeţi reprezintă un fluture. Întregul calcul al FFT este

efectuat cu fluturi organizaţi în diferite structuri numite grupuri şi etaje.

Primul etaj are un singur grup de patru fluturi, al doilea etaj are două grupuri

cu doi fluturi, iar ultimul etaj are patru grupuri cu un singur fluture. Fiecare

etaj conţine / 2N (patru în acest exemplu) fluturi. Fiecare fluture are două

intrări, numite nod primar şi nod dual. Spaţiul între aceste noduri este numit

distanţa între nodurile duale. Fiecărui fluture îi este asociat un factor de

rotaţie W, al cărui exponent depinde de grupul şi etajul în care este fluturele.

Din graful transformatei se observă că ieşirile sunt ordonate în ordinea inversă

a biţilor indexului ieşirii. Reordonarea secvenţei de ieşire se face cu un

procedeu numit inversarea ordinii biţilor care va fi descris ulterior.

Page 96: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Aplicaţii ale procesoarelor de semnal în comunicaţii186

Etaj 1 Etaj 2 Etaj 3

X(0)

X(4)

X(2)

X(6)

X(1)

X(5)

X(3)

X(7)

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

x(0)

x(1)

x(2)

x(3)

x(4)

x(5)

x(6)

x(7)

W0

W0

W0

W0

W0

W0

W2

W2

W0

W2

W1

W3

000

001

010

011

100

101

110

111

000

100

010

110

001

101

011

111

Indexbinar

Indexbinar

Distanţa întrenodurile duale

Distanţa întrenodurile duale

Distanţa întrenodurile duale

Figura 0.8. Gruparea fluturilor pentru calculul FFT DIT

Caracteristicile unei transformate în N puncte cu decimare în timp sunt

descrise în tabelul următor:

Etajul 1 Etajul 2 Etajul 3 Etajul log2N

Număr degrupuri

1 2 4 N / 2

Număr defluturi pe grup

N / 2 N / 4 N / 8 1

Distanţa întrenoduri duale

N / 2 N / 4 N / 8 1

Exponentulcoeficienţilor W

(N/2)k,

k=0

(N/4)k,

k=0, 1

(N/8)k,

k=0, 1, 2, 3

k,

k=0 .. N/2-1

Pentru fiecare etaj, datele sunt citite din memorie, este calculat

fluturele, iar rezultatele sunt scrise înapoi în memorie. Ieşirile complexe ale

Capitolul 6 – Transformata Fourier rapidă şi aplicaţii 187

fluturelui devin intrări în etajul următor al FFT. Deoarece fiecare etaj are

acelaşi număr de fluturi, numărul de intrări şi de ieşiri ale fluturilor rămâne

constant de la un etaj la altul. Ieşirile fluturelui sunt pe aceleaşi poziţie ca şi

intrările. Această implementare “in-place” scrie rezultatul de la ieşirea

fluturelui în locul intrării corespunzătoare. O astfel de implementare ocupă în

final numai memoria iniţială.

6.3.5 Programul pentru calculul FFT în baza 2 DIT pe DSP56300

Se observă că sunt 2log N etaje. Numărul de grupuri se dublează de la

un etaj la altul, în timp ce numărul de fluturi pe grup se înjumătăţeşte. Factorii

de rotaţie sunt aceiaşi pentru un grup de fluturi, iar ordinul acestora se

modifică de la un grup la altul în ordine “bit-reversed”. Aceasta este

implementată prin setarea registrului modificator M6 egal cu 0 şi a registrului

offset N6 egal cu / 4N (jumătate din lungimea vectorului coeficienţilor).

Datele sunt organizate în memorie după cum urmează:

Registrul adresă Memoria de date X Memoria de date Y

R0 Partea reală a nodului A Partea imaginară a lui A

R1 Partea reală a nodului B Partea imaginară a lui B

R6 Tabela cosinusului Tabela sinusului

Programul va avea trei cicluri DO incluse unul în altul. Ciclul exterior

controlează succesiunea etajelor, ciclul din mijloc controlează grupurile dintr-

un etaj iar ciclul intern calculează toţi fluturii dintr-un grup. Programul este

prezentat mai jos.

Page 97: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Aplicaţii ale procesoarelor de semnal în comunicaţii188

; Rutina de calcul FFT in baza 2 cu decimare in timp

;

fftr2a macro points,data,coef

fftr2a ident 1,0

;

;points număr de puncte de calcul FFT (putere a lui 2)

;data adresa de început a cadrului de date

;coef adresa de început a tabelelor de cosinus si sinus

;

move #points/2,n0 ;număr iniţial de fluturi pe grup

move #1,n2 ;număr iniţial de grupuri pe etaj

move #points/4,n6 ;offsetul în tabela Cos-Sin

move #-1,m0 ;adresare liniară pentru A şi B

move m0,m1

move m0,m4

move m0,m5

move #0,m6 ;adresare bit-reversed pentru Cos-Sin

;

; Calculul etajelor FFT cu trei cicluri DO

;

do #@cvi(@log(points)/@log(2)+0.5),_end_pass

move #data,r0 ;pointerul intrărilor A

move r0,r4 ;pointerul ieşirilor A’

move n0,n1 ;offset fluturi

move n0,n4

lua (r0)+n0,r1 ;pointerul intrarilor B

move #coef,r6 ;pointerul tabelei Cos-Sin

move n0,n5

lua (r1)-,r5 ;pointerul ieşirilor B

do n2,_end_grp

move x:(r1),x1 y:(r6),y0 ;valorile -sin şi -cos

move x:(r5),a y:(r0),b ;încarcă data de intrare

Capitolul 6 – Transformata Fourier rapidă şi aplicaţii 189

move x:(r6)+n6,x0 ;actualizare pointer Cos-Sin

do n0,_end_bfy ;Fluturele DIT

mac x1,y0,b y:(r1)+,y1

macr -x0,y1,b a,x:(r5)+ y:(r0),a

nop

subl b,a x:(r0),b b,y:(r4)

mac -x1,x0,b x:(r1),x1

macr -y1,y0,b x:(r0)+,a a,y:(r5)

subl b,a

move b,x:(r4)+ y:(r0),b

_end_bfy

move a,x:(r5)+n5 y:(r1)+n1,y1 ;actualizare

move x:(r0)+n0,x1 y:(r4)+n4,y1 ;intrări A şi B

_end_grp

move n0,b1

lsr b n2,a1 ;împarte cu 2 număr fluturi pe grup

nop

lsl a b1,n0 ;înmulţeşte cu 2 nr. de grupuri pe etaj

nop

move a1,n2

_end_pass

endm

Page 98: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Aplicaţii ale procesoarelor de semnal în comunicaţii190

6.4 SCALAREA DATELOR FFT PENTRU IMPLEMENTAREA

PE PROCESOR ÎN VIRGULĂ FIXĂ

În implementarea diverşilor algoritmi pe procesoarele de semnal

trebuie să se ţină seama de precizia finită a calculelor datorată numărului de

biţi pe care sunt reprezentate numerele. Pentru a preveni depăşirile în calculul

ieşirilor fluturilor FFT se realizează scalarea intrărilor prin shiftare la dreapta

(împărţire cu o putere a lui 2).

Una din următoarele metode de scalare poate fi aplicată:

- Scalarea datelor de la intrarea FFT;

- Scalarea datelor la ieşirea din fiecare fluture;

- Scalare condiţionată a datelor pe blocuri.

Prima metodă care asigură că nu apar depăşiri este să se includă

suficienţi biţi de gardă pentru datele de la intrarea FFT. Aceasta înseamnă că

prin shiftare la dreapta a datelor, cei mai semnificativi biţi permit creşterea

numerelor de la un etaj la altul.

În modul, ieşirile fluturelui pot creşte cu un bit la fiecare etaj aşa cum

rezultă din ecuaţia:

'A A BW= + (6.21)

şi având în vedere ca factorii de rotaţie jW e θ−= au modulul unitar,

adunarea poate produce creşterea cu un bit (dublare).

Părţile reale şi imaginare se calculează cu o ecuaţie de tipul:

' cos sinA A B Cθ θ= + + (6.22)

Pentru / 4θ π= datele pot creşte cu un factor maxim de 2.4 de la

intrarea la ieşirea fluturelui ceea ce înseamnă o creştere cu doi biţi. Totuşi,

numai două grupuri de fluturi au factorul de rotaţie maxim într-un etaj şi nu se

înregistrează o creştere cu acest factor maxim în două etaje consecutive.

Capitolul 6 – Transformata Fourier rapidă şi aplicaţii 191

Numărul de biţi de gardă necesar pentru a compensa creşterea maximă

posibilă a biţilor într-o transformată în N puncte este egal cu numărul de etaje

adică 2log N biţi. De exemplu, într-o transformată în 1024 de puncte (care are

10 etaje) trebuie să fie introduşi 10 biţi de gardă în datele de intrare, rămânând

14 biţi de informaţie. Această metodă de scalare este simplă şi eficientă

pentru FFT de lungimi mici. Cu cât lungimea FFT creşte, numărul de biţi de

gardă necesari creşte înrăutăţindu-se raportul semnal-zgomot.

Aşa cum s-a arătat, o creştere medie de un bit se înregistrează după

fiecare etaj. O altă metodă de compensare a creşterii biţilor constă în scalarea

ieşirilor cu 2 după fiecare etaj. Numărul de împărţiri cu 2 fiind egal cu

numărul de etaje, pentru a obţine rezultatul corect al FFT trebuie înmulţite

ieşirile ultimului etaj cu N. Această metodă are un raport semnal-zgomot mai

bun ca metoda anterioară deoarece se porneşte cu date de intrare mai precise.

Totuşi, în etajele care nu au creşteri ale numărului de biţi scalarea nu este

necesară, apărând astfel o pierdere de informaţie.

A treia metodă de scalare tratează un etaj ca pe un bloc de date,

atribuind un exponent pentru fiecare bloc. Această metodă se mai numeşte

scalare condiţionată în virgulă mobilă pe bloc. Dacă apare o creştere a

numărului de biţi la o ieşire, întregul bloc de date este shiftat la dreapta şi

exponentul blocurilor este incrementat. La sfârşitul FFT trebuie determinat

numărul de scalări efectuate pentru a avea un rezultat corect. Implementarea

pe DSP56300 foloseşte bitul de scalare (bitul 7 din registrul de stare) pentru

testarea apariţiei creşterii biţilor şi actualizarea exponentului. Sunt adăugate

cinci instrucţiuni la sfârşitul fiecărui etaj. Această metodă asigură cel mai bun

raport semnal-zgomot dar este şi cea mai costisitoare din punct de vedere al

complexităţii programului.

Page 99: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Aplicaţii ale procesoarelor de semnal în comunicaţii192

6.5 ADRESAREA ÎN ORDINE INVERSĂ A BIŢILOR

Inversarea ordinii biţilor este o tehnică de adresare utilizată în calculul

FFT pentru reordonarea datelor în ordine secvenţială. Un exemplu de

inversare a ordinii biţilor este prezentat mai jos. Inversarea ordinii biţilor

operează asupra indexului binar care reprezintă poziţia unui eşantion într-un

cadru. În exemplul dat avem opt date, deci sunt necesari trei biţi pentru

reprezentarea celor opt indecşi. Prin inversarea ordinii celor trei biţi se obţine

secvenţa reordonată secvenţial.

Indexul iniţial Indexul cu biţii inversaţiSecvenţainiţială Decimal Binar Decimal Binar

Secvenţaordonată

x(0) 0 000 0 000 x(0)

x(4) 4 100 1 001 x(1)

x(2) 2 010 2 010 x(2)

x(6) 6 110 3 011 x(3)

x(1) 1 001 4 100 x(4)

x(5) 5 101 5 101 x(5)

x(3) 3 011 6 110 x(6)

x(7) 7 111 7 111 x(7)

Pe familia DSP56300 acest mod de adresare este selectat prin

încărcarea registrului Mn cu zero (Mn = $000000). Modificarea adresei este

realizată hardware prin incrementarea şi propagarea transportului în sens

invers (reverse-carry), de la MSB la LSB. Aceasta este echivalentă cu

inversarea conţinutului registrelor Rn şi Nn, adunarea ofsetului din registrul

Nn şi reinversarea ordinii biţilor rezultatului.

Capitolul 6 – Transformata Fourier rapidă şi aplicaţii 193

Pentru un cadru de lungime 2kN = rezultă că ultimii k biţi ai adresei

vor trebui inversaţi. Pentru aceasta registrul Nn trebuie să aibă valoarea:

1Nn 2k−= (6.23)

De asemenea adresa de bază a secvenţei de intrare trebuie să fie putere

întreagă a lui 2 îndeplinind condiţia:

2m N≥ (6.24)

De exemplu, o secvenţă de intrare de 8 elemente are adresa de bază $8

= 1000. Ultimii trei LSB vor fi 000,001,002,...,111.

M0 = $000000. R0 = 1000. N0 = 0100 = 23-1.

Adresasecvenţeiiniţiale

Secvenţainiţială

Modificarea adreseireverse-carry

Secvenţareordonată

$8 = 1000 0 R0 = 1000 +N0 = 0100

0

$9 = 1001 1 R0 = 1100 +N0 = 0100

4

$A = 1010 2 R0 = 1010 +N0 = 0100

2

$B = 1011 3 R0 = 1110 +N0 = 0100

6

$C = 1100 4 R0 = 1001 +N0 = 0100

1

$D = 1101 5 R0 = 1101 +N0 = 0100

5

$E = 1110 6 R0 = 1011 +N0 = 0100

3

$F = 1111 7 R0 = 1111 +N0 = 0100

7

În mod normal, pentru reordonarea datelor este necesar un cadru de

memorie suplimentar pentru transferul direct (cum apare în tabelul de mai

sus). În situaţiile în care spaţiul de memorie este mai critic decât timpul de

Page 100: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Aplicaţii ale procesoarelor de semnal în comunicaţii194

execuţie se preferă o metodă “in place” (fără memorie suplimentară) de

ordonare în ordinea inversă a biţilor. După cum se poate observa, dacă

indexul binar este simetric (este acelaşi şi cu biţii inversaţi) data respectivă nu

trebuie schimbată. În celelalte cazuri se pot forma perechi de date care îşi

schimbă poziţia una în locul celeilalte (1 cu 4, 3 cu 6 din exemplul anterior).

Iniţializărir0 = data + N/2m0 = 0 (bit reversed)n0 = N/2r1 = data + 1

r1r0 ≤

a = x:(r0)b = x:(r1)x:(r0) = bx:(r1) = a

(r0)+n0 (bit reversed)(r1)+ (liniar)

DANU

do N-1 points

Figura 0.9. Algoritmul “in place” de reordonare a datelor.

Algoritmul este prezentat în figură. Registrul r0 este folosit pentru

adresarea bit-reversed, iar r1 pentru adresare liniară. Dacă r0 = r1 (index

simetric) sau dacă r0 < r1 (ca să nu fie schimbată de două ori aceeaşi pereche)

nu se schimbă datele între ele.

Capitolul 6 – Transformata Fourier rapidă şi aplicaţii 195

6.6 OPTIMIZAREA PERFORMANŢELOR FFT

6.6.1 Optimizarea

Judecarea performanţelor oricărui program necesită luarea în

considerare a complexităţii atât a timpului de execuţie cât şi a spaţiului

ocupat. Totdeauna există un compromis între acestea două. Complexitatea

timpului de execuţie arată cât de repede poate fi implementat un algoritm pe

un procesor specificat, în timp ce complexitatea spaţiului arată câtă memorie

poate fi necesară. Optimizarea poate să reducă necesarul de memorie sau să

minimizeze timpul de rulare al unui algoritm. Deoarece costurile memoriei

sunt într-o continuă descreştere, optimizarea timpului de execuţie devine din

ce în ce mai importantă. O metodă de evaluare a complexităţii timpului de

execuţie a unui algoritm este comparaţia complexităţii teoretice, complexităţii

implementării ideale şi complexităţii practice. Complexitatea teoretică se

referă la numărul de adunări şi înmulţiri cerute de algoritmul dat independent

de arhitectura procesorului. Acest tip de evaluare e bun doar pentru o

comparaţie de nivel înalt între algoritmi şi nu reflectă performanţele reale ale

algoritmului pe procesorul dat. Nu e surprinzător faptul că un algoritm cu o

complexitate teoretică mică are o complexitate implementată ideală mai mare.

Complexitatea implementată ideală se referă numai la implementarea

nucleului algoritmului în funcţie de posibilităţile instrucţiunilor procesorului

dat cum ar fi: tipuri de instrucţiuni disponibile, moduri de adresare, transferuri

paralele ale datelor, etc. Complexitatea implementării ideale arată

performanţele fără overhead ale algoritmului dat pe procesor şi furnizează o

estimare optimistă a performanţei algoritmului. Complexitatea practică

reprezintă complexitatea implementării ideale plus structura de overhead

Page 101: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Aplicaţii ale procesoarelor de semnal în comunicaţii196

datorată procesorului. Overhead-ul include toate instrucţiunile necesare

neasociate nucleului algoritmului. Iniţializarea pointerilor, pregătirea

ciclurilor, salturile la subrutine sunt structuri tipice de overhead în procesor.

Prin distingerea diferitelor grade de complexitate se poate determina uşor care

procesor e compatibil pentru fiecare aspect şi care instrucţiune sau mod de

adresare e critic pentru algoritmii specifici. De exemplu, complexitatea

teoretică pentru radix-2 e de patru multiplicări şi şase adunări sau scăderi.

Pentru procesoarele din familia DSP56300, instrucţiunea MAC efectuează o

înmulţire şi o adunare în paralel, deci complexitatea implementării ideale pe

DSP56300 e de şase cicluri (4 MAC şi 2 SUBL). Dacă fiecare fluture are

nevoie de o medie de 1/6 instrucţiuni pentru a completa un ciclu DO,

complexitatea practică a fluturelui DIT în bază 2 e de 6.17 instrucţiuni.

Raportul între complexitatea implementării ideale şi cea practice reflectă

eficienţa microprocesorului în efectuarea unei funcţii. De exemplu, eficienţa

lui DSP56300 de a efectua un fluture DIT complex ar fi raportul

implementării ideale şi a celei practice, adică: 0.97. Cu alte cuvinte, overhead-

ul pentru acest exemplu e de 3%. Pentru algoritmii FFT ar trebui să fie între

3% şi 15%. Dacă procesorul are un overhead mai mare, nu poate fi numit

DSP. Daca e mai mic de 3%, e probabil un circuit integrat specific unei

aplicaţii (ASIC).

6.6.2 Minimul de memorie ocupată – implementarea “in place”

Deşi fiecare fluture are două date complexe de intrare şi două de ieşire,

calcularea fluturelui poate fi efectuată folosind aceeaşi zonă de memorie

numită calcularea “in place”. Necesarul de memorie poate fi minimizat în

cazurile:

Capitolul 6 – Transformata Fourier rapidă şi aplicaţii 197

• Aranjarea datelor în ordinea inversă a biţilor. Acest lucru poate fi făcut

in-place deoarece datele sunt interschimbate pe perechi. Astfel, doar o

zonă de date de lungime 2N e necesară.

• Prin reducerea tabelului factorilor de rotaţie de la N locaţii la / 2N

locaţii reale pentru intrările ordonate în ordine normală. / 2N numere

complexe pot fi combinate în perechi de câte două ce diferă prin

factorul / 4NNW j= − . Cu alte cuvinte, factorul de rotaţie din al doilea

grup poate fi obţinut prin multiplicarea cu –j cu factorul din primul

grup. Optimizarea poate fi implementată printr-o modificare minoră a

programului fluturelui. Toate grupurile de index par vor folosi factorii

de rotaţie negaţi, cu părţile reală şi imaginară schimbate între ele.

Astfel, numărul grupurilor într-un etaj se poate reduce la jumătate la fel

întâmplându-se şi cu timpul de acces la memoria factorilor W.

• Folosind trei cicluri DO intercalate pentru a minimiza spaţiul de

memorie de program.

6.6.3 Optimizarea pentru o execuţie mai rapidă

Deşi programul discutat anterior se execută foarte rapid, anumite

aplicaţii impun cerinţe mai puţin stringente referitoare la mărimea memoriei,

dar cer o execuţie mai rapidă. O execuţie rapidă poate fi obţinută prin

optimizarea algoritmului anterior. În următoarele rânduri vom prezenta câţiva

paşi de a atinge această optimizare:

Deoarece în primul şi al doilea etaj sunt factori de rotaţie triviali (care

nu implică operaţii aritmetice) de tipul:

0 1NW = şi / 4NNW j= − (6.25)

Page 102: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Aplicaţii ale procesoarelor de semnal în comunicaţii198

se pot combina primul şi al doilea etaj într-un fluture de ordin 4 ca în

figura 0.10.

-1

-1-1

-1

A

B

C

D

1

1

1

–j

A’

B’

C’

D’

Figura 0.10. Fluturele de ordin 4 obţinut prin gruparea primelor două

etaje FFT

Prin această grupare vor fi calculaţi / 4N fluturi cu următoarele ecuaţii:

( ) ( )( ) ( )( ) ( )( ) ( )( ) ( )( ) ( )( ) ( )( ) ( )

'

'

'

'

'

'

'

'

r r r r r

r r r r r

r r r i i

r r r i i

i i i i i

i i i i i

i i i r r

i i i r r

A A C B D

B A C B D

C A C B D

D A C B D

A A C B D

B A C B D

C A C B D

D A C B D

= + + +

= + − +

= − + −

= − − −

= + + +

= + − +

= − − −

= − + −

(6.26)

Se observă că în ecuaţia (6.26) trebuie efectuate 8 adunări şi 8 scăderi,

ceea ce înseamnă că pentru un procesor din familia DSP56300 cu o singură

Capitolul 6 – Transformata Fourier rapidă şi aplicaţii 199

unitate ALU şi două transferuri paralele, durează cel puţin 16 instrucţiuni

pentru efectuarea calculelor.

După combinarea primelor două etaje, numărul ciclurilor instrucţiune

necesar pentru calculul FFT devine:

( ) ( )/ 4 . 2 / 2 . .TRIV N nr etaje N nr instr fluture⋅ + − ⋅ ⋅ (6.27)

unde TRIV este numărul instrucţiunilor pentru fluturele trivial.

Factori de rotaţie triviali există şi în etajele rămase. Există două tipuri

de fluturi triviali.

Tipul 1: 0 / 41, NN NW W j= = − (6.28)

Tipul 2: /8 3 /8 2 2

2 2N N

N NW W j= − = − (6.29)

Tipul 1 nu implică multiplicări. Pentru a folosi aceste relaţii simple în

etajele rămase, trebuie să utilizăm fluturi diferiţi care trebuie inseraţi într-un

etaj. Această schimbare are ca rezultat un cod mai mare de program şi

instrucţiuni suplimentare (overhead), cum ar fi actualizarea registrelor de

adresă, cicluri DO diferiţi, si adresare circulară.

Tipul 2 de factori nu sunt cu adevărat triviali dar se reduce teoretic

complexitatea fluturelui de ordin 2 la două multiplicări şi şase adunări sau

scăderi reale. Totuşi, pentru procesoarele din familia DSP56300 care au o

singură unitate MAC tot şase instrucţiuni sunt necesare, ca mai înainte.

Fiecare grup din ultimul etaj constă într-un singur butterfly. În acest caz

ciclul de fluturi poate fi eliminat.

O altă alternativă e combinarea ultimelor două etaje într-un fluture de

ordin 4. Deoarece fiecare fluture din ultimul etaj are nevoie de factori de

rotaţie diferiţi, o instrucţiune care să aducă factorul de rotaţie din memorie

trebuie inclusă în programul fluturelui.

Page 103: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Aplicaţii ale procesoarelor de semnal în comunicaţii200

6.7 TRANSFORMATA FOURIER INVERSĂ

Formula pentru transformata Fourier discretă inversă (TFDI) este:

1

0

1( ) TFDI{ ( )}( ) ( )

Nnk

Nk

x n X k n X k WN

−−

=

= = ∑ , 0,1,..., 1n N= − (6.30)

Se observă că diferenţele care apar între formula transformatei directe

şi cea a transformatei inverse sunt: împărţirea cu 1/ N şi conjugarea factorilor

de rotaţie NW .

Pentru factorii de rotaţie se poate utiliza un alt vector decât cel utilizat

la transformata directă, sau se poate folosi acelaşi vector, dar citirea valorilor

factorilor de rotaţie ai transformatei inverse să se facă de la sfârşitul la

începutul acestuia, avându-se în vedere formula:

22 2j kj kNNe eππ π − −

= (6.31)

Se poate calcula transformata Fourier discretă inversă folosind

transformata directă având în vedere următoarea relaţie:

( )**1TFDI{ ( )} TFD{ ( )}X k j j X k

N= ⋅ ⋅ (6.32)

Într-adevăr:

21

0

1TFDI{ ( )} ( )

N j nkN

k

X k X k eN

π−

=

= ∑ (6.33)

( )

( )

*21** *

0

* *2 21 1*

0 0

2 21 1*

0 0

TFD{ ( )} ( )

( ) ( )

( ) ( )

N j nkN

k

N Nj nk j nkN N

k k

N Nj nk j nkN N

k k

j j X k j j X k e

j X k je j X k je

X k j j e X k e

π

π π

π π

− −

=

− −− −

= =

− −

= =

⋅ ⋅ = ⋅ =

= = =

= ⋅ =

∑ ∑

∑ ∑

(6.34)

de unde, înlocuind în (6.32) rezultă relaţia dorită.

Capitolul 6 – Transformata Fourier rapidă şi aplicaţii 201

Fie z a jb= + o variabilă complexă. Expresia *j z⋅ înseamnă:

( ) ( )*j a jb j a jb b ja⋅ + = ⋅ − = + (6.35)

adică o inversare între părţile reală şi imaginară.

Revenind la relaţia (6.32) programul care calculează transformata

Fourier inversă va avea următoarea organigramă:

Inversareparte reală –

parte imaginară

FFT(scalare cu 1/N)

( )X k

Inversareparte reală –

parte imaginară

( ) IFFT{ ( )}x n X k=

Figura 0.11. Algoritmul de calcul al IFFT folosind FFT.

Dacă datele sunt organizate în memorie cu partea reală în memoria X şi

partea imaginară în memoria Y (la aceeaşi adresă), inversarea părţilor reală şi

imaginară înseamnă transferul a doi vectori de lungime N din memoria X în Y

într-un macro de forma:

Page 104: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Aplicaţii ale procesoarelor de semnal în comunicaţii202

; Programul de inversare a părţilor reală şi imaginară

invreim macro puncte,date

invreim ident 1,0

;

; puncte număr de elemente din memorie

; date adresa de început a cadrului de date

;

move #date,r0

move r0,r4

move #-1,m0 ;adresare liniară

move m0,m4

do #puncte,end_inv

move x:(r0),a y:(r4),b

move b,x:(r0)+ a,y:(r4)+

end_inv

endm

6.8 TRANSFORMATA FOURIER PENTRU SECVENŢE REALE

În cazul secvenţelor reale există proprietatea:

*( ) ( )X k X N k= − (6.36)

deci

Re{ ( )} Re{ ( )}X k X N k= − , Im{ ( )} Im{ ( )}X k X N k= − − (6.37)

iar (0)X şi ( / 2)X N au valori reale. În consecinţă este suficient să se

calculeze un număr de N valori reale.

Există algoritmi specializaţi pentru date reale, care vor permite

reducerea complexităţii aritmetice precum şi a memoriei utilizate, cu preţul

unei anumite complicări a programului.

Capitolul 6 – Transformata Fourier rapidă şi aplicaţii 203

6.8.1 Algoritmi pentru o singură secvenţă reală

Vom utiliza algoritmul în bază doi cu decimare în timp:

1 21 1 1 1

1 1

1 12 2

21 2 1 1

0 02 2

( ) (2 ) (2 1)2

N NN

k kn k n kN N N

n n

NX k k x n W W x n W

− −+

= =

+ = + +∑ ∑ (6.38)

Pentru 2 0k = :

11 1 1( ) ( ) ( )k

NX k X k W X k′ ′′= + (6.39)

unde prin 1( )X k′ şi 1( )X k′′ s-au notat transformatele de ordin / 2N .

Pentru a pune în evidenţă simetria circulară pară a acestor transformate:

1 1( ) ( )2

NX k X k′ ′= − , 1 1( ) ( )

2

NX k X k′′ ′′= − (6.40)

evaluăm şi:

11 1 1( ) ( ) ( )

2 2 2k

N

N N NX k X k W X k′ ′′− = − − − (6.41)

Exprimând părţile reale şi imaginare se obţin:

1 1 1 1 1 1

1 1 1 1 1 1

1 1 1 1 1 1

1 1 1 1 1 1

Re ( ) Re ( ) cos Re ( ) sin Im ( )

Im ( ) Re ( ) sin Re ( ) cos Im ( )

Re ( ) Re ( ) cos Re ( ) sin Im ( )2

Im ( ) Im ( ) sin Re ( ) cos Im ( )2

X k X k k X k k X k

X k X k k X k k X k

NX k X k k X k k X k

NX k X k k X k k X k

θ θθ θ

θ θ

θ θ

′ ′′ ′′= + +′ ′′ ′′= − +

′ ′′ ′′− = − −

′ ′′ ′′− = − − +

(6.42)

unde

2

N

πθ = (6.43)

Vom utiliza primele două relaţii pentru eşantioanele de ordin

0,1, , / 4N… apoi ultimele două relaţii pentru exprimarea eşantioanelor de

ordin / 4 1, , / 2N N+ … .

Page 105: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Aplicaţii ale procesoarelor de semnal în comunicaţii204

Rezultă schema din figura 0.11:

0ReX’(k1)

TFD :

N/2 :ImX’(k1)

:

cos(θk1)

x(2n)ReX[k1]

ImX[k1]

ReX[N/2-k1]

ImX[N/2-k1]

-1

-1

x(2n+1)

0ReX’’(k1)

TFD :

N/2 :ImX’’(k1)

:-cos(θk1)

sin(θk1)sin(θk1)

2

N

πθ =

-1

-1

Figura 0.11. Descompunerea TFD pentru date reale

6.8.2 Algoritmi pentru două secvenţe reale

Dacă trebuie calculate simultan două secvenţe de date reale ( )x n şi

( )y n , se poate utiliza algoritmul pentru date complexe. TFD este o

transformată liniară astfel că, dacă notăm:

( ) ( ) ( )z n x n j y n= + ⋅ (6.44)

atunci:

[ ]( ) TFD{ ( )}( ) TFD{ ( ) ( )}( ) ( ) ( )

Re ( ) Im ( ) Re ( ) Im ( )

Z k z n k x n jy n k X k jY k

X k j X k j Y k j Y k

= = + = + =

= + + +(6.45)

sau

[ ] [ ]( ) Re ( ) Im ( ) Re ( ) Im ( ) Im ( ) Re ( )Z k Z k Z k X k Y k j X k Y k= + = − + + (6.46)

având în vedere formulele (6.37) rezultă:

[ ] [ ]( ) Re ( ) Im ( ) Im ( ) Re ( )Z N k X k Y k j X k Y k− = + − − (6.47)

Capitolul 6 – Transformata Fourier rapidă şi aplicaţii 205

Se pot separa transformatele fiecărei secvenţe din rezultatul

algoritmului FFT pentru date complexe cu formulele:

[ ] [ ]1 1( ) Re ( ) Re ( ) Im ( ) Im ( )

2 2X k Z k Z N k j Z k Z N k= + − + − − (6.48)

[ ] [ ]1 1( ) Im ( ) Im ( ) Re ( ) Re ( )

2 2Y k Z N k Z k j Z N k Z k= − + + − − (6.49)

Se observă că deoarece secvenţele sunt reale, TFD are simetrie circular

conjugat simetrică, deci este suficient calculul TFD pentru 0, / 2k N= … . De

asemenea, pentru 0k = şi / 2k N= avem:

(0) Re (0) ( / 2) Re ( / 2)

(0) Im (0) ( / 2) Im ( / 2)

X Z X N Z N

Y Z Y N Z N

= == =

(6.50)

Page 106: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 7 – Procesorul de semnal StarCore 140 145

CAPITOLUL 7

PROCESORUL DE SEMNAL STARCORE 140

7.1 INTRODUCERE

Procesorul de semnal StarCore, produs al firmei Freescale, prezintă un

nou tip de arhitectură, cu un plus de putere de calcul. Numit SC140, poate fi

implementat pe o gamă largă de configuraţii SOC (System On Chip). Pe un

singur chip pot fi integrate, în funcţie de necesităţile clientului, zone de

memorie suplimentare, dar şi o gamă variată de porturi de I/O sau alte

periferice.

SC140 implementează un nou model de execuţie a instrucţiunilor numit

VLES (Variable-Length Execution Set) care permite folosirea mai multor

unităţi de adresare şi de calcul în paralel, în acelaşi ciclu-maşină.

Câteva caracteristici ale procesorului de semnal SC140 sunt:

• frecvenţa de ceas a nucleului este 300 MHz la 1,5V şi 120 MHz la 0,9V;

• până la 1200 Milioane operaţii MAC pe secundă (1,2 GMACS);

• până la 3000 RISC MIPS (MAC se consideră ca 2 instrucţiuni RISC);

• 4 unităţi logice-aritmetice (ALU – Arithmetic Logic Unit) care includ

circuite dedicate de înmulţire şi adunare şi unităţi de operare pe bit;

• circuitele MAC (Multiply and ACcumulate) din fiecare ALU, operează pe

40 biţi (16b × 16b + 40b);

Aplicaţii ale procesoarelor de semnal în comunicaţii 146

• fiecare ALU conţine un shifter (structură de deplasare) pe 40 biţi;

• 16 Registre pe 40 biţi pentru operaţii cu numere întregi şi fracţionare;

• 16 Registre de adresă pe 32 biţi, dintre care 8 pot fi folosite ca adrese de

bază;

• 4 Registre de offset pentru adrese şi 4 Registre pentru adresare circulară;

• 2 unităţi de adresare cu operaţii aritmetice cu numere întregi;

• moduri de adresare specifice procesoarelor de semnal;

• suport hardware pentru tipurile de date întreg şi fracţionar;

• set de instrucţiuni ortogonal cu instrucţiuni codate pe 16 biţi;

• memoria poate fi accesată în cuvinte cu dimensiune variabilă (1 până la 4

octeţi);

• într-un ciclu-maşină pot fi executate până la 6 instrucţiuni;

• memorie comună de program şi de date cu trei magistrale (PAB, PDB,

XABA, XDBA, XABB, XDBB);

• logică CMOS caracterizată printr-un consum redus de putere..

Schema bloc a unei configuraţii tipice SOC este prezentată mai jos:

Capitolul 7 – Procesorul de semnal StarCore 140 147

Zona de extindere a memoriei – Nivel 1 Memorie unificată de date şi program

ROM, RAM

DSP Engine Set de instrucţiuni pe 16-biţi

Nucleul DSP StarCore 140 Interfaţa cu memoria externă

DMA

CACHE

Zona de Periferice şi Acceleratoare Periferice standard Input/Output Acceleratoare specifice aplicatiilor Accelerator programabil de uz general

4 Unităţi ALU

Zona de extensie de sistem

Ctrl. de întreruperi

Variable Length Execution Set (VLES)

Memorie extinsă – Nivel 2

2 Unităţi de generare a adreselor

Figura 7-1 Schema bloc a unei configuraţii tipice SoC (System On Chip)

Pe lângă cele 4 zone din schema bloc mai poate exista încă o zonă de

memorie suplimentară, dar aceasta nu va funcţiona la frecvenţa nucleului.

Viteza maximă a acesteia va depinde de tehnologia în care este realizată.

Memoria de pe SC140 este de tip SRAM (Static RAM).

VLES este un model software în care instrucţiunile folosite de SC140

sunt grupate astfel încât să se obţină o performanţă maximă în realizarea

practică a programelor. Fiecare instrucţiune codifică o operaţie elementară.

Pentru a executa funcţii specifice procesării semnalelor, grupuri de

instrucţiuni poate fi executat în paralel, folosind un circuit dedicat din partea

de control a execuţiei programului numită PSEQ (Program SEQuencer Unit).

Aplicaţii ale procesoarelor de semnal în comunicaţii 148

7.2 PREZENTAREA ARHITECTURII PROCESORULUI DE

SEMNAL SC140INTRODUCERE

Figura 7.2 prezintă schema bloc pentru nucleul procesorului de semnal

SC140, împreună cu principalele blocuri componente.

Instruction Bus

32 128 PAB

PDB

XA

BA

XD

BB

XD

BA

XA

BB

Secvenţiator de Program

Setul de registre pentru Generarea Adreselor

Registre ALU pentru date

2 AAU BMU 4 ALU

OnCE

Controlul Puterii

Generatorul de ceas

PLL

32 32 64 64 128

128

Spaţiul unificat de memorie pentru date şi program

24

Accelerator pentru setul de

instrucţiuni

StarCore 140

Figura 7-2 Schema bloc pentru nucleul procesorului de semnal SC140

Se observă spaţiul unificat de memorie, datele şi programul fiind

conţinute în aceeaşi memorie. Este o memorie multiport ceea ce nu

restricţionează debitul necesar aplicaţiilor de procesare de semnal. O parte

importantă a nucleului este dedicată logicii de control a programului pentru a

se permite efectuarea în paralel a mai multe instrucţiuni elementare.

În interiorul nucleului mai există suport hardware pentru power-

management şi debug (EOnCE - Enhanced On Chip Emulator).

Page 107: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 7 – Procesorul de semnal StarCore 140 149

7.2.1 Unitatea Aritmetică şi Logică de Date (DALU)

DALU, (Data Arithmetic Logic Unit), reprezintă unitatea funcţională

care realizează operaţiile logice şi aritmetice în interiorul procesorului de

semnal SC140.

Componentele DALU sunt următoarele:

- un set de 16 Registre fiecare de 40 biţi (D0 – D15)

- 4 unităţi aritmetice şi logice care operează în paralel, fiecare dintre

acestea conţinând o unitate MAC (Multiply and ACcumulate) şi BFU (Bit-

Field Unit)

- 8 registre shifter/limitatoare.

Schema de principiu a DALU este prezentată în figura de mai jos:

Figura 7-3 Schema de principiu a DALU

Toate unităţile MAC şi BFU pot accesa oricare dintre cele 16 registre,

fiecare este partiţionat în 3 părţi: două de 16 biţi (părţile high şi low ale

registrului) şi una de 8 biţi (partea de extensie). În funcţie de instrucţiune,

accesul la aceste registre se poate face pe 8, 16, 32 sau 40 biţi.

Aplicaţii ale procesoarelor de semnal în comunicaţii 150

Cele două magistrale de date dintre registrele DALU şi memorie

(XDBA şi XDBB) sunt pe 64 de biţi. Accesul la memorie, pe aceste

magistrale, pe 64 biţi, se poate realiza simultan.

Instrucţiunile move pot varia ca lărgime de acces de la 8 la 64 de biţi şi

pot transfera de asemenea cuvinte multiple, dar care nu depăşesc 64 de biţi

(de exemplu 4 cuvinte de 16 biţi sau două de 32 de biţi). Deoarece se pot

executa câte două instrucţiuni move în fiecare ciclu maşină se poate atinge o

rată maximă de transfer cu memoria de 4.8 Go/s (la 300 MHz, frecvenţa de

lucru a nucleului).

Modelul de programare al DALU este prezentat mai jos.

1 39 32 31 16 15 0 L0 D0.e D0.h D0.l D0 L1 D1.e D1.h D1.l D1 L2 D2.e D2.h D2.l D2 L3 D3.e D3.h D3.l D3 L4 D4.e D4.h D4.l D4 L5 D5.e D5.h D5.l D5 L6 D6.e D6.h D6.l D6 L7 D7.e D7.h D7.l D7 L8 D8.e D8.h D8.l D8 L9 D9.e D9.h D9.l D9

L10 D10.e D10.h D10.l D10 L11 D11.e D11.h D11.l D11 L12 D12.e D12.h D12.l D12 L13 D13.e D13.h D13.l D13 L14 D14.e D14.h D14.l D14 L15 D15.e D15.h D15.l D15

Figura 7-4 Modelul de programare DALU

Un registru poate fi sursă pentru până la 4 instrucţiuni simultane, dar nu

se permit scrieri simultane în acelaşi registru. Rezultatul unei operaţii

aritmetice poate fi folosit ca sursă pentru o alta fără nici o restricţie temporală.

Capitolul 7 – Procesorul de semnal StarCore 140 151

Prin D0 ne referim la întregul registru (toţi cei 40 biţi), în timp ce D0.e

se referă la cei 8 biţi de extensie, iar D0.h şi D0.l se referă la cei 16 biţi ai

părţii superioare (cei mai semnificativi 16 biţi) respectiv ai părţii inferioare

(cei mai puţin semnificativi 16 biţi). Fiecare registru are asociat câte un bit

etichetă de limitare notat de la L0 la L15, la fel ca registrele corespondente.

Registrele DALU (la care ne vom referi în general cu acronimul Dn

unde 0,15n = ) sunt registre de uz general, fiecare dintre ei putând fi folosit

ca: operand sursă, operand destinaţie sau acumulator.

Registrele DALU pot fi folosite ca zone tampon între cele două

magistrale de acces la memoria XDBA şi XDBB şi la ALU, permiţând noilor

operanzi să fie încărcaţi pentru următoarea instrucţiune în timp ce conţinutul

lor este folosit de instrucţiunea curentă.

Biţii de limitare Ln sunt folosiţi pentru a se determina dacă partea de

extensie a fiecărui registru este folosită sau nu. Practic acest bit este

concatenat cu Dn.e formând un operand pe 9 biţi.

Pentru instrucţiunile de transfer ale datelor fracţionare, transferul unui

registru Dn în memorie este protejat la depăşire (overflow) prin înlocuirea

valorii pentru care s-a constatat depăşirea cu o valoare constantă maximă sau

minimă, după caz. Acest lucru se întâmplă pentru valoarea transferată pe

magistralele XDBA sau XDBB, conţinutul registrului sursă rămânând acelaşi.

Limitarea are loc după ce conţinutul registrului a fost shiftat în

concordanţă cu modul de scalare folosit. Shiftarea şi limitarea sunt realizate

numai pentru o subclasă a instrucţiunilor move şi anume pentru moves şi de

asemenea doar dacă registrul conţine o valoare fracţionară cu semn. Dacă pe

magistralele de acces la memorie este transferată o valoare de tip întreg, nu

sunt realizate operaţii de shiftare şi limitare.

Aplicaţii ale procesoarelor de semnal în comunicaţii 152

Pentru transferurile din memorie în registre este folosită în mod

automat extinderea până la 40 biţi a semnului valorii transferate. Această

extindere înseamnă pur şi simplu copierea valorii bitului de semn până la

atingerea dimensiunii de 40 biţi pentru operand.

Pentru o valoare fracţionară pe 16 biţi care este transferată din memorie

se realizează următoarele operaţii:

• cei 16 biţi ai valorii sunt transferaţi în Dn.h (partea superioară a

registrului sursă)

• Dn.l h (partea inferioară a registrului sursă) este resetată

• Dn.e (partea de extensie a registrului sursă) este extinsă prin

copierea bitului de semn

• Ln este la rândul său resetat.

Pentru o valoare de tip întreg, cei 16 biţi sunt transferaţi în Dn.l iar

Dn.h şi Dn.e pot fi extinse cu semnul operandului sau cu zero după cum

specifică instrucţiunea. Mai există instrucţiuni speciale pentru scrierea sau

citirea părţii extinse a registrelor, dar acestea sunt folosite doar în anumite

calcule cu precizie extinsă.

Unitatea MAC este partea aritmetică a ALU şi conţine un multiplicator,

un sumator, precum şi alte circuite aritmetice pentru realizarea rotunjirii,

comparării, saturării sau shiftării. Operanzii sursă ai unităţii MAC pot fi

registre sau valori imediate din corpul instrucţiunii, iar numărul lor maxim

este de 3. Operandul destinaţie nu poate fi decât un registru de 40 biţi din cele

descrise mai sus.

Multiplicatorul execută o înmulţire a unor operanzi de 16 biţi, care

reprezintă numere în complement faţă de 2, cu sau fără semn, întregi sau

fracţionare. Ieşirea multiplicatorului (32 de biţi) poate fi adunată la registrul

destinaţie.

Page 108: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 7 – Procesorul de semnal StarCore 140 153

Sumatorul poate executa adunări sau scăderi. Toate instrucţiunile

realizate de unitatea MAC se desfăşoară pe durata unui sigur ciclu-maşină.

Unitatea BFU este partea logică a ALU şi conţine un shifter

bidirecţional de 40 de biţi, o unitate de generare a măştilor şi o unitate logică.

Aici se pot realiza următoarele operaţii:

• shiftare aritmetică sau logică cu unul sau mai mulţi biţi, la stânga

sau la dreapta

• rotaţie la stânga sau dreapta cu un singur bit

• operaţii logice (and, or, xor)

• operaţii de extindere a semnului sau cu zero

• operaţie de numărare a celor mai semnificativi biţi de 0 sau 1.

Registrele de shiftare/limitare oferă post-procesări speciale ale valorilor

care trebuie scrise în memorie. Din cele 8 astfel de registre 4 sunt folosite

pentru bus-ul XDBA şi 4 pentru XDBB, permiţând transferuri cu memoria a

până la 4 cuvinte care au fost shiftate şi limitate după caz. Funcţiile oferite de

aceste circuite diferă de aritmetica cu saturaţie care poate fi folosită de ALU.

Unitatea DALU este o unitatea de execuţie a SC140, are asociate o

serie de instrucţiuni specifice, numite instrucţiuni DALU, diferite de

instrucţiunile altor unităţi de execuţie (de exemplu AGU). Se pot executa până

la patru instrucţiuni într-un singur ciclu-maşină. Diferenţierea între tipurile de

instrucţiuni ale fiecărei unităţi de execuţie este făcută la nivelul PSEQ.

Funcţiile DALU

Registre de shiftare/limitare pot efectua următoarele operaţii:

• scalare prin înmulţire – datele sunt shiftate cu un bit la stânga;

• scalare prin împărţire – datele sunt shiftate cu un bit la dreapta;

• datele nu sunt scalate.

Aplicaţii ale procesoarelor de semnal în comunicaţii 154

Modulul de scalare se setează prin intermediul biţilor S0 şi S1 din

registrul de stare al procesorului SC140 (SR – Status Registrer). Scalarea

afectează numai datele transferate în memorie, nu şi datele din registre.

Scalarea afectează modul de calcul al bitului de limitare Ln şi nu se poate

folosi atunci când este utilizată aritmetica cu saturaţie.

Capabilităţile de limitare şi cele de scalare sunt folosite numai pentru

instrucţiunile moves.

Operaţia de limitare se desfăşoară în doi paşi:

• în primul pas este calculat bitul Ln atunci când registrul este scris de

către o operaţie ce a avut loc în ALU

• în al doilea pas are loc limitarea datelor de pe bus, dacă bitul Ln este

setat.

Calculul valorii bitului Ln este realizat în ideea că va urma o

instrucţiune de tip moves. Bitul Ln este determinat pe baza biţilor din partea

de extensie a registrului, aceştia fiind biţii care se află la stânga virgulei

(considerată implicit) din număr. Bitul Ln este setat dacă aceşti biţi nu au toţi

valoarea 0, sau 1. Constanta cu care este înlocuită pe bus valoarea care trebuie

limitată este fie cea mai pozitivă valoare posibilă, fie cea mai negativă în

funcţie de bitul de semn.

SC140 poate lucra cu numere întregi sau fracţionare, ambele

reprezentate în complement faţă de 2. Diferenţa principală dintre cele două

tipuri de valori constă în locul unde se afla implicit virgula care desparte

partea întreagă de cea zecimală. Pentru numere fracţionare aceasta se afla

întotdeauna la dreapta celui mai semnificativ bit a porţiunii superioare a

registrului (adică la dreapta bitului de semn). Pentru numere întregi aceasta se

află întotdeauna la dreapta celui mai puţin semnificativ bit.

Capitolul 7 – Procesorul de semnal StarCore 140 155

Operand pe 16 biţi

în memorie

Reprezentarea pe 40

de biţi (D0 – D15)

Reprezentarea numerelor fracţionare cu semn

Operand pe 16 biţi

în memorie

Reprezentarea pe 40

de biţi (D0 – D15) Reprezentarea numerelor întregi cu semn

Figura 7-5 Reprezentarea numerelor fracţionare şi întregi în registrele de date

Tipurile de date cu care se poate lucra pe SC140 sunt deci:

• numere fracţionare cu semn

• numere întregi cu semn

• numere întregi fară semn.

Deosebirea dintre acestea este redată în tabelul următor (numere pe 16 biţi):

Numere fracţionare cu semn

Numere întregi cu semn

Numere întregi fără semn

Reprezentare internă Valoare Reprezentare

internă Valoare Reprezentare internă Valoare

0x7FFF 1-2-15 0x7FFF 215 – 1 0x7FFF 216 – 1 … … … … 0x7FFE 216 – 2 … … … … … …

0x0001 2-15 0x0001 1 … … 0x0000 0 0x0000 0 … … 0xFFFF -2-15 0xFFFF -1 … …

… … … … … … … … … … 0x0001 1

0x8000 -1 0x8000 -215 0x0000 0

Aplicaţii ale procesoarelor de semnal în comunicaţii 156

Multiplicarea şi majoritatea operaţiilor aritmetice sunt realizate cu

aceleaşi circuite pentru valori fracţionare şi pentru valori întregi.

Există operaţii care fac necesară existenţa circuitelor specializate:

operaţiile de multiplicare între întregi fără semn, sau între un întreg cu semn şi

unul fără semn. Modul de comparare între valori cu semn şi fără semn este

diferit pentru numere pozitive şi negative. Ne referim în special la comparaţii

de tipul mai mare pentru care există instrucţiuni diferite pentru valori fără

semn şi cele cu semn. Pentru înmulţirea numerelor întregi şi fracţionare există

mici deosebiri, chiar dacă se realizează cu acelaşi circuit.

ÎNMULŢIREA NUMERELOR CU SEMN N x N –> 2N – 1 BIŢI

S

INTREG FRACŢIONAL

S

REZULTAT 2N – 1EXTENSIE DE SEMN

2N BIŢI

ÎNMULŢIRE CU SEMN

S MSP LSPS

S S

REZULTAT 2N – 1COMPLETARE CU ZERO

2N BIŢI

ÎNMULŢIRE CU SEMN

S MSP LSP 0

Figura 7-6 Înmulţire întreagă (stânga) şi respectiv fracţionară (dreaptă)

DALU poate realiza rotunjirea valorii din registru, dacă acest lucru este

cerut prin instrucţiune. Partea superioară a registrului este rotunjită în funcţie

de partea inferioară iar apoi partea inferioară este resetată. Limita între cele

două porţiuni este determinată de modul de scalare folosit. Se oferă suport

pentru două tipuri de rotunjire: rotunjire convergentă şi rotunjire în

complement faţă de 2, prin intermediul bitului RM (Rounding Mode) din SR.

Normal este folosită rotunjirea convergentă. Dacă partea inferioară a

registrului este mai mare ca 1/2 atunci numărul este rotunjit la prima valoare

mai mare, altfel este rotunjit la prima valoare mai mică. Problema care apare

Page 109: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 7 – Procesorul de semnal StarCore 140 157

este la ce valoare trebuie să se rotunjească dacă partea inferioară are exact

valoarea 1/2. Dacă este aleasă una dintre cele două opţiuni disponibile

rezultatul final va avea, după terminarea calculelor, un offset în direcţia

aleasă. Rotunjirea convergentă rezolvă această problemă prin rotunjire în sus,

daca porţiunea superioară este impară (LSB = 1) şi porţiunea inferioară este

1/2 şi prin rotunjire în jos, dacă porţiunea superioară este pară (LSB = 0) şi

porţiunea inferioară este 1/2. În celelalte cazuri rotunjirea convergentă se

comportă exact ca rotunjirea normală.

În rotunjirea în complement faţă de 2, toate valorile pentru care partea

inferioară este mai mare sau egală cu 1/2 sunt rotunjite în sus iar celelalte

valori sunt rotunjite în jos. Apare un mic offset pozitiv în valorile finale.

Dacă nu este folosit nici un mod de scalare, partea superioară a

registrului este reprezentată de biţii 39:16, iar partea inferioară de biţii 15:0.

Pentru scalarea prin înmulţire, partea superioară este reprezentată de biţii

39:15 iar cea inferioară de biţii 14:0. Pentru scalarea prin împărţire partea

superioară este reprezentată de biţii 39:17 iar cea inferioară de biţii 16:0.

Aritmetica cu saturaţie este modul de lucru prin care rezultatele

calculelor aritmetice ale ALU vor fi limitate la cei 32 de biţi mai puţin

semnificativi şi este folosit pentru a oferi compatibilitate cu algoritmii care nu

recunosc, sau nu pot ţine seama de biţii de extensie. Aritmetica cu saturaţie

este similară cu operaţia de limitare descrisă mai sus. Dacă cei 8 biţi de

extensie nu sunt toţi 0 sau toţi 1 valoarea corespunzătoare celor 32 de biţi mai

puţin semnificativi este setată fie la cea mai pozitivă valoare posibilă, fie la

cea mai negativă valoare posibilă. Acest lucru este determinat de bitul 39

(bitul de semn). Aritmetica prin saturaţie se alege prin setarea bitului SM

(Saturation Mode) din SR. La detectarea unei saturaţii este setat bitul DOVF

(DALU Overflow) din registrul EMR (Exception and Mode Registrer).

Funcţionarea saturării aritmetice nu este afectată de modul de scalare. Pentru

Aplicaţii ale procesoarelor de semnal în comunicaţii 158

majoritatea instrucţiunilor, dacă se foloseşte aritmetica cu saturaţie nu se mai

calculează bitul de limitare Ln, totuşi există unele instrucţiuni pentru care nu

se poate ignora acest bit. Dacă se întâlnesc aceste instrucţiuni în decursul

programului, modul de aritmetică cu saturaţie este dezactivat pe durata

execuţiei lor. Dacă rezultatul acestor instrucţiuni trebuie saturat, este necesară

o instrucţiune specială de saturare pentru registrul care conţine acel rezultat.

De asemenea printre funcţiile oferite de DALU, dar de mai mică

importanţă în aplicaţia curentă, sunt suportul pentru calcule cu număr sporit

de biţi (de exemplu înmulţiri între numere pe 32 biţi) şi suportul pentru

împărţire (prin folosire iterativă a instrucţiunii div).

7.2.2 Unitatea de generare a adreselor (AGU)

AGU (Address Generation Unit) realizează calculul adreselor necesare

pentru funcţionarea programelor, prin folosirea operaţiilor aritmetice potrivite

pentru adresarea operanzilor în memorie. Conţine registrele folosite pentru

generarea acestor adrese. Unitate funcţională operează în paralel cu celelalte

resurse de pe chip pentru a minimiza timpul necesar generării unei adrese. Tot

această unitate este responsabilă cu generarea adreselor de salt în program şi

cu actualizarea registrului de stivă.

Componentele principale ale AGU sunt prezentate în cele ce urmează:

• 8 registre inferiori de adrese (R0 – R7)

• 8 registre superiori de adrese (R8 – R15) sau alternativ, după tipul

de adresare, registre pentru adresele de bază (B0 – B7)

• 2 registre de stivă (care indică spre adresa în care se află primul

element al stivei), dintre care doar unul este activ la un moment dat

(NSP – Normal Stack Pointer şi ESP – Exception Stack Pointer)

• 4 registre de offset (N0 – N3)

Capitolul 7 – Procesorul de semnal StarCore 140 159

• 4 registre modificatori (M0 – M3)

• registrul de control al adresării (MCTL – Modifier ConTroL

Registrer)

• 2 unităţi aritmetice (AAU – Address Arithmetic Unit)

• o unitate BMU (Bit-Mask Unit)

Figura 7-7 Schema bloc a AGU (Address Generation Unit)

Cele 16 registre de adresă, la care ne vom referi cu Rn sau Bn unde

0,15n = sau 0,7n = precum şi registrele de stivă se folosesc în mod normal

Aplicaţii ale procesoarelor de semnal în comunicaţii 160

pentru generarea adreselor în modul de adresare indirect cu registru. Registrul

conţine adresa la care se află operandul în memorie şi nu operandul propriu

zis – de unde numele de mod de adresare indirectă. Cele patru registre de

offset (Ni, 0,3i = ) pot fi folosite de oricare dintre registrele de adresă.

Registrele modificatoare (Mj, 0,3j = ) pot fi folosite doar de registrele

inferioare de adresă. Registrele pentru adresa de bază sunt asociate în mod

unic cu registrele inferioare de adresă (B0 este asociat cu R0, B1 cu R1, etc.).

Unitatea BMU este folosită pentru operaţii de setare, resetare,

schimbare a unor biţi din operandul destinaţie în funcţie de o mască definită

în corpul instrucţiunii. Operandul sursă este încărcat în BMU pe unul din

magistralele de date XDBA sau XDBB, iar rezultatul este oferit tot pe unul

din aceste magistrale în ciclul-maşină următor. Tipic, în cazul operanzilor pe

16 biţi toate instrucţiunile BMU sunt executate în doi cicli maşină. Aceşti

operanzi pot fi o locaţie de memorie sau una din partiţiile unui registru (partea

high sau low).

Într-un ciclu-maşină cele două AAU (Address Arithmetic Unit) pot

genera o adresă în zona de program a memoriei (în cazul instrucţiunilor de

salt) sau două adrese în zona de date a memoriei (una pe XABA şi una pe

XABB). Această adresă poate fi folosită pentru accesul unui operand

reprezentat pe octet, pe cuvânt (16 biţi), pe cuvânt lung (32 biţi) sau pe dublu

cuvânt lung (64 de biţi). Tot într-un ciclu maşină fiecare AAU poate actualiza

un registru de adresă potrivit modului de calcul specificat în MCTL.

Cele două AAU sunt identice şi fiecare din ele poate realiza

următoarele operaţii:

• adunare sau scădere a două registre AGU

• adunarea unei valori imediate la un registru

• incrementarea sau decrementarea unui registru AGU

Page 110: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 7 – Procesorul de semnal StarCore 140 161

• adunare la PC (Program Counter)

• adunare cu propagare inversă a bitului de carry (reverse-carry).

Pe lângă circuitele necesare pentru realizarea acestor operaţii în AAU

mai există un sumator pentru offset care poate realiza operaţii de comparare

sau shiftare. Valoarea offsetului trebuie shiftată cu 1, 2 sau 3 biţi în funcţie de

numărul de octeţi pe care este reprezentat operandul pentru ca acesta să poată

fi accesat corect. De asemenea mai există un sumator pentru aritmetica

modulo care este folosit în adresarea bufferelor circulare.

Modelul de programare a AGU este descris mai jos:

R0 N0 R1 N1 R2 N2 R3 N3 R4 R5 M0 R6 M1 R7 M2 R8 M3 R9 R10 NSP,OSP (nsp, osp) R11 ESP,OSP (esp, osp) R12 R13 R14 R15

Figura 7-8 Modelul de programare AGU

Aplicaţii ale procesoarelor de semnal în comunicaţii 162

Registrele de stivă au asociate registrele “cache” care conţin o versiune

decrementată a acestora. Instrucţiunea pop (de scoatere din stivă) necesită,

pentru execuţie, un singur ciclu-maşină. Registrul cache este invalidat dacă

are loc o rescriere a registrului stivă corespunzător. Prima instrucţiune de tip

pop executată după modificarea conţinutului registrului de stivă durează două

cicluri-maşină, primul din acestea fiind folosit pentru decrementarea

registrului şi actualizarea registrului cache. Toate celelalte instrucţiuni pop

vor dura un ciclu-maşină până la următoarea modificare a registrului stivă.

Registre modificatoare conţin de obicei dimensiunea bufferului

circular, pentru modul de adresare modulo. Dacă nu mai sunt disponibile alte

registre pot fi folosite ca registre de uz general şi registre offset.

Registrul de control MCTL, reprezentat pe 32 biţi, este folosit pentru a

programa modul de calcul al adresei pentru fiecare dintre cele 8 registre

inferioare de adresă. Registrele superioare nu pot funcţiona decât în modul de

adresare liniară. Structura acestui registru este cea de mai jos:

Biţii AM (Addressing Mode) asociaţi cu fiecare registru inferior de

adresă pot lua valorile din tabelul de mai jos, cu semnificaţiile aferente

acestora. Toate celelalte combinaţii sunt rezervate.

Capitolul 7 – Procesorul de semnal StarCore 140 163

AM3 AM2 AM1 AM0 Mod de adresare 0 0 0 0 Adresare liniară 0 0 0 1 Adresarea reverse-carry 1 0 0 0 Adresare în buffer circular – se foloseşte m0 1 0 0 1 Adresare în buffer circular – se foloseşte m1 1 0 1 0 Adresare în buffer circular – se foloseşte m2 1 0 1 1 Adresare în buffer circular – se foloseşte m3

1 1 0 0 Adresare modulo cu întoarcere multiplă – se foloseşte m0

1 1 0 1 Adresare modulo cu întoarcere multiplă – se foloseşte m1

1 1 1 0 Adresare modulo cu întoarcere multiplă – se foloseşte m2

1 1 1 1 Adresare modulo cu întoarcere multiplă – se foloseşte m3

Modurile de adresare ale AGU

SC140 oferă 4 moduri de adresare a memoriei. Modurile de adresare se

referă la determinarea locaţiei la care operandul poate fi găsit în memorie şi la

modul în care este făcut calculul acesteia.

Fiecare din cele 4 moduri de adresare va fi descris în detaliu, deoarece

modurile de adresare sunt o parte importantă a arhitecturii unui procesor,

chiar o măsură a performanţei acestuia, pe lângă numărul de operaţii pe

secundă, memoria internă, tipul de arhitectură, ş.a.m.d.

A. Mod de adresare direct cu registru

Acest mod de adresare implică faptul că operandul se găseşte în unul

sau mai multe registre DALU, AGU, sau de control şi se mai numeşte

referinţă la registru.

1) Modul de adresare direct cu registru de date sau control.

Operandul se află într-unul, două sau patru registre ai DALU, sau într-

unul din registrele de control pentru anumite instrucţiuni speciale.

Aplicaţii ale procesoarelor de semnal în comunicaţii 164

Un exemplu este: mac d4,d5,d6

care înseamnă că operanzii se găsesc în registrele d4, d5 şi d6 ai DALU şi se

realizează operaţia d6 = d6 + (d4 × d5).

2) Modul de adresare direct cu registru de adresă.

Operandul se găseşte într-unul din cele 27 de registre AGU. Un

exemplu este: addl1a r0,r1 Operanzii se găsesc în registrele AGU r0 şi r1 şi se realizează operaţia

r1 = r1 + (2 × r0).

B. Modul de adresare indirect cu registru

Un registru de adresă este folosit pentru a indica o locaţie de memorie,

locaţie care conţine operandul căutat. Registrul de adresă conţine adresa

efectivă în memorie la care se află operandul. Acest mod de adresare se mai

numeşte şi referinţă la memorie. Termenul index se referă la offsetul care este

reţinut într-un registru, iar termenul deplasament se referă la offsetul imediat

din corpul unei instrucţiuni.

1) Modul de adresare fără actualizare.

Adresa operandului se află într-un registru de adresă al AGU. Conţinutul

acestui registru rămâne acelaşi după efectuarea instrucţiunii. Pentru registrele

de adresă inferiorioare nu se ţine cont de modul de calcul al adresei specificat

în MCTL.

Un exemplu este: bmclr.w #$004F,(r4)

Page 111: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 7 – Procesorul de semnal StarCore 140 165

Un cuvânt este citit de la adresa conţinută în r4 (operandul căutat), iar

asupra lui este efectuată o operaţie de resetare a biţilor setaţi în masca

specificată de instrucţiune după care este scris din nou în locaţia din care a

fost citit. La sfârşitul acestor operaţii r4 nu-şi schimbă valoarea.

2) Modul de adresare cu post-incrementare.

După ce adresa operandului este folosită este incrementată

corespunzător cu tipul accesului la memorie (adică cu 1, 2, 4 sau 8) şi

actualizată în acelaşi registru de adresă. Tipul accesului depinde de

dimensiunea operandului care este transferat din memorie de instrucţiunea în

care este specificat acest mod de adresare (1, 2, 4 sau 8 octeţi). Tipul de

calcule după care se actualizează adresa din registrele inferioare este

specificat de conţinutul MCTL.

Un exemplu este: move.f (r3)+,d2

în care cuvântul aflat la adresa din r3 este transferat în registrul d2, după care

la valoarea curentă a lui r3 se adaugă 2.

3) Modul de adresare cu post-decrementare.

Este similar cu modul precedent de adresare, singura diferenţă fiind

faptul că adresa operandului este decrementată corespunzător tipului

operandului la care se face acces.

Un exemplu este move.l (r3)-,d2

în care după transferul unui cuvânt dublu în registrul d2, din valoarea curentă

a adresei conţinute în r3 se scade 4.

Aplicaţii ale procesoarelor de semnal în comunicaţii 166

4) Modul de adresare cu post-incrementare cu offset.

După ce adresa operandului este folosită, la acesta este adunat

conţinutul registrului de offset ni (care poate fi pozitiv sau negativ) pre-shiftat

corespunzător la stânga cu dimensiunea operandului la care se face acces

(adică cu 0,1, 2 sau 3 octeţi). Rezultatul este memorat în acelaşi registru.

Modul de calcul pentru registrele inferioare de adresă este determinat de

conţinutul lui MCTL. Conţinutul registrului ni rămâne neschimbat.

Un exemplu este: move.b d6,(r5)+n2

în care la r5 este adunat conţinutul lui n2 fără ca acesta să fie shiftat deoarece

în acest caz dimensiunea operandului este de 1 octet.

5) Modul de adresare indexat.

Adresa operandului rezultă din suma dintre registrul de adresă şi

numărul cu semn din registrul offset n0, preshiftat cu 0, 1, 2 sau 3 biţi la

stânga în funcţie de dimensiunea operandului care este accesat. Modul de

calcul pentru registrele inferioare de adresă este determinat de conţinutul lui

MCTL. Conţinutul celor doi registre rămâne neschimbat după efectuarea

instrucţiunii.

Un exemplu este: move.b d6,(r3+n0) Acest mod de adresare nu poate fi folosit decât cu registrul offset n0.

6) Modul de adresare indexat cu un registru adresă.

Acest mod este similar cu cel precedent cu singura diferenţă că în locul

registrului offset n0 este folosit un alt registru de adresă.

Un exemplu este: move.l (r0+r2),d6

Capitolul 7 – Procesorul de semnal StarCore 140 167

în care adresa din r0 este adunată la conţinutul registrului r2 shiftat cu 2 biţi la

stânga. În acest mod de adresare nu se pot utiliza ca index decât registrele

inferioare de adresă.

7) Mod de adresare cu deplasament scurt.

Adresa operandului este suma dintre registrul de adresă şi un

deplasament scurt imediat, care ocupă 3 biţi în corpul instrucţiunii. Acest

deplasament (număr fără semn) trebuie shiftat la stânga corespunzător cu

dimensiunea operandului pentru care se realizează accesul la memorie.

Deplasamentul poate lua valori în intervalul [0, 7]. Conţinutul registrului de

adresă nu este schimbat. Calculul pentru registrele inferioare se realizează în

funcţie de modul de adresare setat în MCTL.

Un exemplu este: move.l d4,(r3+$1C) în care deplasamentul este 7 şi deoarece se accesează un operand pe 4

octeţi acesta trebuie shiftat la stânga cu 2 biţi rezultând 4×7 = 28 = 1Ch.

8) Mod de adresare cu deplasament lung.

Este similar cu modul de adresare precedent, dar în acest caz

deplasamentul este un număr cu semn pe 16 biţi pentru care este necesar încă

un cuvânt la codarea instrucţiunii. Deplasamentul ia valori în intervalul [-

16384, 16383] pentru operanzi reprezentaţi pe un octet, în intervalul [-8192,

8191] pentru operanzi reprezentaţi pe un cuvânt, ş.a.m.d.

9) Mod de adresare cu deplasament scurt pentru SP.

Similar cu cele precedente, doar că se referă la registrul de stivă şi

deplasamentul poate fi un număr fără semn reprezentat pe 5 sau 6 biţi, în

funcţie de tipul de acces la memorie (operand pe 2 sau 4 octeţi).

Aplicaţii ale procesoarelor de semnal în comunicaţii 168

Un exemplu este: move.l #$FFFF,(sp-$3E)

10) Mod de adresare cu deplasament lung pentru SP.

Similar cu cele prezentate la punctul 8), dar valabil doar pentru

registrul de stivă.

C. Mod de adresare relativ la PC

Este folosit pentru calculul următoarei adrese în zona de memorie

folosită de program în cazul unei instrucţiuni de salt. Prin codarea

instrucţiunii aceasta conţine deplasament cu semn. Adresa operandului este

obţinută prin shiftarea la stânga a deplasamentului şi adunarea rezultatului la

valoarea curentă a PC. Deplasamentul este shiftat deoarece adresele

instrucţiunilor în zonă de memorie a programului sunt aliniate pe cuvinte.

Modul de calcul este întotdeauna liniar. Numărul de biţi ocupat de

deplasament diferă în funcţie de instrucţiunea folosită. Instrucţiunile de salt se

referă la salturi condiţionate sau la accesul subrutinelor. Salturile

necondiţionate nu folosesc acest mod de adresare ci unul din cele prezentate

mai jos.

D. Mod de adresare special

Aceste moduri de adresare nu folosesc un registru de adresă când

specifică o adresă efectivă. În locul acestui registru se foloseşte o valoare

imediată care este inclusă în codul instrucţiunii, sau se foloseşte un registru

care este implicit folosit de instrucţiune.

Page 112: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 7 – Procesorul de semnal StarCore 140 169

1) Valoare imediată scurtă.

Un operand reprezentat pe 5, 6 sau 7 biţi face parte din cuvântul de cod

al instrucţiunii. Un operand pe 5 biţi este folosit pentru instrucţiunile

aritmetice ale DALU sau AGU. Un operand pe 6 biţi este folosit de

instrucţiunile DALU care transferă un operand imediat într-un registru LCn.

Un operand pe 7 biţi este folosit pentru transfer imediat într-un registru.

Un exemplu este doen2 #$2

2) Cuvânt imediat.

Acest mod necesită un cuvânt în plus în codarea instrucţiunii în rest

este similar cu precedentul.

3) Valoare imediată lungă.

Acest mod necesită două cuvinte în plus în codarea instrucţiunii în rest

este similar cu punctul 1).

4) Adresă absolută.

Acest mod de adresare necesită un cuvânt în plus pentru codarea

instrucţiunii. Adresa ocupă 16 biţi şi este extinsă cu 0 pentru a forma o adresă

normală de 32 de biţi.

Un exemplu este: move.w ($1),d0

5) Adresă absolută lungă.

Similar cu 4) dar este nevoie de două cuvinte pentru a coda adresa în

corpul instrucţiunii.

Aplicaţii ale procesoarelor de semnal în comunicaţii 170

6) Adresă absolută pentru salt necondiţionat.

Ca şi pentru modul de adresare precedent este nevoie de o extensie de

două cuvinte pentru codarea instrucţiunii.

Un exemplu este: jmp lbl4

în care la codarea instrucţiunii se foloseşte adresa din program

corespunzătoare etichetei lbl4.

7) Referinţă implicită.

Unele instrucţiuni se referă implicit la unul din următoarele registre:

PC, SR, Registre de stivă sau Registre asociaţi buclelor de program. Folosirea

unuia dintre aceştia este indicată prin instrucţiunea folosită.

Un exemplu este: tfra osp,r2

care transferă valoarea din registrul de stivă care nu este folosit în registrul de

adresă r2.

E. Moduri de adresare specifice procesoarelor de semnal

Adresarea reverse-carry

Adresarea reverse-carry reprezintă un mod de calcul al adresei folositor

pentru implementarea în procesorul de semnal a funcţiilor care realizează FFT

sau IFFT.

• Modificarea adresei se face hardware prin propagarea, în sumator, în

sens invers a bitului de carry (de la MSB către LSB). Actualizarea

adresei prin reverse-carry este echivalentă cu:

• inversarea conţinutului lui rn (inversare pe biţi, adică MSB devine

LSB, MSB-1 devine LSB+1 ş.a.m.d)

Capitolul 7 – Procesorul de semnal StarCore 140 171

• shiftarea lui ni cu 0, 1, 2 sau 3 biţi la stânga corespunzător

dimensiunii operandului accesat

• inversarea lui ni (similar cu rn)

• adunarea celor doi operanzi

• inversarea rezultatului.

Acest mod de adresare poate fi folosit la ordonarea bit-reverse a

eşantioanelor de intrare sau de ieşire în FFT (în funcţie de algoritmul

implementat, cu decimare în timp sau în frecvenţă), sau la adresarea factorilor

de rotaţie. Cu SC140 pot fi realizate FFT în maxim 232 puncte.

Adresarea în buffer circular

Se permite realizarea de bufere circulare, structuri FIFO sau linii de

întârziere. Trebuie configurate mai multe registre, nu este suficientă doar

scrierea biţilor corespunzători în MCTL. Fiecare registru pentru adresa de

bază este asociat cu un registru inferior de adresă.

Configurarea unui registru de adresă, folosit în adresarea în buffer

circular, urmează următorii paşi:

• registrul pentru adresa de bază trebuie încărcat cu adresa de bază

(cea mai mică) a bufferului

• în MCTL trebuie specificat modul de adresare şi care dintre registrii

mj este asociat cu registrul de adresă folosit

• în registrul mj determinat mai devreme se încarcă dimensiunea

bufferului care trebuie realizat

• în rn se încarcă o adresă din interiorul bufferului

Adresele posibile pentru rn vor fi în intervalul [bn, bn+mj-1]. Dacă

valoarea rn creşte peste valoarea bn+mj-1 din aceasta va fi scăzut astfel încât

valoarea adresei să revină în interiorul limitelor specificate. Din acest motiv

Aplicaţii ale procesoarelor de semnal în comunicaţii 172

se mai numeşte şi adresare modulo, numărul care specifică valoarea faţă de

care se fac operaţiile de adunare modulo este mj (Figura de mai jos).

7.2.3 Unitatea de control a programului

Deoarece SC140 este o structură cu mai multe ALU, se pot trimite până

la 6 instrucţiuni la 6 unităţi de execuţie în acelaşi timp. Când două sau mai

multe instrucţiuni sunt trimise simultan spre execuţie în acelaşi ciclu-maşină

se spune că ele sunt grupate. Compilatorul C sau asamblorul pot specifica în

codul sursă care instrucţiuni sunt grupate. Fiecare grup de instrucţiuni trimis

spre execuţie într-un ciclu-maşină se numeşte set de execuţie. Fiecare 8

cuvinte citite din zona de memorie de program şi asociate cu o adresă sunt

numite set de fetch.

Structura pipe-line

Pentru SC140 structura pipe-line constă în 5 etaje:

• pre-fetch

• fetch

• decodare

• generarea adreselor

• execuţie

Page 113: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 7 – Procesorul de semnal StarCore 140 173

Primele 3 etaje sunt implementate sub forma unui circuit numit PSEQ

(Program Sequencer unit). Ultimele două etaje sunt implementate în AGU şi

DALU.

Primele 2 etaje sunt responsabile cu citirile din memoria de program a

setului de fetch. În etapa de pre-fetch adresa acestui set este pusă pe bus-ul

PAB, şi în timp ce este citit setul de fetch, counter-ul de fetch din PSEQ este

actualizat pentru următoarea citire din memorie. Aceste operaţii se execută în

paralel.

Adresa de citire poate fi generată de către PSEQ pentru:

• execuţia normală a programului

• execuţia unei excepţii

• buclă hardware

• instrucţiuni de salt.

Etapa de fetch este dedicată aşteptării realizării accesului la memorie.

Acesta este complet când PSEQ eşantionează valoarea citită din memorie pe

cei 128 de biţi ai PDB (8 cuvinte adică un set de fetch). Un set de execuţie se

poate întinde pe mai multe seturi de fetch, mai multe astfel de seturi sunt

reţinute într-un buffer, deoarece tot setul de execuţie trebuie decodat odată.

După citirea setului de fetch, PSEQ detectează care instrucţiuni sunt

grupate împreună şi vor fi decodate în paralel astfel încât numărul de cicli

maşină cerut de cea mai lungă instrucţiune va determina numărul de cicli

maşină necesar pentru execuţia întregului set. Decodarea constă în

determinarea tipului de instrucţiuni (dacă sunt instrucţiuni DALU sau AGU)

şi trimiterea acestora către unităţile de execuţie corespunzătoare.

Etapa generării de adrese este implementată în AGU şi DALU. În

DALU această etapă include decodarea instrucţiunilor specifice. În AGU

această etapă include actualizarea registrelor de adresă precum şi realizarea

Aplicaţii ale procesoarelor de semnal în comunicaţii 174

accesului propriu zis la memorie. Aici se calculează şi adresele necesare

pentru instrucţiunile de salt folosite mai departe de PSEQ.

În etapa execuţiei se realizează calculele cerute în DALU. Dacă este

executată o instrucţiune de salt, SC140 trebuie să aştepte reumplerea structurii

pipe-line, începând cu un nou pre-fetch din memorie. Ciclii maşină pierduţi în

timpul acestei aşteptări se numesc slot-uri de întârziere. Deoarece este

posibilă utilizarea acestora pentru a permite continuarea execuţiei

instrucţiunilor care se găsesc deja în structura pipe-line au fost prevăzute

instrucţiuni speciale de salt întârziat. Acestea folosesc o parte sau toate

sloturile de întârziere pentru execuţia unui set adiţional de execuţie.

Pe lângă structura pipe-line mai există şi alte instrucţiuni de control al

programului:

• execuţia condiţionată a unui set de execuţie

• instrucţiuni pentru forţarea intrării chipului în starea de excepţie

• instrucţiuni pentru forţarea intrării chipului în starea de debug.

Execuţia condiţionată este controlată de starea bitului T din cadrul SR.

Folosirea acestor instrucţiuni permite execuţia condiţională a unui întreg set

de execuţie sau execuţia condiţională a unor subseturi ale acestuia. Anumite

restricţii se aplică acestor subseturi în ceea ce priveşte numărul şi lungimea

instrucţiunilor componente.

Execuţia buclelor hardware

Una din cele mai importante caracteristici ale unui algoritm de

procesare de semnal este execuţia eficientă a buclelor de program. SC140 are

un mecanism optimizat de buclare care permite până la 4 nivele de imbricare

a buclelor. Acest mecanism este o parte a PSEQ, şi modelul de programare

este următorul:

Capitolul 7 – Procesorul de semnal StarCore 140 175

SA0 LC0 SA1 LC1 SA2 LC2 SA3 LC3

Fiecare pereche de registre este asociată unei bucle, regitrul SAn (Start

Address) conţine adresa de start a buclei, dată de o etichetă, iar LCn (Loop

Counter) conţine numărul de repetări ale buclei.

În SR există 5 fanioane asociate cu execuţia buclelor după cum

urmează:

• SLF (Short Loop Flag) este un bit setat când bucla este inţializată ca

o buclă scurtă şi resetat la terminarea acesteia

• LF0, LF1, LF2, LF3 sunt biţi care sunt setaţi de fiecare dată când

bucla corespunzătoare este inţializată şi resetaţi la terminarea buclei

corespunzătoare.

Pentru buclele care se pot realiza în SC140 există următoarea

terminologie:

• corpul buclei reprezintă seturile de execuţie care sunt parcurse în

timpul execuţiei buclei

• buclă lungă este o buclă al cărei corp constă în trei sau mai multe

seturi de execuţie

• buclă scurtă este o bulcă al cărei corp constă din unul sau două

seturi de execuţie

• adresa de start este adresa primului set de execuţie din corpul buclei.

Adresa de start este definită de o instrucţiune de tipul dosetupn care

indică o etichetă, şi de directiva de asamblare loopstartn. Aceste

două definiţii trebuie să fie consistente.

Aplicaţii ale procesoarelor de semnal în comunicaţii 176

• ultima adresă este adresa ultimului set de execuţie din corpul

funcţiei. Aceasta este definită de instrucţiunea loopendn. În cazul

unei bucle scurte cu o singur instrucţiune aceasta coincide cu adresa

de start

LPMARKA şi LPMARKB sunt doi biţi marker în cuvântul prefix care

identifică diferitele condiţii de buclare. Aceşti biţi sunt completaţi de

assembler şi nu sunt accesibili user-ului.

Pentru iniţializarea şi execuţia unei bucle hardware sunt necesari

următorii paşi:

• executarea unei instrucţiuni dosetupn în decursul programului

înaintea primului set de execuţie din cadrul buclei

• executarea unei instructiuni doenn sau doenshn pentru încărcarea

counterului corespunzător cu valoarea care arată de câte ori este

repetată bucla. Flag-ul corespunzător din SR precum şi SLF (după

caz) sunt setate în acest moment.

În cazul unei bucle scurte, instrucţiunile sunt reţinute în bufferele

interne şi astfel nu este nevoie de fetch pentru buclele scurte. Buclele se pot

realiza una în alta cu singura restricţie că într-o buclă nu pot fi executate decât

buclele cu numere mai mari decât a celei curente. În bucla 2 nu poate fi

executată decât bucla 3. O singura buclă poate fi activă la un moment dat şi

aceasta este cea cu numărul mai mare dintre toate cele pentru care flag-ul

aferent acesteia este setat.

Există de asemenea instrucţiuni de întrerupere care provoacă încheierea

prematură a unei bucle, sau de salt la sfârşitul unei iteraţii a buclei.

Adresa de start trebuie să fie aliniată în zona de memorie a

programului, în caz contrar un ciclu de întârziere va fi adăugat la execuţia

buclei pentru fiecare parcurgere a acesteia. Pentru alinierea adresei de start se

poate folosi directiva falign.

Page 114: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 7 – Procesorul de semnal StarCore 140 177

7.3 PREZENTAREA MEDIULUI DE DEZVOLTARE A

PROGRAMULUI. CODEWARRIOR

Pentru realizarea programului care simulează modul de funcţionare şi

implementarea pe procesorul de semnal StarCore SC140 se poate utiliza

mediul de dezvoltare al firmei Metrowerks, numit CodeWarior. Acest mediu

de dezvoltare integrează toate programele necesare pentru elaborarea

aplicaţiei: compilator, asamblor, linker şi în cele din urmă simulator.

Una din caracteristicile principale este abilitatea de a folosi programe

scrise în C ca sursă pentru obţinerea codului în asamblare. În figura de mai jos

este prezentată interfaţa programului când avem deschis un anumit proiect.

Figura 7-9 Interfaţa mediului de dezvoltare CodeWarrior

Aplicaţii ale procesoarelor de semnal în comunicaţii 178

La deschiderea unui anumit proiect, mediul de dezvoltare CodeWarrior

prezintă o fereastră principală unde putem vedea numele proiectului, precum

şi fişierele incluse în acesta, după cum se poate observa în jumătatea stângă

din figura de mai sus.

Jumătatea din dreapta figurii 7.10 prezintă două ferestre în care pe de o

parte putem vedea codul scris în fiecare din fişierele sursă (partea de sus a

figurii), iar pe de altă parte putem fi informaţi cu privire la diversele erori,

warning-uri sau remarci din partea mediului de dezvoltare după lansarea

procedurii de compilare a proiectului (partea de jos a figurii).

Pe lângă aceste ferestre amintite mai sus mediul de dezvoltare

Codewarrior prezintă şi alte ferestre cum ar fi cea aferentă procedurii de

depanare a proiectului sau fereastra de afişare a diferitelor rezultate, aşa cum

se prezintă în figurile de mai jos.

Figura 7-10 Fereasta pentru depanare proiect

Capitolul 7 – Procesorul de semnal StarCore 140 179

Figura 7-11 Fereastra pentru afişarea de rezultate

Mediul de dezvoltare de aplicaţii pentru procesoarele de semnal SC140,

CodeWarrior, prezintă mai multe facilităţi. Cea mai importantă dintre ele este

aceea potrivit căreia există posibilitatea de a scrie cod de program nu numai în

instrucţiunile de asamblare specifice procesorului utilizat ci şi în format C.

Graţie compilatorului programele scrise în limbajul C sunt convertite în

instrucţiuni de asamblare care pot rula pe procesor.

O scriere a codului fişierelor sursă în limbaj C presupune o muncă mai

puţină din partea unui programator, însă resursele procesorului nu vor mai fi

folosite cu eficienţă maximă.

Pentru rezolvarea compromisului dintre facilitatea de a scrie cod în

limbaj C şi folosirea eficientă a resurselor procesorului de semnal putem să ne

folosim de facilităţile de optimizare oferite de mediul de dezvoltare sau de

tehnici speciale de optimizare în C.

Figura 7.12 prezintă fereastra aferentă setărilor simulatorului

CodeWarrior, mai exact secţiunea nivelelor de optimizare disponibile.

Compilatorul oferă mai multe nivele de optimizarea şi anume:

• Level 0, cel mai simplu nivel de optimizare,când prectic nu este

activat nici un element pentru optimizare;

• Level 1, un nivel de otimizare mai ridicat, care nu prezintă însă şi

optimizări de tip “schedulling”, “pipelining” şi “bundling”;

Aplicaţii ale procesoarelor de semnal în comunicaţii 180

• Level 2, un nivel de optimizare similar celui anterior, care însă

presupune prezenţa şi celorlate tipuri de optimizări (“schedulling”,

“pipelining” şi “bundling”);

• Level 3, presupune o optimizare şi mai eficientă deoarece la

elementele specifice nivelului 2 se mai adaugă şi o alocare globală a

registrelor;

• Level 3 + Space, reprezintă un nivel de optimizare similar celui

anterior, cu deosebirea că se mai adaugă şi optimizarea privind

spaţiul ocupat de program în momoria procesorului de semnal.

Figura 7-12 Nivelele de optimizare oferite de mediul CodeWarrior

Mediul de dezvoltare Code Warrior presupune prezenţa mai multor

nivele de optimizare, începând de la cel mai simplu – care nu face nici o

Page 115: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 7 – Procesorul de semnal StarCore 140 181

optimizare, până la cele cu opţiuni mai complexe în care se ţine cont atât de

cerinţele viteză cât şi de cele de spaţiu ocupat de program. Se oferă o opţiune

de optimizare globală, pentru proiectele extinse care conţin mai multe fişiere

sursă, prin aceasta realizându-se o optimizare a întregii aplicaţii şi nu o serie

de optimizări ale fişierelor componente. Dacă alegerea nivelului de optimizare

este una dintre importantele facilităţi ale programului CodeWarrior,

posibilitatea de vizualizare a stării registrelor şi a memoriei reprezintă o altă

importantă facilitate oferită celor care dezvoltă aplicaţii.

În figura 7.13 este prezentată starea registrelor de uz general aferente

procesorului de semnal SC140.

Figura 7-13 Vizualizarea stării registrelor procesorului de semnal

Aplicaţii ale procesoarelor de semnal în comunicaţii 182

Posibilitatea de a vizualiza starea acestor registre este bine venită în

procedurile pentru depanarea proiectelor în lucru, şi ajută programatorul în

identificarea mai rapidă a diverselor erori de proiectare.

7.4 TEHNICI DE OPTIMIZARE ÎN C PENTRU PROCESORUL

DE SEMNAL SC140

Una dintre cele mai mari provocări în procesul de dezvoltare a unei

aplicaţii pentru procesoarele de semnal o constituie încadrarea timpului de

execuţie a programului într-un interval bine stabilit. La această cerinţă se

adaugă şi aceia ca memoria de program ocupată de aplicaţie să se încadreze la

rândul ei în limitele oferite de procesorul de semnal.

Cele două aspecte menţionate mai sus reprezintă o motivaţie importantă

în vederea luării în considerare a necesităţii de găsire de metode de optimizare

a programelor sub ambele aspecte, atât din punct de vedere al timpilor de

execuţie dar şi a memoriei de program ocupate de aplicaţie.

Implementarea unor proceduri de optimizare de cod presupune pe lângă

cele două aspecte prezentate şi obţinerea altor rezultate importante în ceea ce

priveşte utilizarea eficientă a procesorului, cum ar fi:

• reducerea structurilor de date utilizate în aplicaţia dezvoltată pe

procesorul de semnal

• reducerea mărimii memoriei ocupate în stivă

• reducerea puterii electrice consumate, ceea ce implică pe de o parte

o autonomie mai mare de lucru pentru echipamentele mobile, iar pe

de altă parte şi o durată de viaţă mai mare a sistemului electronic

proiectat.

Capitolul 7 – Procesorul de semnal StarCore 140 183

Limbajul C nu poate produce un cod în asamblare suficient de optim,

de fapt care să utilizeze la maximum resursele procesorului, deoarece limbajul

C nu posedă o suprapunere perfectă cu trăsăturile unui procesor de semnal.

Astfel spre deosebire de caracteristicile procesorului de semnal

StarCore SC140, în limbajul C nu avem prezente următoarele elemente:

• lucrul în virgulă fixă;

• nu este prezent suportul pentru arhitecturi duale de memorie;

• nu sunt prezente porturi speciale de intrare/ieşire, şi nici instrucţiuni

specializate;

• nu este prezent suportul pentru instrucţiuni de tipul SIMD (Single

Instruction Multiple Data).

Poate fi făcut ca limbajul C să fie eficient pentru un procesor de

semnal? Răspunsul la această întrebare este afirmativ, însă în condiţiile în

care programatorul, cel care dezvoltă aplicaţii pentru procesoarele de semnal,

înţelege şi stăpâneşte următoarele aspecte:

• extensiile compilatorului

• tehnicile de programare

• comportamentul compilatorului.

În cele ce urmează vom prezenta acele elemente de optimizare comune

unei clase suficient de largi de procesoarelor de semnal.

Funcţiile Intrinseci.

Sunt funcţii specifice prin care se realizează o extindere a operatorilor

din C. Această categorie de funcţii presupune definirea unor mulţimi de noi

tipuri de date (de exemplu precizie simplă, dublă şi extinsă pentru numere

Aplicaţii ale procesoarelor de semnal în comunicaţii 184

fracţionale). Utilizarea acestor funţii intrinseci asigură emularea programelor

şi pe alte platforme.

Utilizarea Pragmelor.

Prin pragma se înţelege un mod standard de comunicare cu un

compilator. Aceasta descrie nu numai caracteristicile codului scris în limbaj C

dar şi a datelor utilizate. Utilizarea pragmelor nu afectează cu nimic valoarea

rezultatelor, dar influenţează într-o măsură deosebit de importantă

performanţele programului, prin eficientizarea lui.

Asamblarea in linie.

Presupune tehnica prin care în interiorul codului scris în limbaj C se pot

introduce directive de asamblare, instrucţiuni de asamblare. Acest lucru se

poate realiza fie sub forma unei singure instrucţiuni în limbaj de asamblare,

fie sub forma unei întregi funcţii. Utilizarea directivelor de asamblare

presupune faptul că avem un acces special la unele caracteristici ale

procesorului, imposibil de utilizat în cazul folosirii funcţiilor intrinseci.

Elementele de optimizare prezentate mai sus se caracterizează prin

faptul că presupun introducerea unor linii de program de altă natură decât a

celor deja existente în cadrul codului sursă.

În cele ce urmează vom prezenta acele tehnici de optimizare care se

folosesc de codul existent, fără a introducere elemente suplimentare de altă

natură decât a celor deja existente.

Astfel avem următoarele tehnici de optimizare în C specifice

procesoarelor de semnal de uz general:

• loop merging;

• loop unrolling;

Page 116: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Capitolul 7 – Procesorul de semnal StarCore 140 185

Loop Merging.

Această tehnică presupune combinarea a două bucle într-una singură în

cazul în care cele două bucle sunt caracterizate de acelaşi număr de iteraţii.

Utilizarea acestei tehnici poate conduce la diminuarea timpului necesar

executării celor două bucle. Mai mult decât atât presupune o creştere a

eficienţei în ceea ce priveşte utilizarea cache-ului. Ca rezultat final, folosirea

tehnici de optimizare loop merging reduce mărimea codului aferent

programului scris în limbajul C. Figura 5.1 prezintă un exemplu de tehnică de

optimizare loop merging.

Figura 7-14 Exemplu de tehnică de optimizare loop merging

Loop Unrolling.

Este o tehnică de optimizare în C care presupune repetarea corpului

unei bucle în vederea asigurării premizelor necesare unei rulări în paralel a

mai multor instrucţiuni, în cadrul unui aceluiaşi ciclu instrucţiune. Este ştiut

faptul că în cazul procesoarelor de semnal sunt prezente blocuri specifice care

pot lucra în paralel, fiind astfel posibil realizarea, de exemplu, a două

Aplicaţii ale procesoarelor de semnal în comunicaţii 186

transferuri sau a patru instrucţiuni de calcul în paralel pe durata unui singur

ciclu instrucţiune.

Figura 7-15 Exemplu de tehnică de optimizare loop unrolling

Din figura 5.2, datorită faptului că am repetat o linie de program, reiese

faptul că programul nostru va ocupa mai mult în memoria de program a

procesorului. Cu toate acestea, datorită directivelor de aliniere a datelor, prin

utilizarea acestei tehnici vom obţine un timp de execuţie mai mic decât în

cazul în care aceasta nu ar fi folosită.

În cele ce urmează se vor prezenta două tehnici de optimizare în C

specifice arhitecturii familiei de procesoare de semnal StarCore. Este vorba de

următoarele tehnici de optimizare:

• split computation;

• multisample.

SplitComputation reprezintă o tehnică de optimizare în C utilizată în

aplicaţii care împlică calculul energiei şi erorii pătrate medii, sau în situaţii în

care se doreşte determinarea unui maxim.

Capitolul 7 – Procesorul de semnal StarCore 140 187

Figura 7-16 Exemplu de tehnică de optimizare split computation

Folosirea acestei tehnici de optimizare conduce la creşterea eficienţei,

în ceea ce priveşte utilizarea unităţii de calcul aritmetico-logice, DALU. Split

computation generează un cod care ocupă o zonă de memorie mai mare, însă

utilizată împreună cu directivele de aliniere a datelor, determină o

îmbunătăţire semnificativă în ceea ce priveşte timpul de execuţie.

Multisample reprezintă ultima tehnică de optimizare în C din cele

prezentate în acest paragraf. Domeniul de aplicabilitate al acestei tehnici de

optimizare este reprezentat de situaţiile în care o buclă operează în interiorul

alteia. Această tehnică de optimizare în limbajul C este una destul de

complexă, deoarece presupune o combinaţie între tehnicile de optimizare deja

prezentate mai sus:

• loop unroling pentru bucla exterioară;

• loop merging pentru bucla din interior;

• loop unroling pentru bucla din interior la care s-a aplicat tehnica

anterioară.

Aplicaţii ale procesoarelor de semnal în comunicaţii 188

Figura 7-17 Exemplu de tehnică de optimizare multisample

În urma aplicării acestei tehnici atât bucla cu numărul 1, cât şi bucla cu

numărul 2 se vor executa într-un singur ciclu instrucţiune, fiind posibilă

execuţia simultană a 4 operaţii de tip înmulţire cu acumulare, mac şi a două

operaţii de tip transfer, mov.

Această tehnică de optimizare mai este caracterizată şi de alte

trăsături. Este vorba în primul rând de faptul că utilizarea acestei metode nu

impune restricţii privind alinierea datelor. A doua caracteristică, evidenţiază

faptul că tehnica multisample, reduce numărul operaţiilor de transfer utilizate.

Limbajul C, prin tehnicile amintite, poate fi transformat într-un limbaj

C pentru procesoarele de semnal, adică un C care presupune o utilizare la

maxim a resurselor procesorului, în vederea obţinerii de performanţe maxime

în ceea ce priveşte dimensiunea codului din memoria de program şi mai ales

în ceea ce priveşte timpul de execuţie.

Page 117: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Introducere în arhitectura SC140Procesorul de semnal StarCore 140, produs al firmei Freescale, prezintă un nou tip de arhitectură, cu un plus de putere de calcul.

SC140 poate fi implementat pe o gamă largă de configuraţii SOC (System On Chip).

Pe un singur chip pot fi integrate, în funcţie de necesităţi, zone de memorie suplimentare, dar şi o gamă variată de porturi de I/O saualte periferice.

Schema bloc a unui sistem cu SC140

Level-1 Memory Expansion Area

Unified Data and Program MemoryROM, RAM

DSP Engine

True 16-bit instruction set

Star*Core 140 DSP Core

System

External Memory

DMA

CACHE

Peripheral and Accelerators Expansion AreaStandard Input/Output PeripheralsApplication Specific AcceleratorsGeneral Purpose Programmable Accelerator

4 Arithmetic

Expansion Area

Interface

Interrupt Ctrl.

Variable Length Execution Set (VLESTM) Model

Level-2 Memory Expansion

2 AddressArithmetic Units& Logic Units

Caracteristici ale SC140• frecvenţa de ceas a nucleului este 300 MHz la 1,5V şi 120 MHz la 0,9V;• până la 1200 Milioane operaţii MAC pe secundă (1.2 GMACS);• până la 3000 RISC MIPS (MAC se consideră ca 2 instrucţiuni RISC);

• 4 unităţi aritmetico-logice (ALU – Arithmetic Logic Unit) care includ circuitededicate de înmulţire şi adunare şi unităţi de operare pe bit;• circuitele MAC (Multiply and ACcumulate) din fiecare ALU, operează pe 40 biţi(16b � 16b + 40b);

• fiecare ALU conţine un shifter (structură de deplasare) pe 40 biţi;

• 16 Registre pe 40 biţi pentru operaţii cu numere întregi şi fracţionare;

• Moduri de adresare specifice procesoarelor de semnal;

• 16 Registre de adresă pe 32 biţi, dintre care 8 pot fi folosite ca adrese de bază;

• 4 Registre de offset pentru adrese şi 4 Registre pentru adresare circulară;

• 2 unităţi de adresare cu operaţii aritmetice cu numere întregi;

Oneinstruction

Set de instrucţiuni ortogonal cu instrucţiuni codate pe 16 biţi;

Model de executie Variable Length Execution Set (VLES)•Up to 6 instructions (8 words) can be executed in a single clock cycle.•Very rich 16-bit wide Orthogonal Instruction Set.

Zero overhead Hardware Loops with nesting of up to four loops.

Caracteristici ale SC140

Four instructions Six instructions • • •• • •

Page 118: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Schema Bloc a Nucleului

Instruction Bus

32 128 PAB

PDB

XA

BA

XD

BB

XD

BA

XA

BB

Secvenţiator de Program

Setul de registre pentru Generarea Adreselor

Registre ALU pentru date

2 AAU BMU 4 ALU

OnCE

Controlul Puterii

Generatorul de ceas

PLL

32 32 64 64 128

128

Spaţiul unificat de memorie pentru date şi program

24

Accelerator pentru setul de

instrucţiuni

StarCore 140

Reprezentarea datelor în precizie simplă:1 word = 16 biţi

-215 214 213

• • •

14 1315

21 20

1 0

Most Positive Integer215 - 1 = $7FFF

Most Negative Integer- 215 = $8000

• BinaryPoint

SIGN

Intregi cu semn:

Reprezentarea datelor în precizie simplă:1 word = 16 biţi

Intregi făra semn:

215 214 213

• • •

14 1315

21 20

1 0

Largest Unsigned Integer216 - 1 = $FFFF

Smallest Unsigned Integer0 = $0000

Reprezentarea datelor în precizie simplă:1 word = 16 biţi

Numere fracţionare cu semn:

-20 2-1 2-2

• • •

14 1315

2-14 2-15

1 0Bit

Number

Largest Signed Fraction1 - 2-15 = $7FFF

Most Negative Fraction-1 = $8000

RadixPoint Fraction

SIGN

Page 119: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Interpretarea valorilor operanzilor pe 16-biţi

The following equation shows the relationship between a 16-bit integer and a fractional value:

Fractional Value = Integer Value / (215)

BinaryRepresentation

HexadecimalRepresentation

Integer Value(Decimal)

FractionalValue (Decimal)

0.100 0000 0000 0000 0x4000 16384 0.50.010 0000 0000 0000 0x2000 8192 0.250.001 0000 0000 0000 0x1000 4096 0.1250.000 0000 0000 0000 0x0000 0 0.01.100 0000 0000 0000 0xC000 -16384 -0.51.110 0000 0000 0000 0xE000 -8192 -0.251.111 0000 0000 0000 0xF000 -4096 -0.125

Reprezentarea datelor în precizie dublă:format long = 32 biţi

Numere întregi cu semn:

-231 230 229

• • •

30 2931

21 20

1 0

Most Positive Integer231-1 = $7FFFFFFF

Most Negative Integer- 231 = $80000000

SIGN

Reprezentarea datelor în precizie dublă:format long = 32 biţi

Numere întregi fără semn:

231 230 229

• • •

30 2931

21 20

1 0

Largest Unsigned Integer232 -1 = $FFFFFFFF

Smallest Unsigned Integer0 = $00000000

Reprezentarea datelor în precizie dublă:format long = 32 biţi

Numere fracţionare cu semn:

-20 2-1 2-2

• • •

30 2931

2-30 2-31

1 0Bit

Number

Largest Signed Fraction1 - 2-31 = $7FFFFFFF

Most Negative Fraction-1 = $80000000

RadixPoint Fraction

SIGN

Page 120: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Arhitectura ALU de date

Memory data bus 1 (XDBA)Memory data bus 2 (XDBB)

64 64

40 4040 40

64 64

Data Register File

ALU ALU ALUALU

Shifter/Limiter

40 40

40 4040 40

L0 D0.e D0.h D0.lL1 D1.e D1.h D1.lL2 D2.e D2.h D2.lL3 D3.e D3.h D3.lL4 D4.e D4.h D4.lL5 D5.e D5.h D5.lL6 D6.e D6.h D6.lL7 D7.e D7.h D7.lL8 D8.e D8.h D8.lL9 D9.e D9.h D9.lL10 D10.e D10.h D10.lL11 D11.e D11.h D11.lL12 D12.e D12.h D12.lL13 D13.e D13.h D13.lL14 D14.e D14.h D14.lL15 D15.e D15.h D15.l

Modelul de programare Data ALU

39 32 16 15 0

Reprezentarea în registrele de date:d0 – d15 (40 biţi)

Numere întregi cu semn:

-239

• • •

38 3239

21 20

1 0

Most Positive Integer239 -1 = $7FFFFFFFFF

Most Negative Integer-239 = $8000000000

SIGN

• • •

31

231238

Reprezentarea în registrele de date:d0 – d15 (40 biţi)

Numere raţionale cu semn:

-28 2-1

• • •

38 3239

2-30 2-31

1 0Bit

Number

Largest Value256 - 2-31 = $7FFFFFFFFF

Most Negative Value-256 = $8000000000

RadixPoint Fraction

SIGN

• • •

31

2027

Integer

Page 121: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Reprezentarea în registrele de date:d0 – d15 (40 biţi). Exemple.

Decimal Fraction 40-Bit Binary Value

Hexadecimal Representation

12.5 000001100.1000000 • • • 0000 $06400000001.5 000000001.1000000 • • • 0000 $00C00000000.5 000000000.1000000 • • • 0000 $0040000000-0.5 111111111.1000000 • • • 0000 $FFC0000000-1.5 111111110.1000000 • • • 0000 $FF40000000-12.5 111110011.1000000 • • • 0000 $F9C0000000

Transferul operanzilor pe 16 biţi în registrele de date

Reprezentarea numerelor fracţionare cu semn

Reprezentarea numerelor întregi cu semn

Operand pe 16 biţi în memorie

Reprezentarea pe 40 de biţi (D0 – D15)

Operand pe 16 biţi în memorie

Reprezentarea pe 40 de biţi (D0 – D15)

MOVE.F (R0),D0

MOVE.W (R0),D0

1 0...0 0 0 . . . 0 0

150 1 1 ... 1 11 0 0 ... 0 0

1 0 0 ... 0 0

Aritmetica cu saturare

Făra limitare:

Dx = +1.0

= -1.0

|Error| = 2.0

0...0 0 0 . . . 0 015 01632

Dx.h

31

= +0.9999999

|Error| = 0.0000001

Cu limitare:

15 0

Dx.lDx.e

391 0 0 ... 0 0 Dx = +1.0

15 01632

Dx.h

31

0

Dx.lDx.e

39

Lx1Lx

MOVE.F D0,(R0) MOVES.F D0,(R0)

Unitatea de Generare a Adreselor (AGU)

Page 122: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Modelul de Programare AGU031

ADDRESS REGISTERS

R0

R2R3

R1

R4R5R6R7

SP (NSP, ESP)

MODIFIER and MODIFIER CONTROL REGISTERS

031M0M1M2

MCTLM3

ADDRESS REGISTERS / BASE ADDRESS REGISTERS

031R8 / B0

R10 / B2R11 / B3

R9 / B1

R12 / B4R13 / B5R14 / B6R15 / B7

N0N1

031

N2N3

OFFSET REGISTERS

Transferul pe magistralele de date

• Two data memory buses are used for all data transfers between the core and memory.•32-bit data memory address bus A (XABA) and 64-bit data memory data bus A (XDBA) •32-bit data memory address bus B (XABB) and 64-bit data memory data bus B (XDBB)

• Data are byte-addressable by the two data memory buses.

Unified Data / Program

Memory

XABA

XDBA

XABB

XDBB

32

64

64

32

Core

Transferul pe magistralele de date

• Four data width accesses are supported: byte (8 bits), word (16 bits), long word (32 bits), and double-long word or four-word (64 bits).

$0 MOVE.B ($4),D0

$10 MOVE.W ($16),D0

$18 MOVE.2W (R0),D0:D1 ;R0=$18

$20 MOVE.4W (R0),D0:D1:D2:D3 ;R0 =$20

$30 MOVE.L ($30),D0

$38 MOVE.2L (R0),D0:D1 ;R0 = $38

Interfaţa memorie - nucleu

Page 123: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Unitatea de control a execuţiei programului

PC

LC3LC2LC1LC0

SA3SA2SA1SA0

EMRSR

PROGRAM COUNTER

LOOP COUNTER REGISTERSSTART ADDRESS REGISTERS

STATUS REGISTER EXCEPTION AND MODE REGISTER

31 0

31 0 31 0

31 0 31 0

Status Register

31 30-27 26-24 23-21 20 19 18 17-12 11-8 7 6 5 4 3 2 1 0SLF LF[3:0] Rsvd I[2:0] OVE DI EXP Rsvd VF[3:0] Rsvd S S1 S0 RM AS T C

SLF - Short Loop FlagLF[3:0] - Loop Flags

I[2:0] - Interrupt MaskOVE - Overflow Exception Enable

DI - Disable InterruptsEXP - Exception Mode bit

VF[3:0] - Viterbi FlagsS - Scaling Bit

S1, S0 - Scaling Mode BitsRM - Rounding Mode

AS -Arithmetic Saturation ModeT - True Bit

C - Carry Bit*Rsvd - Reserved (derivative dependant)

Exception and Mode Register

31-24 23-17 16 15-4 3 2 1 0Reserved GP[6:0] BEM Reserved NMID DOVF ILST ILN

GP - General Purpose FlagsBEM - Big Endian Memory

NMID - NMI DisableDOVF - DALU overflow

ILST - Illegal Execution SetILN - Illegal Instruction

Execuţia PipelinePROGRAMPRE-FETCH

PROGRAMFETCH

DISPATCH& DECODE

ADDRESSGENERATION

EXECUTE

- Short, efficient pipeline

- No arithmetic interlocks

- Short change of flow

- Consistent pipeline

Page 124: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Etapele PipelineMagistrala de instrucţiuni

• A 128-bit Program Data Bus (PDB) and a 32-bit Program Address bus (PAB) areused to carry program words from memory to the core.

• A fetch set, an eight-word instruction set, is fetched from memory every clock cycle. • The Program Sequence Controller Unit (PSEQ) in the core automatically detects

that a portion of the fetch set, called an execution set, can be executed in parallel.

32 128PAB PDB

Unified Data/Program Memory

Core

128-bit Fetch Set

Eight-word Fetch Set32-bit Address

Fetch Set and Execution Set

Instr#N

Instr#N+1

Instr#N+2

Instr#N+3

Instr#N+4

Instr#N+5

Instr#N+6

Instr#N+7

Instr#N

Instr#N+1

Instr#N+2

Instr#N+3

Instr#N+4

Instr#N+5

Instr#N+6

Instr#N+7

Variable Length Execution Set - VLES

Instruction Fetch Set (8 words)

Program Memory Data Bus - PDB

End of VLES #M-17 words

VLES #M4 words

Start of VLES #M+18 words

Exemple de seturi de execuţie

Page 125: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Long Loop:dosetup0 _ start0doen0 #$10move.w (r3)+,d1skipls _end0loopstart0

SA _start0mac d0,d1,d2 move.w (r0)+,d0add d5,d6,d4 move.w (r1)+,d5sub d3,d2,d4 inc d5 LPMARKBmac d0,d1,d6 move.w (r0)+,d7

LA sub d5,d4,d4 inc d7loopend0

_end0

Loop Examples Loop ExamplesShort Loop, two execution sets:

doensh0 #$10...loopstart0

SA mac d0,d1,d2 move.w (r0)+,d0 LPMARKBLA add d5,d6,d4 move.w (r1)+,d5

loopend0

Short Loop, one execution set:

doensh0 #$10...loopstart0

SA, LA mac d0,d1,d2 move.w (r0)+,d0 LPMARKAloopend0

CONT LBL

Iteration and Termination of Loops (1 of 2)

LBL LBL

LC > 1 LC ≤ 1

SA

Jumps to SA and decrements LC Jumps to LBL and clears active LF and LC.

.

.

.

.

CONT LBL

.

.

.

.

loostart0

loopend0

loostart0

loopend0

Iteration and Termination of Loops (2 of 2)

LBL

Jumps to LBL and clears the active LF.

BREAK LBL

loopstart0

loopend0

Page 126: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Looping Restrictions

Loop nesting:

• Nested loops can’t end in the same last address.• Loops must be nested in a specific order: a loop can be nested only inside a loop with a smaller number.

Loop 0

Loop2

Loop3

Stack Support (1 of 4)Normal mode stack:

Exception mode stack:

Increasingaddresses

ESP

Shadow ESPShadow ESPShadow ESP

Last stacked value - 8 bytes

Last stacked value - 8 bytes

Increasingaddresses

NSP

ShadowShadowShadow NSPNSPNSP1Valid bit

1Valid bit

Stack Support (2 of 4)

Increasingaddresses

SP

DeIncreasingaddresses

SP

PUSH De

De → (SP)SP + 8 → SP

Do

PUSH Do

Do → (SP+4)SP + 8 → SP

Stack Support (3 of 4)

Increasingaddresses

SP

DeIncreasingaddressesSP

POP De

(SP - 8) → DeSP-8 → SP

Do

POP Do

(SP - 4) → DoSP-8 → SP

Page 127: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Stack Support (4 of 4)

• Special Push and Pop instructions that access the normal stack regardless of mode- Allows the OS to use the normal stack in the “exception” mode

PUSHN DePUSHN Do

• Transfer instruction to move to or from the “OSP” (Other Stack Pointer)- Allows the stack pointers to be written

TFRA R0,OSP ; If current SP is ESP, then OSP will be NSP

Fast Return from Subroutine

PC (return address) and SRSP

PC (return address)RAS

Active Stack

SP

XXXX..……….XXXRAS

Active Stack

Jump to Subroutine:Before: After:

Return from Subroutine (RTS):

PC (return address) and SRSP

PC (return address)RAS

Active Stack

SP decrements by 8 bytes

RAS value is put into PCRAS becomes invalid

0 1

0

Valid bitValid bit

Valid bit

Uneltele de dezvoltare software

• Pentru realizarea de programe pe SC140 există un compilator C capabil să convertească codul din C în limbaj de asamblare optimizat.

• Într-un proiect pot fi incluse funcţii scrise în C şi programe (optimizate) scrise în limbaj de asamblare

• Pentru operaţiile cu numere fracţionare sunt introduse tipuri noi de date si funcţii intrinseci care emulează aritmetica în virgulă fixă.

Date fracţionare Tip echivalent în CWord16 shortWord32 long/int

• Iniţializarea variabilelor cu valori de tip fracţionar se face cu macrourile WORD16() sau WORD32(). De exemplu:

Word16 x = WORD16(0.5)iniţializează variabila x cu valoarea hexa 0x4000

• Funcţiile intrinseci diferenţiază operaţiile cu întregi de operaţiile cu numere fracţionare:

Page 128: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

• Funcţiile intrinseci şi tipurile de date asociate numerelor fracţionare sunt declarate în fişierul prototype.h

Word16 mult(Word16 var1, Word16 var2);mult

Word16 max(Word16 var1, Word16 var2);max

Word16 mac_r(Word32 L_var3,Word16 var1, Word16 var2);mac_r

Word32 L_msu(Word32 L_var3, Word16 var1, Word16 var2);L_msu

Word32 L_mac(Word32 L_var3, Word16 var1, Word16 var2);L_mac

Word16 extract_l(Word32 L_var1); extract_l

Word16 extract_h(Word32 L_var1); extract_h

Word16 div_s(Word16 var1, Word16 var2);div_s

Word16 add(Word16 var1, Word16 var2)add

Word16 abs_s(Word16 var1)abs_s

Page 129: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Tehnici de optimizare C pentru StarCore SC140

Creat de Bogdan Costinescu

Dezvoltarea de aplicaţii pe DSP

• Compromis între: – încadrarea timpului de execuţie a programului într-un

interval bine stabilit şi – cerinţa ca memoria de program ocupată de aplicaţie să se

încadreze în limitele impuse de procesorul de semnal.

• Necesitatea de găsire de metode de optimizare a programelor sub ambele aspecte, atât din punct de vedere al timpilor de execuţie dar şi a memoriei de program ocupate de aplicaţie.

Ce înseamnă optimizarea?

• reducerea timpului de execuţie• reducerea dimensiunii codului• reducerea dimensiunii datelor• reducerea memoriei alocate stivei• reducerea consumului de memorie

Limbajul C pentru programarea DSP

• C este un limbaj de programare structurat gândit să realizeze o translaţie compactă şi eficientă a unui program în limbaj maşină

• Limbaj de nivel înalt dar apropiat de nivelul de asamblare

• Există o gama largă de medii de dezvoltare C• Flexibil, portabil => programele pot fi reutilizate

Page 130: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Arhitecturi DSP “prietenoase” pentrucompilatorul C

• număr mare de registre• set de registre ortogonale• moduri de adresare flexibile• puţine restricţii de execuţie a instrucţiunilor• suport pentru for diversele tipuri de date

Exemplu - StarCore SC140

• Arhitectura Variable Length Execution Set (VLES)– un set de execuţie poate efectua până la:

• patru instrucţiuni DALU• două instrucţiuni AGU

• arhitectură scalabilă cu set bogat de instrucţiuni• set de registre ortogonal (independente)

– 16 registre de date DALU (d0 – d15)– 16 + 4 + 4 registre AGU (r0 – r15, n0 – n3, m0 – n3)

• etape puţine pipeline => nu apar conflicte• suport hardware pentru întregi şi fracţionare

Exemplu - StarCore SC140[move.4f (r0)+,d0:d1:d2:d3move.4f (r1)+,d4:d5:d6:d7]

LOOPSTART3 [

mac d0,d4,d8mac d1,d5,d9mac d2,d6,d10mac d3,d7,d11move.4f (r0)+,d0:d1:d2:d3move.4f (r1)+,d4:d5:d6:d7

]LOOPEND3

[mac d0,d4,d8mac d1,d5,d9mac d2,d6,d10mac d3,d7,d11

]

Este C potrivit pentru DSPuri?

• Limbajul C nu poate produce un cod în asamblare optim, care să utilizeze la maximum resursele procesorului.

• De exemplu în limbajul C nu sunt prezente:– lucrul în virgulă fixă;– nu este prezent suportul pentru arhitecturi duale de

memorie;– nu sunt prezente porturi speciale de intrare/ieşire, şi nici

instrucţiuni specializate;– nu este prezent suportul pentru instrucţiuni de tipul SIMD

(Single Instruction Multiple Data).

Page 131: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Eficienţa C pentru paralelism

• practic, NU EXISTĂ• C = un limbaj de programare secvenţial

– nu pot fi exprimate acţiuni în paralel– nu există echivalent pentru instrucţiuni SIMD

• Compilatorul trebuie să analizeze planificarea operaţiilor independente– analiza depinde de stilul de programare

c = a * b;d = b + c;e = a * a;

sunt independente, pot fi efectuate în paralel

depinde de rezultatul operaţiei anterioare

Poate fi făcut C eficient pentru DSP?

DA,• în condiţiile în care programatorul, cel care

dezvoltă aplicaţii pentru procesoarele de semnal, înţelege şi stăpâneşte următoarele aspecte:– extensiile compilatorului– tehnicile de programare– comportamentul compilatorului.

Extensiile compilatorului

• funcţiile intrinseci – acces eficient la setul de instrucţiuni

• tipuri noi de date– folosirea formatelor de date specifice DSP în C

• pragme– indică informaţii suplimentare compilatorului

• asamblare inline– soluţia la o problemă “imposibil” de rezolvat în C

Funcţii intrinseci

• Sunt funcţii speciale prin care compilatorul realizează o mapare în C a instrucţiunilor din asamblare specifice operaţiilor pe precizie finită.

• Această categorie de funcţii presupune definirea unor mulţimi de noi tipuri de date– precizie simplă, dublă şi extinsă pentru numere

fracţionale.

• Utilizarea acestor funţii intrinseci asigură emularea programelor şi pe alte platforme.

Page 132: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Tipuri de date

• pentru DSP există mai multe formate de date– identice cu tipurile de bază C

• integers– de aceeaşi lungime dar cu semnificaţie diferită

• fractionare pe 16 şi 32 biţi– specifice DSP (de ex. incluzând partea de extensie)

• fractionare pe 40 biţi

• pentru toate tipurile specifice DSP sunt definite seturi de operaţii

Tipuri de date C pentru nr. fracţionare

• convenţii:– Word16 pentru fracţii pe 16 biţi– Word32 pentru fracţii pe 32 biţi– Word40 pentru fracţii pe 40 biţi (32 biţi plus 8 biţi gardă)– Word64 pentru fracţii pe 64 biţi (nu sunt direct

reprezentabile pe SC140)

• Funcţiile intrinseci sunt cele care stabilesc formatul fracţionar pentru operanzi

Tipuri fracţionare şi Operatori

• introduşi prin funcţiile intrinseci fracţionare• operatorii standard (ITU-T, ETSI)

– adunare, înmulţire– saturare, rotunjire– scalare, normalizare

• operează pe tipuri specifice de dateWord16 add(Word16, Word16);Word32 L_add(Word32, Word32);Word40 X_add(Word40, Word40);Word64 D_add(Word64, Word64);

Pragme• Prin pragme se înţelege un mod standard de

comunicare cu un compilator. • Acestea descriu nu numai caracteristicile

codului scris în limbaj C dar şi a datelor utilizate.

• Utilizarea pragmelor nu afectează cu nimic valoarea rezultatelor, dar influenţează într-o măsură deosebit de importantă performanţele

#pragma align signal 8#pragma loop_unroll 4#pragma inline#pragma loop_count (20, 40, 4)

Page 133: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Pragme pentru alinierea datelor

• #pragma align ptr 8– pentru alinierea în memorie la declararea vectorilor

• Permit folosirea transferurilor cu mai multe cuvinte

Word16 x[12] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};#pragma align x 8

08

16

x[0]x[1]x[2]x[3]x[4]x[5]x[6]x[7]x[8]x[9]x[10]x[11]

move.4f (r0)+,d0:d1:d2:d3

Pragme pentru alinierea datelor• #pragma align *ptr 8

– pentru parametri transmişi funcţiilor prin adresă– compilatorul consideră că vectorii au fost aliniaţi în

programul care apelează funcţia

#define LENGTH 10Word16 x[LENGTH], y[LENGTH];#pragma align x 8#pragma align y 8int main(void){Word32 result;…

result = Prod(&x[0],&y[0]);…return 0;}

Word32 Prod(Word16 a[], Word16 b[]){#pragma align *a 8#pragma align *b 8Word16 j;Word32 res_rout = 0;for(j=0; j<LENGTH; j++)

{res_rout += a[j] * b[j];}

return res_rout;}

Asamblarea Inline

• Presupune tehnica prin care în interiorul codului scris în limbaj C se pot introduce directive de asamblare, instrucţiuni de asamblare.

• Acest lucru se poate realiza:– sub forma unei singure instrucţiuni

• asm(“ di”);– sub forma unei întregi funcţii.

• Acces dificil la simboluri locale în funcţii– datele globale pot fi accesate prin numele lor

Asamblarea Inline

• Utilizarea directivelor de asamblare presupune faptul că avem un acces special la unele caracteristici ale procesorului, imposibil de utilizat în cazul folosirii funcţiilor intrinseci.

• convenţii de apelare speciale• integrarea rapidă a funcţiilor în asamblare cu

programele C

Page 134: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Asamblare Inline - Exempluasm Flag GetOverflow(void){asm_header

return in $d0;.reg $d0,$d1;asm_body

clr d0 ; extra cycle needed to allow DOVF to ; be written even by the instructions; in the delay slot of JSRD

bmtsts #$0004,EMR.L ; test the Overflow bit from EMRmove.w #1,d1tfrt d1,d0 ; if Overflow return 1, else return 0

asm_end}

Optimizări făcute de compilator

• optimizările standard din C• optimizări (low level) specifice arhitecturii• mai multe niveluri de optimizarea disponibile

– pentru un cod mai rapid– pentru un cod mai mic

• optimizări globale– toate fişierele sunt analizate ca un întreg

Obţinerea de aplicaţii optimizate pe DSP

• arhitectură DSP performantă• compilator cu grad mare de optimizare• stilul de scriere a codului sursă C

⇒singurul factor dependent de programator• scrierea codului C trebuie să respecte unele

tehnici de programare precizate în manualul compilatorului pentru– eliminarea dependenţelor datelor– completarea operaţiilor făcute de compilator pentru

structurarea codului

Tehnici de programare pentru SC140

• tehnici generale aplicabile DSP– loop merging– loop unrolling– loop splitting

• tehnici specifice StarCore– split computation– multisample

Page 135: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Loop Merging

• combinarea a două bucle într-una singură– dacă cele două bucle sunt caracterizate de acelaşi număr

de iteraţii. – se poate diminua timpul necesar executării celor două

bucle.

• reduce întârzierile pentru iniţializarea buclelor• creşte utilizarea registrelor DALU• reduce mărimea codului

Loop Merging - Exemplu/* scaling loop */for ( i = 0; i < SIG_LEN; i++){

y[i] = shr(y[i], 2);}/* energy computation */e = 0;for ( i = 0; i < SIG_LEN; i++){

e = L_mac(e, y[i], y[i]);}

/* Compute in the same time the *//* energy of the scaled signal */e = 0; for (i = 0; i < SIG_LEN; i ++) {

Word16 temp;temp = shr(y[i], 2);e = L_mac(e, temp, temp); y[i] = temp;

}

Loop Unrolling

• repetarea conţinutului unei bucle • permite gruparea mai multor instrucţiuni pentru

ca acestea sa se execute în paralel, în cadrul unui aceluiaşi ciclu instrucţiune.

• creşte utilizarea DALU• creşte dimensiunea codului• depinde de

– dependenţele datelor între iteraţii– alinierea elementelor vectorilor– presiunea pe registrele DALU pe iteraţie– numărul de itaraţii

• păstrează precizia operaţiilor

Loop Unrolling -Exemplu

int i;Word16 signal[SIGNAL_SIZE];Word16 scaled_signal[SIGNAL_SIZE];/* ... */for(i=0; i<SIGNAL_SIZE; i++){

scaled_signal[i] = shr(signal[i], 2);}/* ... */ int i;

Word16 signal[SIGNAL_SIZE];#pragma align signal 8Word16 scaled_signal[SIGNAL_SIZE];#pragma align scaled_signal 8/* ... */for(i=0; i<SIGNAL_SIZE; i+=4){

scaled_signal[i+0] = shr(signal[i+0], 2);scaled_signal[i+1] = shr(signal[i+1], 2);scaled_signal[i+2] = shr(signal[i+2], 2);scaled_signal[i+3] = shr(signal[i+3], 2);

}/* ... */

Page 136: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Compiler generated code; Without loop unrolling : 6 cycles ; inside the looploopstart3 L5[ add #<2,d3 ;[20,1]move.l d3,r2;[20,1]move.l <_signal,r1 ;[20,1]] move.l <_scaled_signal,r4adda r2,r1 [ move.w (r1),d4 adda r2,r4 ] asrr #<2,d4move.w d4,(r4)loopend3

; With loop unrolling : 2 cycles inside; the loop. ; The complier uses software pipelining[move.4f (r0)+,d0:d1:d2:d3move.l #_scaled_signal,r1

][

asrr #<2,d0 asrr #<2,d3asrr #<2,d1 asrr #<2,d2

]loopstart3

[moves.4f d0:d1:d2:d3,(r1)+move.4f (r0)+,d0:d1:d2:d3

][

asrr #<2,d0 asrr #<2,d1asrr #<2,d2 asrr #<2,d3

]loopend3

moves.4f d0:d1:d2:d3,(r1)+

Loop unrolling

• permite specificarea explicită a folosirii de către compilator a operaţilor în paralel

• factroul de desfacere a buclei depinde de – alinierea datelor– numărul de transferuri cu memoria– numărul de operaţii aritmetice– numărul de iteraţii

• se face unroll până nu mai rezultă nici o îmbunătăţire

• în general se face unroll cu un factor 2 sau 4

Loop Unroll Factor – example 1#include <prototype.h>#define VECTOR_SIZE 40Word16 example1(Word16 a[], Word16 incr) {

short i;Word16 b[VECTOR_SIZE];for(i = 0; i < VECTOR_SIZE; i++) {b[i] = add(a[i], incr);

}return b[0];

}

Loop Unroll Factor - example 2#include <prototype.h>#define VECTOR_SIZE 40Word16 example2(Word16 a[], Word16 incr) {#pragma align *a 8

int i;Word16 b[VECTOR_SIZE];#pragma align b 8for(i = 0; i < VECTOR_SIZE; i++) {b[i] = add(a[i], incr);

}return b[0];

}

; compiler generated codemove.4f (r0)+,d4:d5:d6:d7...loopstart3 [

add d4,d8,d12add d5,d8,d13add d6,d8,d14add d7,d8,d15moves.4f d12:d13:d14:d15,(r1)+move.4f (r0)+,d4:d5:d6:d7

]loopend3

Page 137: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Loop Unroll Factor - example 3#include <prototype.h>#define VECTOR_SIZE 40Word16 example3(Word16 a[], Word16 incr) {#pragma align *a 8

int i;Word16 b[VECTOR_SIZE];#pragma align b 8for(i = 0; i < VECTOR_SIZE; i++) {b[i] = a[i] >> incr;

}return b[0];

}

; compiler generated codeloopstart3 [

move.4w d4:d5:d6:d7,(r1)+move.4w (r0)+,d4:d5:d6:d7

][

asrr d1,d4asrr d1,d5asrr d1,d6asrr d1,d7

]loopend3

Split Computation

• aplicaţii tipice în calculul:– energiei– erorii pătratice medii– maximului

• creşte utilizarea DALU• creşte dimensiunea codului• poate necesita alinierea datelor• poate influenţa precizia

Split Computation

• De exemplu calculul energiei unui semnal:

• Formula este echivalentă cu separarea în 4 sume

( )1

2

0

N

e x i−

= ∑

( ) ( ) ( ) ( )1

2 2 2 2

0,4,8...1 3 3

N

ie x i x i x i x i

=

= + + + + + +∑

int i; Word32 e;Word16 signal[SIGNAL_SIZE];/* ... */ e = 0;for(i = 0; i < SIGNAL_LEN; i++) {

e = L_mac(e, signal[i], signal[i]);}/* the energy is now in e */

int i; Word32 e0, e1, e2, e3;Word16 signal[SIGNAL_SIZE];#pragma align signal 8/* ... */e0 = e1 = e2 = e3 = 0;for(i = 0; i < SIGNAL_LEN; i+=4) {

e0 = L_mac(e0, signal[i+0], signal[i+0]);e1 = L_mac(e1, signal[i+1], signal[i+1]);e2 = L_mac(e2, signal[i+2], signal[i+2]);e3 = L_mac(e3, signal[i+3], signal[i+3]);

}e0 = L_add(e0, e1);e1 = L_add(e2, e3);e0 = L_add(e0, e1);/* the energy is now in e0 */

Split Computation Example

Page 138: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Câte separări?

• depinde de alinierea în memorie• numărul de iteraţii trebuie să fie multiplu de

numărul de separări a sumei• sumele calculate separat trebuie recombinate

pentru a obţine rezultatul final

Multisample

• transformarea codului pentru bucle efectuate una în interiorul alteia

• Etape– loop unroling pentru bucla exterioară;– loop merging pentru bucla din interior;– loop unroling pentru bucla din interior la care s-a aplicat

tehnica anterioară.

• păstrează precizia rezultatelor• nu necesită alinierea datelor în memorie• reduce numărul de operaţii de transfer al

datelor

Multisample Example - Step 1Word32 acc;Word16 x[], c[];int i,j,N,T;assert((N % 4) == 0);assert((T % 4) == 0);for (j = 0; j < N; j++) {acc = 0; for (i = 0; i < T; i++) {

acc=L_mac(acc,x[i],c[j+i]);}res[j] = acc;

}

for (j = 0; j < N; j += 4) {acc0 = 0; for (i = 0; i < T; i++)

acc0 = L_mac(acc0, x[i], c[j+0+i]);res[j+0] = acc0;acc1 = 0; for (i = 0; i < T; i++)

acc1 = L_mac(acc1, x[i], c[j+1+i]);res[j+1] = acc1;acc2 = 0; for (i = 0; i < T; i++)

acc2 = L_mac(acc2, x[i], c[j+2+i]);res[j+2] = acc2;acc3 = 0; for (i = 0; i < T; i++)

acc3 = L_mac(acc3, x[i], c[j+3+i]);res[j+3] = acc3;

}

1 2

Outer loop unrolling

for (j = 0; j < N; j += 4) {acc0 = 0; for (i = 0; i < T; i++)

acc0 = L_mac(acc0, x[i], c[j+0+i]);res[j+0] = acc0;acc1 = 0; for (i = 0; i < T; i++)

acc1 = L_mac(acc1, x[i], c[j+1+i]);res[j+1] = acc1;acc2 = 0; for (i = 0; i < T; i++)

acc2 = L_mac(acc2, x[i], c[j+2+i]);res[j+2] = acc2;acc3 = 0; for (i = 0; i < T; i++)

acc3 = L_mac(acc3, x[i], c[j+3+i]);res[j+3] = acc3;

}

Multisample Example - Step 2

for (j = 0; j < N; j += 4) {acc0 = 0; acc1 = 0;acc2 = 0; acc3 = 0; for (i = 0; i < T; i++)

acc0 = L_mac(acc0, x[i], c[j+0+i]);for (i = 0; i < T; i++)

acc1 = L_mac(acc1, x[i], c[j+1+i]);for (i = 0; i < T; i++)

acc2 = L_mac(acc2, x[i], c[j+2+i]);for (i = 0; i < T; i++)

acc3 = L_mac(acc3, x[i], c[j+3+i]);res[j+0] = acc0;res[j+1] = acc1;res[j+2] = acc2;res[j+3] = acc3;

}

23

Rearrangement

Page 139: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Multisample Example - Step 3for (j = 0; j < N; j += 4) {acc0 = 0; acc1 = 0;acc2 = 0; acc3 = 0; for (i = 0; i < T; i++)

acc0 = L_mac(acc0, x[i], c[j+0+i]);for (i = 0; i < T; i++)

acc1 = L_mac(acc1, x[i], c[j+1+i]);for (i = 0; i < T; i++)

acc2 = L_mac(acc2, x[i], c[j+2+i]);for (i = 0; i < T; i++)

acc3 = L_mac(acc3, x[i], c[j+3+i]);res[j+0] = acc0;res[j+1] = acc1;res[j+2] = acc2;res[j+3] = acc3;

}

3

for (j = 0; j < N; j += 4) {acc0 = 0; acc1 = 0;acc2 = 0; acc3 = 0; for (i = 0; i < T; i++) {

acc0 = L_mac(acc0, x[i], c[j+0+i]);acc1 = L_mac(acc1, x[i], c[j+1+i]);acc2 = L_mac(acc2, x[i], c[j+2+i]);acc3 = L_mac(acc3, x[i], c[j+3+i]);

}res[j+0] = acc0;res[j+1] = acc1;res[j+2] = acc2;res[j+3] = acc3;

}

4

Inner loop mergingMultisample Example - Step 4

for (j = 0; j < N; j += 4) {acc0 = 0; acc1 = 0;acc2 = 0; acc3 = 0; for (i = 0; i < T; i++) {

acc0 = L_mac(acc0, x[i], c[j+0+i]);acc1 = L_mac(acc1, x[i], c[j+1+i]);acc2 = L_mac(acc2, x[i], c[j+2+i]);acc3 = L_mac(acc3, x[i], c[j+3+i]);

}res[j+0] = acc0;res[j+1] = acc1;res[j+2] = acc2;res[j+3] = acc3;

}

4

Inner loop unrolling

for (j = 0; j < N; j += 4) {acc0 = 0;acc1 = 0;acc2 = 0;acc3 = 0; for (i = 0; i < T; i += 4) {

acc0 = L_mac(acc0, x[i+0], c[j+0+i]);acc1 = L_mac(acc1, x[i+0], c[j+1+i]);acc2 = L_mac(acc2, x[i+0], c[j+2+i]);acc3 = L_mac(acc3, x[i+0], c[j+3+i]);acc0 = L_mac(acc0, x[i+1], c[j+1+i]);acc1 = L_mac(acc1, x[i+1], c[j+2+i]);acc2 = L_mac(acc2, x[i+1], c[j+3+i]);acc3 = L_mac(acc3, x[i+1], c[j+4+i]);/* third loop body for x[i+2] *//* fourth loop body for x[i+3] */

}res[j+0] = acc0; res[j+1] = acc1;res[j+2] = acc2; res[j+3] = acc3;

}

5

Multisample Example - Step 5Explicit scalarizationfor (j = 0; j < N; j += 4) {

acc0 = 0;acc1 = 0;acc2 = 0;acc3 = 0; for (i = 0; i < T; i += 4) {

acc0 = L_mac(acc0, x[i+0], c[j+0+i]);acc1 = L_mac(acc1, x[i+0], c[j+1+i]);acc2 = L_mac(acc2, x[i+0], c[j+2+i]);acc3 = L_mac(acc3, x[i+0], c[j+3+i]);acc0 = L_mac(acc0, x[i+1], c[j+1+i]);acc1 = L_mac(acc1, x[i+1], c[j+2+i]);acc2 = L_mac(acc2, x[i+1], c[j+3+i]);acc3 = L_mac(acc3, x[i+1], c[j+4+i]);/* third loop body for x[i+2] *//* fourth loop body for x[i+3] */

}res[j+0] = acc0; res[j+1] = acc1;res[j+2] = acc2; res[j+3] = acc3;

}

5 for (j = 0; j < N; j += 4) {acc0=acc1=acc2=acc3=0; xx = x[i+0];c0 = c[j+0]; c1 = c[j+1];c2 = c[j+2]; c3 = c[j+3];for (i = 0; i < T; i += 4) {acc0 = L_mac(acc0, xx, c0);acc1 = L_mac(acc1, xx, c1);acc2 = L_mac(acc2, xx, c2);acc3 = L_mac(acc3, xx, c3);xx = x[i+1]; c0 = c[j+4+i];acc0 = L_mac(acc0, xx, c1);acc1 = L_mac(acc1, xx, c2);acc2 = L_mac(acc2, xx, c3);acc3 = L_mac(acc3, xx, c0);xx = x[i+2]; c1 = c[j+5+i];/* similar third and fourth loop */

}res[j+0] = acc0; res[j+1] = acc1;res[j+2] = acc2; res[j+3] = acc3;

}

6

Multisample Example - Final Resultfor (j = 0; j < N; j += 4) {acc0=acc1=acc2=acc3=0; xx = x[i+0];c0 = c[j+0]; c1 = c[j+1];c2 = c[j+2]; c3 = c[j+3];for (i = 0; i < T; i += 4) {

acc0 = L_mac(acc0, xx, c0);acc1 = L_mac(acc1, xx, c1);acc2 = L_mac(acc2, xx, c2);acc3 = L_mac(acc3, xx, c3);xx = x[i+1]; c0 = c[j+4+i];acc0 = L_mac(acc0, xx, c1);acc1 = L_mac(acc1, xx, c2);acc2 = L_mac(acc2, xx, c3);acc3 = L_mac(acc3, xx, c0);xx = x[i+2]; c1 = c[j+5+i];/* similar third and fourth loop */

}res[j+0] = acc0; res[j+1] = acc1;res[j+2] = acc2; res[j+3] = acc3;

}

one cycle (4 macs + 2 moves)

one cycle (4 macs + 2 moves)

Page 140: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Search Techniques Adapted for StarCore SC140

• finding for maximum• finding the maximum and its position• finding the maximum ratio• finding the position of the maximum ratio

Maximum search• reduction operation => split maximum

#include <prototype.h>Word16 max_search(Word16 vector[], unsigned short int length ) {#pragma align *vector 8

signed short int i = 0; Word16 max0, max1, max2, max3;max0 = vector[i+0]; max1 = vector[i+1];max2 = vector[i+2]; max3 = vector[i+3];for(i=4; i<length; i+=4) {

max0 = max(max0, vector[i+0]); max1 = max(max1, vector[i+1]);max2 = max(max2, vector[i+2]); max3 = max(max3, vector[i+3]);

}max0 = max(max0, max1); max1 = max(max2, max3);return max(max0, max1);

}

Maximum search - Comments

• presented solution works for both 16-bit and 32-bit values

• better solution for 16-bit (asm only)– based on max2 instruction (SIMD style)– fetches two 16-bit values as a 32-bit one– eight maxima per cycle

Maximum Search – ASM with max2

move.2l (r0)+n0,d4:d5 move.2l (r1)+n0,d6:d7move.2l (r0)+n0,d0:d1 move.2l (r1)+n0,d2:d3

FALIGNLOOPSTART3[

max2 d0,d4 max2 d1,d5max2 d2,d6 max2 d3,d7move.2l (r0)+n0,d0:d1 move.2l (r1)+n0,d2:d3

]LOOPEND3[

max2 d0,d4 max2 d1,d5max2 d2,d6 max2 d3,d7

]

Page 141: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

Maximum position

• based on comparisons– around N cycles– in C, two maxima required

• based on maximum search– around N/2 cycles

• based on max2-based maximum search– around N/4 cycles

• care must be taken to preserve the original semantics

Maximum ratio

• given Word16 a[ ] and Word16 b[ ] vectors of positive values, compute max{a[i]/b[i]}

• division is very expensive on StarCore• ideas:

– a/b < c/d a*d < b*c– keep a[ ] and b[ ] intermixed

• two 16-bit values form a 32-bit one– use cross multiplication (mpyus, mpysu)

• final solution in N cycles

Max ratio position

• based on max ratio search, plus– movet, tfrt instructions– position is kept as pointer, not index

• software pipelining plus loop unrolling three times

DSP Coding Recommendations

• use loops with a fixed number of iterations– enables the detection of hardware loops

• provide extensive static information– pragmas, constants

• use only supported data types• do not mix integer and fractional operations on

the same value

Page 142: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

DSP Coding Recommendations (2)

• replace tests with computations– small tests are ok due to predicative execution

• use synonym operations if more flexible in the target architecture

• use modulo addressing• alignment in data structures should be

provided using field arrangement• use custom calling conventions

Software Development Notes

• SDN database contains coding guidelines– try different solutions for the same problem– analyze the generated assembly file– save the best solution in the SDN database

• SDN DB captures team experience• leverage organizational development skills

Speed versus Size

• typically cannot be both optimized• follow the 80%-20% rule

– speed optimize 20% of the code– size optimize 80% of the code

• loop merging may optimize both• a high register pressure may kill both• multisample provides best speed

– but also significant kernel size increase

Diet Speed Optimization

• compile for speed only time-consuming loops– compile for size the rest

• try speed and size optimizations combined

• reduce the unroll factors in the multisampletransformation

• avoid register pressure that creates spill code

Page 143: Aplicatii Ale Procesoarelor de Semnal in Comunicatii

C Optimization Limits

• effort concentrated on loops– no packed moves outside loops– loops and ifs delimit optimization blocks

Conclusions

• complexity of future DSP applications require development using C

• C can be transformed in efficient DSP C– compiler extensions are a must

• the coding style is programmer’s key• optimized C code is suitable for high

performance applications• assembly remains for critical sections