tms320c62x-64x
TRANSCRIPT
TMS320C62x/64x
Generatia C6000 este o familie de procesoare de semnal in virgula fixa de 16 biti care
are la baza arhitectura VLIW (Very-Long-Instruction-Word). Exista si o versiune cu virgula
mobila a acestei familii (TMS320C67x). Cele doua versiuni ale familiei de procesoare in
virgula fixa sunt asemanatoare insa C64x este o versiune imbunatatita a familiei C62x, cu mai
multe unitati functionale. Printre domeniile de folosire a procesoarelor C6000 pot fi
mentionate: imagistica avansata, sistemele cu vedere artificiala, sistemele radar si sonar,
infrastructura sistemelor de comunicatii wireless 3G si de banda larga.
Dupa cum este aratat in Fig. 1. procesoarele C62x/C64x au acelasi nucleu constituit
din doua cai de date in virgula fixa (A si B) si o unitate de control a instructiunilor care
comanda extragerea codurilor, decodarea si logica de comanda. Fiecare cale de date contine
patru unitati de executie independente, .Ln, .Sn, .Mn si .Dn., unde n = 1 sau 2, corespunde
uneia din cele doua cai de date, A sau B. Prin urmare nucleul procesorului contine opt unitati
functionale, in care sunt incluse doua multiplicatoare si cite 16 registre de 32 de biti (notate
A0÷A15, respectiv B0÷B15), ceea ce inseamna ca procesorul poate executa pina la opt
instructiuni de 32 de biti simultan.
Procesoarele C62x executa doua operatii de multiplicare de 16x16 biti per ciclu, in
timp ce procesoarele C64x executa patru multiplicari de 16x16 biti per ciclu cu unitatea M.. In
plus, cu cele doua unitati de multiplicare procesoarele C64x pot executa instructiuni de
multiplicare de tip SIMD (Single Instruction Multiple Data) cu operanzi de 8 sau de 16 biti,
respectiv doua inmultiri cu operanzi de 16 biti sau patru inmultiri cu operanzi de 8 biti. In plus
C64x poate executa inmultiri in precizie extinsa, operatii de rotire pe 32 de biti, deplasari
bidirectionale pe 32 biti si inmultiri in cimpuri Galois.
Unitatea L contine un ALU pe 40 de biti. Acesta poate executa operatii aritmetice pe
32 sau pe 40 de biti (in mod saturat sau nesaturat), normalizari si operatii logice pe 32 de biti.
Familia C64x include si instructiuni pentru adunari/scaderi de tip SIMD (cite doua operatii pe
16 biti sau patru operatii de 8 biti). Unitatea executa si operatii logice XOR si NAND.
Unitatea D contine un sumator/scazator pe 32 de biti folosit pentru generarea
adreselor. Intr-un ciclu sunt generate doua adrese folosind adresarea liniara sau adresarea
circulara. Daca nu este folosita pentru generarea adreselor unitatea poate fi folosita ca un
1
ALU. La procesoarele C64x aceasta unitate poate executa operatii load/store pe 64 de biti,
operatii load/store cu operanzi nealiniati, pecum si operatii logice AND, OR, XOR si NAND.
Unitatea S contine un ALU pentru intregi de 32 biti si un deplasator de 40 de biti. Cu
aceste unitati functionale pot fi executate operatii aritmetice logice si cu cimpuri de biti cu
date pe 32 sau 40 biti, precum si deplasari. La procesoarele C64x unitatea S executa operatii
de comparare (doua comparari pe 16 biti sau patru pe 8 biti), manipulari de date impachetate
si salturi.
Procesoarele C64x au doua seturi de cite 32 de registre. In general durata unui ciclu
este de 4÷5 ns la procesoarele C62x, respectiv de 1.5÷2 ns la procesoarele C64x. Cind cele
opt unitati functionale executa in paralel opt instructiuni la capacitate completa performanta
procesoarelor este de 3600 MIPS cind lucreaza la 600 MHz. Folosind arhitectura VLIW
procesoarele C6000 pot realiza un grad mare de paralelism, eliminind astfel necesitatea de a
folosi un hardware care sa execute planificarea executiei unor instructiuni complexe.
Planificarea este realizata in etapa de compilare, de catre compilator si de programator, ceea
ce simplifica mult arhitectura procesorului comparativ cu procesoarele superscalare cum este
cazul procesoarelor Pentium. Procesoarele folosesc o aritmetica load/store ceea ce implica
faptul ca orice acces la memoria de date este executat printr-o operatie explicita de incarcare
(load) si de stocare (store). Aceasta facilitate simplifica setul de instructiuni si implementarea
hardware a circuitului.
Fig. 1 Nucleul procesoarelor TMS320C62x/64x
2
Fig. 2
Organizarea memoriei.
Memoria interna a procesoarelor C62x/C64x este realizata folosind o arhitectura
Harvard modificata, cu spatii separate pentru coduri si pentru date. Memoria pentru coduri
foloseste o magistrala de 32 de biti pentru adrese si una de 256 de biti pentru date, folosita
pentru extragerea instructiunilor de 8x32 biti. Memoria pentru date foloseste o magistrala de
32 biti pentru adrese si doua magistrale de 32 de biti pentru date. Procesoarele C64x folosesc
o magistrala de date de 64 de biti. De mentionat ca atit memoria pentru date cit si cea pentru
coduri sunt adresabile pe octet. Datele multioctet trebuie aliniate in memorie. In functie de
varianta, capacitatea memoriei interne pentru coduri si pentru date este cuprinsa intre 512
kbiti si 4 Mbiti. Unele variante poseda memorie cache petru coduri si pentru date organizata
pe doua nivele (cache L1-intern si cache L2-extern). Memoria interna pentru date este
impartita in citeva bancuri pentru accesarea simultana a datelor din diferite bancuri intr-un
ciclu.
Pentru accesarea memoriei externe procesoarele familiei C6000 poseda controlere
pentru magistrale EMIF (Extended Memory Interface) (una la familia C62x si doua la familia
3
C64x). EMIF are o magistrala de adrese de 23 biti si una de date de 32 biti, ambele putind fi
multiplexate intre memoria pentru cod si cea pentru date. Cu aceste interfete pot fi conectate o
gama larga de memorii externe sincrone sau asinscrone (RAM static sau dinamic, sincrone
sau asincrone, ROM, flash, s.a.). Memoriile externe sunt impartite in 4 subspatii : CE0, CE1,
CE2 si CE3, care pot fi accesate pe 8, 16 sau pe 32 de biti, cu anumite restrictii.
Arhitectura VLIW de tip VelociTI
O cerinta importanta pentru programarea simpla a oricarui circuit DSP este
ortogonalitatea setului de instructiuni. Aceasta inseamna ca setul de instructiuni nu trebuie sa
contina restrictii sau conditii speciale, ceea ce inseamna ca trebuie sa fie consistent.
Arhitectura VelociTi utilizata de Texas Instruments pentru procesoarele familiei
C6000 foloseste un set de instructiuni asemanator cu cel al procesoarelor RISC. Pentru a
exploata resursele interne aceste instructiuni simple sunt “impachetate” sub forma unor
cuvinte instructiune lungi. Un pachet extras, care are 256 de biti, contine de la una pina la opt
instructiuni, codificate cu 32 de biti, care pot fi executate in paralel. Folosirea unor
instructiuni simple usureaza asignarea unitatilor functionale, bazate pe instructiuni care sunt
executate in paralel. Circuitul extrage intr-un ciclu un pachet executabil care poate fi divizat
in una pina la opt instructiuni simple, care sunt apoi repartizate unitatilor de executie. O parte
dintre instructiunile procesorului sunt date in Tabelul 1, iar modul de impachetare este ilustrat
in Fig. 3. Daca pentru fiecare instructiune dintr-un pachet extras sunt disponibile resursele
pentru executie toate cele opt instructiuni sunt executate in paralel. Altfel pachetul extras este
impartit in pachete executabile care sunt executate succesiv. In arhitectura VLIW traditionala
se pot executa doar pachete de instructiuni care intra intr-un cuvint lung. Arhitectura VelociTI
combina patru pachete executabile intr-un singur pachet extras, reducind lungimea codului
75% in exemplul dat.
Mecanismul pipeline folosit pentru prelucrarea instructiunilor de procesoarele
C62x/64x este impartit in trei etaje: extragere, decodare si executie. Toate instructiunile
necesita patru faze pentru extragere dupa cum urmeaza:
- PG – Program Address Generate
- PS – Program Address Send
- PW – Program Address Ready Wait
- PR – Program Fetch Packet Receive
4
iar pentru decodificare sunt necesare doua faze:
- DP – Instruction Dispatch
- DC – Instruction Decode
Stadiul de executie este divizat in cinci faze (E1÷E5) care corespund numarului de etape
necesare pentru fiecare instructiune individuala. Majoritatea instructiunilor procesoarelor
C6000 necesita o singura faza de executie (E1), dar exista si instructiuni care necesita mai
multe faze. De exemplu, multiplicare necesita doua faze, iar incarcarea necesita cinci faze.
Eficienta pipeline-ului este evidenta in Fig. 5 unde pachetele consecutive de instructiuni (cite
opt instructiuni in fiecare pachet) ocupa complet pipeline-ul. Mecanismul pipeline a divizat
fiecare operatie astfel incit resursele interne ale procesorului sa fie cit mai complet folosite.
In Fig. 6 este prezentat fluxul codului in arhitectura VelociTI a procesoarelor
TMS320C62xx. Schema prezinta de sus in jos cele trei etaje ale pipeline-ului, respectiv Fetch,
Decode si Execute. Functionarea este ilustrata pe secventa de instructiuni urmatoare:
LOOP1:STH .D1 A5,*A8++[2]
|| STH .D2 B5,*B8++[2]|| SADD .L1 A2,A7,A2|| SADD .L2 B2,B7,B2|| SMPYH .M2X B3,A3,B2|| SMPY .M1X B3,A3,A2||[B1] SUB .S2||[B1] B .S1
Aceasta secventa este impachetata sub forma unui pachet complet executabil. Dupa ce
un pachet a fost distrubuit in faza DP a decodificarii el este decodificat (DC) in urmatorul
ciclu. In faza DC sunt stabilite registrele si caile de date pentru a incepe etapa Execute cu faza
E1.
Alte avantaje obtinute prin folosirea arhitecturii VelociTI sunt: ortogonalitatea
instructiunilor, pipelining-ul eficient, instructiunile de tip RISC. Conceptul VLIW a fost
utilizat si de alte firme pentru realizarea unor procesoare performante. De exemplu, Philips a
creat familia de procesoare TriMedia (TM1000, TM1100, TM1300).
5
Tabelul 1.
Fig. 3 Structura unui pachet extras
Fig. 4 Fazele executiei pipeline pentru un pachet executabil
6
Fig. 5 Functionarea pipeline pentru pachete complet executabile
Fig. 6 Schema bloc functionala pentru executia unei instructiuni VLIW
Structura sistemului
Procesoarele C6000 contin periferice pentru interfatarea cu dispozitive externe cum ar
fi memorii, alte procesoare C6000, un procesor gazda, un CODEC, dispozitive cu acces serie.
7
HPI (Host Port Interface) este un port paralel care lucreaza pe 16 biti (pentru C62x si
C64x), sau pe 32 biti (numai la C64x). Prin acest port, alte procesoare C6000 sau un procesor
gazda poate accesa memoria interna a lui C6000. In modul HPI-16 un dispozitiv gazda poate
citi sau scrie doua date de 16 biti din/in memoria interna a procesorului.
XB este o magistrala de extensie care asigura o cale pentru alte procesoare pentru a
aceesa memoria interna a lui C6000. XB este similar cu HPI insa are capacitatea de 32 biti si
poate functiona in mod sincron sau asincron.
Interfata PCI (Peripheral Component Interconect) este folosita tot pentru transferuri
I/O pe 32 biti la o frecventa de 33 MHz.
Controlerul DMA transfera date de la un bloc de memorie la altul fara interventia
CPU. Transferul este comandat prin intreruperi. C62x are un controler DMA cu 4 canale.
Procesoarele C62x folosesc 2 sau 3 porturi full-duplex McBSP (Multichannel
Buffered Serial Port). Fiecare port poate transfera date pe 8, 12, 16, 20, 24 sau 32 de biti la o
rata de transfer de 100 MHz. Pentru transferuri pe 8 biti McBSP asigura compandarea
automata potrivit legilor A sau µ. Procesoarele C6000 suporta pina la 128 de canale
multiplexate pentru secvente de biti.
Procesoarele C62x/C64x au 2 si respectiv 3 timere de 32 de biti. Fiecare timer are
pini dedicati de intrare si iesire si functioneaza cu tact extern sau intern cu frecventa ¼ din
cea a tactului procesorului.
Circuitul PLL (Phase-locked Loop) este folosit pentru normarea si sincronizarea
tactului. De exemplu, procesoarele C64x multiplica tactul cu factorul 1, 6 sau 12. Prin urmare
procesorul poate genera la iesire diferite semnale de tact avind ca referinta un semnal de
intrare.
Procesoarele C6000 poseda 3 regimuri de functionare cu consum redus, IDLE1,
IDLE2 si IDLE3.
8
Fig. 7 TMS320C62x
Fig. 8 TMS320C64x
9