Documente Academic
Documente Profesional
Documente Cultură
În implementarea unei instrucţiuni tipice a ALU, paşii care apar sunt următorii:
1) Data este adusă din RAM pe magistrala de date;
2) Data este trecută prin circuitul de deplasare în ALU, unde este executată
operaţia aritmetică;
3) Rezultatul este transferat în acumulator.
Procesoare numerice de semnal - Cap. 4 23
O intrare în ALU este întotdeauna furnizată de acumulator, iar cealaltă intrare
poate fi transferată de la registrul de produs PR al multiplicatorului, sau de la
scalling shifter care este încărcat din memoria de date.
TMS320C2x poate realiza operaţii în virgulă mobilă, pentru aplicaţii care necesită
o gamă dinamică largă. Instrucţiunea NORM (normalizare) este folosită pentru a
normaliza numerele în virgulă fixă din acumulator prin deplasări la stânga.
Dacă bitul modului overflow (OVM) din registrul de stare este resetat şi apare o
depăşire, rezultatele depăşite sunt încărcate în acumulator fără modificări.
Operaţiile logice nu pot da naştere la depăşiri.
Acumulatorul din TMS320C25 are un bit de carry (transport), care este setat sau
resetat, în funcţie de diferite operaţii din circuit. Bitul de carry permite calculul mai
eficient în precizie extinsă a rezultatului pentru adunare sau scădere. Este de
asemenea util în gestionarea depăşirilor. Bitul de carry este afectat de majoritatea
instrucţiunilor aritmetice, de deplasări şi rotaţii. Nu este afectat de încărcarea
acumulatorului sau de operaţii logice şi nici de alte operaţii ne-aritmetice, sau de
instrucţiunile de control. De asemenea, nu este afectat de instrucţiunile de înmulţire
Procesoare numerice de semnal - Cap. 4 25
(MPY, MPYK, MPYU), dar este afectat de procesele de acumulare în
instrucţiunile MAC şi MACD. Exemple de operaţii cu bitul de carry sunt
prezentate în Fig.4.10.
Valoarea adunată sau scăzută din acumulator, arătată în exemplele din Fig.4.10,
poate veni fie de la intrarea circuitului de scalare, fie de la cea a circuitului de
deplasare de la ieşirea registrului P. Bitul de carry este setat dacă rezultatul unei
adunări sau "acumulări" generează un transport, sau este resetat dacă rezultatul
unei scăderi generează un împrumut. În celelalte cazuri, este resetat după o
adunare, sau setat după o scădere.
Singura excepţie în operaţiile cu bitul CY, cum se vede în Fig.4.10, este în cazul
folosirii instrucţiunilor ADDH (adună la ACCH) şi SUBH (scade din ACCH).
ADDH poate doar să seteze CY dacă se generează transport, iar SUBH poate doar
să reseteze CY dacă se generează împrumut. Altfel, nici o instrucţiune nu poate
afecta bitul CY.
Ieşirea lui PR poate fi deplasată la stânga pe 1 sau 4 biţi. Acest lucru este util
pentru implementarea aritmeticii fracţionale sau pentru alinierea produsului
fracţional. Ieşirea lui PR poate fi de asemenea deplasată dreapta cu 6 biţi pentru a
permite execuţia a până la 128 înmulţiri / acumulări fără posibilitate de depăşire.
Formatul Q15 este unul dintre variatele tipuri ale formatului Q; este o reprezentare
a numerelor folosită frecvent când se execută operaţii cu numere ne-întregi. O
rotaţie stânga de un singur bit elimină bitul suplimentar de semn din produs, când
este transferat în acumulator. Rezultatul în acumulator are astfel aceeaşi formă ca
şi operanzii. În mod similar, produsul unui număr normalizat pe 16 biţi sau Q15 şi
o constantă de 13 biţi în complement faţă de 2 conţine 5 biţi din care 4 sunt
redundanţi. Este cazul folosirii instrucţiunii MPYK. Aici, o deplasare de 4 biţi
aliniază în mod adecvat rezultatul transferat în acumulator.
Instrucţiunea BITT (bit test) permite testarea unui singur bit dintr-un cuvânt din
memoria de date pe baza valorii conţinute în cei mai puţin semnificativi 4 biţi din
TR.
La începutul unui nou ciclu de fetch, PC este incrementat sau încărcat cu adresa de
salt în cazul unor instrucţiuni de salt, întreruperi, sau subrutine. În cazul
instrucţiunilor de salt condiţionat, când nu se face saltul, PC este incrementat o
dată înplus, sărindu-se peste adresa de salt.
Stiva are 4 (TMS320C20) sau 8 (TMS320C25) nivele a câte 16 biţi şi este accesată
în timpul instrucţiunilor PUSH şi POP. Când PC este depus în vârful stivei,
conţinutul fiecărui nivel se deplasează în jos cu o poziţie, iar conţinutul ultimei
locaţii se pierde. Acesta se pierde şi dacă se depune succesiv în stivă de 4,
respectiv de 8 ori, fără a se scoate ceva. Orice extragere din stivă, după 3 şi
respectiv 7 extrageri, duce la extragerea valorii de la baza stivei. Instrucţiunile
PUSHD şi POPD depun o valoare din memoria de date, respectiv refac memoria
de date cu conţinutul din stivă. Aceste instrucţiuni permit construirea unei stive în
memoria de date, realizându-se nivele de imbricare ale subrutinelor peste
dimensiunea stivei inferioare (4, respectiv 8 nivele).
Pipeline-ul este redus la două nivele când execuţia este în memoria RAM internă
de program pentru că o instrucţiune din memoria RAM poate fi extrasă şi decodată
în acelaşi ciclu. Separarea pre-extragerii şi decodării nu mai este necesară, după
cum se arată în Fig.4.13.
Când se citeşte instrucţiunea din afara memoriei ROM interne, operaţiile interne de
bază ale pipeline-ului sunt aceleaşi, singura diferenţă constă în faptul că liniile de
semnale de control (/STRB, /PS, R//W) sunt inactive. Dacă instrucţiunea este
adusă din memoria RAM internă, pipeline-ul este scurtat la 2.5 cicli, instrucţiunea
fiind adusă într-o jumătate de ciclu, spre deosebire de un ciclu întreg necesar în
cazul aducerii din memoria externă sau din memoria ROM internă. Instrucţiunea
este adusă în fazele Q4 şi Q1 şi decodată în fazele Q2 şi Q3. În rest, operaţiile
decurg la fel.
Unele operaţii adaugă cicluri maşină adiţionale la execuţia instrucţiunii fără a
deranja funcţionarea. Stările WAIT externe, conflictele de magistrală,
instrucţiunile de două cuvinte şi discontinuităţile numărătorului de program fac
parte din această categorie de operaţii, aşa cum se va descrie în continuare.
Stările de aşteptare
Primul set de instrucţiuni la care se aplică aceste considerente este cel care
cuprinde instrucţiuni cu operand imediat. Mnemonica instrucţiunii este urmată de
operandul imediat pe 16 biţi ce va fi utilizat de ALU. Cel de-al doilea set, include
instrucţiunile care folosesc registrul PFC ca unitate de adresare secundară a datelor
în unele instrucţiuni optimizate, de exemplu MAC / MACD, BLKP / BLKD. În cel
de-al doilea set, ciclul exterior apare doar în bucla de repetare. Cel de-al treilea set
include instrucţiunile cu salt condiţionat neexecutate.
Un singur ciclu adiţional este introdus dacă destinaţia saltului este în memoria
RAM, blocul 0. În acest caz, pipeline-ul are doar 2 nivele şi necesită un singur
ciclu pentru reîncărcare. Fig.4.18 arată un salt de la execuţia normală în memoria
RAM internă, iar Fig.4.19, un exemplu de întoarcere din subrutină executată din
RAM-ul intern la o locaţie din memoria externă.
Efectele descrise mai sus la nivel hardware necesită explicaţii suplimentare datorită
lipsei de vizibilitate a operaţiilor de pe circuit sau pentru optimizarea funcţionării
mecanismului pipeline. Se vor descrie efectele asupra pipeline-ului ale resetului,
întreruperilor, semnalelor /HOLD//HOLDA, stocarea acumulatorului, accesul la
datele externe şi memoria program internă, a ciclurilor de repetiţie şi modul în care
aceste efecte sunt vizibile pe pinii procesorului.
Hold / acceptare hold este cea de-a doua întrerupere prioritară în execuţia unui
program şi nu va fi acceptată înainte de execuţia completă a instrucţiunii (minim 3
cicli), inclusiv instrucţiunile repetate. Următoarea instrucţiune va fi încărcată pe
pipeline la 2 perioade după ce linia /HOLDA devine inactivă. Dacă bitul HM din
registrul de stare ST1 este setat în "1", procesorul opreşte execuţia şi aşteaptă până
când semnalul hold este ridicat. Acest lucru micşorează consumul prin oprirea
comandării memoriei şi a semnalelor de control, oprind principalele circuite ale
CPU de a comuta şi comanda. Acest mod se poate utiliza pentru modul "power-
38 Procesoare numerice de semnal - Cap. 4
down". Dacă HM este în "0", procesorul continuă să execute orice instrucţiune ce
poate fi executată numai cu resurse de pe circuit, adică programul şi datele s găsesc
în memoria de pe circuit. Operaţiile decurg normal până când apare un acces la
memoria externă, moment la care procesorul adaugă stări de aşteptare până când
semnalul hold este ridicat. Când se apelează la resursele de pe circuit cu HM = 0,
procesorul răspunde la /HOLD cu /HOLDA în timpul instrucţiunilor multiciclu.
4.6.3 Reset
Cele două registre de stare, ST0 şi ST1, conţin starea indicatorilor diferitelor
moduri de funcţionare şi bistabilele de condiţii. Pot fi salvaţi în memoria de date şi
încărcaţi din ea, ceea ce permite ca starea procesorului să fie salvată şi restaurată
după subrutine şi întreruperi. Biţii de stare pot fi citiţi sau scrişi cu instrucţiunile
LST / LST1, SST / SST1, cu excepţia bitului INTM care nu poate fi încărcat cu
LST. Câmpurile ARP, ARB, DP apar ca registre separate în schema bloc şi pentru
că aceste registre nu au instrucţiuni separate pentru stocarea lor în RAM, au fost
incluşi în registrele de stare. Configuraţia celor două registre de stare este dată în
Fig.4.20.