Chapter 2 Architecture du TMS320C6000 Vue Vu e d’ d’en ense semb mble le
Objectifs du chapitre •
Décrire l'architecture du CPU du C6000.
•
Intr In trod odui uire re de qu quel elqu ques es in inst stru ruct ctio ions ns de ba base se..
•
Décrire Décr ire la la mémoire mémoire du C6000. C6000.
•
Donner une vue d'ensemble des périphériques périphériques..
Implan Imp lantat tation ion de la som somme me de prod produit uitss (SdP) Il a été montré au chapitre 1 que la SdP est l'élément cclé que lé pour la plupart d pour des de es al algo algorithmes gori rith thme mess DSP.. DSP
Donc, nous allons écrire llee Donc, code pour ceett al code algo gori rith thme me et en même temps découvrir en découvrir l'ar l' l'architecture arch chit itec ectu ture re C C6000 6000 6000..
N
Y =
å
an * xn
n = 1
= a1 * x1 + a2 * x2 +... + aN * xN
Deux opérations de base sont nécessaires pour cet algorithme. (1) Multiplication (2) Addition Donc deux instructions de base sont requises.
Implan Imp lantat tation ion de la som somme me de prod produit uitss (SdP) Donc, nous allons mettre en œuvre l'algorithme SdP! L’implantation dans ce module doit se faire en assembleur.
N
Y =
å
an * xn
n = 1
= a1 * x1 + a2 * x2 +... + aN * xN
Deux opérations de base sont nécessaires pour cet algorithme. (1) Multiplication (2) Addition Donc deux instructions de base sont requises.
mult mu ltip ipli lica cate teur ur (M (MPY PY)) N
Y =
å
an * xn
n = 1
= a1 * x1 + a2 * x2 +... + aN * xN
La multiplication de a1 par x1 est faite en assembleur par l’instruction suivante:
MPY MPY
a a1, 1, x1, x1, Y
Cette instruction est effectuée par l’unité de multiplicatio multiplication n appelée “.M”
multiplicateur (unité .M) 40
Y =
å
an * xn
n = 1
.M L’ unité unité . M effectue effectue les multiplications multiplications multiplica tions en hardware
MPY MPY
.M
a1, a1, x1, x1, Y
Note: Un multiplicateur 16 16--bit -bit par 16 16--bit -bit fournit un résultat sur 3232-bit. -bit. Un multiplicateur 32 32--bit -bit par 32 32--bit -bit fournit un résultat sur 6464-bit. -bit.
Addition (.?) 40
Y =
å
an * xn
n = 1
.M
.?
MPY MPY
.M
a1, a1, x1, x1, prod prod
ADD ADD
.?
Y Y,, prod, prod, Y
Addi Ad diti tion on (Un (Unit ité é .L .L)) 40
Y =
å
an * xn
n = 1
.M
.L
MPY MPY
.M
a1, a1, x1, x1, prod prod
ADD ADD
.L
Y, Y, prod, prod, Y
Les processeurs RISC ( Reduced Reduced InstructionInstruction-Set - Set Set Computer) comme le C6000 utilisent les registres pour garder les opérandes, alors on change ce code.
Pile des Registres - A 40
Register File A A0 A1 A2 A3 A4
Y =
a1 x1
å
an * xn
n = 1
prod Y
.M
. . .
.L
MPY MPY
.M
a1, a1, x1, x1, prod prod
ADD ADD
.L
Y, Y, prod, prod, Y
A15 32--bits 32 -bits
Laissez--nous Laissez -nous corriger ce problème en remplaçant a, x, prod et Y par par les registres registres registr es comme comme indiqué indiqué cici-dessus. -dessus.
Spécification de noms des registres 40
Register File A A0 A1 A2 A3 A4
Y =
a1 x1
å
an * xn
n = 1
prod Y
.M
. . .
.L
MPY MPY
..M M
A0, A1, A3
ADD ADD
..L L
A4, A3, A4
A15 32--bits 32 -bits
Les registres A0, A1, A3 et A4 contiennent les valeurs qui seront utilisées par les instructions.
Spécification de noms des registres 40
Register File A A0 A1 A2 A3 A4
Y =
a1 x1
å
an * xn
n = 1
prod Y
.M
. . .
.L
MPY MPY
..M M
A0, A1, A3
ADD ADD
..L L
A4, A3, A4
A15 32--bits 32 -bits
La pile des registres A contient 16 registres (A0 --A15) A15) 32--bits 32 -bits de largeur.
Chargement des données Register File A A0 A1 A2 A3 A4
Q: Comment p Q: peuteut-on -on on charger charger les les opérandes dans les les registres? registres?
a1 x1 prod Y
.M
. . .
.L
A15 32-bits 32-bits
Unit Unité é Load Load “.D” “.D” Register File A A0 A1
a1 x1
A2 A3
Q: Comment p Q: peuteut-on -on on charger charger les les opérandes dans les les registres? registres?
prod Y
.M
. . .
.L
.D
A15 32-bits 32-bits
Mémoire Mémo Mé moir iree Data Data
A: A: L Les Le es opér opé opéran érand ra ande ndes des ess sont sont chargés char chargé géss dans dans les registres en les les chargeant chargeant à partir de la la mémoire mémoire à l'aide de l’unité l’unité “. “.D” .D” .
Unit Unité é Load Load “.D” “.D” Register File A A0 A1
a1 x1
A2 A3
Il convi onvien entt de de noter à ce ce sstade tade que que la sseul se eu ule le faç fa faço ççon on n d'ac d'accé céde derr à la la mémoire est dans l’unité l’unité “. “.D” .D” D”..
prod Y
.M
. . .
.L
.D
A15 32-bits 32-bits
Data Memory
Instruction de chargement Register File A A0 A1
a1 x1
A2 A3
prod Y
.M
. . .
.L
.D
A15 32-bits 32-bits
Data Memory
Q: Q Q: Quel Qu ueelle llle e inst in instru struct ruct uc ctio tion ion (s) p peut eu t être être utilisée pour le le chargement chargement des opérandes opérandes de de la mémoire a aux ux registres?
Instructions Load (LDB, LDH,LDW,LDDW) Register File A A0 A1
a1 x1
A2 A3
.M
prod Y
Q: Q Q: Quel Qu ueelle llle e inst in instru struct ruct uc ctio tion ion (s) p peut eu t être être utilisée pour le le chargement chargement des opérandes opérandes de de la mémoire a aux ux registres? A: Les instructions Load.
. . .
.L
.D
A15 32-bits 32-bits
Data Memory
Utilisation des Instructions Load Avant Avant d'utiliser l'unité d dee charge, charge, il faut savoir que ce ce processeur processeur est adressable p par ar octet, octet, ce qui signifie q que ue chaque chaque octet est rreprésenté eprésenté par par une adresse u unique. nique.
Data
address 00000000 00000002 00000004 00000006 00000008
De plus, les adresses sont 3 De 322bits.. bits
FFFFFFFF 16-bits 16-bits
Utilisation des Instructions Load La La syntaxe d de e l'inst instru ruct ctio ion n de chargement char charge geme ment nt est es est: t: LD *Rn,Rm *Rn,Rm où:: où Rn Rn est un regi re regist gistre stre re qui qu quii contient contient l'adresse l'adresse de l'opérande à charger
Rm Rm est destination. destination.
et le registre
Data
address
a1 x1
00000000 00000002 00000004
prod Y
00000006 00000008
d dee FFFFFFFF 16-bits 16-bits
Utilisation des Instructions Load La La syntaxe d de e l'inst instru ruct ctio ion n de chargement char charge geme ment nt est es est: t: LD *Rn,Rm *Rn,Rm La La question est m maintenant aintenant combien combien d'octets vont êêtre tre chargées chargées dans le registre d dee destination?
Data
address
a1 x1
00000000 00000002 00000004
prod Y
00000006 00000008
FFFFFFFF 16-bits 16-bits
Utilisation des Instructions Load La La syntaxe de l'instruction d de e chargement char charge geme ment nt est es est: t: LD *Rn,Rm La La réponse est que, cela d dépend ép en d de de l'instruction qu e vous vous choisissez choisissez::
Data
address
a1 x1
00000000 00000002 00000004
prod Y
00000006 00000008
LDB:: loa LDB oads ds one ne byte (8 (88-bit) -bit) • LDH LDH:: lo load loads ads ha half hallf lf wo word word rd ((16 1616-bit) -bit) • LDW LDW:: loads a word ((32 3232-bit) -bit)
FFFFFFFF
• LDDW LDDW:: loads a d doub do ou uble blle ew word wo orrd d ((64 6464-bit) -bit)
Note: Note: L LD D en elle m même ême n'existe n'e n'exist xistee p pas. as.
16-bits 16-bits
Utilisation des Instructions Load La La syntaxe de l'instruction d de e chargement char charge geme ment nt est es est: t:
Data
address
1
0
0xA
0xB
00000000
0xC
0xD
00000002
0x2
0x1
00000004
0x4
0x3
00000006
Si on suppose que que A5 = 0x4 00x x4 4 alors alors::
0x6
0x5
00000008
(1) LDB *A5, A7 ; gives A7 = 0x00000001
0x8
0x7
LD *Rn,Rm Exemple: Exemple:
(2) LDH *A5,A7; gives A7 = 0x00000201 (3) LDW *A5,A7; gives A7 = 0x04030201 (4) LDDW *A5,A7:A6; gives A7:A6 = 0x0807060504030201
FFFFFFFF 16-bits 16-bits
Utilisation des Instructions Load La La syntaxe de l'instruction d de e chargement char charge geme ment nt est es est: t: LD *Rn,Rm Question:: Question Si Si les données ne sont accessibles accessibles que que par l'instruction d de e chargement chargement et l'unité ..D, D, D, comment comment peutpeut-on -on on charger le registre d dee pointeur poin pointe teur ur de de Rn en prem premie ierr lieu li lieu? eu? ?
address
Data 0xA
0xB
00000000
0xC
0xD
00000002
0x2
0x1
00000004
0x4
0x3
00000006
0x6
0x5
00000008
0x8
0x7
FFFFFFFF 16-bits 16-bits
Chargement du Pointeur Rn u
L’instruction MVKL va permettre un déplacement d’une constante 16 16--bit -bit dans le registre comme montré dessous: MVKL MVKL
.?
a a,, A A5 5
(‘a’ est une constante ou étiquette) u
Combien de bits représentent une a Combien adresse dresse complète? complète ? 32 bits
u
Alors pourquoi l’instruction ne permet pas un déplacement de 32 32--bit? -bit? Toutes les instructions sont sur 3232-bit -bit (voir instruction opcode opcode). ).
Chargement du Pointeur Rn u
Utiliser toujours MVKL puis MVKH, les exemples suivants:
Example 1 A5 = 0x87654321 MVKL MVKL
0x1234FABC, 0x1234FABC, A5 A5
A5 = 0xFFFFFABC (sign extension)
MVKH MVKH
0x1234FABC, 0x1234FABC, A5 A5
A5 = 0x1234FABC ; OK
Example 2 MVKH MVKH A5 = 0x12344321
0x1234FABC, 0x1234FABC, A5 A5
MVKL MVKL
0x1234FABC, 0x1234FABC, A5 A5
A5 = 0xFFFFFABC ; Wrong
LDH, MVKL and MVKH Register File A A0 A1
a x
A2 A3
prod Y
.M
. . .
.L
.D
A15 32-bits 32-bits
Data Memory
MVKL MVKH
pt1, A5 pt1, A5
MVKL MVKH
pt2, A6 pt2, A6
LDH LDH
.D
*A5, *A5, A0 A0
LDH LDH
.D
*A6, *A6, A1 A1
MPY MPY
.M
A0, A0, A1, A1, A3 A3
ADD ADD
.L
A4, A4, A3, A3, A4 A4
Créer une boucle Jusqu'ici, nous avons seulement mis en œuvre la SdP SdP p pour our une seule ronde, i.e. Y= a1 * x1 Donc, Donc, nous a allons llons créer créer une boucle a afin fin que que nous puissions puissions mettre mettre en œuvre lla a SdP SdP pour N Taps. Taps.
MVKL MVKH
pt1, A5 pt1, A5
MVKL MVKH
pt2, A6 pt2, A6
LDH LDH
.D
*A5, *A5, A0 A0
LDH LDH
.D
*A6, *A6, A1 A1
MPY MPY
.M
A0, A0, A1, A1, A3 A3
ADD ADD
.L
A4, A4, A3, A3, A4 A4
Créer une boucle Jusqu'ici, nous avons seulement mis en œuvre la SdP SdP p pour our une seule ronde, i.e. Y= a1 * x1 Donc, Donc, nous a allons llons créer créer une boucle a afin fin que que nous puissions puissions mettre mettre en œuvre lla a SdP SdP pour N Taps. Taps.
Avec les processeurs C6000: absence d'instructions spécifiques tels que la répétition de bloc. La boucle est créée en utilisant l'instruction B.
What are the steps for creating a loop 1. Create a label to branch to. 2. Add a branch instruct instruction, ion, B. 3. C 3. Create reate a loop loop counter. counter. co 4. Add an instruction to decrement the loop counter. 5. Make the branch conditional based on the value in the loop counter.