Académique Documents
Professionnel Documents
Culture Documents
Exec Decode
Vue simplifiée
Deux types d'unités :
Combinatoires (UAL, logique de contrôle)
Séquentielles : bancs de registres, mémoires
Write Data
Instruction Read Address
Memory Register
Reg Addr Data Data
PC Address Instruction File ALU Memory Read Data
Reg Addr Read
Write Data
Data
Reg Addr
clock Add
4
Fetch
PC = PC+4 Instruction
Memory
Exec Decode Read
PC Instruction
Address
Control
Unit
Fetch
PC = PC+4
Read Addr 1
Fetch Read
Register
PC = PC+4 Read Addr 2 Data 1 overflow
Instruction
File ALU zero
Write Addr Read
Exec Decode
Data 2
Write Data
31 25 20 15 0
I-Type: op rs rt address offset
Ex : lw $t1, 4($t0)
sw $t0, 12($sp)
additionne le contenu d'un registre (rs) à une
constante 16 bits :
- registre de base (rs) lu après décodage
- extension de la constante à 32 bits
store : lecture dans le banc de registres, écriture en
mémoire
load : lecture mémoire, écriture dans le banc de
registres
Exécution : Instructions Load et Store
31 25 20 15 0
I-Type: op rs rt address offset
Ex : lw $t1, 4($t0)
sw $t0, 12($sp)
additionne le contenu d'un registre (rs) à une
constante 16 bits :
- registre de base (rs) lu après décodage
- extension de la constante à 32 bits
store : lecture dans le banc de registres, écriture en
mémoire
load : lecture mémoire, écriture dans le banc de
registres
Instructions Load et Store
overflow
Read Addr 1 $t0 zero
Register Read Address
Read Addr 2 Data 1
Instruction Data
File ALU Memory Read Data
Write Addr Read
Data 2 Write Data
Write Data
Sign MemRead
16 Extend 32
31 25 20 15 0
I-Type: op rs rt address offset
Add Branch
Add target
4 Shift address
left 2
ALU control
PC
Sign
16 Extend 32
beq $t0, $t1, 8
(if ($t0-$t1 == 0) PC += 8)
Instruction Jump
31 25 0
J-Type: op jump target address
4
4
Jump
Instruction
Shift address
Memory
left 2 28
Read
PC Instruction
Address 26
Assemblage des composants
ajoutdes lignes de contrôle
Fetch, decode et execute en un seul cycle :
chaque ressource utilisée une seule fois (ex :
séparation des mémoires)
multiplexeur
Add
RegWrite ALU control MemWrite
4
ovf
zero
Instruction Read Addr 1
Register Read Address
Memory
Read Addr 2 Data 1 Data
Read File
PC Instruction Memory Read Data
Address ALU
Write Addr Read
Data 2 Write Data
Write Data
MemRead
Sign
16 Extend 32
Ajout de mutlipexeurs
Add
RegWrite ALUSrc ALU control MemWrite MemtoReg
4
ovf
zero
Instruction Read Addr 1
Register Read Address
Memory
Read Addr 2 Data 1 Data
Read File
PC Instruction Memory Read Data
Address ALU
Write Addr Read
Data 2 Write Data
Write Data
MemRead
Sign
16 Extend 32
Ajout de l'horloge
System Clock
clock cycle
RegWrite MemWrite
Add
ALUSrc ALU control MemtoReg
4
ovf
zero
Read Addr 1
Instruction Read Address
Memory Register
Read Addr 2 Data 1 Data
Read File
PC Instruction Memory Read Data
Address ALU
Write Addr Read
Data 2 Write Data
Write Data
MemRead
Sign
16 Extend 32
Ajout de l'unité de branchement
Add
MemRead
Sign
16 Extend 32
Ajout de l'unité de branchement
Add
Add
4 Shift
left 2 PCSrc
RegWrite ALUSrc ALU control MemWrite MemtoReg
ovf
zero
Read Addr 1
Instruction Read Address
Memory Register
Read Addr 2 Data 1 Data
Read File
PC Instruction Memory Read Data
Address ALU
Write Addr Read
Data 2 Write Data
Write Data
MemRead
Sign
16 Extend 32
Ajout de l'unité de contrôle
0
Add
Add 1
4 Shift
left 2 PCSrc
ALUOp Branch
MemRead
Instr[31-26] Control MemtoReg
Unit MemWrite
ALUSrc
RegWrite
RegDst
ovf
Instr[25-21] Read Addr 1
Instruction
Register Read Address
Memory Instr[20-16] Read Addr 2 Data 1 zero
Data
Read
PC Instr[31-0] 0 File
ALU Memory Read Data 1
Address Write Addr
1 Read 0
Instr[15 Data 2 Write Data 0
Write Data
-11] 1
Instr[5-0]
ALU control
Opérations UAL
Code op de l'UAL
Entrées op Fonction
UAL
0000 and
0001 or
0010 xor
0011 nor
0110 add
1110 subtract
1111 set on less than
Circuit : ALU control
entrées : funct (dans le code op) + bits ALUOp (de l'unité de
contrôle)
sorties : ALUcontrol bits
Instr op funct ALUOp action ALUcontrol
lw xxxxxx 00 add 0110
sw xxxxxx 00 add 0110
beq xxxxxx 01 subtract 1110
add 100000 10 add 0110
subt 100010 10 subtract 1110
and 100100 10 and 0000
or 100101 10 or 0001
xor 100110 10 xor 0010
nor 100111 10 nor 0011
slt 101010 10 slt 1111
ALU Control : circuit combinatoire
Instr[3]
Instr[2]
Instr[1]
Instr[0]
ALUOp1
ALUOp0
ALUcontrol3
ALUcontrol2
ALUcontrol1
ALUcontrol0
Conception de l'unité de contrôle
R-type Instruction Data/Control Flow
0
Add
Add 1
4 Shift
left 2 PCSrc
ALUOp Branch
MemRead
Instr[31-26] Control MemtoReg
Unit MemWrite
ALUSrc
RegWrite
RegDst
ovf
Instr[25-21] Read Addr 1
Instruction
Register Read Address
Memory Instr[20-16] Read Addr 2 Data 1 zero
Data
Read
PC Instr[31-0] 0 File
ALU Memory Read Data 1
Address Write Addr
1 Read 0
Instr[15 Data 2 Write Data 0
Write Data
-11] 1
Instr[5-0]
R-type Instruction Data/Control Flow
0
Add
Add 1
4 Shift
left 2 PCSrc
ALUOp Branch
MemRead
Instr[31-26] Control MemtoReg
Unit MemWrite
ALUSrc
RegWrite
RegDst
ovf
Instr[25-21] Read Addr
Instruction
Register Read
1 Address
Memory Instr[20-16] Read Addr 2 Data 1 zero
Data
Read
PC Instr[31-0] 0 File
ALU Memory Read Data 1
Address Write Addr
1 Read 0
Instr[15 Data 2 Write Data 0
Write Data
-11] 1
Instr[5-0]
Store Word Instruction Data/Control Flow
0
Add
Add 1
4 Shift
left 2 PCSrc
ALUOp Branch
MemRead
Instr[31-26] Control MemtoReg
Unit MemWrite
ALUSrc
RegWrite
RegDst
ovf
Instr[25-21] Read Addr 1
Instruction
Register Read Address
Memory Instr[20-16] Read Addr 2 Data 1 zero
Data
Read
PC Instr[31-0] 0 File
ALU Memory Read Data 1
Address Write Addr
1 Read 0
Instr[15 Data 2 Write Data 0
Write Data
-11] 1
Instr[5-0]
Store Word Instruction Data/Control Flow
0
Add
Add 1
4 Shift
left 2 PCSrc
ALUOp Branch
MemRead
Instr[31-26] Control MemtoReg
Unit MemWrite
ALUSrc
RegWrite
RegDst
ovf
Instr[25-21] Read Addr 1
Instruction
Register Read Address
Memory Instr[20-16] Read Addr 2 Data 1 zero
Data
Read
PC Instr[31-0] 0 File
ALU Memory Read Data 1
Address Write Addr
1 Read 0
Instr[15 Data 2 Write Data 0
Write Data
-11] 1
Instr[5-0]
Load Word Instruction Data/Control Flow
0
Add
Add 1
4 Shift
left 2 PCSrc
ALUOp Branch
MemRead
Instr[31-26] Control MemtoReg
Unit MemWrite
ALUSrc
RegWrite
RegDst
ovf
Instr[25-21] Read Addr 1
Instruction
Register Read Address
Memory Instr[20-16] Read Addr 2 Data 1 zero
Data
Read
PC Instr[31-0] 0 File
ALU Memory Read Data 1
Address Write Addr
1 Read 0
Instr[15 Data 2 Write Data 0
Write Data
-11] 1
Instr[5-0]
Branch Instruction Data/Control Flow
0
Add
Add 1
4 Shift
left 2 PCSrc
ALUOp Branch
MemRead
Instr[31-26] Control MemtoReg
Unit MemWrite
ALUSrc
RegWrite
RegDst
ovf
Instr[25-21] Read Addr 1
Instruction
Register Read Address
Memory Instr[20-16] Read Addr 2 Data 1 zero
Data
Read
PC Instr[31-0] 0 File
ALU Memory Read Data 1
Address Write Addr
1 Read 0
Instr[15 Data 2 Write Data 0
Write Data
-11] 1
Instr[5-0]
Unité de contrôle
Instr RegDst ALUSrc MemReg RegWr MemRd MemWr Branch ALUOp
R-
type
000000
lw
100011
sw
101011
beq
000100
lw 0 1 1 1 1 0 0 00
100011
sw X 1 X 0 0 1 0 00
101011
beq X 0 X 0 0 0 1 01
000100
Unité de contrôle : table de vérité
Instr[31]
Instr[30]
Instr[29]
Instr[28]
Instr[27]
Instr[26]
R-type lw sw beq
RegDst
ALUSrc
MemtoReg
RegWrite
MemRead
MemWrite
Branch
ALUOp1
ALUOp0
Ajoutons les instructions de saut
Jump :
remplace les 28 bits de poids faible de PC par les 26
bits indiqués dans l'adresse décalée de 2 bits à gauche
31 0
J-Type: op jump target address
Add
4
4
Jump
Instruction
Shift address
Memory
left 2 28
Read
PC Instruction
Address 26
Ajout de jump
Instr[25-0] 1
Shift 28 32
26 left 2 0
PC+4[31-28]
Add 0
Add 1
4 Shift
Jump left 2 PCSrc
ALUOp
Branch
MemRead
Instr[31-26] Control MemtoReg
Unit MemWrite
ALUSrc
RegWrite
RegDst
ovf
Instr[25-21] Read Addr 1
Instruction Read Address
Memory Register
Instr[20-16] Read Addr 2 Data 1 zero
Read Data
PC Instr[31-0] 0 File
ALU Memory Read Data 1
Address Write Addr
1 Read 0
Instr[15 Data 2 Write Data 0
Write Data
-11] 1
Instr[5-0]
Unité de contrôle
Instr RegDst ALUSrc MemReg RegWr MemRd MemWr Branch ALUOp Jump
R-type 1 0 0 1 0 0 0 10 0
000000
lw 0 1 1 1 1 0 0 00 0
100011
sw X 1 X 0 0 1 0 00 0
101011
beq X 0 X 0 0 0 1 01 0
000100
j X X X 0 0 0 X X 1
000010
Utilisation du chemin de données
Les instructions n'utilisent pas toutes les mêmes
parties du chemin de données :
format
R / branch : pas d'accès à la mémoire de
données