Sunteți pe pagina 1din 18

4.

5 Unitatea centrală aritmetică şi logică

CALU din TMS320C2x conţine un circuit de deplasare şi scalare pe 16 biţi, un


multiplicator paralel pe 16 x 16 biţi, o ALU pe 32 de biţi, un acumulator pe 32 biţi
(ACC) şi circuite de deplasare suplimentare la ieşirile acumulatorului şi ale
multiplicatorului. În Fig.4.9 este prezentată schema bloc care arată componentele
CALU.

Fig.4.9 Unitatea centrală aritmetică şi logică (CALU)

SFL - rotire spre stânga


SFR - rotire spre dreapta

Î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.

4.5.1 Circuitul de deplasare şi scalare (scalling shifter)

TMS320C2x conţine un scallingshifter care are o intrare pe 16 biţi legată la


magistrala de date şi o ieşire pe 32 de biţi legată la ALU (vezi Fig.4.9). Circuitul
produce o rotire la dreapta între 0 şi 16 biţi a datelor de intrare, după cum e
programat în instrucţiune. Cei mai puţin semnificativi biţi ai ieşirii sunt umpluţi cu
0, iar cei mai semnificativi pot fi fie umpluţi cu 0, fie extinşi ca semn, în funcţie de
starea SXM (sign extension mode) al registrului de stare ST1.

TMS320C2x conţine de asemenea o serie de alte registre de deplasare care-i permit


să execute deplasări numerice, extracţii de biţi, extinderea preciziei aritmetice şi
prevenirea depăşirilor. Aceste registre sunt conectate la ieşirea multiplicatorului şi
acumulatorului.

4.5.2 ALU şi acumulatorul

ALU şi acumulatorul pe 32 de biţi ale TMS320C2x realizează o gamă largă de


funcţii aritmetice şi logice, din care majoritatea se execută într-un singur ciclu de
ceas. Odată ce o operaţie este executată în ALU, rezultatul este transferat în
acumulator, unde pot avea loc operaţiile adiţionale, cum ar fi deplasarea. Data care
intră în ALU poate fi scalată de către circuitul de deplasare şi scalare.

ALU este o unitate aritmetică de uz general care operează cu cuvinte pe 16 biţi


luate din memoria RAM de date sau derivate din instrucţiuni imediate. Pe lângă
instrucţiunile aritmetice uzuale, ALU poate executa operaţii booleene, furnizând
facilităţile de manipulare la nivel de bit cerute de un controler de mare viteză. Una
din intrările ALU este furnizată totdeauna de către acumulator. Cealaltă poate fi
furnizată de către registrul de produs al multiplicatorului, PR, sau de la intrarea lui
scalling shifter care a adus data din memoria RAM pe magistrala de date. După ce
ALU a executat operaţia aritmetică sau logică, rezultatul este stocat în acumulator.

Acumulatorul pe 32 biţi (vezi Fig.4.9) este împărţit în două segmente de câte 16


biţi pentru stocarea în memoria de date: ACCH (accumulator high) şi ACCL
(accumulator low). Shifterii de la ieşirea acumulatorului furnizează o deplasare
stânga, cu 0 - 7 poziţii la TMS320C25, şi cu 0, 1 sau 4 poziţii la TMS32020.
Această deplasare este eecutată în timp ce data este transferată pe magistrala de
date pentru stocare. Conţinutul acumulatorului rămâne neschimbat. Când
conţinutul ACCH este deplasat stânga, cei mai puţin semnificativi biţi sunt
transferaţi din ACCL, iar cei mai semnificativi biţi se pierd. Când ACCL este

24 Procesoare numerice de semnal - Cap. 4


deplasat stânga, cei mai puţin semnificativi biţi sunt umpluţi cu 0, iar cei mai
semnificativi biţi se pierd.

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.

Instrucţiunea LACT (încarcă acumulatorul cu o deplasare specificată prin registrul


T) denormalizează un număr scris în virgulă mobilă prin deplasarea aritmetică la
stânga a mantisei, prin intrarea de scalare - deplasare. În acest caz, contorul
deplasărilor are valoarea exponentului specificat prin cei mai puţin semnificativi 4
biţi ai registrului T (TR).

Instrucţiunile ADDT şi SUBT (adună la / scade din acumulator, cu deplasare


specificată prin registrul T) au fost prevăzute de asemenea pentru a permite
operaţii aritmetice adiţionale.

Modul de lucru cu saturaţie la depăşire a acumulatorului poate fi programat prin


