Types de processeurs : RISC vs CISC
Types de processeurs : RISC vs CISC
du microprocesseur
Cours 07
Plan de la séance
Types de processeurs
Processeurs à l'étude INF1600
Implémentation de l’UAL
Notation RTN
Encodage des instructions
4
Types d’architecture de jeu d'instructions (ISA)
Types de processeurs
Distinction entre RISC et CISC
• CISC: Complex Instruction Set Computer
• Cherche à réduire le nombre de lignes d’instructions assembleur (coût
de la mémoire)
• Le matériel compense en exécutant en dur des instructions complexes
• Permet d’exploiter un compilateur moins complexe
• Ex. MC68000, x86
• RISC: Reduced Instruction Set Computer
• Développe le matériel autour d’un ensemble réduit d’instructions
• Les instructions complexes peuvent être recomposées (par plusieurs
sous-instructions)
• Le compilateur fait le gros du travail
• Ex. ARM, MIPS, RISC-V
Unité de
contrôle
Unité
Arithmétique et
Entrées Logique (UAL) Sorties
BUS
Unité de
Mémoire
31 0 Instruction Register
R31 IR
(aussi CIR pour Current Instruction Register)
ADD Registers
SUB
AND 31 0
Memory Address
A
OR Accumulator (AC) (aussi MAR pour Memory Address Register)
31 0
SHR MA
Mémoire
A B
SHRA 31 0
UAL
SHL C
MD
[Link]
Memory Data
SHC 12 (aussi MDR pour Memory Data Register)
31 0
NOT C
NEG
Computation
C=B (aussi CR pour Computation Register)
INC4 Computer Systems Design and Architecture (Vincent P. Heuring et Harry F. Jordan).
Avant Après
31 0
R[0] 10 10 A
31 0
10 12 MA
R[1] 12 12
Memory
A B
ALU 31 0
MD
R[2] 13 22 C
31 0 22
C
GPR
• R[2] M[1] 32
31 0
R31 IR
Avant Après Avant Après
Memory
A B
ALU 31 0
R[2] 13 122 M[2] 123 123 MD
C
31 0
C
Combien de cycles pour exécuter cette
instruction assembleur?
GPR
• PC #ADDR 03 INST #2 32
04 INST #3
31 0
ELSE R31 IR
Important pour réaliser: 05 INST #4
• Des structures conditionnelles 06 INST #5
31 0
07 INST #6
• Des boucles END IF
A
31 0
• Des fonctions 08 INST #7 MA
Memory
A B
01 IF CONDITION 01 IF CONDITION
02 INST #1 05 INST #4 ALU 31 0
03 INST #2 06 INST #5 MD
04 INST #3 07 INST #6 C
08 INST #7 08 INST #7
31 0
C
Condition Condition
remplie pas remplie
Processeur de 1
2
3
ld
ldr
st
ra, c2(rb)
ra, c1
ra, c2
Charger depuis une adresse avec déplacement.
Charger depuis une adresse relative.
Stocker à une adresse absolue ; rb est le registre 0.
Heuring 3
4
5
st
str
la
ra, c2(rb)
ra, c1
ra, c2
Stocker à une adresse avec déplacement.
Stocker à une adresse relative.
Charger l'adresse absolue dans ra ; rb est le registre 0.
5 la ra, c2(rb) Charger l'adresse avec déplacement dans ra.
Instructions 6
12
lar
add
ra, c1
ra, rb, rc
Charger l'adresse relative dans ra.
Additionner rb et rc, stocker le résultat dans ra.
13 addi ra, rb, c2 Additionner rb et une constante immédiate, stocker le résultat dans ra.
14 sub ra, rb, rc Soustraire rc de rb, stocker le résultat dans ra.
Inst. de Op c3(2:0) Arg. Conditions
15 neg ra, rc Calculer le complément à deux de rc et stocker le résultat dans ra.
branch. code
22 or ra, rb, rc OU logique entre rb et rc, stocker le résultat dans ra.
brnv 8 0 Jamais
23 ori ra, rb, c2 OU logique entre rb et une constante immédiate, stocker le résultat dans ra.
brlnv 9 0 ra Jamais
20 and ra, rb, rc ET logique entre rb et rc, stocker le résultat dans ra.
Enreg. PC dans ra
br 8 1 rb Toujours vers rb 21 andi ra, rb, c2 ET logique entre rb et une constante immédiate, stocker le résultat dans ra.
brl 9 1 ra, rb Toujours vers rb 24 not ra, rc Calculer le NON logique de rc et stocker le résultat dans ra.
Enreg. PC dans ra 26 shr ra, rb, c3 Décaler rb vers la droite dans ra d’un nombre de bits constant c3.
brzr 8 2 rb, rc Si R[rc] = 0 26 shr ra, rb, rc Décaler rb vers la droite dans ra d’un nombre de bits contenu dans rc ; c3 est 0.
brlzr 9 2 ra, rb, rc Si R[rc] = 0 27 shra ra, rb, c3 Décalage arithmétique à droite de rb dans ra par c3 bits.
Enreg. PC dans ra Décalage arithmétique à droite de rb dans ra par le nombre de bits contenu dans rc ; c3 est
27 shra ra, rb, rc
brnz 8 3 rb, rc Si R[rc] ≠ 0 0.
brlnz 9 3 ra, rb, rc Si R[rc] ≠ 0 28 shl ra, rb, c3 Décaler rb vers la gauche dans ra de c3 bits.
Enreg. PC dans ra 28 shl ra, rb, rc Décaler rb vers la gauche dans ra d’un nombre de bits contenu dans rc ; c3 est 0.
brpl 8 4 rb, rc Si R[rc] ≥ 0 29 shc ra, rb, c3 Rotation circulaire à gauche de rb dans ra par c3 bits.
brlpl 9 4 ra, rb, rc Si R[rc] ≥ 0 29 shc ra, rb, rc Rotation circulaire à gauche de rb dans ra par le nombre de bits contenu dans rc ; c3 est 0.
Enreg. PC dans ra
brmi 8 5 rb, rc Si R[rc] < 0 rb, rc, c3 ou Sauter à l'adresse contenue dans rb si rc satisfait la condition c3
8 or 9 br ou brl Sauter à rb si rc satisfait c3 et enregistrer PC dans ra
brlmi 9 5 ra, rb, rc Si R[rc] < 0 ra, rb, rc, c3 Voir tableau complémentaire
Enreg. PC dans ra
0 nop Aucune opération (insertion d’une bulle dans le pipeline)
31 stop Arrêter le programme
opcode ra rb rc c3
31 0
A opcode : code de l’instruction = 12
31 0 ra: registre destination = 2
MA
Mémoire
A B rb : deuxième registre source = 2
31 0
UAL
MD
rc : deuxième registre source = 1
C c3 : unused
31 0
C
31 0
A
31 0
MA
Mémoire
A B
UAL 31 0
MD
C
Considérant que le décode se faire de
31 0 manière asynchrone (donc ne consomme
C
aucune cycle), quel est le CPI de
R[2] R[2] + R[1] ?
Computer Systems Design and Architecture (Vincent P. Heuring et Harry F. Jordan).
31 0 opcode ra rb c3
A
31 0 opcode : code de l’instruction = 1
MA
ra: registre destination = 2
Mémoire
A B
UAL 31
MD
0 rb : unused
C c3 : adresse absolue = 1
31 0
Quel est le CPI de
C R[2] M[1] ?
31 0
PC
opcode ra rb rc c3
31 0
MA
opcode : code de l’instruction = 12
Mémoire
31 0
rb : deuxième registre source = 2
A
rc : deuxième registre source = 1
A B c3 : unused
UAL
C
sel_acc_data
8
Compteur 3 états :
• Fetch : sel_mem_addr = 1, wr_ir = 1
• Décode : décodage de l instruction pour génération des signaux de contrôle
• Execute : sel_mem_addr = 0 + selection des bonnes valeurs pour les signaux de contrôle en bleu selon instruction acc
(sel_jump_source = 1 si pas branchement et 0 si branchement)
(CodeMachine) stop
br ADR
brz ADR
0x13XX
0x0DXX
0x0EXX
Arrêt du programme
PC ADR
ACC = 0 ? PC ADR : PC PC + 1
brnz ADR 0x0FXX ACC != 0 ? PC ADR : PC PC + 1
Instruction + Encodage Description
shl 0x10XX ACC ACC << 1
1 shr 0x11XX ACC ACC >> 1
Memory
adda ADR 0x03XX MA MA + Mémoire[ADR]
+1 0 suba ADR 0x04XX MA MA - Mémoire[ADR]
data_in
1 PC 1 addx 0x05XX ACC ACC + Mémoire[MA]
8 16 A ALU ACC 16
1 data_out 16
subx 0x06XX ACC ACC - Mémoire[MA]
0 0 addr 0 lda ADR 0x09XX MA Mémoire[ADR]
2 1
8
B
1 sta ADR 0x0AXX Mémoire[ADR] MA
IR 16 0
MA 16 ldi 0x0BXX ACC Mémoire[MA]
0 sti 0x0CXX Mémoire[MA] ACC
sel_mem_data
sel_mem_addr
sel_pc_source
sel_acc_data
sel_ma_source
op_alu opération
alu_b_source
31 0 <31..0>
R0 31 0
registres PC 1
à usage Memory
32
général 0
+1
data_in
31 0 1
1 PC 8 16 16
R31 IR A ALU ACC
1 data_out 16
0 0 addr 0
2 1 B
8 1
31 0 MA 16
IR 16 0
A 0
sel_mem_data
sel_mem_addr
sel_pc_source
31 0 8
sel_acc_data
sel_ma_source
MA Mémoire
alu_b_source
A B
CPI? 16
0
1
12 16 2
16 data_in 8
5 rdst
16
wr_reg
rsrc1 A A 8 addr
5 16
+1 0
12 12 addr dout 28 28 F 16 dout
1 16 din 16
rsrc2 B 16 B
5 wmem
PC inst_memory IR
4+4 registers ALU data_memory
op alu NZ
do_branch wr_pc wr_ir sel_reg_data wr_reg wr_mem
Unité de contrôle
Neumann
ou Harvard?
*Le registre A peut aussi est une adresse mémoire directe pour des opérations
mémoire-mémoire
R0
R1 On pourrait associer
R2 les registre R0 à R7
aux registres utilisés
R3 en IA-32 AT&T
R4
R5
R6
R7
Mux
Add
Add
4
Shift
RegWrite
left 1
Mux
regi ster
Mux
mem ory
Write
data Regist ers
Write
Data
data
mem ory
32 64
Instruction [31-0] Imm ALU
Gen control MemRe ad
Computer Organization and Design RISC-V Edition (David A. Patterson & John L. Hennessy)
« Tri-state buffer »
(ou buffer trois états)
additionneur « shifter » …
add/sub
n n
A
B
n n n 5
carry_in
Deux solutions parmi tant d’autres (mais ce sont des techniques
B3 A3 B2 A2 B1 A1 B0 A0
Sub/Add’
ADD
SUB
AND
OR
SHR
X Y X Y X Y X Y
SHRA
Cout Cin Cout Cin Cout Cin Cout Cin SHL
S S S S SHC 12
NOT
S4 S3 S2 S1 S0 NEG
C=B
INC4
INF1600: Architecture des micro-ordinateurs 42
Plan de la séance
Types de processeurs
Exécution d'instructions
Processeurs à l'étude INF1600
Implémentation de l’UAL
Notation RTN
Encodage des instructions
MD M[MA] : PC C ; R31 IR
IR MD ; Concurrence
31 0
A
31 0
MA
Mémoire
A B
UAL 31 0
MD
C
31 0
C
IR MD ;
31 0
A
31 0
MA
Mémoire
A B
UAL 31 0
MD
C
31 0
C
• Concret:
31 0
Sur bus : PC R31 IR
Mémoire
Sur bus : MD A B
UAL 31 0
Load IR MD
C
31 0
C
31 0
R31 IR
31 0
A
31 0
MA
Mémoire
A B
UAL 31 0
MD
C
31 0
C
31 0
R31 IR
MA PC : C PC+4 ;
MD M[MA] : PC C ; 31 0
A
IR MD ; 31
MA
0
A R[rb];
Mémoire
A B
UAL 31 0
C A + R[rc];
MD
C
R[ra] C; 31
C
0
31 0
R31 IR
31 0
A
31 0
MA
Mémoire
A B
UAL 31 0
MD
C
31 0
C
MD R[ra];
M[MA] MD; 31
A
0
31 0
MA
Mémoire
A B
UAL 31 0
MD
C
31 0
C
31 0
R31 IR
31 0
A
31 0
MA
Mémoire
A B
UAL 31 0
MD
C
31 0
C
A R[rb]; 31
IR
0
R31
C A + c2; # c2 = IR<16..0>
R[ra] C; 31
A
0
31 0
MA
Mémoire
A B
UAL 31 0
MD
C
31 0
C
31 0
R31 IR
31 0
A
31 0
MA
Mémoire
A B
UAL 31 0
MD
C
31 0
C
MA PC : C PC+4 ; R31
31
IR
0
MD M[MA] : PC C ;
IR MD ; 31
A
0
R[rb]; CPI = 6 31 0
A MA
Mémoire
A B
A + c2; # c2 = IR<16..0>
31 0
C UAL
C
MD
R[ra] C; 31
C
0
31 0
R31 IR
31 0
A
31 0
MA
Mémoire
A B
UAL 31 0
MD
C
31 0
C
PC R[rb]; 31
IR
0
R31
31 0
A
31 0
MA
Mémoire
A B
UAL 31 0
MD
C
31 0
C
Bits 31:24 Bits 23:21 Bits 20:18 Bits 17:15 Bits 14:13 Bits 12:0 Bits 23:0
Registre A
Registre B Registre C Valeur
Code UAL destination - -
source source immédiate
/ source
Code Registre A
Registre B Registre C
Accès destination Échelle Offset -
base Index
mémoire / source *
Adresse
Code Saut - - - - -
offset
*Le registre A peut aussi est une adresse mémoire directe pour des opérations mémoire-mémoire
Nbr de bits de
décalage
INF1600: Architecture des micro-ordinateurs 60
Notation RTN
Exemple 7 :
Donnez le RTN concret (x86 simplifié) de l’instruction:
R[ra] R[ra] + R[rb]
Note:
Mémoire2[deplacement + R[rb] + 2k ·R[rc]] R[ra];
k = échelle =
nbr de bits de décalage à gauche
"00" : 20 = 1
"01" : 21 = 2
"10" : 22 = 4
"11" : 23 = 8
INF1600: Architecture des micro-ordinateurs 63
Notation RTN
Exemple 8 : solution
Donnez le RTN concret (x86 simplifié) de l’instruction:
Mémoire2[23 + R[1] + 8·R[2]] R[0];
Note:
Mémoire2[deplacement + R[rb] + 2k·R[rc]] R[ra];
T R[2];
T T << 3; (on a 3 = log2(8))
T T + R[1];
MA T + 23;
Mémoire2[MA] R[0];
Mémoire2[R[ra]]
Mémoire2[offset + R[rb] + 2k·R[rc]]; Le registre A peut aussi est une adresse mémoire directe pour des
opérations mémoire-mémoire
Exemple 9 : solution
Donnez le RTN concret du RTN abstrait suivant
(x86 simplifié modifié):
Mémoire2[R[ra]] Mémoire2[R[rb]];
MA R[rb];
T Mémoire2[MA];
MA R[ra];
Mémoire2[MA] T;
31 0
R31 IR
31 0
A
31 0
MA
Mémoire
A B
Type d’instructions
31 0
• UAL UAL
MD
C
• Accès mémoire (déplacement de données)
31 0
• Saut (branchement) C
Mémoire
A B
31 0
Rappel UAL
MD
C
31 0
C
disp = c2 (si rb = 0) 31 0
A
= rb + c2 (si rb /= 0) 31
MA
0
Mémoire
A B
UAL 31 0
MD
C
31 0
C
31 0
R31 IR
31 0
A
31 0
MA
Mémoire
A B
UAL 31 0
MD
C
31 0
C
Rappel:
add (:=op=12): R[ra] R[rb] + R[rc]
Rappel:
add (:=op=12): R[ra] R[rb] + R[rc]
01100 00101 00011 01100 0000 0000 0000
Note:
op=0x15 : Mémoire2[deplacement + R[rb] + 2k· R[rc]] R[ra];