Vous êtes sur la page 1sur 50

Chapitre 3

Architecture du
TMS320C6000
(2)
03/05/21 1
Register File A Register File B
A0 B0
.S1 .S2
A1 B1
A2 B2
A3 .M1 .M2 B3
A4 B4

. .L1 .L2 .
. .
. .
.D1 .D2
B15
32-bits 32-bits

2
Data Memory 03/05/21
L’échange des données entre les deux parties du CPU
nécessite quelques connections (liaisons).

03/05/21 3
Il existe deux types de liaison (cross paths) entre
la partie A et B:

 Liaison pour l’échange des opérandes (Data cross paths).

 Liaison pour l’échange des adresses (Address cross paths).

03/05/21 4
src
dst .L1 A
src
.M1
MPY .M1 A0,A1,A2
|| MPY .M2 B0,B1,B2
src
dst .L2
.M2 src B

03/05/21 5
src
dst .L1 A
src
.M1

ADD .L1 A2,B2,A3


src
dst .L2
.M2 src B

03/05/21 6
src
dst .L1 A
src
.M1
ADD .L2 A2,B2,B3

dst .L2
.M2 src B

03/05/21 7
 Cette liaison peut être considéré comme un registre d’échange
d’opérande.

 Elle permet l’utilisation des opérandes de la partie A par la


partie B du CPU et le contraire.

 Il existe deux liaisons de donnée:

 Une qui transfère les opérandes de la partie B vers la


partie A, X1.

 Une qui transfère les opérandes de la partie A vers la


partie B, X2.

03/05/21 8
La liaison de donnée est appliqué qu’avec
les unités fonctionnelles .M, .L et .S.

03/05/21 9
<dst>
.L1 <src>
A
.M1 <src>
.S1 2
x

<src>
1
.L2 x
<dst>
.M2
.S2
<src> B

03/05/21 10
la liaison des données (Data cross paths) est très utilisée mais avec des limites:

(1). Le registre destination dans une instruction doit être du même côte que l’unité fonctionnelle.

(2). Dans un paquet d’instruction en parallèles ( execute packet ), on utilise la liaison de donnée pour une seul instruction.

03/05/21 11
<dst>
.L1 <src>
A
.M1 <src>
.S1 2
x
Ex:

1
ADD
ADD .L1x
.L1x A0,A1,B2
A0,A1,B2  x
MPY
MPY .M1x
.M1x A0,B6,A9
A0,B6,A9  B
03/05/21 12
<dst>
.L1 <src>
A
.M1 <src>
.S1 2
x

SUB
SUB .S1x
.S1x A8,B2,A8
A8,B2,A8 1
|||| ADD
ADD .L1x
.L1x A0,B0,A2
A0,B0,A2 x
B
Non valide!
03/05/21 13
Data

Addr
A
.D1

Le pointeur doit être du même côte que l’unité de chargement.

LDW
LDW .D1T1
.D1T1*A0
*A0,A5
,A5
STW
STW .D1T1
.D1T1A5,
A5,*A0
*A0
03/05/21 14
Data1 A5

T1 *A0
A
.D1

T2
LDW
LDW.D1T1
.D1T1*A0
*A0,A5
,A5
LDW
LDW.D1T2
.D1T2*A0
*A0,B5
,B5
B
Data2 B5

03/05/21 15
Data1 A5

T1 *A0
A
.D1

T2 *B0
.D2
B
LDW.D1T1
LDW.D1T1*A0,A5
*A0,A5 B5
||||LDW.D2T2
LDW.D2T2*B0,B5
*B0,B5
03/05/21 16
Data1 A5

T1 *A0
A
.D1

T2 *B0
.D2

B5
B
LDW.D1T2
LDW.D1T2*A0,B5
*A0,B5
||||STW.D2T1
STW.D2T1A5,*B0
A5,*B0
03/05/21 17
Data1 A5

T1 *A0
A
.D1

T2 *B0
.D2
B6
B
LDW.D1
LDW.D1 *A0,B5
*A0,B5
||||STW.D2
STW.D2 B6,*B0
B6,*B0
03/05/21 18
Data1 A5

