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 poate 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-C ORE (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 valorile 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. Astfel, practic toate procesoarele DSP
ofera instructiuni de efectuare a buclelor implementate hardware. Aceste instructiuni permit
3
repetarea 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 legati 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 doi 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 acestia 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 proprii registri dedicati de intrare si iesire. Multe DSPuri, cum ar fi
7
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 folositi
pentru sarcini variate fata de procesoarele cu registri specializati, dedicati unei singure functii de pe
calea de date. Totusi procesoarele cu registri generali au si dezavantaje: implementarea acestor
registri este mai costisitoare.
Alti regiștri
Alti registri intalniti 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. Acestia contin informatii despre buclele hardware, cum ar fi adresa
de start, cea 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
multiplicator.
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 incarcati cu valori de intrare si depun rezultatul in
registri acumulatori. 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 blocul
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
Curs 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
utilizati 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 cu un anumit timp inainte de inceputul
ciclului instructiune, acest timp fiind numit timp de stabilire (set-up). Deoarece dispozitivul de
7
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 poate 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
Curs 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 a 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 intarziate sunt numite astfel deoarece, pentru programator, efectul saltului pare a
fi intarzaiat cu cateva cicluri instructiune.
Aproape toate procesoarele 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
9.6 Modele de programare pipeline
Exemplele din sectiunile anterioare au fost concentrate pe pipe-line-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
Curs 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 biti
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
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.
15
Curs 11
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.