instrucţiunile SOVM şi ROVM (set / reset overflow mode). Când acumulatorul
este în acest mod şi apare o depăşire, indicatorul de overflow (OF) este setat şi
acumulatorul este încărcat fie cu cel mai pozitiv, fie cu cel mai negativ număr, în
funcţie de direcţia depăşirii. Valoarea acumulatorului după saturaţie este 7FFF
FFFF (pozitiv) sau 8000 0000 (negativ).

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.

TMS320C2x poate executa o multitudine de instrucţiuni de salt (ramificare) care


depind de starea ALU şi a acumulatorului. În această categorie intră:
- BV (salt la depăşire);
- BZ (salt la atingerea valorii 0 de către acumulator). În plus, BACC (salt la
adresa din acumulator) furnizează facilitatea unui salt la o adresă specificată de
acumulator;
- BIT şi BITT (instrucţiuni de testare a biţilor). Ele nu afectează acumulatorul şi
permit testarea unui bit specificat dintr-un cuvânt al memoriei de date.

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.

Fig.4.10 Exemple de operaţii cu transport la TMS320C25

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.

Instrucţiunile ADDC (adună la acumulator cu transport), şi SUBB (scade din


acumulator cu împrumut), facilitate de TMS320C25, folosesc valorile mai sus
menţionate pentru CY în operaţiile lor de adunare / 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.

Sunt prevăzute două instrucţiuni de salt (ramificare) funcţie de starea bitului de


CY: BC şi BNC. Pentru încărcarea bitului de carry există instrucţiunile C, RC şi
LST1. Bitul CY este setat la 1 după resetul hard.

Instrucţiunile SFL / SFR (introduce în CY un bit prin rotire la stânga / dreapta cu


un bit, la TMS320C2x) şi ROL / ROR (rotaţie a stânga / dreapta la TMS320C25)
realizează deplasarea sau rotirea conţinutului acumulatorului prin bitul de CY.
Bitul SXM afectează definiţia instrucţiunii SFR (deplasarea acumulatorului la
dreapta). Când SXM = 1, SFR realizează o rotire aritmetică la dreapta, menţinând
26 Procesoare numerice de semnal - Cap. 4
semnul datelor din acumulator. Când SXM = 0, SFR efectuează o deplasare logică,
deplasând afară LSB-ul şi punând MSB = 0. SFL (deplasarea acumulatorului la
stânga) nu e afectată de bitul SXM şi se comportă la fel în ambele cazuri,
deplasând afară MSB-ul şi punând în locul LSB valoarea 0. Instrucţiunile RPT sau
RPTK pot fi folosite cu instrucţiunile de deplasare şi rotire pentru numărarea unor
deplasări multiple.

4.5.3 Multiplicatorul, registrele P şi T

TMS320C2x foloseşte un multiplicator pe 16 x 16 biţi, implementat hardware, care


este capabil să calculeze un produs cu semn sau fără semn pe 32 de biţi, într-un
singur ciclu maşină. Toate instrucţiunile de înmulţire, cu excepţia lui MPYU
(înmulţire fără semn) a lui TMS320C25, execută în multiplicator o operaţie de
înmulţire cu semn. Aceasta înseamnă că, două numere care sunt înmulţite sunt
tratate ca două numere în complement faţă de 2, iar rezultatul este un număr pe 32
de biţi, în complement faţă de 2. Aşa cum se arată în Fig.4.9, două registre sunt
asociate multiplicatorului:
- un registru temporar pe 16 biţi care conţine unul din operanzii pentru înmulţire,
TR, şi
- un registru de produs pe 32 de biţi care conţine produsul (rezultatul înmulţirii),
PR.

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.

O instrucţiune LT (încărcarea registrului T) încarcă în mod normal TR pentru a


furniza un operand (de pe magistrala de date), iar instrucţiunea MPY (multiplicare)
furnizează al doilea operand (tot de pe magistrala de date). O înmulţire poate fi
realizată de asemenea cu un operand imediat, folosind instrucţiunea MPYK. În alte
cazuri, un produs poate fi obţinut la fiecare 2 cicluri.

Două instrucţiuni de înmulţire / acumulare (MAC şi MACD) folosesc integral


capacitatea de calcul a multiplicatorului, permiţând ambilor operanzi să fie
prelucraţi simultan. Datele pentru aceste operaţii pot fi rezidente oriunde în
memoria internă sau în cea externă, sau pot fi transferate multiplicatorului în
fiecare ciclu pe magistrala de program sau de date. Acestea sunt furnizate pentru
fiecare ciclu de înmulţire / acumulare când sunt folosite cu instrucţiuni repetitive
(RPT / RPTK). Porţiunea DMOV a instrucţiunii MACD nu va funcţiona cu adrese
din memoria de date externă.