*A0
A
.D1

T2 *B0
.D2
B
B
LDW.D1
LDW.D1T2
T2 *A0,B5
*A0,B5 6
||||STW.D2
STW.D2 T2
T2 B6,*B0
B6,*B0
03/05/21 19
Les instructions conditionnelles n’utilisent pas les liaisons
(Cross Paths) pour l’échange de donnée.

Ex:
[B2] ADD .L1 A2,A0,A4
[A1] LDW .D2 *B0,B5

03/05/21 20
03/05/21 21
Addr

D (32)
EMIF
Regs (A0-A15) .D1 .D2

Regs (B0-B15)
.M1 .M2
.L1 .L2
.S1 .S2
Control Regs
CPU
03/05/21 22
External Memory
4K  Async (SRAM, ROM, etc.)
L1P  Sync (SBSRAM, SDRAM)

Internal Memory
CPU L2  Unified (data or prog)
64K  4 blocks - each can be

RAM or cache

4K Level 1 Cache
L1D  4KB Program
 4KB Data

03/05/21 23
Byte Address
0000_0000 External Memory
64K x 8 Internal
(L2 cache)  Async (SRAM, ROM, etc.)
 Sync (SBSRAM, SDRAM)

Internal Memory
0180_0000 On-chip Peripherals  Unified (data or prog)
 4 blocks - each can be

RAM or cache
8000_0000 0 256M x 8 External
Level 1 Cache
9000_0000 1 256M x 8 External  4KB Program 4K
 4KB Data P
A000_0000 2 256M x 8 External  Not in map L2
CPU
B000_0000 64K
3 256M x 8 External
4K
FFFF_FFFF D
03/05/21 24
Addr

D (32)
EMIF
Regs (A0-A15) .D1 .D2

Regs (B0-B15)
.M1 .M2
.L1 .L2
.S1 .S2
Control Regs
CPU
03/05/21 25
Program Addr 32
Internal PC
Memory Program Data 256
A
Data Addr - T1 32 A
D regs
Data Data - T1 32/64
External
Interface Data Addr - T2 32 B
A Data Data - T2 32/64 regs
x32
D
DMA Addr - Read 32
Peripherals
DMA Data - Read 32
A DMA
x32 DMA Addr - Write 32
D DMA Data - Write 32
03/05/21 26
Addr

D (32)
EMIF
Regs (A0-A15) .D1 .D2

Regs (B0-B15)
.M1 .M2
.L1 .L2
.S1 .S2
Control Regs
CPU
03/05/21 27
McBSP
McBSP
External EMIF
Memory EMIF
‘C6x HPI/XB
HPI/XB
DMA
DMA CPU
Timer
Timer
Boot
Boot
PLL
PLL

EMIF (External Memory Interface) McBSP (Multi-Channel Buffered Serial


- Glueless access to async/sync memory Port)
EPROM, SRAM, SDRAM, SBSRAM - High speed sync serial comm
DMA ( Direct Memory Acces) HPI (Host Port Interface) /Expansion
- 4/16 Channels Bus (XB)

BOOT
- Boot from 4M external block Timer/Counters
(Boot The process of loading a program into - Two 32-bit Timer/Counters
program memory).
PLL (Phase lock loop circuit).
03/05/21 28
‘‘C6x
C6x
CLKOUT1 (‘C6x clock cycle)
PLL
CLKIN
*1 CLKOUT2 (1/2 CLKOUT1)
*4

La durée d’un cycle

CLKIN - MHz PLL CLKOUT1 - MHz CLKOUT2 - MHz MIPs (max)


250 *1 250 (4ns) 125 2000
225 *1 225 (4.44ns) 112,5 1800
50 *4 200 (5ns) 100 1600
25 *4 100 (10ns) 50 800

03/05/21 29
Program
Data Ram
RAM

Addr
Internal Buses
D (32) DMA
EMIF
Regs (A0-A15) .D1 .D2 Serial Port

Regs (B0-B15)
Ext’l .M1 .M2 Host Port
Memory Boot Load
.L1 .L2
- Sync Timers
- Async .S1 .S2
Control Regs Pwr Down

