Sunteți pe pagina 1din 143

1

Capitolul 1 - Introducere

Aplicaii ale procesoarelor de semnal n comunicaii

Microprocesoarele tradiionale s-au ndreptat n principal ctre


manipularea datelor.
Similar, procesoarele DSP sunt concepute pentru realizarea calculelor

CAPITOLUL 1

matematice necesare procesrii semnalelor digitale.


Tabelul 1.1 arat cele mai importante diferene dintre aceste dou
categorii.

INTRODUCERE

Manipularea datelor este bazat pe micarea datelor i verificarea


inegalitilor, n timp ce calculul matematic folosete n special nmulirea i

Procesoarele numerice de semnal realizeaz operaii matematice.

adunarea.

Calculatoarele folosite pentru afaceri i alte aplicaii 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.
Numrul acestor dispozitive a cunoscut o cretere deosebit n ultimii
zece ani, fiind folosite aproape n orice domeniu, de la telefoanele celulare
pn la instrumentele tiinifice avansate.

TABELUL 1.1
Manipularea datelor
Calcul matematic
Procesarea cuvintelor,
Procesarea semnalelor digitale;
Managementul bazelor de date; Controlul micrii;
Aplicaii
Sisteme de operare, etc.
Simulri
tiinifice
i
inginereti, etc
Adunarea (A+B=C)
Operaii Micarea datelor (AB)
principale Testarea valorii (if A=B then) nmulirea (AxB=C)

Calculatoarele sunt extrem de utile n dou direcii principale:

Manipularea datelor implic stocarea i sortarea informaiei.

- manipularea datelor (procesarea cuvintelor i managementul bazelor

S considerm un program de procesare a cuvintelor.

de date);
- calculele matematice (folosite n tiin, inginerie i procesarea
semnalelor digitale).

Sarcina elementar este stocarea informaiei (scris de ctre operator),


organizarea informaiei (tergere i copiere, verificarea ortografiei, ncadrarea
n pagin, etc.) i apoi stocarea informaiei (cum ar fi salvarea documentului

Toate microprocesoarele pot realiza ambele sarcini.

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

Este scump s realizezi un dispozitiv optimizat pentru amndou.

locaie la alta i prin verificarea inegalitilor (A=B, A<B, etc.).

Exist diferene n proiectarea hardware, cum ar fi mrimea numrului de


instruciuni i manipularea ntreruperilor.
Importante sunt i problemele de marketing: costul de dezvoltare i
fabricare, durata de via a produsului, etc. .

Se dorete sortarea unei liste de cuvinte n ordine alfabetic. Fiecare


cuvnt este reprezentat de un numr pe 8 bii, valoarea ASCII a primei litere
din cuvnt. Aranjarea n ordine alfabetic implic rearanjarea ordinii

Capitolul 1 - Introducere

Aplicaii ale procesoarelor de semnal n comunicaii

cuvintelor pn cnd valoarea ASCII crete continuu de la nceput spre

n afar de execuia rapid a calculelor matematice, procesoarele DSP

sfritul listei. Aceasta poate fi realizat prin repetarea a doi pai pn cnd

trebuie s realizeze un timp de execuie prestabilit. Presupunem c am

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

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

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

document realizat cu un procesor de cuvinte. Nu conteaz dac execuia

sunt n ordine alfabetic se schimb ntre ele. Cnd acest proces de doi pai se

dureaz 10 milisecunde sau 10 secunde. Ateptm doar ca aciunea s fie

repet de cteva ori, pentru fiecare dintre perechile adiacente de cuvinte, lista

terminat nainte s programm computerul s execute o alt operaie. Exist

va fi eventual aranjat.

i motive importante s nu fie mai rapid dect necesar. Odat cu creterea

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

vitezei, va crete costul, puterea consumat, dificultatea proiectrii i aa mai

procesarea cuvintelor. Computerul verific continuu prin dispozitivul de

departe. Aceasta duce la o cunoatere exact a timpului de execuie, (element

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

important pentru alegerea dispozitivului corespunztor) ct i a algoritmului.

Cnd acest cod este gsit, programul mut datele din memoria computerului
la imprimant. Se observ aceleai dou operaii de baz: mutarea datelor i
verificarea inegalitilor. Operaiile matematice sunt folosite ocazional i nu
afecteaz semnificativ viteza de execuie.
Comparativ, viteza de execuie a celor mai muli algoritmi DSP este
limitat aproape complet de numrul de nmuliri i adunri. n Figura 1-1
este prezentat implementarea unui filtru digital FIR. Folosind notaia
standard, semnalele de intrare sunt x[ ], n timp ce semnalele de ieire sunt
notate y[ ].
Obiectivul este de a calcula eantionul de la locaia n (y[n]). Un filtru
FIR execut acest calcul prin adunarea eantioanelor semnalului de intrare
ponderate cu coeficienii a0, a1, a2, a3 .
Ecuaia y[n] este:

y[n ] = a0 x[n ] + a1 x[n 1] + a2 x[n 2] + a3 x[n 3] + a4 x[n 4] + ....

(1.1)

n funcie de aplicaie, pot fi puini coeficieni sau cteva mii. Dei


exist i transfer de date i evaluri ale inegalitilor, operaiile matematice
determin timpul de execuie.

Figura 1-1

Filtrul digital FIR

Capitolul 1 - Introducere

1.1 STOCAREA CIRCULAR

Aplicaii ale procesoarelor de semnal n comunicaii

Acum ne uitm napoi la Figura 1-1 i ne imaginm c este


implementat un filtru FIR n timp real. Pentru a calcula eantionul de ieire,

Procesoarele DSP sunt concepute s implementeze rapid algoritmii de


prelucrare numeric.

trebuie s avem acces la cele mai recente eantioane de la intrare.


Presupunem c folosim 8 coeficieni pentru acest filtru: a0, a1, ., a7.

Pentru a nelege partea hardware, trebuie s nelegem mai nti

Trebuie s cunoatem valorile celor mai recente 8 eantioane ale semnalului

algoritmii. n aceast seciune vom face o list detaliat a pailor necesari

de intrare: x[n], x[n-1],, x[n-7]. Aceste 8 eantioane trebuie stocate n

implementrii unui filtru FIR. n urmtoarea parte vom vedea cum

memorie i rennoite continuu pe msur ce noi eantioane sunt achiziionate.

procesoarele DSP sunt concepute s urmeze aceti pai ct mai eficient


posibil.
Pentru nceput, trebuie s facem diferena ntre procesarea ntrziat i
procesarea n timp real.

Care este cea mai bun metod s prelucrm aceste eantioane?


Rspunsul este stocarea circular.
Tabelele 1.2a i b ilustreaz o stocare circular cu 8 eantioane. Am
aezat eantioanele n 8 locaii de memorie consecutive, 20041 pn la 20048.

Un geofizician poate s foloseasc un seismograf pentru a nregistra


micarea pmntului n timpul unui cutremur. Dup ce micarea s-a terminat,
informaia poate fi citit cu ajutorul unui computer i analizat cumva. Alt
exemplu al procesrii ntrziate este constituit de vizualizarea medical, cum
ar fi tomografia computerizat. Datele sunt obinute n timp ce pacientul este
legat la aparat, dar reconstituirea imaginii poate fi ntrziat. Ideea este c
toate informaiile sunt disponibile programului de procesare.
n cazul procesrii n timp real, semnalul de ieire este obinut n
acelai timp n care semnalul de intrare este recepionat. De exemplu, n

Tabelul 1.2a - Stocarea circular la un moment dat


Adresa de
memorie

Valoarea
memorat

Eantion

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 eantion

20045

0.048679

x[n-7]

cel mai vechi eantion

20046

0.222977

x[n-6]

telefonie, pentru aparate auditive i radar. Aplicaiile trebuie s obin

20047

0.371370

x[n-5]

informaia necesar imediat, dei, uneori, poate fi ntrziat puin.

20048

0.462791

x[n-4]

De exemplu, o ntrziere de 10 milisecunde ntr-o convorbire telefonic


nu poate fi detectat de vorbitor sau asculttor.
Aplicaiile n timp real primesc un eantion, parcurg algoritmul, apoi
genereaz un eantion (la ieire) i aa mai departe. Alternativ, pot primi mai
multe eantioane, parcurg algoritmul i dau (la ieire) un grup de eantioane.
Aceasta este lumea DSP.

Tabelul 1.2a arat cum 8 eantioane de la intrare pot fi stocate la un


moment dat, n timp ce Tabelul 1.2b arat schimbrile dup ce urmtorul
eantion este achiziionat.
Sfritul irului linear este conectat la nceputul lui. Locaia de
memorie 20041 este vzuta ca fiind urmtoarea dup 20048, la fel cum 20044

Capitolul 1 - Introducere

este lng 20045. Urmrim irul cu ajutorul unui pointer (a crei variabil este
o adres) care indic unde sunt stocate cele mai recente eantioane.

Aplicaii ale procesoarelor de semnal n comunicaii

Pointerul ctre cel mai recent eantion trebuie modificat de fiecare dat
cnd noi eantioane sunt achiziionate. Cu alte cuvinte, trebuie s fie un
program logic care s controleze cum aceast valoare este rennoita,

Tabelul 1.2b - Amortizarea circular dup eantionul urmtor

bazndu-se pe parametrii bufferului circular.


Procesoarele DSP trebuie optimizate pentru manevrarea bufferelor

Adresa de
memorie

Valoarea
memorat

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 eantion

20046

0.222977

x[n-7]

cel mai vechi eantion

20047

0.371370

x[n-6]

20048

0.462791

x[n-5]

circulare pentru a obine cea mai mare viteza de execuie posibil.


Stocarea circulara este folositoare i n procesarea ntrziat.
O metoda forat este de a stoca n memorie ntreaga lungime a fiecrui
semnal intermediar. Stocarea circulara ofer o alt opiune: salvarea numai a

De exemplu, n Tabelul a pointerul conine adresa 20044, n timp ce n


Tabelul b conine adresa 20045. Cnd este achiziionat un nou eantion, se
nlocuiete cel mai vechi eantion din ir, iar pointerul este mutat cu o adresa
nainte (este incrementat).
Stocarea circular este eficient deoarece, cnd este achiziionat un nou
eantion, 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 sfritul 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 conine un
eantion, adresa 20044 conine urmtorul eantion i aa mai departe.

eantioanelor necesare calculelor. Se reduce memoria necesara n schimbul


unui algoritm mult mai complicat.
Principalele companii productoare de procesoare DSP sunt: Texas
Instruments, Analog Devices i Motorola, etc.

145

Capitolul 2 Aritmetica numerelor

146

Aplicaii ale procesoarelor de semnal n comunicaii


- reprezentarea numrului raional 35,54 n baza 10:
35,6410 = 3101 + 5100 + 610-1 + 410-2 = 30 + 5 + 0,6 + 0,04

CAPITOLUL 2

b) Binar (b=2),
- setul de simboluri este {0, 1};
- valoarea numrului 110012 n zecimal este:

ARITMETICA NUMERELOR

110012 = 124 + 123 + 022 + 021 + 120 = 16 + 8 + 1 = 25


- valoarea numrului 110,012 n zecimal este:
110,012 = 122 + 121 + 020 + 02-1 + 12-2 = 4 + 2 + 0.25 = 6,25

2.1 SISTEME DE NUMERAIE

c) Octal (b=8),
Un sistem de numeraie folosete pentru reprezentarea numerelor un set
de b simboluri:

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


- valoarea numrului 20768 n zecimal este:

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

20768 = 283 + 082 + 781 + 680= 2512 + 56 + 6= 108610

Dac b>10 trebuie adugate noi simboluri n afara cifrelor (litere etc.).
Un numr ntreg pozitiv se scrie, n baza b, folosind simbolurile dk:

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


ceea ce este echivalent cu

d) Hexazecimal (b=16),
- setul de simboluri este {0, 1, 2, , 9, A, B, C, D, E, F};
- reprezentarea numrului B3F16 n zecimal este:

m = d k b k + dk -1 bk -1 + ... + d 3 b3 + d2 b 2 + d1b1 + d0 b0

B3F16=11162 + 3161 + 15160= 11256 + 48 + 15= 287910

Similar pot fi reprezentate numerele raionale folosind i+1 simboluri


pentru partea ntreag i f simboluri pentru partea fracionar:
r = d i bi + d i-1bi-1 + ... + d1b1 + d 0 b 0 + d -1b -1 + ... + d f b f
Exemple de sisteme de numeraie: zecimal, binar, octal, hexazecimal.
a) Zecimal (b=10),

2.2 CONVERSIA NTRE SISTEMELE DE NUMERAIE

Conversia unui numr reprezentat ntr-o baz b n zecimal se face n


mod direct aa cum s-a artat n exemplele de mai sus.

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


- reprezentarea numrului ntreg 493 n baza 10:
2

49310 = 410 + 910 + 310 = 400 + 90 + 3

Conversia din binar n hexazecimal se realizeaz grupnd cifrele binare


n grupuri de cte 4 bii, identificnd simbolul hexazecimal corespunztor:
1101101,10011012 = 0110 1101,1001 10102 = 6D,9A16

147

Capitolul 2 Aritmetica numerelor

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

148
- partea fracionar:

0,65 2 = 1,3
0,3 2 = 0,6
0,6 2 = 1,2
0,2 2 = 0,4
0,4 2 = 0,8
0,8 2 = 1,6
0,6 2 = 1,2
0,2 2 = 0,4

pentru partea fracionar:


- Pentru partea ntreag observm c aceasta se mai poate scrie:

i=

(((( d b + d
k

k -1

) b + ... + d3 ) b + d2 ) b + d1 ) b + d0

Se mparte i la b i se obine restul d0 i un ct care are o


reprezentare similar cu i (pe mai puini digii). Se repet mprirea
ctului la b pn se ajunge la 0. Restul obinut la fiecare mprire
reprezint simbolul dk al reprezentrii n baza b a numrului ntreg.
- Pentru partea fracionar:
f = d 1 b1 + d 2 b 2 + d 3 b 3 + ... + d k b k + ...

Aplicaii ale procesoarelor de semnal n comunicaii

1
0
1
0
0
1
1
0

MSB

...

Rezult c numrul 0,65 nu poate fi reprezentat n binar cu un numr finit de


bii.
23,6510 = 10111,101001102
Reprezentarea numerelor, n cazul procesoarelor, este limitat la un

Se nmulete f cu b i se pstreaz partea ntreag a membrului

numr finit de bii. Gama de lucru este astfel limitat. Considernd

drept, respectiv d1.

reprezentarea unui numr binar pe N bii vom avea un domeniu de 2N valori

b f = d 1 + d 2 b 1 + d 3 b 2 + ... + d k b k +1 + ...

zecimale care pot fi reprezentate.

b ( b f d 1 ) =d 2 + d 3 b 1 + ... + d k b k + 2 + ...
Se continu nmulind partea fracionar a rezultatului la b pn se

2.3 REPREZENTAREA BINAR A NUMERELOR NEGATIVE

ajunge la 0. Reprezentarea n baz b a prii fracionare se face


lund n ordine invers prile ntregi obinute.
EXEMPLU: Reprezentarea n baza 2 a numrului 23,65:

- partea ntreag:
23 : 2 = 11
11 : 2 = 5
5:2= 2
2:2= 1
1:2= 0

1
1
1
0
1

2310 = 101112

LSB

Pentru reprezentarea numerelor negative, bitul din stnga reprezentrii


binare este folosit ca bit de semn.
Astfel avem bitul de semn:
- 0 pentru numere pozitive (+);
- 1 pentru numere negative ().
Restul de N1 bii sunt folosii pentru reprezentarea valorii.

MSB

2N2 ... 20
s
m
1 bit N1 bii
Figura 2-1 Reprezentarea numerelor ntregi cu semn

149

Capitolul 2 Aritmetica numerelor

2.3.1 Reprezentarea sub forma: bit de semn i valoare absolut

150

Aplicaii ale procesoarelor de semnal n comunicaii


EXEMPLU:

Pentru N=6 bii

(magnitudine)

13 = 0011012
13 = 1100102

Bitul de semn are semnificaia artat mai sus iar ceilali N-1 bii
reprezint valoarea absolut a numrului.

EXEMPLU:

Pentru N=6 bii, deoarece 2N1 = 63, reprezentarea lui 13 se

EXEMPLU:

poate obine i altfel:

Pentru N=6 bii

63 + (13) = 50 = 1100102

9 = 0 01001
9 = 1 01001
Domeniul de reprezentare:
- 2N1 valori pozitive de la 0 la 2N11.

Se observ c numrul negativ este reprezentat prin schimbarea lui 0 n


1 i 1 n 0 (deci bitul din stnga are semnificaia de bit de semn).
21 = 0101012 = 1010102

- 2N1 valori negative de la (2N11) la 0.

(13) = 1100102 = 0011012

Se observ c:
a) avem dou reprezentri ale lui zero, 000000 i 100000.

Din nou exist dou reprezentri ale lui zero: 000000 i 111111.

b) maximul i minimul (011111 i 111111) au aceeai valoare absolut.

Numerele maxime i minime ce pot fi reprezentate au n modul aceeai

Principalele probleme sunt:


a) existena a dou reprezentri ale lui zero;
b) pentru adunri avem nevoie de dou sisteme de adunare i de scdere
(n cazul numerelor negative).
2.3.2 Reprezentarea n complement fa de 1

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 numrului negativ este

Pentru numerele pozitive, reprezentarea n complement fa de 1 este

obinut prin adunarea lui 2N la valoarea negativ.

identic cu reprezentarea numerelor binare cu semn.


n cazul numerelor negative, reprezentarea este obinut prin
complementarea (negarea) fiecrui bit. Aceast operaie este echivalent cu
adunarea cu 2N1.

EXEMPLU:

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


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

151

Capitolul 2 Aritmetica numerelor

O metod mai rapid pentru obinerea complementului fa de 2 este:

152

Aplicaii ale procesoarelor de semnal n comunicaii


2.4 ARITMETICA NUMERELOR BINARE N VIRGUL FIX

a) Se complementeaz fiecare bit;


b) Se adun 1.

n cele mai multe cazuri, procesoarele de semnal folosesc reprezentarea


n virgul fix pentru o reducere a costului i a complexitii i pentru o vitez

EXEMPLU:

de prelucrare mai mare. Considernd reprezentarea unui cuvnt n memorie

Pentru N=6 bii,

pe N bii vom avea un domeniu de 2N valori zecimale care pot fi reprezentate.

- pentru

13 = 0011012

se complementeaz biii:
se adun 1:
- pentru

1100102
1100112 = 13

13 = 1100112

se complementeaz biii:
se adun 1:

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

0011002

fa de doi cuvntul binar este interpretat ca avnd virgula la dreapta celui

0011012 = +13

mai puin important bit (LSB). Cel mai important bit (MSB) este bit de semn.
2N1 2N2 ...
s
i

N bii

Bitul din stnga rmne n continuare bit de semn. Exist o singur


reprezentare a lui 0.

20
.

Figura 2-2 Reprezentarea numerelor ntregi n virgul fix

Domeniul de reprezentare a numerelor ntregi n complement fa de 2:


- 2N1 valori pozitive de la 0 la 2N11.
- 2N1 valori negative de la 2N1 la 1.
Avantajul reprezentrii n complement fa de 2 este c adunnd un
numr cu complementul su fa de 2 rezultatul este 0 (ignornd depirea)
ceea ce nu este valabil n cazul celorlalte reprezentri.
EXEMPLU:

Pentru N=6 bii,


13+
13
=0

0011012
1100112
10000002

Domeniul n care pot fi reprezentate numerele ntregi n complement


fa de doi:

2 N 1 , ..., 1,0,...,2 N 1 1
EXEMPLU:

Reprezentarea numerelor ntregi cu semn pentru N=4 bii:


Zecimal
0
1
2
3
4
5
6
7

Binar
0000
0001
0010
0011
0100
0101
0110
0111

Zecimal
-8
-7
-6
-5
-4
-3
-2
-1

Binar
1000
1001
1010
1011
1100
1101
1110
1111

153

Capitolul 2 Aritmetica numerelor

154

Aplicaii ale procesoarelor de semnal n comunicaii

Adunarea numerelor ntregi cu semn

Extensia bitului de semn

EXEMPLU:

Este operaia necesar la creterea numrului de bii pentru

Pentru N=4 bii,


+3
2
1

reprezentarea binar a unui numr ntreg. Bitul de semn este copiat de la

1111
0011
1110
0001

5
+3
2

011
1011
0011
1110

3
4
7

11
1101
1100
1001

poziia iniial (al N-lea bit), spre stnga, pn la MSB-ul noului cuvnt binar.
EXEMPLU:

+3
3

Transportul de la bitul cel mai semnificativ se ignor.


Pot aprea depiri ale formatului de reprezentare dac rezultatul
adunrii este mai mare ca 7 sau mai mic ca 8.
EXEMPLU:

+3
3

N=8 bii
0000 0011
1111 1101

nmulirea / mprirea cu o putere a lui 2


nmulirea cu 2k este echivalent cu deplasarea numrului binar cu k

Pentru N=4 bii,


+3
+6
9

N=4 bii
0011
1101

0011
0110
1001=7

3
6
9

1101
1010
0111 =7

bii spre stnga i completarea cu 0 a biilor mai puin semnificativi.


mprirea cu 2k este echivalent cu deplasarea numrului binar cu k

bii spre dreapta i extensia bitului de semn.


EXEMPLU:

Evident ambele rezultate sunt greite, depirea fiind greu de detectat.


Se poate observa c, dac adunnd dou numere cu acelai semn, rezultatul
are semn opus atunci a aprut depirea.
Procesoarele de semnal pot utiliza aritmetica cu saturaie prin care, n
cazul unei depiri, rezultatul este nlocuit cu valoarea limit a intervalului de
reprezentare.
Scderea numerelor ntregi cu semn

3
3. 22

N=8 bii
0000 0011
0000 1100

3
3.22

N=8 bii
1111 1101
1111 0100

24
24/23

0001 1000
0000 0011

24
24/23

1110 1000
1111 1101

nmulirea numerelor ntregi

nmulirea numerelor ntregi fr semn n virgul fix necesit o


dublare a preciziei reprezentrii rezultatului n caz contrar apar depiri.

Operaia de scdere este echivalent cu adunarea cu complementul fa


de doi al desczutului (scderea unui numr e echivalent cu adunarea
negativului numrului).

nmulirea n binar se face la fel ca n zecimal doar c sunt numai dou cifre
(0 i 1).

155

Capitolul 2 Aritmetica numerelor

156

Aplicaii ale procesoarelor de semnal n comunicaii

EXEMPLU:

EXEMPLU:

Pentru N=4 bii, rezultatul va fi reprezentat pe cel mult 8 bii.

11111101
00000101
11111101
__ 11111101 +
15 1111110001
Avnd n vedere c reprezentarea pe 8 bii a lui +15 este: 00001111

0110
0101
0110
0000
0110
__ 0000 +
30 0011110

6
5

n exemplul de mai sus au fost suficieni 7 bii dar dac se nmulesc


numere mai mari se poate avea transport i la al 8-lea bit.
nmulirea poate fi privit i ca o succesiune de deplasri la stnga i

3
5

rezultatul nmulirii cu semn este corect.


O alt metod de nmulire a dou numere cu semn este de a nmuli
numerele n valoare absolut (nmulire fr semn) apoi se determin semnul
rezultatului din semnele celor doi operanzi i se reprezint rezultatul (n
complement fa de 2 dac e negativ).

adunri ale nmulitorului.


mprirea numerelor ntregi

EXEMPLU:

n exemplul de mai sus numrul 5 poate fi scris:


5 = 20 + 2 2
Deci nmulirea poate fi calculat ca o sum:
6 5 = 6 ( 20 + 2 2 ) = 6 1 + 6 2 2

unde se face o deplasare la stnga a lui 6 cu 2 bii.


6 1
6 22

0110
0110 +
0011110

nmulirea numerelor ntregi cu semn trebuie s ia n considerare i


extensia de semn. Astfel, pentru o reprezentare a rezultatului pe 2N bii
trebuie ca cei doi operanzi cu semn reprezentai fiecare pe N bii s fie extini
la 2N bii naintea nmulirii. Pentru rezultatul nmulirii vor fi considerai cei
mai puin semnificativi 2N bii.

mprirea numerelor ntregi se face prin scderi repetate ale


mpritorului din demprit la fel ca mprirea n zecimal.
EXEMPLU:

15| 3
5

1111 11
101
11
0011
11
00

157

Capitolul 2 Aritmetica numerelor

158

Aplicaii ale procesoarelor de semnal n comunicaii

2.4.2 Aritmetica numerelor fracionare n virgul fix

O metod rapid de conversie a numerelor fracionare binare

Un numr fracionar f este un numr al crui modul satisface

Pentru o conversie mai rapid a unui numr fracionar din reprezentarea


binar n zecimal se observ c f reprezentat n binar pe N=B+1 bii este

inegalitatea:

multiplu ntreg de 2B.

0.0 | f | < 1.0


Exemple de numere fracionare sunt: 0.15 i 0.67.

Fie i multiplul ntreg corespunztor. Avem:


i = f 2B

Pentru reprezentarea numerelor fracionare n virgul fix, pe N bii, n


complement fa de doi, cuvntul binar este interpretat ca avnd virgula la

ceea ce este echivalent cu o deplasare la stnga cu B bii. Se obine n binar un

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

numr ntreg i cu aceeai reprezentare ca f.


20 21
s .

20 21 ... 2(N1)
s .
f

N bii
Figura 2-3 Reprezentarea numerelor fracionare n virgul fix

Notnd cu B = N 1 numrul de bii alocai pentru valoarea

...
f

2B

2B 2B1 ...
s
i

N bii

20
.

Figura 2-4 Conversia fracionar ntreg pentru reprezentarea pe N bii

fracionar, domeniul n care pot fi reprezentate numerele fracionare n


complement fa de doi pe N bii este:
B

Astfel, pentru conversia binar-zecimal a unui numr fracionar se


B

1, ..., 2 ,0,2 ...,1 2

consider reprezentarea binar ca un numr ntreg cu semn i se mparte la 2B.

EXEMPLU:

EXEMPLU:

Reprezentarea numerelor fracionare cu semn pentru N=4 bii:

Conversia din binar n zecimal,

Zecimal
0
0.125
0.250
0.375
0.500
0.625
0.750
0.875

Binar
0000
0001
0010
0011
0100
0101
0110
0111

Zecimal
-1
-0.875
-0.750
-0.625
-0.500
-0.375
-0.250
-0.125

Binar
1000
1001
1010
1011
1100
1101
1110
1111

- pentru 0,010 0110 (N=8 bii, B=7)


se calculeaz numrul ntreg:
7

se mparte la 2 =128:

0010 0110 = 3810


38/128 = 0.296875

- pentru 1,110 1100 (N=8 bii, B=7)


se calculeaz numrul ntreg
n complement fa de 2:
7

se mparte la 2 =128:

1110 1100
0001 0100 = 2010
20/128 = 0.15625

159

Capitolul 2 Aritmetica numerelor

Invers, pentru conversia unui numr fracionar din reprezentarea


B

zecimal n binar se nmulete numrul fracionar f cu 2 i se reprezint n

160

Aplicaii ale procesoarelor de semnal n comunicaii


EXEMPLU:

Pentru N=4 bii,

binar partea ntreag i n complement fa de 2 pe N=B+1 bii.


0,625
+0,375
0,25

EXEMPLU:

Conversia din zecimal n binar,

011
1011
0011
1110

0,25
+0,375
0,125

111
1110
0011
0001

- pentru 0,875 (N=8 bii, B=7)


se nmulete cu 27=128:
se reprezint n binar pe 8 bii:

0,875.128=11210
11210 = 011100002

- pentru 0,625 (N=8 bii, B=7)


se nmulete cu 27=128:

0,625.128= 8010

se reprezint pe 8 bii:

8010 = 010100002

n complement fa de 2:

8010 = 101100002

- pentru 0,65 (N=8 bii, B=7)


se nmulete cu 27=128:
se reprezint partea ntreag:

Transportul de la bitul cel mai semnificativ se ignor.


Pot aprea depiri ale formatului de reprezentare dac rezultatul
adunrii este mai mare ca 12B sau mai mic ca 1.
EXEMPLU:

Pentru N=4 bii,


0,75
0,5
1,25

0110
0100
1010 = 0,75

0,875
0,25
1,125

1001
1110
0111 = 0,75

0,65.128= 83,210
8310 = 010100112

nmulirea numerelor fracionare cu semn

n ultimul exemplu apare fenomenul de trunchiere deoarece numrul

n cazul nmulirii numerelor fracionare apar unele dificulti.

fracionar 0,65 nu poate fi reprezentat exact pe 8 bii. Numrul 010100112

Rezultatul nmulirii n binar a dou numere reprezentate cu B bii pentru

este n zecimal 0.6484375.

partea fracionar + 1 bit de semn va trebui reprezentat pe 2B bii + 1 bit de


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

Adunarea numerelor fracionare cu semn

Operaia 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 aceleai circuite de adunare i pentru numerele ntregi
i pentru numerele fracionare. Difer reprezentarea n zecimal a rezultatelor.

fracionare reprezentate n zecimal.

N bii
s .
f
1bit B bii
s .
f
s .
1bit

f
2B bii

Figura 2-5 Reprezentarea rezultatului nmulirii numerelor fracionare

161

Capitolul 2 Aritmetica numerelor

162

Aplicaii ale procesoarelor de semnal n comunicaii

Totui, folosind metoda de nmulire a numerelor binare cu semn,

trunchierea celor mai puini semnificativi bii aprnd o eroare de trunchiere

nmulind dou numere cu semn reprezentate pe N=B+1 bii rezult 2N bii.

la ultimele zecimale ale numrului fracionar. n cazul nmulirii a dou

Rezultatul va avea cei mai puin semnificativi 2B bii corespunznd prii

numere ntregi rezultatul nu poate fi trunchiat n mod direct.

fracionare iar cei mai semnificativi 2 bii corespund prii din stnga virgulei
(adic doi bii de semn).

Extinderea preciziei de reprezentare a numerelor fracionare

s s .
2 bii

N bii

2N bii
f
2B bii

n urma operaiilor aritmetice cu numere fracionare pot s apar dou

fenomene: rezultatul nmulirii trebuie stocat n dubl precizie i rezultatul


adunrii poate avea depiri spre partea ntreag. Pentru aceasta, n

Figura 2-6 Reprezentarea rezultatului folosind nmulirea numerelor ntregi

procesoarele digitale de semnal exist registre (acumulator) folosite pentru


stocarea n precizie extins a rezultatelor intermediare ale unor operaii
aritmetice.

Rezultatul binar astfel obinut trebuie deplasat la stnga cu un bit pentru

... 2(N1)
20.21
s . fracionar

a corespunde reprezentrii unui numr fracionar pe 2N bii.


s .
1bit

f
2B bii

0
1bit

Figura 2-7 Reprezentarea rezultatului nmulirii n format fracionar

2M
21 20.21
... 2(N1) 2N
... 2(2N1)
s ntreg
. fracionar
fracionar
M bii
N bii

N bii

Figura 2-8 Extinderea preciziei de reprezentare a numerelor fracionare

Rezult c nu se pot folosi aceleai circuite de nmulire i pentru


numerele ntregi cu semn i pentru numerele fracionare.
EXEMPLU:

0100
0100
0000
0000
0100 +
00010000
0,0100000

0,5
0,5

____
0,25

n urma nmulirii, precizia de reprezentare a rezultatului trebuie


dublat. Dac se dorete stocarea rezultatului n precizie simpl se poate face

Extinderea preciziei prii fracionare se face completnd cu 0 la


dreapta LSB.
Extinderea preciziei prii ntregi se face prin extensie de semn la
stnga MSB.
EXEMPLU:

S se reprezinte n precizie dubl pentru partea fracionar i cu


extensie de 4 bii pentru partea ntreag numerele fracionare reprezentate n
precizie simpl pe 8 bii:
0,5 01000000

0000 01000000 00000000

-0,25 11100000

1111 11100000 00000000

Capitolul 2 Aritmetica numerelor

163

2.5 REPREZENTAREA NUMERELOR N VIRGUL MOBIL

164

Aplicaii ale procesoarelor de semnal n comunicaii


EXEMPLU:

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


01.000000000012.

Formatele n virgul mobil pentru procesoarele de semnal din familia


Texas Instruments C3x constau n trei cmpuri:

Dac s=1 pentru aceeai valoare a lui f, valoarea mantisei este


10.000000000012.

- exponent;
- semnul;

Cmpul exponent este un numr n complement fat de 2 care

- partea fracionar.
Cmpul de semn i cmpul parte fracionar pot fi considerate ca o
singur entitate numit mantisa.

determin factorul lui 2 prin care numrul este nmulit.


Cmpul exponent mut punctul binar n mantis (la dreapta - dac
exponentul este pozitiv i la stnga - daca exponentul este negativ).
EXEMPLU:

Figura 2-9 Formatul general n virgula mobil

Dac
mantisa = 01.000000000012 i e=1110

Ecuaia general pentru calculul valorii unui numr n virgul mobil

atunci punctul binar este mutat 11 locaii la dreapta, obinndu-se numrul:


01000000000012

este:
X = ss . f 2 2e

unde: s este bitul de semn, s este inversul valorii bitului de semn, f este
valoarea binar a cmpului reprezentnd partea fracionar i e este
echivalentul zecimal al cmpului exponent.
Mantisa reprezint un numr n complement fa 2 normalizat.
Dac s=0, atunci primii doi bii ai mantisei sunt 01.

egal cu 2049 n zecimal.


C3x suport patru formate n virgul mobil:
1. Imediat scurt, constnd ntr-un exponent pe 4 bii (n complement

fa de 2), un bit de semn i o parte fracionara pe 11 bii (sau echivalent un


cmp de 12 bii reprezentnd mantisa n complement fat de 2).

Dac s=1, atunci primii doi bii ai mantisei sunt 10.


Dac bitul de semn este egal cu 0, mantisa devine 01.f2, unde f este
reprezentarea binar a cmpului parte fracionar.
Dac bitul de semn este egal cu 1, mantisa devine egala cu 10.f2, unde f
este reprezentarea binara a cmpului parte fracionar.

Figura 2-10 Formatul imediat scurt n virgula mobil

165

Capitolul 2 Aritmetica numerelor

Operaiile sunt realizate cu un punct binar ntre biii 11 i 10. Numrul


n format virgula mobila imediat scurt este dat de formula urmtoare:
01.f 2e

x = 10.f 2e

daca
daca
daca

s=0
s =1
e=-8

n formatul scurt imediat n virgul mobil pentru a reprezenta 0


folosim urmtoarele valori rezervate:

166

Aplicaii ale procesoarelor de semnal n comunicaii


01.f 2e

x = 10.f 2e

daca s = 0
daca
s =1
daca e=-128

Pentru a reprezenta 0 folosim urmtoarele valori rezervate:


e =128, s =0, f =0
Urmtoarele exemple ilustreaz gama de variaie i precizia formatului
n virgul mobil normal scurt pe 16 Bii, pentru date externe:
Cel mai pozitiv: x = (2 2 8 ) 2 127 = 3.3961775 1038

e=8, s=0, f =0
Urmtoarele exemple ilustreaz gama de variaie i precizia formatului
scurt imediat n virgul mobil:

Cel mai puin pozitiv: x = 1 2127 = 5.8774717541 1039


Cel mai puin negativ: x = (128 ) 2127 = 5.9004306 1039

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


7

Cel mai puin pozitiv: x = 1 2 = 7.8125 10

Cel mai puin negativ: x = (1211 ) 27 = 7.8163 103


7

Cel mai negativ: x = 2 2 = 2.5600 10

Cel mai negativ: x = 2 2127 = 3.4028236 1038

3. Precizie simpl cu un cmp de 8 bii pentru exponent (e), un bit de

semn i o parte fracionara de 23 de bii (mantisa de 24 de bii in complement


binar - man), deci pe 32 bii.

2. Normal scurt, pe 16 bii, pentru date externe, n complement fa de

2, format din un cmp de exponent de 8 bii, un bit de semn i o parte


fracionar pe 7 bii (Figura 2-11).
Figura 2-12 Formatul virgul mobil n precizie simpl

Operaiile sunt realizate cu un punct binar implicit ntre biii 23 si 22.


Figura 2-11 Formatul virgul mobil normal scurt pe 16 bii, pentru date

externe

Cnd bitul implicit cel mai semnificativ este explicitat, el este localizat in
imediata vecintate a punctului binar, in stnga.
Numrul in virgula mobila x este dat de urmtoarele relaii:

Numrul n formatul virgul mobil normal scurt pe 16 Bii, pentru


date externe este dat de formula urmtoare:

01.f 2e

x = 10.f 2e

daca s = 0
daca
s =1
daca e=-128

167

Capitolul 2 Aritmetica numerelor

168

Aplicaii ale procesoarelor de semnal n comunicaii

Trebuie folosite urmtoarele valori rezervate pentru a reprezenta 0:

Cel mai puin negativ: x=(-1-2-31) 2-127=-5.8774717569 10-39

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

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

Gama de variaie i precizia formatului n virgul mobil n precizie


simpl:

Determinarea echivalentului zecimal a formatului n virgul mobil

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


Cel mai puin pozitiv: x = 1 2127 = 5.8774717 1039
Cel mai puin negativ: x = (12
Cel mai negativ: x = 2 2

127

23

)2

127

= 5.8774724 10

= 3.4028236 10

Pentru a converti numrul C3x n virgul mobil la echivalentul su


39

zecimal, trebuie respectai urmtorii pai:

38

Pas 1: Se convertete cmpul exponent la reprezentarea zecimal.

Cmpul exponent este un numr n complementul fa de 2.


4. Precizie extins constnd ntr-un exponent pe 8 bii, un bit de semn

Pas 2: Se convertete cmpul mantisa la reprezentarea zecimala. Dac

i o parte fracionara pe 31 de bii (deci mantisa pe de 32 de bii). Operaiile

bitul de semn este ters (s=0), se formeaz mantisa scriind 01 i adugnd biii

sunt realizate cu punct binar implicit ntre biii 31 si 30.

n cmpul fracie dup punctul binar.


EXEMPLU:

Dac
f=101000000002
Figura 2-13 Formatul virgul mobil n precizie extins

atunci
man=01.101000000002.

Numrul in virgula mobila x este dat de urmtoarele relaii:


01.f 2e

x = 10.f 2e

daca s = 0
daca
s =1
daca e=-128

Dac bitul de semn este setat (s=1), se formeaz mantisa prin scrierea
lui 10 i adugnd biii n cmpul fracie dup punctul binar.

Trebuie folosite urmtoarele valori rezervate pentru a reprezenta 0:

EXEMPLU:

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

Dac

Gama de variaie i precizia formatului n virgul mobil cu precizie


extins:
Cel mai pozitiv: x=(2-2-23) 2127=3.4028234 1038
Cel mai puin pozitiv: x=1 2-127=5.8774717541 1038

f=101000000002
atunci
man=10. 101000000002

169

Capitolul 2 Aritmetica numerelor

170

Aplicaii ale procesoarelor de semnal n comunicaii

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 stng.
EXEMPLU:

Daca

e=210

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

Figura 2-14 Conversii n virgul mobil

0000 0010 0100 0000 0000 0000 0000 0000 Valoarea binar
Exponentul = 0000 00102 = 2; Semn = 0; Fracie = .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; Fracie = .100002;
Valoare = 10.12 21 = 1012=3
Operaiile n virgul mobil presupun i conversia (automat n
hardware) dintr-un format n altul (Figura 2-14).

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; Fracie = .100002
Valoare = 01.12 25 = .0000112 = 3/64
Formatul C3x n virgul mobil nu este compatibil cu standardul IEEE
754. Formatul IEEE pentru virgula mobil folosete notaie semnmagnitudine pentru mantis. ntr-un cuvnt de 32 bii reprezentnd un numr
n virgul mobil, primul bit este bit de semn.

Capitolul 3 Procesoarele DSP Motorola 56300

31

32

Aplicaii ale procesoarelor de semnal n comunicaii

DSP56300, aceste dispozitive au evoluat din nucleul DSP56000 Motorola i


pstreaz coduri compatibile.
DSP56307 i DSP56311, datorit memoriei mari integrate n chip i a

CAPITOLUL 3

coprocesorului, destinat n special operaiilor de filtrare, sunt foarte potrivite


pentru aplicaii DSP cum ar fi:

PROCESOARELE DSP MOTOROLA


- FAMILIA 56300 -

- eliminarea ecoului;
- procesarea benzii de baza;
- codarea si decodarea vocii.
Coprocesorul proceseaz algoritmi de filtrare n paralel cu funcionarea

3.1 INTRODUCERE

Familia de procesoare Motorola DSP 56300 este prezentat n Figura


3.1-1.

nucleului. Memoria RAM mare din interiorul chipurilor elimin strile de


ateptare, permite

funcionarea pe mai multe canale, mbuntete

performantele aplicaiilor, i reduce consumul de putere.


Principalele caracteristici ale procesorului DSP56307 sunt
170 MIPS, 100 Core MIPS
EFCOP (coprocesor cu filtrare mbuntit) 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, interfaa HI08, 6 canale
DMA
Principalele caracteristici pentru procesorul DSP56311 sunt:
255 MIPS, 150 Core MIPS;
EFCOP (coprocesor de filtrare) 150 MIPS;

Figura 3.1-1 Familia de procesoare Motorola DSP 56300


Procesoarele digitale de semnal DSP56311 i DSP56307 sunt folosite
n special n telecomunicaii. Ca si celelalte componente din familia

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


memoria de date: 96K, 80K, 64K, 48K sau 32K;
2 porturi ESSI, port SCI, interfaa HI08, 6 canale DMA.

Capitolul 3 Procesoarele DSP Motorola 56300

33

Prezentm dou priviri de ansamblu pentru blocurile funcionale la


DSP563xx.
Pentru privirea de ansamblu 1 apar:

34

Aplicaii ale procesoarelor de semnal n comunicaii

Porturile de comunicaie serial sincron - Dual Enhanced Synchronous


Serial Interface (ESSI) ports;
Pinii I/O - 34 user-configurable General-Purpose I/O (GPIO) pins.

1. Zona perifericelor (Peripheral Expansion Area)


2. Zona memoriei (Memory Expansion Area);
3. Nucleul (DSP56300 Core).

Figura 3.1-3 Privirea de ansamblu 2


Zona memoriei (Memory Expansion Area)
Figura 3.1-2 Privirea de ansamblu 1
Zona perifericelor (Peripheral Expansion Area)
Coprocesorul - Enhanced Filter Coprocessor (EFCOP);
Portul de comunicaie serial - Serial Communications Interface (SCI)
port;
Timerul - Triple Timer Module;
Interfaa HI08 - Host Interface (HI08) port;

128K de cuvinte RAM;


Memoria de program P: pn la 96K x 24 bii;
Memoria de date X: pn la 48K x 24 bii;
Memoria de date Y: pn la 48K x 24 bii;
Pn la 12M cuvinte de memorie extern pentru memoria de program P
i date X, Y.

Capitolul 3 Procesoarele DSP Motorola 56300

35

36

Aplicaii ale procesoarelor de semnal n comunicaii

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).

DATA ALU
REGISTRE DE INTRARE

X
47

X1
0 23

A
23

NUCLEUL (DSP56300 CORE)


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

A2
7

A1
0 23

Y0

23
DATA ALU
REGISTRE ACUM ULATOR

55

Y1

X0

23

Figura 3.1-4 Nucleul

Y
47

*
0

55

A0
0 23

0 23

23

B2
7

B1
0 23

B0
0 23

*Citii ca bii de extensie de semn.

Figura 3-5 Registrele ALU

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


Memoria portului A - Port A Memory Expansion;

n Figura 3-6 este prezentat structura ALU.

Memoria ROM;

DSP56300 folosete reprezentarea fracionar pentru toate operaiile

Program Control Unit Program Control Unit (PCU);

ALU.

Controlerul DMA - Direct Memory Access (DMA) Controller;

Virgula zecimal este aliniat la stnga (dup bitul de semn).

Oscilatorul - Phase Lock Loop (PLL) Clock Oscillator;

Pentru a pstra alinierea la virgul, datele pe 24 de bii sunt scrise n

Emulatorul - On-Chip Emulator.

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.

37

Capitolul 3 Procesoarele DSP Motorola 56300

38

Aplicaii ale procesoarelor de semnal n comunicaii


La nmulire sau la mprire reprezentarea numerelor fracionare difer

X DATA BUS

de a numerelor ntregi. Pentru nmulirea numerelor ntregi, datele sunt

Y DATA BUS
P DATA BUS

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


24

Deoarece rezultatul nmulirii este aliniat la dreapta, rezult extensia la

24

doi bii de semn. Pentru nmulirea numerelor fracionare, datele sunt aliniate

X0
X1

OPERAND IMEDIAT

la stnga, cu virgula dup bitul de semn.

Y0

Rezultatul nmulirii este de asemenea aliniat la stnga i se adaug un

Y1
24

MUX

56

zero la LSB pentru completarea celor 2N bii.

24

Rezultatul corect al nmulirii numerelor ntregi se obine prin

MULTIPLICARE

deplasarea (shiftarea) aritmetic la dreapta cu un bit a rezultatului nmulirii


REGISTRE PIPELINE

REGISTRE PIPELINE

REG PIPELINE

fracionare.
NMULIREA NUMERELOR CU SEMN N x N > 2N 1 BII

UNITATEA PRELUCRARE

48

INTREG

PE BIT I DE SHIFTARE

FRACIONAL

UNITATEA DE

NMULIRE CU SEMN

56

ACUMULARE

MSP

S
NMULIRE CU SEMN

LSP

MSP

LSP

I ROTUNJIRE

REZULTAT 2N 1
EXTENSIE DE SEMN
2N BII

56
56

IFTARE

A(56)

ACUMULATOR

B(56)

56

56

REZULTAT 2N 1
COMPLETARE CU ZERO
2N BII

Figura 3-7 nmulirea numerelor ntregi


56

56

Unitatea de nmulire-acumulare (MAC UNIT)


SHIFTARE/LIMITARE

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


24
24

Figura 3-6 ALU


Rezultatele adunrii i scderii sunt echivalente att pentru numerele
fracionare ct i pentru numerele ntregi.

Unitatea efectueaz nmuliri pe 24 x 24 bii n format fracionar,


operanzi cu sau fr semn.
Rezultatul

nmulirii

(instruciunea MAC).

este

adunat

la

acumulatorul

destinaie

Capitolul 3 Procesoarele DSP Motorola 56300

39

Dac se folosete instruciunea MPY, acumulatorul este ters i apoi se


scrie rezultatul nmulirii.
Dac rezultatul nmulirii (56 bii) este stocat ca operand pe 24 de bii

40

Aplicaii ale procesoarelor de semnal n comunicaii

nmulirea cu acumulare cu operand imediat


MACI ()#xxxx,S,D

D # xxxx S D

S - sursa:

registre: X0,Y0, X1,Y1

LSP poate fi trunchiat sau rotunjit (rotunjirea cu instruciunile MACR,

#xxxx

valoare imediat pe 24 bii

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

D - destinaia:

acumulator: A, B

complement fa de 2.

nmulirea cu operand imediat

La stocarea n acumulator rezultatul nmulirii poate fi saturat astfel ca


acesta s intre n 48 de bii (fr a se mai folosi extensia acumulatorului A2
sau B2).

nmulirea cu acumulare
MAC ()S1,S2,D

D S1 S 2 D

S1, S2 - surse:

registre: X0,Y0, X1,Y1

D - destinaia:

acumulator: A, B

MAC ()S,#n,D

D S 2 n D

S - sursa:

registre: X0,Y0,X1,Y1

#n

valoare imediat <23

D - destinaia:

acumulator: A,B

MPYI ()#xxxx,S,D

# xxxx S D

S - sursa:

registre: X0, Y0, X1, Y1

#xxxx

valoare imediat pe 24 bii

D - destinaia:

acumulator: A, B

EXEMPLU:
nmulirea numerelor complexe se face conform formulei:
CR + jCI = ( AR + jAI ) ( BR + jBI )
Rezult:
CR = AR BR AI BI
CI = AR BI + AI BR
Putem lua un exemplu numeric:

( 0.5 +

nmulirea
MPY ()S1,S2,D

S1 S 2 D

S1, S2 - surse:

registre: X0,Y0,X1,Y1

D - destinaia:

acumulator: A,B

MPY ()S,#n,D

S 2 n D

S - sursa:

registre: X0,Y0, X1,Y1

#n

valoare imediat <23

D - destinaia:

acumulator: A,B

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

Vom iniializa registrele de date ale ALU astfel:


x1

x0

y1

y0

AR = 0.5

BR = 0.4

AI = 0.2

BI = 0.1

Rezultatul va fi obinut n registrele acumulator astfel:


a

CR = 0.18

CI = 0.13

41

Capitolul 3 Procesoarele DSP Motorola 56300


Programul n limbaj de asamblare este urmtorul:

42

Aplicaii ale procesoarelor de semnal n comunicaii

Scderea

move #0.5,x1

x1

x0

SUB S,D

DS D

move #0.4,x0

0.5

0.4

S - sursa:

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

move #0.2,y1

y1

y0

move #0.1,y0

0.2

0.1

valoare imediat: #$xx, #$xxxxxx


D - destinaia:

acumulator: A/B

a
mpy

x0,x1,a

0.2

mac

-y0,y1,a

0.2 + (-0.02) = 0.18

mpy

y0,x1,b

0.05

mac

x0,y1,b

0.05 + 0.08 = 0.13

Un tip special de instruciuni sunt cele de nmulire / mprire cu 2 a


acumulatorului i adunarea / scderea unui operand. Aceste instruciuni sunt
utile n implementarea eficient a fluturilor pentru decimare n timp la
algoritmii FFT.

Registrele acumulator A i B
Sunt registrele de 56 de bii, fiecare registru acumulator const din trei

Deplasarea la stnga i acumularea


S + 2 D D

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

ADDL S,D

menionate pot fi scrise/citite pe magistrala de date X sau Y.

Deplasarea la dreapta i acumularea

Dac se dorete transferul ntregului acumulator pe magistrala X sau Y,


cei 56 de bii din acumulator sunt shiftai/limitai la 24 de bii.

ADDR S,D

S + D/2 D

Deplasarea la stnga i scderea


2 D S D

Registrele acumulator sunt folosite ca:

SUBL S,D

- destinaie pentru nmulire i operaii logice;

Deplasarea la dreapta i scderea

- surs / destinaie pentru adunare i deplasri.

SUBR S,D

D/2 S D

S - sursa:

acumulator: B/A

D - destinaia:

acumulator: A/B

Adunarea
ADD S,D

S+DD

S - sursa:

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


valoare imediat: #$xx, #$xxxxxx

D - destinaia:

acumulator: A/B

43

Capitolul 3 Procesoarele DSP Motorola 56300

44

Aplicaii ale procesoarelor de semnal n comunicaii

EXEMPLU:
S considerm funcia de transfer:
H ( z) =

1
1
1
=
=
(1 pz 1 )(1 p* z 1 ) 1 ( p + p* ) z 1 + p* pz 2 1 2Re{ p}z 1 + | p |2 z 2

3.3 UNITATEA LOGIC I DE DEPLASARE

Conine un registru de deplasare pe 56 de bii, bidirecional, multi-bit i


unitatea de procesare logic. Operaiile efectuate sunt:

Ieirea y ( n) poate fi calculat astfel:

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

- deplasare stnga / dreapta multi-bit aritmetic i logic;


- rotaie cu 1 bit stnga / dreapta;

Pentru un exemplu numeric:

- extragerea, inseria, concatenarea unui cmp de bii;

p = 0.8 0.5 j .

- normalizarea acumulatorului;

Avem

- operaii logice.

| p |2 = 0.64 + 0.25 = 0.89


y (n) = 2 0.8 y (n 1) 0.89 y ( n 2) + x(n)
Considerm c avem n registrele y0, y1 i b strile filtrului:
y1

y0

y (n 2)

y (n 1)

x ( n)

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


direct valoarea 1.6 n registrul x0.
x1

x0

| p |2 = 0.89

Re{ p} = 0.8

Programul va calcula ieirea y ( n) folosind instruciunea addl astfel:


mac

x0,y0,a

; a = 0.8 y ( n 1)

mac

-x1,y1,b

; b = x (n) 0.89 y ( n 2)

addl

b,a

; a = 2a + b y ( n)

Deplasare aritmetic la stnga


ASL D

cu un bit

ASL S1,S2,D

cu mai muli bii

Deplasare aritmetic la dreapta


ASR D

cu un bit

ASR S1,S2,D

cu mai muli bii

S1 - numr de bii:

registru: X0,Y0,X1,Y1,A1,B1 sau


valoare imediat pe 6 bii: #n

S2 - sursa:

acumulator: A,B

D - destinaia:

acumulator: A,B

Capitolul 3 Procesoarele DSP Motorola 56300


EXEMPLU:

45

46

Aplicaii ale procesoarelor de semnal n comunicaii

EXEMPLU:

asl #7,a,b

lsl #7,a

asr x0,a,b

lsr x0,b

Deplasare logic la stnga


Rotaie la stnga cu un bit
LSL D

cu un bit

LSL S,D

cu mai muli bii


ROL D

Deplasare logic la dreapta

D:

acumulator A,B

Rotaie la dreapta cu un bit


LSR D

cu un bit

LSR S,D

cu mai muli bii

S - numr de bii:

registru: X0, Y0, X1, Y1, A1,B1

ROR D

valoare imediat pe 6 bii: #n

D:

D - destinaia:

acumulator: A, B

acumulator A,B

47

Capitolul 3 Procesoarele DSP Motorola 56300


Normalizarea acumulatorului

48

Aplicaii ale procesoarelor de semnal n comunicaii


Manipularea cmpurilor de date

pasul 1: se numr ci bii de 0 sau de 1 consecutivi sunt n acumulator

EXEMPLU:
extract b1,a,a

ncepnd de la MSB (bitul 55);


pasul 2: se scade acest numr din 9 i se scrie rezultatul n MSP a
acumulatorului destinaie (A1 sau B1). Acest rezultat este n intervalul 47,
+8;
pasul 3: se shifteaz aritmetic acumulatorul, la dreapta dac operandul e
pozitiv, sau la stnga dac e negativ, cu numrul de bii egal cu diferen
anterioar.
CLB S,D

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

S - sursa:

acumulator: A/B

D - destinaia:

MSP acumulator: B/A

EXEMPLU:
insert b1,x0,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 - destinaia:

acumulator: A,B

EXEMPLU:
naintea execuiei

Dup execuie

clb a,b

A: $20:0000:0000

B: $00:0007:0000

normf b1,a

A: $20:0000:0000

A: $00:4000:0000

EXEMPLU:
merge x0,b

Capitolul 3 Procesoarele DSP Motorola 56300

49

50

Aplicaii ale procesoarelor de semnal n comunicaii


EXEMPLU: Conversia din binar n cod Gray

Instruciuni logice

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


bit.

i logic
AND S,D

S D[47 24] D[47 24]

Binar

Gray

Binar

Gray

S - sursa:

registru: X0,Y0, X1,Y1

0000

0000

1000

1100

valoare imediat: #$xx, #$xxxxxx

0001

0001

1001

1101

acumulator: A/B

0010

0011

1010

1111

0011

0010

1011

1110

0100

0110

1100

1010

0101

0111

1101

1011

0110

0101

1110

1001

0111

0100

1111

1011

D - destinaia:

Sau logic
OR S,D

S + D[47 24] D[47 24]

S - sursa:

registru: X0, Y0, X1, Y1


valoare imediat: #$xx, #$xxxxxx

D - destinaia:

acumulator: A/B

Obinerea numrului n cod Gray se face cu operaia sau-exclusiv ntre


numrul scris n binar i numrul binar deplasat (shiftat la dreapta) cu un bit.

Nu logic
NOT D

D[47 24] D[47 24]

D - destinaia:

acumulator: A/B

De exemplu: codul Gray pentru numrul 0110:


0110 EOR 0011 = 0101
Pseudocodul programului este:

Sau exclusiv
EOR S,D

S D[47 24] D[47 24]

S - sursa:

registru: X0, Y0, X1, Y1

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

x0 = a;

valoare imediat: #$xx, #$xxxxxx


D - destinaia:

a = b;
a = lsr a;

acumulator: A/B

a = x0 eor a;
}
Valoarea binar care trebuie convertit este scris din acumulatorul b n
a cu instruciunea tfr b,a care utilizeaz magistrala intern ALU (56 bii).

51

Capitolul 3 Procesoarele DSP Motorola 56300

Registrul x0 este folosit ca registru temporar pentru a pstra valoarea


lui a1.

52

Aplicaii ale procesoarelor de semnal n comunicaii


Scalarea se face automat asupra datelor pe 24 de bii transferate pe

magistral, fr a afecta rezultatul din acumulator.

Instruciunea lsr a efectueaz deplasarea logic la dreapta cu un bit a


registrului a1 (biii 47-24).

Limitarea apare dac vrem s transferm pe magistrala XDB sau YDB


(de 24 de bii) operanzi din acumulator reprezentai pe 56 de bii (care

Instruciunea eor x0,a efectueaz operaia sau-exclusiv ntre x0 i a1 iar


rezultatul este n a1.

folosesc i cei 8 bii de extensie). Nu apare limitarea dac operanzii transferai


sunt din A1, A0, B1, B0.

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


urmtoarea valoare binar.

Sunt dou uniti de scalare-limitare ceea ce permite transferul pe XDB


i YDB prin limitarea a doi operanzi simultan sau limitarea unui operand la
48 de bii.

Etichet

Instr.

Operanzi

Magistrala de
date X

Magistrala
de date Y

Cicluri
ceas

clr

#>1,x1

do

#N,_endtst

tfr

b,a

lsr

eor

x0,a

add

x1,b

2 ilock

a1,x0

1
2 ilock

a1,x:output

Valorile la care sunt limitai operanzii ce depesc numrul de bii ai


magistralei de date sunt:
$7FFFFF pentru valori pozitive pe 24 de bii
$7FFFFF FFFFFF pentru valori pozitive pe 48 de bii
$800000 pentru valori negative pe 24 de bii
$800000 000000 pentru valori negative pe 48 de bii
Operaia de limitare nu afecteaz coninutul acumulatorului, spre
deosebire de operaia de saturare aritmetic.

_endt
TOTAL

6N+6

EXEMPLU:
Unitatea de Scalare i Limitare
Datele transferate din acumulator spre magistralele de date XDB sau
YDB trec prin aceste uniti de scalare i limitare.
Scalarea se poate face n funcie de biii S1 i S0 din Status Register
(SR) astfel:
S1=1, S0=0 n sus shifteaz data la stnga 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.

Fr limitare
A2 A1
A0
0000 100000 000000 = 1

Cu limitare
A2
A1
A0
0000 100000 000000 = 1

move a1,x0

move a,x0

X0

100000 = 1
Eroarea = 2

X0

011111 = 0.999999
Eroarea = 0.000001

Capitolul 3 Procesoarele DSP Motorola 56300

53

54

Aplicaii ale procesoarelor de semnal n comunicaii

Sunt dou tipuri de rotunjiri n funcie de bitul Rounding Mode (RM) din

Saturarea aritmetic

poriunea EMR a Status Register:


Acest mod este setat de bitul SM din Status Register (SR). Rezultatul
oricrei operaii aritmetice este limitat la 48 de bii n acumulator.

rotunjire convergent (rotunjire la numrul par).

Acest mod folosete algoritmilor care nu lucreaz cu extensia


acumulatorului (A2 sau B2) obinndu-se un rezultat saturat la 48 de bii.
Saturarea se efectueaz n funcie de trei bii: EXT[7], EXT[0] din
partea extins a acumulatorului i bitul cel mai semnificativ al lui A1 sau B1:

CAZUL I: DAC A0< $800000 (1/2), ATUNCI ROTUNJETE N JOS (NU SE ADUN NIMIC)
NAINTEA ROTUNJIRII

0
A2
A1
A0
X X..XX X X X X X X0100 011XXXXXX
55
48 47
24 23
0

DUP ROTUNJIRE
A2
A1
A0*
X X..XX X X X X X X0100 000000
55
48 47
24 23
0

MSP[23].
CAZUL II: DAC A0> $800000 (1/2), ATUNCI ROTUNJETE N SUS (ADUN 1 LA A1)

EXT[7]

EXT[0]

MSP[23]

ACUMULATOR

0
0
0
0

0
0
1
1

0
1
0
1

neschimbat
$00 7FFFFF FFFFFF
$00 7FFFFF FFFFFF
$00 7FFFFF FFFFFF

1
1
1
1

0
0
1
1

0
1
0
1

$FF 800000 000000


$FF 800000 000000
$FF 800000 000000
neschimbat

Modurile de rotunjire
Instruciunile care efectueaz operaii de rotunjire a rezultatului din
acumulator pe 24 de bii sunt:
MACR, MACRI nmulire cu acumulare i rotunjire.
MPYR, MPYRI nmulire cu rotunjire.
RND rotunjirea valorii din acumulator.
Unitatea ALU de date efectueaz rotunjirea poriunii superioare MSP a
acumulatorului n funcie de coninutul prii inferioare LSP a acumulatorului.

NANTEA ROTUNJIRII

1
A2
A1
A0
X X..XX X X X X X X0100 1110XX.XXX
55
48 47
24 23
0

DUP ROTUNJIRE
A2
A1
A0*
X X..XX X X X X X X0101 000000
55
48 47
24 23
0

CAZUL III: DAC A0= $800000 (1/2), I LSB A1=0, ATUNCI ROTUNJETE N JOS (NU ADUN NIMIC)
NAINTEA ROTUNJIRII

0
A2
A1
A0
X X..XX X X X X X X0100 10000.000
55
48 47
24 23
0

DUP ROTUNJIRE
A2
A1
A0*
X X..XX X X X X X X0100 000000
55
48 47
24 23
0

CAZUL IV: DAC A0= $800000 (1/2), I LSB A1=1, ATUNCI ROTUNJETE N SUS (ADUN 1 LA A1)
NAINTEA ROTUNJIRII

1
A2
A1
A0
X X..XX X X X X X X0101 10000000
55
48 47
24 23
0

DUP ROTUNJIRE
A2
A1
A0*
X X..XX X X X X X X0110 000000
55
48 47
24 23
0

Capitolul 3 Procesoarele DSP Motorola 56300

55

56

Aplicaii ale procesoarelor de semnal n comunicaii

rotunjire n complement fa de 2.
3.4 UNITATEA DE GENERARE A ADRESELOR (AGU)

CAZUL I: DAC A0< $800000 (1/2), ATUNCI ROTUNJETE N JOS (NU SE ADUN NIMIC)
NAINTEA ROTUNJIRII

0
A2
A1
A0
X X..XX X X X XXX0100 011XXXXXX
55
48 47
24 23
0

DUP ROTUNJIRE
A2
A1
A0*
X X..XX X X X X X X0100 000000
55
48 47
24 23
0

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

CAZUL II: DAC A0> $800000 (1/2), ATUNCI ROTUNJETE N SUS (ADUN 1 LA A1)
NAINTEA ROTUNJIRII

1
A2
A1
A0
X X..XX X X X X X X0100 1110XX.XXX
55
48 47
24 23
0

ALU adrese primare

ALU adrese secundare

DUP ROTUNJIRE

XAB YAB PAB

A2
A1
A0*
X X..XX X X X X X X0101 000000
55
48 47
24 23
0

Multiplexor Triplu

CAZUL III: DAC A0= $800000 (1/2), I LSB A1=0, ATUNCI ROTUNJETE N SUS (ADUN 1 LA A1)
NAINTEA ROTUNJIRII

A2
A1
A0
X X..XX X X X X X X0100 10000.000
55
48 47
24 23
0

DUP ROTUNJIRE
A2
A1
A0*
X X..XX X X X X X X0101 000000
55
48 47
24 23
0

N0
N1
N2
N3

M0
M1
M2
M3

ALU
Adrese

EI
R0
R1
R2
R3

R4
R5
R6
R7

ALU
Adrese

M4
M5
M6
M7

N4
N5
N6
N7

CAZUL IV: DAC A0= $800000 (1/2), I LSB A1=1, ATUNCI ROTUNJETE N SUS (ADUN 1 LA A1)
NAINTEA ROTUNJIRII

A2
A1
A0
X X..XX X X X X X X0101 10000000
55
48 47
24 23
0

Magistrala de date globale

DUP ROTUNJIRE

Magistrala de date de program

A2
A1
A0*
X X..XX X X X X X X0110 000000
55
48 47
24 23
0

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 pri, fiecare avnd o unitate aritmeticologic de adrese i patru grupe de registre.

Capitolul 3 Procesoarele DSP Motorola 56300

57

58

Fiecare grup conine trei tipuri de registre:

Aplicaii ale procesoarelor de semnal n comunicaii


Modelul de Programare AGU

Rn - registru de adres;
Pentru programator, AGU reprezint trei grupuri de 8 registre care pot

Nn - registru ofset;
Mn - registru de modificare.
Registre R, N i M sunt tratate mpreun (de exemplu numai N2 i M2

fi folosii att ca registre temporare de date ct i ca pointeri pentru adresarea


indirect (Figura 3.3-2).
Fiecare registru de adresare R are asociat un registru ofset N i un

sunt folosii pentru actualizarea adresei din R2). Cele dou ALU pot genera
dou adrese pe 24 de bii ntr-un singur ciclu instruciune pentru adresarea pe

registru modificator M.
Registrele R sunt utilizate la calculul adresei efective a operanzilor n

magistralele XAB, YAB, sau o adres pentru PAB. Spaiul de memorie


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

memorie.
Registre N sunt folosite pentru furnizarea unui ofset pentru actualizarea

Fiecare unitate ALU de adrese conine:


a) un sumator de ofset pe 24 de bii care adun la registrul adres R:

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

plus unu;
minus unu;
coninutul registrului ofset N corespunztor;
minus ofsetul N.
b) un sumator modulo care adun rezultatul primului sumator la valoarea
modulo (M sau minus M) coninut 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;
coninutul registrului ofset N corespunztor;
minus ofsetul N.
Printr-un test logic se selecteaz ieirea sumatorului ce va fi folosit
drept adres efectiv i actualizarea registrului R.

23

23

23

R7
R6
R5
R4
R3
R2
R1
R0
EP

N7
N6
N5
N4
N3
N2
N1
N0

M7
M6
M5
M4
M3
M2
M1
M0

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.

59

Capitolul 3 Procesoarele DSP Motorola 56300


Moduri de Adresare

60

Aplicaii ale procesoarelor de semnal n comunicaii

Adresare indirect cu registru


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

Se specific dac operanzii sunt n registre i / sau n locaii din


memorie i ofer adresa acestora.

memorie. Pot fi efectuate operaii aritmetice asupra adresei nainte sau dup
execuia instruciunii. Registrul ofset Nn asociat registrului adres Rn indic

Familia DSP56300 ofer patru moduri principale de adresare:

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

- adresare direct cu registru;

operaiei aritmetice care urmeaz s fie efectuat cnd este actualizat Rn.

- adresare indirect cu registru;

Pentru adresare liniar M=$FFFFFF.

- adresare relativ la PC;

EXEMPLU:

- alte adresri speciale (adresare imediat, adresare absolut, etc.).

Fr actualizare (Rn)
DUP EXECUIE

NAINTEA EXECUIEI
A2
XX

Adresare direct cu registru

A1
123456

Operandul este n unul din registre

$ 1000

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


EXEMPLU:
Adresare cu registru de date
NAINTEA EXECUIEI

A2
XX

A1
123456

X0
876543

A1
A0
XXXXXX XXXXXX

DUP EXECUIE
X1
XXXXXX
A2
XX

A1
876543

X0
876543

0
:
:
XXXXXX
:
:

23

$ 1000

R0

001000

R0

001000

N0

XXXXXX

N0

XXXXXX

M0

FFFFFF

M0

FFFFFF

Postincrementare cu o unitate (Rn)+


NAINTEA EXECUIEI
B2
XX

B1
XXXXXX

B0
123456

DUP EXECUIE
B2
XX

B1
XXXXXX

Memoria Y:

DUP EXECUIE

NAINTEA EXECUIEI

move a,n7

A2
00

A1
123456

A0
789abc

N7
XXXXXX

A2
00

A1
123456

A0
789abc

N7
123456

$ 2000

0
:
:
XXXXXX
:

B0
123456

Memoria Y:

23

move b0,y:(r1)+

Adresare cu registru de adrese

:
:
123456
:
:

EXEMPLU:

A0
XXXXXX

EXEMPLU:

A0
XXXXXX

Memoria X:

23

move a1,x:(r0)

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

X1
XXXXXX

A2
XX

Memoria X:

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

move x0,a1

A0
XXXXXX

23
$ 2001
$ 2000

0
:
X X X XX X
123456
:

R1

002000

R1

002001

N1

XXXXXX

N1

XXXXXX

M1

FFFFFF

M1

FFFFFF

61

Capitolul 3 Procesoarele DSP Motorola 56300


EXEMPLU:

Aplicaii ale procesoarelor de semnal n comunicaii

EXEMPLU:

Postdecrementare cu o unitate (Rn)

Postdecrementare cu ofset (Rn)Nn

NAINTEA EXECUIEI
Y1
XXXXXX

Y0
FEDCBA

Y1
XXXXXX

0
:
XXXXXX
:
:

$ 3000
$ 2FFF

0
:
FEDCBA
XXXXXX
:
002FFF

XXXXXX

N1

XXXXXX

FFFFFF

M1

FFFFFF

003000

N2
M2

Postincrementare cu ofset (Rn)+Nn


NAINTEA EXECUIEI
X0
XXXXXX

DUP EXECUIE
X1
987654

Memoria X:
23

move x1,x:(r4)+n4
$ 5000

:
:
:
:
XXXXX

X0
XXXXXX

$ 6000

move x:(r5)n5,a0

987654
005004

R4

005000

R4

N4

000004

N4

000004

M4

FFFFFF

M4

FFFFFF

A0
456789

Memoria X:

23
0
456789
:
:
:
:
:

$ 6000

23
0
456789
:
:

$ 5FFB

:
XXXXX

005FFB

R5

006000

R5

N5

000005

N5

000005

M5

FFFFFF

M5

FFFFFF

Predecrementare cu o unitate (Rn)


NAINTEA EXECUIEI
B2
XX

23
0
$ 5004 X X X X X
:
:
$ 5000

A1
000000

EXEMPLU:

Memoria X:
0

DUP EXECUIE
A2
00

Memoria X:

EXEMPLU:

X1
987654

A1
A0
XXXXXX XXXXXX

23

R2

R2

A2
XX

Y0
FEDCBA

Memoria Y:

23
$ 3000

NAINTEA EXECUIEI

DUP EXECUIE

Memoria Y:

move y0,y:(r2)

62

B1
B0
XXXXXX XXXXXX

DUP EXECUIE
B2
00

B1
121212

Memoria X:
23

move x:(r3),b

$ 4000

B0
000000

Memoria X:
0

:
XXXXXX
121212
:

23
$ 4000
$ 3FFF

0
:
XXXXXX
121212
:

R3

004000

R3

003FFF

N3

XXXXXX

N3

XXXXXX

M3

FFFFFF

M3

FFFFFF

63

Capitolul 3 Procesoarele DSP Motorola 56300


EXEMPLU:

Aplicaii ale procesoarelor de semnal n comunicaii

EXEMPLU:

Deplasament scurt (Rn+#nn)

Indexare cu ofset (Rn+Nn)

NAINTEA EXECUIEI
A2
00

A1
123456

A0
000000

DUP EXECUIE
A2
00

A1
123456

Memoria X:
23
0
XXXXXX
:
:
:
:
$ 2000 X X X X X X
$ 2000

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

64

NAINTEA EXECUIEI

A0
000000

Y1
XXXXXX

Memoria X:

Y0
ABCDEF

DUP EXECUIE
X1
XXXXXX

Memoria Y:

23
0
123456
:
:
:
:
$ 2000
XXXXX

$ 7003

move y0,x:(r6+n6)
$ 7000

0
:
XXXXXX
:
:
XXXXXX
:

Memoria Y:

23

$ 2007

X0
ABCDEF

23
$ 7003

:
ABCDEF
:

$ 7000

XXXXXX
:

007000

R0

002000

R0

002000

R6

007000

R6

N0

XXXXXX

N0

XXXXXX

N6

000003

N6

000003

M0

FFFFFF

M0

FFFFFF

M6

FFFFFF

M6

FFFFFF

Moduri speciale de adresare

EXEMPLU:
Deplasament lung (Rn+#nnnnnn)

Acestea nu folosesc un registru pentru a specifica adresa operandului.

NAINTEA EXECUIEI

DUP EXECUIE

X0
XXXXXX

X0
abcdef

Memoria Y:

Memoria Y:

23
$ 123456

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

0
abcdef
:
:
:
:
XXXXXX

23
$ 123456

$ 0000000

abcdef
:
:
:
:
XXXXX

R1

000000

XXXXXX

N1

XXXXXX

FFFFFF

M1

FFFFFF

R1

000000

N1
M1

Operandul sau adresa acestuia sunt coninute n codul instruciunii.


Adresare imediat.
Acest mod de adresare indic un operand pe 24 bii n cadrul
instruciunii.
EXEMPLU:
Date n acumulator pe 24 bii
NAINTEA EXECUIEI

move #$123456,a0

A2
XX

A1
A0
XXXXXX XXXXXX

DUP EXECUIE
A2
XX

A1
XXXXXX

A0
123456

65

Capitolul 3 Procesoarele DSP Motorola 56300


EXEMPLU:

Aplicaii ale procesoarelor de semnal n comunicaii

EXEMPLU:

Date pozitive n acumulator pe 56 bii

Date scurte negative n acumulator 56 bii

NAINTEA EXECUIEI

move #$654321,a

66

A2
XX

A1
A0
XXXXXX XXXXXX

NAINTEA EXECUIEI

DUP EXECUIE
A2
00

A1
654321

A0
000000

move #$87,b

B2
XX

DUP EXECUIE

B1
B0
XXXXXX XXXXXX

B2
FF

B1
870000

B0
000000

Dac destinaia este A2, A1, A0, B2, B1, B0, R0-R7, N0-N7 atunci
operandul imediat pe 8 bii este tratat ca un ntreg fr semn.

EXEMPLU:

Dac destinaia este X1, X0, Y1, Y0, A, B atunci operandul imediat pe

Date negative n acumulator pe 56 bii


NAINTEA EXECUIEI

move #$876543,b

B2
XX

B1
B0
XXXXXX XXXXXX

DUP EXECUIE
B2
FF

B1
876543

8 bii este tratat ca un numr fracionar cu semn.

B0
000000

Adresare absolut.
Adresare imediat cu date scurte.

Adresa operandului este coninut n codul instruciunii.

Operandul este pe 8 sau 12 bii.

EXEMPLU:
Adresare absolut lung (adresa pe 24 bii)

EXEMPLU:

NAINTEA EXECUIEI
B2
XX

Date scurte n registru pe 24 bii


NAINTEA EXECUIEI

move #$FE,y1

DUP EXECUIE

Y1
Y0
XXXXXX XXXXXX

Y1
FE0000

Y0
XXXXXX

DUP EXECUIE

B1
B0
XXXXXX XXXXXX

B2
XX

B1
XXXXXX

Memoria Y:

move y:$1000,b0

23

Memoria Y:
0

23

:
765432
:

$ 1000

B0
765432

:
765432
:

$ 1000

EXEMPLU:
Date scurte n acumulator 24 bii

EXEMPLU:

NAINTEA EXECUIEI

move #$FE,a1

A2
XX

A1
A0
XXXXXX XXXXXX

DUP EXECUIE
A2
XX

A1
0000FE

A0
XXXXXX

Adresare absolut scurt (adresa pe 6 bii)

EXEMPLU:

A1
765432

A0
XXXXXX

A2
XX

Memoria X:

Date scurte pozitive n acumulator 56 bii

move a1,x:$21

NAINTEA EXECUIEI

move #$34,a

DUP EXECUIE

NAINTEA EXECUIEI
A2
XX

A2
XX

A1
A0
XXXXXX XXXXXX

DUP EXECUIE
A2
00

A1
340000

A0
000000

23
$ 00003F
$ 000021
$ 000000

A1
765432

A0
XXXXXX

Memoria X:
0

:
:
XXXXXX
:
:

23
Domeniu
pentru
adresare
absolut
scurt

:
:
765432
:
:

0
$ 00003F
$ 000021
$ 000000

67

Capitolul 3 Procesoarele DSP Motorola 56300

Adresarea absolut scurt folosete o adres de 6 bii n codul

68

Aplicaii ale procesoarelor de semnal n comunicaii

EXEMPLU:

instruciunii completat cu zerouri.

NAINTEA EXECUIEI

Este posibil adresarea primelor 64 cuvinte din memorie (vectori de

Memoria P:
23

ntrerupere etc.)
PC
$001FF9

Adresare I/O scurt.


Acest mod folosete o adres de 6 bii n codul instruciunii completat
cu unu. Sunt adresate ultimele 64 cuvinte din memorie.

jmp <$123

$ 000FFF

EXEMPLU:
NAINTEA EXECUIEI
A2
XX

A1
ABCDEF

DUP EXECUIE

A0
XXXXXX

A2
XX

Memoria X:

movep a1,x:$fffffd

$ FFFFFD
$ FFFFC0

0
:
:
XXXXXX
:
:

A0
XXXXXX

$ 000000

Memoria P:
0

:
:
jmp $0123
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:

23

Spaiu de
adres pentru
salt scurt

:
:
:
:
:
:
:
:
:
:
Instr. urmt.
Instr. urmt.
:
:
:
:
:
:

$ 000FFF
PC
$000123

$ 000000

Memoria X:

23
$ FFFFFF

A1
ABCDEF

DUP EXECUIE

23
Spaiul pentru
adresarea
absolut
scurt I/O

:
:
ABCDEF
:
:

0
$ FFFFFF
$ FFFFFD
$ FFFFC0

Adresare relativ la PC (Program Counter)


Adresa operandului este obinut adunnd un deplasament la adresa
instruciunii curente aflat n PC. Deplasamentul poate fi:
scurt (9 bii), coninut n codul instruciunii.

Adresare scurt pentru salt.


Acest mod folosete o adres de 12 bii n codul instruciunii pentru

lung (24 bii), coninut n cuvntul extensie din codul instruciunii.


coninutul unui registru R.

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


Sunt adresate ultimele 4096 cuvinte.

Moduri de Modificare a Adresei


Registrele de modificare Mn definesc tipul de operaie aritmetic a
adresrii care urmeaz a fi efectuat i permite utilizatorului s creeze diferite
structuri de date n memorie cum ar fi:
liste (FIFO).

69

Capitolul 3 Procesoarele DSP Motorola 56300


linii de ntrziere.

70

Aplicaii ale procesoarelor de semnal n comunicaii

Modificarea liniar

buffere circulare.

Mn=$FFFFFF

stive (LIFO).

Calculul adresei se face liniar pe 24 de bii

cadre n ordinea invers a biilor pentru FFT.

Se poate folosi incrementarea, decrementarea sau ofsetul din registrul

Tabelul de mai jos arat modurile de calcul a adresei n funcie de valoarea

Nn pentru calculul adresei.

scris n Mn.
EXEMPLU:
Registrul modificator Mn

Modul de calcul al adresei

$XX0000

n ordinea inversat a biilor (Bit-Reverse)

$XX0001

Modulo 2

$XX0002

Modulo 3

$XX7FFE

Modulo 32767 (2151)

$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)

move x0, y:(r0)+n0


Increment:

Adresa de start:
R0

$0000A5(165)

N0

$00000F(15)

Adresare liniar:
M0

$FFFFFF

Memoria Y

$0000D2(210
$0000C3(195)

Registrul
increment
No

$0000B4(180)
Adresa de start $0000A5(165)

Modificarea modulo
Calculul adresei se face modulo M, fornd adresa s rmn ntr-un
interval de lungime M.

71

Capitolul 3 Procesoarele DSP Motorola 56300

72

Acest tip de modificare a adresei este util n crearea de:

EXEMPLU:

liste circulare.

move x0, x:(r0)+n0


Adresa de start
R0

Aplicaii ale procesoarelor de semnal n comunicaii

Increment

165 ($0000A5)

N0 15 ($00000F)

linii de ntrziere.

Modulo M=90
M0 89 ($000089)

cadre de eantioane pe care se efectueaz decimarea, interpolarea i


generare de sinusoide.

Limita maxim 217 ($0000D9)


XXXX0000 + M -1
j

Dac adresarea circular este folosit cu ofset (registrul N), acesta nu


trebuie s depeasc valoarea M.

210 ($0000D2)
195 ($0000C3)
180 ($0000B4)

Incrementul n
registrul N0

cadrului, adresa rezultat va avea aceeai poziie relativ n bufferul de ordin


p.

Adresa de start 165 ($0000A5)


Adresa din
registrul
R0

O excepie este cazul n care N = p 2 j este un multiplu al lungimii

Modulul
n registrul
M0

135 ($000087)

2j M

Lower Bound 128 ($000080)


XXXX0000
j

Principalele aplicaii 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.
Depirea adresei maxime a cadrului va fora adresa s ajung la adresa
de baz, iar decrementarea sub adresa minime va duce adresa la adresa
maxim a cadrului.

Reguli pentru obinerea unui cadru adresat circular:

Se folosete doar n cazul adresrii cu ofset.

Valoarea scris n registrul modificator: Mn = M 1


Adresa de baz trebuie aleas o putere a lui 2 care s ndeplineasc
condiia: 2 j M . Astfel adresa de baz are j zerouri LSB.
Adresa de sfrit este: 2 j + M 1
Adresa iniial din R nu trebuie neaprat s fie adresa de baz a cadrului,
putnd fi oriunde n cadrul domeniului de adrese.
Adresa de baz a cadrului sau cea de sfrit nu sunt stocate. Numai
lungimea este scris n Mn. Adresa de baz este determinat de adresa
scris n Rn (anulnd ultimii j bii).

Modificarea n ordinea invers a biilor


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 biilor registrelor Rn i Nn,
adunarea ofsetului la adres i, reinversnd ordinea biilor, obinerea
rezultatului.

73

Capitolul 3 Procesoarele DSP Motorola 56300

Acest mod de adresare este util n calculul FFT la adresarea factorilor


k

de rotaie dintr-un cadru de lungime N = 2 sau a ordonrii datelor (decimare


n timp etc.).
Pentru un cadru de lungime N = 2k rezult c ultimii k bii ai adresei
vor trebui inversai.

74

Aplicaii ale procesoarelor de semnal n comunicaii

EXEMPLU:
Adresa
de start
R0

3072 ($000C00)

R0

Adresa de baz a secvenei de intrare trebuie s fie putere ntreag a lui

move x:(r0)+n0, x0

2 ndeplinind condiia 2 N .

R0

3584 ($000E00)

3328 ($000D00)

Increment

( 0)
N0

move x:(r0)+n0, x0

Pentru aceasta registrul Nn trebuie s aib valoarea Nn = 2k 1 .


m

Indexul
n cadru

(512)

512 ($000C00)
Bit Reverse

M0

0 ($000000)

(256)

move x:(r0)+n0, x0

EXEMPLU:
M0 = $000000

R0 = $000008

N0 = 4 = 2

31

O secven de intrare de 8 elemente are adresa de baz $8 = 1000.


Ultimii trei LSB ai adresei vor fi: 000,001,002,...,111.
Adresa
secvenei
iniiale
$8 = 1000

#0.0

$9 = 1001

#0.1

$A = 1010

#0.2

$B = 1011

#0.3

$C = 1100

#0.4

$D = 1101

#0.5

$E = 1110

#0.6

$F = 1111

#0.7

Secvena
iniial

Modificarea
adresei cu
transport invers
R0 = 1000 +
N0 = 0100
R0 = 1100 +
0100
R0 = 1010 +
0100
R0 = 1110 +
0100
R0 = 1001 +
0100
R0 = 1101 +
0100
R0 = 1011 +
0100
R0 = 1111 +
0100

Secvena
reordonat
$8 #0.0

R0

3840 ($000F00)

(768)

Limita maxim 4095 ($000FFF)


XXXX1111
k

2k N
Adresa minim 3072 ($000C00)
XXXX0000
k

Memoria X

Cadru
FFT de
lungime
N=1024

$C #0.4
$A #0.2

Instruciuni de transfer paralel al datelor

$E #0.6

Este posibil transferul paralel al datelor pe magistralele de date X i Y.

$9 #0.1

Aceasta permite operaiilor ALU s fie efectuate n paralel cu transferul

$D #0.5
$B #0.3
$F #0.7

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.

75

Capitolul 3 Procesoarele DSP Motorola 56300

Pot fi specificate dou adrese efective independente n transferul paralel


al datelor dac una din adrese folosete bancul inferior al registrelor de adrese

76

Aplicaii ale procesoarelor de semnal n comunicaii

EXEMPLU:
Transferuri n paralel cu instruciuni aritmetice

(r0-r3) iar cealalt adres, bancul superior de registre (r4-r7).

Instruciune

EXEMPLU:
Transferuri n paralel
instruciune

operanzi

add

x0,a

destinaia 2

add a,b

#$44,a1

Transfer ntre registre

add x0,a

a1,y0

sursa 2

Actualizare registru adres

add y1,a

(r0)+n0

destinaia 1

destinaia 2

Transfer cu memoria X sau Y

add x1,b

b,x:$100

a,x:(r0)+n0

y:(r4) ,y0

add y0,a

a,x1

Transfer cu memoria L

add x,a

a10,L:$300

Transfer cu memoria X i Y

add y,b

b,x:(r3)+n3

y:(r7)+n7,y1

Instruciuni de multiplicare i

mac x0,y0,a

x:(r0)+,x0

y:(r4),y0

adunare

macr y0,y0,b

x1,x:(r1)+

b,y:(r5)

Pot fi:
1. Pn la dou transferuri de date

2. Operaii logice

2. Dou moduri de adresare diferite

3. Rotunjiri convergente

3. Acces la memoria X, Y, L, XY.

1. Coduri condiionale

destinaia 1

sursa 1

1. Operaii ALU

Sunt suportate:

sursa 2

Transfer cu date imediate

Transfer cu registre i cu
memoria X sau Y

Pot fi:

sursa 1

Sunt suportate:
1. Scalarea
2. Limitarea
3. Extensie de semn sau completarea cu
zeroruri a acumulatorului
4. Dou surse identice
5. NU E PERMIS aceeai destinaie

y:(r2),y0

77

Capitolul 3 Procesoarele DSP Motorola 56300

78

Aplicaii ale procesoarelor de semnal n comunicaii


Facilitile oferite de PCU sunt:

3.5 UNITATEA DE CONTROL AL PROGRAMULUI (PCU)

PCU efectueaz ncrcarea i decodificarea instruciunilor, controlul


ciclurilor DO i REP i procesarea situaiilor de excepie ntr-un cadru de
execuie pe apte niveluri pipeline.
Arhitectura PCU este format din trei blocuri:
GDB

PDB

PAB

GDB

Moduri de adresare optimizate pentru aplicaiile DSP;


Controler pentru cache de instruciuni;
Extensia stivei sistemului;
Cicluri DO suprapuse;
Revenire rapid din ntreruperi.
Operaiile Pipeline
Arhitectura organizat pe apte niveluri de pipeline permite execuia

CONTROLER DE
NTRERUPERE A
PROGRAMULUI

CONTROLER DE
DECODIFICARE A
PROGRAMULUI

GENERATOR
DE ADRESE
DE PROGRAM

Cereri de ntrerupere
RESET

Controler de ntrerupere a programului (Program Interrupt Controller)


- arbitreaz toate cererile de ntrerupere (interne sau externe) i

majoritii instruciunilor la o rat de o instruciune pe ciclu de ceas.


PreFetch
Nivelul pipeline

Descrierea operaiilor

PreFetch I

Generarea adresei pentru instruciune


Incrementarea PC

PreFetch II

Instruciunea este citit din memorie

genereaz adresa vectorului de ntrerupere corespunztoare.


Decodificare
Controler de decodificare a Programului (Program Decode Controller)
- decodific cei 24 de bii de instruciune ncrcai ntr-un latch i

Nivelul pipeline

Descrierea operaiilor

Decodificare

Decodificarea instruciunii

genereaz toate semnalele de control pipeline.


Generarea Adreselor
Generator de adrese de program (Program Address Generator)
- conine tot hardware-ul necesar pentru generarea adreselor de program,

Nivelul pipeline

Descrierea operaiilor

Address Gen I

Generarea adresei pentru operaii de transfer a

stiva sistemului i controlul ciclurilor.

datelor
Address Gen II

Actualizarea pointerului de adres

Capitolul 3 Procesoarele DSP Motorola 56300

79

80

Aplicaii ale procesoarelor de semnal n comunicaii


Unele instruciuni necesit un timp suplimentar de execuie i anume:

Execuie
Nivelul pipeline

Descrierea operaiilor

Toate instruciunile care ocup dou cuvinte de memorie.

Execuie I

Citirea operanzilor surs pentru nmulire sau

Instruciunile care folosesc un mod de adresare care necesit mai mult de

adunare
Citirea registrelor surs pentru scrierea n memorie

un ciclu pentru calculul adresei.


Instruciunile care provoac o schimbare n cursul programului.

nmulirea
Scrierea registrelor destinaie pentru citirea din
memorie
Execuie II

Citirea operanzilor surs pentru adunare dac acetia


au fost scrii ntr-o operaie ALU precedent

Operaiile pipeline ale PCU rmn ascunse utilizatorului, uurnd


programarea.
Hardware-ul prezent n fiecare unitate de execuie a procesorului
detecteaz orice conflict pipeline i oprete desfurarea pipeline pn cnd

Adunarea

rezultatele instruciunii precedente sunt disponibile pentru instruciunea

Scrierea rezultatului adunrii n registrul destinaie

urmtoare.

Scrierea rezultatului nmulirii n registrul destinaie

Programatorul poate reduce ntrzierile n pipeline i mbunti viteza


de execuie prin modificri adecvate ale programului.
ntrzieri datorate operaiilor aritmetice
Apar cnd se ncearc citirea din acumulator dac acelai acumulator
este destinaia instruciunii aritmetice anterioare. Se poate introduce o alt
instruciune ntre cele dou.
mac x0,y0,a

mac x0,y0,a

move a1,x:(r0)+

mac x1,y1,b
move a1,x:(r0)+

ntrzieri datorate transferurilor de date


Apar cnd registrul surs al unei instruciuni move este registrul
destinaie al instruciunii move anterioare. Se poate introduce o alt
instruciune ntre cele dou.

81

Capitolul 3 Procesoarele DSP Motorola 56300

82

Aplicaii ale procesoarelor de semnal n comunicaii

Contor program (Program Counter)


move y(r1)+,a1

move y(r1)+,a1

move a,x:(r0)+

mac x1,y1,b

Registru pe 24 de bii care pstreaz adresa din memoria de program a


instruciunii curente.

move a,x:(r0)+

Este salvat n stiv


la nceperea unui ciclu hardware;

ntrzieri datorate generrii adreselor


Apar cnd o instruciune move folosete pentru generarea sau
calcularea adresei drept pointer unul din registrele de adres R0-R7 i una
din ultimele trei instruciuni modific tripletul de registre R, N, M respectiv.
Se introduc pn la trei instruciuni nop.

n cazul unei ntreruperi lungi.


Contor ciclu (Loop Counter)
Contor pe 24 de bii care specific de cte ori este repetat un ciclu (DO
sau REP). Este stocat n stiv de instruciunea DO i scos din stiv la sfritul

move $123456,r1

ciclului sau la ENDDO.

move a,x:(r1)+ ; se introduc 3 instruciuni nop

Registrul adresei de sfrit de ciclu (Loop Address)

Modelul de Programare PCU:


23

la apelul unei subrutine;

48

Registru pe 24 de bii care indic adresa ultimei instruciuni din ciclu.


SSH

2423

SSL

23

Este stocat n stiv de instruciunea DO i scos din stiv la sfritul ciclului


sau la ENDDO.

CONTOR PROGRAM (PC)


23

16 15

SCS

87

CONTOR CICLURI (LC)

23

EOM COM

16 15

EMR

87

MR

CCR

Adresa de baz a vectorului de ntreruperi (Vector Base Address)


Registru pe 24 de bii (cu ultimii 8 LSB zero) care pstreaz adresa de

REGISTRU MOD OPERARE (OMR)


23

REGISTRU DE STARE (SR)

STIVA SISTEMULUI

REGISTRU ADRES CICLU (LA)


23

87

CONTOR STIV (SC)


23

6543

23

*
ADRESA DE BAZ A VECTORULUI
DE NTRERUPERI (VBA)
* BIII SUNT 0

baz a vectorului de ntreruperi.

Stiva sistemului (System Stack)


Zon de memorie de 16cuvinte pe 48 bii mprit n dou zone (pe 24
bii fiecare):

INDICATOR STIV (SP)

DIMENSIUNEA STIVEI (SZ)

System Stack High (SSH).


System Stack Low (SSL).

83

Capitolul 3 Procesoarele DSP Motorola 56300

84

Funciile stivei:

Aplicaii ale procesoarelor de semnal n comunicaii


Dac nu se realizeaz extensia stivei, se pot implementa 7 cicluri DO

pstreaz adresa de revenire (PC) i registrul de stare (SR) la apelul

suprapuse, 15 apeluri de subrutine sau 15 deserviri de ntreruperi lungi, sau


combinaii ntre ele.

unei subrutine.

La apelul unei subrutine (JSR) adresa de revenire (PC) este scris n

pstreaz LA, LC, PC i SR la efectuarea ciclurilor.

SSH iar registrul de stare (SR) este scris n SSL.

pstreaz variabile la apeluri de subrutine.

La revenirea din subrutin (RTS) numai PC este scris din stiv, SR

Stiva poate fi folosit pentru implementarea de cicluri suprapuse


deoarece la iniierea unui ciclu hardware sunt stocate automat n stiv LA,

rmnnd nemodificat.
La revenirea din subrutina de ntrerupere (RTI), att PC ct i SR

LC, PC i SR anterioare, iar la terminarea ciclului acestea sunt restabilite

sunt rescrise din stiv.

(permind continuarea unui eventual ciclu anterior).


endlp 1

Extensia stivei poate fi activat de Stack Extension Enable (SEN),

UNITATEA DE CONTROL AL PROGRAMULUI


SYSTEM STACK
STIVA DE SISTEM

COMPARATOR

LA
SP

PC

=
LA
PC

-1

SR

LC
SR

(Registru
adresa
de salt)

bitul 20 din OMR.

(Contor
ciclu)

memoria de date a extensiei de stiv.

(Registru
de stare)
(Contor
Program)

LC
Comparator
(Contor ciclu)
ieire la LC=1

Stack Extension Pointer (EP) aflat n AGU pstreaz adresa din


Stack Size Register (SZ) determin numrul locaiilor de memorie
alocate pentru extensia stivei n memoria de date.
Stack Counter Register (SC)

15
0

Registru pe 5 bii folosit pentru a monitoriza cte intrri n stiv sunt


folosite.

LF=1
(Fanion ciclu)
DO #count,endlp
PC

(Ultima LA
Instructiune)

instr
instr
instr
:
:
:
:
:
instr
instr
endlp instr

Registrul indicator de stiv (Stack Pointer Register)


Registru care indic vrful stivei i eventualele condiii de eroare.
Ultimii 4 bii sunt incrementai/decrementai la fiecare scriere/citire din

Ciclu

stiv.
Biii 4 i 5 indic posibile erori de tipul stiv goal sau plin precum i
depirea limitelor stivei.

85

Capitolul 3 Procesoarele DSP Motorola 56300


23

P[23:6]

UF/P5

SE/P4

86

Aplicaii ale procesoarelor de semnal n comunicaii

Mode Register i Extended Mode Register


Sunt registre de control care definesc starea curent a sistemului.

P[3:0]

Biii MR i EMR sunt afectai de resetarea procesorului, ntreruperi,


Indicator stiv
Fanion Eroare-Stiv/P4
Fanion stiv goal/P5
P[23:6]

Registrul de stare (Status Register)

DO, ENDDO, RTI i alte instruciuni care modific biii din acest registru.
Instruciuni de ciclare
Repetarea unei instruciuni de n ori

Registru de 24 de bii alctuit din 3 pri:

REP n

Extended Mode Register (EMR)

n:

Mode Register (MR)

valoarea aflat la o adres efectiv sau absolut;


orice registru intern;

Condition Code Register (CCR)

valoare imediat pe 8 bii: #xxx;


Valoarea n este scris n LC i decrementat la fiecare repetare a
instruciunii pn cnd LC = 1.
Pentru instruciunea repetat se face fetch o singur dat, aceasta

CP1 Nivel Prioritate Bit 1

LF Fanion bucl DO

CP0 Nivel Prioritate Bit 0

DM nmulire precizie dubl L Limitare

S Bit scalare

RM Mod de rotunjire

SC Copatibilitate 16-Bii

E Extensie

SM Saturare aritmetic

S1 Mod de scalare Bit 1

U Nenormalizat

rmnnd n registrul de instruciune pn la terminarea ciclului. De aceea


instruciunea REP este nentreruptibil.
Dac LC este 0 instruciunea este repetat de 65536 ori.

CE Activare cache instr.

S0 Mod de scalare Bit 0

N Negativ

SA Aritmetic pe 16 bii

I1 Mascare ntreruperi Bit 1

Z Zero

Repetarea de n ori a instruciunilor aflate pn la eticheta label

FV Fanion DO-Forever

I0 Mascare ntreruperi Bit 0

V Depire

DO n,label

C Depire

n:

valoarea aflat la o adres efectiv sau absolut;


orice registru intern;

Registrul de condiii (Condition Code Register)


Registru de control care definete rezultatele calculelor aritmetice
anterioare.
Biii CCR sunt afectai de operaii ALU, transferuri paralele sau
instruciuni care fac referire direct la acest registru.

valoare imediat pe 8 bii: #xxx;


label:

adres absolut.

Capitolul 3 Procesoarele DSP Motorola 56300

87

Pentru fiecare instruciune din ciclu face fetch de fiecare dat. De


aceea instruciunea DO este ntreruptibil.
Ciclurile DO pot fi suprapuse (efectuarea unui ciclu n interiorul altuia).

88

Aplicaii ale procesoarelor de semnal n comunicaii


Condiiile testate la execuia instruciunilor condiionale se determin

din biii din registrul CCR (Condition Code Register) pe baza unor ecuaii
prezentate mai jos:

Adresa sfritului ciclului este calculat (i scris n LA) prin evaluarea


adresei etichetei label i scznd unu (pentru cazul n care ultima instruciune

Codul Condiional

Semnificaia cc

Condiia

ocup dou cuvinte de memorie). De aceea eticheta sfritului de ciclu trebuie

CC(HS)

Carry Clear (Higher or Same)

C=0

s reprezinte adresa instruciunii de dup ciclu.

CS(LO)

Carry Set (Lower)

C=1

EC

Extension Clear

E=0

Repetarea de n ori a instruciunilor aflate pn la adresa PC+val

EQ

EQual

Z=1

DOR n,val

ES

Extension Set

E=1

valoarea aflat la o adres efectiv sau absolut;

GE

Greater than Equal

NV=0

orice registru intern;

GT

Greater Than

Z + (N V) = 0

valoare imediat pe 8 bii: #xxx;

LC

Limit Clear

L=0

valoarea relativ adunat la PC reprezentnd

LE

Less than or Equal

Z + (N V) = 0

sfritul ciclului adres absolut.

LS

Limit Set

L=1

LT

Less Than

NV=1

Repetarea continu a instruciunilor aflate pn la adresa etichet

MI

Minus

N=1

DO FOREVER,label

NE

Not Equal

Z=0

NR

NoRmalized

Z + (U E) = 1

PL

PLus

N=0

NN

Not Normalized

Z + (U E) = 1

n:

val:

Repetarea continu a instruciunilor aflate pn la adresa PC+val


DOR FOREVER,val
Ieirea din ciclurile DO, DOR, DO FOREVER, DOR FOREVER se
face cu instruciunile:
ENDDO

se iese din ciclul curent nainte ca LC s ajung la 1.

BRKcc

se iese din ciclul curent dac se ndeplinete condiia cc.

Unde:
+ reprezint operatorul SAU
reprezint operatorul SAU-EXCLUSIV
reprezint operatorul I

Capitolul 3 Procesoarele DSP Motorola 56300


Alte instruciuni de control al programului

89

90

Aplicaii ale procesoarelor de semnal n comunicaii

Capitolul 3 Procesoarele DSP Motorola 56300

91

92

Aplicaii ale procesoarelor de semnal n comunicaii


considerm stocate n memorie irurile de N valori x(k ) i y (n k ) ;

EXEMPLE DE PROGRAME:

Registru adres

Memoria X

r0

x(0)

Calculul sumei de produse


S se realizeze programul care calculeaz suma de produse (convoluie

Memoria Y
y ( n)

r4

sau corelaie):

se va folosi modificarea modulo N a adresei pentru ca la sfritul


N 1

s (n) = x (k ) y ( n k )

ciclului, registrele r0 i r4 s indice adresele de unde s-a pornit.

k =0

registrul de adres r0 este incrementat pentru urmtorul x(k ) .

Pseudocodul pentru acest program este:

registrul r4 este decrementat pentru y (n k ) .

s(n)=0;
for (k=0,k<N,k++)

Etichet

Instr.

Operanzi

s(n) = s(n) + x(k) * y((n-k)%N);

Magistrala
de date X

Magistrala
de date Y

Cicluri
ceas

equ

14

org

x:0

x_addr

dsm

org

y:0

y_addr

dsm

org

p:$100

move

#x_addr,r0

move

#N-1,m0

suma se calculeaz n acumulatorul a care se iniializeaz cu 0.

move

#y_addr,r4

instruciunea mac calculeaz x0*y0 i adun la valoarea din a.

move

m0,m4

clr

do

#N,_end

n limbaj de asamblare suma se poate calcula repetnd instruciunea


mac ntr-un ciclu do astfel:
...
clr

do

#N,_end

...
mac

x0,y0,a

_end

n registrele de date x0 i y0 trebuie transferai din memorie operanzii


x(k ) i y (n k ) :

move

avem nevoie de dou registre de adres r0 i r4 care s fie

move
mac

iniializate cu adresele de start ale celor dou iruri i s indice pe


parcurs adresa elementului x(k ) respectiv y (n k ) din ir.

5
1

x:(r0)+,x0
y:(r4)-,y0

1
1

x0,y0,a

_end

TOTAL

3N+10

93

Capitolul 3 Procesoarele DSP Motorola 56300


Optimizarea programului.

94

Aplicaii ale procesoarelor de semnal n comunicaii


Calculul valorii unui polinom

Optimizarea programului se poate face prin utilizarea transferurilor


paralele i a instruciunii rep care repet de N ori o singur instruciune.

S se realizeze programul care calculeaz polinomul:


N 1

p ( x) = a (k ) x k

Cele dou instruciuni de transfer care se efectuau naintea nmulirii cu

k =0

acumulare pot fi efectuate n paralel cu aceasta. Diferena este c transferul


operanzilor din memorie n registre se face dup citirea operanzilor din

Pseudocodul pentru acest program este:

registrele x0 i y0 i nceperea efecturii nmulirii. De aceea pentru prima

x_k = x;

nmulire din ciclu, operanzii trebuie iniializai naintea ciclului (n paralel cu

p(x) = a(0);
for (k=1,k<N,k++)

tergerea acumulatorului, de exemplu).

p(x) = p(x) + a(k) * x_k;


x_k = x_k * x;

Etichet

Instr.

Operanzi

Magistrala
de date X

Magistrala
de date Y

Cicluri
ceas

...
clr

rep

#N-1

mac

X0,y0,a

macr

X0,y0,a

x:(r0)+,x0 y:(r4)-,y0

x:(r0)+,x0 y:(r4)-,y0

registrul de adres r0 este iniializat cu adresa coeficienilor a (k ) .

valoarea lui x este pstrat n registrul y1.

calculul lui x k se face pstrnd pe x k 1 n registrul x0 i nmulind


aceast valoarea cu valoarea lui x din registrul y1.

1
TOTAL

N+6

noua valoare x k se transfer apoi n registrul x0 pentru urmtoarea


iteraie.

Ciclul este efectuat de N 1 ori pentru ca numrul transferurilor din memorie

polinomul se calculeaz n acumulatorul a cu instruciunea

s fie egale cu N. Ultima nmulire i acumulare se face n afara ciclului

mac y0,x0,a. La valoarea anterioar din a se adun produsul ntre

folosind i rotunjirea rezultatului pe 24 de bii.

coeficientul a (k ) din registrul y0 i x k din registrul x0.

95

Capitolul 3 Procesoarele DSP Motorola 56300

Etichet
N

a_addr

Instr.

Operanzi

Magistrala
de date X

Magistrala
de date Y

Cicluri
ceas

equ

10

org

x:0

dsm

org

p:$100

move

#a_adr,r0

move

x:#val_x,y
1

move

x:(r0)+,a

move

x:(r0)+,y0

move

y1,x0

do

#N-1,_end

mac

y0,x0,a

mpyr

x0,y1,b

move

96

Aplicaii ale procesoarelor de semnal n comunicaii


Optimizarea programului.
Se poate efectua n avans calculul x k 1 x astfel ca transferul din b s

nu se fac pentru valoarea calculat n instruciunea anterioar, ci n paralel cu


aceasta (deci pentru valoarea din b naintea nmulirii).
Etichet

move

1
b,x0

TOTAL

4N+6

deoarece rezultatul nmulirii x k 1 x este n acumulatorul b, acesta


trebuie transferat n registrul x0 (o instruciune de transfer
suplimentar).
deoarece registrul surs de transfer b este acelai cu destinaia
instruciunii anterioare de nmulire, apare o ntrziere de o
instruciune n execuia programului (transfer stall).

Magistrala
de date Y

Cicluri
ceas
1

move

x:#val_x,x
0

move

x:(r0)+,a

x:(r0)+,y0

x0,x0,b

b,y1

2 ilock
5

do

#N-1,_end

mac

y0,x0,a

x:(r0)+,y0

mpyr

y1,x0,b

b,x0

macr

y0,x0,a

_end

2 ilock

_end

Magistrala
de date X

move

1
1

Operanzi
#a_adr,r0

mpyr

5
x:(r0)+,y0

Instr.

1
TOTAL

Succesiunea operaiilor este:


x0 = x
a = a(0)
b = x2 y0 = a(1)
y1 = b = x2
a = a(1) * x + a(0)
2

b=x *x=x

a = a + a(2) * x2
2

b=x *x =x

a = a + a(3) * x3
2

b=x *x =x

y0 = a(2)
x0 = x2
y0 = a(3)
x0 = x3
y0 = a(4)
x0 = x4

2N+10

Capitolul 3 Procesoarele DSP Motorola 56300

97

Sortarea unui vector prin selecie direct

98

Aplicaii ale procesoarelor de semnal n comunicaii

Registre folosite:

Algoritmul sorteaz elementele unui vector aflate n memoria X. Sortarea este

indexul elementelor: r0 = j , r1 = k , r2 = i

efectuat in place (n aceeai zon de memorie) i nu necesit memorie

ciclul de cutare a minimului (numrul de elemente nesortate): r4 = j.

suplimentar.

Instruciunea cmp b,a face diferena ntre a i b i modific biii de

Algoritmul caut minimul elementelor ne-sortate din vector pe care l schimb

condiii din CCR n funcie de rezultatul scderii. Dac a b < 0 bitul n = 1.

cu primul element de dup secvena sortat.

Instruciunea tge y0,a r0,r1 transfer valoarea din y0 n a i valoarea

Timpul de execuie este proporional cu ptratul numrului de elemente din

din r0 n r1 dac rezultatul comparaiei anterioare este mai mare sau egal ca

vector i este constant chiar dac vectorul este deja ordonat cresctor,

0.

descresctor sau elementele sunt n ordine aleatoare.


iniializri
i = 0
j = 0

move

#N_ITEMS,r4

move

#ARRAY,r2

move

#-2,n1

nop

a = data[i]

do

#N_ITEMS-1,_loop2

lua

j = i + 1
k = i

(r2)+,r0

nop
nop

b = data[j]

DA

move

x:(r2),a

move

x:(r0)+,b

move

r0,r1

a>b

do
a = b
k = j

y:(r4)-,b

NU

r4,_loop1

cmp

b,a

x:(r0)+,b

tge

y0,a

r0,r1

_loop1
nop

j = j + 1

data[k] = data[i]
data[i] = a

_loop2
i = i + 1

move

x:(r2),y0

move

a,x:(r2)+

move

y0,x:(r1+n1)

b,y0

Capitolul 3 Procesoarele DSP Motorola 56300

99

100

Instruciunea IFcc

Aplicaii ale procesoarelor de semnal n comunicaii


Instruciunea BRKcc

Execut instruciunea aritmetic dac este ndeplinit condiia din IFcc

Se iese condiionat din ciclu do (dac este ndeplinit condiia cc).

(bazat pe operaia anterioar). Altfel nu se execut instruciunea ALU.

a y0
move

#>2,a

; a = 2

move

#>1,x0

; x0 = 1

add

x0,a

; a = 2 + 1 = 3

sub

x0,a

ifne

do #loop_c,loop1

aa1

; dac rezultatul anterior


; nu e 0 se scade x0 din a

move

#>-2,a

; a = -2

move

x0,b

; b = 1

addl

a,b

sub

x0,a

BRKeq

a = 0?

NU

LC = 1

NU

Z=0

; b = 2*b + a = 0
ifne

DA

; rezultatul anterior e 0
; nu se executa scaderea

nop

LC--

DA
Instruciunea DEBUGcc

loop1

Dac este ndeplinit condiia 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

add

y0,a

; a = 0

debugeq

; opreste executia si asteapta

nop

; comanda OnCE (run sau step)

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

101

Capitolul 3 Procesoarele DSP Motorola 56300

102

Aplicaii ale procesoarelor de semnal n comunicaii


Transferul de date pentru un singur canal ocup minimum 2 tacturi de

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
combinaie fr nici o intervenie extern.
Deoarece exist magistrale de date i adrese dedicate DMA, precum i
datorit modului de mprire a memoriei interne rezulta c operaiile de acces
direct la memorie nu interfer cu restul operaiilor ce au loc n interiorul
DSP56300.
Unitatea de interfa cu magistrala (BIU) primete comenzile necesare
de la controlerul DMA i poate prelucra activitile 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.

ceas pentru un singur cuvnt.


Numrul 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 aceiai 1/4K de RAM intern n acelai 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 conine adresa de baz
a sursei urmtorului transfer DMA.
DDRi registrul destinaie DMA pentru canalul i care conine adresa de
baz a destinaiei urmtorului transfer DMA.
DCOi registrul contor DMA pentru canalul i care conine numrul de
transferuri DMA rmase de executat.
DCRi registrul de control DMA pentru canalul i care conine biii

Tipurile de transfer de date efectuate de controlerul DMA sunt:

necesari controlului operaiilor de pe canal.


Mai sunt 5 registre nededicate:

Sursa / destinaia transferului

Numrul minim de cicluri de ceas


pentru transferul unui cuvnt

Memorie intern Memorie intern

Memorie extern Memorie intern

2 + timp acces memoria extern

Memorie extern Memorie intern

2 + timp acces memoria extern

Memorie intern Porturi I/O

Memorie extern Porturi I/O

2 + timp acces memoria extern

Porturi I/O Porturi I/O

4 registre DMA de ofset (DOR0, DOR1, DOR2, DOR3) care conin


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).

Capitolul 3 Procesoarele DSP Motorola 56300

103

104

Aplicaii ale procesoarelor de semnal n comunicaii


Registrul contor DMA (DCO)

Registrul de control DMA (DCR)

Modul A un singur contor (transfer unidimensional).


23

0
DCO
Numrul de transferuri este egal cu DCO+1. nainte de fiecare transfer

DMA, registrul DCO este testat astfel:


DCO > 0 este iniiat transferul de la adresa surs, DCO este decrementat
i registrul de adres DSR este actualizat n funcie de modul de adresare a
sursei din registrul de control DCR.
DCO = 0 ultimul transfer este iniiat de la adresa surs, registrul de
adres este actualizat i DCO este ncrcat cu valoarea iniial.

naintea transferului

Dup transfer

DSR

DCO

Adresa surs a
transferului

DSR

DCO

S+1

S+1

S+1

S+2

S+2

S+2

S+3

S+3

S+3

S+4

S+4

S+4

S+5

S+5

S+5

S+6

n exemplul de mai sus am considerat c adresa surs este modificat


(incrementat) n timpul transferului. Acelai lucru se poate ntmpla i cu
adresa destinaie a transferului n funcie de modul de adresare destinaie din
registrul de control DCR

105

Capitolul 3 Procesoarele DSP Motorola 56300

106

Aplicaii ale procesoarelor de semnal n comunicaii

nceteaz s mai execute orice operaie, ori ateapt o nou declanare a

Transferuri DMA multidimensionale

transferului.
DMA-ul este capabil de transferuri de date aflate n structuri complexe.
Modul de adresare al sursei sau destinaiei poate fi bi sau tridimensional (2D
sau 3D).
Transferul bidimensional (2D)
Pentru transferul 2D, numrtorul DCO este divizat n DCOL i
DCOH.
Modul B dou contoare (transfer bidimensional):
23

12 11
DCOH

naintea transferului

Dup transfer

DSR

DCOH:L

Adresa surs a
transferului

DSR

DCOH:L

1:2

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

DCOL
Numrul total de transferuri efectuat este (DCOH + 1) x (DCOL + 1).

Un registru de ofset DOR este folosit pentru a calcula saltul de adres.


Adresa transferului DMA este coninut de registrul de adrese (DSRi
sau DDRi).

EXEMPLU:
Salt cu ofset

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 iniiat transferul de la adresa surs, DCOL
este decrementat i registrul de adres DSR este incrementat.
DCOH > 0 i DCOL = 0 este iniiat 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 ncrcat cu valoarea iniial.
DCOH = 0 i DCOL = 0 ultimul transfer este iniiat de la adresa surs,
registrul de adres este actualizat i DCOH i DCOL sunt ncrcate cu
valorile iniiale. Odat cu acest ultim transfer de bloc de date, DMA-ul ori

Transfer liniar 2D

107

Capitolul 3 Procesoarele DSP Motorola 56300

108

Aplicaii ale procesoarelor de semnal n comunicaii

Transferul tridimensional (3D)

DCOH, DCOM i DCOL sunt ncrcate cu valorile iniiale. Dup acest

Pentru transferul 3D, registrul contor este mprit n trei registre

ultim transfer, DMA-ul ateapt o nou declanare.

DCOH, DCOM i DCOL, avnd dimensiuni diferite.


Modurile C, D, E trei contoare (transfer tridimensional):
23

12 11
DCOH

23

naintea transferului

6 5
DCOM

18 17

DCOH

DSR

DCO

Adresa surs a
transferului

DSR

DCO

1:1:2

S+1

1:1:1

S+1

1:1:1

S+1

S+2

1:1:0

DCOL
6 5

DCOM

0
DCOL

Dup transfer

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

ajuns la 0 i se efectueaz urmtoarele operaii:

S+2O0+O1+6

0:0:2

S+2O0+O1+6

S+2O0+O1+7

0:0:1

DCOH > 0, DCOM > 0 i DCOL > 0 este iniiat transferul de la adresa

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

23

18 17
DCOH

12 11
DCOM

0
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

surs, DCOL este decrementat i registrul de adres este incrementat.


DCOH > 0, DCOM > 0 i DCOL = 0 este iniiat 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 ncrcat cu valoarea iniial.
DCOH > 0, DCOM = 0 i DCOL = 0 este iniiat 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 ncrcate cu valorile
iniiale.
DCOH = 0, DCOM = 0 i DCOL = 0 ultimul transfer este iniiat de la
adresa surs, registrul de adres este incrementat cu al doilea ofset i

Numrul total de transferuri este (DCOH+1)x(DCOM+1)x(DCOL+1).

109

Capitolul 3 Procesoarele DSP Motorola 56300

110

EXEMPLU:

Aplicaii ale procesoarelor de semnal n comunicaii


Exemple de folosire a DMA
n aceste exemple se folosete un singur canal DMA fr interferene

Salt cu
ofsetul 1

din alte surse, cum ar fi alte canale DMA, conflicte cu nucleul DSP56300 etc.

Salt cu
ofsetul 1

Salt cu ofsetul 1

Transferul de la memoria de date x la y

Salt cu
ofsetul 1

Salt cu ofsetul 2

Urmtorul program folosete canalul 0 al DMA pentru a transfera liniar

Salt cu
ofsetul 1

un bloc de N cuvinte din memoria interna X in memoria interna Y:

Salt cu
ofsetul 1

movep

#source_addr,x:M_DSR0

;adresa surs

movep

#dest_addr,x:M_DDR0

;adresa destinaie

movep

#(N-1),x:M_DCO0

;se vor efectua N transferuri

movep

#%100110000000001011010100,x:M_DCR0

nop
nop

Transfer 3D 2D

jclr

#0,x:M_DSTR,*

;interogarea lui DTD0

n acest program, n DSR0 este nscris adresa primei valori ce

Registrul de stare DMA (DSTR)

urmeaz s fie transferat.


23

22

21

20

19

18

17

16

15

14

13

12

Nu este necesar s specificm c adresa este intern. Partea hardware a


DMA evalueaz aceast informaie n mod automat n concordan cu harta

11

10

DCH2 DCH1 DCH0 DACT

DTD5 DTD4 DTD3 DTD2 DTD1 DTD0

memoriei.
Numrul N de transferuri de efectuat este (DCO+1), deci valoarea
scris n DCO0 este N-1.

Biii DCH indic ce canal DMA este activ (000 101 reprezint canalele
DMA 0 - 5).

Coninutul registrului de control DCR0 este urmtorul:


DE = 1 ncepe un transfer DMA.

Bitul DACT indic dac exist cel puin un canal DMA activ.

DIE = 0 dezafecteaz ntreruperea ctre procesor la sfritul unui bloc.

Biii DTDi indic transfer terminat pe canalul i i sunt setai la transferarea

DTM = 011 transferul blocului este activat software de DE prin setarea

ultimului cuvnt la destinaie.

bitului DE.

Capitolul 3 Procesoarele DSP Motorola 56300

111

112

DPR = 00 nivel de prioritate zero (cel mai mic).

Aplicaii ale procesoarelor de semnal n comunicaii


n acest caz adresa surs trebuie s fie n modul "fr actualizare"

DCON = 0 modul continuu nu este activat.

deoarece DMA-ul citete registrul de recepie de date mapat la o adres fix

DRS = 00000 in modul activat software acest cmp este ignorat.

n memoria perifericelor.
Datele sunt transferate ntr-un buffer de tip circular n memoria X

D3D = 0 mod ne-tridimensional.


DAM = 101101 adresa surs este post incrementat cu 1 (adresare

intern. Buffer-ul circular este implementat folosind adresarea liniar; la

liniar), adresa destinaie este de asemenea incrementat n mod liniar.

terminarea transferului este generat o ntrerupere iar adresa destinaie este

DDS = 01 destinaia este n memoria Y.

reiniializat.
n acest exemplu se ignor coninutul contorului DCO5, care este ns

DSS = 00 sursa n memoria X.

folosit pentru generarea unei ntreruperi pentru a se face saltul la nceputul


n acest exemplu, nucleul procesorului este inactiv n timpul n care

buffer-ului dup ce acesta este umplut.

DMA-ul transfer blocurile de date.


Programul testeaz bitul DTD0 al acestui canal i continu execuia

M_RX1 equ

programului dup ce DMA termin de transferat datele.

$ffffa8

movep #M_RX1,x:M_DSR5

Datorit structurii de tip pipeline a execuiei i deoarece procesorul

;registrul de recepie ESSI1


;adresa surs

movep #$int_addr,x:M_DDR5 ;adresa destinaie

interogheaz bitul DTD0 pn cnd acesta este egal cu 0, programul trebuie

movep #(N-1),x:M_DCO5

s atepte 2 cicluri de ceas pn ce DE este scris iar DTD0 este resetat la

movep #111011100110001011000000,x:M_DCR5
;transferul cuvintelor declanat de ESSI1 Rx

nceputul blocului de transfer pentru a indica ocuparea canalului.

;din memoria X fr actualizare in X act. liniara

O alt opiune este aceea de a interoga bitul DACT (bitul 8) din DSTR

;DE nu este ters la terminarea blocului

pn ce acesta este setat. Acest bit indic daca pe orice canal DMA se

;intreruperea este generata la sfarsitul blocului

efectueaz un transfer de date. Programul trebuie s atepte 3 cicluri de ceas


(3 instruciuni NOP) pn cnd acest bit este setat i poate fi interogat.

;buffer circular de lungime N

;prioritatea canalului este 3 (nu conteaza aici)


...
;rutina intreruperii terminrii transferului pe DMA5

Transferul datelor de la portul ESSI


Canalul DMA5 este programat pentru a recepiona date de la un port
periferic ESSI.

I_DMA5
movep #$int_addr,x:M_DDR5
;se modific adresa de inceput a buffer-ului
;realiznd o adresare circular

113

Capitolul 3 Procesoarele DSP Motorola 56300


Exemple pentru realizarea altor moduri de adresare cu DMA

114

Aplicaii ale procesoarelor de semnal n comunicaii


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.

Adresare circular folosind transferul 2D


Se transfer un cuvnt de date pe cerere pn la sfritul cadrului

Programnd acelai canal pentru transfer 3D cu DCOH=0 si DCOL=0,

circular, dup aceea se efectueaz un salt napoi (registru de ofset are valoare

dar cu DCOM>0 i DORi=N (ofset) i DORj=(N*DCOM) se

negativ) la nceputul cadrului.

implementeaz un buffer circular care efectueaz un algoritm de decimare


asemntor (modul de adresare rezultat este similar cu cel rezultat n urma

M_RX1 equ $ffffa8

;registrul

de

recepie

folosirii adresrii ((Rn) + Nn) mod Mn.

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

Transfer 3D 2D
;transferul declansat de ESSI1 Rx
;x no update -> x 2D cu DOR0

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),

;DE nu este resetat la sfarsitul blocului de date

22 de evenimente sosite de la periferice,

;intreruperea nu este generata

6 moduri "sfrit de transfer pe canalul A declaneaz transferul pe canalul

;prioritate canal: 3 (nu conteaza aici)

B".
Ultimele 6 moduri sunt folositoare n cazul n care 2 transferuri

n acest exemplu registrul contor DCO5 este ncrcat cu N-1 n DCOL i cu


$fff n DCOH pentru un numr total mare de transferuri.

trebuiesc efectuate secvenial, adic un canal DMA efectueaz un transfer,


timp n care celuilalt canal i se seteaz toi parametrii necesari pentru un al
doilea transfer.

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 aceeai operaie se poate elibera
registrul Rn.

Cnd primul transfer s-a efectuat, ncepe al doilea, iar primul DMA este
setat pentru un nou transfer programat s nceap cnd al doilea canal DMA
termin transferul.

Capitolul 3 Procesoarele DSP Motorola 56300

115

EXEMPLU: Compresia imaginilor color


n televiziunea n culori fiecare pixel este reprezentat prin 3 octei

116

Aplicaii ale procesoarelor de semnal n comunicaii


Memoria
sistemului

corespunztori culorilor rou, verde, albastru.


n sistemul PAL reprezentarea RGB este transformat ntr-o
reprezentare YUV n care Y este luminana iar U si V sunt componentele de
crominan, conform ecuaiilor:

Memoria video
(o linie de imagine)

Y00

Y01

Y02

Y03

U0

V0

U0

V0

Y10

Y11

Y10

Y11

U1

V1

Y00

Y01

Y12

Y13

Y = 0.299*R + 0.587*G + 0.114*B

Y20

Y21

U1

V1

U2

V2

U = (B Y) / 2.03

Y20

Y21

Y30

Y31

V = (R Y) / 1.14

Y22

Y23

U2

V2

Y30

Y31

Y32

Y33

Folosind sistemul YUV se poate ajunge la o compresie de 50% fr a


se reduce calitatea imaginii.

Primul canal DMA transfer datele din Y00, Y01 deoarece acestea
difer de structura celorlalte.
Al doilea canal DMA este declanat de primul i transfer din 2D n
liniar cnd DCOL=1 (o incrementare i un salt).
Prioriti ntre canale
Datele sunt stocate conform standardului MPEG n cuvinte de 16 bii
conform urmtoarei hri de memorie:

Fiecare canal DMA are un nivel de prioritate definit de biii DPR1,


DPR0 din DCR al canalului respectiv. Nivelul poate fi 0, 1, 2 sau 3.

ADRESA

DATA

000000

Y00, Y01

un transfer ntr-un ciclu de ceas deoarece exist o singur magistral DMA de

000001

Y02, Y03

adrese (DAB).

000002

U0, V0

000003

Y10, Y11

000004

Y12, Y13

000005

U1, V1

Proritile sunt necesare deoarece un singur canal DMA poate efectua

n cazul n care canalele DMA active au prioriti diferite atunci


canalul cu prioritatea cea mai mare efectueaz transferul, celelalte canale
ateapt.

n acest exemplu
canalele 2, 3 i 5 au prioritatea 1;

EXEMPLU:

End Ch1

End Ch0

End Ch5

End Ch3

End Ch2

Start Ch5
End Ch4

Start Ch4

Start Ch3

Start Ch2

Start Ch1

Start Ch0

0001012223234444423523523535353555010101111

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 aceeai prioritate nu pot interveni pn cnd 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.

canalul 5 este setat n modul continuu.

End Ch1

End Ch0

End Ch3

End Ch2

Modul continuu

sistemul nu i amintete care canal a efectuat ultimul transfer nainte de


intervenie.

End Ch5

Start Ch5
End Ch4

deoarece un al treilea canal cu o prioritate mai mare poate interveni, iar

Start Ch4

de canalul A este egal cu cele transferate de B n acelai timp. Aceasta

Start Ch3

algoritm denumit "round-robin" nu asigur c numrul de cuvinte transferate

0001012223234444423555555552323333010101111

Start Ch2

metod n care fiecare canal transfer cate un cuvnt periodic. Acest

Aplicaii ale procesoarelor de semnal n comunicaii

EXEMPLU:

Start Ch1

Dac sunt dou canale active cu aceeai prioritate se folosete o

118

Start Ch0

117

Capitolul 3 Procesoarele DSP Motorola 56300

Capitolul 4 Generarea semnalelor sinusoidale

119

120

Aplicaii ale procesoarelor de semnal n comunicaii

x<0

DA
s1 = 1

NU

CAPITOLUL 4
x = |x|

x < /2

GENERAREA SEMNALELOR SINUSOIDALE

DA

NU
x = x /2

4.1 GENERAREA SEMNALELOR SINUSOIDALE FOLOSIND


DEZVOLTAREA N SERIE TAYLOR A FUNCIEI SINUS

Echivalent cu
/2 < x <

x < /2

DA

NU

Pentru calculul funciei sin( x) se poate folosi dezvoltarea n serie

s2 = 1
x = x /2

Taylor dat de ecuaia:


sin( x)

x x3 x5 x 7 x9
+ +
1! 3! 5! 7! 9!

(4.1)

Echivalent cu
< x < 3/2

x = x /2

bii pentru valori ale lui x n intervalul: / 2 x / 2 .


Pentru x > / 2 se va face substituia:

Echivalent cu
3/2 < x < 2

0 x /2

x, / 2 x

x=
x 3 / 2
( x ),
(2 x), 3 / 2 x 2

Dac | x |> 2 funcia va returna 0.

x < /2

DA

NU

(4.2)

sin = 0

x = /2 x

STOP

Pentru x < 0 se va folosi relaia de calcul:


sin( x) = sin( x)

DA

NU

Aceast formul aproximeaz funcia sinus cu o precizie de pn la 14

x,

x < /2

(4.3)

sgn = s1 * s2
x = sgn * x

Calcul sin(x)

Figura 4.1. Organigrama pentru stabilirea intervalului de valori pentru x

121

Capitolul 4 Generarea semnalelor sinusoidale

122

Aplicaii ale procesoarelor de semnal n comunicaii


n continuare este prezentat programul n limbaj de asamblare pentru

Rutina de calcul pentru sin( x) va avea dou pri:


1. Stabilirea intervalului de valori pentru x i realizarea substituiilor

familia DSP56300:

pentru obinerea rezultatului corect. Organigrama este prezentat n


figura 4.1.
2. Calculul valorii sin( x) conform formulei (4.1).
Pentru generarea unui semnal sinusoidal sin( n 0 ) de frecven 0 ,

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

x:(r0)+,x0

; b=x^4, x0=a1

mac x0,x1,a

x:(r0)+,x0

mpyr x1,x1,b

programul principal va calcula valoarea lui x = n 0 pentru n ntregi i va

move b,x1

verifica dac | x |< 2 . Apoi se apeleaz rutina de calcul pentru sin( x) .


Pentru procesoarele de semnal n virgul fix, aceast implementare
ridic unele probleme datorit reprezentrii n format fracionar pentru x.

mpyr x1,y1,b

Aceasta implic scalarea acestuia (deoarece / 2 x / 2 ) n intervalul

mac x0,y1,a

; x1=x^2
b,y1

; b=x^6, y1=x^4
x:(r0)+,x0

b,y1

mpyr x1,y1,b

[1,1) , adic:
2x
xs =
.

(4.4)

; a=1+a1*x^2, x0=a2
; a=a+a2*x^4, x0=a3
; b=x^8, y1=x^6

mac x0,y1,a

x:(r0)+,x0

macr x0,y1,a

x:(r4),x1

b,y1

; a=a+a3*x^6, x0=a4
; a=a+a4*x^8

move a,x0

De asemenea pentru o arhitectur cu acumulator (cum este cazul

mpyr x1,x0,a

; a=x*a

familiei DSP56300) este mai avantajoas formula de calcul ca sum de puteri


Pentru un procesor de semnal care folosete registre de uz general

ale lui x 2 , adic:


sin( x)

x 2 x 4 x 6 x8
x x3 x5 x 7 x9
+ + = x 1 + +
1! 3! 5! 7! 9!
3! 5! 7! 9!

(4.5)

xs (1 + a1 xs2 + a2 xs4 + a3 xs6 + a4 xs8 )


2

Unde constantele includ semnul i factorii de scalare:


2

a=

1
= 0.4112335 ,
3! 2

a2 =

1
= 0.0507339 ,
5! 2

a4 =

1
= 0.0001021 .
9! 2

a3 =

1
= 0.0029804 ,
7! 2

transferul din acumulator n registru de date, descompunerea n serie Taylor


se mai poate face folosind formula:

Dac avem n vedere i scalarea lui x obinem:


sin( x) =

pentru stocarea rezultatelor operaiilor aritmetice i nu mai este nevoie de

(4.6)

sin( x)

x x3 x5 x 7 x9
x2
x2
x2
x2
1
1
+ + = x 1
1

(4.7)

1! 3! 5! 7! 9!
23 45 67 89

123

Capitolul 4 Generarea semnalelor sinusoidale

124

Aplicaii ale procesoarelor de semnal n comunicaii


Frecvena sinusului generat digital depinde de intervalul de timp i de

4.2 GENERAREA SINUSULUI CU AJUTORUL UNUI TABEL


DE CUTARE

pasul delta () dintre dou valori succesive din tabel. Dac = 1 (intrrile
sunt citite succesiv) i tabelul este accesat la fiecare Ts secunde ( Ts =
perioada de eantionare), frecvena fundamental a sinusului sintetizat va fi:
Ff =

Generarea sinusului este folositoare n comunicaii i aplicaii 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 cutare cu interpolare pentru reducerea
distorsiunilor. n continuare vom descrie trei metode de generare a sinusului si
vom obine Frecventa Sintetizabil Maxim (FSM) pentru fiecare din cazuri.
Valorile folosite pentru generarea sinusului sunt nmagazinate ntr-un

1
F
= S 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 Ts secunde, atunci frecvena
sinusului sintetizat va fi:
F = Ff

Hz

(4.9)

Dac este ntreg, doar multiplii ai Ff pot fi generai.


Dac este raional atunci orice frecven mai mic dect FSM poate fi

tabel n memorie dup cum urmeaz:

generat. Valoarea maxim pentru este N / 2 deoarece pentru sintetizarea


i = N 1

sin [ ( N 1) 2 / N ]

.
.
sin [ (i ) 2 / N ]

i=2

.
.
sin [ (2) 2 / N ]

i =1
ADRESA DE START:
i=0

sin [ (1) 2 / N ]
sin [ (0) 2 / N ]

unde:
N = lungimea tabelului;
i = indexul n tabel, 0 i N 1 ;
sin(i 2 / N ) = S (i ) = valoarea nmagazinat la locaia i din tabel.

sinusului fr aliere sunt necesare cel puin dou eantioane pe perioad.


Valoarea eantionului de ieire x(n) , va depinde de faza iniial f i de
timp (sau indexul de eantionare) n, dup cum urmeaz:
x(n) = sin( f + n 2 / N ) , n = 0, 1, 2,

(4.10)

4.2.1 Cutarea n tabel cu delta ntreg

Aceast implementare este o metod de cutare direct n tabel cu delta


fiind un numr ntreg i pozitiv. Deoarece delta este ntreg, toate eantioanele
cerute sunt coninute n tabel; nu sunt necesare aproximri. Figura de mai jos
ilustreaz aceast metod pentru N = 8 i = 2 .

125

Capitolul 4 Generarea semnalelor sinusoidale

126

Aplicaii ale procesoarelor de semnal n comunicaii


Programul de asamblare pentru generarea sinusului cnd delta este

ntreg este prezentat mai jos:

0.8

0.6
0.4

=2

0.2

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

-0.2
-0.4
-0.6

Valorile din tabel

org x:table

Valorile generate

dup N
dc

-0.8

0.5*@sin(angle) ; generarea unei perioade a

angle set angle+inc

-1

; sinusului de 256 eantioane

endm

Figura 4.2. Generarea eantioanelor sinusului pentru delta ntreg

org y:$100
y_dat ds $50

; rezervam memorie Y pentru ieire

n aceast rutin tabela cu valorile sinusului are lungime N = 256 i


org p:$100

este ncrcat n memoria X ncepnd de la adresa 0. Ieirea poate fi citit din


start

locaia de memorie Y:$100.


Harta memoriei:
X Data

Y Data

Program

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

move x:(r1)+n1,x0

; pune eantionul sinusului n x0

move x0,y:(r4)+

; mut eantionul la ieire

jmp sineg

; bucl infinit

ieire y:$100

sineg
R1
adresa de baz = $0

TABEL
SINUS

N
Start = $100

Figura 4.3. Harta memoriei pentru programul de generare a sinusului cu delta


ntreg

Instruciunea MOVE utilizeaz modul de adresare modulo cu


postindexare a procesorului DSP56300. Trei registre de adrese ai unitii

Capitolul 4 Generarea semnalelor sinusoidale

127

128

aritmetice sunt folosite n aceast rutin: registrul de adres R1 pentru indexul

Aplicaii ale procesoarelor de semnal n comunicaii

din tabela sinusului, registrul de deplasare N1 conine valoarea lui delta, i

0.8

registrul modificator M1 conine valoarea N 1 pentru setarea bufferului

0.6

modulo.

= 2,5

0.4
0.2

Frecvena sintetizabil maxim este dat prin formula:


FSM =

1
2 lcyc CIS

(4.11)

-0.2

unde:

-0.4

CIS = numrul total de cicluri ale instruciunilor pentru generarea unui

-0.6

eantion al sinusului.

Valorile din tabel


Valorile generate

-0.8

lcyc = timpul de execuie al unui ciclu instruciune

-1

Dac considerm lcyc = 50ns i CIS = 4 cicluri, valoarea FSM este cea
Figura 4.4. Generarea eantioanelor sinusului pentru delta raional

mai mare care s-ar putea obine. Avem:


FSM = 2,5 MHz

(4.12)

Delta este acum un numr raional. Modul standard de adresare modulo


al procesorului DSP56300 nu poate fi folosit i de aceea o schem de adresare

4.2.2 Cutarea n tabel cu delta raional

modulo trebuie implementat software. n continuare vom descrie o metod


de implementare a unei asemenea scheme. Aceasta folosete ambele registre

Aceast implementare este o metod direct de cutare n tabel cu delta

acumulator.

numr raional pozitiv, adic, un numr compus dintr-o parte ntreag i o

n aceast rutin partea ntreag a lui delta este stocat n partea

parte fracionar. Cnd partea fracionar este nenul, eantioanele din

superioar a acumulatorului (B1 pentru exemplul dat). Trebuie avut grij ca

punctele aflate ntre dou elemente din tabel trebuie estimate folosind valorile

partea fracionar s fie stocat corect. Numrul mutat n B0 ca rezultat al

din tabel. Cea mai direct estimare este cea care folosete valoarea anterioar

extragerii prii ntregi din delta, de exemplu -@cvi(), este o fracie cu

din tabel. Aceast abordare este descris n aceast seciune i este ilustrat n

semn, de exemplu pozitiv. Acest lucru este nedorit ct timp bitul de semn

figura urmtoare pentru N = 8 i = 2,5 .

trebuie asociat prii ntregi. De aceea o deplasare ctre stnga trebuie


realizat pentru a elimina bitul de semn lsnd partea fracionar din B0 fr
semn.

129

Capitolul 4 Generarea semnalelor sinusoidale

130

Aplicaii ale procesoarelor de semnal n comunicaii

Separarea prilor ntregi i fracionare este realizat folosind directiva

de conversie la ntregi a asamblorului: @cvi(ConVert to Integer). Funcia

A=A+B

A1 00 00101

A0 00000 00

CVI convertete numere raionale n numere ntregi prin simpla trunchiere a

A = A and 111

A1 00 00101

A0 00000 00

@cvi(D) returneaz partea ntreag a lui delta.

A=A+B

A1 00 00111

A0 10000 00

-@cvi() returneaz partea fracionar cu semn a lui delta.

A = A and 111

A1 00 00111

A0 10000 00

N1 = A1 = 5

prii fracionare a numrului raional. De aceea:

Aceasta presupune c delta nu este o variabil de lucru. Dac se cere ca


delta s fie o variabil de lucru, o separm ntr-un ntreg cu semn i o fracie
fr semn pe care le stocm n B1 i respectiv B0.
Al doilea acumulator, A n acest exemplu, conine numrul raional
pozitiv folosit pentru a ncrca registrul de deplasare N1 care este folosit la
deplasarea pointerului R1. R1 este folosit pentru a adresa locaia corect din

A=A+B

A1 00 01010

A0 00000 00

A = A and 111

A1 00 00010

A0 00000 00

A=A+B

A1 00 00100

A0 10000 00

A = A and 111

A1 00 00100

A0 10000 00

tabela sinusului. Att timp ct indexul tabelului trebuie s fie un ntreg, doar
A1 este mutat n N1. Adunarea lui delta este fcut att n partea ntreag ct
i fracionar a acumulatorului A. Punctul binar este unul imaginar ntre cele

equ 256

registrul R1 este fcut prin indexarea cu registrul offset N1, lsnd astfel

delta equ 2.5

neschimbat valoarea original a lui R1 (adresa de baz).

pi

prin mascare (operaia and) cu valoarea N 1 = 7 (111 n binar).


= 2,5

B1 = 2

N1 = A1 = 4

raional este:
N

table equ 0

lungimea tabelei sinusului N = 8 . Valoarea lui A1 este calculat modulo 8

N1 = A1 = 2

Programul n limbaj de asamblare pentru generarea sinusului cu delta

dou pri A1 i A0 ale acumulatorului. Trebuie notat c adresarea cu

Ca exemplu sunt artate evoluiile registrelor A i N1 pentru = 2,5 i

N1 = A1 = 7

; lungimea tabelei
; adresa de nceput a tabelei

equ 3.141592654

angle set 0.0


inc

set 2.0*pi/N
org x:table
dup N

B0 = 0.5 (fr 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

dc

0.5*@sin(angle)

angle set angle+inc


endm
org y:$100

N1 = A1 = 2

y_dat ds $50

; generarea unei perioade a


; sinusului de 256 eantioane

131

Capitolul 4 Generarea semnalelor sinusoidale


org p:$100

132

Aplicaii ale procesoarelor de semnal n comunicaii


4.2.3 Cutarea n tabel cu interpolare liniar

start
move #table,r1

; r1 = nceputul tabelei

move #y_dat,r4

; r4 = pointerul ieirii

Pentru a sintetiza sinusul de orice frecven cu distorsiuni mici, o


metod de interpolare trebuie folosit mpreun cu cutarea n tabel. Folosind

move #(delta-@cvi(delta)),b0 ; partea fracionara n b0

interpolarea, valorile sinusului aflate ntre elementele din tabel pot fi

asl

; elimina bitul de semn

reprezentate mai precis. Cea mai uoar tehnic de interpolare este

move #@cvi(delta),b1

; partea ntreag n b1

clr

; iniializeaz a i n1

interpolarea liniar. Pentru interpolarea liniar presupunem c valoarea

b
a

#0,n1

move #>N-1,x1

; seteaz masca modulo

add

b,a

; actualiz. a, y0 = sinus

and

x1,a y0,y:(r4)

sinusului ntr-un punct dintre dou intrri succesive ale tabelei se afl pe o
dreapt ntre cele dou valori. Acest lucru este ilustrat n figura urmtoare
pentru N = 8 i = 2,5 .

sineg
x:(r1+n1),y0

; mask a

move a1,n1
jmp

Eroarea fr interpolare liniar

; actualiz. reg. ofset n1

sineg

; bucl infinit

0.8

Harta memoriei pentru acest program este:


X Data

Y Data

Eroarea cu interpolare liniar

0.6
0.4

Program

= 2,5

0.2
ieire y:$100

(R1+N1)

TABEL
SINUS

-0.4

Start = $100

adresa de baz = $0

-0.2

-0.6

Valorile din tabel


Valorile generate

-0.8

Figura 4.5. Harta memoriei pentru programul de generare a sinusului cu delta


raional

Figura 4.6. Generarea eantioanelor sinusului prin interpolare liniar

Frecvena sintetizabil maxim este:


FSM =

1
= 1,667 MHz
2 50 6

-1

(4.13)

Capitolul 4 Generarea semnalelor sinusoidale

133

Algoritmul folosit pentru interpolarea liniar se bazeaz pe ecuaia


dreptei n dou puncte:

134

Aplicaii ale procesoarelor de semnal n comunicaii

numr n format fracionar corect, cu semn pozitiv, pentru a realiza nmulirea


care genereaz aproximarea liniar.

y y1 = m( x x1 )

(4.14)
Iniializri registre
de adrese

Pentru interpolarea liniar avem:


m = S [i + 1] S [i ] este panta segmentului de dreapt ntre dou

Separare delta: parte


ntreag Y1
fracionar Y0

elemente, i si i + 1 succesive ale tabelului;

y1 = S[i] este valoarea din tabelul sinusului de la adresa de baz +


deplasamentul i;

y = S[i + f ] este eantionul aproximat;

f = x x1 este partea fracionar a lui delta, 0 < f < 1.

Iniializare adres
tabel sinus
Calculeaz
m, f

De aceea avem:
S [i + f ] = S [i ] + f ( S [i + 1] S [i ])

Efectueaz
interpolarea liniar
S [i + f ]

(4.15)

Diagrama de desfurare a programului de generare a sinusului cu


interpolare liniar este prezentat n figura 4.7.

Genereaz eantion
ieire x(n)

Tabela sinusului este nmagazinat n memoria X ncepnd de la adresa


0. Pointerul adres R1 indic valoarea curent a sinusului, n timp ce poinerul

Actualizeaz pointer
tabel sinus (modulo)

adres R2 indic valoarea urmtoare valorii curente a sinusului, R2 = R1 + 1.


Panta dintre dou valori succesive este determinat prin diferena valorilor din
memorie de la adresele din R2 i R1.

Figura 4.7. Organigrama pentru generarea sinusului cu interpolare liniar

Pentru generarea eantionului sinusului folosind interpolarea liniar,


partea fracionar a aproximrii liniare f, este nmagazinat n acumulatorul

Delta poate fi orice numr raional pozitiv ntre 0 i N / 2 .

A0 iar partea ntreag este nmagazinat n A1. A1 este mutat n N1 care este

Acumulatorul B este mai nti folosit pentru a separa delta ntr-un ntreg cu

folosit pentru indexarea registrului R1. Aceeai valoare care este mutat n N1

semn i o fracie fr semn i apoi este folosit pentru a calcula valoarea

este mutat i n N2 care este folosit pentru indexarea registrului R2. De

eantionului interpolat. De remarcat c o adresare imediat lung (de exemplu

remarcat c spre deosebire de metoda anterioar de generare cu delta raional,

folosind semnul >)

coninutul lui A0 trebuie deplasat la dreapta astfel nct s reprezinte un

deoarece (@CVI()) trebuie s fie interpretat ca o fracie cu semn.

trebuie specificat la salvarea prii ntregi n Y1

Capitolul 4 Generarea semnalelor sinusoidale

135

136

Aplicaii ale procesoarelor de semnal n comunicaii

Partea de program pentru generarea sinusului folosete 6 registre ale


move #(delta-@cvi(delta)),b0 ;parte fractionara delta

unitii aritmetice, pe lng registrele R1, R2, R4, N1, N2, M2. Registrul M2

asl

este folosit mai nti pentru a memora masca nainte de a fi folosit n operaia
and de mascare (aceast operaie de mascare oblig R1 + N1 s fie n

; elimina bitul de semn

move #>@cvi(delta),y1

partea

intreaga

delta

in y1

regiunea de memorie dorit, implementnd adresarea modulo). M2 este

move b0,y0

; partea fractionara fara semn

folosit apoi pentru actualizarea aritmetic modulo a lui R2 + N2. Este necesar

clr

; initializeaza a si n1

s avem grij n cazul special cnd R1 + N1 indic $1FF. Deoarece R2 + N2

move #N-1,n0

; valoarea masca modulo

move #0,n2

; initializeaza n2

move #table+1,r2

; r2 = r1+1

move a0,b

; delta fract. in b1, b0 = 0

= R1 + N1 + 1, va trebui s indice $200 n loc de $100 fr operaia


aritmetic modulo.
sineg

Programul de asamblare este prezentat mai jos:


N

equ 256

; lungimea tabelei

table

equ 0

; adresa de inceput a tabelei

delta

equ 5.35

lsr b

#0,n1

x:(r1+n1),x0

; b1 = f, x0 = S[i]

move b1,x1

; x1 = f

move x:(r2+n2),b

; b1 = S[i+1]

pi

equ 3.141592654

angle

set 0.0

sub x0,b

; panta m = S[i+1] S[i]

set 2.0*pi/N

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

; delta se aduna la a

inc

org x:table
dup N
dc
angle

0.5*@sin(angle) ; generarea unei perioade a

set angle+inc

; sinusului de 256 esantioane

move n0,x1

; x1 valoarea masca modulo

and x1,a

; masca a1 = modulo

org y:$100

move a1,n1

; actualiz. registrul ofset n1

ds $50

move a1,n2

; actualiz. registrul ofset n2

jmp sineg

; bucla infinita

endm

y_dat

b,y:(r4)

org p:$100
start
move #table,r1

; r1 = adresa de start a tabelei

move #y_dat,r4

; iesirea in memoria Y

137

Capitolul 4 Generarea semnalelor sinusoidale


Harta memoriei este:

Aplicaii ale procesoarelor de semnal n comunicaii

4.3 METODA OSCILATORULUI DIGITAL

X Data

Y Data

Program

O metod util de generare a unei sinusoide de o anumit frecven este

ieire y:$100

folosirea unui rezonator aflat la limita stabilitii care are o pereche de poli

(R2+N2)
(R1+N1)

138

TABEL
SINUS

complex conjugai pe cercul de raz unitate. Metoda oscilatorului recursiv

este cea mai eficient i precis metod de generare a semnalelor sinusoidale.

Start = $100

adresa de baz = $0

Fie sistemul digital care are rspunsul la impuls de forma:

h(n) = A sin( 0 n)u (n)

Figura 4.8. Harta memoriei pentru programul de generare a sinusului cu

(4.17)

unde u (n) este treapta unitate, A este amplitudinea sinusoidei generate,

interpolare liniar

iar 0 este frecvena unghiular.


Funcia de transfer a sistemului (considernd A = 1 ) se obine aplicnd

Resursele necesare pentru aceast subrutin sunt:

transformata Z ecuaiei (4.17):


Frecvena sintetizabil maxim este:
1
FSM =
= 0.625 MHz
2 50 16

H ( z) =
(4.16)

(
(

)
)

e j0 e j0 z 1
1
1
1

2 j 1 e j0 z 1 1 e j0 z 1 2 j 1 e j0 + e j0 z 1 + z 2

(4.18)

Evident acest sistem are polii e j0 i e j0 aflai pe cercul de raz


unitate. Efectund calculele rezult:
H ( z) =

sin 0 z 1
Y ( z)
=
X ( z ) 1 2cos 0 z 1 + z 2

(4.19)

Ecuaia cu diferene finite este:

y (n) = 2cos 0 y (n 1) y (n 2) + sin 0 x(n 1)

(4.20)

Dac la intrarea sistemului se aplic impulsul unitate pentru n 2 ,


ieirea y ( n) poate fi calculat recursiv astfel:

y (n) = 2cos 0 y (n 1) y (n 2), n 2


cu condiiile iniiale y (1) = sin 0 i y (0) = 0 .

(4.21)

Capitolul 4 Generarea semnalelor sinusoidale

139

140

Deoarece termenul 2cos 0 poate avea valori supraunitare algoritmul


va calcula ieirea y ( n) astfel:
1. a = y (n 1)cos 0 (instruciunea mpy)
2. y (n) = 2a y (n 2) (instruciunea subl)

y (n)

2 cos 0

Exemplu: Generarea unui sinus de 60Hz:


Fs

set 48000.0

;Frecvena de eantionare

PI

set 2.0*@asn(1.0)

;PI calculat ca 2.0*arcsin(1.0)

freq_a

set 60.0

;Frecvena dorit n Hertzi

amp_a

set 0.3

;Amplitudinea (0-1)

omega

set 2.0*PI*freq_a/Fs ;Pulsaia unghiular normat

s1_a

set amp_a*@sin(omega) ;Valori iniiale y(1) i y(0)

s2_a

set 0.0

coeff_a set @cos(omega)

z 1
s1 = y (n 1)

s2 = y (n 2)

Figura 4.9. Structura oscilatorului digital


Erorile care apar n acest sistem sunt date de reprezentarea valorii

cos 0 pe un numr finit de bii (24 de bii n cazul Motorola DSP56300) i la

coeff

ds 1

;Adresa coeficient

s1

ds 1

;Adresa s1

s2

ds 1

;Adresa s2

org p:$100
START
;Iniializri Oscilator Digital

trunchierea rezultatului dup adunare (scdere de fapt).

move #coeff_a,x0

Dac valoarea cos 0 este cuantizat pe 24 de bii eroarea (deviaia) de

move x0,x:DOSC_BUFF_BASE
move #s1_a,x0

frecven unghiular este:


0 = 0 arccos ( cos 0 223 )

;Calcul coeficient cos

org x:
DOSC_BUFF_BASE EQU

z 1

move x0,x:DOSC_BUFF_BASE+1

(4.22)

move #s2_a,x0
move x0,x:DOSC_BUFF_BASE+2

ceea ce, pentru o frecven de eantionare de 48 kHz conduce la o


diferen de frecven fa de valoarea nominal de maxim 0.01 Hz pentru
frecvene situate n intervalul 500 Hz 23 kHz i de maxim 0.1 Hz n afara
acestui interval.
n urma cuantizrii coeficientului cos 0 este afectat numai frecvena
sinusoidei generate nu i amplitudinea acesteia deoarece se modific numai
argumentul polilor, modulul rmnnd 1.

Aplicaii ale procesoarelor de semnal n comunicaii

loop
move #DOSC_BUFF_BASE,r5
jsr

dosc_sin

;Apel subrutin oscilator

move a,x0

;Copiaz noul eantion n x0

jmp

;Bucl infinit

loop

Capitolul 4 Generarea semnalelor sinusoidale

141

dosc_sin

SEMNALELOR

SINUSOIDALE

CUADRATUR

move x:(r5)+,y0
move x:(r5)-,b

;r5 e decrementat pentru a indica s1

mpy

;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

Aplicaii ale procesoarelor de semnal n comunicaii

4.4 GENERAREA

move x:(r5)+,x0

x0,y0,a

142

O alt soluie simpl, rapid, de tip recursiv de generare a sinusului este


propus n rndurile urmtoare. Avantajul este c se pot genera simultan o
sinusoid i o cosinusoid de aceeai frecven (necesare n aplicaii unde se
cer semnale modulatoare n cuadratur) iar rezultatele sunt de mare precizie.
Operaiile efectuate de sistem sunt de fapt dou formule binecunoscute
din trigonometrie i anume cosinusul i sinusul unei sume de arce.
Recursivitatea se scrie:
cos (n + 1) = cos n cos sin n sin

(4.23)

sin ( n + 1) = cos n sin + sin n cos

(4.24)

unde = 2 0
Pentru generarea frecvenei dorite trebuie iniializate valorile cos 0 = 1
i sin 0 = 0 . Calculul celor dou forme de und se realizeaz apoi doar prin
patru multiplicri, o adunare i o scdere. Parametrii de intrare sunt locaiile
de memorie folosite pentru cos n i sin n i cele dou constante cos i
sin ce dau frecvena de oscilaie.
cos n
z 1

sin n
z 1

sin
cos

cos
-sin

Figura 4.10. Structura generatorului de semnale sinusoidale n


cuadratur

143

Capitolul 4 Generarea semnalelor sinusoidale

144

Aplicaii ale procesoarelor de semnal n comunicaii


Semnalul de eroare este apoi utilizat ca o reacie negativ, pentru

Frecvena va fi dat deci de incrementul de faz = 2 0 . n cazul


procesorului DSP56300 precizia frecvenelor generate depinde de precizia
reprezentrii lui cos i sin pe 24 de bii.

controlul amplitudinii, ceea ce confer acestui algoritm o mare precizie la


generarea sinusoidelor. Semnalul eroare va fi calculat dup formula:
err = 1 cos 2 ( n) + sin 2 ( n)

(4.26)

Pot apare trei cazuri de-a lungul desfurrii programului :


2

cos (n) + sin (n)

cos (n) + sin (n)

1. Dac err = 0 , 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

err

1, pstrndu-i astfel valoarea.


1

cos n

cos n
sin n

z 1

sin n

z 1
sin

dac radicalul ia valoarea 0,9 , va rezulta un semnal de eroare


err = 0,1 . Acesta se va aduna cu 1 i se va nmuli cu valorile
anterioare ale sin( n ) i cos(n ) , pentru a se mri amplitudinea.
3. Dac sinusoida are tendina s creasc n amplitudine, de exemplu

cos

cos

2. Dac sinusoida are tendina s scad n amplitudine, de exemplu

dac radicalul ia valoarea 1,1, va rezulta un semnal de eroare


err = 0,1 . Acesta se va aduna cu 1 i se va nmulii cu valorile

-sin

anterioare alesin( n ) i cos(n ) , pentru a scdea amplitudinea.


Figura 4.11. Compensarea amplificrii 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 amplificrii.
Acesta se realizeaz prin calcularea unui semnal de eroare, semnal ce este dat
de diferena ntre amplitudinea dorit (1 de exemplu) i amplitudinea actual
(cea generat), care se calculeaz cu formula:
cos 2 ( n) + sin 2 ( n)

(4.25)

Capitolul 5 Realizarea filtrelor digitale

145

146

Aplicaii ale procesoarelor de semnal n comunicaii


x( n)

z 1

x(n 1)

h0

z 1

x(n 1)

h1

z 1

x(n N + 1)

h2

hN 1

y ( n)

CAPITOLUL 5
Figura 5.1. Forma transversal pentru FIR

REALIZAREA FILTRELOR DIGITALE

Pentru calculul ieirii y (n) trebuie memorate strile filtrului i


coeficienii funciei pondere. De exemplu, pentru implementarea filtrelor FIR

5.1 IMPLEMENTAREA FILTRELOR CU RSPUNS FINIT LA


IMPULS (FIR)

pe procesoarele din familia DSP56300, memoria este organizat dup cum


urmeaz:
strile filtrului (ultimele N eantioane de intrare) n memoria de date

Funcia de transfer a unui filtru cu rspuns finit la impuls de lungime N


este de forma:
Y ( z)
H ( z) =
= h0 + h1 z 1 + .. + hN 1 z N 1
X ( z)

X, ntr-un buffer circular de lungime N.


coeficienii filtrului n memoria de date Y ncepnd de la adresa $0,

de asemenea ntr-un buffer circular de lungime N.


(5.1)
Memoria X

Ecuaia cu diferene finite este:


N 1

y (n) = x(n k )hk

Memoria Y

hN 1

(5.2)

k =0

unde x( n) este intrarea filtrului la momentul n, y (n) este ieirea, hk


x(n 1)

sunt coeficienii funciei pondere i N este lungimea filtrului.


r0

x ( n)
x(n N + 1)

5.1.1 Forma transversal

Ecuaia (5.2) poate fi implementat ntr-o structur transversal ca n


figura urmtoare.

Adresa de baz: $0

h1

$0

h0

Figura 5.2. Organizarea memoriei pentru filtrul FIR

r4

147

148

Registrul r4 indic adresa coeficienilor filtrului. r4 este incrementat

fir

Capitolul 5 Realizarea filtrelor digitale

modulo N, astfel c la terminarea sumei (dup N incrementri) el revine la


adresa primului coeficient h0 .

Aplicaii ale procesoarelor de semnal n comunicaii


macro

ntaps

;-----------------------------------------------; eantionul de intrare n x0


; ieirea n acumulatorul a

Registrul r0 indic adresa celui mai recent eantion x( n) . La sfritul

; registrul r0 indic adresa esantionului x(n)

efecturii sumei, r0 (incrementat tot modulo N) va ajunge n aceeai poziie,

; registrul r4 indic adresa coeficientului h0

de aceea el trebuie decrementat pentru a indica adresa celui mai vechi

; parametru de intrare ntaps = lungimea filtrului

eantion x(n N + 1) . Astfel, urmtorul eantion de intrare va fi scris n locul

;------------------------------------------------

acestuia, eantionul anterior devenind x(n 1) etc.

Programul de calcul al ieirii y (n) este dat sub forma unui macro n

clr

rep

#ntaps-1

mac

x0,y0,a

macr x0,y0,a

care:

x0,x:(r0)+

y:(r4)+,y0

x:(r0)+,x0

y:(r4)+,y0

(r0)-

endm

- acumulatorul a este ters, eantionul x( n) este salvat din x0 n memorie la


adresa indicat de r0, coeficientul h0 este adus din memorie n registrul

Programul principal trebuie s iniializeze adresele pentru strile i

y0. Aceste trei operaii se efectueaz n paralel ntr-un singur ciclu main.

pentru coeficienii filtrului, precum i modul de adresare circular. Eantionul

- se face suma primelor N 1 produse. nmulirea i sumarea operanzilor se

de intrare este transferat n x0, iar ieirea este citit din a.

face cu instruciunea mac x0,y0,a rezultatul sumei fiind n acumulatorul a.


n paralel cu aceasta sunt transferai din memorie operanzii urmtori:

datin

equ

eantionul x(n k ) n x0 i coeficientul hk n y0.

datout

equ

$fffffe

ntaps

equ

;lungimea filtrului

org

x:0

;rezerv memorie pentru

dsm

ntaps

org

y:0

dc

.1,.3,-.1,.2

org

p:$100

move

#states,r0

;adresa strilor filtrului

move

#ntaps-1,m0

;adresare modulo(ntaps)

- dup terminarea ciclului rep se face ultima nmulire cu acumulare i


rotunjire pentru ca y (n) s fie pe 24 de bii, precum i decrementarea lui
r0.

states
coef

$ffffff

;strile filtrului
;coeficienii filtrului

start

149

Capitolul 5 Realizarea filtrelor digitale


move

#coef,r4

;adresa coeficienilor

move

#ntaps-1,m4

;adresare modulo(ntaps)

150

Aplicaii ale procesoarelor de semnal n comunicaii

5.2 IMPLEMENTAREA FILTRELOR CU RSPUNS INFINIT


LA IMPULS (IIR)

filtr

movep

y:datin,x0

;eantionul de intrare

fir

ntaps

;calculeaz fir

movep

a,y:datout

;ieirea

Pentru un filtru IIR avem funcia de transfer de forma:


M

jmp filtr

Y ( z)
H ( z) =
=
X ( z)

end

b z
k =0
N

1 + ak z k

(5.5)

k =1

Programul este valabil pentru orice tip de FIR. Toi coeficienii sunt
considerai n format fracionar (de modul subunitar). Dac n urma proiectrii
filtrului FIR apar i coeficieni de modul supraunitar, atunci toi coeficienii
trebuie scalai prin mprirea cu:
m = max ( hk

eantioanele intrrii sunt n intervalul (1,1) , atunci trebuie ndeplinit


condiia:
N 1

h
k =0

una din metodele de proiectare a filtrelor digitale cu rspuns infinit la impuls


(folosind eventual mediul MATLAB) n funcie, bineneles, de condiiile de
proiectare cerute.

(5.3)

De asemenea, pentru a evita depirea capacitii registrelor, dac

s=

Coeficienii numrtorului bk i ai numitorului ak se determin printr-

(5.4)

Dac nu este ndeplinit condiia (5.4) atunci fie intrarea x(n) , fie
coeficienii hk trebuie scalai cu factorul s. Dac intrarea este mprit la s,

Notnd cu x(n) secvena de la intrarea filtrului i cu y (n) secvena de


la ieirea filtrului, rezult ecuaia cu diferene finite:
M

k =0

k =1

y (n) = bk x(n k ) ak y (n k )
Pentru calculul ieirii

y (n)

(5.6)

exist mai multe posibiliti de

implementare n funcie de structura aleas. Performanele implementrii


(complexitate aritmetic memorie ocupat, transferuri paralele) difer n
funcie de structura aleas.

atunci gama dinamic a semnalului la intrare se micoreaz, deci i raportul

De asemenea, n proiectare i implementare trebuie evaluate efectele

semnal-zgomot al structurii se micoreaz. Pe de alt parte, dac sunt scalai

reprezentrii semnalelor utiliznd un numr finit de bii. n cazul reprezentrii

coeficienii, acetia vor putea fi reprezentai pe mai puini bii i este afectat

numerelor n formate cu virgul fix apare o depire dac rezultatul unei

rspunsul n frecven al filtrului. Aceste implicaii trebuie evaluate n funcie

operaii aritmetice este de modul supraunitar. Acest lucru este posibil dup

de aplicaie i aleas una din variante.

operaiile de nsumare i de nmulire cu o constant de modul supraunitar.

Capitolul 5 Realizarea filtrelor digitale

151

152

Aplicaii ale procesoarelor de semnal n comunicaii

Analiza posibilitii depirilor comport dou aspecte:

Aceste erori pot fi minimizate folosind structuri de filtre mai puin sensibile,

analiza funciei de transfer, H ( z ) i eventual scalarea acesteia astfel

cu aceeai funcie de transfer i alocnd un numr suficient de bii pentru

nct s se elimine sau s se reduc suficient de mult probabilitatea


ca semnalul de ieire s fie de modul supraunitar;

coeficieni.
Cuantizarea semnalului are efecte n diferite noduri ale filtrului, putnd

analiza posibilitii depirilor n toate nodurile reelei, conducnd

fi considerate ca surse de zgomot alb, aditiv, nrutind RSZ al ieirii. Aceste

(dac este necesar) la o scalare a semnalului compensat n final,

erori pot fi minimizate realiznd nmulirea i acumularea rezultatului n

astfel nct s nu afecteze realizarea funciei de transfer impuse.

registre de lungime dublu-cuvnt.

n filtrele digitale att amplitudinea semnalului ct i coeficienii sunt

O cale de mijloc pentru evitarea nrutirii raportului semnal-zgomot

valori discrete sau cuantizate cu un numr finit de bii. Dei astfel de sisteme

(RSZ) i, pe de alt parte, evitarea depirii gamei dinamice (overflow) este

sunt neliniare, efectele acestor cuantizri pot fi interpretate ca fiind surse de

scalarea. Nu este nevoie de scalare n fiecare nod al reelei deoarece

zgomot aditiv. Erorile de cuantizare ale coeficienilor modific funcia de

semnalele n unele noduri sunt doar ntrzieri ale semnalelor din alte noduri.

transfer a filtrului i se produc astfel variaii ale zerourilor i polilor, variaii

De asemenea, dac rezultatul final al adunrii semnalelor din mai multe

care schimb nedorit rspunsul n frecven al filtrelor. Erorile de cuantizare a

noduri este subunitar, n cazul adunrii n complement fa de doi n final se

semnalului pot fi privite ca surse de zgomot aditiv n diferite noduri ale

obine rezultatul corect indiferent dac n diferite noduri apar depiri la

reelei.

sumele pariale. Trebuie astfel realizat o tehnic de scalare a semnalului la

Principala surs de zgomot de cuantizare o reprezint rotunjirea sau


trunchierea rezultatului nmulirii. Rezultatele nmulirii i adunrii sunt

intrare pentru a evita depirile numai n nodurile unde acestea pot apare.
Se presupune c semnalul de intrare este n modul subunitar:
x ( n) 1

stocate n registrele acumulator, care la familia DSP56300 sunt de 56 de bii.


Dac se dorete salvarea rezultatului n memorie este necesar limitarea
acestuia la 24 de bii. n acest caz este de preferat o rotunjire n loc de

Fie H m ( z ) funcia de transfer de la intrare la nodul m. Pentru a nu avea

depire n nodul m trebuie ndeplinit condiia:

trunchiere, pentru o eroare mai mic. Alte surse sunt cuantizarea intrrii la
convertorul analog-digital i limitarea numrului de bii la ieire, de exemplu

ym ( n ) 1

Cuantizarea coeficienilor are efecte diferite de cuantizarea semnalului


din punct de vedere al zgomotului. Cuantizarea coeficienilor produce erori n
rspunsul n frecven i n amplitudine ale filtrului, fiind erori deterministe.

(5.8)

Avem:

trecerea de la o reprezentare intern pe 24 de bii la 16 bii pentru un


convertor digital-analog.

(5.7)

ym ( n ) =

h
k =0

k =0

k =0

(k ) x(n k ) hm (k ) x(n k ) hm (k ) = km

(5.9)

Nodurile n care pot apare depiri sunt n partea recursiv a structurii


i, bineneles, la ieirea filtrului. Scalarea este necesar dac cel puin unul

153

Capitolul 5 Realizarea filtrelor digitale

154

Aplicaii ale procesoarelor de semnal n comunicaii

din coeficienii km este supraunitar. Coeficientul cu care se face scalarea la

O procedur general de utilizare a unui macro:

intrarea structurii va fi:

1. Definirea locaiilor datelor pentru coeficienii filtrului i strile


1 1
1
s min , ,...,
k
k
k
m
1 2

(5.10)

n cazul n care intrarea este zero sau o constant, exist posibilitatea ca

acestuia;
2. Scrierea coeficienilor n zona de memorie rezervat;
3. Scrierea strilor iniiale ale filtrului (la momentul n = 0 );

ieirea filtrului, n loc de o apropiere asimptotic de o valoarea constant, s

4. Apelul macroului pentru calculul ieirii;

oscileze cu amplitudini relativ mici. Aceste oscilaii sunt numite cicluri

5. Strile i coeficienii nu trebuie modificate ntre dou apeluri

limit. Acetia pot fi redui la amplitudini acceptabile crescnd numrul de


bii de reprezentare cu virgul fix a semnalului.

succesive ale macro-ului.


Cnd se folosete un macro ntr-o bucl pentru a genera o secven de

Oscilaiile n depiri sunt produse de caracteristica circular a

eantioane la ieire prin prelucrarea eantioanelor de la intrare, strile i

sumatorului n complement fa de 1 sau fa de 2. Aceste oscilaii pot

coeficienii sunt stocai n memorie, iar macro-ul este apelat n bucl. Bucla

produce depiri ale gamei dinamice a filtrului IIR. Soluia acestei probleme

va citi intrarea, va face apelul macro-ului i va depune eantioanele de la

este folosirea aritmeticii cu saturaie la adunare ceea ce limiteaz rezultatul

ieire n locaia specificat (de obicei n acumulator). Pentru implementarea

adunrii n modul subunitar.

aceluiai filtru se poate alege dintre mai multe macro-uri. n acest caz se

Un alt factor ce influeneaz implementarea software a filtrelor IIR este


numrul de instruciuni pe ciclu (aceasta mai ales pentru implementri n timp

selecteaz macro-ul care are cele mai puine cicluri de instruciuni.


5.2.1 Forma direct 1

real). Ali factori in de natura procesorului (de exemplu: stocarea datelor i


programelor n memorie, utilizarea registrelor, folosirea autoscalrii, etc.).
Prima i cea mai important problem implic reducerea ciclurilor de
instruciune n programul de implementare a filtrului. Acest lucru este facilitat

Scriind relaia intrare-ieire sub forma:


M

W ( z ) = X ( z ) bk z k

de arhitectura pipe-line a procesorului, de multiplicarea cu acumulare


efectuat ntr-un singur ciclu i de modurile de adresare ce se desfoar
paralel cu instruciunile aritmetice.
Pentru implementarea unui filtru digital pe DSP56300 trebuie mai nti
proiectat filtrul i obinui coeficienii pentru o form particular (direct,
latice, etc.) ce va fi implementat.

(5.11)

k =0

Y ( z) =

W ( z)
N

1 + ak z k

(5.12)

k =1

Rezult ecuaiile cu diferene finite:


M

w(n) = bk z k

(5.13)

k =0

y (n) = w(n) ak y (n k )
k =1

(5.14)

155

Capitolul 5 Realizarea filtrelor digitale

156

Aplicaii ale procesoarelor de semnal n comunicaii


Registrele modulo m0 i m4 sunt setate 1 pentru adresare liniar.

Astfel, pentru un filtru de ordin N rezult schema de mai jos:

Coeficienii a1 i a2 se consider de modul subunitar. nainte de apelul


x ( n)

w(n)

b0

z 1

x(n 1)
z 1

y ( n)

b1

a1

b2

a2

macro-ului se scrie n registrul acumulator a valoarea eantionului de intrare


x ( n) .

z 1

y (n 1)
z 1

iir1

macro

iir1

ident

1,0

;
; IIR1 - Implementare filtru IIR de ordin 2 numai cu poli

z 1
x(n M )

aN

bM

z 1

; x(n) este stocat n acumulatorul a

y(n N )

Figura 5.3. Filtru IIR forma direct 1

poli, cu funcia de transfer de forma:


1
1 + a1 z + a2 z

(5.15)

; x0 = y(n-1) y0 = -a1

mac

x:(r0),x1

y:(r4)-,y0

x0,y0,a

; r4 este decrementat la adresa de baz a coeficienilor

S considerm acum implementarea unui filtru de ordin 2 numai cu

y:(r4)+,y0

; x1 = y(n-2), y0 = -a2

Evident, pentru calculul lui w(n) se folosete macroul de fir.

H ( z) =

move x:(r0)+,x0

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

Ieirea va fi calculat cu formula:


y (n) = x(n) a1 y (n 1) a2 y (n 2)

(5.16)

subunitar. Fie un filtru de ordin 2 stabil. Polii funciei de transfer sunt n

Organizarea memoriei:

r0

n exemplul anterior am considerat coeficienii numitorului de modul


cercul de raz unitate, deci de modul subunitar.

Memoria X

Memoria Y

y (n 2)

a2

y (n 1)

a1

Avem:
H ( z) =
r4

Figura 5.4. Organizarea memoriei pentru un filtru de ordin 2 numai cu poli

1
1
=
1 + a1 z 1 + a2 z 2 (1 p1 z 1 )(1 p2 z 2 )

(5.17)

Folosind relaiile ntre coeficienii i rdcinile polinomului de la


numitor obinem:

157

Capitolul 5 Realizarea filtrelor digitale


a1 = p1 + p2 p1 + p2 2

(5.18)

a2 = p1 p2 1

158

Aplicaii ale procesoarelor de semnal n comunicaii

numai c la nceputul macroului este setat modul de scalare iar la sfrit se


dezactiveaz acest mod.
Organizarea memoriei:

Aceasta nseamn c, n cazul unui filtru de ordin 2 coeficienii


numitorului sunt de modul mai mic ca 2. Pentru a-i putea reprezenta n virgul
fix, n complement fa de 2, este necesar scalarea coeficienilor cu 2.

Memoria X

Memoria Y

y (n 2)

a2 / 2

y (n 1)

a1 / 2

Structura echivalent este prezentat mai jos:


r0

x ( n)

1/ 2
a1 / 2

z 1

a2 / 2

z 1

y ( n)

r4

Figura 5.6. Organizarea memoriei pentru un filtru de ordin 2 numai cu poli cu


coeficienii scalai

Figura 5.5. Filtru IIR de ordin 2 numai cu poli cu coeficienii scalai

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

Ecuaia cu diferene finite devine:


a
x(n) a1

y ( n) = 2
y (n 1) 2 y (n 2)
2
2
2

(5.19)

ori

#$08,mr

move x:(r0)+,x0

y:(r4)+,y0

Vom folosi modul de scalare automat implementat n unitatea ALU a

mac

x:(r0),x1

x0,y0,a

DSP56300. Pentru acesta trebuie setat modul de scalare corespunztor cu biii

macr x1,y0,a

S1 i S0 din registrul de mod (MR). Dac S1=1 i S0=0, atunci, cnd se

nop

citete rezultatul din acumulatorul a sau b, valoarea citit este deplasat cu un


bit la stnga astfel ca ieirea y (n) s fie nmulit cu 2.

;setare mod scalare


y:(r4)-,y0

x0,x:(r0)-

move a,x:(r0)
andi #$f7,mr

;dezactivare mod scalare

endm

Registrul de mod (MR)


7

LF DM SC

S1 S0

Pentru cazul general al unui filtru de ordin N implementat n forma

I1

I0

direct 1, seciunea nerecursiv trebuie calculat separat cu macroul de fir, iar


pentru seciunea recursiv macroul va avea un ciclu n care se realizeaz

n exemplul urmtor este implementat un filtru IIR de ordin 2, numai


cu poli, cu coeficienii scalai cu 2. Programul este similar celui anterior,

N 1 operaii de multiplicare i acumulare.

159

Capitolul 5 Realizarea filtrelor digitale

160

Aplicaii ale procesoarelor de semnal n comunicaii


Macroul primete ca argument numrul coeficienilor. Pentru adresarea

x ( n)

modulo, registrele m0 i m4 trebuie iniializate cu N 1. Registrul r0 nu

y ( n)
a1
a2

trebuie modificat n afara macroului deoarece pstreaz adresa strii y (n 1) .

z 1

y (n 1)
z 1

iir3

macro

ncoef

iir3

ident

1,0

;
; IIR3 - Implementare filtru IIR numai cu poli
;

aN

move x:(r0)+,x0

y(n N )

Figura 5.7. Filtru IIR de ordin N numai cu poli

rep

#ncoef-1

mac

x0,y0,a

y:(r4)+,y0

;repet de N1 ori

macr x0,y0,a

Acest filtru poate fi implementat eficient prin utilizarea adresrii


modulo i a dou adresri n paralel cu doi pointeri r0 i r4. Harta memoriei

;y(n-1) si -a1

x:(r0)+,x0

y:(r4)+,y0

(r0)-

;r0 este adus la adresa

nop

;celei mai vechi ieiri

move a,x:(r0)

;unde se scrie ieirea

y(n)
endm

este prezentat mai jos:

5.2.2 Forma direct 2


Memoria X

Memoria Y

Relaia intrare-ieire se scrie:

aN

W ( z) =
m0 = N 1
r0

X ( z)
N

1 + ak z k
k =1

y ( n 1)

y ( n)
y ( n N + 1)

(5.20)

a2
a1

m4 = N 1
r4

Y ( z ) = W ( z ) bk z k
De unde rezult ecuaiile cu diferene finite:
N

Figura 5.8. Organizarea memoriei pentru un filtru de ordin N numai cu poli

(5.21)

k =0

w(n) = x(n) ak w(n k )

(5.22)

k =0

y (n) = bk w(n k )
k =0

(5.23)

161

Capitolul 5 Realizarea filtrelor digitale

162

Aceste relaii conduc la structura din figura urmtoare (cunoscut i cu


denumirea de forma canonic):
x ( n)

a2

Pentru filtrul de mai sus, harta memoriei pentru strile filtrului i


coeficieni este prezentat n figura urmtoare:

w(n)
a1

Aplicaii ale procesoarelor de semnal n comunicaii

b0

y ( n)

z 1 b
1

Memoria X

Memoria Y

w(n 2)

b2
b1
a2
a1

m0 = 1

z 1 b
2

w( n 1)

r0

m4 = 3
r4

Figura 5.11. Organizarea memoriei pentru filtrul biquad

aN

z 1 b
M

Registrul de adres r0 este iniializat s indice prima stare a filtrului, iar


r4 coeficienii filtrului. Registrul modulo m0 este setat cu 1 pentru adresare

Figura 5.9. Filtru IIR forma direct 2

liniar, iar m4 cu 3 pentru adresare modulo 4.

Se observ pentru aceast structur o reducere a numrului celulelor de


ntrziere fa de forma direct 1, deci o reducere a memoriei necesare.
S considerm pentru nceput un filtru de ordin 2 cu b0 = 1 . Funcia de

iir4

macro

iir4

ident

1,0

;
; IIR4 - Implementare filtru biquad

transfer poate fi scris:

1 + b1 z 1 + b2 z 2
H ( z) =
1 + a1 z 1 + a2 z 2

(5.24)

move x:(r0)+,x0

y:(r4)+,y0

mac

x:(r0),x1

;x0=w(n-1), y0=-a1

Filtrul implementat n forma direct 2 are structura de mai jos i se mai

x0,y0,a

y:(r4)+,y0

;a=x(n)-a1*w(n-1), x1=w(n-2), y0=-a2

numete i filtru biquad:


macr x1,y0,a

x ( n)

w(n)
a1
a2

;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

b2

Figura 5.10. Filtru IIR biquad

y:(r4)+,y0

;a=a-a2*w(n-2), w(n-1) e scris

y ( n)

z 1 b
1

x0,x:(r0)-

;n locul lui w(n-1), y0=b2


macr x1,y0,a
endm

;y(n)=a+b2*w(n-2)

163

Capitolul 5 Realizarea filtrelor digitale

164

Aplicaii ale procesoarelor de semnal n comunicaii

Trebuie menionat c n cazul unei funcii de transfer cu b0 1 se poate

Coeficienii sunt stocai mprii la 2. Cnd strile filtrului w(n k )

face o normare a coeficienilor numrtorului cu b0 , normare care poate fi

sunt salvate din acumulator n memorie, ele sunt nmulite cu 2 (prin scalare

compensat la ieire prin nmulirea cu o constant corespunztoare.

n sus). Astfel, la nmulirea strilor cu coeficienii scalarea se compenseaz.

Ca i n cazul formei directe 1, pentru coeficieni mai mici ca 2 n


modul poate fi implementat un program cu scalare automat cu 2 pornind de
la ecuaia cu diferene finite:
b
a
a
x(n) b1

y ( n) = 2
+ x( n 1) + 2 x(n 2) 1 y (n 1) 2 y (n 2) (5.25)
2
2
2
2
2

i avnd structura:

iir5

macro

iir5

ident

; IIR5 - Implementare filtru biquad cu scalare


;
ori

x(n) 1/ 2

w(n)

y ( n)

1,0

#$08,mr

;setare mod scalare

move x:(r0)+,x0

y:(r4)+,y0

mac

x:(r0),x1

y:(r4)+,y0

x0,x:(r0)-

y:(r4)+,y0

a,x:(r0)

y:(r4)+,y0

x0,y0,a

macr x1,y0,a

a1 / 2

z 1 b / 2
1

a2 / 2

z 1 b / 2
2

nop
mac

x0,y0,a

macr x1,y0,a
andi #$f7,mr

Figura 5.12. Filtru biquad cu coeficienii scalai

endm

Harta memoriei pentru strile filtrului i coeficieni este prezentat n


figura urmtoare:
Memoria X

Memoria Y

2 w(n 2)

b2 / 2
b1 / 2
a2 / 2
a1 / 2

m0 = 1
r0

2 w(n 1)

5.2.3 Realizarea n cascad

Se realizeaz factorizarea funciei de transfer n funcii de ordin 2 cu


coeficieni reali implementate cu structuri biquad:
m4 = 3
r4

Figura 5.13. Organizarea memoriei pentru filtrul biquad cu coeficienii scalai

p
1 + bk ,1 z 1 + bk ,2 z 2
= H k ( z)
1
2
+ ak ,2 z
k =1 1 + ak ,1 z
k =1
p

H ( z) =

(5.26)

Coeficienii seciunilor de ordin 2 au garantat modulul mai mic dect 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:

165

Capitolul 5 Realizarea filtrelor digitale

166

Aplicaii ale procesoarelor de semnal n comunicaii


Macroul pentru implementarea formei cascad cu seciuni biquad este

x ( n)

w1 (n)

a1,1
a1,2

w2 (n)

z 1 b1,1

a2,1

z 1 b1,2

a2,2

y ( n)

z 1 b2,1
z 1 b2,2

prezentat n continuare. Macroul primete ca argument numrul de seciuni.


iir6

macro

nsec

iir6

ident

1,0

;
; Implementare forma cascad cu seciuni biquad

Figura 5.14. Forma cascad cu structuri biquad

;
ori

n macroul de filtru, eantionul de intrare este stocat n acumulatorul a

#$08,mr

;mod scalare

move x:(r0)+,x0 y:(r4)+,y0

;r0->w(n-2) r0+

iar ieirea se afl tot n a. Aceasta permite calculul urmtoarei seciuni

do #nsec,_ends

;repet fiecare seciune

pornind tot de la valoarea din a, programul de filtru biquad fiind repetat ntr-

mac

un ciclu DO pentru numrul total de seciuni.

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

Harta memoriei pentru forma cascad cu dou seciuni biquad este

mac

x0,y0,a

a,x:(r0)+

y:(r4)+,y0 ;r0->w(n-1) r0+

prezentat mai jos. Trebuie observat cum sunt stocate strile filtrului. Primul

mac

x1,y0,a

x:(r0)+,x0

y:(r4)+,y0 ;r0->w(n-2) din

element este w(n 2) i al doilea este w(n 1) . De asemenea coeficienii sunt


stocai similar; primul element este a2 apoi a1 urmai de b2 i b1 . n acest

;urmtoarea seciune
_ends
rnd

;rotunjire rezultat

mod registrul adres r0 poate fi incrementat s treac direct la urmtoarea

andi #$f7,mr

seciune.

endm

Memoria X

Memoria Y

5.2.4 Realizarea n forma latice

b2,1 / 2

a 2-a seciune

;dezactivare mod scalare

b2,2 / 2
a2,1 / 2

Forma latice unui filtru IIR de ordinul 3:

a2,2 / 2

m0 = 1
r0

2 w2 (n 1)
2 w2 (n 2)
2 w1 (n 1)
2 w1 (n 2)

a 2-a seciune
prima seciune
prima seciune

b1,1 / 2
b1,2 / 2

m4 = 1

a1,1 / 2
a1,2 / 2

Figura 5.15. Organizarea memoriei pentru forma cascad

eb
r4

k3

k2
z

-1

y(n)

-k1

-k2

-k3

ef

k1
z

-1

-1

Figura 5.16. Forma latice pentru filtru IIR numai cu poli

167

Capitolul 5 Realizarea filtrelor digitale

Pentru filtrul de mai jos (ordin 3), pointerii r0 si r4 sunt iniializai

168

Aplicaii ale procesoarelor de semnal n comunicaii


nop
tfr y0,b

astfel:
Memoria X

Memoria Y

k3

s1

k2

s2

r0
m0 = 2

k1

a,x1

;transfer starea n b
;salveaz starea anterioar

m4 = 2

macr x1,x0,b

Figura 5.17. Organizarea memoriei pentru forma latice


Registrele modulo sunt fixate la numrul coeficienilor minus 1 (n

x:(r0)-,x0

_endlat
nop
move b,y:(r4)+

; salveaz a doua ultima stare

move x:(r0)+,x0

a,y:(r4)+

endm

au fost iniializate

corespunztor. Eantioanele de intrare sunt n registrul a, iar filtrul se

Explicarea programului:

1. Eantionul de intrare este n registrul a i pointerii r0 i r4 sunt

apeleaz n programul principal cu:


latiir order

;actualizare r0
;salveaz ultima stare

acest exemplu sunt 3 coeficieni). Eantioanele de intrare se pun n registrul


a i apoi este apelat macro-ul filtrului. Rezultatul filtrrii se depune n a.

y:(r4)-,y0

;urmtoarea stare, urmtorul k

r4

s3

Se presupune c registrele r0, r4, m0 i m4

b,y:(r4)+n4

;transfer a pentru nmulire

;apel latice iir

iniializai corect. Ieirea din stnga-jos a seciunii nu este necesar la


aceast implementare i nici nu se va calcula.

unde 'latiir' este numele macro-ului i 'order' este numrul de coeficieni

2. Primul move ncarc primul k (k3) n registrul de produs x0 i


decrementeaz pointerul r0 pentru urmtorul coeficient. Simultan, se

de reflexie.

ncarc starea filtrului i pointerul r4 este incrementat pentru a indica


latiir

macro

order

latiir

ident

1,0

spre urmtoarea stare.


3. Prima seciune a filtrului este generat de instruciunea mac.

Coeficientul k aflat n x0 este nmulit cu starea y0 i rezultatul se scade

; Latice IIR

din registrul a care conine valoarea intrrii. Urmtorul coeficient k (k2)

este apoi ncrcat n x0 i pointerul r0 e din nou decrementat.

move x:(r0)-,x0

y:(r4)+,y0

;primul k, prima stare

macr -x0,y0,a

x:(r0)-,x0

y:(r4)-,y0

Urmtoarea stare se ncarc n y0 i pointerul r4 se decrementeaz

do

#order-1,_endlat

macr -x0,y0,a

;prima seciune

pentru a indica spre starea anterioar. Acum, r4 indic napoi spre

;restul seciunilor

starea folosit n instruciunea precedent. Deoarece aceast valoare nu

;a=a-k*s

mai e necesar, n aceast locaie se va memora noua stare calculat.

Capitolul 5 Realizarea filtrelor digitale

169

4. Bucla do va calcula celelalte seciuni ale filtrului. Prima seciune a fost


calculat n afara buclei, deci au rmas numai N 1 seciuni.
5. Primul macr va calcula valoarea ieirii de sus scznd 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 nct s poat fi
multiplicat ulterior. Registrul b este ncrcat cu variabila strii curente
care a fost stocat n y0. Starea iniial calculat b se salveaz n
variabila strii precedente, iar pointerul ctre 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 strii curente (b). Se ncarc un
nou coeficient k, iar r0 e decrementat pentru a indica spre urmtorul
coeficient k. Se aduce noua stare, iar r4 se decrementeaz pentru a
indica spre starea precedent. n acest punct se observ c n urmtorul
pas al ciclului do starea care tocmai a fost calculata (b) este salvat n
memorie.
8. La sfritul buclei, valoarea ieirii se rotunjete, a doua stare se
salveaz i este incrementat r4.
9. Pointerul ctre coeficienii k se incrementeaz. Deoarece r0 este
decrementat de dou ori naintea buclei, iar bucla l decrementeaz de
N 1 ori rezult c numrul de decrementri este N + 1 . Aceasta
nseamn c se depete memoria ocupat de coeficieni i pointerul
trebuie decrementat pentru a-l indica pe k3. Valoarea de ieire din a este
de asemenea salvat ca ultima stare i pointerul r4 este incrementat la
urmtoarea locaie. Este interesant de observat c n acest punct c
valoarea din acumulatorul a a fost salvat peste valoarea necunoscut
din bufferul de stri scris n primul etaj. Registrul r4 indic apoi ctre
urmtoarea stare care este folosit pentru urmtorul eantion de intrare.

170

Aplicaii ale procesoarelor de semnal n comunicaii

Capitolul 6 Transformata Fourier rapid i aplicaii

171

performanele ntregului sistem. De exemplu, aplicaiile audio de calitate


necesit o precizie de cel puin 16 bii pentru a elimina distorsiunile audio.
2. Aplicaii de recunoatere multe probleme implic recunoaterea i

CAPITOLUL 6

detectarea semnalului cu un coninut de frecven specific (un model


spectral predefinit). De exemplu, vorbitul const n secvene de sunete cu
caracteristici specifice ale frecvenei. n acest tip de aplicaie conversia n

TRANSFORMATA FOURIER RAPID I APLICAII

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 recunoatere. n plus fa de viteza

6.1 APLICAII ALE TRANSFORMATEI FOURIER

calculelor transformatei Fourier procesorul n discuie trebuie s fie rapid


la operaii de prelucrare generale pentru a realiza o varietate de calcule n

Din cauza naturii de baz a conceptului de frecven, aplicaiile practice

domeniul frecven.

ale transformatei Fourier abund. Pe msur ce metode eficiente din punct de

3. Aplicaii bazate pe convoluie a treia clas de aplicaii a transformatei

vedere al costului vor fi disponibile s calculeze transformata Fourier,

Fourier folosete transformarea ca pe un instrument matematic simplu

numrul aplicaiilor practice bazate pe frecven vor fi mai numeroase. n

pentru a realiza filtrarea general ntr-o manier foarte eficient. Acest

aceste aplicaii bazate pe frecven un procesor de semnal digital poate

concept e bazat pe proprietatea c transformata Fourier a convoluiei a

calcula n mod eficient transformata Fourier i poate efectua prelucrri

dou semnale n timp e egal cu produsul transformatelor celor dou

specifice domeniului frecvenei, precum eliminarea unor anumite componente

semnale. Volumul calculelor implicate n produsul de convoluie devine

ale frecvenei.

mare dac lungimea filtrului este foarte mare. Astfel, dac transformata

Exist trei tipuri generale ale aplicaiilor transformatei Fourier:

Fourier a semnalului de la intrarea filtrului se poate calcula eficient,

1. Aplicaii bazate pe calcule numerice majoritatea aplicaiilor care

filtrarea se realizeaz prin nmulirea acesteia cu funcia de transfer n

analizeaz spectrul necesit evaluarea direct a transformatei Fourier.

frecven a filtrului (care poate fi precalculat). Numrul de calcule pentru

Deoarece transformata Fourier e o expresie matematic aceste aplicaii

transformata Fourier direct i invers i pentru filtrare n domeniul

sunt bazate pe calcule numerice. Exemplele se ntind de la analiza

frecvenei poate fi mai mic dect pentru convoluie mai ales pentru filtre

spectrului instrumentelor de laborator i al echipamentului audio

cu funcii de transfer simple (trece jos, trece band, etc.) unde nmulirea n

profesional pn la estimarea vitezei la radar. De observat ca n aplicaiile

domeniul frecven poate fi nlocuit cu o simpl operaie de mascare care

bazate pe numere, acurateea calculelor e de importana vital pentru

elimin benzile de oprire (spectrul ieirii este 0) i las spectrul semnalului


de intrare n benzile de trecere nemodificat.

172

Aplicaii ale procesoarelor de semnal n comunicaii

Capitolul 6 Transformata Fourier rapid i aplicaii

173

De asemenea printr-o simpl schimbare de notaie obinem:

6.2 ALGORITMI RAPIZI PENTRU CALCULUL


TRANSFORMATEI FOURIER DISCRETE

WNnk = e

2
nk
N

=e

2
n
N /k

= W Nn

(6.5)

Dac alegem N = N1 N 2 , se poate descompune transformarea de ordin

Fie secvena complex x(n) de suport finit, n = 0,1,..., N 1 . Se

N n transformri de ordin N1 i N 2 care la rndul lor se calculeaz pornind

definete transformata Fourier discret (TFD) a acestei secvene prin:


N 1

X (k ) = TFD{x(n)}( k ) = x(n)WNnk , k = 0,1,..., N 1

(6.1)

de la o descompunere similar.
Un caz important este acela n care N = R M , R numindu-se baz. De

n =0

unde WN = e

2
N

exemplu, dac R = 2 avem algoritmi n baza 2, cu N putere ntreag a lui 2,

se numesc coeficieni de rotaie.

Cunoscnd X (k ) se poate determina secvena x(n) cu ajutorul


transformatei Fourier discret invers (TFDI) definit de relaia:
1 N 1
x(n) = TFDI{ X (k )}(n) = X (k )WN nk ,
N k =0

n = 0,1,..., N 1

etc.
Pornind de la o reprezentare a indicilor sub forma:
n K1n1 + K 2 n2

(6.2)

Pentru efectuarea transformatei Fourier discrete, conform formulei


(6.2), sunt necesare N 2 nmuliri complexe i N ( N 1) adunri complexe. O

n cazul algoritmilor n baza R sunt posibile urmtoarele moduri de


reprezentare a indicilor:

nmulire complex necesit patru nmuliri i dou adunri reale. Rezult un

n Rn1 + n2 ,

numr de 4N 2 nmuliri reale i 4 N 2 2 N adunri reale. Complexitatea

N
k k1 + k2 ,
R

aritmetic este de forma O( N 2 ) deci crete cu N 2 . Astfel, pentru N = 1024


sunt necesare 4.194.304 nmuliri reale care, pe un procesor de semnal cu un
Exist algoritmi care permit efectuarea TFD cu un numr mai mic de
operaii. S observm nti cteva proprieti ale coeficienilor de rotaie WN :
(6.3)

de aici rezultnd o formul mai general:


+

WN

= (1) WN

n2 = 0,1,..., R 1
(6.7)
k2 = 0,1,..., R 1

N
n2 ,
R

k R k1 + k2 ,

N
1,
R
N
k1 = 0,1,..., 1,
R

n1 = 0,1,...,

n2 = 0,1,..., R 1
(6.8)
k2 = 0,1,..., R 1

ceea ce conduce la algoritmi cu decimare n frecven.

WN2 = e j = 1

WNkN = 1 ,

N
1,
R
N
k1 = 0,1,..., 1,
R

n1 = 0,1,...,

ceea ce conduce la algoritmi cu decimare n timp i


n n1 +

ALU, necesit un numr aproape dublu de cicluri main.

(6.6)

k K 3k1 + K 4 k2

(6.4)

174

Aplicaii ale procesoarelor de semnal n comunicaii

175

Capitolul 6 Transformata Fourier rapid i aplicaii

Fiecare din sumele ce apar n cele dou relaii de mai sus, reprezint

6.2.1 Algoritmi FFT cu decimare n timp n baza 2

cte o TFD n N / 2 puncte, primele pentru secvena format cu eantioanele


Aceti algoritmi au fost introdui de Cooley i Tukey pentru N = 2 M ,

pare, a doua, cu eantioanele impare. Rezult schema din figura 0.1:

M N.

x(2n1)

n acest caz indicii se vor scrie:


N
1,
2
N
k1 = 0,1,..., 1,
2

n 2n1 + n2 ,
k k1 +

n1 = 0,1,...,

N
k2 ,
2

TFD
N/2

X(k1)

k1
N/2-1

n2 = 0,1
(6.9)

k2 = 0,1

x(2n1+1)

TFD
N/2

i rezult:

k1

WNk1

N/2-1
N

Figura 0.1. Descompunerea TFD de ordin N n transformate de ordin N / 2

N
1
2
(2 n1 + n2 ) ( k1 + k2 )
N
2
X (k ) = X (k1 + k2 ) = x(2n1 + n2 )WN
2
n1 =0 n2 = 0

(6.10)
Trecerea de la transformatele de ordin N / 2 la transformata de ordin N

sau:
X (k1 +

N
1
2

N
k2 ) = x(2n1 ) W Nn1k1 + WN
2
n1 =0
2

k1 +

N
1
N
k2 2
2

se face prin intermediul unor structuri de tip fluture (figura 0.2). Aceast

x(2n + 1)

n1 = 0

W Nn1k1

(6.11)

structur este constituit dintr-o nmulire cu factorul WNk , i o transformat


Fourier discret de ordinul doi.

Dar:

A
k1 +

WN

N
k1
2

= ( 1) 2 WNk1
k

X (k1 ) = x(2n1 ) W
n1 =0

n1k1
N
2

+W

k1
N

N
1
2

x(2n1 + 1) WNn1k1 =

n1 = 0

X (k1 +

= TFD N { x(2n1 )} W TFD N { x(2n1 + 1)}


2

transformatele de ordin N / 2 pn se ajunge la transformate de ordinul 2.

N
1
2

k1
N

B'

Procedeul descris mai nainte se va aplica recursiv pentru

N
) = x(2n1 ) W Nn1k1 WNk1 x(2n1 + 1) W Nn1k1 =
2
n1 =0
n1 = 0
2
2

-1

(6.13)

= TFD N { x(2n1 )} + W TFD N { x(2n1 + 1)}


N
1
2

WNk

Figura 0.2. Fluturele pentru FFT n baza 2 DIT

k1
N

A'

(6.12)

aa nct, scriind separat pentru k2 = 0 i k2 = 1 :


N
1
2

X(k1+N/2)

-1

Rezult c pentru o transformat de ordin N = 2 M sunt necesare M


(6.14)

etaje, fiecare coninnd N / 2 fluturi, deci n total sunt necesari N 2log 2 N


fluturi.

176

Aplicaii ale procesoarelor de semnal n comunicaii


Graful complet al unei transformate n baza 2 cu decimare n timp n

opt puncte este ilustrat n figura 0.3.


X(0)
W0

X(1)
-1

x(2)
x(6)

W0
W2

W0
-1

X(2)
-1
-1

x(1)
x(5)
x(3)
x(7)

X(3)
W0
W1

W0
-1

W0
W2

W0
-1

177

x(0)

X(0)
W0

x(1)

x(0)
x(4)

Capitolul 6 Transformata Fourier rapid i aplicaii

W2
-1

W3

-1

X(4)
-1
X(5)

-1

x(3)

x(5)
x(6)

-1

-1

x(7)

-1

X(6)

-1

-1

-1

X(5)
X(3)

-1

-1

-1

X(7)

X(6)
X(7)

Figura 0.3. Graful unei FFT n baza 2 cu decimare n timp n opt puncte

6.2.2 Algoritmi FFT cu decimare n frecven n baza 2


n acest caz se reprezint indicii sub forma:
n n1 +

Din graful transformatei se observ c ieirile sunt ordonate secvenial


iar intrrile nu. Aceasta se datoreaz divizrii repetate a intrrii n subintrare sunt reprezentai n form binar se observ c acetia sunt n ordinea
invers a biilor (bit-reversed).
Putem reordona intrrile din graful anterior, x(4) i x(6) n locul lui x(1)
i lui x(3), rezultnd un graf pentru transformata n 8 puncte cu intrrile n
ordinea fireasc ca n figura 0.4:
Se observ ns c dup aceast rearanjare, coeficienii de rotaie

N
n2 ,
2

k 2k1 + k2 ,

secvene de eantioane de ordin par i impar. Dac indicii eantioanelor de

precum i ieirile grafului vor fi n ordine bit-reversed.

X(1)

-1

x(4)

X(2)
-1

Figura 0.4. Rearanjarea grafului pentru calculul FFT cu decimare n timp

-1
-1

W0

x(2)

X(4)
-1

N
1,
2
N
k1 = 0,1,..., 1,
2
n1 = 0,1,...,

n2 = 0,1
(6.15)
k2 = 0,1

deci:
N
1
1
2

X (2k1 + k2 ) = x(n1 +
n1 =0 n2 = 0

N
( n1 + n2 ) (2 k1 + k2 )
N
n2 )WN 2
2

(6.16)

din care rezult pentru k1 = 0 i k2 = 1 :


N
1
2

X (2k1 ) = x[n1 ] + x n1 + W Nn1k1 =


2 2

n1 =0
N

= TFD N x[n1 ] + x[n1 + ]


2
2

(6.17)

178

Aplicaii ale procesoarelor de semnal n comunicaii


N
1
2

X [2k1 + 1] = x[n1 ] x n1 + WNn1W Nn1k1 =


2

n1 =0
2

(6.18)

= TFD N x[n1 ] x[n1 + ] WNn1


2

Capitolul 6 Transformata Fourier rapid i aplicaii

179

x(0)

X(0)
W0

x(1)
W0

x(2)
-1
x(3)

Se constat iari descompunerea transformatei de ordin N n dou

x(4)

transformate de ordin N / 2 (figura 0.5).

-1
x(5)
-1

TFD
n1 N/2

1
x(n1)

x(6)
X(2k1)

N/2-1

x(7)

-1

X(2)

W
-1

-1

X(4)

-1

X(6)
X(1)

W
-1

-1

-1

X(5)
X(3)

W
-1

-1

X(7)

Figura 0.6. Graful unei FFT n baza 2 cu decimare n frecven n opt puncte
0

x(n1+N/2)

n1

-1

WNk1

TFD
N/2

X(2k1+1)

N/2-1

Figura 0.5. Descompunerea TFD de ordin N n transformate de ordin


N /2
n continuare fiecare din cele dou grupuri de cte N / 2 semnale ce
constituie intrrile transformatelor n N / 2 puncte se desparte n dou, dup

Ca i n cazul precedent, rezult log 2 N etaje, n fiecare efectundu-se


N / 2 operaii de tip fluture. Structura fluturelui este ns cea din figura 0.7.
A'

-1

WNn

B'

Figura 0.7. Fluturele pentru FFT n baza 2 DIF

acelai procedeu (primele N / 4 i urmtoarele N / 4 ).


De exemplu pentru N = 8 , se obine graful din figura 0.6.

Evident complexitatea, exprimat prin numerele de nmuliri reale i de


adunri reale este aceeai ca n algoritmul precedent.
n acest caz eantioanele semnalului se iau n ordinea natural, iar ale
ieirii, rezult n ordinea inversat a biilor.

180

Aplicaii ale procesoarelor de semnal n comunicaii

6.3 IMPLEMENTAREA

FFT

PE

PROCESOARELE

DIN

FAMILIA MOTOROLA DSP56300

Capitolul 6 Transformata Fourier rapid i aplicaii

181

Aa cum s-a observat n prezentarea algoritmului FFT, intrrile, ieirile


sau factorii de rotaie pot surveni n ordinea inversat a reprezentrii binare a
indecilor. Aceasta implic o reordonare a operanzilor conform algoritmului
bit-reversed. Procesoarele de semnal din familia DSP56300 au facilitatea de a

6.3.1 Resursele hardware necesare calculului FFT

adresa n ordinea inversat a biilor adresei.


Alt aspect privitor la resursele hardware l reprezint numrul de

Principalul element de calcul al rutinei FFT este fluturele din figura 0.2

registre interne disponibile pentru stocarea rezultatelor intermediare, avndu-

pentru decimare n timp (DIT) i din figura 0.7 pentru decimare n frecven

se n vedere c stocarea acestora n memorie necesit mai mult timp de

(DIF). Acesta include nmuliri i adunri/scderi complexe (att intrrile

procesare.

fluturelui ct i factorii de rotaie sunt numere complexe). De aceea este

Datele de la intrarea FFT sunt n general eantioane primite de la un

necesar o arhitectur capabil s suporte reprezentarea i operaiile

convertor A/D. Achiziia datelor trebuie efectuat n paralel cu calculul FFT

aritmetice cu numere complexe.

pentru o aplicaie de timp-real. De aceea DSP trebuie s ofere o interfa

Pentru nmulire i adunare arhitectura DSP56300 ofer instruciunea


MAC (multiplicare i acumulare) precum i dou registre acumulator. De
asemenea, intrrile i ieirile fluturelui sunt mutate ntre unitatea aritmetic a
procesorului i memorie ceea ce necesit operaii de transfer eficiente.
Pentru reprezentarea numerelor complexe, DSP56300 are dou zone de

simpl cu diversele convertoare A/D precum i tehnici de ntreruperi sau


DMA pentru stocarea datelor achiziionate fr a interfera cu calculul FFT.
n concluzie, obinerea unei implementri eficiente a FFT pe DSP
depinde de urmtorii factori hardware:
1. Instruciune de multiplicare/acumulare;

memorie pentru date: X i Y. Astfel, partea real i partea imaginar a

2. Transferul datelor dual n memorie ntr-un singur ciclu main;

numerelor complexe pot fi stocate n memoria X, respectiv Y. De asemenea,

3. Instruciune de ciclare fr overhead;

pot fi efectuate simultan dou citiri i scrieri n memorie ntr-un singur ciclu

4. Mod de adresare bit-reversed;

main.

5. Numr suficient de registre;

Algoritmul de calcul FFT implic repetarea structurii de tip fluture de


un numr de ori depinznd de numrul de puncte N. Pentru un program de
calcul al FFT, este important o implementare eficient a repetrii fluturilor.
O soluie hardware este dat de instruciunea DO loop, fr a fi
necesare alte operaii de iniializare (zero overhead). Fiecare iteraie este
astfel realizat fr ntrzieri suplimentare n execuie.

6. Interfa rapid I/O pentru achiziia datelor n timp real.

182

Aplicaii ale procesoarelor de semnal n comunicaii

6.3.2 Caracteristicile fluturilor pentru FFT n baza 2 DIT i DIF

S considerm reprezentarea datelor de la intrarea i ieirea fluturilor


precum i a factorilor de rotaie sub forma complex: parte real i parte
imaginar.
WNk = e

2
k
N

2
= cos
N

2
k + j sin

Wr

183

Capitolul 6 Transformata Fourier rapid i aplicaii

Pentru familia DSP56300 instruciunea MAC efectueaz o nmulire i


o adunare n paralel. Pentru fluturele DIT patru dintre adunri pot fi efectuate
n paralel cu nmulirile rmnnd de efectuat dou adunri. Pentru fluturele
DIF ns, numai dou dintre adunri pot fi efectuate n paralel cu nmulirea,
rmnnd de efectuat patru adunri. Din acest punct de vedere arhitectura
DSP Motorola implementeaz mai eficient fluturele pentru DIT.

(6.19)
A' = A + B

A' = A + B WNk A

Wi

Ecuaiile de calcul ale ieirilor complexe ale fluturilor pentru DIT i


DIF sunt date n tabelul urmtor:
A' = A + B WNk

WNk

-1

B' = A B WNk

Fluturele pentru FFT n baza 2 DIT

A' = A + B

-1

Ar' = Ar + Br

Ai' = Ai + ( BW
i r BrWi )

Ai' = Ai + Bi

Bi' = Ai ( BW
i r BrWi )
Ecuaiile ieirilor fluturelui DIT

B' = ( A B) WNn

Fluturele pentru FFT n baza 2 DIF

Ar' = Ar + ( BrWr + BW
i i)
Br' = Ar ( BrWr + BW
i i)

WNn

Br' = ( Ar Br )Wr ( Ai Bi )Wi


Bi' = ( Ar Br )Wi + ( Ai Bi )Wr
Ecuaiile ieirilor fluturelui DIF

Teoretic, aa cum rezult din ecuaiile de calcul ale ieirilor, fluturii


pentru DIT i DIF n baza 2 au aceeai complexitate aritmetic: trei adunri,
trei scderi i patru nmuliri. Pe procesoarele de semnal care nu efectueaz n
paralel nmulirea i adunarea sunt necesare zece instruciuni pentru un
fluture.

WNk

B' = A B WNk B

-1

Fluturele pentru FFT n baza 2 DIT


T1 = Ar + BrWr

-1

WNn

B' = ( A B) WNn

Fluturele pentru FFT n baza 2 DIF

MAC

Ar' = Ar + Br

ADD

Ar' = T1 + BW
i i

MAC

T1 = Ar Br

SUB

Br' = 2 Ar Ar'

SUBL

Ai' = Ai + Bi

ADD

MAC

T2 = Ai Bi

SUB

T2 = Ai BrWi
Ai' = T2 + BW
i r
Bi' = 2 Ai Ai'

MAC

T3 = TW
1 r

SUBL

Br' = T3 T2Wi
T4 = T2Wr
Bi' = T4 + TW
1 i

MPY
MAC
MPY
MAC

184

Aplicaii ale procesoarelor de semnal n comunicaii

185

Capitolul 6 Transformata Fourier rapid i aplicaii

6.3.3 Programul pentru calculul fluturelui DIT pe DSP56300

Ecuaiile pentru programul de calcul al fluturelui pentru DIT sunt:


Ar' = Ar + ( BrWr + BW
i i)
Ai' = Ai + ( BW
i r BrWi )

(6.20)

Br' = 2 Ar Ar'

mac

x1,y0,b

y:(r1)+,y1

macr

-x0,y1,b

a,x:(r5)+

subl

b,a

x:(r0),b

mac

-x1,x0,b

x:(r0)+,a

macr

-y1,y0,b

x:(r1),x1

subl

b,a

b,x:(r4)+

; b=Ai+BrWi,

y1=Bi

y:(r0),a

; b=b-BiWr ,

a=Ai

b,y:(r4)

; a=2Aib

b=Ar

a,y:(r5)

; b=Ar+BrWr,

a=Ar

; b=bBiWi ,

x1=Br

y:(r0),b

; a=2Arb

b=Ai

B = 2 Ai A
'
i

'
i

unde indicii r i i reprezint partea real, respectiv imaginar.

6.3.4 Caracteristicile unei transformate DIT

Primele dou ecuaii reprezint o sum de produse i sunt obinute cu


instruciunea MAC. Ultimele dou ecuaii se bazeaz pe instruciunea SUBL
care realizeaz deplasarea la stnga (nmulire cu 2) i scderea
acumulatorilor.

Pornim de la graful pentru DIT cu intrrile rearanjate n ordine natural.


Fiecare pereche de sgei reprezint un fluture. ntregul calcul al FFT este
efectuat cu fluturi organizai n diferite structuri numite grupuri i etaje.

Valorile iniiale ale registrelor sunt date n tabelul de mai jos:

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

r0 Ar , Ai

r4 Ar' , Ai'

b = Ai

r1 Br , Bi

r5 Br' , Bi'

x1 = Br

y1 = Bi

(bit x0 = Wr

y0 = Wi

r6 Wr , Wi m6
=
reversed)

etaj conine N / 2 (patru n acest exemplu) fluturi. Fiecare fluture are dou
intrri, numite nod primar i nod dual. Spaiul ntre aceste noduri este numit
distana ntre nodurile duale. Fiecrui fluture i este asociat un factor de
rotaie W, al crui exponent depinde de grupul i etajul n care este fluturele.

Datele sunt stocate n memoria de date X pentru partea real i Y

Din graful transformatei se observ c ieirile sunt ordonate n ordinea invers

pentru partea imaginar. Registrele de adres permit adresarea dual n

a biilor indexului ieirii. Reordonarea secvenei de ieire se face cu un

memoria de date X i Y.

procedeu numit inversarea ordinii biilor care va fi descris ulterior.

Programul n limbaj de asamblare pentru calculul fluturelui este


prezentat n continuare. Timpul de execuie este de ase cicluri instruciune
sau dousprezece cicluri de ceas. Aceasta este posibil datorit arhitecturii
paralele

DSP56300

care

permite

pn

la

dou

operaii

ALU

(nmulire/acumulare) n paralel cu dou transferuri cu memoria i dou


modificri ale registrelor de adres ntr-un singur ciclu instruciune.

186

Aplicaii ale procesoarelor de semnal n comunicaii

Index
binar

Distana ntre
nodurile duale

Distana ntre
nodurile duale

Index
binar

Distana ntre
nodurile duale

000 x(0)
0

001 x(1)
W

010 x(2)

W0

011 x(3)
100 x(4)
101 x(5)
110 x(6)

-1

W0

X(4) 100

constant de la un etaj la altul. Ieirile fluturelui sunt pe aceleai poziie ca i

X(6) 110

-1

X(1) 001
-1

W0

-1

W0

-1

111 x(7)

W2

W1

X(3) 011

-1

intrrile. Aceast implementare in-place scrie rezultatul de la ieirea


fluturelui n locul intrrii corespunztoare. O astfel de implementare ocup n
final numai memoria iniial.

X(5) 101

-1

W2

fluturelui devin intrri n etajul urmtor al FFT. Deoarece fiecare etaj are
acelai numr de fluturi, numrul de intrri i de ieiri ale fluturilor rmne

X(2) 010
-1

187

X(0) 000

-1

Capitolul 6 Transformata Fourier rapid i aplicaii

6.3.5 Programul pentru calculul FFT n baza 2 DIT pe DSP56300

-1

-1

-1

Etaj 1

Etaj 2

Etaj 3

X(7) 111

Se observ c sunt log 2 N etaje. Numrul de grupuri se dubleaz de la


un etaj la altul, n timp ce numrul de fluturi pe grup se njumtete. Factorii

Figura 0.8. Gruparea fluturilor pentru calculul FFT DIT

de rotaie sunt aceiai pentru un grup de fluturi, iar ordinul acestora se


modific de la un grup la altul n ordine bit-reversed. Aceasta este

Caracteristicile unei transformate n N puncte cu decimare n timp sunt


descrise n tabelul urmtor:

implementat prin setarea registrului modificator M6 egal cu 0 i a registrului


offset N6 egal cu N / 4 (jumtate din lungimea vectorului coeficienilor).
Datele sunt organizate n memorie dup cum urmeaz:

Etajul 1

Etajul 2

Etajul 3

Etajul log2N

Numr de
grupuri

N/2

Numr de
fluturi pe grup

N/2

N/4

N/8

Distana ntre
noduri duale

N/2

N/4

N/8

(N/4)k,

(N/8)k,

k,

k=0, 1

k=0, 1, 2, 3

k=0 .. N/2-1

(N/2)k,
Exponentul
coeficienilor W k=0

Pentru fiecare etaj, datele sunt citite din memorie, este calculat
fluturele, iar rezultatele sunt scrise napoi n memorie. Ieirile complexe ale

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 dintrun etaj iar ciclul intern calculeaz toi fluturii dintr-un grup. Programul este
prezentat mai jos.

188

Aplicaii ale procesoarelor de semnal n comunicaii

189

Capitolul 6 Transformata Fourier rapid i aplicaii

; Rutina de calcul FFT in baza 2 cu decimare in timp

move

x:(r6)+n6,x0

;actualizare pointer Cos-Sin

;
fftr2a

macro

points,data,coef

do

fftr2a

ident

1,0

mac

x1,y0,b

y:(r1)+,y1

macr

-x0,y1,b

a,x:(r5)+

y:(r0),a

b,a

x:(r0),b

b,y:(r4)

n0,_end_bfy

;Fluturele DIT

;points numr de puncte de calcul FFT (putere a lui 2)

nop

;data

adresa de nceput a cadrului de date

subl

;coef

adresa de nceput a tabelelor de cosinus si sinus

mac

-x1,x0,b

x:(r1),x1

macr

-y1,y0,b

x:(r0)+,a

;
move

#points/2,n0

;numr iniial de fluturi pe grup

subl

b,a

move

#1,n2

;numr iniial de grupuri pe etaj

move

b,x:(r4)+

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

a,y:(r5)

y:(r0),b

_end_bfy
move

a,x:(r5)+n5

y:(r1)+n1,y1

;actualizare

move

x:(r0)+n0,x1

y:(r4)+n4,y1

;intrri A i B

_end_grp
;adresare bit-reversed pentru Cos-Sin

move

n0,b1

lsr

n2,a1 ;mparte cu 2 numr fluturi pe grup

b1,n0 ;nmulete cu 2 nr. de grupuri pe etaj

nop

; Calculul etajelor FFT cu trei cicluri DO

lsl

nop
do

#@cvi(@log(points)/@log(2)+0.5),_end_pass

move

#data,r0

;pointerul intrrilor A

move

r0,r4

;pointerul ieirilor 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 ieirilor 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

move
_end_pass
endm

a1,n2

190

Aplicaii ale procesoarelor de semnal n comunicaii

6.4 SCALAREA DATELOR FFT PENTRU IMPLEMENTAREA


PE PROCESOR N VIRGUL FIX

trebuie s se in seama de precizia finit a calculelor datorat numrului de


bii pe care sunt reprezentate numerele. Pentru a preveni depirile n calculul
ieirilor fluturilor FFT se realizeaz scalarea intrrilor prin shiftare la dreapta
(mprire cu o putere a lui 2).

posibil a biilor ntr-o transformat n N puncte este egal cu numrul de etaje

10 etaje) trebuie s fie introdui 10 bii de gard n datele de intrare, rmnnd


14 bii de informaie. Aceast metod de scalare este simpl i eficient
pentru FFT de lungimi mici. Cu ct lungimea FFT crete, numrul de bii de
gard necesari crete nrutindu-se raportul semnal-zgomot.
Aa cum s-a artat, o cretere medie de un bit se nregistreaz dup
ieirilor cu 2 dup fiecare etaj. Numrul de mpriri cu 2 fiind egal cu

- Scalarea datelor de la intrarea FFT;

numrul de etaje, pentru a obine rezultatul corect al FFT trebuie nmulite

- Scalarea datelor la ieirea din fiecare fluture;

ieirile ultimului etaj cu N. Aceast metod are un raport semnal-zgomot mai

- Scalare condiionat a datelor pe blocuri.


Prima metod care asigur c nu apar depiri este s se includ
suficieni bii de gard pentru datele de la intrarea FFT. Aceasta nseamn c
prin shiftare la dreapta a datelor, cei mai semnificativi bii permit creterea
numerelor de la un etaj la altul.
n modul, ieirile fluturelui pot crete cu un bit la fiecare etaj aa cum
rezult din ecuaia:
(6.21)

i avnd n vedere ca factorii de rotaie W = e j au modulul unitar,


adunarea poate produce creterea cu un bit (dublare).

bun ca metoda anterioar deoarece se pornete cu date de intrare mai precise.


Totui, n etajele care nu au creteri ale numrului de bii scalarea nu este
necesar, aprnd astfel o pierdere de informaie.
A treia metod de scalare trateaz un etaj ca pe un bloc de date,
atribuind un exponent pentru fiecare bloc. Aceast metod se mai numete
scalare condiionat n virgul mobil pe bloc. Dac apare o cretere a
numrului de bii la o ieire, ntregul bloc de date este shiftat la dreapta i
exponentul blocurilor este incrementat. La sfritul FFT trebuie determinat
numrul de scalri efectuate pentru a avea un rezultat corect. Implementarea
pe DSP56300 folosete bitul de scalare (bitul 7 din registrul de stare) pentru

Prile reale i imaginare se calculeaz cu o ecuaie de tipul:


(6.22)

Pentru = / 4 datele pot crete cu un factor maxim de 2.4 de la


intrarea la ieirea fluturelui ceea ce nseamn o cretere cu doi bii. Totui,
numai dou grupuri de fluturi au factorul de rotaie maxim ntr-un etaj i nu se
nregistreaz o cretere cu acest factor maxim n dou etaje consecutive.

Numrul de bii de gard necesar pentru a compensa creterea maxim

fiecare etaj. O alt metod de compensare a creterii biilor const n scalarea

Una din urmtoarele metode de scalare poate fi aplicat:

A ' = A + B cos + C sin

191

adic log 2 N bii. De exemplu, ntr-o transformat n 1024 de puncte (care are

n implementarea diverilor algoritmi pe procesoarele de semnal

A ' = A + BW

Capitolul 6 Transformata Fourier rapid i aplicaii

testarea apariiei creterii biilor i actualizarea exponentului. Sunt adugate


cinci instruciuni la sfritul fiecrui etaj. Aceast metod asigur cel mai bun
raport semnal-zgomot dar este i cea mai costisitoare din punct de vedere al
complexitii programului.

192

Aplicaii ale procesoarelor de semnal n comunicaii

Pentru un cadru de lungime N = 2k rezult c ultimii k bii ai adresei

6.5 ADRESAREA N ORDINE INVERS A BIILOR

vor trebui inversai. Pentru aceasta registrul Nn trebuie s aib valoarea:

Inversarea ordinii biilor este o tehnic de adresare utilizat n calculul


FFT pentru reordonarea datelor n ordine secvenial. Un exemplu de
inversare a ordinii biilor este prezentat mai jos. Inversarea ordinii biilor
opereaz asupra indexului binar care reprezint poziia unui eantion ntr-un
cadru. n exemplul dat avem opt date, deci sunt necesari trei bii pentru
reprezentarea celor opt indeci. Prin inversarea ordinii celor trei bii se obine

Nn = 2k 1

(6.23)

De asemenea adresa de baz a secvenei de intrare trebuie s fie putere


ntreag a lui 2 ndeplinind condiia:
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.

secvena reordonat secvenial.

M0 = $000000. R0 = 1000. N0 = 0100 = 23-1.

Binar

Secvena
ordonat

Adresa
secvenei
iniiale

Secvena
iniial

000

x(0)

$8 = 1000

100

001

x(1)

010

010

x(2)

$9 = 1001

x(6)

110

011

x(3)

$A = 1010

x(1)

001

100

x(4)

$B = 1011

x(5)

101

101

x(5)

x(3)

011

110

x(6)

$C = 1100

x(7)

111

111

x(7)

$D = 1101

Pe familia DSP56300 acest mod de adresare este selectat prin

$E = 1110

ncrcarea registrului Mn cu zero (Mn = $000000). Modificarea adresei este

$F = 1111

Indexul iniial

193

Capitolul 6 Transformata Fourier rapid i aplicaii

Indexul cu biii inversai

Secvena
iniial

Decimal

Binar

Decimal

x(0)

000

x(4)

x(2)

realizat hardware prin incrementarea i propagarea transportului n sens


invers (reverse-carry), de la MSB la LSB. Aceasta este echivalent cu
inversarea coninutului registrelor Rn i Nn, adunarea ofsetului din registrul
Nn i reinversarea ordinii biilor rezultatului.

Modificarea adresei
reverse-carry
R0 = 1000 +
N0 = 0100
R0 = 1100 +
N0 = 0100
R0 = 1010 +
N0 = 0100
R0 = 1110 +
N0 = 0100
R0 = 1001 +
N0 = 0100
R0 = 1101 +
N0 = 0100
R0 = 1011 +
N0 = 0100
R0 = 1111 +
N0 = 0100

Secvena
reordonat
0
4
2
6
1
5
3
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 situaiile n care spaiul de memorie este mai critic dect timpul de

194

Aplicaii ale procesoarelor de semnal n comunicaii

execuie se prefer o metod in place (fr memorie suplimentar) de

Capitolul 6 Transformata Fourier rapid i aplicaii

195

6.6 OPTIMIZAREA PERFORMANELOR FFT

ordonare n ordinea invers a biilor. Dup cum se poate observa, dac


indexul binar este simetric (este acelai i cu biii inversai) data respectiv nu
trebuie schimbat. n celelalte cazuri se pot forma perechi de date care i

6.6.1 Optimizarea

schimb poziia una n locul celeilalte (1 cu 4, 3 cu 6 din exemplul anterior).


Judecarea performanelor oricrui program necesit luarea n
considerare a complexitii att a timpului de execuie ct i a spaiului

Iniializri
r0
m0
n0
r1

=
=
=
=

data + N/2
0 (bit reversed)
N/2
data + 1

ocupat. Totdeauna exist un compromis ntre acestea dou. Complexitatea


timpului de execuie arat ct de repede poate fi implementat un algoritm pe
un procesor specificat, n timp ce complexitatea spaiului arat ct memorie
poate fi necesar. Optimizarea poate s reduc necesarul de memorie sau s

do N-1 points

minimizeze timpul de rulare al unui algoritm. Deoarece costurile memoriei


sunt ntr-o continu descretere, optimizarea timpului de execuie devine din

NU

r0 r1

DA

a = x:(r0)
b = x:(r1)
x:(r0) = b
x:(r1) = a

ce n ce mai important. O metod de evaluare a complexitii timpului de


execuie a unui algoritm este comparaia complexitii teoretice, complexitii
implementrii ideale i complexitii practice. Complexitatea teoretic se
refer la numrul de adunri i nmuliri cerute de algoritmul dat independent
de arhitectura procesorului. Acest tip de evaluare e bun doar pentru o
comparaie de nivel nalt ntre algoritmi i nu reflect performanele reale ale

(r0)+n0 (bit reversed)


(r1)+
(liniar)

algoritmului pe procesorul dat. Nu e surprinztor faptul c un algoritm cu o


complexitate teoretic mic are o complexitate implementat ideal mai mare.
Complexitatea implementat ideal se refer numai la implementarea

Figura 0.9. Algoritmul in place de reordonare a datelor.

nucleului algoritmului n funcie de posibilitile instruciunilor procesorului


dat cum ar fi: tipuri de instruciuni disponibile, moduri de adresare, transferuri

Algoritmul este prezentat n figur. Registrul r0 este folosit pentru

paralele ale datelor, etc. Complexitatea implementrii ideale arat

adresarea bit-reversed, iar r1 pentru adresare liniar. Dac r0 = r1 (index

performanele fr overhead ale algoritmului dat pe procesor i furnizeaz o

simetric) sau dac r0 < r1 (ca s nu fie schimbat de dou ori aceeai pereche)

estimare optimist a performanei algoritmului. Complexitatea practic

nu se schimb datele ntre ele.

reprezint complexitatea implementrii ideale plus structura de overhead

196

Aplicaii ale procesoarelor de semnal n comunicaii

datorat procesorului. Overhead-ul include toate instruciunile necesare


neasociate

nucleului

algoritmului.

Iniializarea

pointerilor,

pregtirea

ciclurilor, salturile la subrutine sunt structuri tipice de overhead n procesor.

Capitolul 6 Transformata Fourier rapid i aplicaii

197

Aranjarea datelor n ordinea invers a biilor. Acest lucru poate fi fcut


in-place deoarece datele sunt interschimbate pe perechi. Astfel, doar o
zon de date de lungime 2N e necesar.

Prin distingerea diferitelor grade de complexitate se poate determina uor care

Prin reducerea tabelului factorilor de rotaie de la N locaii la N / 2

procesor e compatibil pentru fiecare aspect i care instruciune sau mod de

locaii reale pentru intrrile ordonate n ordine normal. N / 2 numere

adresare e critic pentru algoritmii specifici. De exemplu, complexitatea

complexe pot fi combinate n perechi de cte dou ce difer prin

teoretic pentru radix-2 e de patru multiplicri i ase adunri sau scderi.

factorul WNN / 4 = j . Cu alte cuvinte, factorul de rotaie din al doilea

Pentru procesoarele din familia DSP56300, instruciunea MAC efectueaz o

grup poate fi obinut prin multiplicarea cu j cu factorul din primul

nmulire i o adunare n paralel, deci complexitatea implementrii ideale pe

grup. Optimizarea poate fi implementat printr-o modificare minor a

DSP56300 e de ase cicluri (4 MAC i 2 SUBL). Dac fiecare fluture are

programului fluturelui. Toate grupurile de index par vor folosi factorii

nevoie de o medie de 1/6 instruciuni pentru a completa un ciclu DO,

de rotaie negai, cu prile real i imaginar schimbate ntre ele.

complexitatea practic a fluturelui DIT n baz 2 e de 6.17 instruciuni.

Astfel, numrul grupurilor ntr-un etaj se poate reduce la jumtate la fel

Raportul ntre complexitatea implementrii ideale i cea practice reflect

ntmplndu-se i cu timpul de acces la memoria factorilor W.

eficiena microprocesorului n efectuarea unei funcii. De exemplu, eficiena


lui DSP56300 de a efectua un fluture DIT complex ar fi raportul

Folosind trei cicluri DO intercalate pentru a minimiza spaiul de


memorie de program.

implementrii ideale i a celei practice, adic: 0.97. Cu alte cuvinte, overheadul 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

6.6.3 Optimizarea pentru o execuie mai rapid

DSP. Daca e mai mic de 3%, e probabil un circuit integrat specific unei
aplicaii (ASIC).

Dei programul discutat anterior se execut foarte rapid, anumite


aplicaii impun cerine mai puin stringente referitoare la mrimea memoriei,

6.6.2 Minimul de memorie ocupat implementarea in place

dar cer o execuie mai rapid. O execuie rapid poate fi obinut prin
optimizarea algoritmului anterior. n urmtoarele rnduri vom prezenta civa
pai de a atinge aceast optimizare:

Dei fiecare fluture are dou date complexe de intrare i dou de ieire,
calcularea fluturelui poate fi efectuat folosind aceeai zon de memorie
numit calcularea in place. Necesarul de memorie poate fi minimizat n
cazurile:

Deoarece n primul i al doilea etaj sunt factori de rotaie triviali (care


nu implic operaii aritmetice) de tipul:
WN0 = 1 i WNN / 4 = j

(6.25)

198

Aplicaii ale procesoarelor de semnal n comunicaii


se pot combina primul i al doilea etaj ntr-un fluture de ordin 4 ca n

figura 0.10.

Capitolul 6 Transformata Fourier rapid i aplicaii

199

unitate ALU i dou transferuri paralele, dureaz cel puin 16 instruciuni


pentru efectuarea calculelor.
Dup combinarea primelor dou etaje, numrul ciclurilor instruciune

necesar pentru calculul FFT devine:

(TRIV N / 4 ) + ( nr.etaje 2 ) N / 2 nr.instr. fluture


1

(6.27)

unde TRIV este numrul instruciunilor pentru fluturele trivial.

B
-1

Factori de rotaie triviali exist i n etajele rmase. Exist dou tipuri

de fluturi triviali.

-1

Tipul 1:
D

1
-1

-1

Tipul 2:

Figura 0.10. Fluturele de ordin 4 obinut prin gruparea primelor dou


etaje FFT

WN0 = 1, WNN / 4 = j
WNN / 8 = WN3 N / 8 =

2
2
j
2
2

(6.28)
(6.29)

Tipul 1 nu implic multiplicri. Pentru a folosi aceste relaii simple n


etajele rmase, trebuie s utilizm fluturi diferii care trebuie inserai ntr-un

Prin aceast grupare vor fi calculai N / 4 fluturi cu urmtoarele ecuaii:


Ar' = ( Ar + Cr ) + ( Br + Dr )

Tipul 2 de factori nu sunt cu adevrat triviali dar se reduce teoretic

Cr' = ( Ar Cr ) + ( Bi Di )
Ai' = ( Ai + Ci ) + ( Bi + Di )

instruciuni suplimentare (overhead), cum ar fi actualizarea registrelor de


adres, cicluri DO diferii, si adresare circular.

Br' = ( Ar + Cr ) ( Br + Dr )
Dr' = ( Ar Cr ) ( Bi Di )

etaj. Aceast schimbare are ca rezultat un cod mai mare de program i

complexitatea fluturelui de ordin 2 la dou multiplicri i ase adunri sau


(6.26)

Bi' = ( Ai + Ci ) ( Bi + Di )
Ci' = ( Ai Ci ) ( Br Dr )
Di' = ( Ai Ci ) + ( Br Dr )

scderi reale. Totui, pentru procesoarele din familia DSP56300 care au o


singur unitate MAC tot ase instruciuni 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

Se observ c n ecuaia (6.26) trebuie efectuate 8 adunri i 8 scderi,


ceea ce nseamn c pentru un procesor din familia DSP56300 cu o singur

rotaie diferii, o instruciune care s aduc factorul de rotaie din memorie


trebuie inclus n programul fluturelui.

200

Aplicaii ale procesoarelor de semnal n comunicaii


6.7 TRANSFORMATA FOURIER INVERS

Capitolul 6 Transformata Fourier rapid i aplicaii


Fie z = a + jb o variabil complex. Expresia j z * nseamn:
j ( a + jb ) = j ( a jb ) = b + ja
*

Formula pentru transformata Fourier discret invers (TFDI) este:


1 N 1
x(n) = TFDI{ X (k )}(n) = X (k ) WN nk ,
N k =0

201

n = 0,1,..., N 1

(6.30)

Se observ c diferenele care apar ntre formula transformatei directe

(6.35)

adic o inversare ntre prile real i imaginar.


Revenind la relaia (6.32) programul care calculeaz transformata
Fourier invers va avea urmtoarea organigram:

i cea a transformatei inverse sunt: mprirea cu 1/ N i conjugarea factorilor

X (k )

de rotaie WN .
Pentru factorii de rotaie se poate utiliza un alt vector dect cel utilizat

Inversare
parte real
parte imaginar

la transformata direct, sau se poate folosi acelai vector, dar citirea valorilor
factorilor de rotaie ai transformatei inverse s se fac de la sfritul la
nceputul acestuia, avndu-se n vedere formula:
e

2
k
N

=e

FFT

j 2 k
N

(scalare cu 1/N)

(6.31)

Se poate calcula transformata Fourier discret invers folosind


transformata direct avnd n vedere urmtoarea relaie:
*
1
TFDI{ X (k )} = j ( TFD{ j X * (k )})
N

Inversare
parte real
parte imaginar

(6.32)

ntr-adevr:

x(n) = IFFT{ X (k )}

j nk
1 N 1
TFDI{ X (k )} = X (k )e N
N k =0

(6.33)

Figura 0.11. Algoritmul de calcul al IFFT folosind FFT.

2
j nk
*
N 1
j ( TFD{ j X * (k )}) = j j X * (k )e N =
k =0

N 1
k =0

2
nk
N

partea imaginar n memoria Y (la aceeai adres), inversarea prilor real i

2
N 1
N 1
j nk
j 2 nk
= j X * (k ) je N = j X (k ) je N =
k =0
k =0

= X (k ) j ( j ) e

Dac datele sunt organizate n memorie cu partea real n memoria X i

N 1

= X ( k )e

2
nk
N

k =0

de unde, nlocuind n (6.32) rezult relaia dorit.

(6.34)

imaginar nseamn transferul a doi vectori de lungime N din memoria X n Y


ntr-un macro de forma:

202

Aplicaii ale procesoarelor de semnal n comunicaii

Capitolul 6 Transformata Fourier rapid i aplicaii

; Programul de inversare a prilor real i imaginar

203

6.8.1 Algoritmi pentru o singur secven real

invreim macro puncte,date


invreim ident 1,0

Vom utiliza algoritmul n baz doi cu decimare n timp:

;
; puncte

numr de elemente din memorie

; date

adresa de nceput a cadrului de date

;
move

#date,r0

move

r0,r4

move

#-1,m0

move

m0,m4

N
2
k1 + k2 2
N
X (k1 + k2 ) = x(2n1 )W Nn1k1 + WN 2 x(2n1 + 1)W Nn1k1
2
n1 =0
n1 = 0
2
2

(6.38)

Pentru k2 = 0 :
X (k1 ) = X (k1 ) + WNk1 X (k1 )
;adresare liniar

(6.39)

unde prin X (k1 ) i X (k1 ) s-au notat transformatele de ordin N / 2 .


Pentru a pune n eviden simetria circular par a acestor transformate:

do #puncte,end_inv
move

x:(r0),a

y:(r4),b

move

b,x:(r0)+

a,y:(r4)+

X (k1 ) = X (

N
N
k1 ) , X (k1 ) = X ( k1 )
2
2

(6.40)

evalum i:

end_inv

X(

endm

N
N
N
k1 ) = X ( k1 ) WNk1 X ( k1 )
2
2
2

(6.41)

Exprimnd prile reale i imaginare se obin:


Re X (k1 ) = Re X (k1 ) + cos k1 Re X (k1 ) + sin k1 Im X (k1 )
Im X (k1 ) = Re X (k1 ) sin k1 Re X (k1 ) + cos k1 Im X (k1 )

6.8 TRANSFORMATA FOURIER PENTRU SECVENE REALE

N
(6.42)
k1 ) = Re X (k1 ) cos k1 Re X (k1 ) sin k1 Im X (k1 )
2
N
Im X ( k1 ) = Im X (k1 ) sin k1 Re X (k1 ) + cos k1 Im X (k1 )
2

Re X (

n cazul secvenelor reale exist proprietatea:


X (k ) = X * ( N k )

(6.36)

Re{ X (k )} = Re{ X ( N k )} , Im{ X (k )} = Im{ X ( N k )}

(6.37)

deci
unde

iar X (0) i X ( N / 2) au valori reale. n consecin este suficient s se


calculeze un numr de N valori reale.
Exist algoritmi specializai pentru date reale, care vor permite
reducerea complexitii aritmetice precum i a memoriei utilizate, cu preul
unei anumite complicri a programului.

2
N

(6.43)

Vom utiliza primele dou relaii pentru eantioanele de ordin


0,1,, N / 4 apoi ultimele dou relaii pentru exprimarea eantioanelor de
ordin N / 4 + 1,, N / 2 .

204

Aplicaii ale procesoarelor de semnal n comunicaii


Rezult schema din figura 0.11:

Capitolul 6 Transformata Fourier rapid i aplicaii

205

Se pot separa transformatele fiecrei secvene din rezultatul


algoritmului FFT pentru date complexe cu formulele:

x(2n)

x(2n+1)

0
ReX(k1)
TFD :
N/2 :
ImX(k1)
:

0
ReX(k1)
TFD :
N/2 :
ImX(k1)
:

ReX[k1]
ImX[k1]
-1

cos(k1)
sin(k1)

-1

sin(k1)
-cos(k1)

-1

2
=
N

-1

Figura 0.11. Descompunerea TFD pentru date reale

6.8.2 Algoritmi pentru dou secvene reale

Dac trebuie calculate simultan dou secvene de date reale x( n) i


y ( n) , se poate utiliza algoritmul pentru date complexe. TFD este o
transformat liniar astfel c, dac notm:
(6.44)

atunci:

= Re X (k ) + j Im X (k ) + j [ Re Y (k ) + j Im Y (k ) ]

(6.45)

sau
Z (k ) = Re Z (k ) + Im Z (k ) = [ Re X (k ) Im Y (k )] + j [ Im X (k ) + Re Y (k ) ] (6.46)
avnd n vedere formulele (6.37) rezult:
Z ( N k ) = [ Re X (k ) + Im Y (k ) ] j [ Im X (k ) Re Y (k ) ]

(6.48)

Y (k ) =

1
1
[ Im Z ( N k ) + Im Z (k )] + j [ Re Z ( N k ) Re Z (k )]
2
2

(6.49)

Se observ c deoarece secvenele sunt reale, TFD are simetrie circular


asemenea, pentru k = 0 i k = N / 2 avem:

ImX[N/2-k1]

Z (k ) = TFD{z (n)}(k ) = TFD{x(n) + jy (n)}(k ) = X (k ) + jY (k ) =

1
1
[ Re Z (k ) + Re Z ( N k )] + j [ Im Z (k ) Im Z ( N k )]
2
2

conjugat simetric, deci este suficient calculul TFD pentru k = 0, N / 2 . De

ReX[N/2-k1]

z ( n) = x ( n) + j y ( n)

X (k ) =

(6.47)

X (0) = Re Z (0)

X ( N / 2) = Re Z ( N / 2)

Y (0) = Im Z (0)

Y ( N / 2) = Im Z ( N / 2)

(6.50)

145

Capitolul 7 Procesorul de semnal StarCore 140

146

Aplicaii ale procesoarelor de semnal n comunicaii

fiecare ALU conine un shifter (structur de deplasare) pe 40 bii;


16 Registre pe 40 bii pentru operaii cu numere ntregi i fracionare;
16 Registre de adres pe 32 bii, dintre care 8 pot fi folosite ca adrese de

CAPITOLUL 7

baz;
4 Registre de offset pentru adrese i 4 Registre pentru adresare circular;
2 uniti de adresare cu operaii aritmetice cu numere ntregi;

PROCESORUL DE SEMNAL STARCORE 140

moduri de adresare specifice procesoarelor de semnal;


suport hardware pentru tipurile de date ntreg i fracionar;
set de instruciuni ortogonal cu instruciuni codate pe 16 bii;

7.1 INTRODUCERE

memoria poate fi accesat n cuvinte cu dimensiune variabil (1 pn la 4

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 configuraii SOC (System On Chip). Pe un
singur chip pot fi integrate, n funcie de necesitile clientului, zone de
memorie suplimentare, dar i o gam variat de porturi de I/O sau alte

octei);
ntr-un ciclu-main pot fi executate pn la 6 instruciuni;
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..

periferice.
Schema bloc a unei configuraii tipice SOC este prezentat mai jos:

SC140 implementeaz un nou model de execuie a instruciunilor numit


VLES (Variable-Length Execution Set) care permite folosirea mai multor
uniti de adresare i de calcul n paralel, n acelai ciclu-main.
Cteva caracteristici ale procesorului de semnal SC140 sunt:
frecvena de ceas a nucleului este 300 MHz la 1,5V i 120 MHz la 0,9V;
pn la 1200 Milioane operaii MAC pe secund (1,2 GMACS);
pn la 3000 RISC MIPS (MAC se consider ca 2 instruciuni RISC);
4 uniti logice-aritmetice (ALU Arithmetic Logic Unit) care includ
circuite dedicate de nmulire i adunare i uniti de operare pe bit;
circuitele MAC (Multiply and ACcumulate) din fiecare ALU, opereaz pe
40 bii (16b 16b + 40b);

147

Capitolul 7 Procesorul de semnal StarCore 140

148

Aplicaii ale procesoarelor de semnal n comunicaii


7.2 PREZENTAREA ARHITECTURII PROCESORULUI DE

DMA

32

32

64

XDBB

32

XDBA

128

XABB

2 Uniti de
generare a adreselor

Spaiul unificat de memorie pentru


date i program

CACHE
Ctrl. de ntreruperi

4 Uniti ALU

Figura 7.2 prezint schema bloc pentru nucleul procesorului de semnal


SC140, mpreun cu principalele blocuri componente.

XABA

DSP Engine
Set de instruciuni pe 16-bii
Variable Length Execution Set (VLES)

Interfaa cu
memoria extern

PAB

Nucleul DSP StarCore 140

SEMNAL SC140INTRODUCERE

Zona de extensie
de sistem

PDB

Zona de extindere a memoriei Nivel 1


Memorie unificat de date i program
ROM, RAM

64
128

Memorie extins
Nivel 2

Zona de Periferice i Acceleratoare


Periferice standard Input/Output
Acceleratoare specifice aplicatiilor
Accelerator programabil de uz general

Secveniator
de Program

Setul de registre pentru


Generarea Adreselor

Registre ALU
pentru date

OnCE
Controlul
Puterii

StarCore 140
2 AAU

BMU

4 ALU

Accelerator
pentru setul de
instruciuni

Generatorul
de ceas

24

PLL
Instruction Bus

Figura 7-1 Schema bloc a unei configuraii tipice SoC (System On Chip)
Pe lng cele 4 zone din schema bloc mai poate exista nc o zon de
memorie suplimentar, dar aceasta nu va funciona la frecvena 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 instruciunile folosite de SC140
sunt grupate astfel nct s se obin o performan maxim n realizarea
practic a programelor. Fiecare instruciune codific o operaie elementar.
Pentru a executa funcii specifice procesrii semnalelor, grupuri de
instruciuni poate fi executat n paralel, folosind un circuit dedicat din partea
de control a execuiei programului numit PSEQ (Program SEQuencer Unit).

128

Figura 7-2 Schema bloc pentru nucleul procesorului de semnal SC140


Se observ spaiul unificat de memorie, datele i programul fiind
coninute n aceeai memorie. Este o memorie multiport ceea ce nu
restricioneaz debitul necesar aplicaiilor 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 instruciuni elementare.
n interiorul nucleului mai exist suport hardware pentru powermanagement i debug (EOnCE - Enhanced On Chip Emulator).

Capitolul 7 Procesorul de semnal StarCore 140

149

150

Aplicaii ale procesoarelor de semnal n comunicaii


Cele dou magistrale de date dintre registrele DALU i memorie

7.2.1 Unitatea Aritmetic i Logic de Date (DALU)


DALU, (Data Arithmetic Logic Unit), reprezint unitatea funcional
care realizeaz operaiile logice i aritmetice n interiorul procesorului de

(XDBA i XDBB) sunt pe 64 de bii. Accesul la memorie, pe aceste


magistrale, pe 64 bii, se poate realiza simultan.
Instruciunile move pot varia ca lrgime de acces de la 8 la 64 de bii i

semnal SC140.
Componentele DALU sunt urmtoarele:

pot transfera de asemenea cuvinte multiple, dar care nu depesc 64 de bii

- un set de 16 Registre fiecare de 40 bii (D0 D15)

(de exemplu 4 cuvinte de 16 bii sau dou de 32 de bii). Deoarece se pot

- 4 uniti aritmetice i logice care opereaz n paralel, fiecare dintre

executa cte dou instruciuni move n fiecare ciclu main se poate atinge o

acestea coninnd o unitate MAC (Multiply and ACcumulate) i BFU (Bit-

rat maxim de transfer cu memoria de 4.8 Go/s (la 300 MHz, frecvena de

Field Unit)

lucru a nucleului).
Modelul de programare al DALU este prezentat mai jos.

- 8 registre shifter/limitatoare.

1
39
32 31
D0.e
L0
D1.e
L1
D2.e
L2
D3.e
L3
D4.e
L4
D5.e
L5
D6.e
L6
D7.e
L7
D8.e
L8
D9.e
L9
D10.e
L10
D11.e
L11
D12.e
L12
D13.e
L13
D14.e
L14
D15.e
L15

Schema de principiu a DALU este prezentat n figura de mai jos:

Figura 7-3 Schema de principiu a DALU

16 15
D0.h
D1.h
D2.h
D3.h
D4.h
D5.h
D6.h
D7.h
D8.h
D9.h
D10.h
D11.h
D12.h
D13.h
D14.h
D15.h

0
D0.l
D1.l
D2.l
D3.l
D4.l
D5.l
D6.l
D7.l
D8.l
D9.l
D10.l
D11.l
D12.l
D13.l
D14.l
D15.l

D0
D1
D2
D3
D4
D5
D6
D7
D8
D9
D10
D11
D12
D13
D14
D15

Figura 7-4 Modelul de programare DALU

Toate unitile MAC i BFU pot accesa oricare dintre cele 16 registre,
fiecare este partiionat n 3 pri: dou de 16 bii (prile high i low ale

Un registru poate fi surs pentru pn la 4 instruciuni simultane, dar nu

registrului) i una de 8 bii (partea de extensie). n funcie de instruciune,

se permit scrieri simultane n acelai registru. Rezultatul unei operaii

accesul la aceste registre se poate face pe 8, 16, 32 sau 40 bii.

aritmetice poate fi folosit ca surs pentru o alta fr nici o restricie temporal.

Capitolul 7 Procesorul de semnal StarCore 140

151

152

Aplicaii ale procesoarelor de semnal n comunicaii

Prin D0 ne referim la ntregul registru (toi cei 40 bii), n timp ce D0.e

Pentru transferurile din memorie n registre este folosit n mod

se refer la cei 8 bii de extensie, iar D0.h i D0.l se refer la cei 16 bii ai

automat extinderea pn la 40 bii a semnului valorii transferate. Aceast

prii superioare (cei mai semnificativi 16 bii) respectiv ai prii inferioare

extindere nseamn pur i simplu copierea valorii bitului de semn pn la

(cei mai puin semnificativi 16 bii). Fiecare registru are asociat cte un bit

atingerea dimensiunii de 40 bii pentru operand.

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 n = 0,15 ) sunt registre de uz general, fiecare dintre ei putnd fi folosit

ca: operand surs, operand destinaie sau acumulator.


Registrele DALU pot fi folosite ca zone tampon ntre cele dou
magistrale de acces la memoria XDBA i XDBB i la ALU, permind noilor
operanzi s fie ncrcai pentru urmtoarea instruciune n timp ce coninutul
lor este folosit de instruciunea curent.

Pentru o valoare fracionar pe 16 bii care este transferat din memorie


se realizeaz urmtoarele operaii:
cei 16 bii ai valorii sunt transferai 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 rndul su resetat.

Biii de limitare Ln sunt folosii pentru a se determina dac partea de

Pentru o valoare de tip ntreg, cei 16 bii sunt transferai n Dn.l iar

extensie a fiecrui registru este folosit sau nu. Practic acest bit este

Dn.h i Dn.e pot fi extinse cu semnul operandului sau cu zero dup cum

concatenat cu Dn.e formnd un operand pe 9 bii.


Pentru instruciunile de transfer ale datelor fracionare, transferul unui
registru Dn n memorie este protejat la depire (overflow) prin nlocuirea

specific instruciunea. Mai exist instruciuni speciale pentru scrierea sau


citirea prii extinse a registrelor, dar acestea sunt folosite doar n anumite
calcule cu precizie extins.

valorii pentru care s-a constatat depirea cu o valoare constant maxim sau

Unitatea MAC este partea aritmetic a ALU i conine un multiplicator,

minim, dup caz. Acest lucru se ntmpl pentru valoarea transferat pe

un sumator, precum i alte circuite aritmetice pentru realizarea rotunjirii,

magistralele XDBA sau XDBB, coninutul registrului surs rmnnd acelai.

comparrii, saturrii sau shiftrii. Operanzii surs ai unitii MAC pot fi

Limitarea are loc dup ce coninutul registrului a fost shiftat n

registre sau valori imediate din corpul instruciunii, iar numrul lor maxim

concordan cu modul de scalare folosit. Shiftarea i limitarea sunt realizate

este de 3. Operandul destinaie nu poate fi dect un registru de 40 bii din cele

numai pentru o subclas a instruciunilor move i anume pentru moves i de

descrise mai sus.

asemenea doar dac registrul conine o valoare fracionar cu semn. Dac pe

Multiplicatorul execut o nmulire a unor operanzi de 16 bii, care

magistralele de acces la memorie este transferat o valoare de tip ntreg, nu

reprezint numere n complement fa de 2, cu sau fr semn, ntregi sau

sunt realizate operaii de shiftare i limitare.

fracionare. Ieirea multiplicatorului (32 de bii) poate fi adunat la registrul


destinaie.

Capitolul 7 Procesorul de semnal StarCore 140

153

154

Aplicaii ale procesoarelor de semnal n comunicaii


Modulul de scalare se seteaz prin intermediul biilor S0 i S1 din

Sumatorul poate executa adunri sau scderi. Toate instruciunile


realizate de unitatea MAC se desfoar pe durata unui sigur ciclu-main.
Unitatea BFU este partea logic a ALU i conine un shifter
bidirecional de 40 de bii, o unitate de generare a mtilor i o unitate logic.

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 cnd este utilizat aritmetica cu saturaie.

Aici se pot realiza urmtoarele operaii:


shiftare aritmetic sau logic cu unul sau mai muli bii, la stnga

Capabilitile de limitare i cele de scalare sunt folosite numai pentru


instruciunile moves.

sau la dreapta
rotaie la stnga sau dreapta cu un singur bit

Operaia de limitare se desfoar n doi pai:

operaii logice (and, or, xor)

n primul pas este calculat bitul Ln atunci cnd registrul este scris de
ctre o operaie ce a avut loc n ALU

operaii de extindere a semnului sau cu zero

n al doilea pas are loc limitarea datelor de pe bus, dac bitul Ln este

operaie de numrare a celor mai semnificativi bii de 0 sau 1.

setat.

Registrele de shiftare/limitare ofer post-procesri speciale ale valorilor


care trebuie scrise n memorie. Din cele 8 astfel de registre 4 sunt folosite

Calculul valorii bitului Ln este realizat n ideea c va urma o

pentru bus-ul XDBA i 4 pentru XDBB, permind transferuri cu memoria a

instruciune de tip moves. Bitul Ln este determinat pe baza biilor din partea

pn la 4 cuvinte care au fost shiftate i limitate dup caz. Funciile oferite de

de extensie a registrului, acetia fiind biii care se afl la stnga virgulei

aceste circuite difer de aritmetica cu saturaie care poate fi folosit de ALU.


Unitatea DALU este o unitatea de execuie a SC140, are asociate o

(considerat implicit) din numr. Bitul Ln este setat dac aceti bii nu au toi
valoarea 0, sau 1. Constanta cu care este nlocuit pe bus valoarea care trebuie

serie de instruciuni specifice, numite instruciuni DALU, diferite de

limitat este fie cea mai pozitiv valoare posibil, fie cea mai negativ n

instruciunile altor uniti de execuie (de exemplu AGU). Se pot executa pn

funcie de bitul de semn.


SC140 poate lucra cu numere ntregi sau fracionare, ambele

la patru instruciuni ntr-un singur ciclu-main. Diferenierea ntre tipurile de

reprezentate n complement fa de 2. Diferena principal dintre cele dou

instruciuni ale fiecrei uniti de execuie este fcut la nivelul PSEQ.

tipuri de valori const n locul unde se afla implicit virgula care desparte
partea ntreag de cea zecimal. Pentru numere fracionare aceasta se afla

Funciile DALU

Registre de shiftare/limitare pot efectua urmtoarele operaii:

ntotdeauna la dreapta celui mai semnificativ bit a poriunii superioare a

scalare prin nmulire datele sunt shiftate cu un bit la stnga;

registrului (adic la dreapta bitului de semn). Pentru numere ntregi aceasta se

scalare prin mprire datele sunt shiftate cu un bit la dreapta;

afl ntotdeauna la dreapta celui mai puin semnificativ bit.

datele nu sunt scalate.

Capitolul 7 Procesorul de semnal StarCore 140

155

156

Aplicaii ale procesoarelor de semnal n comunicaii

Operand pe 16 bii

Multiplicarea i majoritatea operaiilor aritmetice sunt realizate cu

n memorie

aceleai circuite pentru valori fracionare i pentru valori ntregi.

Reprezentarea pe 40

Exist operaii care fac necesar existena circuitelor specializate:

de bii (D0 D15)

operaiile de multiplicare ntre ntregi fr semn, sau ntre un ntreg cu semn i


Reprezentarea numerelor fracionare cu semn

unul fr semn. Modul de comparare ntre valori cu semn i fr semn este

Operand pe 16 bii

diferit pentru numere pozitive i negative. Ne referim n special la comparaii

n memorie

de tipul mai mare pentru care exist instruciuni diferite pentru valori fr

Reprezentarea pe 40

semn i cele cu semn. Pentru nmulirea numerelor ntregi i fracionare exist

de bii (D0 D15)

mici deosebiri, chiar dac se realizeaz cu acelai circuit.


Reprezentarea numerelor ntregi cu semn

NMULIREA NUMERELOR CU SEMN N x N > 2N 1 BII

Figura 7-5 Reprezentarea numerelor fracionare i ntregi n registrele de date

INTREG

FRACIONAL

Tipurile de date cu care se poate lucra pe SC140 sunt deci:


numere fracionare cu semn
numere ntregi cu semn
numere ntregi far semn.

NMULIRE CU SEMN
S

MSP

LSP

REZULTAT 2N 1
EXTENSIE DE SEMN
2N BII

S
NMULIRE CU SEMN

MSP

LSP

REZULTAT 2N 1
COMPLETARE CU ZERO
2N BII

Figura 7-6 nmulire ntreag (stnga) i respectiv fracionar (dreapt)

Deosebirea dintre acestea este redat n tabelul urmtor (numere pe 16 bii):


Numere fracionare cu
semn
Reprezentare
Valoare
intern
0x7FFF
1-2-15

0x0001
2-15
0x0000
0
0xFFFF
-2-15

0x8000
-1

Numere ntregi cu
Numere ntregi fr
semn
semn
Reprezentare
Reprezentare
Valoare
Valoare
intern
intern
15
0x7FFF
2 1
0x7FFF
216 1

0x7FFE
216 2

0x0001
1

0x0000
0

0xFFFF
-1

0x0001
1
15
0x8000
-2
0x0000
0

DALU poate realiza rotunjirea valorii din registru, dac acest lucru este
cerut prin instruciune. Partea superioar a registrului este rotunjit n funcie
de partea inferioar iar apoi partea inferioar este resetat. Limita ntre cele
dou poriuni 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 numrul este rotunjit la prima valoare
mai mare, altfel este rotunjit la prima valoare mai mic. Problema care apare

Capitolul 7 Procesorul de semnal StarCore 140

157

este la ce valoare trebuie s se rotunjeasc dac partea inferioar are exact

158

Aplicaii ale procesoarelor de semnal n comunicaii

majoritatea instruciunilor, dac se folosete aritmetica cu saturaie nu se mai

valoarea 1/2. Dac este aleas una dintre cele dou opiuni disponibile

calculeaz bitul de limitare Ln, totui exist unele instruciuni pentru care nu

rezultatul final va avea, dup terminarea calculelor, un offset n direcia

se poate ignora acest bit. Dac se ntlnesc aceste instruciuni n decursul

aleas. Rotunjirea convergent rezolv aceast problem prin rotunjire n sus,

programului, modul de aritmetic cu saturaie este dezactivat pe durata

daca poriunea superioar este impar (LSB = 1) i poriunea inferioar este

execuiei lor. Dac rezultatul acestor instruciuni trebuie saturat, este necesar

1/2 i prin rotunjire n jos, dac poriunea superioar este par (LSB = 0) i

o instruciune special de saturare pentru registrul care conine acel rezultat.


De asemenea printre funciile oferite de DALU, dar de mai mic

poriunea inferioar este 1/2. n celelalte cazuri rotunjirea convergent se

importan n aplicaia curent, sunt suportul pentru calcule cu numr sporit

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

de bii (de exemplu nmuliri ntre numere pe 32 bii) i suportul pentru


mprire (prin folosire iterativ a instruciunii div).

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

7.2.2 Unitatea de generare a adreselor (AGU)

registrului este reprezentat de biii 39:16, iar partea inferioar de biii 15:0.
Pentru scalarea prin nmulire, partea superioar este reprezentat de biii
39:15 iar cea inferioar de biii 14:0. Pentru scalarea prin mprire partea
superioar este reprezentat de biii 39:17 iar cea inferioar de biii 16:0.
Aritmetica cu saturaie este modul de lucru prin care rezultatele
calculelor aritmetice ale ALU vor fi limitate la cei 32 de bii mai puin
semnificativi i este folosit pentru a oferi compatibilitate cu algoritmii care nu
recunosc, sau nu pot ine seama de biii de extensie. Aritmetica cu saturaie

AGU (Address Generation Unit) realizeaz calculul adreselor necesare


pentru funcionarea programelor, prin folosirea operaiilor aritmetice potrivite
pentru adresarea operanzilor n memorie. Conine registrele folosite pentru
generarea acestor adrese. Unitate funcional opereaz n paralel cu celelalte
resurse de pe chip pentru a minimiza timpul necesar generrii 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:

este similar cu operaia de limitare descris mai sus. Dac cei 8 bii de

8 registre inferiori de adrese (R0 R7)

extensie nu sunt toi 0 sau toi 1 valoarea corespunztoare celor 32 de bii mai

8 registre superiori de adrese (R8 R15) sau alternativ, dup tipul

puin semnificativi este setat fie la cea mai pozitiv valoare posibil, fie la

de adresare, registre pentru adresele de baz (B0 B7)

cea mai negativ valoare posibil. Acest lucru este determinat de bitul 39
(bitul de semn). Aritmetica prin saturaie se alege prin setarea bitului SM

2 registre de stiv (care indic spre adresa n care se afl primul

(Saturation Mode) din SR. La detectarea unei saturaii este setat bitul DOVF

element al stivei), dintre care doar unul este activ la un moment dat
(NSP Normal Stack Pointer i ESP Exception Stack Pointer)

(DALU Overflow) din registrul EMR (Exception and Mode Registrer).

4 registre de offset (N0 N3)

Funcionarea saturrii aritmetice nu este afectat de modul de scalare. Pentru

Capitolul 7 Procesorul de semnal StarCore 140

159

160

Aplicaii ale procesoarelor de semnal n comunicaii

4 registre modificatori (M0 M3)

pentru generarea adreselor n modul de adresare indirect cu registru. Registrul

registrul de control al adresrii (MCTL Modifier ConTroL

conine adresa la care se afl operandul n memorie i nu operandul propriu

Registrer)
2 uniti aritmetice (AAU Address Arithmetic Unit)
o unitate BMU (Bit-Mask Unit)

zis de unde numele de mod de adresare indirect. Cele patru registre de


offset (Ni, i = 0,3 ) pot fi folosite de oricare dintre registrele de adres.
Registrele modificatoare (Mj, j = 0,3 ) 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 operaii de setare, resetare,
schimbare a unor bii din operandul destinaie n funcie de o masc definit
n corpul instruciunii. Operandul surs este ncrcat n BMU pe unul din
magistralele de date XDBA sau XDBB, iar rezultatul este oferit tot pe unul
din aceste magistrale n ciclul-main urmtor. Tipic, n cazul operanzilor pe
16 bii toate instruciunile BMU sunt executate n doi cicli main. Aceti
operanzi pot fi o locaie de memorie sau una din partiiile unui registru (partea
high sau low).
ntr-un ciclu-main cele dou AAU (Address Arithmetic Unit) pot
genera o adres n zona de program a memoriei (n cazul instruciunilor 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 cuvnt (16 bii), pe cuvnt lung (32 bii) sau pe dublu
cuvnt lung (64 de bii). Tot ntr-un ciclu main 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
Figura 7-7 Schema bloc a AGU (Address Generation Unit)

urmtoarele operaii:
adunare sau scdere a dou registre AGU

Cele 16 registre de adres, la care ne vom referi cu Rn sau Bn unde


n = 0,15 sau n = 0,7 precum i registrele de stiv se folosesc n mod normal

adunarea unei valori imediate la un registru


incrementarea sau decrementarea unui registru AGU

161

Capitolul 7 Procesorul de semnal StarCore 140

162

adunare la PC (Program Counter)

Aplicaii ale procesoarelor de semnal n comunicaii


Registrele de stiv au asociate registrele cache care conin o versiune

decrementat a acestora. Instruciunea pop (de scoatere din stiv) necesit,

adunare cu propagare invers a bitului de carry (reverse-carry).


Pe lng circuitele necesare pentru realizarea acestor operaii n AAU

pentru execuie, un singur ciclu-main. Registrul cache este invalidat dac

mai exist un sumator pentru offset care poate realiza operaii de comparare

are loc o rescriere a registrului stiv corespunztor. Prima instruciune de tip

sau shiftare. Valoarea offsetului trebuie shiftat cu 1, 2 sau 3 bii n funcie de

pop executat dup modificarea coninutului registrului de stiv dureaz dou

numrul de octei pe care este reprezentat operandul pentru ca acesta s poat

cicluri-main, primul din acestea fiind folosit pentru decrementarea

fi accesat corect. De asemenea mai exist un sumator pentru aritmetica

registrului i actualizarea registrului cache. Toate celelalte instruciuni pop

modulo care este folosit n adresarea bufferelor circulare.

vor dura un ciclu-main pn la urmtoarea modificare a registrului stiv.


Registre modificatoare conin de obicei dimensiunea bufferului

Modelul de programare a AGU este descris mai jos:

circular, pentru modul de adresare modulo. Dac nu mai sunt disponibile alte
R0
R1
R2
R3
R4
R5
R6
R7
R8
R9
R10
R11
R12
R13
R14
R15

N0
N1
N2
N3

registre pot fi folosite ca registre de uz general i registre offset.

M0
M1
M2
M3

adresare liniar. Structura acestui registru este cea de mai jos:

Registrul de control MCTL, reprezentat pe 32 bii, este folosit pentru a


programa modul de calcul al adresei pentru fiecare dintre cele 8 registre
inferioare de adres. Registrele superioare nu pot funciona dect n modul de

NSP,OSP (nsp, osp)


ESP,OSP (esp, osp)

Biii AM (Addressing Mode) asociai cu fiecare registru inferior de


adres pot lua valorile din tabelul de mai jos, cu semnificaiile aferente
acestora. Toate celelalte combinaii sunt rezervate.

Figura 7-8 Modelul de programare AGU

Capitolul 7 Procesorul de semnal StarCore 140


AM3
0
0
1
1
1
1

AM2
0
0
0
0
0
0

163

AM1 AM0 Mod de adresare


0
0
Adresare liniar
0
1
Adresarea reverse-carry
0
0
Adresare n buffer circular se folosete m0
0
1
Adresare n buffer circular se folosete m1
1
0
Adresare n buffer circular se folosete m2
1
1
Adresare n buffer circular se folosete m3
Adresare modulo cu ntoarcere multipl se
0
0
folosete m0
Adresare modulo cu ntoarcere multipl se
0
1
folosete m1
Adresare modulo cu ntoarcere multipl se
1
0
folosete m2
Adresare modulo cu ntoarcere multipl se
1
1
folosete m3

Modurile de adresare ale AGU

SC140 ofer 4 moduri de adresare a memoriei. Modurile de adresare se


refer la determinarea locaiei la care operandul poate fi gsit n memorie i la
modul n care este fcut 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 msur a performanei acestuia, pe lng numrul de operaii pe

164

Aplicaii ale procesoarelor de semnal n comunicaii


Un exemplu este:
mac

d4,d5,d6

care nseamn c operanzii se gsesc n registrele d4, d5 i d6 ai DALU i se


realizeaz operaia d6 = d6 + (d4 d5).
2) Modul de adresare direct cu registru de adres.

Operandul se gsete ntr-unul din cele 27 de registre AGU. Un


exemplu este:
addl1a

r0,r1

Operanzii se gsesc n registrele AGU r0 i r1 i se realizeaz operaia


r1 = r1 + (2 r0).
B. Modul de adresare indirect cu registru

Un registru de adres este folosit pentru a indica o locaie de memorie,


locaie care conine operandul cutat. Registrul de adres conine adresa
efectiv n memorie la care se afl operandul. Acest mod de adresare se mai
numete i referin la memorie. Termenul index se refer la offsetul care este
reinut ntr-un registru, iar termenul deplasament se refer la offsetul imediat
din corpul unei instruciuni.

secund, memoria intern, tipul de arhitectur, .a.m.d.


1) Modul de adresare fr actualizare.
A. Mod de adresare direct cu registru

Acest mod de adresare implic faptul c operandul se gsete n unul


sau mai multe registre DALU, AGU, sau de control i se mai numete
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 ntrunul din registrele de control pentru anumite instruciuni speciale.

Adresa operandului se afl ntr-un registru de adres al AGU. Coninutul


acestui registru rmne acelai dup efectuarea instruciunii. 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)

165

Capitolul 7 Procesorul de semnal StarCore 140

Un cuvnt este citit de la adresa coninut n r4 (operandul cutat), iar

166

Aplicaii ale procesoarelor de semnal n comunicaii

4) Modul de adresare cu post-incrementare cu offset.

asupra lui este efectuat o operaie de resetare a biilor setai n masca

Dup ce adresa operandului este folosit, la acesta este adunat

specificat de instruciune dup care este scris din nou n locaia din care a

coninutul registrului de offset ni (care poate fi pozitiv sau negativ) pre-shiftat

fost citit. La sfritul acestor operaii r4 nu-i schimb valoarea.

corespunztor la stnga cu dimensiunea operandului la care se face acces

2) Modul de adresare cu post-incrementare.

Modul de calcul pentru registrele inferioare de adres este determinat de

(adic cu 0,1, 2 sau 3 octei). Rezultatul este memorat n acelai registru.


Dup

ce

adresa

operandului

este

folosit

este

incrementat

coninutul lui MCTL. Coninutul registrului ni rmne neschimbat.

corespunztor cu tipul accesului la memorie (adic cu 1, 2, 4 sau 8) i

Un exemplu este:

actualizat n acelai registru de adres. Tipul accesului depinde de

move.b

d6,(r5)+n2

dimensiunea operandului care este transferat din memorie de instruciunea n

n care la r5 este adunat coninutul lui n2 fr ca acesta s fie shiftat deoarece

care este specificat acest mod de adresare (1, 2, 4 sau 8 octei). Tipul de

n acest caz dimensiunea operandului este de 1 octet.

calcule dup care se actualizeaz adresa din registrele inferioare este


5) Modul de adresare indexat.

specificat de coninutul MCTL.

Adresa operandului rezult din suma dintre registrul de adres i

Un exemplu este:
move.f

numrul cu semn din registrul offset n0, preshiftat cu 0, 1, 2 sau 3 bii la

(r3)+,d2

n care cuvntul aflat la adresa din r3 este transferat n registrul d2, dup care

stnga n funcie de dimensiunea operandului care este accesat. Modul de

la valoarea curent a lui r3 se adaug 2.

calcul pentru registrele inferioare de adres este determinat de coninutul lui

3) Modul de adresare cu post-decrementare.

instruciunii.

MCTL. Coninutul celor doi registre rmne neschimbat dup efectuarea


Este similar cu modul precedent de adresare, singura diferen fiind

Un exemplu este:

faptul c adresa operandului este decrementat corespunztor tipului

move.b

operandului la care se face acces.

Acest mod de adresare nu poate fi folosit dect cu registrul offset n0.

d6,(r3+n0)

Un exemplu este
move.l

6) Modul de adresare indexat cu un registru adres.

(r3)-,d2

n care dup transferul unui cuvnt dublu n registrul d2, din valoarea curent
a adresei coninute n r3 se scade 4.

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

Capitolul 7 Procesorul de semnal StarCore 140

167

168

(r0+r2),d6

Aplicaii ale procesoarelor de semnal n comunicaii

n care adresa din r0 este adunat la coninutul registrului r2 shiftat cu 2 bii la

Un exemplu este:

stnga. n acest mod de adresare nu se pot utiliza ca index dect registrele

move.l

#$FFFF,(sp-$3E)

inferioare de adres.
10) Mod de adresare cu deplasament lung pentru SP.
7) Mod de adresare cu deplasament scurt.

Adresa operandului este suma dintre registrul de adres i un

Similar cu cele prezentate la punctul 8), dar valabil doar pentru


registrul de stiv.

deplasament scurt imediat, care ocup 3 bii n corpul instruciunii. Acest


deplasament (numr fr semn) trebuie shiftat la stnga corespunztor cu

C. Mod de adresare relativ la PC

dimensiunea operandului pentru care se realizeaz accesul la memorie.

Este folosit pentru calculul urmtoarei adrese n zona de memorie

Deplasamentul poate lua valori n intervalul [0, 7]. Coninutul registrului de

folosit de program n cazul unei instruciuni de salt. Prin codarea

adres nu este schimbat. Calculul pentru registrele inferioare se realizeaz n

instruciunii aceasta conine deplasament cu semn. Adresa operandului este

funcie de modul de adresare setat n MCTL.

move.l

obinut prin shiftarea la stnga a deplasamentului i adunarea rezultatului la


valoarea curent a PC. Deplasamentul este shiftat deoarece adresele

Un exemplu este:
d4,(r3+$1C)

n care deplasamentul este 7 i deoarece se acceseaz un operand pe 4

instruciunilor n zon de memorie a programului sunt aliniate pe cuvinte.


Modul de calcul este ntotdeauna liniar. Numrul de bii ocupat de

octei acesta trebuie shiftat la stnga cu 2 bii rezultnd 47 = 28 = 1Ch.

deplasament difer n funcie de instruciunea folosit. Instruciunile de salt se

8) Mod de adresare cu deplasament lung.

necondiionate nu folosesc acest mod de adresare ci unul din cele prezentate

refer la salturi condiionate sau la accesul subrutinelor. Salturile


Este similar cu modul de adresare precedent, dar n acest caz

mai jos.

deplasamentul este un numr cu semn pe 16 bii pentru care este necesar nc


un cuvnt la codarea instruciunii. Deplasamentul ia valori n intervalul [16384, 16383] pentru operanzi reprezentai pe un octet, n intervalul [-8192,

D. Mod de adresare special

Aceste moduri de adresare nu folosesc un registru de adres cnd

8191] pentru operanzi reprezentai pe un cuvnt, .a.m.d.

specific o adres efectiv. n locul acestui registru se folosete o valoare

9) Mod de adresare cu deplasament scurt pentru SP.

care este implicit folosit de instruciune.

imediat care este inclus n codul instruciunii, sau se folosete un registru


Similar cu cele precedente, doar c se refer la registrul de stiv i
deplasamentul poate fi un numr fr semn reprezentat pe 5 sau 6 bii, n
funcie de tipul de acces la memorie (operand pe 2 sau 4 octei).

Capitolul 7 Procesorul de semnal StarCore 140

169

1) Valoare imediat scurt.

170

6) Adres absolut pentru salt necondiionat.

Un operand reprezentat pe 5, 6 sau 7 bii face parte din cuvntul de cod


al instruciunii. Un operand pe 5 bii este folosit pentru instruciunile

Ca i pentru modul de adresare precedent este nevoie de o extensie de


dou cuvinte pentru codarea instruciunii.

aritmetice ale DALU sau AGU. Un operand pe 6 bii este folosit de

Un exemplu este:

instruciunile DALU care transfer un operand imediat ntr-un registru LCn.

jmp

lbl4

n care la codarea instruciunii se folosete adresa din program

Un operand pe 7 bii este folosit pentru transfer imediat ntr-un registru.

corespunztoare etichetei lbl4.

Un exemplu este
doen2

Aplicaii ale procesoarelor de semnal n comunicaii

#$2

7) Referin implicit.

Unele instruciuni se refer implicit la unul din urmtoarele registre:

2) Cuvnt imediat.

Acest mod necesit un cuvnt n plus n codarea instruciunii n rest

PC, SR, Registre de stiv sau Registre asociai buclelor de program. Folosirea
unuia dintre acetia este indicat prin instruciunea folosit.

este similar cu precedentul.

Un exemplu este:
3) Valoare imediat lung.

tfra

Acest mod necesit dou cuvinte n plus n codarea instruciunii n rest

osp,r2

care transfer valoarea din registrul de stiv care nu este folosit n registrul de

este similar cu punctul 1).

adres r2.

4) Adres absolut.

E. Moduri de adresare specifice procesoarelor de semnal

Acest mod de adresare necesit un cuvnt n plus pentru codarea

Adresarea reverse-carry

Adresarea reverse-carry reprezint un mod de calcul al adresei folositor

instruciunii. Adresa ocup 16 bii i este extins cu 0 pentru a forma o adres

pentru implementarea n procesorul de semnal a funciilor care realizeaz FFT

normal de 32 de bii.

sau IFFT.

Un exemplu este:
move.w

Modificarea adresei se face hardware prin propagarea, n sumator, n

($1),d0

sens invers a bitului de carry (de la MSB ctre LSB). Actualizarea


5) Adres absolut lung.

adresei prin reverse-carry este echivalent cu:

Similar cu 4) dar este nevoie de dou cuvinte pentru a coda adresa n

inversarea coninutului lui rn (inversare pe bii, adic MSB devine

corpul instruciunii.

Capitolul 7 Procesorul de semnal StarCore 140

LSB, MSB-1 devine LSB+1 .a.m.d)

171

shiftarea lui ni cu 0, 1, 2 sau 3 bii la stnga corespunztor


dimensiunii operandului accesat

172

Aplicaii ale procesoarelor de semnal n comunicaii

se mai numete i adresare modulo, numrul care specific valoarea fa de


care se fac operaiile de adunare modulo este mj (Figura de mai jos).

inversarea lui ni (similar cu rn)


adunarea celor doi operanzi
inversarea rezultatului.
Acest mod de adresare poate fi folosit la ordonarea bit-reverse a
eantioanelor de intrare sau de ieire n FFT (n funcie de algoritmul
implementat, cu decimare n timp sau n frecven), sau la adresarea factorilor
de rotaie. 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


ntrziere. Trebuie configurate mai multe registre, nu este suficient doar
scrierea biilor corespunztori 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 urmtorii pai:
registrul pentru adresa de baz trebuie ncrcat cu adresa de baz
(cea mai mic) a bufferului

7.2.3 Unitatea de control a programului

Deoarece SC140 este o structur cu mai multe ALU, se pot trimite pn


la 6 instruciuni la 6 uniti de execuie n acelai timp. Cnd dou sau mai
multe instruciuni sunt trimise simultan spre execuie n acelai ciclu-main
se spune c ele sunt grupate. Compilatorul C sau asamblorul pot specifica n
codul surs care instruciuni sunt grupate. Fiecare grup de instruciuni trimis
spre execuie ntr-un ciclu-main se numete set de execuie. Fiecare 8
cuvinte citite din zona de memorie de program i asociate cu o adres sunt
numite set de fetch.

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

Structura pipe-line

Pentru SC140 structura pipe-line const n 5 etaje:


pre-fetch

n rn se ncarc o adres din interiorul bufferului

fetch

Adresele posibile pentru rn vor fi n intervalul [bn, bn+mj-1]. Dac

decodare

valoarea rn crete peste valoarea bn+mj-1 din aceasta va fi sczut astfel nct
valoarea adresei s revin n interiorul limitelor specificate. Din acest motiv

generarea adreselor
execuie

173

Capitolul 7 Procesorul de semnal StarCore 140

Primele 3 etaje sunt implementate sub forma unui circuit numit PSEQ
(Program Sequencer unit). Ultimele dou etaje sunt implementate n AGU i

174

Aplicaii ale procesoarelor de semnal n comunicaii

accesului propriu zis la memorie. Aici se calculeaz i adresele necesare


pentru instruciunile de salt folosite mai departe de PSEQ.

DALU.

n etapa execuiei se realizeaz calculele cerute n DALU. Dac este

Primele 2 etaje sunt responsabile cu citirile din memoria de program a

executat o instruciune de salt, SC140 trebuie s atepte reumplerea structurii

setului de fetch. n etapa de pre-fetch adresa acestui set este pus pe bus-ul

pipe-line, ncepnd cu un nou pre-fetch din memorie. Ciclii main pierdui n

PAB, i n timp ce este citit setul de fetch, counter-ul de fetch din PSEQ este

timpul acestei ateptri se numesc slot-uri de ntrziere. Deoarece este

actualizat pentru urmtoarea citire din memorie. Aceste operaii se execut n

posibil utilizarea acestora pentru a permite continuarea execuiei

paralel.

instruciunilor care se gsesc deja n structura pipe-line au fost prevzute

Adresa de citire poate fi generat de ctre PSEQ pentru:

instruciuni speciale de salt ntrziat. Acestea folosesc o parte sau toate

execuia normal a programului

sloturile de ntrziere pentru execuia unui set adiional de execuie.


Pe lng structura pipe-line mai exist i alte instruciuni de control al

execuia unei excepii

programului:

bucl hardware
instruciuni de salt.

execuia condiionat a unui set de execuie

Etapa de fetch este dedicat ateptrii realizrii accesului la memorie.

instruciuni pentru forarea intrrii chipului n starea de excepie


instruciuni pentru forarea intrrii chipului n starea de debug.

Acesta este complet cnd PSEQ eantioneaz valoarea citit din memorie pe
cei 128 de bii ai PDB (8 cuvinte adic un set de fetch). Un set de execuie se

Execuia condiionat este controlat de starea bitului T din cadrul SR.

poate ntinde pe mai multe seturi de fetch, mai multe astfel de seturi sunt

Folosirea acestor instruciuni permite execuia condiional a unui ntreg set

reinute ntr-un buffer, deoarece tot setul de execuie trebuie decodat odat.
Dup citirea setului de fetch, PSEQ detecteaz care instruciuni sunt
grupate mpreun i vor fi decodate n paralel astfel nct numrul de cicli

de execuie sau execuia condiional a unor subseturi ale acestuia. Anumite


restricii se aplic acestor subseturi n ceea ce privete numrul i lungimea
instruciunilor componente.

main cerut de cea mai lung instruciune va determina numrul de cicli


main necesar pentru execuia ntregului set. Decodarea const n

Execuia buclelor hardware

Una din cele mai importante caracteristici ale unui algoritm de

determinarea tipului de instruciuni (dac sunt instruciuni DALU sau AGU)

procesare de semnal este execuia eficient a buclelor de program. SC140 are

i trimiterea acestora ctre unitile de execuie corespunztoare.


Etapa generrii de adrese este implementat n AGU i DALU. n

un mecanism optimizat de buclare care permite pn la 4 nivele de imbricare

DALU aceast etap include decodarea instruciunilor specifice. n AGU

a buclelor. Acest mecanism este o parte a PSEQ, i modelul de programare

aceast etap include actualizarea registrelor de adres precum i realizarea

este urmtorul:

175

Capitolul 7 Procesorul de semnal StarCore 140


SA0
SA1
SA2
SA3

LC0
LC1
LC2
LC3

176

Aplicaii ale procesoarelor de semnal n comunicaii


ultima adres este adresa ultimului set de execuie din corpul
funciei. Aceasta este definit de instruciunea loopendn. n cazul
unei bucle scurte cu o singur instruciune aceasta coincide cu adresa
de start

Fiecare pereche de registre este asociat unei bucle, regitrul SAn (Start

LPMARKA i LPMARKB sunt doi bii marker n cuvntul prefix care

Address) conine adresa de start a buclei, dat de o etichet, iar LCn (Loop

identific diferitele condiii de buclare. Aceti bii sunt completai de

Counter) conine numrul de repetri ale buclei.

assembler i nu sunt accesibili user-ului.

n SR exist 5 fanioane asociate cu execuia buclelor dup cum


urmeaz:

Pentru iniializarea i execuia unei bucle hardware sunt necesari


urmtorii pai:

SLF (Short Loop Flag) este un bit setat cnd bucla este inializat ca
o bucl scurt i resetat la terminarea acesteia

executarea unei instruciuni dosetupn n decursul programului


naintea primului set de execuie din cadrul buclei

LF0, LF1, LF2, LF3 sunt bii care sunt setai de fiecare dat cnd

executarea unei instructiuni doenn sau doenshn pentru ncrcarea

bucla corespunztoare este inializat i resetai la terminarea buclei

counterului corespunztor cu valoarea care arat de cte ori este

corespunztoare.

repetat bucla. Flag-ul corespunztor din SR precum i SLF (dup


caz) sunt setate n acest moment.

Pentru buclele care se pot realiza n SC140 exist urmtoarea


terminologie:
corpul buclei reprezint seturile de execuie care sunt parcurse n
timpul execuiei buclei
bucl lung este o bucl al crei corp const n trei sau mai multe
seturi de execuie
bucl scurt este o bulc al crei corp const din unul sau dou
seturi de execuie
adresa de start este adresa primului set de execuie din corpul buclei.

n cazul unei bucle scurte, instruciunile sunt reinute n bufferele


interne i astfel nu este nevoie de fetch pentru buclele scurte. Buclele se pot
realiza una n alta cu singura restricie c ntr-o bucl nu pot fi executate dect
buclele cu numere mai mari dect a celei curente. n bucla 2 nu poate fi
executat dect bucla 3. O singura bucl poate fi activ la un moment dat i
aceasta este cea cu numrul mai mare dintre toate cele pentru care flag-ul
aferent acesteia este setat.
Exist de asemenea instruciuni de ntrerupere care provoac ncheierea
prematur a unei bucle, sau de salt la sfritul unei iteraii a buclei.

Adresa de start este definit de o instruciune de tipul dosetupn care

Adresa de start trebuie s fie aliniat n zona de memorie a

indic o etichet, i de directiva de asamblare loopstartn. Aceste

programului, n caz contrar un ciclu de ntrziere va fi adugat la execuia

dou definiii trebuie s fie consistente.

buclei pentru fiecare parcurgere a acesteia. Pentru alinierea adresei de start se


poate folosi directiva falign.

177

Capitolul 7 Procesorul de semnal StarCore 140


7.3 PREZENTAREA

MEDIULUI

DE

DEZVOLTARE

178

Aplicaii ale procesoarelor de semnal n comunicaii

La deschiderea unui anumit proiect, mediul de dezvoltare CodeWarrior

PROGRAMULUI. CODEWARRIOR

prezint o fereastr principal unde putem vedea numele proiectului, precum


Pentru realizarea programului care simuleaz modul de funcionare i
implementarea pe procesorul de semnal StarCore SC140 se poate utiliza

i fiierele incluse n acesta, dup cum se poate observa n jumtatea stng


din figura de mai sus.

mediul de dezvoltare al firmei Metrowerks, numit CodeWarior. Acest mediu

Jumtatea din dreapta figurii 7.10 prezint dou ferestre n care pe de o

de dezvoltare integreaz toate programele necesare pentru elaborarea

parte putem vedea codul scris n fiecare din fiierele surs (partea de sus a
figurii), iar pe de alt parte putem fi informai cu privire la diversele erori,

aplicaiei: 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 obinerea codului n asamblare. n figura de mai jos

warning-uri sau remarci din partea mediului de dezvoltare dup lansarea


procedurii de compilare a proiectului (partea de jos a figurii).
Pe lng aceste ferestre amintite mai sus mediul de dezvoltare

este prezentat interfaa programului cnd avem deschis un anumit proiect.

Codewarrior prezint i alte ferestre cum ar fi cea aferent procedurii de


depanare a proiectului sau fereastra de afiare a diferitelor rezultate, aa cum
se prezint n figurile de mai jos.

Figura 7-10 Fereasta pentru depanare proiect

Figura 7-9 Interfaa mediului de dezvoltare CodeWarrior

Capitolul 7 Procesorul de semnal StarCore 140

179

180

Aplicaii ale procesoarelor de semnal n comunicaii


Level 2, un nivel de optimizare similar celui anterior, care ns
presupune prezena i celorlate tipuri de optimizri (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

Figura 7-11 Fereastra pentru afiarea de rezultate

Mediul de dezvoltare de aplicaii pentru procesoarele de semnal SC140,


CodeWarrior, prezint mai multe faciliti. Cea mai important dintre ele este

registrelor;
Level 3 + Space, reprezint un nivel de optimizare similar celui
anterior, cu deosebirea c se mai adaug i optimizarea privind
spaiul ocupat de program n momoria procesorului de semnal.

aceea potrivit creia exist posibilitatea de a scrie cod de program nu numai n


instruciunile de asamblare specifice procesorului utilizat ci i n format C.
Graie compilatorului programele scrise n limbajul C sunt convertite n
instruciuni de asamblare care pot rula pe procesor.
O scriere a codului fiierelor surs n limbaj C presupune o munc mai
puin 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 facilitile de optimizare oferite de mediul de dezvoltare sau de
tehnici speciale de optimizare n C.
Figura 7.12 prezint fereastra aferent setrilor simulatorului
CodeWarrior, mai exact seciunea nivelelor de optimizare disponibile.
Compilatorul ofer mai multe nivele de optimizarea i anume:
Level 0, cel mai simplu nivel de optimizare,cnd prectic nu este
activat nici un element pentru optimizare;
Level 1, un nivel de otimizare mai ridicat, care nu prezint ns i
optimizri de tip schedulling, pipelining i bundling;

Figura 7-12 Nivelele de optimizare oferite de mediul CodeWarrior

Mediul de dezvoltare Code Warrior presupune prezena mai multor


nivele de optimizare, ncepnd de la cel mai simplu care nu face nici o

Capitolul 7 Procesorul de semnal StarCore 140

181

182

Aplicaii ale procesoarelor de semnal n comunicaii

optimizare, pn la cele cu opiuni mai complexe n care se ine cont att de

Posibilitatea de a vizualiza starea acestor registre este bine venit n

cerinele vitez ct i de cele de spaiu ocupat de program. Se ofer o opiune

procedurile pentru depanarea proiectelor n lucru, i ajut programatorul n

de optimizare global, pentru proiectele extinse care conin mai multe fiiere

identificarea mai rapid a diverselor erori de proiectare.

surs, prin aceasta realizndu-se o optimizare a ntregii aplicaii i nu o serie


de optimizri ale fiierelor componente. Dac alegerea nivelului de optimizare

7.4 TEHNICI DE OPTIMIZARE N C PENTRU PROCESORUL

este una dintre importantele faciliti ale programului CodeWarrior,

DE SEMNAL SC140

posibilitatea de vizualizare a strii registrelor i a memoriei reprezint o alt


important facilitate oferit celor care dezvolt aplicaii.
n figura 7.13 este prezentat starea registrelor de uz general aferente
procesorului de semnal SC140.

Una dintre cele mai mari provocri n procesul de dezvoltare a unei


aplicaii pentru procesoarele de semnal o constituie ncadrarea timpului de
execuie a programului ntr-un interval bine stabilit. La aceast cerin se
adaug i aceia ca memoria de program ocupat de aplicaie s se ncadreze la
rndul ei n limitele oferite de procesorul de semnal.
Cele dou aspecte menionate mai sus reprezint o motivaie important
n vederea lurii n considerare a necesitii de gsire de metode de optimizare
a programelor sub ambele aspecte, att din punct de vedere al timpilor de
execuie dar i a memoriei de program ocupate de aplicaie.
Implementarea unor proceduri de optimizare de cod presupune pe lng
cele dou aspecte prezentate i obinerea altor rezultate importante n ceea ce
privete utilizarea eficient a procesorului, cum ar fi:
reducerea structurilor de date utilizate n aplicaia dezvoltat pe
procesorul de semnal
reducerea mrimii 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.

Figura 7-13 Vizualizarea strii registrelor procesorului de semnal

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

184

Aplicaii ale procesoarelor de semnal n comunicaii

fracionale). Utilizarea acestor funii intrinseci asigur emularea programelor


i pe alte platforme.

C nu posed o suprapunere perfect cu trsturile unui procesor de semnal.


Astfel spre deosebire de caracteristicile procesorului de semnal
StarCore SC140, n limbajul C nu avem prezente urmtoarele elemente:
lucrul n virgul fix;

Utilizarea Pragmelor.

Prin pragma se nelege un mod standard de comunicare cu un


compilator. Aceasta descrie nu numai caracteristicile codului scris n limbaj C

nu este prezent suportul pentru arhitecturi duale de memorie;

dar i a datelor utilizate. Utilizarea pragmelor nu afecteaz cu nimic valoarea

nu sunt prezente porturi speciale de intrare/ieire, i nici instruciuni

rezultatelor, dar influeneaz ntr-o msur deosebit de important

specializate;

performanele programului, prin eficientizarea lui.

nu este prezent suportul pentru instruciuni de tipul SIMD (Single


Instruction Multiple Data).

Asamblarea in linie.

Poate fi fcut ca limbajul C s fie eficient pentru un procesor de

Presupune tehnica prin care n interiorul codului scris n limbaj C se pot

semnal? Rspunsul la aceast ntrebare este afirmativ, ns n condiiile n

introduce directive de asamblare, instruciuni de asamblare. Acest lucru se

care programatorul, cel care dezvolt aplicaii pentru procesoarele de semnal,

poate realiza fie sub forma unei singure instruciuni n limbaj de asamblare,

nelege i stpnete urmtoarele aspecte:

fie sub forma unei ntregi funcii. Utilizarea directivelor de asamblare

extensiile compilatorului

presupune faptul c avem un acces special la unele caracteristici ale

tehnicile de programare

procesorului, imposibil de utilizat n cazul folosirii funciilor intrinseci.

comportamentul compilatorului.
Elementele de optimizare prezentate mai sus se caracterizeaz prin
n cele ce urmeaz vom prezenta acele elemente de optimizare comune
unei clase suficient de largi de procesoarelor de semnal.

faptul c presupun introducerea unor linii de program de alt natur dect a


celor deja existente n cadrul codului surs.
n cele ce urmeaz vom prezenta acele tehnici de optimizare care se

Funciile Intrinseci.

Sunt funcii specifice prin care se realizeaz o extindere a operatorilor


din C. Aceast categorie de funcii presupune definirea unor mulimi de noi
tipuri de date (de exemplu precizie simpl, dubl i extins pentru numere

folosesc de codul existent, fr a introducere elemente suplimentare de alt


natur dect a celor deja existente.
Astfel avem urmtoarele tehnici de optimizare n C specifice
procesoarelor de semnal de uz general:
loop merging;
loop unrolling;

Capitolul 7 Procesorul de semnal StarCore 140

185

186

Aplicaii ale procesoarelor de semnal n comunicaii

transferuri sau a patru instruciuni de calcul n paralel pe durata unui singur


ciclu instruciune.

Loop Merging.

Aceast tehnic presupune combinarea a dou bucle ntr-una singur n


cazul n care cele dou bucle sunt caracterizate de acelai numr de iteraii.
Utilizarea acestei tehnici poate conduce la diminuarea timpului necesar
executrii celor dou bucle. Mai mult dect att presupune o cretere a
eficienei n ceea ce privete utilizarea cache-ului. Ca rezultat final, folosirea
tehnici de optimizare loop merging reduce mrimea codului aferent
programului scris n limbajul C. Figura 5.1 prezint un exemplu de tehnic de
optimizare loop merging.
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 obine un timp de execuie mai mic dect 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
urmtoarele tehnici de optimizare:

Figura 7-14 Exemplu de tehnic de optimizare loop merging

split computation;
multisample.

Loop Unrolling.

Este o tehnic de optimizare n C care presupune repetarea corpului


unei bucle n vederea asigurrii premizelor necesare unei rulri n paralel a
mai multor instruciuni, n cadrul unui aceluiai ciclu instruciune. Este tiut
faptul c n cazul procesoarelor de semnal sunt prezente blocuri specifice care

SplitComputation reprezint o tehnic de optimizare n C utilizat n


aplicaii care mplic calculul energiei i erorii ptrate medii, sau n situaii n
care se dorete determinarea unui maxim.

pot lucra n paralel, fiind astfel posibil realizarea, de exemplu, a dou

Capitolul 7 Procesorul de semnal StarCore 140

187

188

Aplicaii ale procesoarelor de semnal n comunicaii

Figura 7-16 Exemplu de tehnic de optimizare split computation

Folosirea acestei tehnici de optimizare conduce la creterea eficienei,


n ceea ce privete utilizarea unitii 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

Figura 7-17 Exemplu de tehnic de optimizare multisample

mbuntire semnificativ n ceea ce privete timpul de execuie.


Multisample reprezint ultima tehnic de optimizare n C din cele
prezentate n acest paragraf. Domeniul de aplicabilitate al acestei tehnici de

n urma aplicrii acestei tehnici att bucla cu numrul 1, ct i bucla cu

optimizare este reprezentat de situaiile n care o bucl opereaz n interiorul

numrul 2 se vor executa ntr-un singur ciclu instruciune, fiind posibil

alteia. Aceast tehnic de optimizare n limbajul C este una destul de

execuia simultan a 4 operaii de tip nmulire cu acumulare, mac i a dou

complex, deoarece presupune o combinaie ntre tehnicile de optimizare deja

operaii de tip transfer, mov.

prezentate mai sus:

Aceast tehnic de optimizare mai este caracterizat i de alte

loop unroling pentru bucla exterioar;

trsturi. Este vorba n primul rnd de faptul c utilizarea acestei metode nu

loop merging pentru bucla din interior;

impune restricii privind alinierea datelor. A doua caracteristic, evideniaz

loop unroling pentru bucla din interior la care s-a aplicat tehnica

faptul c tehnica multisample, reduce numrul operaiilor de transfer utilizate.

anterioar.

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 obinerii de performane maxime
n ceea ce privete dimensiunea codului din memoria de program i mai ales
n ceea ce privete timpul de execuie.

Schema bloc a unui sistem cu SC140


Level-1 Memory Expansion Area
Unified Data and Program Memory
ROM, RAM
Star*Core 140 DSP Core

Introducere n arhitectura SC140

System
Expansion Area

External Memory
Interface

DSP Engine
True 16-bit instruction set
Variable Length Execution Set (VLESTM ) Model

Procesorul de semnal StarCore 140, produs al firmei Freescale,


prezint un nou tip de arhitectur, cu un plus de putere de calcul.

4 Arithmetic
& Logic Units

SC140 poate fi implementat pe o gam larg de configuraii SOC


(System On Chip).

2 Address
Arithmetic Units

DMA
CACHE
Interrupt Ctrl.
Level-2 Memory
Expansion

Peripheral and Accelerators Expansion Area


Standard Input/Output Peripherals
Application Specific Accelerators
General Purpose Programmable Accelerator

Pe un singur chip pot fi integrate, n funcie de necesiti, zone de


memorie suplimentare, dar i o gam variat de porturi de I/O sau
alte periferice.

Caracteristici ale SC140

Caracteristici ale SC140

frecvena de ceas a nucleului este 300 MHz la 1,5V i 120 MHz la 0,9V;
pn la 1200 Milioane operaii MAC pe secund (1.2 GMACS);
pn la 3000 RISC MIPS (MAC se consider ca 2 instruciuni RISC);
4 uniti aritmetico-logice (ALU Arithmetic Logic Unit) care includ circuite
dedicate de nmulire i adunare i uniti de operare pe bit;

Set de instruciuni ortogonal cu instruciuni codate pe 16 bii;


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.

circuitele MAC (Multiply and ACcumulate) din fiecare ALU, opereaz pe 40 bii
(16b 16b + 40b);
fiecare ALU conine un shifter (structur de deplasare) pe 40 bii;

Four instructions

Six instructions

16 Registre pe 40 bii pentru operaii cu numere ntregi i fracionare;


Moduri de adresare specifice procesoarelor de semnal;
16 Registre de adres pe 32 bii, dintre care 8 pot fi folosite ca adrese de baz;
4 Registre de offset pentru adrese i 4 Registre pentru adresare circular;
2 uniti de adresare cu operaii aritmetice cu numere ntregi;

Zero overhead Hardware Loops with nesting of up to four loops.

One
instruction

Reprezentarea datelor n precizie simpl:


1 word = 16 bii

Schema Bloc a Nucleului

Secveniator
de Program

Intregi cu semn:
64

Setul de registre pentru


Generarea Adreselor

XDBB

32

XDBA

32

XABB

32

XABA

128

PAB

PDB

Spaiul unificat de memorie pentru


date i program
64
128

Registre ALU
pentru date

-215 214 213

OnCE

Accelerator
pentru setul de
instruciuni

Controlul
Puterii

StarCore 140
2 AAU

BMU

4 ALU

S
I
G
N

20

15 14

13

Most Negative Integer


- 215 = $8000

Most Positive Integer


215 - 1 = $7FFF

Generatorul
de ceas

21

24

PLL
128

Instruction Bus

Reprezentarea datelor n precizie simpl:


1 word = 16 bii
Intregi fra semn:
215

Numere fracionare cu semn:

214 213

21

-20

20

13

Largest Unsigned Integer


216 - 1 = $FFFF

Smallest Unsigned Integer


0 = $0000

2-1 2-2

S
I
G
N


15 14

Reprezentarea datelor n precizie simpl:


1 word = 16 bii

Bit

Number 15 14
Radix
Point

2-14 2-15

1

13
Fraction

Largest Signed Fraction


1 - 2-15 = $7FFF

Most Negative Fraction


-1 = $8000

Binary
Point

Interpretarea valorilor operanzilor pe 16-bii


Binary
Representation

Hexadecimal
Integer Value Fractional
Representation (Decimal)
Value (Decimal)

0.100 0000 0000 0000

0x4000

16384

0.5

0.010 0000 0000 0000

0x2000

8192

0.25

0.001 0000 0000 0000

0x1000

4096

0.125

0.000 0000 0000 0000

0x0000

0.0

1.100 0000 0000 0000

0xC000

-16384

-0.5

1.110 0000 0000 0000

0xE000

-8192

-0.25

1.111 0000 0000 0000

0xF000

-4096

-0.125

Reprezentarea datelor n precizie dubl:


format long = 32 bii
Numere ntregi cu semn:
-231 230 229
S
I
G
N

20

31 30

The following equation shows the relationship between a 16-bit


integer and a fractional value:

21

29

Most Negative Integer


- 231 = $80000000

Most Positive Integer


231-1 = $7FFFFFFF

Fractional Value = Integer Value / (215)

Reprezentarea datelor n precizie dubl:


format long = 32 bii
Numere ntregi fr semn:
231

Numere fracionare cu semn:


21

230 229

20

-20


31 30

29

Largest Unsigned Integer


232 -1 = $FFFFFFFF

Reprezentarea datelor n precizie dubl:


format long = 32 bii

Smallest Unsigned Integer


0 = $00000000

2-30 2-31

2-1 2-2

S
I
G
N

Bit

Number 31 30
Radix
Point


29

Largest Signed Fraction


1 - 2-31 = $7FFFFFFF

1
Fraction
Most Negative Fraction
-1 = $80000000

Arhitectura ALU de date

Modelul de programare
Data ALU
39

L0
L1
L2
L3
L4
L5
L6
L7
L8
L9
L10
L11
L12
L13
L14
L15

Memory data bus 1 (XDBA)


Memory data bus 2 (XDBB)

64

64

Shifter/Limiter

64 64

40 40 40 40 40 40 40 40

Data Register File


40

40

ALU

ALU

ALU

ALU

Reprezentarea n registrele de date:


d0 d15 (40 bii)

S
I
G
N

Most Positive Integer


239 -1 = $7FFFFFFFFF

D0.l
D1.l
D2.l
D3.l
D4.l
D5.l
D6.l
D7.l
D8.l
D9.l
D10.l
D11.l
D12.l
D13.l
D14.l
D15.l

Numere raionale cu semn:


21

231

39 38

16 15

D0.h
D1.h
D2.h
D3.h
D4.h
D5.h
D6.h
D7.h
D8.h
D9.h
D10.h
D11.h
D12.h
D13.h
D14.h
D15.h

Reprezentarea n registrele de date:


d0 d15 (40 bii)

Numere ntregi cu semn:


-239 238

32

D0.e
D1.e
D2.e
D3.e
D4.e
D5.e
D6.e
D7.e
D8.e
D9.e
D10.e
D11.e
D12.e
D13.e
D14.e
D15.e

20

-28


32 31

Most Negative Integer


-239 = $8000000000

S
I
G
N

27


Bit
Number 39 38
Radix
Integer
Point

2-30 2-31

20 2-1

32 31

Largest Value
256 - 2-31 = $7FFFFFFFFF

1
Fraction
Most Negative Value
-256 = $8000000000

Reprezentarea n registrele de date:


d0 d15 (40 bii). Exemple.

Transferul operanzilor pe 16 bii n


registrele de date
Operand pe 16 bii n
memorie

Decimal
Fraction

40-Bit Binary Value

Hexadecimal
Representation

12.5
1.5
0.5
-0.5
-1.5
-12.5

000001100.1000000 0000
000000001.1000000 0000
000000000.1000000 0000
111111111.1000000 0000
111111110.1000000 0000
111110011.1000000 0000

$0640000000
$00C0000000
$0040000000
$FFC0000000
$FF40000000
$F9C0000000

MOVE.F (R0),D0

Reprezentarea pe 40
de bii (D0 D15)
Reprezentarea numerelor fracionare cu semn
Operand pe 16 bii n
memorie

MOVE.W (R0),D0

Reprezentarea pe 40
de bii (D0 D15)
Reprezentarea numerelor ntregi cu semn

Aritmetica cu saturare
Cu limitare:

Fra limitare:
Lx Dx.e
Dx.h
Dx.l
1 0...0 1 0 0 ... 0 0 0 0 . . . 0 0 Dx = +1.0
1615
0
39 3231

1 0 0 ... 0 0 = -1.0
0
15

MOVE.F D0,(R0)

|Error| = 2.0

Dx.h
Dx.l
Lx Dx.e
1 0...0 1 0 0 ... 0 0 0 0 . . . 0 0 Dx = +1.0
1615
0
39 3231

0 1 1 ... 1 1 = +0.9999999
0
15
|Error| = 0.0000001
MOVES.F D0,(R0)

Unitatea de Generare a Adreselor (AGU)

Modelul de Programare AGU


31

31

R0
R1
R2
R3
R4
R5
R6
R7
SP (NSP, ESP)
ADDRESS REGISTERS

31

0
N0
N1
N2
N3
OFFSET REGISTERS

31

XABA

Data are byte-addressable by the two data memory buses.

Interfaa memorie - nucleu

;R0 = $38

$20 MOVE.4W (R0),D0:D1:D2:D3 ;R0 =$20

MOVE.B ($4),D0

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)

$30 MOVE.L ($30),D0

$0

32

Two data memory buses are used for all data transfers between the core and memory.

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).

$10 MOVE.W ($16),D0

XABB

Unified Data / Program

64

Transferul pe magistralele de date

$18 MOVE.2W (R0),D0:D1

Core

64

XDBB

R8 / B0
R9 / B1
R10 / B2
MODIFIER and MODIFIER
R11 / B3
CONTROL REGISTERS
R12 / B4
R13 / B5
R14 / B6
R15 / B7
ADDRESS REGISTERS / BASE ADDRESS REGISTERS

$38 MOVE.2L (R0),D0:D1

32

XDBA

M0
M1
M2
M3
MCTL

Transferul pe magistralele de date

;R0=$18

Status Register

Unitatea de control a execuiei programului


31

31

PC

SR

PROGRAM COUNTER

STATUS REGISTER

31

31

EMR
EXCEPTION AND MODE
REGISTER

31

SA0

LC0

SA1

LC1

SA2
SA3

LC2
LC3

START ADDRESS REGISTERS

LOOP COUNTER REGISTERS

31 30-27 26-24 23-21 20 19 18 17-12 11-8


7
6 5 4 3 2 10
SLF 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 Flag


LF[3:0] - Loop Flags
I[2:0] - Interrupt Mask
OVE - Overflow Exception Enable
DI - Disable Interrupts
EXP - Exception Mode bit
VF[3:0] - Viterbi Flags
S - Scaling Bit
S1, S0 - Scaling Mode Bits
RM - Rounding Mode
AS -Arithmetic Saturation Mode
T - True Bit
C - Carry Bit
*Rsvd - Reserved (derivative dependant)

Exception and Mode Register


31-24
Reserved

23-17
GP[6:0]

16
BEM

15-4
Reserved

3
NMID

2
DOVF

GP - General Purpose Flags


BEM - Big Endian Memory
NMID - NMI Disable
DOVF - DALU overflow
ILST - Illegal Execution Set
ILN - Illegal Instruction

1
0
ILST ILN

Execuia Pipeline
PROGRAM
PRE-FETCH
PROGRAM
FETCH
DISPATCH
& DECODE
- Short, efficient pipeline
- No arithmetic interlocks
- Short change of flow
- Consistent pipeline

ADDRESS
GENERATION
EXECUTE

Magistrala de instruciuni

Etapele Pipeline

Unified Data/Program Memory

32-bit Address

PAB

32

128

PDB

128-bit Fetch Set


Eight-word Fetch Set

Core

Fetch Set and Execution Set

Exemple de seturi de execuie

Program Memory Data Bus - PDB


Instruction Fetch Set (8 words)
Instr
#N

Instr
#N+1

Instr
#N+2

Instr
#N+3

Instr
#N+4

Instr
#N+5

Instr
Instr
#N+3
#N+4
VLES #M
4 words

Instr
#N+5

Instr
#N+6

Instr
#N+7

Variable Length Execution Set - VLES


Instr
#N

Instr
#N+1

End of VLES #M-1


7 words

Instr
#N+2

A 128-bit Program Data Bus (PDB) and a 32-bit Program Address bus (PAB) are
used 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.

Instr
Instr
#N+6
#N+7
Start of VLES #M+1
8 words

Loop Examples

Loop Examples

Short Loop, two execution sets:


Long Loop:
dosetup0 _ start0
doen0 #$10
move.w (r3)+,d1
skipls _end0
loopstart0
SA

SA
LA

_start0
mac d0,d1,d2 move.w (r0)+,d0
add d5,d6,d4 move.w (r1)+,d5
sub d3,d2,d4 inc d5
mac d0,d1,d6 move.w (r0)+,d7
sub d5,d4,d4 inc d7
loopend0

LA

Short Loop, one execution set:

SA, LA

Iteration and Termination of Loops (1 of 2)

doensh0 #$10
...
loopstart0
mac d0,d1,d2 move.w (r0)+,d0
loopend0

loopstart0

loostart0

loostart0
.
.

.
.

CONT LBL
.
.

LBL
Jumps to SA and decrements LC

BREAK LBL

CONT LBL
.
.

loopend0

loopend0

loopend0

LBL

LBL
Jumps to LBL and clears active LF and LC.

LPMARKA

Iteration and Termination of Loops (2 of 2)

LC 1

LC > 1

LPMARKB

LPMARKB

_end0

SA

doensh0 #$10
...
loopstart0
mac d0,d1,d2 move.w (r0)+,d0
add d5,d6,d4 move.w (r1)+,d5
loopend0

Jumps to LBL and clears the active LF.

Looping Restrictions

Stack Support (1 of 4)

Loop nesting:

Normal mode stack:

Nested loops cant 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.

NSP
Loop 0

1
Loop2

Shadow
Shadow NSP
NSP

Last stacked value - 8 bytes

Valid bit

Exception mode stack:

Loop3

ESP
Shadow ESP
ESP
1 Shadow
Valid bit

Stack Support (2 of 4)

Increasing
addresses

POP De
SP
De

Increasing
addresses

(SP - 8) De
SP-8 SP

SP

De

Increasing
addresses

POP Do

PUSH Do
Do (SP+4)
SP + 8 SP

Last stacked value - 8 bytes

Stack Support (3 of 4)

PUSH De
De (SP)
SP + 8 SP

Increasing
addresses

SP
Do

Increasing
addresses

(SP - 4) Do
SP-8 SP

SP

Do

Increasing
addresses

Stack Support (4 of 4)

Fast Return from Subroutine


Jump to Subroutine:
Before:

After:

Active Stack

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

SP
SP

PC (return address) and SR

PUSHN De
PUSHN Do
Transfer instruction to move to or from the OSP (Other Stack Pointer)
- Allows the stack pointers to be written
TFRA R0,OSP

RAS

Valid bit

XXXX...XXX

Return from Subroutine (RTS):

; If current SP is ESP, then OSP will be NSP

SP

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 funcii


scrise n C i programe (optimizate)
scrise n limbaj de asamblare

Valid bit
RAS
1
PC (return address)

Active Stack

PC (return address) and SR


RAS
Valid bit
PC (return address)
0

Uneltele de dezvoltare
software

Active Stack

SP decrements by 8 bytes

RAS value is put into PC


RAS becomes invalid

Pentru operaiile cu numere fracionare sunt introduse tipuri noi de date


si funcii intrinseci care emuleaz aritmetica n virgul fix.
Date fracionare
Tip echivalent n C
Word16
short
Word32
long/int

Iniializarea variabilelor cu valori de tip fracionar se face cu macrourile


WORD16() sau WORD32(). De exemplu:
Word16 x = WORD16(0.5)
iniializeaz variabila x cu valoarea hexa 0x4000

Funciile intrinseci difereniaz operaiile cu ntregi de operaiile cu


numere fracionare:

Funciile intrinseci i tipurile de date asociate numerelor fracionare


sunt declarate n fiierul prototype.h
abs_s

Word16 abs_s(Word16 var1)

add

Word16 add(Word16 var1, Word16 var2)

div_s

Word16 div_s(Word16 var1, Word16 var2);

extract_h

Word16 extract_h(Word32 L_var1);

extract_l

Word16 extract_l(Word32 L_var1);

L_mac

Word32 L_mac(Word32 L_var3, Word16 var1, Word16 var2);

L_msu

Word32 L_msu(Word32 L_var3, Word16 var1, Word16 var2);

mac_r

Word16 mac_r(Word32 L_var3,Word16 var1, Word16 var2);

max

Word16 max(Word16 var1, Word16 var2);

mult

Word16 mult(Word16 var1, Word16 var2);

Tehnici de optimizare C
pentru StarCore SC140

Dezvoltarea de aplicaii pe DSP


Compromis ntre:
ncadrarea timpului de execuie a programului ntr-un
interval bine stabilit i
cerina ca memoria de program ocupat de aplicaie s se
ncadreze n limitele impuse de procesorul de semnal.

Creat de Bogdan Costinescu

Necesitatea de gsire de metode de


optimizare a programelor sub ambele aspecte,
att din punct de vedere al timpilor de execuie
dar i a memoriei de program ocupate de
aplicaie.

Ce nseamn optimizarea?

Limbajul C pentru programarea DSP

C este un limbaj de programare structurat


gndit s realizeze o translaie compact i
eficient a unui program n limbaj main
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

reducerea timpului de execuie


reducerea dimensiunii codului
reducerea dimensiunii datelor
reducerea memoriei alocate stivei
reducerea consumului de memorie

Arhitecturi DSP prietenoase pentru


compilatorul C

Exemplu - StarCore SC140


Arhitectura Variable Length Execution Set (VLES)

numr mare de registre


set de registre ortogonale
moduri de adresare flexibile
puine restricii de execuie a instruciunilor
suport pentru for diversele tipuri de date

un set de execuie poate efectua pn la:


patru instruciuni DALU
dou instruciuni AGU

arhitectur scalabil cu set bogat de instruciuni


set de registre ortogonal (independente)
16 registre de date DALU (d0 d15)
16 + 4 + 4 registre AGU (r0 r15, n0 n3, m0 n3)

etape puine pipeline => nu apar conflicte


suport hardware pentru ntregi i fracionare

Exemplu - StarCore SC140


[
move.4f (r0)+,d0:d1:d2:d3
move.4f (r1)+,d4:d5:d6:d7
]
LOOPSTART3
[
mac
d0,d4,d8
mac
d1,d5,d9
mac
d2,d6,d10
mac
d3,d7,d11
move.4f (r0)+,d0:d1:d2:d3
move.4f (r1)+,d4:d5:d6:d7
]
LOOPEND3
[
mac
d0,d4,d8
mac
d1,d5,d9
mac
d2,d6,d10
mac
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/ieire, i nici
instruciuni specializate;
nu este prezent suportul pentru instruciuni de tipul SIMD
(Single Instruction Multiple Data).

Eficiena C pentru paralelism

Poate fi fcut C eficient pentru DSP?

practic, NU EXIST
C = un limbaj de programare secvenial

DA,
n condiiile n care programatorul, cel care
dezvolt aplicaii pentru procesoarele de
semnal, nelege i stpnete urmtoarele
aspecte:

nu pot fi exprimate aciuni n paralel


nu exist echivalent pentru instruciuni SIMD

Compilatorul trebuie s analizeze planificarea


operaiilor independente
analiza depinde de stilul de programare
c = a * b;
d = b + c;
e = a * a;

extensiile compilatorului
tehnicile de programare
comportamentul compilatorului.

sunt independente, pot fi efectuate n paralel


depinde de rezultatul operaiei anterioare

Extensiile compilatorului

Funcii intrinseci

funciile intrinseci

Sunt funcii speciale prin care compilatorul


realizeaz o mapare n C a instruciunilor din
asamblare specifice operaiilor pe precizie
finit.
Aceast categorie de funcii presupune
definirea unor mulimi de noi tipuri de date

acces eficient la setul de instruciuni

tipuri noi de date


folosirea formatelor de date specifice DSP n C

pragme
indic informaii suplimentare compilatorului

asamblare inline
soluia la o problem imposibil de rezolvat n C

precizie simpl, dubl i extins pentru numere


fracionale.

Utilizarea acestor funii intrinseci asigur


emularea programelor i pe alte platforme.

Tipuri de date

Tipuri de date C pentru nr. fracionare

pentru DSP exist mai multe formate de date

convenii:

identice cu tipurile de baz C


integers
de aceeai lungime dar cu semnificaie diferit
fractionare pe 16 i 32 bii
specifice DSP (de ex. incluznd partea de extensie)
fractionare pe 40 bii

pentru toate tipurile specifice DSP sunt definite


seturi de operaii

Tipuri fracionare i Operatori


introdui prin funciile intrinseci fracionare
operatorii standard (ITU-T, ETSI)
adunare, nmulire
saturare, rotunjire
scalare, normalizare

opereaz pe tipuri specifice de date


Word16
add(Word16, Word16);
Word32 L_add(Word32, Word32);
Word40 X_add(Word40, Word40);
Word64 D_add(Word64, Word64);

Word16 pentru fracii pe 16 bii


Word32 pentru fracii pe 32 bii
Word40 pentru fracii pe 40 bii (32 bii plus 8 bii gard)
Word64 pentru fracii pe 64 bii (nu sunt direct
reprezentabile pe SC140)

Funciile intrinseci sunt cele care stabilesc


formatul fracionar pentru operanzi

Pragme
Prin pragme se nelege 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 influeneaz ntr-o
msur deosebit de important performanele
#pragma
#pragma
#pragma
#pragma

align signal 8
loop_unroll 4
inline
loop_count (20, 40, 4)

Pragme pentru alinierea datelor

Pragme pentru alinierea datelor

#pragma align ptr 8

#pragma align *ptr 8

pentru alinierea n memorie la declararea vectorilor


Word16 x[12] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
#pragma align x 8

pentru parametri transmii funciilor prin adres


compilatorul consider c vectorii au fost aliniai n
programul care apeleaz funcia
#define LENGTH 10

x[11]

x[10]

x[9]

x[8]

16

x[7]

x[6]

x[5]

x[4]

x[3]

x[2]

x[1]

x[0]

Permit folosirea transferurilor cu mai multe


cuvinte
move.4f

(r0)+,d0:d1:d2:d3

Word16 x[LENGTH], y[LENGTH];


#pragma align x 8
#pragma align y 8
int 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 8
Word16 j;
Word32 res_rout = 0;
for(j=0; j<LENGTH; j++)
{
res_rout += a[j] * b[j];
}
return res_rout;
}

Asamblarea Inline

Asamblarea Inline

Presupune tehnica prin care n interiorul


codului scris n limbaj C se pot introduce
directive de asamblare, instruciuni de
asamblare.
Acest lucru se poate realiza:

Utilizarea directivelor de asamblare presupune


faptul c avem un acces special la unele
caracteristici ale procesorului, imposibil de
utilizat n cazul folosirii funciilor intrinseci.
convenii de apelare speciale
integrarea rapid a funciilor n asamblare cu
programele C

sub forma unei singure instruciuni


asm( di);
sub forma unei ntregi funcii.

Acces dificil la simboluri locale n funcii


datele globale pot fi accesate prin numele lor

Asamblare Inline - Exemplu


asm Flag GetOverflow(void)
{
asm_header
return in $d0;
.reg $d0,$d1;
asm_body
clr d0

bmtsts #$0004,EMR.L
move.w #1,d1
tfrt d1,d0
asm_end
}

;
;
;
;

extra cycle needed to allow DOVF to


be written even by the instructions
in the delay slot of JSRD
test the Overflow bit from EMR

; if Overflow return 1, else return 0

Optimizri fcute de compilator


optimizrile standard din C
optimizri (low level) specifice arhitecturii
mai multe niveluri de optimizarea disponibile
pentru un cod mai rapid
pentru un cod mai mic

optimizri globale
toate fiierele sunt analizate ca un ntreg

Obinerea de aplicaii optimizate pe DSP

Tehnici de programare pentru SC140

arhitectur DSP performant


compilator cu grad mare de optimizare
stilul de scriere a codului surs C

tehnici generale aplicabile DSP

singurul factor dependent de programator

scrierea codului C trebuie s respecte unele


tehnici de programare precizate n manualul
compilatorului pentru
eliminarea dependenelor datelor
completarea operaiilor fcute de compilator pentru
structurarea codului

loop merging
loop unrolling
loop splitting

tehnici specifice StarCore


split computation
multisample

Loop Merging
combinarea a dou bucle ntr-una singur
dac cele dou bucle sunt caracterizate de acelai numr
de iteraii.
se poate diminua timpul necesar executrii celor dou
bucle.

reduce ntrzierile pentru iniializarea buclelor


crete utilizarea registrelor DALU
reduce mrimea codului

Loop Unrolling
repetarea coninutului unei bucle
permite gruparea mai multor instruciuni pentru
ca acestea sa se execute n paralel, n cadrul
unui aceluiai ciclu instruciune.
crete utilizarea DALU
crete dimensiunea codului
depinde de

dependenele datelor ntre iteraii


alinierea elementelor vectorilor
presiunea pe registrele DALU pe iteraie
numrul de itaraii

pstreaz precizia operaiilor

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;
}

int i;
Word16 signal[SIGNAL_SIZE];
Word16 scaled_signal[SIGNAL_SIZE];

*/
*/

Loop Unrolling Exemplu

/* ... */
for(i=0; i<SIGNAL_SIZE; i++)
{
scaled_signal[i] = shr(signal[i], 2);
}
/* ... */
int i;
Word16 signal[SIGNAL_SIZE];
#pragma align signal 8
Word16 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],
scaled_signal[i+1] = shr(signal[i+1],
scaled_signal[i+2] = shr(signal[i+2],
scaled_signal[i+3] = shr(signal[i+3],
}
/* ... */

2);
2);
2);
2);

Compiler generated code


Loop unrolling

; Without loop unrolling : 6 cycles


; With loop unrolling : 2 cycles inside
; inside the loop
; the loop.
loopstart3
; The complier uses software pipelining
[
L5
move.4f (r0)+,d0:d1:d2:d3
[
add
#<2,d3
;[20,1]
move.l
#_scaled_signal,r1
move.l
d3,r2;[20,1]
]
move.l
<_signal,r1 ;[20,1]
[
]
asrr
#<2,d0
asrr
#<2,d3
move.l
<_scaled_signal,r4 asrr
#<2,d1
asrr
#<2,d2
adda
r2,r1
]
[
loopstart3
move.w
(r1),d4
[
adda
r2,r4
moves.4f d0:d1:d2:d3,(r1)+
]
move.4f (r0)+,d0:d1:d2:d3
asrr
#<2,d4
]
move.w
d4,(r4)
[
loopend3
asrr
#<2,d0
asrr
#<2,d1
asrr
#<2,d2
asrr
#<2,d3
]
loopend3
moves.4f d0:d1:d2:d3,(r1)+

permite specificarea explicit a folosirii de


ctre compilator a operailor n paralel
factroul de desfacere a buclei depinde de

alinierea datelor
numrul de transferuri cu memoria
numrul de operaii aritmetice
numrul de iteraii

se face unroll pn nu mai rezult nici o


mbuntire
n general se face unroll cu un factor 2 sau 4

Loop Unroll Factor example 1

Loop Unroll Factor - example 2

#include <prototype.h>

#include <prototype.h>

#define VECTOR_SIZE 40

#define VECTOR_SIZE 40

Word16 example1(Word16 a[], Word16 incr)


{
short i;
Word16 b[VECTOR_SIZE];

Word16 example2(Word16 a[], Word16 incr)


{
; compiler generated code
#pragma align *a 8
move.4f (r0)+,d4:d5:d6:d7
int i;
...
Word16 b[VECTOR_SIZE];
loopstart3
#pragma align b 8

for(i = 0; i < VECTOR_SIZE; i++) {


b[i] = add(a[i], incr);
}

[
add
add
add
add
moves.4f
move.4f

for(i = 0; i < VECTOR_SIZE; i++) {


b[i] = add(a[i], incr);
}

return b[0];
}

return b[0];
}

]
loopend3

d4,d8,d12
d5,d8,d13
d6,d8,d14
d7,d8,d15
d12:d13:d14:d15,(r1)+
(r0)+,d4:d5:d6:d7

Loop Unroll Factor - example 3

Split Computation

#include <prototype.h>

aplicaii tipice n calculul:

#define VECTOR_SIZE 40
Word16 example3(Word16 a[], Word16 incr)
{
; compiler generated code
#pragma align *a 8
loopstart3
int i;
[
Word16 b[VECTOR_SIZE];
move.4w d4:d5:d6:d7,(r1)+
#pragma align b 8
move.4w (r0)+,d4:d5:d6:d7
]
for(i = 0; i < VECTOR_SIZE; i++) {
[
b[i] = a[i] >> incr;
asrr
d1,d4
}
asrr
d1,d5
asrr
d1,d6
return b[0];
asrr
d1,d7
}
]
loopend3

De exemplu calculul energiei unui semnal:


N 1

e = x2 (i )
0

Formula este echivalent cu separarea n 4 sume


e=

i = 0,4,8...

x ( i ) + x ( i + 1) + x ( i + 3) + x ( i + 3)
2

crete utilizarea DALU


crete dimensiunea codului
poate necesita alinierea datelor
poate influena precizia

int i; Word32 e;
Word16 signal[SIGNAL_SIZE];

Split Computation

N 1

energiei
erorii ptratice medii
maximului

Split Computation
Example

/* ... */
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 */

Cte separri?

Multisample

depinde de alinierea n memorie


numrul de iteraii trebuie s fie multiplu de
numrul de separri a sumei
sumele calculate separat trebuie recombinate
pentru a obine rezultatul final

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.

pstreaz precizia rezultatelor


nu necesit alinierea datelor n memorie
reduce numrul de operaii de transfer al
datelor

Multisample Example - Step 2


Multisample Example - Step 1
for (j = 0; j < N; j += 4) {
acc0 = 0;
1
for (i = 0; i < T; i++)
acc0 = L_mac(acc0, x[i],
res[j+0] = acc0;
acc1 = 0;
for (i = 0; i < T; i++)
for (j = 0; j < N; j++) {
acc1 = L_mac(acc1, x[i],
acc = 0;
res[j+1] = acc1;
for (i = 0; i < T; i++) {
acc2 = 0;
acc=L_mac(acc,x[i],c[j+i]); for (i = 0; i < T; i++)
}
acc2 = L_mac(acc2, x[i],
res[j] = acc;
res[j+2] = acc2;
}
acc3 = 0;
for (i = 0; i < T; i++)
acc3 = L_mac(acc3, x[i],
res[j+3] = acc3;
}
Word32 acc;
Word16 x[], c[];
int i,j,N,T;
assert((N % 4) == 0);
assert((T % 4) == 0);

Outer loop unrolling

2
c[j+0+i]);

c[j+1+i]);

c[j+2+i]);

c[j+3+i]);

for (j = 0; j < N; j += 4) {
acc0 = 0;
for (i = 0; i < T; i++)
acc0 = L_mac(acc0, x[i],
res[j+0] = acc0;
acc1 = 0;
for (i = 0; i < T; i++)
acc1 = L_mac(acc1, x[i],
res[j+1] = acc1;
acc2 = 0;
for (i = 0; i < T; i++)
acc2 = L_mac(acc2, x[i],
res[j+2] = acc2;
acc3 = 0;
for (i = 0; i < T; i++)
acc3 = L_mac(acc3, x[i],
res[j+3] = acc3;
}

Rearrangement

2 for (j = 0; j < N; j += 4) {
acc0 = 0;
c[j+0+i]);
acc1 = 0;
acc2 = 0;
acc3 = 0;
for (i = 0; i < T; i++)
c[j+1+i]);
acc0 = L_mac(acc0, x[i],
for (i = 0; i < T; i++)
acc1 = L_mac(acc1, x[i],
for (i = 0; i < T; i++)
c[j+2+i]);
acc2 = L_mac(acc2, x[i],
for (i = 0; i < T; i++)
acc3 = L_mac(acc3, x[i],
res[j+0] = acc0;
c[j+3+i]);
res[j+1] = acc1;
res[j+2] = acc2;
res[j+3] = acc3;
}

c[j+0+i]);
c[j+1+i]);
c[j+2+i]);
c[j+3+i]);

Multisample Example - Step 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],
for (i = 0; i < T; i++)
acc1 = L_mac(acc1, x[i],
for (i = 0; i < T; i++)
acc2 = L_mac(acc2, x[i],
for (i = 0; i < T; i++)
acc3 = L_mac(acc3, x[i],
res[j+0] = acc0;
res[j+1] = acc1;
res[j+2] = acc2;
res[j+3] = acc3;
}

Multisample Example - Step 4

Inner loop merging

for (j = 0; j < N; j += 4) {
acc0 = 0;
acc1 = 0;
c[j+0+i]);
acc2 = 0;
acc3 = 0;
c[j+1+i]);
for (i = 0; i < T; i++) {
acc0 = L_mac(acc0, x[i],
c[j+2+i]);
acc1 = L_mac(acc1, x[i],
acc2 = L_mac(acc2, x[i],
c[j+3+i]);
acc3 = L_mac(acc3, x[i],
}
res[j+0] = acc0;
res[j+1] = acc1;
res[j+2] = acc2;
res[j+3] = acc3;
}

4
c[j+0+i]);
c[j+1+i]);
c[j+2+i]);
c[j+3+i]);

Multisample Example - Step 5


for (j = 0; j < N; j += 4) {
acc0 = 0;acc1 = 0;acc2
for (i = 0; i < T; i
acc0 = L_mac(acc0,
acc1 = L_mac(acc1,
acc2 = L_mac(acc2,
acc3 = L_mac(acc3,

Explicit scalarization

for (j = 0; j < N; j += 4) {

= 0;acc3 = 0;
acc0=acc1=acc2=acc3=0; xx = x[i+0];
+= 4) {
c0 = c[j+0]; c1 = c[j+1];
x[i+0], c[j+0+i]);
c2 = c[j+2]; c3 = c[j+3];
for (i = 0; i < T; i += 4) {
x[i+0], c[j+1+i]);
6
x[i+0], c[j+2+i]); acc0 = L_mac(acc0, xx, c0);
x[i+0], c[j+3+i]); acc1 = L_mac(acc1, xx, c1);
acc2 = L_mac(acc2, xx, c2);
acc3 = L_mac(acc3, xx, c3);

acc0 = L_mac(acc0, x[i+1], c[j+1+i]); xx = x[i+1]; c0 = c[j+4+i];


acc1 = L_mac(acc1, x[i+1], c[j+2+i]); acc0 = L_mac(acc0, xx, c1);
acc2 = L_mac(acc2, x[i+1], c[j+3+i]); acc1 = L_mac(acc1, xx, c2);
acc3 = L_mac(acc3, x[i+1], c[j+4+i]); acc2 = L_mac(acc2, xx, c3);
acc3 = L_mac(acc3, xx, c0);
/* third loop body for x[i+2] */
xx = x[i+2]; c1 = c[j+5+i];
/* fourth loop body for x[i+3] */
/* similar third and fourth loop */
}
res[j+0] = acc0; res[j+1] = acc1;
res[j+2] = acc2; res[j+3] = acc3;

}
res[j+0] = acc0; res[j+1] = acc1;
res[j+2] = acc2; res[j+3] = acc3;
}

for (j = 0; j < N; j += 4) {
for (j = 0; j < N; j += 4) {
acc0 = 0;
acc0 = 0;acc1 = 0;acc2 = 0;acc3 = 0; 5
acc1 = 0;
4
for (i = 0; i < T; i += 4) {
acc2 = 0;
acc0 = L_mac(acc0, x[i+0], c[j+0+i]);
acc3 = 0;
acc1 = L_mac(acc1, x[i+0], c[j+1+i]);
for (i = 0; i < T; i++) {
acc2 = L_mac(acc2, x[i+0], c[j+2+i]);
acc0 = L_mac(acc0, x[i], c[j+0+i]);
acc3 = L_mac(acc3, x[i+0], c[j+3+i]);
acc1 = L_mac(acc1, x[i], c[j+1+i]);
acc2 = L_mac(acc2, x[i], c[j+2+i]);
acc0 = L_mac(acc0, x[i+1], c[j+1+i]);
acc3 = L_mac(acc3, x[i], c[j+3+i]);
acc1 = L_mac(acc1, x[i+1], c[j+2+i]);
}
acc2 = L_mac(acc2, x[i+1], c[j+3+i]);
res[j+0] = acc0;
acc3 = L_mac(acc3, x[i+1], c[j+4+i]);
res[j+1] = acc1;
/* third loop body for x[i+2] */
res[j+2] = acc2;
/* fourth loop body for x[i+3] */
res[j+3] = acc3;
}
}
res[j+0] = acc0; res[j+1] = acc1;
res[j+2] = acc2; res[j+3] = acc3;
}

Inner loop unrolling

Multisample Example - Final Result


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;
}

one cycle (4 macs + 2 moves)

one cycle (4 macs + 2 moves)

Maximum search

Search Techniques Adapted for


StarCore SC140

reduction operation => split maximum


#include <prototype.h>

finding for maximum


finding the maximum and its position
finding the maximum ratio
finding the position of the maximum ratio

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 (r0)+n0,d0:d1
FALIGN
LOOPSTART3
[
max2 d0,d4
max2 d2,d6
move.2l (r0)+n0,d0:d1
]
LOOPEND3
[
max2 d0,d4
max2 d2,d6
]

move.2l (r1)+n0,d6:d7
move.2l (r1)+n0,d2:d3

max2 d1,d5
max2 d3,d7
move.2l (r1)+n0,d2:d3

max2 d1,d5
max2 d3,d7

Maximum position

Maximum ratio

based on comparisons

given Word16 a[ ] and Word16 b[ ] vectors of


positive values, compute max{a[i]/b[i]}
division is very expensive on StarCore
ideas:

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

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)

care must be taken to preserve the original


semantics

final solution in N cycles

Max ratio position

DSP Coding Recommendations

based on max ratio search, plus

use loops with a fixed number of iterations

movet, tfrt instructions


position is kept as pointer, not index

software pipelining plus loop unrolling three


times

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

DSP Coding Recommendations (2)

Software Development Notes

replace tests with computations

SDN database contains coding guidelines

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

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

Diet Speed Optimization

typically cannot be both optimized


follow the 80%-20% rule

compile for speed only time-consuming loops

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

compile for size the rest

try speed and size optimizations combined


reduce the unroll factors in the multisample
transformation
avoid register pressure that creates spill code

C Optimization Limits

Conclusions

effort concentrated on loops

complexity of future DSP applications require


development using C
C can be transformed in efficient DSP C

no packed moves outside loops


loops and ifs delimit optimization blocks

compiler extensions are a must

the coding style is programmers key


optimized C code is suitable for high
performance applications
assembly remains for critical sections

S-ar putea să vă placă și