La TMS32020, deînmulţitul şi înmulţitorul trebuie să fie rezidente în blocuri de


memorie RAM separate. La TMS320C25, instrucţiunile MAC şi MACD pot fi
Procesoare numerice de semnal - Cap. 4 27
utilizate fie cu ambii operanzi din memoria internă sau externă, fie cu unul din
memoria RAM de pe circuit.

Instrucţiunile SQRA (square / addition) şi SQRS (square / substraction) pun


aceeaşi valoare pe ambele intrări ale multiplicatorului pentru a ridica la pătrat o
valoare din memoria de date.

Instrucţiunea MPYU de la TMS320C25 execută o înmulţire fără semn, ceea ce


facilitează mult extinderea preciziei în operaţiile aritmetice. Conţinutul fără semn
al registrului T este multiplicat cu conţinutul fără semn al unei locaţii din memoria
de date, iar rezultatul este plasat în registrul P. Aceasta permite operanzilor mai
mari de 16 biţi să fie împărţiţi în operanzi de 16 biţi şi prelucraţi separat pentru a
genera produse mai mari de 32 de biţi.

După înmulţirea a două numere pe 16 biţi, produsul pe 32 de biţi este încărcat în


registrul PR pe 32 de biţi al lui TMS320C2x. Produsul din PR poate fi transferat în
ALU.

Există 4 moduri de deplasare a produsului disponibile la ieşirea PR. Aceste 4


moduri sunt utile când se execută operaţii de multiplicare / acumulare, aritmetică
fracţionară, sau produse fracţionare. Câmpul PM al registrului de stare ST1
specifică modurile de deplasare ale rezultatului PM, astfel:
- PM = 00, rezultat fără deplasare
- PM = 01, rezultat cu deplasare stânga 1 bit
- PM = 10, rezultat cu deplasare stânga 4 biţi
- PM = 11, rezultat cu deplasare dreapta 6 biţi

Deplasările stânga sunt folositoare pentru implementarea aritmeticii fracţionare,


sau pentru alinierea produsului fracţional; de exemplu: produsul a două numere
normalizate pe 16 biţi, produsul a două numere în complement faţă de 2, produsul
a două numere în format Q15, conţinând 2 biţi de semn, dintre care unul este
redundant.

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.

28 Procesoare numerice de semnal - Cap. 4


Folosirea deplasării dreapta PM permite executarea a până la 128 operaţii de
înmulţire / acumulare consecutive fără pericolul unei depăşiri aritmetice, astfel
evitându-se problema gestionării depăşirilor.

Deplasările pot fi dezactivate ca să nu producă rotiri în produs când se lucrează cu


întregi sau operaţii cu precizie de 32 biţi. Acest lucru permite compatibilitatea cu
TMS320C1x. Trebuie notat că rotirea dreapta este întotdeauna însoţită de extensia
de semn, indiferent de starea SXM.

Cei mai puţin semnificativi 4 biţi ai registrului TR definesc de asemenea o


deplasare variabilă prin scalling shifter pentru instrucţiunile LACT, ADDT şi
SUBT. Aceste instrucţiuni sunt utile în aritmetica în virgulă flotantă, când un
număr trebuie să fie denormalizat, ceea ce înseamnă realizarea conversiei de la
virgulă mobilă la virgulă fixă.

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.

4.6 Controlul sistemului

Controlul de sistem al procesorului TMS320C2x este asigurat de numărătorul de


program (PC), stiva, conexiunie hardware, semnalul reset extern, întreruperi, timer
şi un numărător de repetări. Următoarele subcapitole vor descrie funcţiile fiecărei
componente în controlul sistemului şi funcţionarea magistralei pipeline.

4.6.1 Numărătorul de program şi stiva

TMS320C2x are un umărător de program pe 16 biţi şi o stivă hardware de 8 nivele


(TMS320C25) sau 4 nivele (TMS320C20), pentru stocarea numărătorului de
program.

Numărătorul de program (PC) adresează memoria de program internă şi externă în


instrucţiunile de fetch. Stiva este utilizată în timpul subrutinelor şi întreruperilor.
PC adresează memoria program de pe circuit sau din afara acestuia prin magistrala
adreselor de program. Pe această magistrală este adusă o instrucţiune din memoria
de program şi încărcată în registrul de instrucţiuni (IR). Când registrul IR este
încărcat, PC este gata să înceapă următorul ciclu de fetch. PC poate adresa blocul
B0 al memoriei RAM de pe circuit, când B0 este configurat ca memorie de
program, sau memoria ROM internă, precum şi memoria program externă prin
magistrala externă de date (liniile D15-D0) şi adrese (liniile A15-A0).