CPU
03/05/21 30
Questions (Exam1)
Unités fonctionnelles :

1- qu’elle sont les unités fonctionnelles qui existe?

quatre unités : .L, .M , .S, .D

2- qu’elle est l’unité qui exécute le chargement?

.L .M .D .S

03/05/21 31
Unités fonctionnelles :

3- Le syntaxe d’une instruction en assembleur


est:
instr
instr .unit
.unit <src1>,
<src1>, <src2>,
<src2>, <dst>
<dst>

Si je remplace .unit par M1 et src1 par A0

instr
instr .M1
.M1 A0,
A0, <src2>
<src2> ,, <dst>
<dst>

src2 peut être: un registre A ou B.


dst doit être: un registre A.

03/05/21 32
Unités fonctionnelles :

4- Trouver l’errer dans ce paquet d’instruction


(pourquoi?).

ADD .L1x A0,A1,B2


MPY .M1x A0,B6,A9
SUB .S1x A8,B2,A8
|| ADD .L1x A0,B0,A2

03/05/21 33
Unités fonctionnelles :

4- Trouver l’errer dans ce paquet d’instruction


(pourquoi?).

ADD .L1x A0,A1,B2


MPY .M1x A0,B6,A9
SUB .S1x A8,B2,A
|| ADD .L1x A0,B0,A2

On ne peut pas utiliser le Data cross path pour deux instruction en


parallèles

03/05/21 34
Unités fonctionnelles :

5- compléter ces deux instructions:

LDW
LDW ?? *A1,
*A1,B0 B0
|||| STW
STW ?? A0
A0, ,*B1
*B1

LDW
LDW D1T2
D1T2 *A1,
*A1,B0 B0
|||| STW
STW D2T1
D2T1 A0A0, ,*B1
*B1

03/05/21 35
Load/Store en parallèle en utilisant la liaison.

Data1 A0

T1 *A1
A
.D1

T2 *B1
.D2

B0
B
03/05/21 36
Les mémoires:

6- qu’elle sont les types des mémoires qui existe?

Mémoire interne, externe et cache.

7- qu’elle est le nombre de page de mémoire externe sur le


TMS320C67xx?

quatre pages.

03/05/21 37
Les instructions conditionnelles:

8- qu’elle sont les registres qui sont utilisés comme


compteur?

A1,A2,B0,B1,B2

9- qu’elle sont les instructions conditionnelles?

Toutes les instructions.

03/05/21 38
Cours3: Architecture du DSPC6000 (2) Hanafi.S
Performances:

10- qu’elle est le temps de cycle du C67xx?

CLKOUT1

11- le C6713 exécute jusqu’à 1800 MIPS, Pourquoi?

1800 MIPS = 8 instructions (unités) x 225 MHz

03/05/21 39
Codes
a- Écrire un code qui transfère le contenu de A0  A1
MV .L1 A0, A1
ou ADD .S1 A0, 0, A1
ou MPY .M1 A0, 1, A1 Q’elle est le problème avec
cette ins. ?

03/05/21 40
Cours3: Architecture du DSPC6000 (2) Hanafi.S
Codes
a- Écrire un code qui transfère le contenu de A0  A1
MV .L1 A0, A1
ou ADD .S1 A0, 0, A1
ou MPY .M1 A0, 1, A1 A0 ne peut être
que de 16 bits
b- un code qui initialise le registre A5 (Clear A5)
ZERO .S1 A5
ou SUB .L1 A5, A5, A5
ou MPY .M1 A5, 0, A5
ou CLR .S1 A5, 0, 31, A5
ou MVK .S1 0, A5
ou XOR .L1 A5,A5,A5
03/05/21 41
Cours3: Architecture du DSPC6000 (2) Hanafi.S
c- A2 = A0 2
+ A1
MPY.M1 A0, A0, A2
ADD.L1 A2, A1, A2

d- Si (B1  0) alors B2 = B5 * B6

[B1] MPY.M2 B5, B6, B2

e- A2 = A0 * A1 + 10

