Title: Instructions
1Instructions
- Types dinstructions
- Séquencement
- Contrôle
MÉMOIRE PRINCIPALE
IO
IO
IO
BUS SYSTÈME
CPU
Unité de Traitement
Unité de Contrôle
Cache Données
Cache Instructions
Décodeur
ALU
Unité Flottante
PC
Registres
2Un processeur générique
AL20 Fonction 0 0 0 not I0 0 0 1
I0 and I1 0 1 0 I0 xor I1 0 1 1 I0 or
I1 1 0 0 I0 - 1 1 0 1 I0 I1 1 1 0
I0 - I1 1 1 1 I0 1
DATAPATH
INPORT
OUTPORT
OEN
1 0
SEL
I0
I1
AL2 AL1 AL0
Z
Z?0
SH2 SH1 SH0
SHIFTER
ALU
SH20 Fonction 0 0 0 Décalage lt 0 0
1 Rotation lt 0 1 0 Décalage gt 0 1 1
Rotation gt 1 0 0 NOP 1 0 1 NOP 1 1 0
NOP 1 1 1 NOP
3
RA
R0
R1
R2
R3
R4
R5
R6
R7
3
RB
WEN
3
WA
REGISTRES
3Le banc de registres
RA0
0 1 2 3 4 5 6 7
DÉCODEUR
I0 I1 I2
RA1
RA2
RB0
0 1 2 3 4 5 6 7
DÉCODEUR
I0 I1 I2
RB1
RB2
WA0
0 1 2 3 4 5 6 7
DÉCODEUR
I0 I1 I2 EN
WA1
WA2
WAN
4Exemple de programme
Problème compter le nombre de 1 dans un mot
dentrée. Une solution possible (langage
RTL) data ? inport ocount ? 0 mask
? 1 while data ? 0 temp ? data AND
mask ocount ? ocount temp data ? data gtgt
1 end while outport ? ocount
5Exemple de programme
data ? inport data R1 R1 ? inport ocount ?
0 ocount R2 R2 ? 0 mask ? 1 mask R3 R3 ?
1 while data ? 0 while R1 ? 0 temp ? data
AND mask temp R4 R4 ? R1 AND R3 ocount ?
ocount temp R2 ? R2 R4 data ? data gtgt
1 R1 ? R1 gtgt 1 end while end while outport
? ocount outport ? R2 Ce programme
nécessite donc 4 éléments de stockage (registres)
pour les 4 variables, ainsi que la constante 0.
6Contrôle de lunité de traitement
INPORT
OUTPORT
UNITÉ DE CONTRÔLE
OEN
OEN
1 0
SEL
SEL
3
AL20
I0
I1
3
AL2 AL1 AL0
SH20
3
Z
RA20
Z?0
3
RB20
SH2 SH1 SH0
SHIFTER
WEN
3
WA20
3
RA
R0
R1
R2
R3
R4
R5
R6
R7
3
RB
WEN
Z?0
3
WA
OEN
SEL
AL20
SH20
RA20
RB20
WEN
WA20
17
0
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
7Machine détats
Une séquence dinstructions peut être vue comme
une séquence détats
start0
S0
S7
outport?ocount
start1
data0
S1
S6
data?data gtgt 1
data?inport
S2
S5
ocount?ocount temp
data?0
ocount?0
S3
S4
temp?data AND mask
mask?1
8Exécution de programme - Exemple
R1 ? inport R2 ? 0 R3 ? 1 while R1 ? 0
R4 ? R1 AND R3 R2 ? R2 R4 R1 ? R1 gtgt
1 end while outport ? R2
ØØØØ
ØØØØ
INPORT
OUTPORT
ØØØØ
OEN
0
1 0
SEL
0
ØØØØ
START
I0
I1
Ø
AL2 AL1 AL0
1
Ø
Z
S0
Ø
Ø
Z?0
ØØØØ
Ø
SH2 SH1 SH0
SHIFTER
Ø
Ø
start0
ØØØØ
S0
S7
start1
data0
RA
ØØØ
S1
S6
RB
ØØØ
WEN
0
0000
ØØØØ
ØØØØ
ØØØØ
ØØØØ
ØØØØ
ØØØØ
ØØØØ
WA
S2
S5
ØØØ
data?0
S3
S4
9Exécution de programme - Exemple
R1 ? inport R2 ? 0 R3 ? 1 while R1 ? 0
R4 ? R1 AND R3 R2 ? R2 R4 R1 ? R1 gtgt
1 end while outport ? R2
R1 ? inport
ØØØØ
0011
INPORT
OUTPORT
ØØØØ
OEN
0
1 0
SEL
1
0000
START
I0
I1
1
AL2 AL1 AL0
Ø
0
Z
S1
1
1
Z?0
0011
1
SH2 SH1 SH0
SHIFTER
Ø
Ø
start0
0011
S0
S7
start1
data0
RA
R0
R1
R2
R3
R4
R5
R6
R7
ØØØ
S1
S6
RB
000
WEN
1
0000
ØØØØ
ØØØØ
ØØØØ
ØØØØ
ØØØØ
ØØØØ
ØØØØ
WA
S2
S5
001
data?0
S3
S4
10Exécution de programme - Exemple
R1 ? inport R2 ? 0 R3 ? 1 while R1 ? 0
R4 ? R1 AND R3 R2 ? R2 R4 R1 ? R1 gtgt
1 end while outport ? R2
ØØØØ
ØØØØ
R2 ? 0
INPORT
OUTPORT
0000
OEN
0
1 0
SEL
0
0000
START
I0
I1
1
AL2 AL1 AL0
Ø
0
Z
S2
1
0
Z?0
0000
1
SH2 SH1 SH0
SHIFTER
Ø
Ø
start0
0000
S0
S7
start1
data0
RA
R0
R1
R2
R3
R4
R5
R6
R7
000
S1
S6
RB
000
WEN
1
0000
0011
ØØØØ
ØØØØ
ØØØØ
ØØØØ
ØØØØ
ØØØØ
WA
S2
S5
010
data?0
S3
S4
11Exécution de programme - Exemple
R1 ? inport R2 ? 0 R3 ? 1 while R1 ? 0
R4 ? R1 AND R3 R2 ? R2 R4 R1 ? R1 gtgt
1 end while outport ? R2
ØØØØ
ØØØØ
INPORT
OUTPORT
R3 ? 1
0000
OEN
0
1 0
SEL
0
ØØØØ
START
I0
I1
1
AL2 AL1 AL0
1
Ø
1
Z
S3
1
1
Z?0
0001
1
SH2 SH1 SH0
SHIFTER
Ø
Ø
start0
0001
S0
S7
start1
data0
RA
R0
R1
R2
R3
R4
R5
R6
R7
000
S1
S6
RB
ØØØ
WEN
1
0000
0011
0000
ØØØØ
ØØØØ
ØØØØ
ØØØØ
ØØØØ
WA
S2
S5
011
data?0
S3
S4
12Exécution de programme - Exemple
R1 ? inport R2 ? 0 R3 ? 1 while R1 ? 0
R4 ? R1 AND R3 R2 ? R2 R4 R1 ? R1 gtgt
1 end while outport ? R2
ØØØØ
ØØØØ
INPORT
OUTPORT
0011
OEN
0
1 0
SEL
0
0001
R4 ? R1 AND R3
START
I0
I1
0
AL2 AL1 AL0
Ø
0
Z
S4
1
1
Z?0
0001
1
SH2 SH1 SH0
SHIFTER
Ø
Ø
start0
0001
S0
S7
start1
data0
RA
R0
R1
R2
R3
R4
R5
R6
R7
001
S1
S6
RB
011
WEN
1
0000
0011
0000
0001
ØØØØ
ØØØØ
ØØØØ
ØØØØ
WA
S2
S5
100
data?0
S3
S4
13Exécution de programme - Exemple
R1 ? inport R2 ? 0 R3 ? 1 while R1 ? 0
R4 ? R1 AND R3 R2 ? R2 R4 R1 ? R1 gtgt
1 end while outport ? R2
ØØØØ
ØØØØ
INPORT
OUTPORT
0000
OEN
0
1 0
SEL
0
0001
START
I0
I1
R2 ? R2 R4
1
AL2 AL1 AL0
Ø
0
Z
S5
1
1
Z?0
0001
1
SH2 SH1 SH0
SHIFTER
Ø
Ø
start0
0001
S0
S7
start1
data0
RA
R0
R1
R2
R3
R4
R5
R6
R7
010
S1
S6
RB
100
WEN
1
0000
0011
0000
0001
0001
ØØØØ
ØØØØ
ØØØØ
WA
S2
S5
010
data?0
S3
S4
14Exécution de programme - Exemple
R1 ? inport R2 ? 0 R3 ? 1 while R1 ? 0
R4 ? R1 AND R3 R2 ? R2 R4 R1 ? R1 gtgt
1 end while outport ? R2
ØØØØ
ØØØØ
INPORT
OUTPORT
0011
OEN
0
1 0
SEL
0
0000
START
I0
I1
1
AL2 AL1 AL0
Ø
R1 ? R1 gtgt 1 end while
0
Z
S6
1
1
Z?0
0011
0
SH2 SH1 SH0
SHIFTER
\
1
0
start0
0001
S0
S7
start1
data0
RA
R0
R1
R2
R3
R4
R5
R6
R7
001
S1
S6
RB
000
WEN
1
0000
0011
0001
0001
0001
ØØØØ
ØØØØ
ØØØØ
WA
S2
S5
001
data?0
S3
S4
15Exécution de programme - Exemple
R1 ? inport R2 ? 0 R3 ? 1 while R1 ? 0
R4 ? R1 AND R3 R2 ? R2 R4 R1 ? R1 gtgt
1 end while outport ? R2
ØØØØ
ØØØØ
INPORT
OUTPORT
0001
OEN
0
1 0
SEL
0
0001
R4 ? R1 AND R3
START
I0
I1
0
AL2 AL1 AL0
Ø
0
Z
S4
1
1
Z?0
0001
1
SH2 SH1 SH0
SHIFTER
Ø
Ø
start0
0001
S0
S7
start1
data0
RA
R0
R1
R2
R3
R4
R5
R6
R7
001
S1
S6
RB
011
WEN
1
0000
0001
0001
0001
0001
ØØØØ
ØØØØ
ØØØØ
WA
S2
S5
100
data?0
S3
S4
16Exécution de programme - Exemple
R1 ? inport R2 ? 0 R3 ? 1 while R1 ? 0
R4 ? R1 AND R3 R2 ? R2 R4 R1 ? R1 gtgt
1 end while outport ? R2
ØØØØ
ØØØØ
INPORT
OUTPORT
0001
OEN
0
1 0
SEL
0
0001
START
I0
I1
R2 ? R2 R4
1
AL2 AL1 AL0
Ø
0
Z
S5
1
1
Z?0
0010
1
SH2 SH1 SH0
SHIFTER
Ø
Ø
start0
0010
S0
S7
start1
data0
RA
R0
R1
R2
R3
R4
R5
R6
R7
010
S1
S6
RB
100
WEN
1
0000
0001
0001
0001
0001
ØØØØ
ØØØØ
ØØØØ
WA
S2
S5
010
data?0
S3
S4
17Exécution de programme - Exemple
R1 ? inport R2 ? 0 R3 ? 1 while R1 ? 0
R4 ? R1 AND R3 R2 ? R2 R4 R1 ? R1 gtgt
1 end while outport ? R2
ØØØØ
ØØØØ
INPORT
OUTPORT
0001
OEN
0
1 0
SEL
0
0000
START
I0
I1
1
AL2 AL1 AL0
Ø
R1 ? R1 gtgt 1 end while
0
Z
S6
1
1
Z?0
0001
0
SH2 SH1 SH0
SHIFTER
\
1
0
start0
0000
S0
S7
start1
data0
RA
R0
R1
R2
R3
R4
R5
R6
R7
001
S1
S6
RB
000
WEN
1
0000
0001
0010
0001
0001
ØØØØ
ØØØØ
ØØØØ
WA
S2
S5
001
data?0
S3
S4
18Exécution de programme - Exemple
R1 ? inport R2 ? 0 R3 ? 1 while R1 ? 0
R4 ? R1 AND R3 R2 ? R2 R4 R1 ? R1 gtgt
1 end while outport ? R2
ØØØØ
ØØØØ
INPORT
OUTPORT
0000
OEN
0
1 0
SEL
0
0001
R4 ? R1 AND R3
START
I0
I1
0
AL2 AL1 AL0
Ø
0
Z
S4
1
0
Z?0
0000
1
SH2 SH1 SH0
SHIFTER
Ø
Ø
start0
0000
S0
S7
start1
data0
RA
R0
R1
R2
R3
R4
R5
R6
R7
001
S1
S6
RB
011
WEN
1
0000
0000
0010
0001
0001
ØØØØ
ØØØØ
ØØØØ
WA
S2
S5
100
data?0
S3
S4
19Exécution de programme - Exemple
R1 ? inport R2 ? 0 R3 ? 1 while R1 ? 0
R4 ? R1 AND R3 R2 ? R2 R4 R1 ? R1 gtgt
1 end while outport ? R2
ØØØØ
ØØØØ
INPORT
OUTPORT
0010
OEN
0
1 0
SEL
0
0000
START
I0
I1
R2 ? R2 R4
1
AL2 AL1 AL0
Ø
0
Z
S5
1
1
Z?0
0010
1
SH2 SH1 SH0
SHIFTER
Ø
Ø
start0
0010
S0
S7
start1
data0
RA
R0
R1
R2
R3
R4
R5
R6
R7
010
S1
S6
RB
100
WEN
1
0000
0000
0010
0001
0000
ØØØØ
ØØØØ
ØØØØ
WA
S2
S5
010
data?0
S3
S4
20Exécution de programme - Exemple
R1 ? inport R2 ? 0 R3 ? 1 while R1 ? 0
R4 ? R1 AND R3 R2 ? R2 R4 R1 ? R1 gtgt
1 end while outport ? R2
ØØØØ
ØØØØ
INPORT
OUTPORT
0000
OEN
0
1 0
SEL
0
0000
START
I0
I1
1
AL2 AL1 AL0
Ø
R1 ? R1 gtgt 1 end while
0
Z
S6
1
0
Z?0
0000
0
SH2 SH1 SH0
SHIFTER
\
1
0
start0
0000
S0
S7
start1
data0
RA
R0
R1
R2
R3
R4
R5
R6
R7
001
S1
S6
RB
000
WEN
1
0000
0000
0010
0001
0000
ØØØØ
ØØØØ
ØØØØ
WA
S2
S5
001
data?0
S3
S4
21Exécution de programme - Exemple
R1 ? inport R2 ? 0 R3 ? 1 while R1 ? 0
R4 ? R1 AND R3 R2 ? R2 R4 R1 ? R1 gtgt
1 end while outport ? R2
0010
ØØØØ
INPORT
OUTPORT
0010
OEN
1
1 0
SEL
0
0000
START
I0
I1
1
AL2 AL1 AL0
Ø
0
Z
S7
1
1
Z?0
0010
outport ? R2
1
SH2 SH1 SH0
SHIFTER
Ø
Ø
start0
0010
S0
S7
start1
data0
RA
R0
R1
R2
R3
R4
R5
R6
R7
010
S1
S6
RB
000
WEN
0
0000
0000
0010
0001
0000
ØØØØ
ØØØØ
ØØØØ
WA
S2
S5
ØØØ
data?0
S3
S4
22Exécution de programme - Exemple
R1 ? inport R2 ? 0 R3 ? 1 while R1 ? 0
R4 ? R1 AND R3 R2 ? R2 R4 R1 ? R1 gtgt
1 end while outport ? R2
ØØØØ
ØØØØ
INPORT
OUTPORT
ØØØØ
OEN
0
1 0
SEL
0
ØØØØ
START
I0
I1
Ø
AL2 AL1 AL0
0
Ø
Z
S0
Ø
Ø
Z?0
ØØØØ
Ø
SH2 SH1 SH0
SHIFTER
Ø
Ø
start0
ØØØØ
S0
S7
start1
data0
RA
ØØØ
S1
S6
RB
ØØØ
WEN
0
0000
ØØØØ
ØØØØ
ØØØØ
ØØØØ
ØØØØ
ØØØØ
ØØØØ
WA
S2
S5
ØØØ
data?0
S3
S4
23Contrôle par machine détats
Toute machine détats peut être réalisée par un
système logique
start
SLC
D2 Q2
start0
data?0
S0
S7
start1
D1 Q1
data0
S1
S6
SLC
D0 Q0
S2
S5
data?0
CONTRÔLE170
CK
S3
S4
24Table détats
Une table détats possible est
start, data0 00 01 11
10 S0 000 000 000 001
001 nop S1 001 010 010 010 010 data ?
inport S3 011 100 100 100 100 mask ? 1 S2 010
011 011 011 011 ocount ? 0 S4 100 101 101
101 101 temp ? data and mask S5 101 110 110
110 110 ocount ? ocount temp S7 111 000 000
000 000 outport ? ocount S6 110 100 111 111
100 data ? data gtgt 1
25Signaux de contrôle
On peut aussi créer la table des signaux de
contrôle nécessaires pour gérer lunité de
traitement.
? OEN SEL AL SH RA RB
WEN WA S0 000 nop ? 0 0 ØØØ
ØØØ ØØØ ØØØ 0 ØØØ S1 001 data?inport 0
1 101 1ØØ ØØØ 000 1 001 S3 011 mask?1
0 0 111 1ØØ 000 ØØØ 1 010 S2 010
ocount?0 0 0 101 1ØØ 000 000 1
011 S4 100 temp?data AND mask 0 0 001 1ØØ 001
010 1 100 S5 101 ocount?ocounttemp 0 0 101
1ØØ 011 100 1 011 S7 111 outport?ocount 1
0 101 1ØØ 011 000 0 ØØØ S6 110 data?data gtgt 1
0 0 101 010 001 000 1 001
On peut alors déterminer, à laide de tables de
Karnaugh, les fonctions logiques nécessaires pour
évaluer le prochain état ainsi que tous les
signaux de contrôle.
26SLC mémoire
Un système logique combinatoire peut toujours
être réalisé par une mémoire suffisamment grande
AB ABCD Z
CD 00 01 10 11 0000
000 S0 00 000 000 001 001 0001
010 S1 01 010 010 010 010
0010 011 S2 10 011 011 011 011
0011 100 S3 11 100 100 100 100
0100 000
0101 010
0110 011
0111 100
1000 001
1001 010
1010 011
1011 100
1100 001
1101 010
1110 011
1111 100
N variables dentrée 2N adresses M variables de
sortie M bits de large
27SLC mémoire
start, data0 00 01 11
10 S0 000 000 000 001
001 nop S1 001 010 010 010 010 data ?
inport S3 011 100 100 100 100 mask ? 1 S2 010
011 011 011 011 ocount ? 0 S4 100 101 101
101 101 temp ? data and mask S5 101 110 110
110 110 ocount ? ocount temp S7 111 000 000
000 000 outport ? ocount S6 110 100 111 111
100 data ? data gtgt 1
La table détats de notre programme peut donc
être réalisée avec une mémoire de 2532 adresses
et de 3 bits de large.
28SLC mémoire
? OEN SEL ALC SHC RRA RRB
WEN WRA S0 000 nop ? 0 0 ØØØ
ØØØ ØØØ ØØØ 0 ØØØ S1 001 data?inport 0
1 101 1ØØ ØØØ 000 1 001 S3 011 mask?1
0 0 111 1ØØ 000 ØØØ 1 010 S2 010
ocount?0 0 0 101 1ØØ 000 000 1
011 S4 100 temp?data AND mask 0 0 001 1ØØ 001
010 1 100 S5 101 ocount?ocounttemp 0 0 101
1ØØ 011 100 1 011 S7 111 outport?ocount 1
0 101 1ØØ 011 000 0 ØØØ S6 110 data?data gtgt 1
0 0 101 010 001 000 1 001
Les signaux de contrôle de lunité de traitement
pour notre programme peuvent donc être définis
avec une mémoire de 238 adresses et de 18 bits
de large.
29SLC mémoire
Lunité de contrôle de notre processeur peut donc
être réalisée à laide de mémoires
start
RAM 32 x 3
D2 Q2
data?0
D1 Q1
RAM 8 x 18
D0 Q0
CONTRÔLE170
CK
30SLC mémoire
Lavantage dutiliser des mémoires pour
implémenter lunité de contrôle est que cette
approche peut être généralisée
M
Fanions
RAM 2NM x N
N
N BASCULES
RAM 2N x 18
CONTRÔLE170
CK
Linconvénient dutiliser des mémoires pour
implémenter lunité de contrôle est la taille des
mémoires, fonction de la complexité de la table
détats et donc du programme. P.ex. 16 bascules
(64K instructions) 8 signaux 224x16 32MB!
31Compilation
program toto var A, B, C array 1...1000 of
integer i integer begin ... for i1 to
1000 do Ci Ai Bi ... end
Algorithme ? Langage de haut-niveau ? Langage
machine assembleur
... MOVE.L 2001,A0 MOVE.L 3001,A1 MOVE.L 40
01,A2 START ABCD -(A0),-(A1) MOVE.B (A1),(A2) TE
ST CMPA 1001, A0 BNE START ...
COMPILATEUR
32Contrôle de lunité de traitement
INPORT
OUTPORT
UNITÉ DE CONTRÔLE
OEN
OEN
1 0
SEL
SEL
3
AL20
I0
I1
AL2 AL1 AL0
3
SH20
3
Z
RA20
Z?0
3
RB20
SH2 SH1 SH0
SHIFTER
WEN
3
WA20
3
RA
R0
R1
R2
R3
R4
R5
R6
R7
3
RB
WEN
Z?0
3
WA
OEN
SEL
AL20
SH20
RA20
RB20
WEN
WA20
OPÉRATION
OPÉRANDES
33Format des instructions exemple
data ? inport LOAD ADR, R1 ocount ? 0 MOVE
R0, R2 mask ? 1 INC R0, R3 while data ? 0
BRA COND, ADR temp ? data AND mask AND
R1, R3, R4 ocount ? ocount temp ADD R2,
R4, R2 data ? data gtgt 1 SHR R1, R1 end
while BRA 1, ADR outport ? ocount STORE
ADR, R2 Opcode 8 instructions différentes 3
bits de opcode Opérandes 3 opérandes de 3 bits
de large Les instructions de notre processeur
seront donc codées sur 12 bits.
34Format des instructions exemple
Le codage des instructions est, en général,
arbitraire OPCODE OPER1 OPER2 OPER3 LOAD
ADR, R1 0 0 0 Adresse50 0 0 1 MOVE R0,
R2 0 0 1 0 0 0 0 1 0 ø ø ø INC R0, R3 0
1 0 0 0 0 0 1 1 ø ø ø BRA ADR, COND 0 1 1
Adresse50 data0 AND R1, R3, R4 1 0 0 0 0
1 0 1 1 1 0 0 ADD R2, R4, R2 1 0 1 0 1 0 1
0 0 0 1 0 SHR R1, R1 1 1 0 0 0 1 0 0 1 ø ø
ø BRA ADR, COND 0 1 1 Adresse50 vrai STORE
ADR, R2 1 1 1 Adresse50 0 1
0 Paramètres 8 registres, 8 conditions, 2664
adresses mémoire
35Contrôle par instructions - Décodage
Adresse
SLC
Instruction
M
RAM 2NM x N
Fanions
N
SLC
N BASCULES
Opérandes
n BASCULES Opcode Opérandes
RAM 2N x 18
RAM 2x x 9
CONTRÔLE170
Contrôle
CK
CK
Fanions
Chaque instruction doit permettre de générer les
bits de contrôle pour lunité de traitement ainsi
que ladresse de linstruction suivante.
36Contrôle par instructions - Décodage
001 45 12 56 23 674 34 70
0data ? inport 1ocount ? 0 2mask ? 1 3while
data ? 0 4temp?data AND mask 5ocount?ocounttemp
6data ? data gtgt 1 end while 7outport ?
ocount
0R1 4R1,R3,R4 1R0,R2 5R2,R4,R2 2R0,R3
6R1,R1 3 7R2
0A?IN 4 C?AB 1B?A 5 C?AB 2B?A1 6
B?Agtgt1 3NOP 7 OUT?A