Procesoare numerice de semnal - Cap. 4 29


Fig.4.11 Numărătorul de program, stiva şi circuitele anexe

Memoria de date este adresată de PC în timpul instrucţiunii BLKD, când se mută


blocuri de date dintr-o zonă de memorie în alta. Conţinutul acumulatorului poate fi
încărcat în PC, utilizând instrucţiunile BACC sau CALA.

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.

TMS320C2x permite repetarea execuţiei unei instrucţiuni de N+1 ori, încărcând în


registrul RPTC (registrul numărător de repetări) pe 8 biţi un număr N.
Instrucţiunea va fi executată până când RPTC ajunge la zero, prin decrementare.
Acest lucru este util în cazul multor instrucţiuni, cum ar fi: NORM, MACD, sau
SUBC.

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).

30 Procesoare numerice de semnal - Cap. 4


4.6.2 Funcţionarea magistralei pipeline

"Pipelining"-ul instrucţiunilor constă din secvenţa de operaţii ale magistralei


externe care apar în cursul execuţiei instrucţiunii. Ciclul de prefetch-decodare-
execuţie al pipeline-ului este invizibil pentru utilizator, cu excepţia anumitor cazuri
când pipeline-ul trebuie întrerupt (cum sunt instrucţiunile de salt). Operaţiile de
prefetch, decodare şi execuţie sunt independente, ceea ce permite ca ele să se
suprapună în timp la execuţia unei instrucţiuni. În timpul oricărui ciclu, două sau
trei instrucţiuni pot fi active la un moment dat, fiecare în diverse stadii de execuţie,
rezultând două, respectiv trei nivele de pipeline pentru TMS320C2x şi
TMS320C25. Diferenţele între nivelele de pipelining nu afectează neapărat viteza
de execuţie a unei instrucţiuni, dar schimbă esenţial secvenţa extragere / decodare.
Multe instrucţiuni se execută în acelaşi număr de perioade, indiferent dacă sunt
executate din memoria intenă ROM, RAM, sau din memoria de program externă.

Circuitele suplimentare ale PC asigură pentru TMS320C2x un pipelining pe 3


nivele. Mai există un registru numărător de prefetch (PFC), registrul MCS pe 16
biţi, registrul IR şi registrul de aşteptare a instrucţiunilor QIR). În cazul pipeline-
ului pe trei nivele, PFC conţine adresa următoarei instrucţiuni ce urmează a fi
executată. Odată pre-extrasă această instrucţiune, ea este încărcată în IR, în afară
de cazul în care IR conţine încă o instrucţiune în curs de execuţie, caz în care este
depusă în QIR. PFC este incrementat, iar după completa execuţie a instrucţiunii
curente următoarea instrucţiune este încărcată în IR din QIR pentru a intra în
execuţie.

Adresa conţinută de PC nu este utilizată în mod direct în operaţiile de fetch, ea


fiind utilizată de cele mai multe ori ca pointer de referinţă a poziţiei curente din
program. PC este incrementat după execuţia unei instrucţiuni. Când apar
întreruperi sau subrutine, conţinutul registrului PC este salvat în stivă pentru a
prezerva întoarcerea în programul principal. Operaţiile de prefetch, decodare şi
execuţie ale pipeline-ului fiind independente, permit suprapunerea instrucţiunilor.
În timpul oricărui ciclu, trei instrucţiuni diferite pot fi active, fiecare la alt stadiu de
execuţie. Fig.4.12 arată funcţionarea magistralei pipeline pe trei nivele pentru
execuţia instrucţiunilor de un singur cuvânt şi un singur ciclu din memoria ROM
internă sau din memoria externă, fără stări de aşteptare.

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.

Procesoare numerice de semnal - Cap. 4 31


Fig.4.12 Funcţionarea magistralei pipeline cu trei nivele (TMS320C25)

Fig.4.13 Funcţionarea magistralei pipeline cu două nivele

Procesorul TMS320C2x execută majoritatea instrucţiunilor într-un singur ciclu


pentru că toate sunt decodate direct. Funcţionarea pipeline-ului are o adâncime de
3.25 cicli, ceea ce înseamnă că într-un ciclu dat, este adusă cea de-a treia
instrucţiune, se decodează cea de-a doua şi se execută prima. Fig.4.14 arată
funcţionarea internă a magistralei pipeline TMS320C25 raportată la fazele de un
sfert de ciclu de la 1 la 4 (Q1 - Q4).

