Administratie | Alimentatie | Arta cultura | Asistenta sociala | Astronomie |
Biologie | Chimie | Comunicare | Constructii | Cosmetica |
Desen | Diverse | Drept | Economie | Engleza |
Filozofie | Fizica | Franceza | Geografie | Germana |
Informatica | Istorie | Latina | Management | Marketing |
Matematica | Mecanica | Medicina | Pedagogie | Psihologie |
Romana | Stiinte politice | Transporturi | Turism |
Procesoare digitale de semnal in virgula fixa
Dezvoltarea rapida a procesoarelor digitale de semnal (DSP) este in parte explicata de flexibilitatea, rapiditatea si pretul de cost scazut oferit pentru dezvoltarea aplicatiilor. Printre domeniile majore de utilizare se numara cel al retelelor precum si domeniul telecomunicatiilor. Procesoarele de semnal sunt folosite in infrastructura sistemelor fara/cu fir pentru comunicatia de voce (sau video) pe Internet. De asemenea, in domeniul comunicatiilor, aplicatiile DSP se regasesc pe scara larga in infrastructura, in echipamentele portabile si in produsele de larg consum.
Familia de procesoare in virgula fixa oferita de Texas Instruments cuprinde trei generatii: TMS320C2000 (C24x si C28x), TMS320C5000 (C54x si C55x) si TMS320C6000 (C62x si C64x). Fiecare generatie din familia TMS320 consta dintr-un nucleu (CPU) similar impreuna cu diferite configuratii de memorie si dispozitive periferice. Generatia TMS320C2000 integreaza facilitati de calcul si periferice similare microcontrolerelor si este optimizata pentru aplicatii de control, cum sunt: comanda a motoarelor electrice, sursele de alimentare cu comanda digitala, sisteme de senzori inteligenti. Generatia TMS320C5000 este destinata pentru realizarea eficienta a produselor de larg consum, permitind totodata adaugarea unor noi facilitati cum sunt aplicatiile pentru Internetul mobil si pentru alte produse electronice portabile. TMS320C6000 este generatia destinata aplicatiilor de inalta performanta, optimizata pentru usurarea programarii in limbaje de nivel inalt. Procesoarele familiei sunt destinate aplicatiilor care cer un volum mare de calcule, cum sunt cele legate de prelucarea imaginilor, infrastructura retelelor de comunicatie multicanal de banda larga din generatia 3G, echipamente digitale de abonat si de cablu.
Generatia 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 150 MIPS). Structura lor este data in Fig. 1 si in Tabelul 1 sunt date principalele caracteristici ale procesoarelor din fiecare familie.
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.
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.
Unitatea centrala de prelucrare - CPU
Dupa cum este aratat in Fig. 2 principalele componente ale CPU sunt: deplasatorul (shifter) de la intrare, multiplicatorul hardware paralel, deplasatorul pentru produs de la iesirea multiplicatorului, unitatea aritmetica si logica - ALU, acumulatorul - ACC, deplasatorul de la iesirea ACC si din unitatea aritmetica pentru registrele auxiliare - ARAU. Pentru stocarea in memorie pe 16 biti acumulatorul de 32 de biti poate fi impartit in doua registre de 16 biti, ACCH (bitii b31-b16), respectiv ACCL (bitii b15-b0).
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
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).
Multiplicatorul accepta doua intrari, una de la registrul TREG, iar cealalta de la memoria pentru date sau program. Daca ambii operanzi sunt localizati in memoria pentru date, unul dintre ei trebuie transferat intii in TREG folosind instructiunea LT dma. Instructiuni mai puternice pentru incarcarea registrului TREG sunt: LTA dma - incarca TREG si acumuleaza produsul anterior, LTP dma - incarca TREG si stocheaza PREG in ACC, respectiv LTS dma - care incarca TREG si scade din acumulator produsul anterior.
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
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 |
|
fara deplasare |
|
deplasare stinga 1 bit |
|
deplasare stinga 4 biti |
|
deplasare dreapta 6 biti |
Bitii PM pot fi setati cu instructiunea:
SPM constant ;set product shift mode
unde 0≤ constant ≤3. Iesirea PREG poate fi de asemenea deplasata la dreapta cu 6 biti pentru a putea executa minimum 128 de operatii succesive de multiplicare si acumulare fara ca sa apara depasire de scala.
Cele mai puternice instructiuni pentru multiplicare si acumulare (sau scadere) a produsului anterior sunt: MPYA (multiplica si acumuleaza produsul anterior) si MPYS (multiplica si scade produsul anterior). De exemplu, la instructiunea:
MPYA dma
data din registrul TREG este inmultita cu data din memorie si apoi produsul este stocat in PREG. In acelasi timp, produsul anterior din PREG este deplasat dupa cum indica bitii PM si apoi este adunat la ACC.
Unitatea aritmetica si logica
Unitatea aritmetica si logica (ALU) executa operatii de adunare, scadere, operatii logice si operatii de manipulare a bitilor (testare, deplasare, rotatie). Dupa cum este aratat in 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 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
ARAU poate executa sase operatii cu adresare indirecta, secificate in tabelul urmator:
Operand |
Operatia executata |
|
None |
|
ARnARn+1 |
|
ARnARn-1 |
|
ARnARn+AR0 |
|
ARnARn-AR0 |
*BR+ |
ARnARn+AR0 with bit-reversed carry |
*BR- |
ARnARn-AR0 with bit-reversed carry |
De exemplu, daca AR1 = 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.
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 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.
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 |
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.
Operatia de multiplicare si acumulare
Instructiunile de multiplicare si adunare, MAC si MACD, folosesc deplin capacitatea multiplicatorului permitind prelucrarea simultana a ambilor operanzi. Instructiunea MAC aduna intii la ACC produsul anterior dupa cum este indicat de PM, incarca TREG cu operandul din memoria de date, inmulteste valoarea din TREG cu continutul locatiei memoriei de program specificate si stocheaza rezultatul in PREG. Cind instructiunea este repetata, adresa memoriei de program continuta in PC este incrementata cu unu dupa fiecare 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 si . 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. Memorie 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:
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.
Aplicatie (bucla PLL digitala)
Un circuit PLL (Phase-Locked Loop) este un circuit care sincronizeaza un semnal de iesire produs de un oscilator cu un semnal de referinta, in faza sau in frecventa. In regim de sincronism eroarea de faza intre semnalul de iesire a oscilatorului si semalul de referinta este zero sau foarte mica. Daca eroarea de faza creste circuitul actioneaza asupra oscilatorului pentru a reduce aceasta eroare.
Circuitul PLL este constituit din trei blocuri. Detectorul de faza care compara faza semnalului oscilatorului controlat in tensiune, y(t), cu faza semnalului de referinta x(t), si produce semnalul de eroare e(t), proportional cu eroarea de faza. Semnalul e(t) are o componenta continua si o componenta nedorita de zgomot care trebuie redusa prin filtrare. Semnalul de eroare filtrat, c(t), este folosit pentru controlul fazei si a frecventei oscilatorului comandat in tensiune.
Primele circuite PLL integrate au fost analogice. Detectia de faza este realizata cu un multiplicator analogic, iar filtrul din bucla este un filtru activ sau pasiv de tip RC. Primul circuit PLL digital a aparut in jurul anului 1970 si folosea porti logice XOR si circuite bistabile JK pentru realizarea detectorului de faza. Ulterior au fost realizate circuite PLL complet digitale. In continuare va fi prezentat un circuit PLL realizat cu procesorul de semnal TMS320F2407.
Interferentele prezente in e(n) contin doua componente: zgomot de impulsuri si zgomot de banda larga. Un filtru trece-jos este foarte eficient pentru atenuarea zgomotului la frecvente mai mari decit componenta dorita de curent continuu, iar filtrul median este necesar pentru reducerea zgomotului de impulsuri. Prin urmare filtrul necesar pentru eliminarea interferentelor este format din din doua filtre conectate in cascada (Fig. . ).
Filtrul median este un filtru liniar de ordinul 5, constituit dintr-un buffer de tip FI-FO cu cinci celule folosit pentru memorarea esantioanelor e(n), e(n-1), . , e(n-4). Aceste esantiane sunt mutate intr-un nou buffer denumit buffer de sortare unde elementele sunt ordonate dupa marime. Iesirea filtrului median este simplu elementul median din bufferul de sortare. Pentru reducerea zgomotului de banda larga se foloseste un filtru neliniar cu medie alunecatoare (moving-average) al carui raspuns este dat de ecuatia:
Daca coeficientul este o putere negativa a lui 2 (), atunci produsul poate fi implementat prin deplasarea lui cu m biti la dreapta. Deoarece acumulatorul procesorului TMS320C2000 are 32 biti deplasarea cu m biti la dreapta si incarcarea rezultatului in cuvintul de ordin superior al acumulatorului poate fi facuta deplasindu-l cu 16-m biti la stinga si incarcind rezultatul in cuvintul inferior al acumulatorului. Subrutina in limbajul de asamblare a procesorului C2000 care executa aceste operatii este:
LPF: LACC cn_high,16 ;ACCH c(n-1), high word
ADDS cn_low ;ACC=c(n-1)
SUB cn_high,m8 ;-*c(n-1)
ADD sort1_buf2,m8 ;+*
SACH cn_high ;save c(n), high word
SACL cn_low ;save c(n), low word
Acest document nu se poate descarca
E posibil sa te intereseze alte documente despre:
|
Copyright © 2024 - Toate drepturile rezervate QReferat.com | Folositi documentele afisate ca sursa de inspiratie. Va recomandam sa nu copiati textul, ci sa compuneti propriul document pe baza informatiilor de pe site. { Home } { Contact } { Termeni si conditii } |
Documente similare:
|
ComentariiCaracterizari
|
Cauta document |