MPY.M1 A0, A1, A2


ADD.L1 10, A2, A2

03/05/21 Cours3: Architecture du DSPC6000 (2) 42


Hanafi.S
f- charger la constante (19ABCh) dans le registre A6

mvkl .s1 0x00019abc,a6


mvkh .s1 0x00019abc,a6

value .equ 0x00019abc


mvkl.s1 value,a6
mvkh.s1 value,a6

03/05/21 43
Cours3: Architecture du DSPC6000 (2) Hanafi.S
g- charger le registre A7 par le contenu du (mem1) puis incrémenter
le pointeur.

A7
mem1 10h

load_mem1: MVKL .S1 mem1, A6


MVKH .S1 mem1, A6
LDH .D1 *A6++, A7

03/05/21 Cours3: Architecture du DSPC6000 (2) Hanafi.S 44


h- que fait cette routine en assembleur ?

MVK .S1 40, A1


loop: LDH .D1 *A10++, A0
LDH .D1 *A11++, A2
LDH .D1 *A12++, A3
LDH .D1 *A13++, A4
MPY .M1 A0, A2, A5
MPY .M1 A3, A4, A6
ADD .L1 A5, A7, A7
ADD .L1 A6, A8, A8
SUB .L1 A1, 1, A1
[A1] B .S1 loop
ADD .L1 A7, A8, A8
STH .D1 A8, *A14

03/05/21 Cours3: Architecture du DSPC6000 (2) Hanafi.S 45


40 40
Le calcul de: Y   a i x i   b i  y i
i 1 i 1

MVK .S1 40, A1 ; A1 = 40, loop count


loop: LDH .D1 *A10++, A0 ; A0 = a(n)
LDH .D1 *A11++, A2 ; A2 = x(n)
LDH .D1 *A12++, A3 ; A3 = b(n)
LDH .D1 *A13++, A4 ; A4 = y(n)
MPY .M1 A0, A1, A5 ; A5 = a(n) * x(n)
MPY .M1 A2, A3, A6 ; A6 = b(n) * y(n)
ADD .L1 A5, A7, A7 ; Y1 = Y1 + A5
ADD .L1 A6, A8, A8 ; Y2 = Y2 + A6
SUB .L1 A1 1, A1 ; decrement loop count
[A1] B .S1 loop ; if A9  0, branch
ADD .L1 A7, A8, A8 ; A8 = Y2 + Y1
STH .D1 A8, *A14 ; *A14 = Y
03/05/21 46
i- Récrire la routine précédente en utilisant les deux cotés A et B
du CPU
MVK .S1 40, A1
loop: LDH .D1 *A10++, A0
LDH .D1 *A11++, A2
LDH .D1 *A12++, A3
LDH .D1 *A13++, A4
MPY .M1 A0, A2, A5
MPY .M1 A3, A4, A6
ADD .L1 A5, A7, A7
ADD .L1 A6, A8, A8
SUB .L1 A1, 1, A1
[A1] B .S1 loop
ADD .L1 A7, A8, A8
STH .D1 A8, *A14
03/05/21 47
Cours3: Architecture du DSPC6000 (2) Hanafi.S
Fin du chapitre

Cours3: Architecture du DSPC6000 (2)


03/05/21 Hanafi.S 48
Mémoire cache
Mémoire à accès rapide, très utilisée pour copier les
données et les instructions à partir d’une mémoire lente.
Elle permet un accès rapide parce que ça taille est petite
et elle est proche du CPU.

Cours3: Architecture du DSPC6000 (2)


03/05/21 Hanafi.S 49
SRAM
Static Random Access Memory : Une mémoire rapide à accès
Aléatoire.

SDRAM
Synchronous Dynamic Random Access Memory : Une
mémoire dynamique utilsée comme mémoire externe.

SBSRAM
Synchronous Burst SRAM : mémoire externe synchrone.
Burst: un port série synchrone qui transfère 32 bits (word)
chaque frame de synchronisation.

Cours3: Architecture du DSPC6000 (2)


03/05/21 Hanafi.S 50

Vous aimerez peut-être aussi