Ciclul maşină, indicat extern de frontul căzător al semnalului CLKOUT1 la


TMS320C25, constă din 4 faze interne, ceea ce permite execuţia operaţiilor
pipeline-ului mai repede decât o pătrime a ciclului maşină. Secvenţa de instrucţiuni
a pipeline-ului este arătată în tabelul următor.

CICLU FAZĂ OPERAŢIE


1 1 Noul PC este depus pe magistrala de adrese
2 Citire externă a instrucţiunii
3 Citire externă a instrucţiunii
4 Citire externă a instrucţiunii
2 1
2 Decodarea instrucţiunii
3 Decodarea instrucţiunii / execuţie în ARAU
4 Acces la memoria RAM / execuţie în ARAU
3 1 Acces la memoria RAM / încărcarea noii valori a
registrului auxiliar / reînnoirea registrului ARP
32 Procesoare numerice de semnal - Cap. 4
2 Execuţie în ALU
3 Execuţie în ALU
4 Încărcarea acumulatorului
4 1 Încărcarea registrului de stare

Fig.4.14 Funcţionarea standard a magistralei pipeline la TMS320C25

Când se utilizează instrucţiunea de adunare, de exemplu ADD *+,12,AR4,


instrucţiunea este extrasă în primul ciclu. În timpul fazelor 2, 3 a ciclului 2,
instrucţiunea este decodată, fiind generată şi adresa pentru aducerea operandului,
adresă ce se găseşte într-un registru auxiliar. În intervalul Q4 al ciclului 2 şi Q1 al
ciclului 3, operandul este adus din memoria RAM. Incrementarea registrului
auxiliar este realizată în Q3 şi Q4 al ciclului 2, iar valoarea este încărcată în
registrul auxiliar în Q1 al ciclului 3. Registrul ARP este încărcat cu noua valoare
corespunzătoare unui alt registru AR. În timpul Q2 şi Q3 al ciclului 3, data este
trecută printr-un registru de deplasare, executându-se o deplasare stânga cu 12 biţi,
se adună apoi în ALU cu valoarea din acumulator. În faza Q4 a ciclului 3,
rezultatul este încărcat în acumulator, iar starea operaţiei din ALU este încărcată în
registrul de stare, în Q1 a ciclului 4. Biţii care se încarcă în acest moment în
registrul de stare reflectă starea curentă a ALU şi a registrului ARP asociat
următoarei instrucţiuni.

În cazul unei instrucţiuni de stocare (de exemplu, SACL *0-,3,AR2), funcţionarea


circuitului în primii doi cicli este identică cu cazul anterior. În Q1 şi Q2 ale
primului ciclu, datele din acumulator sunt trecute prin circuitul de deplasare,
deplasate cu 3 biţi la stânga şi umplute cu 0. Cei mai puţin semnificativi 16 biţi ai
valorii deplasate sunt scrişi la adresa specificată de registrul auxiliar curent. În
cursul Q3 şi Q4 din ciclul 3, registrul index (AR0) este adunat la conţinutul
registrului auxiliar curent şi stocat în registrul auxiliar curent în Q1 al fazei a patra.
Procesoare numerice de semnal - Cap. 4 33
În Q1 al fazei a patra indicatorul registrului auxiliar este schimbat în AR2. Fig.4.15
arată desfăşurarea instrucţiunilor ADD şi SACL într-o secvenţă de program. Se
presupune că ambele rezidă în memoria externă, nu există stări de aşteptare, iar
datele sunt situate în memoria de date internă (on-chip RAM).

Fig.4.15 Funcţionarea magistralei pipeline pentru instrucţiunea ADD


urmată de instrucţiunea SACL

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

TMS320C25 poate fi utilizat pentru interfaţarea cu memorii externe lente,


folosindu-se stări de aşteptare generate prin hardware. Acestea se aplică pentru
memoria program, date şi spaţiul I/O ale arhitecturii Harvard. Stările de aşteptare
întârzie în mod direct pipelining-ul instrucţiunilor. Fiecare stare de aşteptare
inserată în timpul extragerii instrucţiunii contribuie la mărirea ciclului de pipeline
corespunzător instrucţiunii. Orice stare de aşteptare inserată în timpul accesării
datelor externe sau a spaţiului I/O măreşte de asemenea ciclul de pipeline. Fig.4.16
34 Procesoare numerice de semnal - Cap. 4
descrie reacţia mecanismului pipeline la stări de aşteptare la accesul în memoria
externă. Starea de aşteptare introdusă în ciclul 2 duce la neexecutarea operaţiei în
ciclul 4.

