Documente Academic
Documente Profesional
Documente Cultură
Setul de instructiuni
Setul de instructiuni al unui procesor este un factor cheie care determina nu numai ce
operatii sunt posibile, dar si ce operatii sunt naturale si eficiente. Instructiunile controleaza modul in
care datele circula pe calea de date a procesorului, modul in care sunt citite si scrise in memorie, si
asa mai departe. De aici rezulta ca setul de instructiuni al unui procesor are o influenta determinanta
asupra sarcinilor la care un procesor este potrivit.
In acest capitol sunt trecute in revista diverse aspecte ale setului de instructiuni. Vom vedea
diferite tipuri de instructiuni (si, in stransa relatie, tipurile de registri) intalnite la procesoarele DSP
si vom analiza suportul setului de instructiuni pentru deplasarea datelor in paralel cu operatiile
aritmetice si de multiplicare. Vom analiza ortogonalitatea setului de instructiuni si usurinta in
programare si vom incheia prin examinarea executiei conditionate si a instructiunilor cu functii
speciale.
Instructiuni aritmetice
Dupa cum a fost evidentiat anterior, instructiunile de adunare, multiplicare si multiplicare cu
acumulare sunt operatii absolut necesare in aplicatii DSP. Majoritatea procesoarelor pun la
dispozitie un set bogat de instructiuni aritmetice (adunare, scadere, incrementare, decrementare,
negare, rotunjire, valoare absoluta) si multiplicare. Cu exceptia procesoarelor Texas Instruments -
TMS320C1x, toate procesoarele moderne implementeaza instructiuni de multiplicare cu acumulare.
De obicei aceste instructiuni se executa intr-un singur ciclu de instructiune.
Unele procesoare (cum ar fi PineDSPCore si OakDSPCore - DSP Group sau TMS320C5x -
Texas Instruments) ofera instructiuni de ridicare la patrat. Instructiunile de multiplicare de pe aceste
procesoare utilizeaza de obicei date din memorie adresate indirect drept operanzi. Alte procesoare
care utilizeaza regiștri pentru operatia de multiplicare nu necesita instructiuni speciale pentru
ridicarea la patrat. De exemplu la DSP5600x (Motorola) operatia de ridicare la patrat se
implementeaza printr-o instructiune „MPY X0,X0,A”.
1
Unele procesoare au instructiuni pentru aritmetica cu precizie extinsa. De exemplu,
instructiuni de inmultire a valorilor cu semn si fara semn sunt disponibile la D950-CORE (SGS-
Thomson), TMS320C54x (TI) si ZR3800x (Zoran). Multe procesoare executa adunarea cu transport
si scaderea cu imprumut, ambele fiind extrem de importante pentru aritmetica cu precizie extinsa.
Operatii logice
Majoritatea procesoarelor DSP ofera instructiuni pentru efectuarea operatiilor logice,
incluzand operatiile logice SI, SAU, SAU-EXCUSIV si NEGARE. Acestea sunt utile in corectii de
erori si in aplicatiile cu procesare a deciziilor care sunt din ce in ce mai intalnite la DSP-uri. De
remarcat faptul ca procesoarele pot avea si instuctiuni de manipulare a bitilor (sau a campurilor de
biti), care vor fi discutate in continuare.
Deplasari
Operatiile de deplasare sunt de doua categorii: aritmetice si logice. O deplasare logica spre
stanga cu un bit insereaza un zero in pozitia celui mai putin semnificativ bit, in timp ce o deplasare
logica spre dreapta cu un bit insereaza un zero in pozitia celui mai semnificativ bit. Pe de alta parte,
o deplasare aritmetica la dreapta copiaza bitul de semn (un unu sau un zero, in functie de semnul
numarului) in cel mai semnificativ bit. Chiar daca se utilizeaza termenul „deplasare aritmetica spre
stanga”, deplasarile la stanga aritmetice si logice sunt identice: ambele deplaseaza cuvantul la
stanga si insereaza un zero in pozitia celui mai putin semnificativ bit.
Deplasarile aritmetice ofera o modalitate de a scala datele fara a utiliza instructiunea de
multiplicare a procesorului. Scalarea este deosebit de utila pentru procesoarele cu virgula fixa unde
este necesara o scalare corespunzatoare pentru a obtine rezultate precise la efectuarea operatiilor
matematice. De asemenea operatia de deplasare pote fi privita si ca o inmultire cu o data care este o
putere a lui 2.
Practic toate DSP-urile pun la dispozitie instructiuni de deplasare in diverse variante. Unele
procesoare ofera doar un set minim, respectiv instructiuni pentru efectuarea deplasarilor aritmetice
spre stanga si spre dreapta cu un bit. Alte procesoare pot oferi in plus instructiuni de deplasare cu
doi sau patru biti. Acestea se pot combina cu deplasarile cu un singur bit pentru a forma deplasari
cu n biti, dar cu mai multe cicluri de instructiune.
Din ce in ce mai multe procesoare DSP pun la dispozitie un registru de deplasare reversibil
si instuctiuni care il utilizeaza pentru a realiza deplasari aritmetice sau logice cu orice numar de biti
(denumite barell shifter). Exemplele includ DSP16xx (AT&T), ADSP-21xx si ADSP-210xx
(Analog Devices), OakDSPCore (DSP Group), DSP563xx (Motorola), D950-CORE (SGS-
Thomson) si TMS320C5x si TMS320C54x (Texas Instruments).
2
Rotatii
Rotatia poate fi considerata drept o deplasare circulara: o deplasare in care bitii de la un
capat sunt deplasati la celalalt capat. De exemplu, la o rotatie spre stanga cu un bit, bitul cel mai
semnificativ este dus pe pozitia bitului cel mai putin semnificativ, iar ceilalti biti sunt deplasati cate
o pozitie la stanga. Rotatia este utila in diverse cazuri, cum ar fi la codarea cu corectie a erorilor
(care foloseste „intreteserea bitilor”). De asemenea operatia mai poate fi utilizata la generarea
adreselor cu bitii inversati de catre procesoarele care nu accepta operatia de inversare a bitilor
implementata in unitatea de generare a adreselor.
Majoritatea procesoarelor au instructiuni pentru rotirea unui cuvant la stanga sau la dreapta
cu un bit. Exceptiile includ DSP16xx (AT&T), PD7701x (NEC), Z893xx (Zilog) si ZR3800x
(Zoran).
Comparatii
Multe procesoare pun la dispozitie un set de biti de stare care dau informatii despre
rezultatele operatiilor aritmetice. De exemplu, bitii de stare includ un bit de zero (setat daca
rezultatul ultimei operatii aritmetice a fost zero), un bit de minus (setat daca rezultatul ultimei
operatii aritmetice a fost negativ), un bit de depasire si asa mai departe. Acesti biti de stare sunt
setati ca rezultat al unei operatii aritmetice si pot fi apoi utilizati in salturi conditionate sau in
instuctiuni cu executie conditionata (discutate mai jos).
Intr-o instructiune in care se iau decizii un procesor poate avea nevoie sa compare rapid o
serie de valori cunoscute cu o data dintr-un registru. O modalitate de a face acest lucru este de a
scadea valoarile ce urmeaza a fi comparate din valoarea de referinta pentru a seta bitii de stare. La
unele procesoare aceasta operatie modifica valoarea referintei in timp ce pe altele rezultatul ei poate
fi stocat intr-un alt registru. La procesoarele cu puțini regiștri (incluzand majoritatea procesoarelor
DSP in virgula fixa), nici una dintre acestea nu poate fi o solutie. Drept alternativa, unele
procesoare ofera instructiuni de comparare a valorilor care efectueaza aceasta scadere fara a
modifica valoarea referinta si fara a utiliza un alt registru pentru stocarea rezultatului. O
imbunatatire interesanta a operatiei normale de comparare este compararea in valoare absoluta care
permite determinarea rapida a incadrarii unei valori intr-un domeniu.
Executarea buclelor
Majoritatea aplicatilor DSP necesita executarea repetata a unui numar mic de operatii
aritmetice sau de multiplicare. Deoarece numarul de instructiuni dintr-o bucla este de obicei mic,
instructiunile de decrementare a unui contor, de testare a acestuia si de salt la inceputul buclei pot
adauga o cantitate relativ mare de operatii suplimentare. Astfe, practic toate procesoarele DSP ofera
instructiuni de efectuare a buclelor implementate hardware. Aceste instructiuni permit repetarea
3
unei instructiuni sau a unui bloc de instructiuni fara a adauga operatiile suplimentare ale secventei
de decrementare, test sau de salt de la sfarsitul buclei.
Facilitatiile buclelor hardware sunt discutate detaliat in Capitolul 8.
6
Unele procesoare pun la dispozitie instructiuni de impartire iterativa care calculeaza doar un
bit al rezultatului la fiecare executie.
ADSP-210xx (Analog Devices) si TMS320C4x (TI) ofera o instructiune de aflare a valorii
aproximative a radacinii patrate, care poate fi folosita ca o baza la aflarea mai exacta a valorii
radacinii patrate a unui numar.
Multe procesoare pun la dispozitie instructiuni specializate de implementare a operatiilor cu
stive, push si pop fiind cele mai intalnite instructiuni.
Instructiunile de activare si dezactivare a intreruperilor sunt utilizate de unele procesoare
pentru controlul intreruperilor.
7.2 Regiștri
Registrii principali dintr-un procesor sunt strans legate de setul sau de instructiuni, deoarece
instructiunile folosesc deseori registri drept operanzi sursa sau destinatie, sau le folosesc pentru a
genera adrese pentru operanzii lor sursa sau destinatie. In paragrafele ce urmeaza vom trece in
revista tipurile de registri ce se gasesc pe DSP-urile programabile si functiile acestora. La fel ca in
cazul altor facilitati ale procesoarelor, un numar mare de registri face programarea mai usoara, dar
mareste dimensiunea instructiunilor si a pastilei de siliciu a procesorului, rezultand un chip mai
scump.
Regiștri acumulatori
Fiecare procesor DSP de pe piata are cel putin un registru acumulator, cu toate ca la anumite
procesoare poate avea alta denumire. Un registru acumulator este cel putin suficient de larg pentru a
cuprinde cel mai mare rezultat aflat pe calea de date, produs de ALU sau de multiplicator. Unele
procesoare, cum ar fi TMS320C1x, TMS320C2x si TMS320C5x (TI) au un singur acumulator.
Altele, ca DSP16xx (AT&T), PineDSPCore si OakDSPCore (DSP Group), DSP5600x si DSP561xx
(Motorola) si TMS320C54x (TI) au doua sau mai multi registri acumulatori, ceea ce simplifica
codarea algoritmilor ce folosesc numere complexe. Unele procesoare ce opereaza in virgula mobila
au numar mare de registri cu precizie extinsa, din care o parte se pot folosi drept registri
acumulatori.
Regiștri de uz general si special
Unele procesoare, cum ar fi ADSP-210xx (Analog Devices), DSP32xx (AT&T), PD7701x
(NEC), TMS320C3x si TMS320C4x (TI), si ZR3800x (Zoran), pun la dispozitie un grup de registri
de uz general. De obicei acestea se pot utiliza ca operanzi pentru majoritatea operatiilor aritmetice si
de multiplicare.
La polul opus se gasesc procesoarele ce au registri dedicati anumitor unitati de executie din
cadrul procesorului. De exemplu, la familia ADSP-21xx (Analog Devices), ALU, multiplicatorul si
unitatea de deplasare au fiecare propriile registri dedicati de intrare si iesire. Multe DSPuri, cum ar
7
fi DSP16xx (AT&T), Z893xx (Zilog) si PineDSPCore (DSP Group) au registri dedicati de iesire a
unitatii de multiplicare.
La unele procesoare registrii de intrare/iesire a unitatii de executie pot servi de asemenea
drept registri de uz general. De exemplu, DSP5600x (Motorola) foloseste registri X0, X1, Y0, Y1
drept intrari pentru multiplicare, dar si ca intrari pentru ALU sau in alte scopuri. Aceasta abilitate
mareste flexibilitatea procesorului.
Majoritatea programatorilor prefera procesoarele cu registri de uz general ce pot fi folosite
pentru sarcini variate fata de procesoarele cu registri specializati, dedicate unei singure functii de pe
calea de date. Totusi procesoarele cu registri generale au si dezavantaje: implementarea acestor
registri este mai costisitoare.
Alte regiștri
Alti registri intalnite la DSP-uri includ:
- Pointerul de stiva. De obicei se gaseste la procesoarele ce suporta stive software, un
pointer de stiva este un registru dedicat indicarii varfului curent al stivei.
- Numaratorul de program. Numaratorul de program stocheaza adresa urmatoarei
instructiuni ce urmeaza a fi decodata.
- Registri de bucla. Aceste contin informatii despre buclele hardware, cum ar fi adresa
de start, ce de sfarsit si numarul de repetari.
In majoritatea cazurilor interactiunea programatorului cu acesti registri este mult mai
limitata decat cea cu registrii principali ai procesorului.
8
Instructiunile pentru transfer paralel utilizate de DSP-uri pot sa aiba doua forme, dupa cum
datele deplasate sunt sau nu in relatie directa cu operanzii instructiunii care se refera la ALU sau la
multiplictor.
Setul de instructiuni de pe PineDSPCore (DSP Group) este tipic pentru operatia de transfer
paralel in relatie directa cu operanzii. La acest procesor, doar instructiunile care au operanzi din
surse multiple pot efectua accesari multiple de date din memorie intr-un ciclu instructiune si accesul
este limitat la datele necesare unei operatii aritmetice sau de multiplicare. De exemplu, o
instructiune de inmultire poate fi:
MPY (R0), (R4)
Aceasta instructiune ia continutul locatiilor de memorie la care indica R0 si R4, inmulteste aceste
valori si depune rezultatul in registrul produs. De remarcat ca pentru a obtine operanzii instructiunii
MPY sunt executate doua accesari la memorie.
In contrast, un exemplu de transfer paralel care nu este in relatie directa cu operanzii este
prezenta la familia DSP5600x (Motorola). La acest procesor, operatiile ALU si de multiplicare iau
operanzii din registri ce au fost in prealabil incarcate cu valori de intrare si depun rezultatul in
registri acumulatoari. In paralel cu o instructiune ALU sau de multiplicare, DSP5600x poate accesa
(pentru scriere sau citire) doua locatii de memorie care pot sa nu se afle in relatie directa cu
operanzii instructiunii. O posibila instructiune de inmultire pe DSP5600x:
MPY X0, Y0, A X:(R0)+,X0 Y1,Y:(R4)+
Aceasta instructiune inmulteste X0 cu Y0 si depune rezultatul in acumulatorul A. In paralel
incarca continutul locatiei din blocul de memorie X indicat de R0 in X0, si stocheaza Y1 in blocum
de memorie Y indicata de R4.
Transferul paralel care nu este in relatie directa cu operanzii permite programatorului sa
foloseasca mai eficient latimea de banda a memoriei oferita de procesor. In cazul anterior, daca
instructiunea nu necesita doua accesari ale memoriei, cele doua accesari sunt pierdute, chiar daca
componenta hardware are latimea de banda necesara executarii lor. Transferul paralel care nu este
in relatie directa cu operanzii permite utilizatorului sa utilizeze aceste doua accesari pentru a stoca
rezultate de la instructiunea anterioara sau pentru a incarca date pentru instructiunea urmatoare.
Transferul paralel care nu este in relatie directa cu operanzii este util pentru executia algoritmilor
care necesita acces frecvent, nesecvential, la memorie, cum ar fi transformarea Fourier rapida.
Procesoarele ce pun la dispozitie acest al doilea tip de acces includ DSP16xx (AT&T), toate
procesoarele Analog Devices, toate procesoarele Motorola, PD7701x (NEC), D950-CORE (SGS-
Thomson) si ZR3800x (Zoran). Procesoarele ce folosesc primul tip de acces includ DSP32C si
DSP32xx (AT&T), PineDSPCore si OakDSPCore (DSP Group), TMS320C2x si TMS320C5x (TI),
si familia Z893xx (Zoran). Alte procesoare, cum ar fi TMS320C3x, TMS320C4x si TMS320C54x
9
suporta ambele tipuri de acces pentru instructiuni diferite. TMS320C1x nu ofera transfer paralel de
nici un fel, permitand doar un acces la memorie pe ciclu instructiune.
Cele doua tipuri de transfer paralel sunt corelate cu tipurile de codare in limbaj de
asamblare, stationare temporal si cu stationare in date, discutate in Capitolul 9.
10
instructiune executata care nu utilzeaza toata puterea setului de instructiuni constituie un argument
pentru un set de instructiuni mai mic, mai putin ortogonal, mai greu de programat dar mult mai
eficient din punct de vedere al utilizarii memoriei.
Exista cateva modalitati frecvent folosite pentru a obtine o functionalitate mai mare cu un
set de instructiuni cu latime a cuvantului de instructiune mai mic la procesoarele DSP cu
instructiuni codate cu 16 biti:
- Reducerea numarului de operatii. Executind mai putine operatii se elibereaza biti din
cuvantul de instructiune pentru alte scopuri. De exemplu, DSP16xx (AT&T) nu are instructiuni de
rotatie.
- Reducerea numarului de moduri de adresare. Procesoarele cu lungimi ale cuvantului
instructiune mai mare pun la dispozitie o mare varietate de moduri de adresare disponibile pentru
toate instructiunile. Procesoarele cu o lungime mai mica a cuvantului instructiune au mai putine
moduri de adresare si un numar limitat de moduri de actualizare pentru adresarea indirecta prin
registri. De asemenea pot fi limitate combinatiile valide de operatii si moduri de adresare.
- Restrictii asupra operanzilor sursa/destinatie. Familia DSP561xx (Motorola) este
tipica pentru justificarea acestei solutii. De exemplu, a doua deplasare paralela intr-o instructiune
poate folosi doar un anumit registru (R3) pentru generarea adreselor. Similar, alegerea sursei
operanzilor la o instructiune de multiplicare determina cate scrieri sau citiri paralele sunt permise.
- Utilizarea bitilor de mod. Texas Instruments foloseste aceasta abordare la familiile
TMS320C1x si TMS320C2x, dar mai ales la TMS320C5x. Aceste procesoare folosesc bitii de mod
stocati in registri dedicati pentru a determina partial ce face o instructiune. De exemplu,
TMS320C5x nu are instructiuni separate de deplasare aritmetica si logica. In schimb un bit de
deplasare intr-un registru de control determina daca instructiunea de deplasare este aritmetica sau
11
logica. Similar, instructiunea de deplasare a acumulatorului ia numarul de biti cu care are loc
deplasarea dintr-un registru special si nu dintr-o valoare codata in cuvantul instructiune.
Majoritatea acestor optiuni cresc dificultatea de programare, dar cuvantul instructiune este mai scurt
ceea ce reduce pretul total al procesorului si sistemului.
12
Capitolul 8
Algoritmii DSP implica adesea executia repetata a unui numar mic de instructiuni numite
cicluri interne (kernels). Filtrele FIR si IIR, FFT, inmultirea matricilor si o multime de alte aplicatii
elementare sunt toate realizate prin executarea repetata a unei instructiuni sau a unei secvente de
instructiuni. Procesoarele DSP au evoluat pentru a include caracteristici care sa le permita
manevrarea eficienta a acestor tipuri de activitati repetate. Pentru a intelege aceasta evolutie,
trebuie analizate problemele asociate abordarilor traditionale ale acestor forme de executie repetata
a instructiunilor.
In primul rand, o abordare naturala a ciclului foloseste o instructiune de salt (branch
instruction) pentru a reveni la punctul de inceput a ciclului. Cum este mentionat in Capitolul 7 si
discutat in amanuntime in Capitolul 9, de obicei instructiunile de salt necesita cateva cicluri de tact
pentru fi executate. In special pentru cicluri mici incarcarea buclei (respectiv cresterea timpului de
executie) datorata instructiunilor de salt poate fi considerabila.
In al doilea rand, deorece majoritatea ciclurilor sunt executate de un numar fix de ori,
procesorul trebuie sa foloseasca un registru index pentru a contoriza numarul de instructiuni din
bucla si un registru index pentru a contoriza numarul de parcurgeri a ciclului. Calea de date a
procesorului trebuie folosita pentru a incrementa/decrementa indexul si pentru testarea valorii sale,
pentru a stabili daca au fost executate toate instructiunile si pentru a aduce procesorul la inceputul
buclei. Toate aceste activitati sporesc incarcarea buclei si folosesc in plus registri care ar putea fi
utilizate in alte scopuri.
Procesoarele DSP au evoluat, pentru a evita problemele datorate ciclurilor asistate software,
spre tehnici cunoscute sub numele “zero-overhead looping”. Mecanismele hardware de control a
1
buclelor sunt unitati speciale de control hardware care repeta de un anumit numar de ori o singura
instructiune sau un grup de instructiuni. Principala diferenta intre ciclurile hardware si cele software
este aceea ca ciclurile hardware nu consuma timp pentru incrementarea sau decrementarea
contoarelor si pentru a verifica daca ciclul este incheiat, pentru a reveni la inceputul ciclului. De
exemplu, figurile 8.1 (a) si 8.1 (b) prezinta un filtru FIR implementat in limbaj de ansamblare pe
doua procesoare DSP, unul cu cicluri asistate software si celalalt cu cicluri executate hardware.
Ciclul software necesita in general de trei ori mai mult timp pentru a fi executat, presupunand ca
toate instructiunile sunt executate intr-un singur ciclu de tact. De fapt, instructiunile de salt necesita
cateva cicluri de tact pentru a fi executate, deci avantajul ciclurilor hardware este si mai evident.
3
repetate este mai scazut daca contorizarea numarului de repetari este specificata folosind datele
imediate (alta solutie ar consta in folosirea unui contor de repetare mapat in memorie).
O varianta a ciclurilor hardware, intalnita la unele procesoare (de exemplu, Motorola-
DSP5600x si Zoran - ZR3800x) este urmatoarea: un ciclu numarat ca zero determina procesorul sa
repete ciclul de un numar maxim de ori. Atata timp cat dimensiunea buclelor este fixa aceasta nu ar
fi o problema; poate fi o problema daca in timpul rularii programul determina dinamic numarul de
repetitii. Daca zero este o numarare posibila a repetitiilor (adica nu se repeta deloc ciclul), un test
conditional si o instructiune de salt trebuiesc plasate inainte de startul ciclului pentru a evita
executia buclei daca numararea executiei ar fi zero.
Adancimea de intrepatrundere
Un ciclu imbricat (nested loop) este un ciclu plasat in interiorul altui ciclu. Majoritatea
aplicatiilor care folosesc cicluri hardware au nevoie doar de unul singur. In unele aplicatii,
introducerea unui ciclu in altul poate fi eficienta si convenabila. De exemplu, calculul transformatei
Fourier rapide are nevoie de trei cicluri imbricate.
Cele mai comune abordari pentru executia ciclurilor hardware imbricate sunt:
- Imbricare directa. Unele procesoare, inclusiv toate procesoarele DSP de la
Motorola, Analog Devices si NEC - PD7701x, permit ca ciclurile hardware sa fie imbricate prin
introducerea instructiunilor unui ciclu hardware in interiorul altui ciclu. Adancimea de intre-
patrundere variaza de la trei (NEC - PD7701x) pana la sapte nivele (procesoarele Motorola).
Procesoarele care pot executa cicluri hardware direct imbricate folosesc cite o stiva separata (doar
pentru ciclurile hardware) care contine adresa de inceput a ciclului, adresa de sfarsit si numarul de
repetitii.
4
- Imbricare partiala. Procesoarele care executa cicluri hardware mono si multi-
instructiune permit ca un ciclu mono-instructiune sa fie introdus intr-un ciclu multi-instructiune,
chiar daca ciclurile multi-instructiune nu pot fi imbricate.
- Imbricare software. La procesoarele TMS320C3x si TMS320C5x (TI) ciclurile
hardware pot fi imbricate salvand starea diversilor registri ai ciclului ( startul, sfarsitul ciclului si
indexul ciclului) si apoi executand o noua instructiune din ciclu. In functie de numarul de cicluri
interioare si exterioare, aceasta ar fi o abordare mai buna decat folosirea unei instructiuni de salt
pentru ciclul interior. Reamintim ca o instructiune de ramificare produce o incarcare suplimentara la
fiecare iteratie in timp ce salvarea restaurarea registrilor ciclului trebuie facuta doar odata la fiecare
parcurgere a ciclului.
- Lipsa imbricarii. Exista procesoare DSP (TMS320C2x, DSP16xx, DSP32xx –
AT&T) care nu accepta cicluri hardware imbricate .
5
un sistem propriu de intreruperi, folosit ca mijloc principal de dialog cu dispozitivele periferice sau
pentru tratarea unor situatii anormale de functionare.
In continuare vor fi analizate aspecte privind functionarea sistemului de intreruperi la
procesoarele DSP.
Sursele de intreruperi
Intreruperile provin din surse variate, incluzind:
- perifericele incorporate. Majoritatea procesoarelor poseda o varietate de periferice
incorporate (on-chip peripheral) cum ar fi porturi seriale, paralele, timere, etc., care genereaza
intreruperi cand sunt indeplinite anumite conditii.
- Linii de intreruperi externe. Sunt linii de comanda care pot fi utilizate de elementele
externe pentru a comanda o intrerupere.
- Intreruperi software. Numite si exceptii sau capcane (traps), acestea sunt intreruperi
generate sub control software sau datorate unei operatii initiate prin software. Exemplele includ:
capcanele pentru cod ilegal, exceptiile pentru functionarea in virgula mobila (division by zero,
overflow, underflow, etc.) si altele
Atat perifericele incorporate cat si liniile de intrerupere sunt discutate in detaliu in Capitolul
10.
Vectorii de intrerupere
Fiecarei surse de intrerupere ii este asociat un vector de intrerupere cu ajutorul caruia
microprocesorul stabileste legatura intre sursa intreruperii si subrutina de tratare asociata. Dupa cum
am mentionat mai sus, o intrerupere face ca procesorul sa inceapa executia de la o anumita locatie
de memorie, alta decit cea indicata de valoarea curenta a PC. De fapt, toate procesoarele asociaza o
adresa diferita de memorie cu fiecare intrerupere. Intreruperile vectorizate simplifica programarea
deoarece programatorul nu mai trebuie sa cunoasca care sursa de intreruperi a generat intreruperea;
aceasta informatie este continuta implicit in vectorul de intrerupere. Fara vectorizarea intreruperilor
programatorul trebuie sa verifice fiecare sursa posibila de intrerupere pentru a vedea cine a generat
respectiva intrerupere, crescand timpul de raspuns la intrerupere.
Vectorii de intrerupere tipici au o lungime de unul sau doua cuvinte si sunt localizati in zona
inferioara de memorie (low memory). Locatia accesata cu vectorul de intrerupere contine de obicei
un salt sau o instructiune de apel a unei subrutine care poate fi plasata oriunde in memoria de
program. La unele procesoare locatiile corespunzatoare vectorilor de intrerupere sunt distantate la
cateva cuvinte. Aceasta permite ca scurte rutine de intreruperi sa fie localizate direct la adresa
indicata de vectorul de intrerupere, eliminand instructiunile de salt si de revenire. La alte
6
procesoare, locatia indicata de vectorul de intrerupere nu contine de fapt o instructiune; ea contine
doar adresa rutinei de intrerupere.
Activarea intreruperilor
Toate procesoarele ofera mecanisme pentru activarea/dezactivarea globala a intreruperilor.
Pe anumite procesoare aceasta s-ar putea face prin instructiuni de speciale de activare sau
dezactivare, in timp ce pe altele ar implica scrierea intr-un registru special de control. Majoritatea
procesoarelor permit activarea individuala a intreruperilor pentru fiecare sursa de intreruperi.
Latenta intreruperilor
Latenta intreruperii este timpul de raspuns al procesorului la aparitia unei intreruperi.
Latenta intreruperilor poate varia semnificativ de la o familie de procesoare la alta. Latenta mica a
intreruperii poate fi un factor important in special pentru controlul aplicatiilor in timp real. Aceasta
deoarece furnizorii de procesoare folosesc definitii gresite, vagi sau contradictorii ale latentei
intreruperilor (sau a conditiilor in care este masurata). Definitia formala a latentei intreruperii
precizeaza timpul minim garantat in anumite conditii de la aparitia unei cereri de intrerupere externa
si pana la executia primului cuvant din vectorul de intrerupere. Acest timp este masurat in cicluri
instructiune. Citeva detalii legate de aceasta definitie:
- Majoritatea procesoarelor testeaza starea liniilor externe de intrerupere la sfirsitul
fiecarui ciclu instructiune. Pentru a recunoaste aparitia unei intreruperi intr-un anumit ciclu
instructiune, linia de intreruperi trebuie sa fie activata un anumit cu un anumit timp inainte de
inceputul ciclului instructiune, acest timp fiind numit timp de stabilire (set-up). Deoarece
7
dispozitivul de intrerupere nu are cum sa garanteze ca va indeplini conditiile timpului de set-up al
procesorului, presupunem ca aceste conditii de set-up nu sunt indeplinite. Aceasta mareste latenta
intreruperii cu un ciclu.
- Dupa ce o linie de intreruperi a fost testata cu tactul procesorului este tipic trecuta
prin cateva etape de retinere pentru a evita problemele de metastabilitate. Aceasta etapa este numita
sincronizare. In functie de procesor, aceasta poate adauga unul pana la trei cicluri instructiune
latentei intreruperii.
- Din acest moment intreruperea este tipic recunoscuta ca valida si nerezolvata
depinzind de procesor. Daca procesorul nu este intr-o stare intreruptibila, procesarea intreruperii
este intarzaiata pana cand procesorul intra intr-o stare intreruptibila. Exemplele de stari
neintreruptibile includ dezactivarea unei intreruperi sub control software, executia de catre procesor
a unei alte intreruperi, executia unui ciclu hardware care dezactiveaza intreruperile, executia unui
ciclu multi-instructiune sau procesorul este intarziat datorita starilor de asteptare cand acceseaza
memoria externa. In definitia data latentei intreruperii s-a presupus ca procesorul se afla intr-o stare
intreruptibila care tipic inseamna ca poate executa instructiunea cea mai scurta.
- Procesorul trebuie apoi sa termine executia instructiunilor care sunt deja procesate in
pipeline. Presupunem ca aceste instructiuni reprezinta toate instructiunile care se executa intr-un
singur ciclu instructiune. In paralel cu aceasta, procesorul poate incepe sa incarce si procese din
primul cuvant al vectorului de intrerupere. Definitia data latentei intreruperii include timpul in care
primul cuvant al vectorului de intrerupere este trecut prin prima etapa de executie a pipeline-ului.
Conform descrierii de mai sus unele procesoare nu stocheaza un cuvant instructiune chiar in
locatia vectorului de intrerupere. La aceste procesoare, locatia vectorului de intrerupere contine mai
degraba numai adresa rutinei de intrerupere, iar procesorul executa salt la aceasta adresa. Pe aceste
tipuri de procesoare, definitia latentei de intrerupere include timpul de salt la rutina de intreruperi.
Acest timp nu este inclus pentru procesoarele care contin instructiuni la vectorul de intrerupere,
aceasta deoarece rutina de intreruperi poate in unele situatii sa se afle chiar la locatia indicata de
vectorul de intrerupere. In alte situatii acest lucru nu este posibil si timpul necesar procesorului
pentru a executa o instructiune de salt trebuie luat in consideratie in calculul latentei intreruperii.
Unele procesoare (AT&T - DSP32C si DSP32xx) ofera intreruperi rapide (fast). La
procesoarele Motorola o intrerupere este clasificata ca fiind rapida daca primele doua instructiuni
de la locatia vectorului de intrerupere nu sunt inserate direct in pipeline si executate fara salt,
reducand latenta intreruperii. Latenta intreruperii este strans legata de managementul si adancimea
pipeline-ului.
8
Mecanisme pentru reducerea intreruperilor
Unele procesoare, ca cele din familia DSP-21xx (Analog Devices) sau TMS 320C54x
(Texas Instruments) poseda etaje tampon (autobuffering) la porturile lor seriale. Aceasta
caracteristica permite portului serial sa-si salveze direct in memoria procesorului datele primite, fara
a-l intrerupe. Dupa ce un anumit numar de date a fost transferat, portul serial intrerupe procesorul.
De fapt aceasta este o forma specializata de DMA.
8.3 Stiva
Toate procesoarele DSP poseda instructiuni de salt ca una dintre cele mai simple forme de
control al executiei. In unele aplicatii (calculatoarele personale multimedia multitasking) o forma de
salt, cunoscuta ca saltul relativ la PC, poate fi extrem de utila. In salturile relative la PC, adresa la
care procesorul executa saltul este specificata ca offset la adresa curenta. Adresarea relativa la PC
9
este utila pentru crearea programelor independente de pozitie. Un program independent de pozitie
este acela care poate fi localizat oriunde in memorie. Daca toate referintele la memorie sunt
specificate relativ la alte locatii din codul programului, atunci nu este nici o greutate daca programul
este incarcat in alta parte a memoriei de fiecare data cand este rulat. Pe de alta parte, daca un
program contine referinte absolute la o alta locatie de memorie atunci programul nu mai pote fi
realocat fara a modifica aceste referinte.
In plus, prin folosirea codului independent de pozitie, saltul relativ la PC poate economisi
memorie de program in anumite situatii. In majoritatea programelor, salturile tind sa fie neglijabil
de scurte. Ca rezultat, frecvent offset-ul de la instructiunea curenta la instructiunea destinatie nu are
nevoie sa fie reprezentat de o instructiune cu lungime maxima. Ca urmare, offset-ul, poate fi
continut chiar in instructiunea de salt, rezultand o semnatura de offset de lungime redusa. De
exemplu, OakDSPCore (DSP Group) ofera o instructiune de salt cu o valoare a semnaturii de offset
de 7-biti.
10
Capitolul 9
Functionarea pipeline
1
Intr-o implementare pipeline a acestui procesor imediat dupa ce prima instructiune a fost
incarcata, incepe incarcarea urmatoarei instructiuni, s.a.m.d. Similar, imediat ce a fost decodata
instructiunea curenta incepe decodarea urmatoarei instructiuni. Rezulta ca in cazul folosirii tehnicii
pipeline procesorul executa o noua instructiune la fiecare 20 ns, ceea ce inseamna o crestere de 4
ori a vitezei de lucru. In Figura 9.2 este aratat un lucru interesant: cu toate ca fiecare instructiune
este executata pe durata a mai multi cicli instructiune ele apar pentru programator ca fiind
executate intr-un singur ciclu.
Exemplul de functionare considerat este asemanator cu cel folosit de procesorul
TMS320C3x (Texas Instruments).
2
9.3 Interblocarea
Secventa de lucru aratata in Figura 9.2 prezinta o suprapunere perfecta, deoarece fazele
pipeline-ului se imbina perfect si ofera o utilizare de suta la suta a etajelor functionale ale
procesorului. In realitate, procesoarele nu lucreaza atat de bine ca in exemplul dat. Cea mai
comuna explicatie pentru aceasta este conflictul accesului la resurse. De exemplu, presupunem ca
procesorul considerat are nevoie de doua cicluri instructiune (40ns) pentru a scrie date in memorie.
(acesta este cazul procesoarelor AT&T - DSP16xx.) Daca instructiunea I2 incearca sa scrie in
memorie si instructiunea I3 are nevoie sa citeasca din memorie, al doilea ciclu instructiune pentru
I2 prezinta un conflict in faza de scriere a datelor cu operatia de citire a datelor ceruta de I3.
Aceasta este ilustrata in Figura 9.3, ciclul extins de scriere este evidentiat printr-un chenar negru si
conflictul dintre I2 scriere/I3 citire este redat prin casuta hasurata.
3
O observatie importanta care se desprinde din aceasta este ca timpul de executie al unui
procesor cu pipeline cu interblocare variaza in functie de instructiunile pe care le executa. De
exemplu, daca instructiunea I3 din exemplul nostru nu ar fi avut nevoie sa citeasca date din
memorie atunci nu ar mai fi aparut un conflict, deci nu ar mai fi fost necesara interblocarea. Acesta
complica optimizarea codului pe un procesor cu interblocare deoarece nu este usor sa se determine
momentele in care trebuie facuta interblocarea doar citind codul programului.
De asemenea, pot fi prevazute si alte scenarii de conflict la accesarea resurselor. De
exemplu, unele procesoare poseda instructiuni cu date imediate cu format lung. Acestea sunt datele
care fac parte din instructiune, dar care nu au loc in cuvantul instructiune. Pentru aceste date
procesorul foloseste un ciclu suplimentar de citire din memorie pentru a extrage datele. In
consecinta citirea datelor imediate cu format lung intra in conflict operatia de extragere a codului
urmatoarei instructiuni rezultand o interblocare.
Exemplele de mai sus arata sursele de conflicte care apar in pipeline si unde interblocarea
este singura solutie posibila; fara interblocare, in aceste exemple ar aparea rezultate eronate. In alte
cazuri lipsa interblocarii poate genera rezultate care nu sunt eronate, dar nu corespund intentiilor
programatorului. Vom ilustra acest lucru cu un exemplu pentru procesorul DSP5600x (Motorola),
un procesor care foloseste foarte putin operatia de interblocare.
Ca majoritatea procesoarelor DSP, DSP5600x are registri de adrese care sunt folositi
pentru “adresarea indirecta cu registru”. Un efect interesant la nivelul pipeline-ului apare la
executia urmatoarei secvente de instructiuni:
MOVE #$1234, R0
MOVE X: (R0), X0
Prima instructiune incarca adresa hexazecimala 1234 in registrul de adrese R0. A doua
instructiune transfera continutul locatiei din bancul de memorie X, indicata de registrul de adrese
R0, in registrul X0. De asteptat ar fi ca instructiunile de mai sus sa transfere valoarea stocata la
adresa 1234 a memoriei X in registrul X0. Totusi, datorita efectelor de pipeline, instructiunile de
4
mai sus nu sunt executate in modul in care ne-am fi asteptat. Pentru a intelege de ce, este necesara
o scurta examinare a pipeline-ului procesorului DSP5600x.
Procesorul DSP5600x foloseste un pipeline cu trei etaje. Operatiile executate de ALU
(adunare, inmultire, etc.), accesarea datelor (citirea si scrierea datelor din memorie, ca in exemplul
de mai sus) si incarcarea registrilor sunt realizate in etapa de executie. Adresele folosite pentru
accesarea datelor sunt generate in etapa de decodare. Acest lucru creaza o stare nedeterminata a
pipeline-ului (hazard) – apare o problema datorata pipeline-ului, pe care programatorul trebuie sa
o evite pentru a obtine rezultate corecte. In acest exemplu, prima instructiune MOVE modifica un
registru de adrese folosit in generarea adreselor, dar modificarea nu este reflectata in adresele
folosite in timpul acesului datelor pentru a doua instructiune MOVE.
Figura 9.5 prezinta in detaliu acest hazard. Se remarca ca aceasta figura este usor diferita
fata de figura precedenta in felul cum arata folosirea resurselor procesorului (inclusiv memoria si
unitatile de executie). O astfel de situatie este denumita uzual “tablou de rezervare” (rezervation
table).
5
pot fi inserate alte cateva instructiuni (sau chiar NOP) intre cele doua instructiuni MOVE, pentru a
da pipeline-ului timp sa obtina valoarea corecta in R0.
Procesoarele TMS320C3x, TMS320C4x, TMS320C5x (Texas Instruments) prezinta
aceasta problema dar folosesc interblocarea pentru a proteja programatorul de hazard. De exemplu,
TMS320C3x detecteaza scrierea in oricare dintre registrii sai de adrese si opreste inaintarea in
pipeline a altor instructiuni care folosesc orice registru de adrese pana cind scrierea a fost
terminata. Aceasta este ilustrata in Figura 9.6. In acest exemplu, o instructiune LDI (“incarca
imediat”) incarca o valoare intr-un registru de adrese, la fel ca prima instructiune MOVE din
exemplul cu DSP5600x. A doua instructiune este MPYF (“inmultire in virgula mobila”) care
foloseste adresarea indirecta cu registru pentru a extrage unul din operanzi. Deoarece instructiunea
MPYF foloseste unul din registrii de adrese, prin interblocare este oprita etapa de decodare pana
cand instructiunea LDI este finalizata. Aceasta pentru ca procesorul executa doua instructiuni
NOP.
6
multe cicluri de instructiuni. In mod curent, un salt multi-ciclu se executa intr-un numar de cicluri
egal cu adancimea pipeline-ului, desi pentru a economisi un ciclu de instruciuni, unele procesoare
folosec artificii pentru executa saltul tarziu in etapa de decodare.
O alternativa a saltului multi-ciclu este “saltul intarziat” care nu goleste pipeline-ul. Atunci
cateva dintre instructiunile care urmeaza saltului sunt executate nomal, dupa cum este ilustrat in
Figura 9.8. Un efect secundar al saltului intarzaiat este ca instructiunile care vor fi executate
inainte de salt trebuie sa fie localizate in memorie dupa instructiunea de salt:
BRD NEW_ADDR ; Salt la o noua adresa.
INST 2 ; Aceste trei instructiuni sunt executate inainte de aparitia
INST 3 ; saltului
INST 4 ;
Salturile intarzaiate sunt numite astfel deoarece, pentru programator, efectul saltului pare a
fi intarzaiat cu cateva cicluri instructiune.
Aproape toate procesaorele DSP folosesc salturi multi-ciclu. De asemenea, multe ofera
salturi intarziate, inclusiv TMS320C3x, TMS320C4x si TMS320C5x (Texas Instruments).
Procesoarele ADSP-210xx (Analog Devices), DSP32C si DSP32xx (AT&T) si ZR3800x (Zoran)
executa doar salturi intarziate.
Impreuna cu interblocarea, salturile multi-ciclu si intarziate reprezita un compromis intre
o programare usoara si una eficienta. In cel mai rau caz, programatorul poate intotdeauna sa
7
plaseze instructiuni NOP dupa o instructiune de salt intarzaiat si sa obtina acelasi efect ca al
saltului multi-ciclu, dar aceasta cere multa atentie din partea programatorului.
Efectele de salt apar de fiecare data cand apare o schimbare in desfasurarea programului si
nu doar pentru instructiuni de salt. De exemplu: instructiunile de apelare a subrutinelor,
instructiunile de revenire din subrutine si instructiunile de revenire din intreruperi sunt toate
posibile surse de efecte de pipeline ca in prezentarea anterioara. Procesoarele care executa salturi
intarziate poseda de asemenea si reveniri intarziate.
8
Figurile 9.10 si 9.11 arata doua dintre cele cateva scenarii posibile de procesare a
intreruperilor de catre procesorul DSP5600x (Motorola). Se observa imediat anumite diferente fata
de procesorul TMS320C5x.
In primul rand, pentru a incepe procesarea, procesorul are nevoie de doua cicluri de
instructiuni dupa recunoasterea intreruperii. In al doilea rand, DSP5600x nu foloseste instructiuni
INTR pentru a comuta executia la adresa specificata de vectorul de intrerupere. In schimb,
procesorul incepe pur si simplu extragerea codurilor de la adresa data de vector dupa ce o
intrerupere a fost recunoscuta. Cu toate acestea, cel mult doua cuvinte sunt incarcate de la aceasta
adresa. Daca unul dintre cele doua cuvinte este apelul unei subrutine (Figura 9-10), procesorul
elimina instructiunea incarcata anterior si apoi executa saltul la o adresa specificata printr-un
vector lung de intrerupere (long interrupt vector). Daca nici un cuvant nu este un apel al unei
subrutine, procesorul executa cel mult doua cuvinte si continua sa execute din programul original,
cum este ilustrat in Figura 9-11. Aceasta a doua forma a rutinei de intreruperi este numita
intrerupere rapida. Intreruperile au fost analizat in Capitolul 8.
9
Modele de programare pipeline
Exemplele din sectiunile anterioare au fost concentrate pe pip-eline-ul de instructiuni, pe
comportamentul sau si pe interactiunea cu alte parti ale procesorului in diferite situatii. In aceasta
sectiune vom discuta pe scurt doua forme majore de limbaj de ansamblare pentru procesoarele cu
pipeline: timp-stationar si date-stationare.
In modelul de programare cu timp stationar, instructiunile procesorului specifica actiunile
care sa fie facute de unitatile de executie (multiplicator, acumulator s.a.m.d.) in timpul unui singur
ciclu instructiune. Familia DSP16xx (AT&T) este un bun exemplu unde instructiunea multiplica-
acumuleaza arata in felul urmator:
A0=A0+P P=X*Y Y=*R0++ P=*Pt++
Acumulatorul adauga produsul precedent (din registrul P) la continutul sau precedent,
multiplicatorul inmulteste registrii X si Y si plaseaza rezultatul in registrul produs, registrii X si Y
sunt incarcati cu valorile de la locatiile de memorie indicate de registrii R0 si Pt. De remarcat ca
fiecare portiune a instructiunii lucreaza cu operanzi diferiti.
Programarea cu date stationare specifica operatiile care vor fi facute, dar nu si timpii exacti
la care operatiile vor fi executate. Ca exemplu sa consideram urmatoarele instructiuni de ale
DSP32xx (AT&T):
A1=A1+(*R5+ + = = * R4 + +) * *R3 + +
Valorile de la locatiile de memorie indicate de registrii R3 si R4 sunt descarcate si inmultite.
Valoarea indicata de registrul R4 este scrisa inapoi la locatia de memorie indicata de registrul R5.
Rezultatul inmultirii este acumulat in registrul A1. De remarcat ca acest tip de cod urmareste un
singur set de operanzi printr-o secventa de operatii.
Spre deosebire de instructiunile procesorului DSP16xx, abordarea datelor stationare
foloseste operanzi care se refera direct la memorie. In loc sa inmulteasca doi registrii, instructiunea
inmulteste doua locatii de memorie. Valorile acestor locatii de memorie sunt incarcate si aduse la
multiplicator, dar programatorul nu specifica aceasta operatie in mod direct ca in cazul metodei
timpului stationar. Procesorul programeaza apoi secventele de acces la memorie si le muta fara o
directie explicita.
Abordarile cu date stationare si timp stationar au fiecare rostul lor. In general, modelul
datelor stationare este mai usor de citit dar nu este atat de flexibil precum abordarea cu timp
stationar.
10
Capitolul 10
O interfata seriala transmite si primeste datele bit cu bit. Spre deosebire, porturile paralele
trimit si primesc date in format paralel, sub forma de cuvinte de 8, 16 sau 32 de biti. Desi
interfetele seriale nu sunt la fel de rapide ca cele paralele (in ceea ce priveste numarul de bit i
transferati pe secunda), ele folosesc un numar mai redus de pini de interfata (numai 3 sau 4 pentru o
interfata seriala completa).
Porturile seriale prezente pe chip-urile DSP sunt folosite pentru aplicatii variate, incluzind:
transmiterea si primirea esantioanelor de date catre si de la convertoarele si codecurile
(codoare/decodoare) A/D si D/A
trimiterea si primirea de date catre si de la alte microprocesoare sau DSP-uri
comunicatia cu alte periferice si componente externe
Exista doua mari categorii de interfete seriale: sincrone si asincrone. Un port serial sincron
transmite bitii de date impreuna cu un semnal de ceas. Receptorul foloseste acest semnal pentru a
decide cand sa preia datele primite serial.
In cazul interfetelor seriale asincrone datele nu sunt insotite de un semnal de ceas
suplimentar. Ele se bazeaza pe faptul ca receptorul va recupera semnalul de ceas din datele primite,
lucru care complica interfata seriala si limiteaza viteza maxima de transmisie a datelor. Porturile
seriale asincrone sunt de obicei folosite pentru comunicatii conform standardelor RS-232 sau RS-
422. Desi exista procesoare care poseda porturi seriale asincrone (de exemplu, Motorola -
DSP5600x si cateva procesoare din familia μPD7701x - NEC), numarul lor este redus.
Aproape toate procesoarele DSP asigura unul sau mai multe porturi de interfata seriala
sincrona pe chip. Tipic, fiecare port permite transmisia si receptionarea de informatii in mod serial.
In continuare sunt prezentate unele particularitati ale interfetelor seriale sincrone.
1
Datele si tactul
Dupa cum s-a mentionat, un transmitator serial sincron trimite un semnal de ceas sub forma
unui bit pe care interfata seriala de la receptie il foloseste pentru a determina intervalul in care bitii
de date sunt valizi. Figura 10.1 reprezinta formele de unda pentru o transmisie seriala sincrona.
Toate interfetele sincrone presupun ca transmitatorul modifica datele pe unul din fronturile
semnalului de ceas (fie pe frontul crescator fie pe cel descrescator) si ca datele devin stabile (nu se
mai modifica) pe celalalt front. In figura, datele se schimba pe frontul crescator al ceasului si sunt
citite la receptie pe frontul descrescator. Totusi, diferite interfete seriale sau periferice pot prezenta
relatii diferite intre semnalul de ceas si date. Ca rezultat, unele porturi seriale incorporate in DSP-uri
permit programatorului sa aleaga “polaritatea” ceasului, de fapt care dintre fronturi controleaza
momentul schimbarii datelor.
Fig 10.1
Majoritatea, dar nu toate circuitele de interfata seriala, folosesc o logica pozitiva, respectiv
o tensiune pozitiva (tipic 3,3 V sau 5 V) pe linia seriala de date reprezinta un “1” logic, iar o
tensiune scazuta (aproape 0 V) reprezinta un “0” logic. La unele circuite DSP polaritatea datelor
poate fi selectata de programator.
O alta problema o reprezinta ordinea in care sunt transferati bitii de date. In figura 10.1 se
presupune ca, cuvintele de date au 8 biti lungime si sunt transmise cu cel mai putin semnificativ bit
(LSB) primul. Nu toate echipamentele care folosesc protocoale de comunicatii seriale accepta
aceasta conventie; la unele primul bit transmis este cel mai semnificativ bit (MSB). Prin urmare,
interfetele seriale ale unor DSP-uri permit selectarea directiei, respectiv a ordinii de transmisie.
Porturile seriale permit diverse lungimi ale cuvintelor de date. Valorile obisnuite sunt: 8 biti
(folosit in aplicatii din telefonie) si 16 biti (folosit la reprezentarea semnalului audio digital); totusi
unele porturi seriale accepta si alte lungimi ale cuvintelor.
Sincronizarea cadrelor
Interfetele seriale sincrone folosesc un al treilea semnal, in plus fata de date si ceas, numit
semnal de sincronizare a cadrelor (frame sync.). Acest semnal indica receptorului primul bit al unui
2
cuvant de date transmis pe o linie seriala. Semnalul de sincronizare de cadre este cunoscut si sub
alte denumiri: unii producatori il numesc semnal de sincronizare de cuvinte (“word sync”) sau
semnal de inceput de cuvant (“start of word”).
Pentru semnalele de sincronizare de cadre sunt disponibile doua formate: lungime de bit
(“bit length”) si lungime de cuvant (“word length”). Aceste denumiri se refera la durata semnalului
de sincronizare de cadre raportata la durata unui bit de date. Un semnal de sincronizare de cadru de
tip „lungime de bit” dureaza timp de un bit si este transmis de obicei cu un bit inainte de
transmiterea primului bit al cuvantului de date, dar poate poate fi transmis si simultan cu
transmiterea primului bit al cuvantului de date. Semnalul de sincronizare de cadre aratat in figura
10.1 este un semnal de tip “lungime de bit”. Spre deosebire, un semnal un semnal de sincronizare de
cadre de tip “lungime de cuvant” dureaza intreaga lungime a cuvantului de date. Un exemplu de
astfel de semnal este aratat in figura 10.2. Majoritatea DSP-urilor ofera semnale de sincronizare de
cadre “lungime de bit” , dar exista si multe care ofera semnale de tip “lungime de cuvant”.
Anumite echipamente externe pot sa accepte un semnal de sincronizare de cadre cu polaritae
inversa, respectiv are un nivel logic 0 pe durata cuvintului de date si 1 pe durata pauzei dintre
cuvinte. Relativ putine DSP-uri permit alegerea polaritatii semnalului de sincronizare de cadre.
4
ajunge la zero la iesire este generat un impuls, dupa care numaratorul se reincarca cu valoarea de
numarat.
Unele generatoare de ceas de pe DSP-uri nu includ un numarator programabil, fortand
utilizatorul sa selecteze una dintre frecvente de ceas disponibile. Altele asigura numai un numarator
(fara prescalare), care s-ar putea sa nu poata reduce frecventa de ceas la valoarea dorita.
Fig. 10.4 a, b
Figura 10.4(b) prezinta un set tipic de semnale seriale care sunt prezente intr-o retea TDM.
Un procesor (sau un circuit extern) este responsabil cu generarea semnalului de ceas si de
sincronizare de cadre. Semnalul de sincronizare de cadre este folosit pentru a indica inceputul unui
nou set ferestre de timp. Dupa sincronizarea de cadru, fiecare procesor trebuie sa tina cont de
5
numarul ferestrei de timp curente si sa transmita numai in fereastra atribuita lui. Un cuvant de date
(16 biti in figura) ar putea contine un numar de biti care sa indice DSP-ul destinatie (de exemplu 2
biti pentru 4 procesoare) in timp ce restul contin date. O alta varianta foloseste o a doua linie de date
pentru a transmite adresele de sursa si destinatie in paralel cu cuvantul de date.
Intr-o varianta minima, suportul TDM presupune ca procesorul este capabil sa-si puna linia
de transmisie de date a portului serial in stare de impedanta inalta atunci cand procesorul nu
transmite. Aceasta permite altor DSP-uri sa transmita date in timpul ferestrelor atribuite fara a
produce conflicte. Unele porturi seriale au un suport aditional, ca de exemplu un registru care face
portul serial sa transmita in timpul unei anumite ferestre de timp. Fara acest suport, procesorul ar
trebui sa primeasca datele transmise catre toate celelalte procesoare si sa elimine datele care nu ii
sunt adresate si pentru a stabili cand ii vine randul sa transmita.
6
10.2 Porturile paralele
Un port paralel transmite si primeste simultan mai multi biti de date (tipic 8 sau 16 biti), pe
linii separate. Porturile paralele pot sa transfere de obicei date, mult mai repede decat cele seriale,
insa au nevoie de mai multe linii si pini pentru aceasta. Pe langa un numar mai mare de linii de
date, un port paralel de obicei include si linii de comanda a transferului (denumite linii de
handshake sau de strobe). Aceste linii indica unui echipament extern ca datele au fost transmise
catre port de catre DSP, sau invers.
Unele DSP-uri folosesc principala magistrala de date a procesorului ca port paralel. De
obicei fac aceasta rezervand o parte a spatiului lor de adrese (sau folosesc o instructiune speciala)
pentru acces I/O prin magistrala externa. Cand este accesata acea adresa de memorie (sau cind
instructiunea I/O este executata) este activat un pin special de strobe sau handshake, iar procesorul
executa un ciclu pe magistrala externa de citire sau scriere a unei date de la/catre un dispozitiv I/O.
Un echipament extern care monitorizeaza acest pin va sti ca trebuie sa citeasca sau sa scrie de la sau
catre pinii de date externi ai procesorului. Aceasta abordare este destul de obisnuita si este folosita
de majoritatea DSP-urilor Texas Instruments.
Alte DSP-uri, ca de exemplu familia AT&T DSP16xx, asigura porturi paralele separate de
magistrala externa a procesorului. Acesti pini pot fi folositi doar de portul paralel sau pot fi pusi in
comun cu alte periferice. Separand portul paralel de magistrala externa de date a procesorului se
poate simplifica interfatarea cu alte echipamente externe.
Aceste intrari/iesiri se refera la un port paralel de I/O unde liniile pot fi programate
individual sa fie linii de intrare sau de iesire. Spre deosebire de porturile I/O traditionale, porturile
de I/O de bit nu au de obicei asociate linii de strobe sau handshake si pot sa nu aiba suport de
intreruperi. Prin program procesorul trebuie sa verifice portul pentru a stabili daca valorile de
intrare s-au schimbat. Acest port I/O este folosit in scop de control insa uneori este folosit si pentru
transfer de date.
Majoritatea DSP-urilor asigura cel putin una sau doua linii I/O de bit, desi altele pot sa aiba
citeva zeci. Pe unele procesoare porturile I/O de bit sunt puse in comun cu alti pini de periferice.
De exemplu pe Motorola DSP5600x unii dintre pinii asociati unui port serial pot fi configurati
pentru folosire ca port I/O de bit daca aplicatia nu are nevoie sa foloseasca portul serial. Pe alte
procesoare porturile I/O de bit pot sa foloseasca pini dedicati.
Multe procesoare au instructiuni speciale a caror executie depinde de starea portului I/O de
bit. De exemplu majoritatea procesoarelor Texas Instruments in virgula fixa, au un pin de intrare de
7
bit numit “BIO” si de asemenea poseda o instructiune speciala (BIOZ – „ramifica daca starea
portului I/O de bit este zero”) care se transfera controlul la adresa specificata de instructiune daca
starea pinului BIO este zero. In felul acesta poate fi monitorizata starea unui dispozitiv extern.
Procesorul TMS320C14 (Texas Instruments) si familia de DSP-uri AT&T DSP16xx au
porturi de I/O de bit mai sofisticate. Pe langa posibilitatea de a configura individual liniile ca intrari
sau iesiri si posibilitatea de a seta sau reseta bitii, aceste porturi I/O de bit verifica in mod continuu
starea porturilor I/O de bit pentru a stabili daca bitii de intrare se potrivesc unui model
preprogramat. Pe DSP16xx, rezultatul acestei comparatii seteaza starea a 4 fanioane: toti bitii se
potrivesc modelului, unii dintre biti se potrivesc modelului, unii dintre biti nu se potrivesc
modelului si nici un bit nu se potriveste modelului. Aceste fanioane pot fi apoi folosite in
instructiuni cu executie conditionata. De exemplu, folosind o unitate I/O de bit, o instructiune
DSP16xx poate incrementa conditionat un registru daca unul din doi biti specificati este setat.
Unitatea I/O de bit a procesorului TMS320C1x poate intrerupe procesorul cand modelul intrarilor
se potriveste cu modelul memorat.
8
10.5 Porturi de comunicatie
Comunicatiile interprocesoare sunt necesare cind o aplicatie DSP necesita mai multe
procesoare sau acolo unde sunt folosite mai multe procesoare pentru a manipula mai multe secvente
de date interconectate. Un port de comunicatii este un port paralel special destinat pentru
comunicatia multiprocesor. Un port de comunicatii difera de un port gazda sau de un port paralel
obisnuit in doua feluri: In primul rand este facut pentru comunicatia interprocesor intre acelasi tip
de DSP-uri (spre deosebire de conectarea unor diferite tipuri de procesoare sau conectarea la
periferice). In al doilea rand porturile de comunicatii nu asigura in general functii speciale pentru
controlul procesorului DSP, cum este cazul porturilor gazda.
Procesoarele TMS320C4x (Texas Instruments) si ADSP-2106x (Analog Devices) sunt
singurele DSP-uri cu porturi de comunicatii. TMS320C40 si ADSP-2106x au 6 porturi de
comunicatii in timp ce TMS320C44 are 4; porturile TMS320C4x sunt fiecare de 8 biti latime in
timp porturile ADSP-2106x sunt de 4 biti latime. Din moment ce ambele procesoare au o lungime
a cuvantului de date de 32 de biti, porturile de comunicatii ale ambelor procesoare asigura suport
FIFO pentru fragmentarea si reasamblarea cuvintelor mai mari cand acestea sunt transmise prin
porturile de comunicatii relativ inguste.
Porturile de comunicatie au instructiuni dedicate care usureaza folosirea lor. Uzual ele
lucreaza in regim DMA; datele prezente la port sunt scrise automat in memoria DSP.
Practic toate DSP-urile au circuite timer programabile. Acestea sunt folosite de obicei ca o
sursa de intreruperi periodice (adica semnal de ceas pentru un sistem de operare in timp real), dar
sunt posibile si alte aplicatii. De exemplu, unele DSP-uri contin un pin de iesire care furnizeaza un
semnal rectangular cu o frecventa generata de catre timer. Deoarece frecventa este controlata
software, aceasta iesire poate fi considerata ca un oscilator controlat software, util pentru
implementarea unor cicluri de faza constanta
In esenta, un timer seamana mult cu un generator de ceas al unui port serial, fiind compus
dintr-o sursa de semnal de ceas, un cicuit de prescalare si un numarator dupa cum se arata in fig.
10.5. Sursa de semnal de ceas este de obicei ceasul principal al DSP-ului, insa unele DSP-uri
folosesc si un semnal extern ca sursa de semnal de ceas.
Scopul prescalatorului este de a reduce frecventa sursei de ceas astfel incat numaratorul sa
poata numara perioade mai lungi de timp. El face acest lucru divizand frecventa sursei de ceas cu
una din mai multe valori selectabile. De exemplu, familia de procesoare Analog Devices - ADSP-
21xx, prescalatorul foloseste o valoare pe 8 biti , divizand ceasul cu un factor de la 1 la 256, iar la
9
familia AT&T - DSP16xx prescalatorul foloseste o valoare reprezentata cu 4 biti pentru a diviza
ceasul.
Numaratorul foloseste acest semnal prescalat ca o sursa de semnal de ceas, in mod obisnuit
numarand descrescator de la o valoare prestabilita pe fiecare front crescator al ceasului.
Numaratorul intrerupe de obicei procesorul cind ajunge la zero. In acest moment numaratorul poate
sa se reancarce cu valoarea anterioara sau poate sa se opreasca, functie de configuratie.
Majoritatea registrilor numarator folosite de circuitele DSP au 16 biti, ceea ce asigura un
domeniu larg de frecvente care pot fi generate. Pe majoritatea circuitelor, utilizatorul poate citi
valoarea stocata in registrul numarator. Aceasta permite DSP-ului sa citeasca registrul numarator la
inceputul si la sfarsitul unui eveniment, calculand astfel durata acestuia.
La procesoarele DSP56000 si DSP56001 (Motorola), generatorul de tact este conectat cu
generatorul de ceas serial asincron. Pentru a folosi si generatorul de tact si generatorul serial de
ceas, pe aceste DSP-uri utilizatorul trebuie sa aleaga o frecventa comuna acceptabila pentru ambele
aplicatii.
Dupa cum s-a mentionat, unele DSP-uri, in mod optional, pot oferi pe un pin de iesire
semnalul de ceas generat. Acest lucru poate fi folositor fie pentru un circuit PLL controlat software
fie pur si simplu pentru un sintetizator de frecventa. Totusi majoritatea DSP-urilor au generatoare
de tact capabile sa genereze doar intreruperi si care nu au pini de iesire.
Fig. 10.5
Unele DSP-uri folosite in aplicatii de voce (de exemplu telefoane digitale celulare sau roboti
telefonici) au convertoare A/D si D/A integrate (numite codec–uri), care pot realiza si compandarea
esantioanelor. Astfel esantioanele semnalului reprezentate in mod normal cu 14÷16 biti sunt
comprimate de regula la 8 biti. Compandarea se efectueaza dupa o anumita regula (uzual legea A
sau legea µ).
Exista un numar de criterii de evaluare a performantelor codec-urilor incorporate:
10
- rezolutia (exprimata in biti) de reprezentare binara a valorii esantioanelor. Tipic, codec-
urile asigura o rezolutie de 8 sau de 16 biti;
- rata de esantionare. Majoritatea codec-urilor produc si accepta esantioane la o rata de 8
Kes/s. Procesoarele din familia Motorola DSP561xx, produc sau primesc esantioane la o rata
cuprinsa intre 16 si 24 Kes/s. In unele cazuri procesorul DSP poate sa proceseze datele pentru a le
reesantiona la o rata dorita;
- raportul semnal/zgomot+distorsiuni. Acest parametru este raportul dintre puterea
semnalului (tipic o sinusoida) si puterea zgomotului si a distorsiunilor introduse de codec. El
reprezinta o masura a fidelitatii codec-ului. Valoarea acestui raport creste odata cu semnalul de
intrare pina la o valoare maxima si apoi scade rapid. De obicei producatorii indica aceasta valoare
maxima care este apropiata de 65 dB. Valoarea acestui parametru poate fi specificata si separat
pentru canalul de intrare respectiv iesire a codec-ului;
- numarul canalelor de intrare analogice. Majoritatea codec-urilor pe incorporate au la
intrare un circuit de multiplexare analogic care permite DSP-ului sa accepte mai multe surse de
semnal;
- castigul de iesire programabil. Codec-urile asigura de obicei castig de iesire programabil
insa domeniul de castig si dimensiunea pasului poate varia;
- oprirea analogica. Un avantaj semnificativ pentru controlul puterii consumate de procesor
este posibilitatea de a opri portiunea analogica a codec-ului cand aceasta nu este folosita.
Doua familii de procesoare cu suport A/D si D/A incorporat in chip sunt DSP561xx
(Motorola) si ADSP-21msp5x (Analog Devices). Ambele familii poseda codec-uri cu rezolutie de
16 biti si o rata de esantionare efectiva de 8 kHz.
Majoritatea DSP-urilor poseda linii de intreruperi externe. Acestea linii care pot fi activate
de un dispozitiv pentru a comanda intreruperea procesorului. Liniile de intrerupere sunt de doua
categorii:
- cu declansare de front. Un front crescator sau descrescator pe pin activeaza intreruperea.
- cu declansare pe palier. Un nivel inalt sau scazut pe pin activeaza intreruperea.
Unele DSP-uri asigura linii numai cu declansare de nivel sau de front, in timp ce altele
permit liniei de intrerupere sa fie configurata sa fie oricare din cele doua. In general, intreruperile
declansate pe front sunt executate mai rapid decit intreruperile declansate de palier care pot pune
restrictii asupra duratei minime de activare a liniei pentru ca cererea sa fie recunoscuta.
Numarul de linii de intrerupere variaza pentru diferite procesoare, dar majoritatea poseda
intre una si patru linii de intrerupere externe. In general nucleele DSP poseda un numar mai mare de
11
linii de intrerupere decat procesoarele incapsulate. Aceasta deoarece majoritatea DSP-urilor
incapsulate au si un numar de periferice incorporate care folosesc propriile linii de intrerupere
interne. Spre deosebire, majoritatea nucleelor DSP nu au periferice incorporate pe nucleu. Cand
periferice sunt adaugate in afara nucleului, ele folosesc propriile linii de intrerupere.
10.10 Exemple
12
Periferice incorporate:
Generator de stari de wait programabil si comutator de bancuri de memorie programabil
Generator de tact programabil oscilator intern si cu circuit PLL
Port serial ful duplex cu transfer pe 8/16 biti
Port serial cu multiplexare prin divizarea timpului
Port serial cu buffer
Port paralel gazda pe 8 biti
Timmer pe 16 biti
Generatorul de stari de wait programabil poate fi utilizat pentru extensia ciclului extern de
magistrala cu pina la 7 cicli masina pentru sincronizarea procesorului cu memoriile externe sau cu
dispozitivele I/O mai lente. Starile de wait generate prin software nu necesita hardware extern
suplimentar.
Comutarea programabila a bancurilor de memorie poate fi utilizata pentru a insera automat un
ciclu atunci cind se face comutarea de la un banc de memorie de cod sau de date la alt banc. Acest
ciclu suplimentar permite bancului de memorie sa elibereze magistrala inainte ca un alt dispozitiv sa
o foloseasca. In felul acesta se elimina posibilitatea aparitiei conflictelor de magistrala.
Portul gazda de 8 biti este folosit pentru conectarea procesorului gazda cu un alt dispozitiv DSP.
Prin intermediul unei memorii interne de 2KB asociate portului gazda sunt schimbate informatii
intre gazda si un dispozitiv DSP. Memoria portului gazda poate fi accesata atit de procesorul gazda
cit si de circuitul DSP.
Procesorul are 3 porturi seriale: un port serial ful duplex standard, un port serial cu multiplexare
prin divizarea timpului (TDM), un port serial cu buffer.
Sectiunile pentru transmisie si pentru receptie ale portului serial standard au semnale de tact, de
sincronizare a cadrelor si registre pentru serializsare/deserializare separate. Functionarea poate fi
gestionata prin software si cu ajutorul sistemului de intreruperi mascabile.
Portul serial cu multiplexare TDM permite circuitului sa comunice cu pina la 7 dispozitive care
poseda port TDM.
Portul serial cu buffer este o varianta mai performanta a portului serial standard. Prin intermediul
unei unitati speciale autobuffer portul poate citi/scrie direct date din/in memoria circuitului folosind
o magistrala proprie. In acest fel se accelereaza transferul de date cu memoria. Portul poate
transfera pachete de date de 8, 10, 12, 16 biti.
Procesorul are un timmer de 16 biti cu circuit de prescalare de 4 biti. Timmerul lucreaza prin
decrementare. Cind ajunge la valoarea zero timmerul genereaza o cerere de intrerupere.
Generatorul de tact este constituit dintr-un oscilator si un circuit PLL. Generatorul de tact necesita
un semnal de referinta care poate fi generat intern cu un cristal de cuart sau este primit din exterior.
Semnalul de referinta poate fi divizat intern sau poate fi multiplicat cu circuitul PLL pentru a obtine
13
tactul procesorului. Circuitul PLL este un sistem adaptiv care mentine semnalul de tact in
sincronism cu semnalul de referinta. Cind se folosesc instructiunile pentru reducerea consumului
(IDLE1/IDLE2/IDLE3) circuitul PLL realizeaza reducerea frecventei de tact pentru scaderea
consumului.
14
15
II. DSP 56002 (Motorola)
Dispozitive periferice:
Port gazda de 15 biti cu acces DMA. Liniile pot fi folosite si ca porturi I/O de uz general
Port serial sincron/asincron cu 6 canale, cu sectiuni separate de transmisie sau receptie
Port serial de comunicatie cu 3 canale
Timer/contor de evenimente de 24 de biti
Suport TDM cu pina la 32 de sloturi de timp selectabile
Sintetizator de frecventa cu bucla PLL pentru frecvente cuprinse intre 12,2 KHz si 80 MHz.
16
multichannel capability that allows the receiving or transmitting of
arbitrary data words from a 24-word or 32-word bitstream. The other
serial port, SPORT1, may optionally be configured as two additional
external interrupt pins (IRQ1 and IRQ0)and the Flag Out (FO) and Flag In
(FI) pins.
1.3.2 Timer
The programmable interval timer provides periodic interrupt generation.
An 8-bit prescaler register allows the timer to decrement a 16-bit count
register over a range from each cycle to every 256 cycles. An interrupt is
generated when this count register reaches zero. The count register is
automatically reloaded from a 16-bit period register and the count
resumes immediately.
1.3.3 Host Interface Port (ADSP-2111, ADSP-2171, ADSP-21msp5x)
The host interface port (HIP) is a parallel I/O port that allows for an easy
connection to a host processor. Through the HIP, an ADSP-21xx DSP can
be used as a memory-mapped peripheral of the host. The HIP operates in
parallel with and asynchronous to the ADSP-21xx’s computational core
and internal memory. The host interface port consists of registers through
which the ADSP-21xx and the host processor pass data and status
information. The HIP can be configured for: an 8-bit data bus or 16-bit
data bus; a multiplexed address/data bus or separate address and data
buses; and separate read and write strobes or a read/write strobe and a
data strobe.
1.3.4 DMA Ports (ADSP-2181)
The ADSP-2181 contains two DMA ports, and Internal DMA Port and a
Byte DMA Port. The IDMA port provides an efficient means of
communication between a host system and the DSP. The port is used to
access the on-chip program memory and data memory of the DSP with
only one cycle per word of overhead. The IDMA port has a 16-bit
multiplexed address and data bus and supports 24-bit program memory.
The IDMA port is completely asynchronous and can be written to while
the ADSP-2181 is operating at full speed.
The internal memory address is latched and then automatically
incremented after each IDMA transaction. An external device can
therefore access a block of sequentially addressed memory by specifying
only the starting address of the block.
The byte memory DMA controller allows loading and storing of program
instructions and data using the byte memory space. The BDMA circuit is
able to access the byte memory space while the processor is operating
normally and steals only one processor cycle per 8-, 16- or 24-bit word
transferred.
1.3.5 Analog Interface
The analog interface of the ADSP-21msp58/59 consists of input amplifiers
and a 16-bit sigma-delta analog-to-digital converter (ADC) as well as a
sigma-delta digital-to-analog converter (DAC) and a differential output
amplifier.
17
Facilitati pentru depanare si gestionarea consumului
Depanarea reprezinta una dintre cele mai dificile etape ale proiectarii. Acest lucru este
valabil in mod special pentru sistemele integrate care lucreaza in timp real, la care accesul la
componentele depanate poate fi foarte limitat si la care poate fi dificil de rulat in alt mod, decat in
timp real. Ca rezultat, elementele care faciliteaza depanarea au devenit tot mai importante pe
masura ce a crescut complexitatea sistemelor.
Una dintre cele mai importante inovatii in acet sens este emularea in circuit bazata pe
scanare (ICE), care combina circuitele de depanare de pe procesor cu pini dedicati pentru
depanare/testare, pentru a permite depanarea functionarii DSP-ului in timp ce acesta este instalat in
sistemul tinta. Depanarea prin emulare in circuit a devenit destul de populara la DSP-uri in ultimii
ani, desi multe alte abordari relative la depanare sunt inca in folosinta (emularea in circuit pe baza
de pod, depanarea bazata pe monitorizare).
In capitol vor fi prezentate facilitatile de depanare bazate pe verificare oferite pe chip.
Emularea bazata pe verificare foloseste un mic numar de pini dedicati (pana la 4) si o logica
dedicata pentru depanare si emulare in circuit, dupa cum se arata in figura 11.1. Interfetele bazate
pe verificare se conecteaza de obicei la un calculator (PC sau statie de lucru) gazda cu o placa de
interfata speciala. Software-ul de depanare executat pe PC sau pe statia de lucru permite
utilizatorului sa descarce programe, sa examineze si sa modifice registrii si memoria, sa puna sau sa
stearga puncte de intrerupere si sa efectueze alte functii pe DSP in timp ce este instalat in sistemul
tinta.
1
Emularea bazata pe verificare este mult mai putin invaziva decat alte abordari referitoare la
emularea in circuit. Nu are nevoie de scoaterea fizica a procesorului din sistemul tinta si de
inlocuirea acestuia cu un procesor emulator impreuna cu componentele anexa. In loc de aceasta,
placa de interfata pentru depanare din computerul gazda se conecteaza la un conector dedicat din
sistemul tinta, rezultand mai putine legaturi fizice si probleme electrice.
Alt avantaj al depanarii pe baza de verificare este acela ca circuitul de depanare dedicat de
pe chip asigura vizibilitatea unor aspecte ale executiei procesorului care nu sunt disponibile cu
tehnicile conventionale. De exemplu circuitele de depanare pe baza de pod de la Motorola permit
utilizatorului sa examineze continutul liniei de transmisie a procesorului dupa generarea unei
intreruperi.
Emularea pe baza de verificare este frecvent asociata cu “verificarea pe granita” o tehnica
de testare devenita populara in anii 1980. Testarea prin verificarea pe granita (boundary-scan test),
cunoscuta si ca standardul JTAG, se refera la standardul IEEE 1149.1 care defineste un set de reguli
de proiectare pentru facilitarea testarii, programarii si depanarii dispozitivelor semiconductoare la
nivel de cip, de placa si la nivel de sistem. Testarea prin verificarea pe granita presupune
introducerea in cip a unor circuite speciale de test care sa faciliteze testarea circuitului la nivel de
placa si a placii insasi. Aceste circuite suplimentare permit scanarea intrarilor si a iesirilor intr-o
maniera seriala, prevazind circuitul doar cu un numar mic de pini de acces. Beneficiile acestei
tehnici de testare sunt mai multe: reducerea semnificativa a numarului de puncte fizice de testare de
pe placa, cresterea densitatii componentelor pe placa, reducerea timpului de acces pe piata a
produsului, reducerea costului legat de operatiile de testare, cresterea eficientei productiei,
automatizarea operatiei de testare, s.a. Un dispozitiv care satisface cerintele standardului JTAG
poseda: 1) o celula de margine la fiecare linie I/O, 2) o cale de scanare care conecteaza aceste celule
in serie, 3) 4 sau 5 pini suplimentari pentru manipularea semnalelor JTAG, 4) un port pentru
accesare care controleaza semnalele de testare (Test Access Port – TAP), 5) un controler cu 16 stari
a acestui port pentru controlul stadiului operatiei de testare. In mod normal de functionare celulele
de margine permit trecerea semnalelor de intrare/iesire catre/de la pinii I/O. Cind dispozitivul este
plasat in modul „Test” celulele de margine devin active permitind introducerea sau captura
semnalelor de test. Celulele de margine sunt realizate din registri de deplasare cu multiplexare
localizate la periferia circuitului. Caracteristicile logicii de testare a unui circuit care satisface
cpecificatiile standardului JTAG sunt definite intr-un fisier extern denumit BSDL (Boundary-Scan
Description Language) care este oferit de producatorul circuitului si este folosit pentru definirea si
generarea algoritmilor pentru realizarea operatiei de testare. Testarea unui dispozitiv sau a unei
placi pe baza acestei tehnologii consta din urmatoarele etape: a) testerul extern aplica la intrarile
dispozitivului secventele de test, b) celulele de margine de la intrari capteaza semnalele de intrare,
2
c) datele de intrare sunt scanate sau deplasate serial in nucleul dispozitivului, d) datele de iesire
rezultate sunt preluate serial de la nucleul dispozitivului si e) testerul extern compara datele de
iesire cu valorile martor. In felul acesta pot fi identificate defecte de tipul: scurtcircuite sau
intreruperi, lipsa unor componente, componente prost plasate sau defecte. Verificarea pe granita
asigura un mijloc neinvaziv de testare a interconectarii intre circuite, simplu si eficient.
Este interesant ca majoritatea procesoarelor DSP care suporta depanarea pe chip bazata pe
interfata JTAG nu permite verificarea pe granita. Microprocesoarele si DSP-urile au din ce in ce
mai mult capabilitati de depanare pe baza de verificare. DSP-urile care folosesc JTAG pentru
depanarea pe baza de verificare includ: familia ADSP-210xx (Analog Devices), familia DSP16xx
(AT&T), familia μPD7701x (NEC), familiile TMS320C2xx, TMS320C3x, TMS320C4x,
TMS320C5x, TMS320C54x, TMS320C80 (Texas Instruments). Toate procesoarele Motorola cu
exceptia familiilor DSP56000, DSP56001 si noua familie DSP563xx, au o facilitate de depanare
bazata pe verificare numita OnCE (On Chip Emulation) care foloseste un protocol serial propriu,
similar cu JTAG. (DSP56000 si DSP56001 nu au emulare pe chip, iar familia DSP563xx foloseste
JTAG pentru a accesa propriile facilitati de emulare de pe chip).
Capabilitatile de depanare hardware existente pe chip variaza foarte mult. Ca un minim,
toate procesoarele cu depanare hardware pe chip permit utilizatorului sa citeasca si sa scrie registrii
procesorului si memoria. Majoritatea asigura unul sau doua puncte de intrerupere (numite si puncte
de intrerupere cu potrivire de adresa). Aceste puncte de intrerupere sunt implementate incarcand o
adresa in componentele de depanare de pe chip, spre deosebire de inlocuirea unei instructiuni din
programul procesorului cu o instructiune software capcana. Un avantaj al punctelor de intrerupere
hard pe unele procesoare este ca pot fi de asemenea folosite pentru a opri procesorul cand acesta
incearca sa acceseze o locatie de memorie de date (spre deosebire de o locatie a memoriei de
program). Componentele de depanare de pe chip asigura un “tampon de urmarire a
discontinuitatilor de program”, care economiseste valorile numaratorului de program pentru
ultimele cateva momente de ramificare sau cand procesorul a raspuns unei intreruperi. Aceasta
informatie de anterioritate poate fi folositoare in a intelege de ce procesorul a ajuns sa execute o
anumita portiune de cod.
Furnizorii de procesoare DSP nu descriu de obicei posibilitatile exacte ale componentelor de
emulare pe chip in documentatia de procesor. (Motorola este o exceptie, asigurand o documentatie
detaliata asupra portului “OnCE”). In loc de aceasta, utilizatorul trebuie sa isi dea seama de
capabilitatile prezente dupa ceea ce ofera uneltele de emulare software ale procesorului.
3
11.2 Consumul de energie si managementul acestuia
Numarul de aplicatii DSP portabile a crescut dramatic in ultimii ani. DSP-urile sunt acum
folosite in mod obisnuit in echipamentele portabile (telefoanele celulare, pagere, PDA-uri,
computere laptop si echipamente audio). Toate aceste aplicatii necesita alimentare de la baterii, iar
viata bateriei este o diferentiere cheie intre produse. Ca rezultat, proiectantii cauta mereu noi moduri
de a reduce consumul.
Furnizorii de DSP-uri au raspuns acestei provocari in multiple feluri. In primul rand,
aproape toti producatorii au introdus DSP-uri care functioneaza la tensiune scazuta, capabile de a fi
folosite la tensiune de alimentare nominala de 3 sau 3,3 V. In al doilea rand, multi furnizori au
adaugat capabilitati de management al puterii sub control soft sau hard. Ambele variante sunt
discutate in continuare.
Nota
Folosim termenul “nominal” cand ne referim la tensiunea de alimentare ale DSP-urilor. In
mod tipic, componentele electronice cum sunt procesoarele DSP, pot functiona intr-o gama de +/-
10% in jurul tensiunii de alimentare nominale. Astfel, un echipament de 3,3V poate opera intre 3 si
3,6V. Similar un echipament de 3V poate opera intre 2,7 si 3,3V. Intr-o incercare de a castiga un
avantaj pe piata, unii comercianti au declarat tensiunea de alimentare minima in descrierea
procesoarelor. Acest lucru poate crea o confuzie: o componenta descrisa ca functionand la 3V
4
inseamna ca tensiunea sa nominala de alimentare este 3V sau 3,3V? Pentru consistenta, vom folosi
valori de tensiuni nominale pe parcursul prezentarii.
In unele cazuri, DSP-uri de tensiune scazuta, sunt de fapt componente de 5V capabile de a
functiona la tensiuni mai scazute. In astfel de cazuri, tactul sistemului trebuie redus, pentru a
permite operarea la tensiuni mai joase. Furnizorii de DSP-uri au inceput de asemenea sa introduca
variante “adevarate” de 3V a DSP-urilor lor, capabile de a functiona la viteza maxima la 3 sau 3,3V.
Procesoare DSP cu tensiune scazuta includ: familiile AT&T - DSP16xx si DSP32xx;
ADSP-2103 ADSP-2173, ADSP-2183 si ADSP-2106x (Analog Devices), PineDSPCore si
OakDSPCore (DSP Group), IBM - MDSP2780, Motorola - DSP56L002 si DSP563xx; NEC -
μPD77015, μPD77017 si μPD77018, SGS-Thomson - D950-CORE, Texas Instruments -
TMS320LC3x, TMS320LC5x, TMS320VC54x si TMS320C80.
5
de consum redus. Procesoarele care au pini de comanda a regimului de consum redus pot avea si un
pin de confirmare a regimului de consum redus prin care semnaleaza circuitelor externe ca
procesorul a intrat in modul adormit.
Procesoarele din familia TMS320C5x (TI) au un regim de consum redus (power-down
mode) in care consumul este sensibil mai redus decit in regimul normal de lucru. Procesorul intra
in acest regim prin executia instructiunilor IDLE1/IDLE2 sau prin activarea liniei HOLD cind bitul
de stare HM este setat. Cind procesorul este comutat in regimul de consum redus toata starea
interna este conservata; aceasta permite reluarea functionarii cind procesorul iese din acest regim.
Dupa executia instructiunii IDLE1 perifericele interne continua sa functioneze; in schimb, cind este
executata instructiunea IDLE2 tot procesorul, inclusiv perifericele interne, intra in regim de consum
redus.
Latenta de trezire poate fi o preocupare in unele aplicatii. Latenta de trezire este timpul
necesar pentru a iesi dintr-un mod adormit si a relua executia normala. In cazurile cand procesorul
foloseste un ceas extern ca ceas principal, aceasta latenta este de obicei de 1 sau 2 cicluri
instructiune. Dupa cum se va discuta ulterior, un procesor poate folosi un oscilator intern in
combinatie cu un cristal extern pentru a genera un semnal de ceas. In acest caz, daca modul adormit
dezactiveaza oscilatorul intern, o latenta de trezire de mii (chiar zeci de mii) de cicluri de
instructiuni poate fi necesara pana cand oscilatorul se stabilizeaza. O problema similara are loc cu
ceasurile comandate cu circuite PLL (oscilatoare cu calare de faza) de pe chip: oprirea PLL-ului
reduce consumul de putere, insa PLL-ul poate avea nevoie de un interval semnificativ de timp cand
reporneste.
6
macrocelule de divizare a ceasului pentru nucleele DSP, PineDSPCore si OakDSPCore.
TMS320LC31 si TMS320C32 (Texas Instruments) au o instructiune LOPOWER care reduce
frecventa de ceas cu factorul 16.
Unele DSP-uri (de exemplu, procesoarele familiei AT&T - DSP16xx) pot folosi un oscilator
pe chip de mica viteza ca sursa de ceas principal. Desi nu e la fel de flexibil ca un divizor de ceas,
care suporta multiple viteze, totusi e suficient pentru multe aplicatii.
7
Procesoare digitale de semnal in virgula fixa
Familia TMS320C2000
TMS320C2000 este o familie de procesoare care opereaza in virgula fixa pe 16/32
biti. Arhitectura Harvard a familiei TMS320 este destinata special aplicatiilor de prelucrare
digitala a semnalelor in timp real. Procesoarele din generatia C2000 ofera facilitati de
prelucrare de inalta preformanta cu periferice de tip microcontroler la un pret de cost redus.
In prezent familia contine doua tipuri de procesoare: TMS320C24x (procesoare pe 16 biti,
care executa 40 MIPS) si TMS320C28x (procesoare pe 32 biti cu o productivitate de pina la
400 MIPS). Structura lor este data in Fig. 1 si in Tabelul 1 sunt date principalele caracteristici
ale procesoarelor din fiecare familie.
1
Fig. 1
Tabelul 1
2
Arhitectura C2000 foloseste doua magistrale principale: una pentru coduri si una pentru date.
Magistrala pentru coduri este destinata transferului codului instructiunilor si a operanzilor de
tip imediat din memoria de program. Magistrala pentru date interconecteaza elementele
functionale, cum ar fi CPU si memoria pentru date. In felul acesta arhitectura Harvard
maximizeaza puterea de prelucrare asigurind accesarea simultana a codurilor si a datelor cu
viteza mare. Prin modificarea arhitecturii Harvard clasice la procesoarele familiei C2000 pot
fi executate transferuri intre memoria pentru coduri si memoria pentru date. Aceasta face
posibila stocarea coeficientilor in memoria pentru program, eliminind necesitatea folosirii
unei memorii ROM separate pentru coeficienti.
Procesoarele C2000 contin trei unitati functionale care lucreaza concurent: controlerul
pentru program, CPU si generatorul de adrese pentru date (DAGEN). Unele functiuni DSP
critice (de exemplu, multiplicarea 16x16 biti intr-un singur ciclu de tact, deplasarea datelor,
prelucrarea adreselor) sunt executate de unitati hardware in timp ce la microprocesoarele de
uz general aceste operatii sunt executate prin software sau prin microcod. De asemenea
procesoarele incorporeaza citeva dispozitive periferice avansate, optimizate pentru functiuni
de control, ceea ce confera procesoarelor calitatile unor microcontrolere performante
(procesoarele din aceasta generatie sunt denumite de firma Digital Signal Controllers). In plus
pentru cresterea performentelor procesoarele C2000 folosesc un pipeline cu patru etaje.
3
Formatul instructiunilor in limbajul de asamblare al procesoarelor C2000 este
urmatorul:
[label] ADD dma[,shift1] ;adresare directa
[label] ADD ind [,shift1[ARn]] ;adresare indirecta
[label] ADD #k ;adresare imediata scurta
[label] ADD #1k[,shift2] ;adresare imediata lunga
unde:
0≤ dma ≤127 -este o adresa pentru memoria de date (sau un simbol definit cu
directiva asamblorului .equ sau .set folosind modul de adresare direct);
0≤ shift1 ≤16 (default 0) -reprezinta numarul de ranguri pentru deplasare la
stinga;
0≤ ARn ≤7 -specifica registrul de adresa pentru urmatoarea instructiune;
0≤ k ≤255 -reprezinta o data imediata de 8 biti;
-32768≤ 1k ≤32767 -este o data imediata de 16 biti;
0≤ shift2 ≤15 -reprezinta numarul de ranguri pentru deplasare la stinga
ind -semnifica modul de adresare indirecta
Acestia sunt operanzii cei mai frecvent folositi de instructiunile limbajului de asamblare a
procesoarelor C2000. Operanzii pot fi constante sau expresii temporare ale asamblorului
referitoare la memorie, porturi I/O, registre, pointeri, contoare pentru deplasari sau diferite
alte constante.
4
5
Fig. 2
Deplasatorul de intrare
Produce o deplasare la stinga cu 0 pina la 16 ranguri a datelor de 16 biti din memoria
pentru program sau pentru date. Deplasarea poate fi indicata fie de un cimp special de biti din
codul instructiunii fie de cei mai putin semnificativi 4 biti ai registrului temporar TREG. Bitii
de ordin inferior ai deplasatorului de 32 de biti sunt completati cu zerouri, iar bitii mai
semnificativi liberi sunt completati fie cu zerouri fie reprezinta o extensie a semnului in
functie de valoarea bitului de extensie a semnului (SXM) din registrul de stare ST1. Bitul
SXM poate fi setat cu instructiunea SETC SXM sau resetat cu instructiunea CLRC SXM.
Deplasatorul de intrare poate fi invocat cu o instructiune de incarcare, cu una de adunare sau
de scadere referitoare la acumulator. De exemplu, instructiunea
LACC dma,shift1
incarca in acumulator data din memorie de la adresa dma, deplasata in prealabil la stinga cu
shift1 ranguri. Similar actioneaza si instructiunea ADD dma, shift1. In ambele cazuri operatia de
deplasare este inclusa in instructiune si nu necesita timp suplimentar pentru executie. In cazul
anterior deplasarea este specificata de codul instructiunii. Exista si posibilitatea ca deplasarea
sa fie indicata de 4 biti de ordin inferior ai registrului TRAG, ca in exemplul urmator:
LACT dma
6
Folosind registrul TRAG este posibil ca factorul de scalare sa fie stabilit in mod dinamic. De
asemenea, deplasatorul de intrare poate fi utilizat pentru multiplicarea unor date cu intregi
care sunt puteri ale lui 2.
Multiplicatorul
Este constituit din patru unitati: matricea de multiplicare de 16x16 biti care genereaza
un produs de 32 de biti intr-un singur ciclu, registrul TREG de 16 biti care furnizeaza unul
dintre operanzii multiplicatorului, registrul pentru produs de 32 de biti – PREG si deplasatorul
pentru produs. Produsul din registrul PREG poate fi transferat in acumulator cu instructiunea
PAC, sau poate fi stocat in memoria de date de 16 biti cu instructiunile SPH (cuvintul mai
semnificativ din PREG), respectiv SPL (cuvintul mai putin semnificativ din PREG).
De exemplu, instructiunea:
LTA dma
incarca in TREG data de la adresa dma, deplaseaza continutul registrului PREG dupa cum
este specificat de bitii de mod pentru deplasarea produsului – PM, si apoi il aduna la
acumulator. In plus, instructiunea:
LTD dma
7
realizeaza operatia LTA plus o operatie de tip DMOV. Aceasta instructiune extrage operandul
pentru multiplicare de la adresa dma si apoi incarca aceasta data in memorie la adresa imediat
superioara. Aceasta operatie este eficienta pentru recircularea datelor dintr-un buffer cum este
cazul filtrelor RFI. Pentru a executa recircularea datelor cu una dintre instructiunile DMOV,
LTD sau MACD esantioanele semnalului trebuie incarcate in buffer dupa cum urmeaza: la
adresa cea mai mica esantionul cel mai recent - x(n), la adresa mai mare urmatoare - x(n-1),
s.a.m.d.
Instructiunea MPY dma aduce cel de al doilea operand al multiplicarii din memorie de
la adresa dma si executa operatia de multiplicare. Deoarece inmultirea a doua numere binare
de 16 biti cu semn produce un rezultat de 32 de biti cu doi biti de semn, stocarea in memoria
de 16 biti a rezultatului impune o deplasare la stinga cu un bit pentru eliminarea bitului
suplimentar de semn si apoi stocarea celor mai semnificativi 16 biti.
Deplasatorul de produs deplaseaza la stinga datele din registrul de PREG. Bitii PM din
registrul de stare ST1 indica modul de functionare a acestui deplasator dupa cum este aratat in
tabelul urmator:
PM Felul deplasarii
00 fara deplasare
01 deplasare stinga 1 bit
10 deplasare stinga 4 biti
11 deplasare dreapta 6 biti
8
Fig. 3, unitatea contine ALU propriu-zis, acumulatorul si deplasatorul de la iesire. Rezultatul
operatiilor efectuate de ALU este stocat in ACC. De exemplu:
ADD dma[,shift1] ;add data in memory to ACC with shift
APAC ;add PREG to ACC
In primul exemplu, continutul locatiei de memorie de la adresa dma este deplasat stinga cu
shift1 biti de deplasatorul de la intrare si apoi este adunat la ACC. In exemplul al doilea
continutul lui PREG este deplasat de deplasatorul de produs dupa cum este indicat de bitii PM
si apoi este adunat la ACC.
Dupa cum este aratat in Fig. 3, acumulatorul ACC de 32 de biti este impartit in doua
segmente de 16 biti: ACCH (bitii b31-B16) si ACCL (bitii b15-b0). ACC poate sa execute
deplasarea sau rotirea continutului. Bitul de transport – C este afectat de operatiile de
adunare/scadere din ACC si de operatiile de deplasare/rotatie a continutului ACC. Bitul C
permite o realizare mai eficienta a operatiilor in precizie extinsa.
Deplasatorul de la iesirea ACC poate executa deplasarea la stinga cu 0 pina la 7 biti.
Deplasarea este executata cind data este transferata din ACC in memorie. Cind deplasatorul
este folosit pentru ACCH bitii mai semnificativi sunt pierduti, iar bitii mai putin semnificativi
sunt incarcati cu bitii mai semnificativi deplasati din ACCL. Cind deplasatorul este folosit
pentru ACCL, bitii mai semnificativi sunt pierduti, iar bitii mai putin semnificativi sunt
incarcati cu zero.
Inmultirea a doua numere de 16 biti cu semn produce un rezultat cu 32 de biti ditre
care doi biti sunt bitii de semn. Fixind bitii PM pentru o deplasare stinga cu un bit poate fie
9
eliminat unul dintre bitii suplimentari de semn. O alternativa consta in a aduna produsele in
ACC fara deplasare si de a elimina bitul suplimentar de semn atunci cind data din ACC este
salvata in memorie cu instructiunea:
SACH yn,1 ;left shift one bit and save ACCH to yn
Avantajul este ca exista un bit de garda in acumulator pentru operatii consecutive de inmultire
si acumulare.
Registrele auxiliare
Dupa cum este aratat in Fig. 4, procesoarele C2000 au 8 registre auxiliare de 16 biti
pentru adresarea datelor din memorie (AR ÷ AR7). In modul de adresare indirecta cu registru,
registrul auxiliar curent, specificat de registrul pointer ARP, este folosit ca pointer pentru
memoria de date. Oricare dintre cele 8 registre auxiliare poate fi utilizat ca pointer pentru
accesarea memoriei de date. Continutul registrelor auxiliare este actualizat de o unitate
aritmetica speciala (ARAU) in paralel cu operatiile executate de ALU. Una din intrarile
ARAU poate fi: cei 8 biti mai putin semnificativi din codul instructiunii, continutul registrului
AR0, sau o data din memorie, iar cealalta este continutul registrului auxiliar curent specificat
de ARP. Prin urmare, accesarea unei secvente de date din memorie nu solicita ALU care
executa in paralel operatii cu datele. Registrele auxiliare si ARP pot fi incarcate cu date din
memorie, ACC, PREG sau cu date imediate. Registrul auxiliar curent este selectat incarcind
in ARP un pointer de adresa de 3 biti. De exemplu, instructiunea MAR *,AR2 incarca 2 in ARP
astfel ca registrul curent folosit de instructiune este AR2. De asemenea, ARP este fixat
indirect de multe instructiuni care folosesc modul de adresare indirect, cu urmatoarea sintaxa:
mnemonic ind[,shift[,ARn]]
unde ultimul cimp optional ARn incarca valoarea lui n in ARP pentru a specifica urmatorul
registru auxiliar. In felul acesta urmatorul AR este stabilit fara a necesita un ciclu suplimentar.
AR poate fi initializat cu instructiunea LAR (Load Auxiliary Register), ca in exemplul
urmator:
LAR AR1,#k (sau#1k)
AR1 este incarcat cu constanta de 8 biti k (sau cu valoarea 1k de 16 biti).
De exemplu, daca ARP = 1, instructiunea:
ADD *+
aduna la acumulator data din memorie adresata cu AR1 si apoi incrementeaza cu 1 continutul
lui AR1. La fel, instructiunea:
ADD *0+
aduna continutul registrului AR curent cu o valoare intreaga fara semn de 16 biti continuta in
AR0 si apoi aduna la ACC data din memorie de la adresa rezultata. Operanzii *BR0+ si *BR0-
genereaza adrese cu inversarea bitilor pentru implementarea algoritmilor TFR.
10
ARAU poate executa sase operatii cu adresare indirecta, secificate in tabelul urmator:
In cazul modului de adresare directa, codul instructiunii contine cei 7 biti mai putin
semnificativi ai dma. Pentru a genera o adresa de 16 biti pentru memoria de date acestia sunt
11
concatenati cu 9 biti furnizati de registrul de selectie a paginii (DP). DP poate selecta una din
512 pagini de memorie fiecare avind 128 de cuvinte. DP poate fi initializat cu instructiunea
LDP (Load Data Page Pointer) sau cu instructiunea LST (Load Status Register).
Registrele de stare
Procesoarele C2000 au doua registre de stare, ST0 si ST1, care contin bitii de stare si
de control. Aceste registre pot fi stocate sau incarcate din memoria pentru date, astfel incit
starea procesorului poate fi salvata/restaurata in vederea executarii subrutinelor. Pentru
aceasta sunt disponibile instructiunile: LST (Load Status Register) si SST (Store Status
Register). Bitii individuali din aceste registre pot fi setati/resetati cu instructiunile
SETC/CLRC. De exemplu:
SETC INTM ;set interrupt mode bit
SETC OVM ;set overflow saturation mode
Controlul programului
Controlerul de program este o unitate functionala independenta care stabileste ordinea
de executie a instructiunilor. El include: contorul de program – PC, stiva si registrii de stare.
Elementele software care pot modifica fluxul programului sunt instructiunile de salt, apelare
si revenire din subrutine, instructiunile conditionate, de repetare si intreruperile.
Contorul de program si stiva
Procesoarele C2000 poseda un contor de program de 16 biti. Cind codul este executat
secvential PC este incrementat cu 1 sau cu 2, dupa cum instructiunea curenta contine unul sau
doua cuvinte. Cind este executata o instructiune de salt PC este incarcat cu o adresa “lunga”,
operand a instructiunii. Cind este executata o instructiune de apelare intii este salvata in stiva
adresa urmatoarei instructiuni si apoi este incarcata adresa de salt specificata de instructiune.
12
Stiva este folosita pe durata executarii intreruperilor si a apelurilor de subrutine.
Procesoarele C2000 folosesc o stiva hardware cu 8 nivele. Cind procesorul executa o
instructiune de apelare sau o intrerupere adresa de revenire este automat salvata in stiva. La
executarea instructiunii de revenire adresa de revenire este transferata din virful stivei in PC.
De asemenea, stiva poate fi accesata si cu instructiunile PUSH si POP. Instructiunile PSHD si
POPD transfera o data din memorie in stiva si invers. Aceste instructiuni pot fi utilizate pentru
organizarea unei stive software in memoria de date pentru imbricarea subrutinelor sau a
intreruperilor care necesita mai mult de 8 nivele pentru stiva.
Continutul ACCL poate fi incarcat in PC pentru a implementa operatii de salt sau de
apelare conditionate de rezultatele calculului. Pentru aceasta sunt disponibile instructiunile
BACC (branch to address specified by ACC) sau CALA (call subroutine at location specified by
ACC).
Executarea salturilor
Procesoarele C2000 poseda citeva instructiuni de salt pentru implementarea
structurilor pentru controlul programului folosite in programele C. Exista doua tipuri de
salturi: neconditionate, respectiv conditionate. Instructiunea de salt neconditionat determina
incarcarea in PC a adresei memoriei pentru program specificata de instructiune. De exemplu:
B dst_label ;branch unconditionally to dst_label
Adresa incarcata in PC, dst_label, este operandul instructiunii. In cazul saltului conditionat
intii sunt evaluate conditiile care determina efectuarea saltului, si in situatia cind aceste
conditii sunt indeplinite acesta este executat. De exemplu, instructiunea:
BCND pma [,cond1][,cond2][,.....] ;branch conditionally
Determina saltul la adresa pma daca toate conditiile specifiate sunt indeplinite. Conditiile care
pot fi specificate sunt prezentate in Tabelul 2.
Executarea buclelor
Cea mai simpla metoda pentru implementarea buclelor consta in folosirea instructiunii
BANZ a carei sintaxa este:
[label] BANZ pma[,ind[,ARn]]
Adresa pma de 16 biti a memoriei de program poate fi o eticheta folosita de limbajul de
asamblare sau o adresa numerica. Programul executa salt la adresa specificata cind ARn nu
este zero. Pentru ca o secventa de program sa fie executata de N ori, secventa este incheiata cu
instructiunea BANZ, iar registrul auxiliar folosit drept contor este initializat cu valoarea N-1
inaintea de a incepe executarea buclei.
Tabelul 2
Operand Conditia Descriere
EQ ACC=0 None
13
NE ACC≠0 ACC not equal to 0
LT ACC<0 ACC less then 0
LEQ ACC≤0 ACC less then or equal to 0
GT ACC>0 ACC greater then 0
GEQ ACC≥0 ACC greater then or equal to 0
C C=1 Carry bit set to 1
NC C=0 Carry bit set to 0
OV OV=1 ACC overflow detected
NOV OV=0 No overflow detected
BIO BIO is low BIO pin is low
TC TC=1 Test/control flag set to 1
NTC TC=0 Test/control flag set to 0
Particularitati de programare
Implementarea algoritmilor DSP necesita realizarea unor operatii speciale, cum sunt
cele de multiplicare si acumulare. De aceea arhitectura si setul de instructiuni a fost optimizat
pentru realizarea eficienta a acestor operatii.
Repetarea instuctiunilor
Instructiunea RPT determina executarea de N-1 ori a instructiunii care urmeaza. De
exemplu, secventa:
RPT #k ;repeat next instruction k+1 time
ADD *+ ;add k+1 samples to the ACC
incarca valoarea k de 8 biti in contorul de repetare (RPTC) determinind executarea
instructiunii ADD de k+1ori. RPTC poate fi incarcat si cu o data din memorie de 16 biti
determinind executarea instructiunii urmatoare de maximum 65536 ori. Dupa extragerea
codului din memoria de program el este introdus intr-un buffer de repetare astfel incit la
repetarea executiei codul este citit din acest buffer. De exemplu, instructiunea TBLR (Table
Read) necesita trei sau mai multi cicli pentru executie dar cind instructiunea este repetata
acest lucru are loc intr-un singur ciclu. De notat ca nu toate instructiunile pot fi repetate.
14
repetare facilitind astfel executarea instructiunii de inmultire si adunare intr-un singur ciclu
cind este folosita instructiunea RPT. Instructiunea MACD realizeaza toate functiunile
instructiunii MAC si in plus executa recircularea datelor in memoria de date.
Configuratia sistemului
Procesoarele familiei C2000 sunt destinate unei game largi de aplicatii care includ
controlul digital al motoarelor si aplicatiile de control dedicate. Procesoarele sunt prevazute
cu periferice incorporate si cu resurse de memorie ROM (sau memorii flash), plus memorii
DARAM sau optional SARAM.
Configurarea memoriei
Capacitatea de adresare a memoriei la procesoarele C2000 este de 192 kcuvinte,
memoria fiind organizata in trei spatii independente: (1) 64 kcuvinte memoria de program, (2)
64 kcuvinte memoria pentru date si (3) 64 kadrese pentru dispozitivele I/O. Cele trei spatii
sunt selectate cu semnalele P S, D S si I S . Dupa cum este aratat in Fig. ... procesoarele
familiei C2000 poseda memorie interna cu diferite capacitatati si moduri de organizare.
Memoria pentru date poate fi configurata prin software in sau in afara spatiului de adrese
pentru aceasta memorie. Cind aceste memoriile pentru date sunt in spatiul propriuprocesorul
executa automat accesul cind adresele sunt in limitele spatiului rezervat. Cind adresele exced
limitele procesorul genereaza o adresa pentru memoria externa. Performantele memoriei
interne sunt mai bune decit ale memoriei externe deoarece nu sunt necesare stari de asteptare
(wait), fluxul in pipeline este mai bun, iar consumul este mai redus.
Memoria interna poate fi configurata cu urmatoarele module de memorie: DARAM,
SARAM, flash (ROM) si ROM pentru pornire (boot). De exemplu, la procesoarele LF2407,
544 cuvine de memorie DARAM sunt inmpartite in trei blocuri: blocul 0 (B0 – 256 cuvinte),
blocul 1 (B1 – 256 cuvinte) si blocul 2( B2 – 32 cuvinte). B1 si B2 sunt localizate in spatiul
memoriei pentru date. B0 poate fi configurat ca memorie pentru date (CNF=1) la adresele
200h - 2FFh sau ca memorie pentru program (CNF=0) la adresele 0FF00h - 0FFF0h. Dupa
initializare blocul 0 este configurata ca memorie pentru date.
Memoria flash ocupa pina la 32 kadrese in spatiul pentru program si reprezinta o
alternativa la memoria ROM realizata prin mascare. Memoria flash este utila pentru etapa de
dezvoltare a produselor.
Cu toate ca procesoarele familiei pot accesa un spatiu relativ mare de memorie
capacitatea memoriei interne este limitata. De aceea sunt disponibile citeva instructiuni pentru
transferul blocurilor de date sau program din memoria externa mai lenta in memoria interna.
De exemplu, instructiunea:
15
BLDD source ,destination
transfera date din memoria de date (interna sau externa) in memoria de date. Folosind
instructiunea RPT impreuna cu BLDD pot fi transferate blocuri de date. Similar, instructiunea
BLPD transfera date din memoria pentru program in memoria pentru date. Urmatoarea
secventa :
LAR AR7,#300h ;AR7←300h
MAR *,AR7 ;ARP←7
RPT #255 ;repeat next instruction 256 times
BLDD #8800h ;block move of 256 data
muta o secventa de 256 coeficienti din memoria externa incepind cu adresa 8800h in blocul
B1 din memoria interna pentru date incepind cu adresa 300h.
O alta metoda pentru transferul unui cuvint din memoria pentru program in cea pentru
date consta in folosirea instructiunii TBLR. TBLW executa transferul invers. Pentru aceste
instructiuni cei 16 biti ai ACCL reprezinta adresa memoriei de program, iar instructiunea
specifica adresa memoriei de date.
Intreruperile
Procesoarele familiei folosesc o intrerupere nemascabila si sase intreruperi mascabile,
controlate prin software. Sursele pentru intreruperi sunt: initializarea (comandata prin
hardware su software), intreruperile generate prin software (cerute pe linii externe sau de la
perifericele incorporate) si intreruperi initiate prin software. Deoarece procesoarele C2000 nu
au suficiente resurse pentru a manipula toate cererile perifericelor, nucleul celor sase
intreruperi (INT1 ÷ INT6) poate fi extins prin folosirea unui controler extern.
16
17
Procesoare digitale de semnal in virgula mobila
Principalele limitari ale procesoarelor in virgula fixa sunt precizia si gama dinamica
redusa. De aceea in cazul implementarilor in virgula fixa este necesara scalarea atenta a
valorii datelor pentru a evita depasirile de scala. Deoarece scalarea implica reducerea gamei
dinamice ea este insotita de scaderea raportului semnal/zgomot in sistemele pentru prelucrarea
semnalelor. In schimb folosirea aritmeticii in virgula mobila ofera o precizie si o gama
dinamica mai buna decit aritmetica in virgula fixa, utila in special in aplicatiile care cer o
precizie mare de calcul cum ar fi actionarile electrice, sistemele pentru comanda robotilor,
grafica pe calculator, s.a. O comparatie privind avantajele si dezavantajele celor doua mari
familii de procesoare de semnal este data in Tabelul 1.
Tabelul 1
Virgula fixa Virgula mobila
Arhitectura de sistem mai simpla Arhitectura de sistem complexa
Programare mai dificila Programare eficienta in
limbajele de nivel inalt
Memorie interna extinsa Necesita extinderea memoriei in
afara cipului
Cost mai redus Cost mai ridicat
Precizie limitata Precizie ridicata si mentinuta
fara operatii suplimentare
Gama dinamica redusa Gama dinamica ridicata
Erorile de calcul sunt rapid
acumulabile
18
inalt pentru programare este mai eficienta datorita arhitecturii orientate pe registri, a folosirii
instructiunilor in virgula mobila, a spatiului mai mare de adrese, a numarului mai mare de
moduri de adresare, a flexibilitatii setului de instructiuni, etc. In plus virgula mobila permite o
trecere mai directa de la mediul de simulare pe un calculator gazda folosind programele
MatLab sau C, catre o implementare in timp real pe un sistem tinta cu procesor DSP. In mod
curent procesoarele in virgula mobila sunt folosite pentru aplicatii performante, ca de exemplu
sisteme pentru videoconferinta, retele de comunicatii cu comutare de pachete, statii de baza
pentru telefonia celulara, sisteme radar si sonar, imagistica digitala, etc.
Familia TMS320 contine trei generatii de procesoare in virgula mobila, respectiv C3x,
C4x si C67x.
TMS320C3x
Structura interna este prezentata in Fig. 1 (5.1). Generatia C3x foloseste o arhitectura
Harvard pe 32 de biti, cu registre de 40 de biti pentru extinderea preciziei. Aceste procesoare
includ unitati de prelucrare in virgula mobila (de exemplu, multiplicator, ALU, deplasator),
facilitati pentru managementul rapid al memoriei cu controler DMA incorporat, un cache
intern pentru instructiuni de 64 cuvinte si un spatiu de adrese de 16 Mcuvinte. Procesorul are
un fisier de registre de uz general, un cache pentru program, doua unitati aritmetice dedicate
pentru registrele auxiliare precum si o memorie interna cu acces dublu.
Viteza de executie este optimizata prin implementarea hardware a unor operatii
frecvent utilizate, cum sunt operatiile repetitive cu blocuri de date, adresarea circulara,
multiplicarea. Sistemul de magistrale interne permite executarea in paralel a operatiilor de
extragere a codurilor, a accesarii datelor (pentru citiri/scrieri) si a transferurilor DMA.
Procesorul foloseste adrese de 24 de biti pentru accesarea cuvintelor de cod si de date de 32
de biti.
Pentru functionarea in sisteme multiprocesor, cu memorie globala partajata, C3x
foloseste cinci instructiuni si doua fanioane I/O externe, care pot fi configurati prin software
ca intrari sau iesiri pentru executarea operatiei de interblocare.
Desi procesorul este folosit mai ales ca procesor pentru operatii in virgula mobila,
operatiile in virgula fixa sunt utile pentru anumite aplicatii, cum sunt prelucrarile de imagini.
Procesoarele C3x executa operatii in virgula fixa, in virgula mobila si operatii logice folosind
instructiuni cu doi sau cu trei operanzi. De asemenea C3x poate executa in paralel multiplicati
si operatii cu ALU cu numere intregi reprezentate in virgula fixa sau cu numere reale
reprezentate in virgula mobila intr-un singur ciclu. Procesoarele familiei pot executa mai
multe tipuri de bucle (buclare hardware pentru instructiuni sau pentru blocuri de program,
19
buclare intirziata pentru multiprocesare, buclare standard pentru golirea pipeline-ului). De
asemenea pot fi executate conversii din virgula fixa in virgula mobila. Procesoarele familiei
pot executa pina la 150 milioane de instructiuni in virgula mobila pe secunda (150 Mflops).
C3x foloseste trei formate de date: intregi cu semn, intregi fara semn si numere in
virgula mobila. Pentru numerele in virgula mobila este disponibil si un format in precizie
extinsa. Numerele intregi pot fi reprezentate cu 16 biti (formatul scurt) sau cu 32 de biti
(formatul lung). Pentru reprezentarea in virgula mobila sunt folosite trei formate de date:
formatul scurt (16 biti), formatul standard (32 de biti) si formatul extins (40 de biti).
Formatele de reprezentare nu respecta standardul IEEE 754. Pentru anumite aplicatii de timp
real datele de intrare sunt esantioane de semnal furnizate de convertoare A/D. Procesoarele
C3x convertesc datele intregi intr-un format cu virgula mobila, le prelucreaza, iar la sfirsit
convertesc rezultatul in format intreg si le transefera la CDA.
20