Académique Documents
Professionnel Documents
Culture Documents
Plan
Architecture du TMS320C6x
1
11/10/2021
2
11/10/2021
3
11/10/2021
Biomédical Automatisation
Equipements de monitoring Commande de machines
Signaux biophysiques Contrôle de moteurs
ElectroEncéphaloGramme (EEG) Robots
ElectroCardioGramme (ECG)
Radiographie
4
11/10/2021
10
10
5
11/10/2021
11
11
Augmentation du parallélisme
12
12
6
11/10/2021
Augmentation du parallélisme
Calculs
Unités de calcul en parallèle.
Pipeline
Découpage des instructions de façon à les exécuter à intervalles plus
rapprochés.
13
13
Pipeline
t1 t2 t3 t4 t5 t6 t7 t8 t9
Fetch F1 F2 F3
Decode D1 D2 D3
Execute E1 E2 E3
t1 t2 t3 t4 t5 t6 t7 t8 t9
Fetch F1 F2 F3 F4 F5 F6 … … …
Decode D1 D2 D3 D4 D5 D6 … …
Execute E1 E2 E3 E4 E5 E6 …
14
14
7
11/10/2021
15
15
2 accès à l’unité
Multiplication a(i) x(n-i)
de calcul Accumulation a(i+1) x(n-i+1) + a(i) x(n-i)
16
16
8
11/10/2021
Objectifs :
Instruction MAC
(multiplication-accumulation)
en 1 seul cycle d’instruction
17
17
18
18
9
11/10/2021
VLIW : TMS320C6x
VLIW :Very Long Instruction Word
Data path
Deux unités de traitement (1 C62
et 2)
Control
Interrupt
Instruction Fetch Control
Instruction de 32 bits Instruction Dispatch Registers
Instruction Decode Emulation
Unités logique .L :
Arithmétique et comparaisons Data Path 1 Data Path 2
Unité de décalage .S : Register File A Register File B
ALU et Décalage
A15-A0 B15-B0
Unités de multiplication .M :
Multiplication
Unités de données .D : L1 S1 M1 D1 D2 M2 S2 L2
Mouvement de données
de/vers la mémoire
19
19
Unités fonctionnelles
Chemin croisé
20
20
10
11/10/2021
EDMA (Enhanced DMA) : Même chose que le DMA mais avec 16 canaux
programmable et une RAM pour la mémorisation de plusieurs configurations
pour des transferts projeté. Entre L2 et la mémoire externe.
21
21
Registres de
Extraction du programme (Fetch) contrôle
Répartition des instructions (Dispatch) Contrôleur
de logique
DMA / EMIF Décodage des instructions Testeur
Émulateur
Chemin de données A Chemin de données B Interrupteur
.L1 .S1 .M1 .D1 .L2 .S2 .M2 .D2
- Horloge
Mémoire cache de données (L1D) - Ports séries
- Autre
Bus de données : 64 bits périphériques
Bus d’adresses : 32 bits ..Etc
22
22
11
11/10/2021
23
23
Exemple 1 :
Instruction A
Instruction B
Un PF avec 3 PEs le LSB (p-bit) de chaque inst :
Instruction C
Instruction D 31 0 31 0 31 0 31 0 31 0 31 0 31 0 31 0
Instruction E 1 0 1 1 0 1 1 0
Instruction F A B C D E F G H
Instruction G
Instruction H
24
24
12
11/10/2021
25
25
Exemple 4 :
26
26
13
11/10/2021
Pipeline
PG PS PW PR DP DC E1 E2 E3 E4 E5 E6
PG PS PR
PW
Génération Transmission de Réception et lecture
Attente accès
d’adresse l’adresse du PF
mémoire
Dans le CPU (à la mémoire) (au CPU)
27
27
Pipeline
Étape du décodage
d’instruction (D)
DP
DC
Répartition des instructions
Décodage des PEs
d’un PF sous forme de PE
Étape d’exécution
Jusqu’à 6 cycles et tout (E)
dépend de l’instruction !!
E1 E5
courtes inst (ADD, E2 E3; E4 Chargement E6
SUB, AND, OR, Instruction MPY Slots de des valeurs Branchement
XOR, etc…) retard dans un registre
28
14
11/10/2021
Pipeline
Considérons les 3 exemples suivants :
29
29
Pipeline
1er exemple : Exécution en série
Cycle = 1
B .S1
MVK .S1 Program Fetch Decode Execute Done
ADD .L1 PG PS PW PR DP DC E1 E2 E3 E4 E5 E6
B
ADD .L1 MVK
MPY .M1 ADD
ADD
MPY .M1 MPY
LDW .D1 MPY
LDW
LDB .D1 LDB
30
30
15
11/10/2021
Pipeline
Cycle = 2
B .S1
Program Fetch Decode Execute Done
MVK .S1
PG PS PW PR DP DC E1 E2 E3 E4 E5 E6
ADD .L1
B
ADD .L1 MVK
ADD
MPY .M1 ADD
FP2
MPY .M1 MPY
MPY
LDW .D1 LDW
LDB
LDB .D1
31
31
Pipeline
Cycle = 3
B .S1
Program Fetch Decode Execute Done
MVK .S1
PG PS PW PR DP DC E1 E2 E3 E4 E5 E6
ADD .L1
B
ADD .L1 MVK
MPY .M1 ADD
FP3 FP2 ADD
MPY .M1 MPY
MPY
LDW .D1 LDW
LDB .D1 LDB
32
32
16
11/10/2021
Pipeline
Cycle = 4
B .S1
MVK .S1 Program Fetch Decode Execute Done
ADD .L1 PG PS PW PR DP DC E1 E2 E3 E4 E5 E6
B
ADD .L1 MVK
MPY .M1 ADD
ADD
MPY .M1 MPY
LDW .D1 MPY
LDW
LDB .D1 LDB
33
33
Pipeline
Un seul PE par cycle entre dans le pipeline en arrivant à l’étape DC (Decode) :
B .S1 Cycle = 5
MVK .S1
PF Decode Execute Done
ADD .L1
PF DP DC E1 E2 E3 E4 E5 E6
ADD .L1
MPY .M1 B
MVK
MPY .M1 ADD
PF2
LDW .D1 ADD
MPY
LDB .D1 MPY
LDW
LDB
34
34
17
11/10/2021
Pipeline
B + + + + +
MVK +
ADD
PF2 ADD
MPY
MPY
LDW
LDB
35
35
Pipeline
B + + + +
MVK +
ADD
PF2 ADD
MPY
MPY
LDW
LDB
36
36
18
11/10/2021
Pipeline
B + + + +
MVK
ADD
PF2 ADD
MPY
MPY
LDW
LDB
37
37
Pipeline
B + + +
MVK
ADD
PF2 ADD
MPY
MPY
LDW
LDB
38
38
19
11/10/2021
Pipeline
2ème exemple : Exécution en parallèle partielle
B .S1 Cycle = 5
|| MVK .S2 PF Decode Execute Done
PF DP DC E1 E2 E3 E4 E5 E6
ADD .L1
B
|| ADD .L2 MVK
|| MPY .M1 ADD
ADD
MPY
MPY .M1
MPY
|| LDW .D1 LDW
|| LDB .D2 LDB
39
39
Pipeline
B .S1 Cycle = 6
|| MVK .S2 PF Decode Execute Done
PF DP DC E1 E2 E3 E4 E5 E6
ADD .L1
B + + + + + +
|| ADD .L2 MVK +
|| MPY .M1 ADD
ADD
MPY
MPY .M1
MPY
|| LDW .D1 LDW
|| LDB .D2 LDB
40
40
20
11/10/2021
Pipeline
ADD
ADD
MPY
MPY
LDW
LDB
41
41
Pipeline
ADD
ADD
MPY
MPY
LDW
LDB
42
42
21
11/10/2021
Pipeline
ADD
ADD
MPY
MPY
LDW
LDB
43
43
Pipeline
ADD
ADD
MPY
MPY
LDW
LDB
44
44
22
11/10/2021
Pipeline
3ème exemple : Exécution en parallèle totale
Cycle = 5
B .S1 PF Execute Done
Decode
|| MVK .S2
PF DP DC E1 E2 E3 E4 E5 E6
|| ADD .L1
|| ADD .L2 B
MVK
|| MPY .M1 ADD
ADD
|| MPY .M2 MPY
|| LDW .D1 MPY
LDW
|| LDB .D2 LDB
45
45
Pipeline
B
MVK
ADD
ADD
MPY
MPY
LDW
LDB
46
46
23
11/10/2021
Pipeline
B + + + + +
MVK
ADD
ADD
MPY +
MPY +
LDW + + + +
LDB + + + +
47
47
Pipeline
B + + + +
MVK
ADD
ADD
MPY
MPY
LDW + + +
LDB + + +
48
48
24
11/10/2021
Pipeline
B + + +
MVK
ADD
ADD
MPY
MPY
LDW + +
LDB + +
49
49
Mémoire interne
Program
Cache
(L1P)
Internal
Core RAM or
Cache
EMIF
(L2)
Data
Cache
(L1D)
L1
Level 2
Level 3
50
50
25
11/10/2021
Mémoire interne
CPU cherche
une donnée
Oui Oui
Envoyer la
Copier la donnée
donnée vers
de L2 vers L1
Core
51
51
Mémoire cache L1
52
52
26
11/10/2021
Jeu d’instructions
Arithmétique
1 ADD(U) Addition entière 32/40 bits signée (non signée)
ADD2 2 additions entières 16 bits
ADD4 4 additions entières 8 bits
SUB(U) Soustraction entière 32/40 bits signée (non signée)
SUB2 2 soustractions entières 16 bits
SUB4 4 soustractions entières 8 bits
Nb de cycles
d’exécution
53
53
#include<stdio.h>
Void main()
{
int a[5]={10,100,30,20,100};
int b[5]={10,100,30,20,100};
int c[5],i;
For(i=0;i<5;i++)
C[i]=a[i]+b[i];
}
54
54
27
11/10/2021
#include<stdio.h>
Void main()
{
Unsigned char a[5]={11,53,88,100,0};
Unsigned char b[5]={11,53,88,100,0};
Unsigned char c[5],i;
For(i=0;i<5;i++)
C[i]=a[i]+b[i];
}
00 110 0 0000
C 0
55
55
Jeu d’instructions
Arithmétique
1 ADD(U) Addition entière 32/40 bits signée (non signée)
ADD2 2 additions entières 16 bits
ADD4 4 additions entières 8 bits
SUB(U) Soustraction entière 32/40 bits signée (non signée)
SUB2 2 soustractions entières 16 bits
SUB4 4 soustractions entières 8 bits
Nb de cycles
d’exécution
56
56
28
11/10/2021
Jeu d’instructions
Multiplication entières
2 MPY 16 LSB signés x 16 LSB signés => 32 bits
MPYH 16 MSB signés x 16 MSB signés => 32 bits
MPYLH 16 LSB signés x 16 MSB signés => 32 bits
MPYHL 16 MSB signés x 16 LSB signés => 32 bits
4 MPYU4 4 Multiplication 8bits par 8 bits, non signé
MPYSU4 4 Multiplication 8bits signé par 8 bits non signé
MPYUS4 4 Multiplication 8bits non signé par 8 bits signé
Nb de cycles
d’exécution
57
57
Jeu d’instructions
Multiplication entières
2 MPY 16 LSB signés x 16 LSB signés => 32 bits
MPYH 16 MSB signés x 16 MSB signés => 32 bits
MPYLH 16 LSB signés x 16 MSB signés => 32 bits
MPYHL 16 MSB signés x 16 LSB signés => 32 bits
4 MPYU4 4 Multiplication 8bits par 8 bits, non signé
MPYSU4 4 Multiplication 8bits signé par 8 bits non signé
MPYUS4 4 Multiplication 8bits non signé par 8 bits signé
Nb de cycles
d’exécution
58
58
29
11/10/2021
Jeu d’instructions
Accès mémoire
5 LD(B/H/W/DW)(U) Chargement (octet, demi mot, mot,2 mots) signé (non signé)
1 ST(B/H/W/DW)(U) Stockage (octet, demi mot, mot, 2 mots) signé (non signé)
Affectation
1 MV Transfère d’un registre vers un autre registre
1 MVK Transfère une constante 16 bits LSB signée vers un registre
1 MVKH Transfère une constante 16 bits MSB signée vers le MSB
d’un registre
Décalage
1 SHL Décalage gauche 32/40 bits
SHR2 Décalage droit 16 bits signé
SSHL Décalage gauche 32/40 bits avec saturation
SHLMB Décalage gauche et arrangement en octet
SHRMB Décalage droit et arrangement en octet
Branchement
6 B Branchement conditionnel
Nb de cycles
d’exécution
59
59
60
60
30
11/10/2021
Modes d’adressages
Il existe deux différents modes d’adressages :
- Mode linéaire
- Mode circulaire
L’adressage le plus utilisé est le mode linéaire indirect.
Supposant que R est un registre d’adresse :
*R : Le registre R pointe sur une adresse mémoire.
*R++(d) : Le registre R contient une adresse mémoire en plus il y aura une post-
incrémentation c.à.d après une lecture R va s’auto incrémenter par une valeur (d)
qui est 1 par défaut.
*++R(d) : Même chose que le cas précédent mais maintenant une pré-
incrémentation.
*+R(d) : L’adresse est pré-incrémentée de tel sorte que l’adresse actuelle est R+d.
Par contre, R ne va pas être modifier.
61
61
62
62
31
11/10/2021
63
63
64
64
32
11/10/2021
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
65
66
66
33
11/10/2021
2 instructions en parallèle :
MPY .M2 A7, B7, B6 ; LSB(A7) * LSB(B7) B6
|| MPYH .M2 A7, B7, A6 ; MSB(A7) * MSB(B7) A6
M1
67
67
68
68
34
11/10/2021
69
69
Contraintes
Contrainte chemin croisé :
Le code suivant est valide :
ADD .L1x A1, B1, A0
|| MPY .M2x A2, B2, B3
M2x
70
70
35
11/10/2021
Exemples :
PACK2
SUBABS4
DOTP2 / DOTPN2 / DOTPU4
SHRMB
AVGU4
71
71
31 24 23 16 15 8 7 0
src1
a_3 a_2 a_1 a_0
SUBABS4
31 24 23 16 15 8 7 0
src2
b_3 b_2 b_1 b_0
31 24 23 16 15 8 7 0
dst
ABS(a_3-b_3) ABS(a_2-b_2) ABS(a_1-b_1) ABS(a_0-b_0)
72
72
36
11/10/2021
31 16 15 0
src1
a_hi a_lo
PACK2
31 16 15 0
src2
b_hi b_lo
31 16 15 0
dst
a_lo b_lo
73
73
31 16 15 0
src1
a_hi a_lo
DOTP2
31 16 15 0
src2
b_hi b_lo
0
31
dst
(a_hi*b_hi) + (a_lo*b_lo)
74
74
37
11/10/2021
31 16 15 0
src1
a_hi a_lo
DOTPN2
31 16 15 0
src2
b_hi b_lo
0
31
dst
(a_hi*b_hi) - (a_lo*b_lo)
75
75
31 24 23 16 15 8 7 0
src1
a_3 a_2 a_1 a_0
DOTPU4
31 24 23 16 15 8 7 0
src2
b_3 b_2 b_1 b_0
0
31
dst
(a_3*b_3) + (a_2*b_2) + (a_1*b_1) + (a_0*b_0)
76
76
38
11/10/2021
31 24 23 16 15 8 7 0
src1
a_3 a_2 a_1 a_0
SHRMB
31 24 23 16 15 8 7 0
src2
b_3 b_2 b_1 b_0
31 24 23 16 15 8 7 0
dst
a_0 b_3 b_2 b_1
77
77
31 24 23 16 15 8 7 0
src1
a_3 a_2 a_1 a_0
AVGU4
31 24 23 16 15 8 7 0
src2
b_3 b_2 b_1 b_0
31 24 23 16 15 8 7 0
dst
(a_3+b_3+1)>>1 (a_2+b_2+1)>>1 (a_1+b_1+1)>>1 (a_0+b_0+1)>>1
78
78
39
11/10/2021
79
79
40