Fig.4.16 Funcţionarea magistralei pipeline cu stări WAIT

Magistrala de date externă multiplexată

Fig.4.17 Funcţionarea magistralei pipeline în caz de conflict


pe magistrala de date externă

Magistrala de date este multiplexată pentru a putea deservi cele 3 spaţii de


memorie ale procesorului. Aducerea din exterior a instrucţiunii din mai multe zone
de memorie adaugă stări de aşteptare la ciclurile de pipeline corespunzătoare
Procesoare numerice de semnal - Cap. 4 35
datorită faptului că pentru fetch-ul din exterior este necesar un ciclu întreg, în timp
ce pentru cel intern e nevoie de două sferturi, putând fi inclus în pipeline-ul cu 3
nivele. Accesul la memoria de date este controlat prin setarea indicatorului paginii
de date sau a conţinutului registrului auxiliar utilizat. Pipeline-ul este afectat în
acelaşi mod şi de accesul la magistrala I/O sau la tabelele din memoria de program.
Fig.4.17 arată modul în care magistrala procesează o instrucţiune cu acces extern la
program şi la date.

Instrucţiunile pe două cuvinte

Toate aceste instrucţiuni au un ciclu adiţional pentru aducerea operandului imediat


pe 16 biţi, care urmează mnemonicii instrucţiunii.

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.

Discontinuităţile numărătorului de program (PC)

Datorită mecanismului de pipeline, o modificare (alta decât o incrementare) a


numărătorului de program necesită ştergerea pipeline-ului. Acest lucru se aplică la
toate instrucţiunile de salt, apelarea de subrutine, capcanele (TRAP) software, sau
la întoarcerile din subrutine.

Magistrala pipeline fiind pe 3 nivele, următoarea instrucţiune este deja încărcată


când apare un salt, dar ea nu va afecta registrele şi datele, fiind ştearsă de pipeline.
Sunt inseraţi 2 cicli "morţi" în timp ce magistrala pipeline aşteaptă să fie
reîncărcată.

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ă.

36 Procesoare numerice de semnal - Cap. 4


Fig.4.18 Funcţionarea magistralei pipeline pentru salt
executat în RAM-ul intern

Fig.4.19 Funcţionarea magistralei pipeline


pentru RET în RAM intern

Întreruperile sunt discontinuităţi generate hardware în accesarea secvenţială a


numărătorului de program (PC). Execuţia întreruperii se bazează pe execuţia
completă a instrucţiunii în curs mai degrabă decât pe terminarea operaţiei curente
în memorie. Instrucţiunea curentă care este executată în momentul apariţiei
întreruperii este terminată. Întreruperea aşteaptă intervalul dintre terminarea
instrucţiunii în curs şi începerea instrucţiunii care urmează. În acest caz, o
instrucţiune repetată va fi considerată ca o singură instrucţiune, astfel că înainte ca
întreruperea să fie acceptată se termină repetările instrucţiunii în curs. Aceasta dă
prioritate algoritmului asupra servirii întreruperilor. Când vectorul de întrerupere
Procesoare numerice de semnal - Cap. 4 37
este situat în memoria externă cu o stare de aşteptare, se vor genera 2 impulsuri ale
semnalului /IACK. Dacă acest lucru este o problemă, linia /IACK trebuie
condiţionată de /READY.

Aspecte hardware ale mecanismului pipeline

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.

Reset. Resetul este o întrerupere totalmente nemascabilă şi atunci când este


executată opreşte funcţionarea pipeline-ului şi şterge părţile neexecutate. Impulsul
de reset trebuie să fie activ timp de 3 perioade ale CLKOUT1. Înainte de cel de-al
treilea front crescător al CLKOUT1, procesorul trece ieşirile sale în stare de înaltă
impedanţă. După frontul crescător al /RS, circuitul extrage vectorul de reset.
Deoarece pipeline-ul este gol, saltul la vectorul de întrerupere se va executa două
perioade mai târziu. Dacă /HOLD este activat în timpul resetului activ, nu se va
extrage vectorul de întrerupere înainte de dezactivarea lui /HOLD, procesorul
dezactivând apoi şi /HOLDA. Când /HOLD este activ simultan cu resetul pentru a
permite preîncărcarea datelor, linia /HOLDA va fi activă în low 3 perioade de ceas,
indiferent dacă /RS a trecut sau nu în high. Acest lucru este util prin faptul că linia
/HOLDA poate fi utilizată pentru a elibera /RS şi a garanta astfel un ciclu de reset
de minim 3 cicli.

