D(15-0) - Magistrala de date O magistrală de 16 biţi folosită pentru transportul datelor. DAB(15-0) - Magistrala de adrese a memoriei de date O magistrală de 16 biţi care grupează adresele memoriei de date. DP(8-0) - Indicatorul paginii din memoria de date Un registru pe 9 biţi indicând adresa paginii curente. O pagină de date conţine 128 cuvinte de memorie. Există 512 pagini adresabile în spaţiul memoriei de date (unele locaţii sunt rezervate). DRB(15-0) - Magistrala de adrese directe a memoriei de date O magistrală pe 16 biţi care poartă adresa directă pentru memoria de date, care este concatenarea conţinutului registrului DP cu cei mai puţin semnificativi 7 biţi ai instrucţiunii. GREG(7-0) - Registru de alocare a memoriei globale Un registru de memorie pe 8 biţi pentru alocarea mărimii spaţiului memoriei globale. IR(15-0) - Registrul de instrucţiune Un registru pe 16 biţi folosit pentru stocarea instrucţiunii curente în curs de execuţie. IFR(5-0) - Registrul bistabilelor de întrerupere Un registru pe 6 biţi folosit pentru memorarea întreruperilor externe de la utilizator, /INT(2-0), active în low, şi a întreruperilor interne XINT / RINT (transmisie / recepţie prin portul serial) şi TINT (întreruperile de la timer). IFR nu este accesibil prin soft. IMR(5-0) - Registrul de măşti pentru întreruperi Un registru de memorie pe 6 biţi folosit pentru mascarea întreruperilor. MCS(15-0) - Stiva de microapeluri O stivă pe un singur cuvânt care stochează temporar conţinutul lui PFC cât timp PFC este folosit pentru a adresa memoria de date cu mutare pe blocuri (BLKD / BLKP), acumulator-multiplicator (MAC / MACD) şi tabela instrucţiunilor de scriere - citire (TBLR / TBLW). MULT - Multiplicator Un multiplicator paralel de 16 x 16 biţi. PRD(15-0) - Registru de perioadă Un registru de memorie pe 16 biţi folosit pentru reîncărcarea timerului. Procesoare numerice de semnal - Cap. 4
11
PFC(15-0) - Numărător de pre-extragere a instrucţiunii Un numărător pe 16 biţi folosit pentru aducerea în avans a instrucţiunilor de program. PFC conţine adresa instrucţiunii curente de adus în avans. Este actualizat când este iniţiat un nou ciclu de prefetch. PFC se foloseşte de asemenea pentru a adresa memoria de date când se folosesc instrucţiuni de mutare pe bloc (BLKD / BLKP), înmulţire cu acumulatorul (MAC / MACD) şi cele de scriere-citire din tabele (TBLR / TBLW). PR(31) - Registrul de produs Un registru pe 32 de biţi folosit pentru stocarea produsului multiplicatorului. Poate fi accesat atât în partea sa superioară, cât şi inferioară, folosind instrucţiunile SPH / SPL (stocare PR High/Low). P(15-0) - Magistrala de program O magistrală pe 16 biţi folosită pentru transportul instrucţiunilor (şi a datelor pentru instrucţiunile MAC şi MACD). PC(15-0) - Numărătorul de program Este un numărător pe 16 biţi folosit pentru adresarea memoriei de program. PC conţine întotdeauna adresa următoarei instrucţiuni de executat. Conţinutul PC este incrementat după decodificarea fiecărei instrucţiuni. La TMS32020, operaţiile realizate de PFC al lui TMS320C25 sunt realizate de către PC. PAB(15-0) - Magistrala adreselor memoriei program O magistrală pe 16 biţi care manipulează adresele memoriei de program. QIR(15-0) - Registrul cozii de aşteptare instrucţiuni Registrul QIR (queue instruction register) este un registru pe 16 biţi folosit pentru stocarea instrucţiunilor aduse în avans. RAM(B0) - RAM (date sau program) Un bloc RAM cu 256 x 16 locaţii configurate fie ca memorie de date, fie ca memorie program. RAM(B1) - RAM (doar de date) Un bloc de memorie RAM de date, organizat în 256 x 16 locaţii. RAM(B2) - RAM (doar de date) Un bloc de memorie RAM de date, organizat în 32 x 16 locaţii. RPTC(7-0) - Contor de repetări Un contor (repeat counter) pe 8 biţi pentru controlul execuţiei repetitve a unei singure instrucţiuni. 12
Procesoare numerice de semnal - Cap. 4
DRR(15-0) - Registru de recepţie date port serial Un registru pe 16 biţi pentru memorare al portului serial pentru recepţia datelor. În modul octet, sunt folosiţi numai cei mai puţin semnificativi 8 biţi. DXR(15-0) - Registru de transmisie date port serial Un registru de memorie pe 16 biţi pentru transmisia datelor la portul serial. Numai cei mai puţin semnificativi 8 biţi sunt folosiţi în modul octet. RSR(15-0) - Registrul de deplasare recepţie al portului serial Un registru pe 16 biţi folosit pentru rotirea datelor în portul serial de la pinul RX. Conţinutul RSR este trimis la DRR după ce un transfer serial este terminat complet. RSR nu este accesibil direct prin soft. XSR(15-0) - Registrul de deplasare transmisie al portului serial Registru pe 16 biţi folosit pentru extragerea prin rotire a datelor de la portul serial prin pinul DX. Conţinutul XSR este încărcat în DXR la începutul unei operaţii de transmisie prin portul serial. XSR nu este accesibil direct prin soft. Shifters - Circuite de deplasare Registre de deplasare localizate la intrarea ALU, ieşirea acumulatorului şi ieşirea registrului de produs. Un registru shifter este de asemenea localizat în acumulator. STACK(15-0) - Stiva O stivă hard de 8 x 16 biţi folosită pentru stocarea PC în timpul întreruperilor sau apelurilor de subrutine. De asemenea, pot fi depuse şi culese din stivă valorile lui ACCL şi date din memorie. ST0, ST1(15-0) - Registre de stare Sunt două registre de stare pe 16 biţi care conţin semnale de stare şi biţii de control. TR(15-0) - Registru temporar Un registru pe 16 biţi care poate păstra atât un operand pentru înmulţire, cât şi un cod de rotire (shift code) pentru scalling shifter. TIM(15-0) - Timer Un registru numărător pe 16 biţi pentru controlul temporizărilor.
4.4 Organizarea memoriei TMS320C2x asigură intern un total de 544 de cuvinte de memorie de 16 biţi, sub forma unei memorii RAM pe circuit, din care 288 sunt întotdeauna memorie de date, iar restul de 256 de cuvinte pot fi configurate fie ca memorie de program, fie Procesoare numerice de semnal - Cap. 4
13
ca memorie de date. De asemenea, TMS320C2x include 4 Kcuvinte de memorie de program ROM programabilă cu mască. 4.4.1 Memoria de date Cele 544 de cuvinte de memorie de date RAM sunt împărţite în 3 blocuri separate: B0, B1 şi B2 (vezi Fig.4.4).
Fig.4.4 Memoria de date a circuitului TMS320C2x Blocul B0 conţine 256 de cuvinte de memorie RAM, configurabile fie ca memorie de date, fie ca memorie de program, prin instrucţiuni prevăzute în acest scop. Blocurile B1 şi B2 conţin 288 de cuvinte şi sunt întotdeauna memorie de date. Spaţiul de memorie intern de 544 de cuvinte permite lui TMS320C2x să gestioneze un masiv de date de 512 cuvinte (256 cuvinte dacă RAM de pe circuit este folosit ca memorie program), rămânând şi 32 locaţii pentru stocarea altor date intermediare (vezi §4.4.3 - Harta memoriei). TMS320C2x poate adresa 64 Kcuvinte de memorie de date. Memoria RAM de date de pe circuit şi locaţiile rezervate intern sunt plasate pe harta memoriei pe cele mai de jos 1 Kcuvinte din spaţiul de memorie de date. Memoria de date este direct expandabilă la 64 Kcuvinte, menţinându-se intactă viteza de prelucrare. Linia READY este prevăzută pentru adaptarea la memoriile lente, dar mai ieftine, cum sunt circuitele dinamica (DRAM). 14
Procesoare numerice de semnal - Cap. 4
4.4.2 Memoria de program Poate fi constituită din memoria RAM de pe circuit, ROM, sau memorii externe de program de mare viteză care se folosesc la viteza integrală, fără stări de aşteptare. Ca o alternativă, prin linia READY se poate asigura adaptarea procesorului la memoriile mai lente şi mai ieftine (memorii externe). Este disponibil un spaţiu adresabil de memorie de 64 Kcuvinte. Blocul intern RAM B0 poate fi configurat ca memorie program folosind instrucţiuni speciale în acest scop. Execuţia de instrucţiuni din acest bloc poate fi iniţiată după ce spaţiul de memorie a fost reconfigurat (vezi §4.7.1 pentru descrierea execuţiei instrucţiunilor folosind diferite configuraţii de memorie). În plus, TMS320C25 este echipat cu 4 Kcuvinte de memorie program ROM, care poate fi programată cu mască la producător cu un program al clientului. Memoria ROM de pe circuit permite execuţia programului la viteza integrală fără a apela la memoria externă de program de mare viteză. Folosirea acestei memorii permite de asemenea magistralei externe de date să fie liberă pentru accesarea memoriei externe de date. Modul de aşezare pe harta memoriei a primelor 4 Kcuvinte din blocul de memorie program pe sau în afara circuitului este selectabil de către utilizator cu ajutorul pinului MP//MC al lui TMS320C25. Acest lucru permite proiectantului să accelereze durata de dezvoltare cu ajutorul unui produs bazat pe TMS320C25 folosind ROM extern, şi reducerea costului, folosind 4K de ROM intern fără reproiectarea cablajului imprimat. Setând MP//MC la high se realizează maparea de memorie program în afara circuitului. MP//MC = low realizează maparea în memoria ROM internă. Bistabilul extern XF poate fi folosit pentru a trece MP//MC în stare de activare dinamică sau dezactivare dinamică a memoriei ROM de pe circuit. Este necesară o oarecare precauţie când se foloseşte comutarea bancurilor de memorie şi o bună înţelegere a funcţionării magistralei pipeline. MP//MC de la TMS320C25 este pentru TMS32020 un pin de alimentare (Vcc). Acest lucru permite substituirea lui TMS320C25 cu TMS32020 cât timp TMS320C25 operează automat în modul microprocesor, asigurându-se astfel compatibilitatea. 4.4.3 Harta memoriei TMS320C2x suportă 3 spaţii separate de adrese de memorie: - pentru memoria program, - pentru memoria de date, şi Procesoare numerice de semnal - Cap. 4
15
- pentru periferice I/O (vezi Fig.4.5)
Fig.4.5 Configuraţiile de memorie Aceste spaţii se disting în exterior prin semnalele /PS, /DS şi /IS (selectare program, date şi I/O). Semnalele /PS, /DS, /IS şi /STRB sunt active numai când memoria externă a fost adresată. În timpul unui ciclu de adresare intern, aceste semnale rămân inactive (high), acest lucru prevenind conflictele în adresarea memoriei, când blocul B0 este configurat ca memorie de program. 16
Procesoare numerice de semnal - Cap. 4
Blocurile B0, B1 şi B2 sunt compuse în total din 544 cuvinte de memorie RAM. Blocul B0 de memorie RAM de date / programe (256 cuvinte) este rezident în paginile 4 şi 5 a hărţii memoriei de date când este configurat ca RAM de date, şi de la adresele FF00 la FFFF când este configurat ca RAM de programe. Blocul B1 (întotdeauna RAM de date) este rezident în paginile 6 şi 7. Blocul B2 este rezident în cele 32 cuvinte de sus ale paginii 0. Restul paginii 0 este compus din registre mapate în memorie şi locaţii rezervate intern, iar paginile 1-3 ale hărţii de memorie de date sunt locaţii rezervate intern. Locaţiile rezervate intern pot să nu fie folosite pentru stocare, şi conţinutul lor este nedefinit la citire (alte informaţii privind aşezarea registrelor în harta memoriei se vor regăsi în capitolele despre instrucţiuni). Memoria RAM de pe circuit este mapată fie în spaţiul de 64 Kcuvinte de memorie de date sau de memorie program, depinzând de configuraţia memoriei (vezi Fig.4.5). Instrucţiunile CNFD / CNFP sunt folosite pentru configurarea blocului B0 fie ca memorie de date, fie ca memorie program. Instrucţiunea BLKP (mutarea unui bloc din memoria program în memoria de date) poate fi folosită pentru descărcarea informaţiilor de program în blocul B0, când B0 este configurat ca RAM de date. Apoi o instrucţiune CNFP (configurarea blocului ca memorie program) poate fi folosită pentru a converti B0 în RAM de program. Fără să ţină seama de configuraţie, utilizatorul poate executa programe din memoria externă de program. Când este accesată memoria internă de program, liniile de control externe rămân inactive. Resetul configurează B0 ca RM de date. În timpul lucrului pe magistralele interne, când instrucţiunile CNFD sau CNFP sunt folosite pentru a reconfigura blocul B0, există un timp de întârziere până când noua configuraţie devine efectivă. Această întârziere este de un ciclu de fetch dacă execuţia este din RAM-ul de program intern. La TMS32020, are loc o întârziere de un ciclu fetch dacă execuţia este din memoria de program externă. Este foarte important dacă programul se execută de la o locaţie în jurul lui FF00. În consecinţă, o instrucţiune CNFP trebuie să fie plasată la locaţia FEFD în memoria externă dacă execuţia urmează să fie continuată de la prima locaţie în blocul B0. Dacă o instrucţiune CNFP este plasată la locaţia FEFD, iar instrucţiunea de la locaţia FEFF este pe dublu cuvânt, al doilea cuvânt al instrucţiunii va fi adus din prima locaţie în blocul B0. Dacă execuţia este de deasupra locaţiei FF00 şi blocul B0 este reconfigurat, trebuie să ne asigurăm că execuţia se termină la cel mai apropiat punct al noii configuraţii.
Procesoare numerice de semnal - Cap. 4
17
La TMS320C25, memoria de program ROM de pe circuit este localizată în cele mai puţin semnificative 4 Kcuvinte de memorie program, când sunt selectate de MP//MC = 0. Când MP//MC = 1, cele mai de jos 4 Kcuvinte ale memoriei program sunt externe. 4.4.4 Registrele mapate în memorie Cele 6 registre mapate în memoria de date sunt prezentate în continuare şi sunt arătate în schema bloc din Fig.4.2. Ele pot fi accesate în aceeaşi manieră cu alte locaţii de memorie de date, cu excepţia faptului că mutarea blocurilor cu instrucţiunea BLKD (mutarea blocului din memoria de date în memoria de date) nu se poate face din registrele mapate în memorie. Locaţie 0 1 2 3 4 5
Registru DRR(15-0) DXR(15-0) TIM(15-0) PRD(15-0) IMR(5-0) GREG(7-0)
Descriere Registru de recepţie al portului serial Registru de transmisie al portului serial Registru Timer Registru de perioadă Registrul măştii de întreruperi Registrul de alocare a memoriei globale
4.4.5 Registrele auxiliare TMS320C2x conţine un banc de registre cu până la 8 registre auxiliare (AR0 AR7). TMS32020 are 5 registre auxiliare, iar TMS320C25 are 8 astfel de registre. În continuare sunt prezentate funcţiile fiecărui registru şi modul în care este selectat pentru stocare un registru auxiliar. Registrele auxiliare pot fi folosite pentru adresarea indirectă a memoriei de date şi pentru stocarea temporară a datelor. Adresarea indirectă prin registrele auxiliare (vezi Fig.4.6) permite plasarea adresei unui operand (dintr-o instrucţiune) din memoria de date ARP (3 biţi) care este cuprins între 0 şi 7, desemnând respectiv registrele AR0-AR7. Registrele auxiliare şi ARP pot fi încărcate fie din memoria de date, fie direct cu un operand imediat găsit în instrucţiune. Conţinutul acestui registru poate fi de asemenea stocat în memoria de date (vezi programarea în modul de adresare indirect). Bancul registrelor auxiliare (AR0AR4 la TMS32020 şi AR0-AR7 la TMS320C25) este conectat la ARAU (vezi Fig.4.7). ARAU poate autoindexa registrul auxiliar curent cât timp este adresată o locaţie a memoriei de date. Se poate face indexarea cu + sau -1 sau cu conţinutul lui AR0. Ca rezultat, nu este necesară folosirea CALU pentru accesarea tabelelor cu informaţii, ceea ce lasă liberă CALU pentru alte operaţii.
18
Procesoare numerice de semnal - Cap. 4
Fig.4.6 Un exemplu de adresare indirectă cu registru auxiliar
Fig.4.7 Bancul registrelor auxiliare Aşa cum se vede în Fig.4.7, AR0 sau cei mai puţin semnificativi 8 biţi ai registrelor instrucţiune pot fi conectaţi la una din intrările ARAU. Cealaltă intrare este alimentată de registrul AR curent (indicat de ARP), care dă spre ARAU conţinutul său. ARAU realizează următoarele funcţii: 1) AR(ARP) + AR0 → AR(ARP) ; incrementează AR curent cu valoarea întreagă pe 16 biţi conţinută de AR0 2) AR(ARP) - AR0 → AR(ARP) ; decrementează AR curent cu valoarea întreagă pe 16 biţi conţinută de AR0 Procesoare numerice de semnal - Cap. 4
19
3) AR(ARP) + 1 → AR(ARP) ; incrementează AR curent cu 1 4) AR(ARP) - 1 → AR(ARP) ; decrementează AR curent cu 1 5) AR(ARP) → AR(ARP) ; AR(ARP) este neschimbat. Pe lângă funcţiile prezentate mai sus, ARAU din TMS320C25 mai realizează următoarele: 6) AR(ARP) + IR(7-0) → AR(ARP) ; adună la AR curent o valoare imediată pe 8 biţi 7) AR(ARP) - IR(7-0) → AR(ARP) ; scade o valoare imediată pe 8 biţi din AR curent 8) AR(ARP) + rcAR0 → AR(ARP) ; indexare cu schimbarea biţilor, adună AR0 cu schimbarea lui carry, propagată (reverse-carry propagation) - vezi modul de adresare indirectă 9) AR(ARP) - rcAR0 → AR(ARP) ; ca mai sus, dar cu scădere. De asemenea, ARAU este folositoare pentru manevrarea adreselor în paralel cu alte operaţii, şi poate servi de asemenea ca o unitate adiţională aritmetică cu scop general, odată ce registrele auxiliare pot comunica direct cu memoria de date. ARAU implementează operaţii aritmetice cu numere fără semn pe 16 biţi, iar CALU implementează operaţii aritmetice pe 32 de biţi, cu numere în complement faţă de 2. Instrucţiunile furnizează salturi dependente de comparaţia registrelor auxiliare indicate de ARP, cu AR0. Instrucţiunile BANZ permit de asemenea folosirea registrelor auxiliare drept contoare pentru bucle. ARB pe 3 biţi (bufferul indicatorului registrelor auxiliare), reprezentat ca în Fig.4.7, permite stocarea conţinutului ARP în cazul apelului de subrutine sau al întreruperilor. 4.4.6 Moduri de adresare a memoriei TMS320C2x poate adresa în total 64 Kcuvinte de memorie program şi 64 Kcuvinte de memorie de date. Memoria de date de pe circuit este mapată în spaţiul de 64 Kcuvinte de memorie de date. Memoria ROM de pe circuit în TMS320C25 este mapată în spaţiul de memorie program, în modul microcalculator. Harta memoriei, care se schimbă cu configuraţia blocului B0, a fost descrisă în §4.4.4. Magistrala de adrese memorie de date DAB pe 16 biţi adresează memoria de date într-unul din următoarele moduri: 1) Pe magistrala directă de adrese DRB, folosind modul de adresare directă (de exemplu ADD>10); 2) Pe magistrala bancului registrelor auxiliare AFB, folosind modul de adresare indirect (de exemplu ADD*). 20
Procesoare numerice de semnal - Cap. 4
Operanzii sunt de asemenea adresaţi prin conţinutul numărătorului de program, în modul de adresare imediat. Fig.4.8 ilustrează adresarea operanzilor în modurile direct, indirect şi imediat.
Fig.4.8 Metode de adresare a operandului instrucţiunii În modul de ADRESARE DIRECTĂ, cei 9 biţi ai indicatorului paginii de memorie de date DP indică una din cele 512 pagini, fiecare pagină având 128 cuvinte. Adresa memoriei de date (dma), specificată prin cei mai puţin semnificativi 7 biţi ai instrucţiunii, indică cuvântul dorit din pagină. Adresa de pe DRB se formează concatenând cei 9 biţi ai DP cu cei 7 biţi dma. În modul de ADRESARE INDIRECTĂ, registrul auxiliar curent selectat prin ARP(AR(ARP)), prin cei 16 biţi ai săi, adresează memoria de date pe magistrala AFB (a bancului registrelor auxiliare). În timpul cât registrul auxiliar selectat furnizează adresa datei din memoria de date şi data este manevrată de CALU, conţinutul registrului auxiliar poate fi manipulat în ARAU. Modurile de adresare directă şi indirectă sunt descrise în detaliu în Cap.6 (§6.1). Când se foloseşte un operand imediat, el este conţinut fie în însuşi cuvântul instrucţiune, fie, în cazul unui operand imediat pe 16 biţi, cuvântul este cel imediat următor codului instrucţiunii. 4.4.7 Transferurile memorie - memorie TMS320C2x permite instrucţiuni pentru mutarea blocurilor de date sau programe şi funcţii pentru mutarea datelor, care pot fi folosite eficient pentru memoria RAM de pe circuit: • Instrucţiunea BLKD, mută un bloc în interiorul memoriei de date; • Instrucţiunea BLKP, mută un bloc din memoria program în memoria de date. Procesoare numerice de semnal - Cap. 4
21
Când se folosesc BLKD sau BLKP cu instrucţiunile repetitive RPT / RPTK, atunci aceste instrucţiuni realizează eficient mutarea blocurilor din memoriile de pe circuit sau din afara acestuia. Implementată în circuitul RAM de pe circuit, funcţia DMOV (data move) la TMS320C2x este echivalentă cu cea de la TMS320C1x. DMOV permite copierea unui cuvânt de la adresa locaţiei curente din memoria de date în circuitul RAM intern la următoarea locaţie superioară în timp ce data din locaţia adresată este operată în acelaşi ciclu (de către CALU). De asemenea, poate fi executată o operaţie ARAU în acelaşi ciclu, când se foloseşte modul de adresare indirectă. Funcţia DMOV este utilă pentru implementarea algoritmilor care folosesc operaţia de întârziere Z la puterea -1, cum ar fi convoluţia sau filtrarea digitală, când datele sunt trecute printr-o fereastră în timp. DMOV se poate folosi oriunde în interiorul blocurilor B0, B1, sau B2. Este continuă în hotarele lui B0, B1, B2, dar nu poate fi folosită cu memoria de date externă. Instrucţiunile MACD (înmulţeşte şi acumulează cu transfer de date) şi LTD (încarcă registrul T, încarcă rezultatul în acumulator şi mută data) folosesc funcţia DMOV. Instrucţiunile TBLR / TBLW (table read / write) permit transferul cuvintelor între spaţiul de program şi de date. TBLR se foloseşte pentru a citi cuvinte de la un ROM intern sau o memorie de program ROM / RAM externă, în memoria RAM de date. TBLW se foloseşte pentru a scrie cuvinte dintr-o memorie internă RAM de date într-o memorie RAM de program externă.
22
Procesoare numerice de semnal - Cap. 4