Întreruperile devin vizibile asupra procesorului atunci când semnalul /IACK


devine valid pe frontul crescător al CLKOUT2. Acest lucru indică aducerea
primului cuvânt al vectorului de întrerupere. Dacă se generează stări de aşteptare în
segmentul de memorie unde se găseşte vectorul de întrerupere, câte un impuls
/IACK va mai apare în timpul fiecărei stări de aşteptare apărute. Dacă acest lucru
cauzează probleme cu interfaţa externă, /IACK poate fi condiţionat de READY
pentru acceptarea doar a ultimului impuls /IACK. Instrucţiunea BIOZ testează
pinul /BIO în timpul fazei de extragere a instrucţiunii pe pipeline.

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.

Accesul la memoria internă de pe circuit face ca pipeline-ul să fie vizibil doar pe


linia /MSC, activ pe frontul crescător al CLKOUT2. Execuţia din memoria
program de pe circuit nu permite instrucţiunilor accesate din memoria de date
externă să funcţioneze într-un singur ciclu. Execuţia normală a unei instrucţiuni
necesită 2 faze în cazul memoriei de date de pe circuit, în timp ce accesul în
memoria externă necesită 4 faze. Mecanismul pipeline este optimizat pentru a
realiza instrucţiuni repetate care accesează memoria externă de date cu un singur
ciclu suplimentar la prima extragere.

Accesul la memoria de date / program externă necesită ca starea pipeline-ului să


fie monitorizată de /MSC, /STRB, /PS, /DS. Linia /MSC indică pe frontul crescător
al CLKOUT2 dacă începe sau nu un ciclu de extragere pentru o nouă instrucţiune.
Linia /PS indică faptul că magistrala de date este utilizată la aducerea instrucţiunii.
Un pas pe pipeline nu este indicat deoarece /PS rămâne activ până când pipeline-ul
aduce instrucţiunea externă. Linia /PS activă low nu înseamnă neapărat că se
extrage o instrucţiune. În cazul instrucţiunilor TBLR / TBLW, MAC / MACD,
BLKP, linia /PS activă înseamnă accesare de tabele. Pentru urmărirea aducerii
datelor din memoria de date externă, se utilizează /STRB. Linia /DS activă pe low
indică că magistrala de date este utilizată la accesarea memoriei de date. Această
linie rămâne activă timp de 2 aduceri din memorie în cazul unei operaţii de stocare
a acumulatorului urmată de o instrucţiune în ALU, ambele operând cu memoria
externă. Două impulsuri /STRB identifică fiecare acces. De asemenea, linia rămâne
activă mai mulţi cicli în cazul unei instrucţiuni repetate. Accesul la spaţiul de I/O
operează similar în cazul instrucţiunilor de I/O care înlocuiesc operaţiile de stocare
acumulator şi salvare.

4.6.3 Reset

Este o întrerupere nemascabilă ce poate fi folosită oricând pentru a trece procesorul


într-o stare cunoscută. Resetul activ forţează procesorul să termine execuţia şi
forţează PC în "0". /RS afectează diferite registre şi biţii de stare. Pentru
funcţionarea corectă a sistemului după cuplare, semnalul /RS trebuie activat timp
de 3 perioade de ceas pentru a garanta resetul. Procesorul execută instrucţiunile
începând de la locaţia 0 care în mod normal conţine un salt în rutina de iniţializare
a sistemului. După activarea resetului au loc următoarele iniţializări:
1) CNF = 0 din ST1, fapt ce va configura toată memoria RAM ca memorie de date
2) PC este setat în "0", liniile A15-A0 sunt trecute în "0" cât timp /RS este în low
Procesoare numerice de semnal - Cap. 4 39
3) Magistrala de date este trecută în stare de înaltă impedanţă
4) Întreruperile sunt dezactivate, prin setarea bitului INTM (interrupt mode) în
"1"; registrul IFR este trecut în "0"
5) Semnalele de control ale memoriei şi spaţiului de I/O (/PS, /DS, /IS, R//W,
/STRB, /BR) sunt dezafectate prin aducerea lor în high cât timp /RS este în low
6) Biţii de stare au următoarele setări: OV = 0, XF = 1 (TMS32020), SXM = 1,
PM = 0, HM = 1, FO = 0, C = 1, FSM = 1 (TMS320C25)
7) Registrul GREG (global memory register) este şters şi toată memoria va fi
locală
8) Registrul RPTC (repeat counter) este şters
9) Pinul DX este trecut în stare de înaltă impedanţă. Orice operaţie de transmisie /
recepţie este terminată de către portul serial şi bitul TXM = 0. Aceasta
configurează pinul FSX ca intrare. Activarea operaţiilor pe portul serial are loc
după un impuls ce vine după dezactivarea resetului
10) Registrul TIM este încărcat cu FFFF. La TMS320C25 registrul PRD este
încărcat cu aceeaşi valoare. TMS32020 cere o iniţializare soft a acestui registru.
Registrul TIM începe să se decrementeze după dezactivarea /RS
11) Este generat un semnal /IACK ca la întreruperile mascabile
12) Starea memoriei RAM este nedefinită
13) Biţii ARB, ARP, DP, IMR, OVM, TC nu sunt iniţializaţi de reset.

4.6.4 Registrele de stare

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.

* La TMS32020 biţii 5, 6 şi 9 ai lui ST1 sunt în starea logică "1"

Fig.4.20 Organizarea registrelor de stare

40 Procesoare numerice de semnal - Cap. 4

S-ar putea să vă placă și

  • Cuprins
    Cuprins
    Document4 pagini
    Cuprins
    api-3725868
    Încă nu există evaluări
  • Cap 4
    Cap 4
    Document10 pagini
    Cap 4
    api-3725868
    100% (1)
  • Aplicatii DSP
    Aplicatii DSP
    Document12 pagini
    Aplicatii DSP
    Corpaci Petrica
    Încă nu există evaluări
  • Cap 5
    Cap 5
    Document12 pagini
    Cap 5
    api-3725868
    100% (1)
  • Cap 41
    Cap 41
    Document12 pagini
    Cap 41
    api-3725868
    Încă nu există evaluări
  • Cap 43
    Cap 43
    Document10 pagini
    Cap 43
    api-3725868
    Încă nu există evaluări
  • Cap 44
    Cap 44
    Document14 pagini
    Cap 44
    api-3725868
    Încă nu există evaluări
  • Cap 22
    Cap 22
    Document12 pagini
    Cap 22
    api-3725868
    Încă nu există evaluări
  • Pns c9
    Pns c9
    Document25 pagini
    Pns c9
    api-3725868
    Încă nu există evaluări
  • Cap 1
    Cap 1
    Document5 pagini
    Cap 1
    api-3725868
    50% (2)
  • Cap 2
    Cap 2
    Document10 pagini
    Cap 2
    Maria Botnari
    Încă nu există evaluări
  • Cap 21
    Cap 21
    Document10 pagini
    Cap 21
    api-3725868
    100% (1)
  • PNS C7
    PNS C7
    Document25 pagini
    PNS C7
    api-3725868
    100% (1)
  • Pns c8
    Pns c8
    Document23 pagini
    Pns c8
    api-3725868
    Încă nu există evaluări
  • Pns c3
    Pns c3
    Document35 pagini
    Pns c3
    api-3725868
    Încă nu există evaluări
  • PNS C11
    PNS C11
    Document26 pagini
    PNS C11
    api-3725868
    100% (1)
  • Pns c4
    Pns c4
    Document16 pagini
    Pns c4
    api-3725868
    Încă nu există evaluări
  • Pns c6
    Pns c6
    Document30 pagini
    Pns c6
    api-3725868
    Încă nu există evaluări
  • Pns c5
    Pns c5
    Document38 pagini
    Pns c5
    api-3725868
    Încă nu există evaluări
  • PNS C2
    PNS C2
    Document28 pagini
    PNS C2
    api-3725868
    100% (1)
  • PNS C11
    PNS C11
    Document26 pagini
    PNS C11
    api-3725868
    100% (1)
  • Pns c10
    Pns c10
    Document28 pagini
    Pns c10
    api-3725868
    Încă nu există evaluări
  • PNS C1
    PNS C1
    Document37 pagini
    PNS C1
    api-3725868
    100% (3)
  • Pns c8
    Pns c8
    Document23 pagini
    Pns c8
    api-3725868
    Încă nu există evaluări
  • Pns c6
    Pns c6
    Document30 pagini
    Pns c6
    api-3725868
    Încă nu există evaluări
  • Pns c9
    Pns c9
    Document25 pagini
    Pns c9
    api-3725868
    Încă nu există evaluări
  • PNS C7
    PNS C7
    Document25 pagini
    PNS C7
    api-3725868
    100% (1)
  • Pns c5
    Pns c5
    Document38 pagini
    Pns c5
    api-3725868
    Încă nu există evaluări
  • Pns c4
    Pns c4
    Document16 pagini
    Pns c4
    api-3725868
    Încă nu există evaluări