Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
1
Unité Centrale de Traitement Processeur
2
Introduction on a vu comment des éléments de logique combinatoire ou séquentielle permettaient de faire des additions, des comparaisons lire ou écrire dans des registres lire ou écrire dans de la mémoire on va voir maintenant comment exécuter des séquences cohérentes d'opérations : instructions Cf le cours de Logiciels de Base approche simplifiée, basée sur l'architecture MIPS Référence pour les figures : Patterson et Hennessy : Computer organisation and design, the hardware/software interface, 5th edition, Morgan Kaufmann (2014)
3
Introduction étude d'un sous-ensemble des instructions du processeur MIPS incluant : l'accès aux données mémoire en lecture (load, lw) et en écriture (store, sw) les opérations arithmétiques et logiques add, sub, and, or, slt l'instruction de branchement conditionnel sur égalité beq l'instruction de saut inconditionnel j
4
Introduction toutes les instructions vont d'abord
aller chercher dans la mémoire du programme l'instruction qui correspond au contenu du registre de programme (Program Counter) décoder l'instruction et lire un ou deux registres indiqués dans les champs de l'instruction (rs, rt) ensuite ça va dépendre de la classe de l'instruction, mais les comportements sont souvent les mêmes utilisation de l'ALU arithmétique, logique calcul d'adresse accès mémoire et/ou aux registres PH Chap 5
5
Introduction représentation schématique
6
Introduction représentation schématique
Le PC peut recevoir l'adresse par une simple incrémentation
7
Introduction représentation schématique
Le PC peut recevoir l'adresse par une simple incrémentation ou par une instruction (saut)
8
Introduction représentation schématique
Les données écrites dans les registres peuvent venir de l'ALU
9
Introduction représentation schématique
Les données écrites dans les registres peuvent venir de l'ALU ou de la mémoire
10
Introduction représentation schématique
l'origine des instructions comme celle des données est multiple on ne peut pas connecter simplement des lignes électriques différentes
11
Introduction représentation schématique
Pour choisir le bon chemin, on va utiliser des multiplexeurs
12
Introduction représentation schématique
13
Introduction représentation schématique
utilisation de 3 multiplexeurs pour choisir l'origine des données
14
Introduction représentation schématique
une unité de contrôle utilisant l'instruction permet de gérer le fonctionnement des circuits et des multiplexeurs
15
Introduction représentation schématique
l'incrémentation du PC est gérée par la sortie de l'ALU utilisée pour effectuer la comparaison pour l'instruction beq
16
plan du cours réalisation d'une ALU effectuant les opérations de base arithmétiques et logiques CPU en mode cycle unique réalisation d'un chemin de données réalisation une unité de contrôle CPU en mode multicycle chemin de données contrôle gestion des interruptions CPU en mode pipeline gestion des aléas Hiérarchie des mémoires. Caches
17
plan du cours réalisation d'une ALU effectuant les opérations de base arithmétiques et logiques CPU en mode cycle unique réalisation d'un chemin de données réalisation une unité de contrôle CPU en mode multicycle chemin de données contrôle gestion des interruptions CPU en mode pipeline gestion des aléas Hiérarchie des mémoires. Caches
18
Implémentation d'une ALU
réalisation des opérations arithmétiques : addition et soustraction logiques : ET et OU on a vu comment réaliser un additionneur en logique combinatoire on le considère maintenant comme une boîte noire a b + CarryIn CarryOut Result Cf PH Appendix B(basics of logic design)
19
Implémentation d'une ALU
ALU 1 bit addition opérations logiques ET, OU Combien de bits pour coder Op ? Op 1 2 Result + a b CarryIn CarryOut Cf PH Appendix B(basics of logic design)
20
Implémentation d'une ALU
réalisation d'une ALU 32 bits Op le CarryIn du bit le moins significatif est forcé à 0 a1 b1 Résultat1 ALU31 a31 b31 Résultat31 CarryOut ALU1 CarryIn a0 ALU0 CarryIn Résultat0 b0 CarryOut le CarryIn du bit le plus significatif est perdu
21
Implémentation d'une ALU
pour effectuer la soustraction a−b=a+ b +1 CarryIn du bit le moins significatif forcé à 1 pour la soustraction + a b CarryOut Op 1 2 Result b Invert CarryIn
22
Implémentation d'une ALU
pour effectuer les autres opérations logiques utilisation du théorème de De Morgan NOR : NAND : a+b = a . b a.b = a + b + a b CarryIn CarryOut Op 1 2 Result b Invert a Invert
23
Implémentation d'une ALU
notre ALU effectue les opérations arithmétiques et logiques de base on voudrait qu'elle puisse exécuter l'instruction slt (set on less than) le résultat vaut 1 si rs < rt sinon 0 met les 31 bits de poids fort à 0 et le bit le moins significatif à 0 ou 1 suivant le résultat de la comparaison une opération supplémentaire pour le multiplexeur : Less
24
Implémentation d'une ALU
nouvelle version de l'ALU 1 bit : + a b CarryIn CarryOut Op 1 2 Result binvert a invert 3 Less
25
Implémentation d'une ALU
nouvelle version de l'ALU 32 bits : pour les 31 bits de poids fort, on connecte l'entrée Less à 0 et ce sera la sortie de l'ALU 1 bit correspondante (ALU31 à ALU1) le bit le moins significatif (ALU0) doit être à 1 si a<b. c'est la valeur du bit de signe du résultat de a-b le bit de signe du résultat de a-b est le bit de poids le plus fort de l'additionneur (qui n'est pas la sortie de l'ALU31) nécessité d'une ALU31 spécifique pour le bit de poids le plus fort avec une sortie spéciale (Set) donnant le bit de signe (bit de sortie de l'additioneur) et utilisée uniquement pour l'opération slt
26
Implémentation d'une ALU
+ a b CarryIn CarryOut Op 1 2 Result b Invert a Invert 3 Less Set
27
Implémentation d'une ALU
ALU 31 : il faut aussi détecter les dépassements de capacité + a b CarryIn Op 1 2 Result b Invert a Invert 3 Less Set Détection du dépassement de capacité Overflow Cf TD
28
Implémentation d'une ALU
CarryIn ALU0 Less CarryOut a0 b0 Résultat0 ALU1 a1 b1 Résultat1 ALU2 a2 b2 Résultat2 ALU31 a31 b31 Résultat31 Set Overflow Operation binvert ainvert v ALU 32 bits
29
Implémentation d'une ALU
si l'on veut aussi effectuer des branchements conditionnels, il faut pouvoir effectuer des tests de comparaison sur le contenu de 2 registres on va tester si a-b vaut 0 si oui a=b si non a≠b la façon la plus simple de tester l'égalité est Zero= Résultat31+Résultat Résultat1+Résultat0
30
Implémentation d'une ALU
CarryIn ALU0 Less CarryOut a0 b0 Résultat0 ALU1 a1 b1 Résultat1 ALU2 a2 b2 Résultat2 ALU31 a31 b31 Résultat31 Set Overflow Operation binvert ainvert Zero ALU 32 bits
31
Implémentation d'une ALU
CarryIn ALU0 Less CarryOut a0 b0 Résultat0 ALU1 a1 b1 Résultat1 ALU2 a2 b2 Résultat2 ALU31 a31 b31 Résultat31 Set Overflow Operation binvert ainvert v Zero ALU 32 bits
32
Implémentation d'une ALU
Représentation symbolique a b ALU operation CarryOut Zero Result Overflow 32 4
33
plan du cours réalisation d'une ALU effectuant les opérations de base arithmétiques et logiques CPU en mode cycle unique réalisation d'un chemin de données réalisation une unité de contrôle CPU en mode multicycle chemin de données contrôle gestion des interruptions CPU en mode pipeline gestion des aléas Hiérarchie des mémoires. Caches
34
Réalisation d'un chemin de données
les éléments du processeur qui permettent d'exécuter une opération arithmétique ou logique la liste des éléments nécessaires va dépendre du type de l'instruction
35
Réalisation d'un chemin de données
rappel : toutes les instructions vont d'abord aller chercher dans la mémoire du programme l'instruction qui correspond au contenu du registre de programme (Program Counter) : Instruction fetch (IF) décoder l'instruction et lire un ou deux registres indiqués dans les champs de l'instruction (rs, rt) : Instruction decode (ID) ensuite ça va dépendre de la classe de l'instruction, mais les comportements sont souvent les mêmes utilisation de l'ALU : Execute (EX) arithmétique, logique calcul d'adresse accès mémoire : Memory Access (Mem) accès aux registres : Write back (WB)
36
Réalisation d'un chemin de données
pour réaliser un chemin de données, on a besoin d'un registre pour stocker l'adresse de l'instruction d'une mémoire pour stocker les instructions à des adresses données d'un additionneur pour calculer l'adresse de l'instruction suivante PC adresse de l'instruction instruction Mémoire des instructions Add
37
Réalisation d'un chemin de données
ensuite on peut assembler les éléments pour obtenir une partie du chemin de données allant chercher une instruction et incrémentant le compteur de programme pour obtenir l'adresse de l'instruction suivante adresse de l'instruction instruction Mémoire des instructions PC Add 4
38
Réalisation d'un chemin de données
instructions de type R (MIPS) lisent le contenu de 2 registres effectuent une opération arithmétique ou logique écrivent le résultat dans un registre add, sub, and, or, slt add $t0,$t1,$t2 place la somme de $t1 et $t2 dans $t0 les 32 registres de travail de l'architecture MIPS sont regroupés dans une structure appelée register file chaque registre a une utilisation spécifique registres pour les variables : $s0, $s1, ... registres pour les données temporaires : $t0, $t1, ... stack pointer : $sp, zéro : $zero, registre d'adresse de retour : $ra les registres sont identifiés par leur numéro (cf cours LdB) $zero → 0 $t0 → $t7 : 8 →15 $s0 → $s7 : 16 →23
39
Réalisation d'un chemin de données
éléments nécessaires pour implémenter une instruction de type R : sert à stocker temporairement les données manipulées par l'ALU stocke en lecture les données provenant de la mémoire avant de les traiter avec l'ALU stocke en écriture les résultats de l'ALU avant de les écrire en mémoire Registres 5 numéro des registres Données en entrée Registre lecture #1 lecture #2 écriture en sortie Ecriture registre TD
40
Réalisation d'un chemin de données
éléments nécessaires pour implémenter une instruction de type R : Registres 5 numéro des registres Données en entrée Registre lecture #1 lecture #2 écriture en sortie Ecriture registre ALU Code opération Zéro Résultat ? 4
41
Réalisation d'un chemin de données
instructions d'accès à la mémoire lw $t1, offset_value($t2) sw $t1, offset_value($t2) lw : lu de la mémoire et chargé dans le registre $t1 → mémoire calcul de l'adresse en ajoutant offset_value à l'adresse de base stockée dans $t2 → ALU offset_value est un entier signé de 16 bits → il va falloir l'étendre à 32 bits en recopiant le bit de signe de l'entier 16 bits dans les bits de poids forts de l'entier 32 bits → module dédié
42
Réalisation d'un chemin de données
modules nécessaires : les éléments déjà vus register file ALU pour incrémenter le PC une unité mémoire dans laquelle on va lire ou écrire les données module pour l'extension de l'offset de 16 bits non signés à 32 bits signés Mémoire données adresse données en écriture lecture Contrôle écriture mémoire lecture mémoire Extension du bit de signe de l'offset 16 32
43
Réalisation d'un chemin de données
instructions de branchement beq $t1, $t2, offset 3 opérandes 2 registres dont les contenus vont être comparés un offset pour calculer la nouvelle adresse de l'instruction à exécuter en cas d'égalité des registres l'adresse de base est celle de l'instruction qui suit beq (déjà calculé quand on va chercher l'intruction en cours) l'offset est basé sur le "mot" de 4 octets : on peut le décaler à gauche de 2 bits de façon à augmenter l'échelle d'un facteur 4)
44
Réalisation d'un chemin de données
instructions de branchement beq $t1, $t2, offset 3 opérandes on prend le branchement si les contenus des registres sont égaux : l'adresse de la prochaine instruction est le nouveau contenu du PC + l'offset sinon le branchement n'est pas pris et l'adresse de la prochaine instruction est simplement le nouveau contenu du PC
45
Réalisation d'un chemin de données
PC+4 (venant du chemin de données) ALU Adresse de branchement Somme Décalage à gauche de 2 Registres Registre lecture #1 code opération 4 Instruction Registre lecture #2 Données lecture #1 ALU Logique de contrôle Zéro Données lecture #2 Registre écriture Données écriture Ecriture registre Extension du bit de signe 16 32
46
Réalisation d'un chemin de données
on vient de voir comment réaliser les composants d'un chemin de données pour différents types d'instructions on va voir maintenant comment assembler ces éléments pour réaliser un chemin de données unique capable d'exécuter toutes les instructions cas le plus simple où chaque instruction est exécutée en un seul cycle de l'horloge chaque ressource ne peut être utilisée qu'une fois par instruction ® duplication des ressources sources de données multiples et utilisation de multiplexeurs gérés par des signaux de contrôle
47
Réalisation d'un chemin de données
Exemple : exécution des instructions de type R et de recherche en mémoire les chemins de données pour les deux types d'opérations sont assez semblables, mais : les opérations de type R utilisent l'ALU avec des entrées provenant de 2 registres stockent le résultat de l'ALU dans un registre du register file les opérations d'accès à la mémoire utilisent l'ALU pour le calcul de l'adresse avec pour second opérande la valeur d'offset provenant directement de l'instruction stockent le contenu de la mémoire dans le register file
48
Réalisation d'un chemin de données
Exemple : exécution des instructions de type R et de recherche en mémoire code opération 4 Ecriture mémoire Registres Registre lecture #1 lecture #2 écriture Données Instruction Mémoire vers registre Zéro ALU Mémoire données Résultat Adresse Source ALU Données lues M u x 1 M u x 1 Ecriture registre Données à écrire Extension du bit de signe 16 32 Lecture mémoire
49
Réalisation d'un chemin de données
pour toutes les opérations envisagées, on va combiner les chemins de données vus pour les opérations de type R les opérations d'accès à la mémoire les branchements
50
Réalisation d'un chemin de données
x Add Add 4 Décal. gauche 2 bits Résultat 1 Source PC Registres Registre lecture #1 lecture #2 écriture Données Ecriture registre Ecriture mémoire Mémoire vers registre PC Lecture adresse Mém. instr. instruction (31:0) Zéro Source ALU ALU Mémoire données Adresse 1 M u x M u x Résultat M u x Données lues 1 Contrôle ALU 1 Données à écrire Destination registre Lecture mémoire Ext. bit de signe 32
51
plan du cours réalisation d'une ALU effectuant les opérations de base arithmétiques et logiques CPU en mode cycle unique réalisation d'un chemin de données réalisation une unité de contrôle CPU en mode multicycle chemin de données contrôle gestion des interruptions CPU en mode pipeline gestion des aléas Hiérarchie des mémoires. Caches
52
Implémentation d'une unité de contrôle
prend le contenu des instructions pour gérer les signaux d'écriture, la sélection sur les multiplexeurs, le contrôle de l'ALU première approche simplifiée couvrant les instructions lw, sw beq add, sub, and, or, set on less than
53
Implémentation d'une unité de contrôle
Contrôle de l'ALU 4 bits pour le contrôle seulement 6 opérations pour notre implémentation + a b CarryOut Op 1 2 Result binvert (+CarryIn) a invert 3 Less Lignes de contrôle de l'ALU ainv binv Op1 Op0 Fonction AND OR add sub set on less than NOR
54
Implémentation d'une unité de contrôle
Contrôle de l'ALU 4 bits pour le contrôle seulement 6 opérations pour notre implémentation + a b CarryOut Op 1 2 Result binvert (+CarryIn) a invert 3 Less Lignes de contrôle de l'ALU ainv binv Op1 Op0 Fonction 0000 AND OR add sub set on less than NOR
55
Implémentation d'une unité de contrôle
Contrôle de l'ALU 4 bits pour le contrôle seulement 6 opérations pour notre implémentation + a b CarryOut Op 1 2 Result binvert (+CarryIn) a invert 3 Less Lignes de contrôle de l'ALU ainv binv Op1 Op0 Fonction 0000 AND 0001 OR 0010 add 0110 sub 0111 set on less than 1100 NOR
56
Implémentation d'une unité de contrôle
Contrôle de la CPU « cycle unique » rappel : format des instructions MIPS pour les instructions de type R, de branchement et d'accès à la mémoire champ rs rt rd shamt funct position des bits 31:26 25:21 20:16 15:11 10:6 5:0 instructions de type R (exemple : add rd, rs, rt ) 3510 ou 4310 offset 0:15 instructions d'accès à la mémoire (exemple : lw rt, offset(rs) ) 410 instructions de saut conditionnel (exemple : beq rs, rt, offset)
57
Implémentation d'une unité de contrôle
remarques : le champ d'opération (opcode) est toujours contenu dans les bits [31:26] : Op[5:0] les registres à lire sont toujours spécifiés par les champs rs [25:21] et rt [20:16] le registre de base pour les opérations d'accès en mémoire est donné par le champ rs [25:21] l'offset pour les branchements et les accès mémoire est toujours contenu dans les bits [15:0] le registre de destination est soit dans rt [20:16] pour un lw dans rd [15:11] pour les instructions de type R nécessité d'un multiplexeur supplémentaire
58
Implémentation d'une unité de contrôle
les entrées de contrôle pour l'ALU vont pouvoir être générées par le champ de fonction de l'instruction (bits 0 à 5 pour les instructions de type R, cf cours LdB) un champ de 2 bits nommé ALUOp qui vaut 00 pour les add liées aux instructions lw et sw 01 pour les sub liées aux instruction beq 10 pour les instructions dont l'identité est définie par le champ de fonction
59
Implémentation d'une unité de contrôle
bits de contrôle de l'ALU utilise le champ de fonction et un champ de contrôle de 2 bits on va maintenant relier les champs de l'instruction au chemin de données Code opérationnel ALUOp Opération Champ de fonction Action de l'ALU Entrées de contrôle de l'ALU ainv binv Op1 Op0 LW 00 load word XXXXXX add 0010 SW store word Branch equal 01 branch equal substract 0110 R type 10 100000 100010 AND 100100 and 0000 OR 100101 or 0001 set on less than 101010 0111
60
Implémentation d'une unité de contrôle
table de vérité (limitée aux opérations qui requièrent un code opérationnel pour l'ALU) ALUOp Champ de fonction Opération Op3 Op2 Op1 Op0 ALUOp1 ALUOp0 F5 F4 F3 F2 F1 F0 X 0010 1 0110 0000 0001 0111 11 jamais utilisé toujours 10
61
Implémentation d'une unité de contrôle
table de vérité (limitée aux opérations qui requièrent un code opérationnel pour l'ALU) ALUOp Champ de fonction Opération Op3 Op2 Op1 Op0 ALUOp1 ALUOp0 F5 F4 F3 F2 F1 F0 X 0010 1 0110 0000 0001 0111 implémentation en TD
62
Implémentation d'une unité de contrôle
x Add Add 4 Décal. gauche 2 bits Résultat 1 Source PC instruction [25:21] Registres Registre lecture #1 lecture #2 écriture Données Ecriture registre Ecriture mémoire Mémoire vers registre PC instruction [20:16] Lecture adresse Mém. instr. instruction (31:0) Zéro Source ALU ALU Mémoire données Adresse 1 M u x M u x Résultat M u x Données lues instruction [15:11] 1 1 Données à écrire Destination registre Lecture mémoire Contrôle ALU Ext. bit de signe 32 instruction [15:0] 2 instruction [5:0] ALUOp
63
Implémentation d'une unité de contrôle
x Add Add 4 Décal. gauche 2 bits Résultat 1 Source PC instruction [25:21] Registres Registre lecture #1 lecture #2 écriture Données Ecriture registre Ecriture mémoire Mémoire vers registre PC instruction [20:16] Lecture adresse Mém. instr. instruction (31:0) Zéro Source ALU ALU Mémoire données Adresse M u x M u x Résultat 1 M u x Données lues instruction [15:11] 1 1 Données à écrire Destination registre Lecture mémoire Contrôle ALU Ext. bit de signe 32 instruction [15:0] Lignes de contrôle 2 instruction [5:0] ALUOp
64
Implémentation d'une unité de contrôle
effet des lignes de contrôle
65
Implémentation d'une unité de contrôle
x Add RegDest Add Contrôle Branch MemRead Décal. gauche 2 bits 4 MemWrite Résultat ALUOp 1 instruction [31:26] MemtoReg ALUSrc Source PC RegWrite instruction [25:21] Registres Registre lecture #1 lecture #2 écriture Données PC instruction [20:16] Lecture adresse Mém. instr. instruction (31:0) Zéro ALU Mémoire données Adresse M u x Résultat 1 M u x M u x Données lues instruction [15:11] 1 1 Données à écrire Contrôle ALU Ext. bit de signe 16 32 instruction [15:0] instruction [5:0]
66
Implémentation d'une unité de contrôle
x Add RegDest Add Contrôle Branch MemRead Décal. gauche 2 bits 4 MemWrite Résultat ALUOp 1 instruction [31:26] MemtoReg ALUSrc Source PC RegWrite instruction [25:21] Registres Registre lecture #1 lecture #2 écriture Données PC instruction [20:16] Lecture adresse Mém. instr. instruction (31:0) Zéro ALU Mémoire données Adresse 1 M u x M u x Résultat M u x Données lues instruction [15:11] 1 1 Données à écrire Contrôle ALU Ext. bit de signe 16 32 instruction [15:0] add $t1,$t2,$t3 instruction [5:0]
67
Implémentation d'une unité de contrôle
x Add RegDest Add Contrôle Branch MemRead Décal. gauche 2 bits 4 MemWrite Résultat ALUOp 1 instruction [31:26] MemtoReg ALUSrc Source PC RegWrite PC chargé instruction [25:21] Registres Registre lecture #1 lecture #2 écriture Données PC instruction [20:16] Lecture adresse Mém. instr. instruction (31:0) Zéro ALU Mémoire données Adresse 1 M u x M u x Résultat M u x Données lues instruction [15:11] 1 1 Données à écrire Contrôle ALU Ext. bit de signe 16 32 instruction [15:0] add $t1,$t2,$t3 instruction [5:0]
68
Implémentation d'une unité de contrôle
PC incrémenté de 4 M u x Add RegDest Add Contrôle Branch MemRead Décal. gauche 2 bits 4 MemWrite Résultat ALUOp 1 instruction [31:26] MemtoReg ALUSrc Source PC RegWrite instruction [25:21] Registres Registre lecture #1 lecture #2 écriture Données PC instruction [20:16] Lecture adresse Mém. instr. instruction (31:0) Zéro ALU Mémoire données Adresse 1 M u x M u x Résultat M u x Données lues instruction [15:11] 1 1 Données à écrire Contrôle ALU Ext. bit de signe 16 32 instruction [15:0] add $t1,$t2,$t3 instruction [5:0]
69
Implémentation d'une unité de contrôle
x Add RegDest Add Contrôle Branch MemRead Décal. gauche 2 bits 4 MemWrite Résultat ALUOp 1 instruction [31:26] MemtoReg ALUSrc Source PC RegWrite $t3 $t2 et $t3 chargés dans l'ALU $t2 instruction [25:21] Registres Registre lecture #1 lecture #2 écriture Données PC instruction [20:16] Lecture adresse Mém. instr. instruction (31:0) Zéro ALU Mémoire données Adresse 1 M u x M u x Résultat M u x Données lues instruction [15:11] 1 1 Données à écrire Contrôle ALU Ext. bit de signe 16 32 instruction [15:0] add $t1,$t2,$t3 instruction [5:0]
70
Implémentation d'une unité de contrôle
x Add RegDest Add Contrôle Branch MemRead Décal. gauche 2 bits 4 MemWrite Résultat ALUOp 1 instruction [31:26] MemtoReg ALUSrc Source PC RegWrite l'ALU fait l'addition instruction [25:21] Registres Registre lecture #1 lecture #2 écriture Données PC instruction [20:16] Lecture adresse Mém. instr. instruction (31:0) Zéro ALU Mémoire données Adresse 1 M u x M u x Résultat M u x Données lues instruction [15:11] 1 1 Données à écrire Contrôle ALU Ext. bit de signe 16 32 instruction [15:0] add $t1,$t2,$t3 instruction [5:0]
71
Implémentation d'une unité de contrôle
x Add RegDest Add Contrôle Branch MemRead Décal. gauche 2 bits 4 MemWrite Résultat ALUOp 1 instruction [31:26] MemtoReg ALUSrc Source PC RegWrite instruction [25:21] Registres Registre lecture #1 lecture #2 écriture Données PC instruction [20:16] Lecture adresse Mém. instr. instruction (31:0) Zéro ALU Mémoire données Adresse 1 M u x M u x Résultat M u x Données lues instruction [15:11] 1 1 Données à écrire résultat chargé dans $t1 Contrôle ALU $t1 Ext. bit de signe 16 32 instruction [15:0] add $t1,$t2,$t3 instruction [5:0]
72
Implémentation d'une unité de contrôle
x Add RegDest Add Contrôle Branch MemRead Décal. gauche 2 bits 4 MemWrite Résultat ALUOp 1 instruction [31:26] MemtoReg ALUSrc Source PC RegWrite pas d'accès mémoire instruction [25:21] Registres Registre lecture #1 lecture #2 écriture Données PC instruction [20:16] Lecture adresse Mém. instr. instruction (31:0) Zéro ALU Mémoire données Adresse 1 M u x M u x Résultat M u x Données lues instruction [15:11] 1 1 Données à écrire Contrôle ALU Ext. bit de signe 16 32 instruction [15:0] add $t1,$t2,$t3 instruction [5:0]
73
Implémentation d'une unité de contrôle
x Add RegDest Add Contrôle Branch MemRead Décal. gauche 2 bits 4 MemWrite Résultat ALUOp 1 instruction [31:26] MemtoReg ALUSrc Source PC RegWrite instruction [25:21] Registres Registre lecture #1 lecture #2 écriture Données PC instruction [20:16] Lecture adresse Mém. instr. instruction (31:0) Zéro ALU Mémoire données Adresse M u x Résultat 1 M u x M u x Données lues instruction [15:11] 1 1 Données à écrire Contrôle ALU Ext. bit de signe 16 32 instruction [15:0] instruction [5:0]
74
Implémentation d'une unité de contrôle
x Add RegDest Add Contrôle Branch MemRead Décal. gauche 2 bits 4 MemWrite Résultat ALUOp 1 instruction [31:26] MemtoReg ALUSrc Source PC RegWrite instruction [25:21] Registres Registre lecture #1 lecture #2 écriture Données PC instruction [20:16] Lecture adresse Mém. instr. instruction (31:0) Zéro ALU Mémoire données Adresse 1 M u x M u x Résultat M u x Données lues instruction [15:11] 1 1 Données à écrire Contrôle ALU Ext. bit de signe 16 32 instruction [15:0] lw $t1,offset($t2) instruction [5:0]
75
Implémentation d'une unité de contrôle
x Add RegDest Add Contrôle Branch MemRead Décal. gauche 2 bits 4 MemWrite Résultat ALUOp 1 instruction [31:26] MemtoReg ALUSrc Source PC RegWrite PC chargé instruction [25:21] Registres Registre lecture #1 lecture #2 écriture Données PC instruction [20:16] Lecture adresse Mém. instr. instruction (31:0) Zéro ALU Mémoire données Adresse 1 M u x M u x Résultat M u x Données lues instruction [15:11] 1 1 Données à écrire Contrôle ALU Ext. bit de signe 16 32 instruction [15:0] lw $t1,offset($t2) instruction [5:0]
76
Implémentation d'une unité de contrôle
PC incrémenté de 4 M u x Add RegDest Add Contrôle Branch MemRead Décal. gauche 2 bits 4 MemWrite Résultat ALUOp 1 instruction [31:26] MemtoReg ALUSrc Source PC RegWrite instruction [25:21] Registres Registre lecture #1 lecture #2 écriture Données PC instruction [20:16] Lecture adresse Mém. instr. instruction (31:0) Zéro ALU Mémoire données Adresse 1 M u x M u x Résultat M u x Données lues instruction [15:11] 1 1 Données à écrire Contrôle ALU Ext. bit de signe 16 32 instruction [15:0] lw $t1,offset($t2) instruction [5:0]
77
Implémentation d'une unité de contrôle
x Add RegDest Add Contrôle Branch MemRead Décal. gauche 2 bits 4 MemWrite Résultat ALUOp 1 instruction [31:26] MemtoReg ALUSrc Source PC RegWrite $t2 lu et chargé dans l'ALU offset étendu à 32 bits et chargé dans l'ALU $t2 instruction [25:21] Registres Registre lecture #1 lecture #2 écriture Données PC instruction [20:16] Lecture adresse Mém. instr. instruction (31:0) Zéro ALU Mémoire données Adresse M u x M u x Résultat 1 M u x Données lues instruction [15:11] 1 1 Données à écrire Contrôle ALU Ext. bit de signe 16 32 instruction [15:0] lw $t1,offset($t2) instruction [5:0]
78
Implémentation d'une unité de contrôle
x Add RegDest Add Contrôle Branch MemRead Décal. gauche 2 bits 4 MemWrite Résultat ALUOp 1 instruction [31:26] MemtoReg ALUSrc Source PC RegWrite offset + $t2 est l'adresse mémoire instruction [25:21] Registres Registre lecture #1 lecture #2 écriture Données PC instruction [20:16] Lecture adresse Mém. instr. instruction (31:0) Zéro ALU Mémoire données Adresse 1 M u x M u x Résultat M u x Données lues instruction [15:11] 1 1 Données à écrire Contrôle ALU Ext. bit de signe 16 32 instruction [15:0] lw $t1,offset($t2) instruction [5:0]
79
Implémentation d'une unité de contrôle
x Add RegDest Add Contrôle Branch MemRead Décal. gauche 2 bits 4 MemWrite Résultat ALUOp 1 instruction [31:26] MemtoReg ALUSrc Source PC RegWrite instruction [25:21] Registres Registre lecture #1 lecture #2 écriture Données PC instruction [20:16] Lecture adresse Mém. instr. instruction (31:0) Zéro ALU Mémoire données Adresse 1 M u x M u x Résultat M u x Données lues instruction [15:11] 1 1 mémoire lue Données à écrire Contrôle ALU Ext. bit de signe 16 32 instruction [15:0] lw $t1,offset($t2) instruction [5:0]
80
Implémentation d'une unité de contrôle
x Add RegDest Add Contrôle Branch MemRead Décal. gauche 2 bits 4 MemWrite Résultat ALUOp 1 instruction [31:26] MemtoReg ALUSrc Source PC RegWrite $t1 le contenu est stocké dans $t1 instruction [25:21] Registres Registre lecture #1 lecture #2 écriture Données PC instruction [20:16] Lecture adresse Mém. instr. instruction (31:0) Zéro ALU Mémoire données Adresse M u x M u x Résultat 1 M u x Données lues instruction [15:11] 1 1 Données à écrire Contrôle ALU Ext. bit de signe 16 32 instruction [15:0] lw $t1,offset($t2) instruction [5:0]
81
Implémentation d'une unité de contrôle
x Add RegDest Add Contrôle Branch MemRead Décal. gauche 2 bits 4 MemWrite Résultat ALUOp 1 instruction [31:26] MemtoReg ALUSrc Source PC RegWrite instruction [25:21] Registres Registre lecture #1 lecture #2 écriture Données PC instruction [20:16] Lecture adresse Mém. instr. instruction (31:0) Zéro ALU Mémoire données Adresse M u x Résultat 1 M u x M u x Données lues instruction [15:11] 1 1 Données à écrire Contrôle ALU Ext. bit de signe 16 32 instruction [15:0] instruction [5:0]
82
Implémentation d'une unité de contrôle
x Add RegDest Add Contrôle Branch MemRead Décal. gauche 2 bits 4 MemWrite Résultat ALUOp 1 instruction [31:26] MemtoReg ALUSrc Source PC RegWrite PC chargé instruction [25:21] Registres Registre lecture #1 lecture #2 écriture Données PC instruction [20:16] Lecture adresse Mém. instr. instruction (31:0) Zéro ALU Mémoire données Adresse 1 M u x M u x Résultat M u x Données lues instruction [15:11] 1 1 Données à écrire Contrôle ALU Ext. bit de signe 16 32 instruction [15:0] beq $t1,$t2,offset instruction [5:0]
83
Implémentation d'une unité de contrôle
PC incrémenté de 4 M u x Add RegDest Add Contrôle Branch MemRead Décal. gauche 2 bits 4 MemWrite Résultat ALUOp 1 instruction [31:26] MemtoReg ALUSrc Source PC RegWrite instruction [25:21] Registres Registre lecture #1 lecture #2 écriture Données PC instruction [20:16] Lecture adresse Mém. instr. instruction (31:0) Zéro ALU Mémoire données Adresse 1 M u x M u x Résultat M u x Données lues instruction [15:11] 1 1 Données à écrire Contrôle ALU Ext. bit de signe 16 32 instruction [15:0] beq $t1,$t2,offset instruction [5:0]
84
Implémentation d'une unité de contrôle
calcul de l'adresse en cas de branchement M u x Add RegDest Add Contrôle Branch MemRead Décal. gauche 2 bits 4 MemWrite Résultat ALUOp 1 instruction [31:26] MemtoReg ALUSrc Source PC RegWrite instruction [25:21] Registres Registre lecture #1 lecture #2 écriture Données PC instruction [20:16] Lecture adresse Mém. instr. instruction (31:0) Zéro ALU Mémoire données Adresse 1 M u x M u x Résultat M u x Données lues instruction [15:11] 1 1 Données à écrire Contrôle ALU Ext. bit de signe 16 32 instruction [15:0] beq $t1,$t2,offset instruction [5:0]
85
Implémentation d'une unité de contrôle
x Add RegDest Add Contrôle Branch MemRead Décal. gauche 2 bits 4 MemWrite Résultat ALUOp 1 instruction [31:26] MemtoReg ALUSrc Source PC RegWrite $t1 et $t2 chargés instruction [25:21] Registres Registre lecture #1 lecture #2 écriture Données PC instruction [20:16] Lecture adresse Mém. instr. instruction (31:0) Zéro ALU Mémoire données Adresse 1 M u x M u x Résultat M u x Données lues instruction [15:11] 1 1 Données à écrire Contrôle ALU Ext. bit de signe 16 32 instruction [15:0] beq $t1,$t2,offset instruction [5:0]
86
Implémentation d'une unité de contrôle
x Add RegDest Add Contrôle Branch MemRead Décal. gauche 2 bits 4 MemWrite Résultat ALUOp 1 instruction [31:26] MemtoReg ALUSrc Source PC RegWrite soustraction de $t1 et $t2 instruction [25:21] Registres Registre lecture #1 lecture #2 écriture Données PC instruction [20:16] Lecture adresse Mém. instr. instruction (31:0) Zéro ALU Mémoire données Adresse 1 M u x M u x Résultat M u x Données lues instruction [15:11] 1 1 Données à écrire Contrôle ALU Ext. bit de signe 16 32 instruction [15:0] beq $t1,$t2,offset instruction [5:0]
87
Implémentation d'une unité de contrôle
x Add RegDest Add Contrôle Branch MemRead Décal. gauche 2 bits 4 MemWrite Résultat ALUOp 1 instruction [31:26] MemtoReg ALUSrc Source PC RegWrite instruction [25:21] Registres Registre lecture #1 lecture #2 écriture Données PC instruction [20:16] Lecture adresse Mém. instr. instruction (31:0) Zéro la source du PC dépend du zéro du résultat ALU Mémoire données Adresse 1 M u x M u x Résultat M u x Données lues instruction [15:11] 1 1 Données à écrire Contrôle ALU Ext. bit de signe 16 32 instruction [15:0] beq $t1,$t2,offset instruction [5:0]
88
Implémentation d'une unité de contrôle
x Add RegDest Add Contrôle Branch MemRead Décal. gauche 2 bits 4 MemWrite Résultat ALUOp 1 instruction [31:26] MemtoReg ALUSrc Source PC RegWrite pas d'accès mémoire instruction [25:21] Registres Registre lecture #1 lecture #2 écriture Données PC instruction [20:16] Lecture adresse Mém. instr. instruction (31:0) Zéro ALU Mémoire données Adresse 1 M u x M u x Résultat M u x Données lues instruction [15:11] 1 1 Données à écrire Contrôle ALU Ext. bit de signe 16 32 instruction [15:0] beq $t1,$t2,offset instruction [5:0]
89
Implémentation d'une unité de contrôle
x Add RegDest Add Contrôle Branch MemRead Décal. gauche 2 bits 4 MemWrite Résultat ALUOp 1 instruction [31:26] MemtoReg ALUSrc Source PC RegWrite instruction [25:21] Registres Registre lecture #1 lecture #2 écriture Données PC instruction [20:16] Lecture adresse Mém. instr. instruction (31:0) Zéro ALU Mémoire données Adresse 1 M u x M u x Résultat M u x Données lues instruction [15:11] 1 1 Données à écrire Contrôle ALU Ext. bit de signe 16 32 instruction [15:0] j address instruction [5:0]
90
Implémentation d'une unité de contrôle
x Add en TD : jump + combinatoire RegDest Add Contrôle Branch MemRead Décal. gauche 2 bits 4 MemWrite Résultat ALUOp 1 instruction [31:26] MemtoReg ALUSrc Source PC RegWrite instruction [25:21] Registres Registre lecture #1 lecture #2 écriture Données PC instruction [20:16] Lecture adresse Mém. instr. instruction (31:0) Zéro ALU Mémoire données Adresse 1 M u x M u x Résultat M u x Données lues instruction [15:11] 1 1 Données à écrire Contrôle ALU Ext. bit de signe 16 32 instruction [15:0] j address instruction [5:0]
91
plan du cours réalisation d'une ALU effectuant les opérations de base arithmétiques et logiques CPU en mode cycle unique réalisation d'un chemin de données réalisation une unité de contrôle CPU en mode multicycle chemin de données contrôle gestion des interruptions CPU en mode pipeline gestion des aléas Hiérarchie des mémoires. Caches
92
implémentation multicycle
l'exécution d'une instruction par l'unité de traitement que l'on vient de décrire demande un seul cycle d'horloge l'exécution d'opérations plus complexes (par exemple une multiplication) demanderait un chemin de données et un contrôle beaucoup plus complexes la fréquence de l'horloge doit être adaptée à l'instruction la plus longue (qui n'est pas généralement la plus fréquemment utilisée) pour optimiser la vitesse de la CPU, on peut décomposer des opérations plus complexes en une série d'opérations élémentaires une autre possibilité est la technique du « pipelining » étudié plus tard...
93
implémentation multicycle
le chemin de données devra avoir une organisation différente et posséder des registres supplémentaires pour stocker des résultats intermédiaires Instruction register PC Address Data A Instruction or data Register # Registers ALU ALUOut Memory Register # Memory data register B Data Register #
94
implémentation multicycle
le chemin de données devra avoir une organisation différente et posséder des registres supplémentaires pour stocker des résultats intermédiaires une seule ALU (au lieu d'une ALU et de 2 additionneurs Instruction register Address Data PC A Instruction or data Register # Registers ALU ALUOut Memory Register # Memory data register B Data Register #
95
implémentation multicycle
le chemin de données devra avoir une organisation différente et posséder des registres supplémentaires pour stocker des résultats intermédiaires une seule unité de mémoire pour les instructions et les données Instruction register Address Data PC A Instruction or data Register # Registers ALU ALUOut Memory Register # Memory data register B Data Register #
96
implémentation multicycle
le chemin de données devra avoir une organisation différente et posséder des registres supplémentaires pour stocker des résultats intermédiaires plusieurs registres de stockage intermédiaire Instruction register PC Address Data A Instruction or data Register # Registers ALU ALUOut Memory Register # Memory data register B Data Register #
97
implémentation multicycle
registre données A ou PC nécessité de multiplexeurs supplémentaires une seule mémoire une seule ALU M u x 1 PC Instruction [25-21] Registre instructions [20-16] [15-0] Registres Registre lecture #1 lecture #2 écriture Données M u x 1 adresse Mémoire données écriture ALU résultat zéro A M u x 1 ALUOut [15-11] B 3 M u x 1 2 4 choix de l'origine de l'adresse M u x 1 registre données B ou offset ou incrémentation du PC de 4 ou offset Registre données mémoire Ext. bit de signe Décal. gauche 2 bits 16 32
98
implémentation multicycle
PCWriteCond PCSource PCWrite Outputs ALUOp IorD ALUSrcB MemRead Control ALUSrcA MemWrite MemtoReg RegWrite Op [5-0] IRWrite RegDest M u x 1 2 Jump address [31-0] 26 Shift left 2 28 Instruction [25-0] Instruction [31-26] PC M u x 1 PC [31-28] Instruction [25-21] Read register 1 M u x 1 Address Read data 1 A Memory Instruction [20-16] Read register 2 Zero M u x 1 MemData Instruction [15-0] Registers ALU ALU result ALUOut Write register Instruction [15-11] Read data 2 Write data B M u x 3 2 1 Instruction register 4 Write data M u x 1 Instruction [15-0] Memory data register 16 32 Sign extend Shift left 2 ALU Control Instruction [5-0]
99
plan du cours réalisation d'une ALU effectuant les opérations de base arithmétiques et logiques CPU en mode cycle unique réalisation d'un chemin de données réalisation une unité de contrôle CPU en mode multicycle chemin de données contrôle gestion des interruptions CPU en mode pipeline gestion des aléas Hiérarchie des mémoires. Caches
100
implémentation multicycle
découpage de chaque instructions en une série de pas un pas est exécuté à chaque top de l'horloge un pas peut être constitué de plusieurs opérations exécutées en parallèle à l’intérieur d’un pas, certaines opérations pourront se révéler inutiles, mais cela n’aura pas rallongé le temps d’exécution on n'effectue pas un accès mémoire et un accès registre dans le même pas en général aller chercher l'instruction décoder l'instruction exécuter l'instruction terminer l'exécution de l'instruction
101
implémentation multicycle
PCWriteCond PCSource PCWrite Outputs ALUOp IorD ALUSrcB MemRead Control ALUSrcA MemWrite MemtoReg RegWrite Op [5-0] IRWrite RegDest M u x 1 2 Jump address [31-0] 26 Shift left 2 28 Instruction [25-0] Instruction [31-26] PC M u x 1 PC [31-28] Instruction [25-21] Read register 1 M u x 1 Address Read data 1 A Memory Instruction [20-16] Read register 2 Zero M u x 1 MemData Instruction [15-0] Registers ALU ALU result ALUOut Write register Instruction [15-11] Read data 2 Write data B M u x 3 2 1 Instruction register 4 Write data M u x 1 Instruction [15-0] Memory data register 16 32 Sign extend Shift left 2 ALU Control Instruction [5-0]
102
implémentation multicycle
PCWriteCond PCSource PCWrite Outputs ALUOp IorD ALUSrcB MemRead Control ALUSrcA MemWrite MemtoReg RegWrite Op [5-0] IRWrite RegDest M u x 1 2 Jump address [31-0] 26 Shift left 2 28 Instruction [25-0] Instruction [31-26] PC M u x 1 PC [31-28] Instruction [25-21] Read register 1 M u x 1 Address Read data 1 A Memory Instruction [20-16] Read register 2 Zero M u x 1 MemData ALU Instruction [15-0] Registers ALU result ALUOut Write register Instruction [15-11] Read data 2 Write data B M u x 3 2 1 Instruction register 4 Write data M u x 1 Instruction [15-0] Memory data register 16 32 Sign extend Shift left 2 ALU Control Instruction [5-0] 1. aller chercher l'instruction
103
implémentation multicycle
PCWriteCond PCSource PCWrite Outputs ALUOp IorD ALUSrcB 1 MemRead Control ALUSrcA MemWrite MemtoReg RegWrite Op [5-0] IRWrite RegDest M u x 1 2 1 Jump address [31-0] 26 Shift left 2 28 Instruction [25-0] Instruction [31-26] PC M u x 1 PC [31-28] Instruction [25-21] Read register 1 M u x 1 Address Read data 1 A Memory Instruction [20-16] Read register 2 Zero M u x 1 MemData Instruction [15-0] Registers ALU ALU result ALUOut Write register Instruction [15-11] Read data 2 Write data B M u x 3 2 1 Instruction register 4 Write data M u x 1 Instruction [15-0] IR <= Memory[PC] Memory data register 16 32 Sign extend Shift left 2 ALU Control Instruction [5-0] 1. aller chercher l'instruction
104
implémentation multicycle
PCWriteCond PCSource PCWrite Outputs ALUOp IorD ALUSrcB 1 MemRead Control ALUSrcA MemWrite MemtoReg RegWrite Op [5-0] IRWrite RegDest M u x 1 2 1 Jump address [31-0] 26 Shift left 2 28 Instruction [25-0] Instruction [31-26] PC M u x 1 PC [31-28] Instruction [25-21] Read register 1 M u x 1 dérivé du langage Verilog pour : charger dans le registre IR le contenu de la mémoire à l'adresse « PC » Address Read data 1 A Memory Instruction [20-16] Read register 2 Zero M u x 1 MemData Registers ALU Instruction [15-0] ALU result ALUOut Write register Instruction [15-11] Read data 2 Write data B M u x 3 2 1 Instruction register 4 Write data M u x 1 Instruction [15-0] IR <= Memory[PC] Memory data register 16 32 Sign extend Shift left 2 ALU Control Instruction [5-0] 1. aller chercher l'instruction
105
implémentation multicycle
PCWriteCond PCSource PCWrite Outputs ALUOp 00 IorD ALUSrcB 01 1 MemRead Control ALUSrcA MemWrite MemtoReg RegWrite Op [5-0] IRWrite RegDest M u x 1 2 1 Jump address [31-0] 26 Shift left 2 28 Instruction [25-0] Instruction [31-26] PC M u x 1 PC [31-28] Instruction [25-21] Read register 1 M u x 1 Address Read data 1 A Memory Instruction [20-16] Read register 2 Zero M u x 1 MemData Instruction [15-0] Registers ALU ALU result ALUOut Instruction [15-11] Write register Read data 2 Write data B M u x 3 2 1 Instruction register 4 Write data M u x 1 0010 Instruction [15-0] IR <= Memory[PC] PC <= PC+4 Memory data register 16 32 Sign extend Shift left 2 ALU Control Instruction [5-0] 1. aller chercher l'instruction
106
implémentation multicycle
PCWriteCond PCSource PCWrite Outputs ALUOp IorD ALUSrcB MemRead Control ALUSrcA MemWrite MemtoReg RegWrite Op [5-0] IRWrite RegDest M u x 1 2 Jump address [31-0] 26 Shift left 2 28 Instruction [25-0] Instruction [31-26] PC M u x 1 PC [31-28] Instruction [25-21] Read register 1 M u x 1 Address Read data 1 A Memory Instruction [20-16] Read register 2 Zero M u x 1 MemData ALU Instruction [15-0] Registers ALU result ALUOut Write register Instruction [15-11] Read data 2 Write data B M u x 3 2 1 Instruction register 4 Write data M u x 1 Instruction [15-0] Memory data register 16 32 Sign extend Shift left 2 ALU Control Instruction [5-0] 2. décoder l'instruction
107
implémentation multicycle
A <= Reg[IR[25:21]] PCWriteCond PCSource PCWrite Outputs ALUOp IorD ALUSrcB MemRead Control ALUSrcA MemWrite MemtoReg RegWrite Op [5-0] IRWrite RegDest M u x 1 2 Jump address [31-0] 26 Shift left 2 28 Instruction [25-0] Instruction [31-26] PC M u x 1 PC [31-28] Instruction [25-21] Read register 1 M u x 1 Address Read data 1 A Memory Instruction [20-16] Read register 2 Zero M u x 1 MemData ALU Instruction [15-0] Registers ALU result ALUOut Write register Instruction [15-11] Read data 2 Write data B M u x 3 2 1 Instruction register 4 Write data M u x 1 Instruction [15-0] Memory data register 16 32 Sign extend Shift left 2 ALU Control Instruction [5-0] 2. décoder l'instruction
108
implémentation multicycle
A <= Reg[IR[25:21]] B <= Reg[IR[20:16]] PCWriteCond PCSource PCWrite Outputs ALUOp IorD ALUSrcB MemRead Control ALUSrcA MemWrite MemtoReg RegWrite Op [5-0] IRWrite RegDest M u x 1 2 Jump address [31-0] 26 Shift left 2 28 Instruction [25-0] Instruction [31-26] PC M u x 1 PC [31-28] Instruction [25-21] Read register 1 M u x 1 Address Read data 1 A Memory Instruction [20-16] Read register 2 Zero M u x 1 MemData ALU Instruction [15-0] Registers ALU result ALUOut Write register Instruction [15-11] Read data 2 Write data B M u x 3 2 1 Instruction register 4 Write data M u x 1 Instruction [15-0] Memory data register 16 32 Sign extend Shift left 2 ALU Control Instruction [5-0] 2. décoder l'instruction
109
implémentation multicycle
A <= Reg[IR[25:21]] B <= Reg[IR[20:16]] AluOut <= PC+(sign-extend[IR[15:0]>>2) PCWriteCond PCSource PCWrite Outputs ALUOp 00 IorD ALUSrcB 11 MemRead Control ALUSrcA MemWrite MemtoReg RegWrite Op [5-0] IRWrite RegDest M u x 1 2 Jump address [31-0] 26 Shift left 2 28 Instruction [25-0] Instruction [31-26] PC M u x 1 PC [31-28] Instruction [25-21] Read register 1 M u x 1 Address Read data 1 A Memory Instruction [20-16] Read register 2 Zero M u x 1 MemData ALU Instruction [15-0] Registers ALU result ALUOut Write register Instruction [15-11] Read data 2 Write data B M u x 3 2 1 Instruction register 4 Write data M u x 1 0010 Instruction [15-0] Memory data register 16 32 Sign extend Shift left 2 ALU Control Instruction [5-0] 2. décoder l'instruction
110
implémentation multicycle
3. exécution, calcul d'une adresse mémoire ou branchement PCWriteCond PCSource PCWrite Outputs ALUOp IorD ALUSrcB MemRead Control ALUSrcA MemWrite MemtoReg RegWrite Op [5-0] IRWrite RegDest M u x 1 2 Jump address [31-0] 26 Shift left 2 28 Instruction [25-0] Instruction [31-26] PC M u x 1 PC [31-28] Instruction [25-21] Read register 1 M u x 1 Address Read data 1 A Memory Instruction [20-16] Read register 2 Zero M u x 1 MemData Instruction [15-0] Registers ALU ALU result ALUOut Write register Instruction [15-11] Read data 2 Write data B M u x 3 2 1 Instruction register 4 Write data M u x 1 Instruction [15-0] Memory data register 16 32 Sign extend Shift left 2 ALU Control Instruction [5-0]
111
implémentation multicycle
3. exécution, calcul d'une adresse mémoire ou branchement PCWriteCond PCSource PCWrite Outputs ALUOp va dépendre de la classe de l'instruction IorD ALUSrcB MemRead Control ALUSrcA MemWrite MemtoReg RegWrite Op [5-0] IRWrite RegDest M u x 1 2 Jump address [31-0] 26 Shift left 2 28 Instruction [25-0] Instruction [31-26] PC M u x 1 PC [31-28] Instruction [25-21] Read register 1 M u x 1 Address Read data 1 A Memory Instruction [20-16] Read register 2 Zero M u x 1 MemData Instruction [15-0] Registers ALU ALU result ALUOut Write register Instruction [15-11] Read data 2 Write data B M u x 3 2 1 Instruction register 4 Write data M u x 1 Instruction [15-0] Memory data register 16 32 Sign extend Shift left 2 ALU Control Instruction [5-0]
112
implémentation multicycle
accès mémoire PCWriteCond PCSource PCWrite Outputs ALUOp IorD ALUSrcB MemRead Control ALUSrcA MemWrite MemtoReg RegWrite Op [5-0] IRWrite RegDest M u x 1 2 Jump address [31-0] 26 Shift left 2 28 Instruction [25-0] Instruction [31-26] PC M u x 1 PC [31-28] Instruction [25-21] Read register 1 M u x 1 Address Read data 1 A Memory Instruction [20-16] Read register 2 Zero M u x 1 MemData Instruction [15-0] Registers ALU ALU result ALUOut Write register Instruction [15-11] Read data 2 Write data B M u x 3 2 1 Instruction register 4 Write data M u x 1 Instruction [15-0] Memory data register 16 32 Sign extend Shift left 2 ALU Control Instruction [5-0]
113
implémentation multicycle
accès mémoire AluOut <= A+sign-extend(IR[15:0] PCWriteCond PCSource PCWrite Outputs ALUOp 00 IorD ALUSrcB 10 MemRead Control ALUSrcA 1 MemWrite MemtoReg RegWrite Op [5-0] IRWrite RegDest M u x 1 2 Jump address [31-0] 26 Shift left 2 28 Instruction [25-0] Instruction [31-26] PC M u x 1 PC [31-28] Instruction [25-21] Read register 1 M u x 1 Address Read data 1 A Memory Instruction [20-16] Read register 2 Zero M u x 1 MemData ALU Instruction [15-0] Registers ALU result ALUOut Write register Instruction [15-11] Read data 2 Write data B M u x 3 2 1 Instruction register 4 Write data M u x 1 0010 Instruction [15-0] Memory data register 16 32 Sign extend Shift left 2 ALU Control Instruction [5-0]
114
implémentation multicycle
instructions de type R PCWriteCond PCSource PCWrite Outputs ALUOp IorD ALUSrcB MemRead Control ALUSrcA MemWrite MemtoReg RegWrite Op [5-0] IRWrite RegDest M u x 1 2 Jump address [31-0] 26 Shift left 2 28 Instruction [25-0] Instruction [31-26] PC M u x 1 PC [31-28] Instruction [25-21] Read register 1 M u x 1 Address Read data 1 A Memory Instruction [20-16] Read register 2 Zero M u x 1 MemData ALU Instruction [15-0] Registers ALU result ALUOut Write register Instruction [15-11] Read data 2 Write data B M u x 3 2 1 Instruction register 4 Write data M u x 1 Instruction [15-0] Memory data register 16 32 Sign extend Shift left 2 ALU Control Instruction [5-0]
115
implémentation multicycle
instructions de type R PCWriteCond PCSource PCWrite ALUOut <= A op B Outputs ALUOp 10 IorD ALUSrcB 00 MemRead Control ALUSrcA 1 MemWrite MemtoReg RegWrite Op [5-0] IRWrite RegDest M u x 1 2 Jump address [31-0] 26 Shift left 2 28 Instruction [25-0] Instruction [31-26] PC M u x 1 PC [31-28] Instruction [25-21] Read register 1 M u x 1 Address Read data 1 A Memory Instruction [20-16] Read register 2 Zero M u x 1 MemData Instruction [15-0] Registers ALU ALU result ALUOut Write register Instruction [15-11] Read data 2 Write data B M u x 3 2 1 Instruction register 4 Write data M u x 1 xxxx Instruction [15-0] Memory data register 16 32 Sign extend Shift left 2 ALU Control Instruction [5-0]
116
implémentation multicycle
PCWriteCond PCSource PCWrite Outputs ALUOp IorD ALUSrcB MemRead Control ALUSrcA MemWrite MemtoReg RegWrite Op [5-0] IRWrite RegDest M u x 1 2 Jump address [31-0] 26 Shift left 2 28 Instruction [25-0] Instruction [31-26] PC M u x 1 PC [31-28] Instruction [25-21] Read register 1 M u x 1 Address Read data 1 A Memory Instruction [20-16] Read register 2 Zero M u x 1 MemData Registers ALU Instruction [15-0] ALU result ALUOut Write register Instruction [15-11] Read data 2 Write data B M u x 3 2 1 Instruction register 4 Write data M u x 1 Instruction [15-0] Memory data register 16 32 branchements Sign extend Shift left 2 ALU Control Instruction [5-0]
117
implémentation multicycle
Zero 1 PCWriteCond PCSource 01 PCWrite Outputs ALUOp 01 IorD ALUSrcB 00 MemRead Control ALUSrcA 1 MemWrite MemtoReg RegWrite Op [5-0] IRWrite RegDest M u x 1 2 Jump address [31-0] 26 Shift left 2 28 Instruction [25-0] Instruction [31-26] PC M u x 1 PC [31-28] Instruction [25-21] Read register 1 M u x 1 Address Read data 1 A Memory Instruction [20-16] Read register 2 Zero M u x 1 MemData Registers ALU Instruction [15-0] ALU result ALUOut Write register Instruction [15-11] Read data 2 Write data B M u x 3 2 1 Instruction register 4 Write data M u x 1 0110 Instruction [15-0] Memory data register 16 32 branchements Sign extend Shift left 2 ALU Control Instruction [5-0] if (A==B) PC <= ALUOut
118
implémentation multicycle
PCWriteCond PCSource 1 PCWrite Outputs ALUOp IorD ALUSrcB MemRead Control ALUSrcA MemWrite MemtoReg RegWrite Op [5-0] IRWrite RegDest M u x 1 2 Jump address [31-0] 26 Shift left 2 28 Instruction [25-0] Instruction [31-26] PC M u x 1 PC [31-28] Instruction [25-21] Read register 1 M u x 1 Address Read data 1 A Memory Instruction [20-16] Read register 2 Zero M u x 1 MemData Registers ALU Instruction [15-0] ALU result ALUOut Write register Instruction [15-11] Read data 2 Write data B M u x 3 2 1 Instruction register 4 Write data M u x 1 Instruction [15-0] Memory data register 16 32 Sign extend Shift left 2 ALU Control Instruction [5-0] sauts non conditionnels
119
implémentation multicycle
PCWriteCond PCSource 10 1 PCWrite Outputs ALUOp IorD ALUSrcB MemRead Control ALUSrcA MemWrite MemtoReg RegWrite Op [5-0] IRWrite RegDest M u x 1 2 Jump address [31-0] 26 Shift left 2 28 Instruction [25-0] Instruction [31-26] PC M u x 1 PC [31-28] Instruction [25-21] Read register 1 M u x 1 Address Read data 1 A Memory Instruction [20-16] Read register 2 Zero M u x 1 MemData ALU Instruction [15-0] Registers ALU result ALUOut Write register Instruction [15-11] Read data 2 Write data B M u x 3 2 1 Instruction register 4 Write data M u x 1 Instruction [15-0] Memory data register 16 32 Sign extend Shift left 2 ALU Control PC <= {PC[31:28], (IR[25:0], 2'b00)} Instruction [5-0] sauts non conditionnels
120
implémentation multicycle
PCWriteCond PCSource PCWrite Outputs ALUOp IorD ALUSrcB MemRead Control ALUSrcA MemWrite MemtoReg RegWrite Op [5-0] IRWrite RegDest M u x 1 2 Jump address [31-0] 26 Shift left 2 28 Instruction [25-0] Instruction [31-26] PC M u x 1 PC [31-28] Instruction [25-21] Read register 1 M u x 1 Address Read data 1 A Memory Instruction [20-16] Read register 2 Zero M u x 1 MemData Registers ALU Instruction [15-0] ALU result ALUOut Write register Instruction [15-11] Read data 2 Write data B M u x 3 2 1 Instruction register 4 Write data M u x 1 Instruction [15-0] Memory data register 16 32 Sign extend Shift left 2 ALU Control Instruction [5-0] 4. terminaison d'un accès mémoire ou d'une instruction de type R
121
implémentation multicycle
accès mémoire load PCWriteCond PCSource PCWrite Outputs ALUOp IorD ALUSrcB MemRead Control ALUSrcA MemWrite MemtoReg RegWrite Op [5-0] IRWrite RegDest M u x 1 2 Jump address [31-0] 26 Shift left 2 28 Instruction [25-0] Instruction [31-26] PC M u x 1 PC [31-28] Instruction [25-21] Read register 1 M u x 1 Address Read data 1 A Memory Instruction [20-16] Read register 2 Zero M u x 1 MemData Instruction [15-0] Registers ALU ALU result ALUOut Write register Instruction [15-11] Read data 2 Write data B M u x 3 2 1 Instruction register 4 Write data M u x 1 Instruction [15-0] Memory data register 16 32 Sign extend Shift left 2 ALU Control Instruction [5-0]
122
implémentation multicycle
accès mémoire load MDR <= Memory[ALUOut] PCWriteCond PCSource PCWrite Outputs ALUOp 1 IorD ALUSrcB MemRead Control ALUSrcA MemWrite MemtoReg RegWrite Op [5-0] IRWrite RegDest M u x 1 2 Jump address [31-0] 26 Shift left 2 28 Instruction [25-0] Instruction [31-26] PC M u x 1 PC [31-28] Instruction [25-21] Read register 1 M u x 1 Address Read data 1 A Memory Instruction [20-16] Read register 2 Zero M u x 1 MemData ALU Instruction [15-0] Registers ALU result ALUOut Write register Instruction [15-11] Read data 2 Write data B M u x 3 2 1 Instruction register 4 Write data M u x 1 Instruction [15-0] Memory data register 16 32 Sign extend Shift left 2 ALU Control Instruction [5-0]
123
implémentation multicycle
accès mémoire store PCWriteCond PCSource PCWrite Outputs ALUOp IorD ALUSrcB MemRead Control ALUSrcA MemWrite MemtoReg RegWrite Op [5-0] IRWrite RegDest M u x 1 2 Jump address [31-0] 26 Shift left 2 28 Instruction [25-0] Instruction [31-26] PC M u x 1 PC [31-28] Instruction [25-21] Read register 1 M u x 1 Address Read data 1 A Memory Instruction [20-16] Read register 2 Zero M u x 1 MemData Instruction [15-0] Registers ALU ALU result ALUOut Write register Instruction [15-11] Read data 2 Write data B M u x 3 2 1 Instruction register 4 Write data M u x 1 Instruction [15-0] Memory data register 16 32 Sign extend Shift left 2 ALU Control Instruction [5-0]
124
implémentation multicycle
accès mémoire store Memory[ALUOut] <= B PCWriteCond PCSource PCWrite Outputs ALUOp 1 IorD ALUSrcB MemRead Control ALUSrcA MemWrite MemtoReg RegWrite Op [5-0] IRWrite RegDest M u x 1 2 Jump address [31-0] 26 Shift left 2 28 Instruction [25-0] Instruction [31-26] PC M u x 1 PC [31-28] Instruction [25-21] Read register 1 M u x 1 Address Read data 1 A Memory Instruction [20-16] Read register 2 Zero M u x 1 MemData ALU Instruction [15-0] Registers ALU result ALUOut Write register Instruction [15-11] Read data 2 Write data B M u x 3 2 1 Instruction register 4 Write data M u x 1 Instruction [15-0] Memory data register 16 32 Sign extend Shift left 2 ALU Control Instruction [5-0]
125
implémentation multicycle
instruction de type R PCWriteCond PCSource PCWrite Outputs ALUOp IorD ALUSrcB MemRead Control ALUSrcA MemWrite MemtoReg RegWrite Op [5-0] IRWrite RegDest M u x 1 2 Jump address [31-0] 26 Shift left 2 28 Instruction [25-0] Instruction [31-26] PC M u x 1 PC [31-28] Instruction [25-21] Read register 1 M u x 1 Address Read data 1 A Memory Instruction [20-16] Read register 2 Zero M u x 1 MemData Instruction [15-0] Registers ALU ALU result ALUOut Write register Instruction [15-11] Read data 2 Write data B M u x 3 2 1 Instruction register 4 Write data M u x 1 Instruction [15-0] Memory data register 16 32 Sign extend Shift left 2 ALU Control Instruction [5-0]
126
implémentation multicycle
instruction de type R Reg[IR[15:11]] <= ALUOut PCWriteCond PCSource PCWrite Outputs ALUOp IorD ALUSrcB MemRead Control ALUSrcA MemWrite MemtoReg RegWrite Op [5-0] IRWrite 1 RegDest M u x 1 2 Jump address [31-0] 26 Shift left 2 28 Instruction [25-0] Instruction [31-26] PC M u x 1 PC [31-28] Instruction [25-21] Read register 1 M u x 1 Address Read data 1 A Memory Instruction [20-16] Read register 2 Zero M u x 1 MemData Instruction [15-0] Registers ALU ALU result ALUOut Write register Instruction [15-11] Read data 2 Write data B M u x 3 2 1 Instruction register 4 Write data M u x 1 Instruction [15-0] Memory data register 16 32 Sign extend Shift left 2 ALU Control Instruction [5-0]
127
implémentation multicycle
5. terminaison d'un accès mémoire load PCWriteCond PCSource PCWrite Outputs ALUOp IorD ALUSrcB MemRead Control ALUSrcA MemWrite MemtoReg RegWrite Op [5-0] IRWrite RegDest M u x 1 2 Jump address [31-0] 26 Shift left 2 28 Instruction [25-0] Instruction [31-26] PC M u x 1 PC [31-28] Instruction [25-21] Read register 1 M u x 1 Address Read data 1 A Memory Instruction [20-16] Read register 2 Zero M u x 1 MemData Instruction [15-0] Registers ALU ALU result ALUOut Write register Instruction [15-11] Read data 2 Write data B M u x 3 2 1 Instruction register 4 Write data M u x 1 Instruction [15-0] Memory data register 16 32 Sign extend Shift left 2 ALU Control Instruction [5-0]
128
implémentation multicycle
5. terminaison d'un accès mémoire load Reg[IR[20:16]] <= MDR PCWriteCond PCSource PCWrite Outputs ALUOp IorD ALUSrcB MemRead Control ALUSrcA MemWrite 1 MemtoReg RegWrite Op [5-0] IRWrite RegDest M u x 1 2 Jump address [31-0] 26 Shift left 2 28 Instruction [25-0] Instruction [31-26] PC M u x 1 PC [31-28] Instruction [25-21] Read register 1 M u x 1 Address Read data 1 A Memory Instruction [20-16] Read register 2 Zero M u x 1 MemData Instruction [15-0] Registers ALU ALU result ALUOut Write register Instruction [15-11] Read data 2 Write data B M u x 3 2 1 Instruction register 4 Write data M u x 1 Instruction [15-0] Memory data register 16 32 Sign extend Shift left 2 ALU Control Instruction [5-0]
129
implémentation multicycle
spécification du contrôle à l'aide de machines à états finis un ensemble d'états des directions pour passer d'un état à un autre tout contrôle non spécifié est réputé à 0 (faux) instructions d'accès mémoire instructions de type R instructions de branchements conditionnels instructions de sauts non conditionnels départ chargement de l'instruction décodage
130
implémentation multicycle
chargement et décodage chargement décodage 1 Op = type R Op = 'BEQ' machine accès mémoire machine type R machine branchements Op = 'J' machine sauts Op = 'LW' ou Op = 'SW'
131
implémentation multicycle (rappel)
PCWriteCond PCSource PCWrite Outputs ALUOp 00 IorD ALUSrcB 01 1 MemRead Control ALUSrcA MemWrite MemtoReg RegWrite Op [5-0] IRWrite RegDest M u x 1 2 1 Jump address [31-0] 26 Shift left 2 28 Instruction [25-0] Instruction [31-26] PC M u x 1 PC [31-28] Instruction [25-21] Read register 1 M u x 1 Address Read data 1 A Memory Instruction [20-16] Read register 2 Zero M u x 1 MemData Instruction [15-0] Registers ALU ALU result ALUOut Instruction [15-11] Write register Read data 2 Write data B M u x 3 2 1 Instruction register 4 Write data M u x 1 0010 Instruction [15-0] IR <= Memory[PC] PC <= PC+4 Memory data register 16 32 Sign extend Shift left 2 ALU Control Instruction [5-0] 1. aller chercher l'instruction
132
implémentation multicycle
chargement et décodage chargement MemRead ALUSrcA = 0 IorD= 0 IRWrite ALUSrcB = 01 ALUOp= 00 PCWrite PCSource = 00 décodage 1 Op = type R Op = 'BEQ' machine accès mémoire machine type R machine branchements Op = 'J' machine sauts Op = 'LW' ou Op = 'SW'
133
implémentation multicycle (rappel)
A <= Reg[IR[25:21]] B <= Reg[IR[20:16]] AluOut <= PC+(sign-extend[IR[15:0]>>2) PCWriteCond PCSource PCWrite Outputs ALUOp 00 IorD ALUSrcB 11 MemRead Control ALUSrcA MemWrite MemtoReg RegWrite Op [5-0] IRWrite RegDest M u x 1 2 Jump address [31-0] 26 Shift left 2 28 Instruction [25-0] Instruction [31-26] PC M u x 1 PC [31-28] Instruction [25-21] Read register 1 M u x 1 Address Read data 1 A Memory Instruction [20-16] Read register 2 Zero M u x 1 MemData ALU Instruction [15-0] Registers ALU result ALUOut Write register Instruction [15-11] Read data 2 Write data B M u x 3 2 1 Instruction register 4 Write data M u x 1 0010 Instruction [15-0] Memory data register 16 32 Sign extend Shift left 2 ALU Control Instruction [5-0] 2. décoder l'instruction
134
implémentation multicycle
chargement et décodage chargement MemRead ALUSrcA = 0 IorD= 0 IRWrite ALUSrcB = 01 ALUOp= 00 PCWrite PCSource = 00 décodage 1 ALUSrcA = 0 ALUSrcB =11 ALUOp = 00 Op = type R Op = 'BEQ' machine accès mémoire machine type R machine branchements Op = 'J' machine sauts Op = 'LW' ou Op = 'SW'
135
implémentation multicycle
accès mémoire depuis 1 (Op='LW') ou (Op='SW') 2 ALUSrcA = 1 ALUSrcB = 10 ALUOp = 00 calcul de l'adresse mémoire (Op='SW') (Op='LW') 5 MemRead IorD = 1 accès mémoire MemWrite IorD = 1 accès mémoire 3 fin de la lecture mémoire RegWrite MemtoReg = 1 RegDst = 0 4 retour vers l'état 0
136
implémentation multicycle
instructions de type R depuis 1 (Op='type R') ALUSrcA = 1 ALUSrcB = 00 ALUOp = 10 exécution 6 7 RegDst = 1 RegWrite MemtoReg = 0 fin de l'opération retour vers l'état 0
137
implémentation multicycle
Branchements conditionnels depuis 1 (Op='BEQ') ALUSrcA = 1 ALUSrcB = 00 ALUOp = 01 PCWriteCond PCSource=01 exécution 8 retour vers l'état 0
138
implémentation multicycle
Sauts inconditionnels depuis 1 (Op='J') PCWrite PCSource=10 exécution 9 retour vers l'état 0
139
implémentation multicycle
chargement décodage MemRead ALUSrcA = 0 IorD= 0 IRWrite ALUSrcB = 01 ALUOp= 00 PCWrite PCSource = 00 1 ALUSrcA = 0 ALUSrcB =11 ALUOp = 00 (Op = 'J') (Op = 'BEQ') calcul de l'adresse mémoire exécution 6 (Op = type R) 8 exécution exécution 9 2 ALUSrcA = 1 ALUSrcB = 10 ALUOp = 00 ALUSrcA = 1 ALUSrcB = 00 ALUOp = 10 ALUSrcA = 1 ALUSrcB = 00 ALUOp = 01 PCWriteCond PCSource=01 PCWrite PCSource=10 (Op='SW') (Op='LW') accès mémoire fin de l'opération (Op = 'LW' ou Op = 'SW' ) accès mémoire 3 MemRead IorD = 1 5 MemWrite IorD = 1 7 RegDst = 1 RegWrite MemtoReg = 0 fin de la lecture mémoire 4 RegWrite MemtoReg = 1 RegDst = 0
140
implémentation multicycle
le contrôleur de la machine à états finis est implémenté dans un bloc de logique combinatoire Logique combinatoire de contrôle sorties de contrôle du chemin de données ... sorties entrées TD registre d'état entrées en provenance du champ de contrôle de l'instruction
141
plan du cours réalisation d'une ALU effectuant les opérations de base arithmétiques et logiques CPU en mode cycle unique réalisation d'un chemin de données réalisation une unité de contrôle CPU en mode multicycle chemin de données contrôle gestion des interruptions CPU en mode pipeline gestion des aléas Hiérarchie des mémoires. Caches
142
gestion des exceptions
exception : tout changement inattendu dans le cours de l'exécution de la séquence d'instructions une interruption est une exception provenant d'un élément extérieur (périphérique) NB: dans le cas des architectures IA32 de Intel, toutes les exceptions sont appelées interruptions peuvent être provoquées par la requête d'un dispositif d'entrée/sortie un dépassement de capacité arithmétique une instruction non définie un appel aux fonctions du système d'exploitation etc...
143
gestion des exceptions
dans ce qui suit, gestion des dépassements de capacité des instructions non définies actions de base : sauver l'adresse de l'instruction ayant causé l'exception dans un registre dédié : EPC (Exception Program Counter) transférer le contrôle à une adresse spécifiée du système d'exploitation en précisant la raison de l'exception ensuite terminer le programme ou reprendre l'exécution au point où on en était au moment de l'occurrence de l'exception 2 méthodes pour le transfert de contrôle : une seule adresse de transfert et la cause est sauvegardée dans un registre d'état (Cause Register) vecteur d'interruption : la cause de l'exception détermine le choix de l'adresse de transfert
144
gestion des exceptions
l'architecture MIPS suit la première méthode 2 registres supplémentaires EPC Cause stocke la cause dans un mot de 32 bits instruction indéfinie : lsb → 0 dépassement de capacité arithmétique : lsb → 1 lignes de contrôles supplémentaires EPCWrite CauseWrite ligne pour mettre à 0 ou 1 le lsb de Cause adresse du point d'entrée du traitement : 0x PC décrémenté de 4 avant stockage dans EPC
145
implémentation multicycle
CauseWrite IntCause PCWriteCond EPCWrite PCWrite Outputs PCSource IorD ALUOp MemRead Control ALUSrcB MemWrite ALUSrcA MemtoReg RegWrite IRWrite RegDest M u x 1 2 3 Jump address [31-0] Op [5-0] 26 Shift left 2 28 Instruction [25-0] Instruction [31-26] PC M u x 1 PC [31-28] Instruction [25-21] Read register 1 M u x 1 Address Read data 1 A Memory Instruction [20-16] Read register 2 Overflow Cause Zero EPC M u x 1 MemData ALU Instruction [15-0] Registers ALU result ALUOut Write register Instruction [15-11] Read data 2 Write data B M u x 3 2 1 Instruction register 4 Write data M u x 1 M u x 1 Instruction [15-0] Cause Memory data register 1 16 32 Sign extend Shift left 2 ALU Control Instruction [5-0]
146
implémentation multicycle
chargement décodage MemRead ALUSrcA = 0 IorD= 0 ALUSrcB = 01 ALUOp= 00 PCWrite PCSource = 00 1 ALUSrcA = 0 ALUSrcB =11 ALUOp = 00 problème potentiel d'écriture d'un résultat faux ! ! (Op='other') (Op = 'J') (Op = 'BEQ') calcul de l'adresse mémoire exécution exécution 6 (Op = type R) 8 ALUSrcA = 1 ALUSrcB = 00 ALUOp = 01 PCWriteCond PCSource=01 exécution 9 2 ALUSrcA = 1 ALUSrcB = 10 ALUOp = 00 ALUSrcA = 1 ALUSrcB = 00 ALUOp = 10 PCWrite PCSource=10 documenté dans l’instruction set MIPS (Op='SW') (Op='LW') accès mémoire (Op = 'LW' ou Op = 'SW' ) fin de l'opération accès mémoire 3 MemRead IorD = 1 6 ALUSrcA = 1 ALUSrcB = 10 ALUOp = 00 7 RegDst = 1 RegWrite MemtoReg = 0 10 IntCause = 1 CauseWrite ALUSrcA = 0 ALUSrcB = 01 ALUOp = 01 EPCWrite PCWrite PCSource = 11 IntCause = 0 CauseWrite ALUSrcA = 0 ALUSrcB = 01 ALUOp = 01 EPCWrite PCWrite PCSource = 11 11 Overflow fin de la lecture mémoire 4 RegWrite MemtoReg = 1 RegDst = 0
147
plan du cours réalisation d'une ALU effectuant les opérations de base arithmétiques et logiques CPU en mode cycle unique réalisation d'un chemin de données réalisation une unité de contrôle CPU en mode multicycle chemin de données contrôle gestion des interruptions CPU en mode pipeline gestion des aléas Hiérarchie des mémoires. Caches
148
pipelining l'approche « multicycle » améliore le temps d'exécution, mais une grande partie du chemin de données reste sous-utilisée pendant l'exécution des différents cycles constituant l'instruction une autre approche utilise un chemin de données proche de celui utilisé pour l'approche « cycle unique » mais en optimise l'utilisation : le « pipelining » où plusieurs instructions seront exécutées en même temps
149
pipelining une analogie : le lavage du linge 18h 19h 20h 21h 22h 23h
heure
150
pipelining une meilleure utilisation du matériel :
18h 19h 20h 21h heure le temps d'exécution de chaque instruction reste le même mais pour un grand nombre d 'opérations, le facteur d'accélération peut atteindre 4
151
pipelining on va réaliser un pipeline avec les 5 étapes (maximum) de l'exécution des instructions aller chercher l'instruction en mémoire (IF : Instruction Fetch) lire les registres impliqués en même temps que l'on décode (ID : Instruction Decode) exécuter l'instruction (R format) ou calculer l'adresse (EX) accéder à un opérande en mémoire (MEM) écrire dans un registre (lw ou R format) (WB : Write Back) EX IF ID MEM WB accès en lecture accès en écriture
152
pipelining amélioration du temps d'exécution du programme (et non pas de l'instruction) temps typiques pour la réalisation des étapes on a supposé que les multiplexeurs, unités de contrôle, accès au registre PC et unités d'extension du bit de signe n'ont aucun délai Classe instruction fetch Reg read ALU Data access Reg write Total load word (lw) 200ps 100 ps 200 ps 800 ps store word (sw) 700 ps R format (add, ...) 600 ps branch (beq) 500 ps
153
pipelining exemple pour 3 instructions « indépendantes »
en mode « cycle unique » en mode « pipelining » on est limité par la ressource la plus lente (ALU ou accès mémoire) 200 400 600 800 1000 1200 1400 1600 1800 fetch Reg ALU data access lw $1, 100($0) lw $2, 200($0) lw $3, 300($0) 800 ps temps instructions 2400 ps 200 400 600 800 1000 1200 1400 1600 1800 fetch Reg ALU data access lw $1, 100($0) lw $2, 200($0) lw $3, 300($0) 200 ps temps instructions 1400 ps toutes les étapes ont la même durée <=> le design des instructions est adapté au traitement
154
pipelining il peut se produire des conflits entre les instructions dans le pipeline : « aléas » aléas « structurels » aléas « de données » aléas « de contrôle »
155
aléa structurel exemple
si on n'avait qu'une seule mémoire pour les instructions et les données 200 400 600 800 1000 1200 1400 1600 1800 temps fetch Reg ALU data access lw $1, 100($0) fetch Reg ALU data access lw $2, 200($0) fetch Reg ALU data access lw $3, 300($0) fetch Reg ALU data access add $4, $1, $2 instructions
156
aléa structurel exemple
si on n'avait qu'une seule mémoire pour les instructions et les données aléa structurel dès la 4ème instruction dans le pipeline 200 400 600 800 1000 1200 1400 1600 1800 temps fetch Reg ALU data access lw $1, 100($0) fetch Reg ALU data access lw $2, 200($0) fetch Reg ALU data access lw $2, 300($0) fetch Reg ALU data access add $4, $1, $2 instructions
157
aléas de données quand le déroulement du pipeline est bloqué car on doit attendre la fin d'une instruction pour exécuter une des suivantes exemple : add $s0, $t0, $t1 sub $t2, $s0, $t3 on a besoin de $s0 produit par add pour décoder sub IF ID EX MEM WB add $s0, $t0, $t1 sub $2, $s0, $t3
158
aléas de données le compilateur ne peut pas toujours éviter cet aléa
une première solution : bloquer temporairement le pipeline IF ID EX MEM WB add $s0, $t0, $t1 bubble bubble sub $2, $s0, $t3 IF ID EX MEM WB
159
aléas de données autre solution, plus performante : faire suivre (forward) la donnée (quand c'est possible) EX IF ID MEM WB add $s0, $t0, $t1 EX IF ID MEM WB sub $2, $s0, $t3
160
aléas de données parfois nécessaire de faire en plus un blocage temporaire EX IF ID MEM WB lw $s0, 20($t1) EX IF ID MEM WB sub $2, $s0, $t3
161
aléas de données parfois nécessaire de faire en plus un blocage temporaire EX IF ID MEM WB lw $s0, 20($t1) bubble EX IF ID MEM WB sub $2, $s0, $t3
162
aléas de contrôle quand il faut faire un choix basé sur le résultat d'une instruction exemple : instruction de branchement on suppose que l'on a rajouté du matériel pour comparer le contenu des registres, calculer l'adresse de branchement et mettre à jour le compteur de programme pendant la 2ème étape si le branchement est pris, on va à l'instruction PC+4+offset (ici un or) sinon on va à PC+4 (ici lw) beq $1, $2, 40 lw $3, 300($0) … or $7, $8, $9
163
aléas de contrôle la solution la plus simple consiste à bloquer systématiquement le pipeline à chaque branchement 200 400 600 800 1000 1200 1400 temps fetch Reg ALU data access add $4, $5, $6 fetch Reg ALU data access beq $1, $2, 40 bubble fetch Reg ALU data access or $7, $8, $9 instructions
164
aléas de contrôle pour améliorer les performances : prédictions
on suppose a priori que le branchement n'est pas pris si le branchement est pris, on va à l'instruction or en introduisant un blocage 200 400 600 800 1000 1200 1400 temps fetch Reg ALU data access add $4, $5, $6 fetch Reg ALU data access beq $1, $2, 40 fetch Reg ALU data access lw $3, 300($0) instructions 200 400 600 800 1000 1200 1400 temps argument : dans la plupart des cas, le branchement n'est pas pris (emple : dans une boucle for, on teste si on a atteint la fin. Si non, goto debut, sinon (une seule fois), on sort de la boucke fetch Reg ALU data access add $4, $5, $6 fetch Reg ALU data access beq $1, $2, 40 bubble fetch Reg ALU data access or $7, $8, $9 instructions
165
plan du cours réalisation d'une ALU effectuant les opérations de base arithmétiques et logiques CPU en mode cycle unique réalisation d'un chemin de données réalisation une unité de contrôle CPU en mode multicycle chemin de données contrôle gestion des interruptions CPU en mode pipeline gestion des aléas Hiérarchie des mémoires. Caches
166
chemin de données en mode pipeline
rappel : cycle unique Add Add 4 Décal. gauche 2 bits Résultat code opération Registres Registre lecture #1 lecture #2 écriture Données Ecriture registre Source PC 4 Ecriture mémoire Mémoire vers registre PC Lecture adresse Mémoire instructions instruction Zéro M u x Source ALU ALU Mémoire données Adresse M u x Résultat M u x Données lues Données à écrire Ext. bit de signe Lecture mémoire 16 32
167
chemin de données en mode pipeline
Sélection de la valeur suivante du PC Instruction Fetch Instruction Decode Execute Memory Access Write Back aléa de contrôle les transferts se font de gauche à droite Add Add sauf 4 Décal. gauche 2 bits Résultat code opération Registres Registre lecture #1 lecture #2 écriture Données Ecriture registre Source PC 4 Ecriture mémoire Mémoire vers registre PC Lecture adresse Mémoire instructions instruction Zéro M u x Source ALU ALU Mémoire données Adresse M u x Résultat M u x Données lues Données à écrire aléa de données Ext. bit de signe Lecture mémoire 16 32 Écriture du résultat dans le register file
168
chemin de données en mode pipeline
tout se passe comme si chaque étape avait son chemin de données propre représenté par le composant essentiel du chemin pour mémoriser des données pour les étages en aval : besoin de registres intermédiaires temps (en cycles d'horloge) CC1 CC2 CC3 CC4 CC5 CC6 CC7 ALU IM Reg DM Reg lw $1, 100($0) ALU IM Reg DM Reg lw $2, 200($0) ALU IM Reg DM Reg lw $3, 300($0) instructions
169
chemin de données en mode pipeline
exemple de l'exécution d'une instruction lw IF/ID ID/EX EX/MEM MEM//WB Add Add 4 Décal. gauche 2 bits Résultat Registres Registre lecture #1 lecture #2 écriture Données PC Mémoire données Données lues M u x Lecture adresse Mémoire instructions instruction Zéro M u x ALU Adresse Résultat M u x Données à écrire Ext. bit de signe 16 32
170
chemin de données en mode pipeline
lw instruction fetch IF/ID ID/EX EX/MEM MEM//WB Add Add 4 Décal. gauche 2 bits Résultat lecture Registres Registre lecture #1 lecture #2 écriture Données PC Mémoire données Données lues M u x Lecture adresse Mémoire instructions instruction Zéro M u x ALU Adresse Résultat M u x Données à écrire écriture Ext. bit de signe cf Instruction Register 16 32
171
chemin de données en mode pipeline
lw instruction decode IF/ID ID/EX EX/MEM MEM//WB écriture lecture Add Add 4 Décal. gauche 2 bits Résultat lecture Registres Registre lecture #1 lecture #2 écriture Données PC Mémoire données Données lues M u x Lecture adresse Mémoire instructions instruction Zéro M u x ALU Adresse Résultat M u x Données à écrire Ext. bit de signe 16 32
172
chemin de données en mode pipeline
lw execution IF/ID ID/EX EX/MEM MEM//WB Add Add 4 Décal. gauche 2 bits Résultat Registres Registre lecture #1 lecture #2 écriture Données PC Mémoire données Données lues M u x Lecture adresse Mémoire instructions instruction Zéro M u x ALU Adresse Résultat M u x Données à écrire Ext. bit de signe 16 32
173
chemin de données en mode pipeline
lw Memory IF/ID ID/EX EX/MEM MEM//WB Add Add 4 Décal. gauche 2 bits Résultat Registres Registre lecture #1 lecture #2 écriture Données PC Mémoire données Données lues M u x Lecture adresse Mémoire instructions instruction Zéro M u x ALU Adresse Résultat M u x Données à écrire Ext. bit de signe 16 32
174
chemin de données en mode pipeline
lw Write-back IF/ID ID/EX EX/MEM MEM//WB Add Add 4 Décal. gauche 2 bits Résultat Registres Registre lecture #1 lecture #2 écriture Données PC Mémoire données Données lues M u x Lecture adresse Mémoire instructions instruction Zéro M u x ALU Adresse Résultat M u x Données à écrire Ext. bit de signe 16 32
175
chemin de données en mode pipeline
exemple de l'exécution d'une instruction sw sw execution IF/ID ID/EX EX/MEM MEM//WB Add Add 4 Décal. gauche 2 bits Résultat Registres Registre lecture #1 lecture #2 écriture Données PC Mémoire données Données lues M u x Lecture adresse Mémoire instructions instruction Zéro M u x ALU Adresse Résultat M u x Données à écrire différent du lw Ext. bit de signe 16 32
176
chemin de données en mode pipeline
sw Memory IF/ID ID/EX EX/MEM MEM//WB Add Add 4 Décal. gauche 2 bits Résultat Registres Registre lecture #1 lecture #2 écriture Données PC Mémoire données Données lues M u x Lecture adresse Mémoire instructions instruction Zéro M u x ALU Adresse Résultat M u x Données à écrire Ext. bit de signe 16 32
177
chemin de données en mode pipeline
sw Write-back IF/ID ID/EX EX/MEM MEM//WB rien à faire !... Add Add 4 Décal. gauche 2 bits Résultat Registres Registre lecture #1 lecture #2 écriture Données PC Mémoire données Données lues M u x Lecture adresse Mémoire instructions instruction Zéro M u x ALU Adresse Résultat M u x Données à écrire Ext. bit de signe 16 32
178
chemin de données en mode pipeline
lw Write-back IF/ID ID/EX EX/MEM MEM//WB Add Add 4 Décal. gauche 2 bits Résultat Registres Registre lecture #1 lecture #2 écriture Données PC Mémoire données Données lues M u x Lecture adresse Mémoire instructions instruction Zéro M u x ALU Adresse Résultat M u x Données à écrire ? Ext. bit de signe 16 32
179
chemin de données en mode pipeline
chemin de données corrigé IF/ID ID/EX EX/MEM MEM//WB Add Add 4 Décal. gauche 2 bits Résultat Registres Registre lecture #1 lecture #2 écriture Données PC Mémoire données Données lues M u x Lecture adresse Mémoire instructions instruction Zéro M u x ALU Adresse Résultat M u x Données à écrire Ext. bit de signe 16 32
180
chemin de données en mode pipeline
IF/ID ID/EX EX/MEM MEM//WB Add Add 4 Décal. gauche 2 bits Résultat Registres Registre lecture #1 lecture #2 écriture Données PC Mémoire données Données lues M u x Lecture adresse Mémoire instructions instruction Zéro M u x ALU Adresse Résultat M u x Données à écrire portions du chemin de données utilisées pour une instruction lw Ext. bit de signe 16 32
181
chemin de données en mode pipeline
vision sur plusieurs cycles d'horloge CC1 CC2 CC3 CC4 CC5 CC6 CC7 CC8 CC9 instructions du programme ALU lw $10, 20($1) IM Reg DM Reg ALU sub $1, $2, $3 IM Reg DM Reg ALU IM Reg DM Reg add $12, $3, $4 ALU lw $13, 24($1) IM Reg DM Reg ALU add $14, $5, $6 IM Reg DM Reg
182
chemin de données en mode pipeline
vision sur plusieurs cycles d'horloge CC1 CC2 CC3 CC4 CC5 CC6 CC7 CC8 CC9 instructions du programme Instruction fetch Instruction decode Execution data access Write-back lw $10, 20($1) Instruction fetch Instruction decode Execution data access Write-back sub $1, $2, $3 Instruction fetch Instruction decode Execution data access Write-back add $12, $3, $4 Instruction fetch Instruction decode Execution data access Write-back lw $13, 24($1) Instruction fetch Instruction decode Execution data access Write-back add $14, $5, $6
183
chemin de données en mode pipeline
vision sur un seul cycle d'horloge CC1 CC2 CC3 CC4 CC5 CC6 CC7 CC8 CC9 instructions du programme Instruction fetch Instruction decode Execution data access Write-back lw $10, 20($1) Instruction fetch Instruction decode Execution data access Write-back sub $1, $2, $3 Instruction fetch Instruction decode Execution data access Write-back add $12, $3, $4 Instruction fetch Instruction decode Execution data access Write-back lw $13, 24($1) Instruction fetch Instruction decode Execution data access Write-back add $14, $5, $6
184
chemin de données en mode pipeline
vision sur un seul cycle add $14, $5, $6 lw 13, 24($1) add $12, $3, $4 sub $11, $2, $3 lw 10, 20($1) instruction fetch instruction decode execution memory write-back IF/ID ID/EX EX/MEM MEM//WB quel cycle ? Add Add 4 Décal. gauche 2 bits Résultat Registres Registre lecture #1 lecture #2 écriture Données PC Mémoire données Données lues M u x Lecture adresse Mémoire instructions instruction Zéro M u x ALU Adresse Résultat M u x Données à écrire Ext. bit de signe 16 32
185
chemin de données en mode pipeline
le 5ème
186
plan du cours réalisation d'une ALU effectuant les opérations de base arithmétiques et logiques CPU en mode cycle unique réalisation d'un chemin de données réalisation une unité de contrôle CPU en mode multicycle chemin de données contrôle gestion des interruptions CPU en mode pipeline gestion des aléas Hiérarchie des mémoires. Caches
187
contrôle en mode pipeline
on réutilise autant que faire se peut les éléments de l'implémentation cycle unique même nomenclature même logique de contrôle pour l'ALU compteur PC chargé à chaque cycle de l'horloge : pas besoin d'une ligne de contrôle spécifique (même raisonnement pour les registres du pipeline)
188
contrôle en mode pipeline
implémentation cycle unique M u x Add RegDest Add Contrôle Branch 4 MemRead Décal. gauche 2 bits MemWrite Résultat ALUOp 1 instruction [31:26] MemtoReg ALUSrc Source PC RegWrite instruction [25:21] Registres Registre lecture #1 lecture #2 écriture Données PC instruction [20:16] Lecture adresse Mém. instr. instruction (31:0) Zéro ALU Mémoire données M u x Adresse Résultat 1 M u x M u x Données lues instruction [15:11] 1 1 Données à écrire Contrôle ALU Ext. bit de signe 16 32 instruction [15:0] instruction [5:0]
189
contrôle en mode pipeline
PCSrc IF/ID ID/EX EX/MEM MEM//WB Branch Add Add Décal. gauche 2 bits Résultat 4 RegWrite Registres Registre lecture #1 lecture #2 écriture Données PC Lecture adresse Mémoire instructions instruction Zéro M u x ALUSrc ALU MemWrite MemtoReg Résultat M u x 1 Mémoire données Données lues M u x 1 Adresse Données à écrire Ext. bit de signe 1 32 Contrôle ALU Instr 6 [15-0] MemRead Instr ALUOp M u x [20-16] Instr 1 [15-11] RegDest
190
contrôle en mode pipeline
on établit les lignes de contrôle à chaque étape du pipeline chaque composant du chemin de données n'est utilisé qu'à une étape → 5 groupes de lignes
191
contrôle en mode pipeline
IF ID PCSrc IF/ID ID/EX EX/MEM MEM//WB Branch Add Add Décal. gauche 2 bits Résultat 4 RegWrite Registres Registre lecture #1 lecture #2 écriture Données PC Lecture adresse Mémoire instructions instruction Zéro M u x ALUSrc ALU MemWrite MemtoReg Résultat M u x 1 Mémoire données Données lues M u x 1 Adresse Données à écrire Ext. bit de signe 1 32 Contrôle ALU Instr 6 [15-0] MemRead Instr ALUOp M u x [20-16] Instr 1 [15-11] RegDest
192
contrôle en mode pipeline
on établit les lignes de contrôle à chaque étape du pipeline chaque composant du chemin de données n'est utilisé qu'à une étape → 5 groupes de lignes IF : rien de spécial (les lignes pour écrire le PC et la lecture de la mémoire instruction sont toujours assertées) ID : rien de spécial (la lecture du register file est toujours assertée
193
contrôle en mode pipeline
EX PCSrc IF/ID ID/EX EX/MEM MEM//WB Branch Add Add Décal. gauche 2 bits Résultat 4 RegWrite Registres Registre lecture #1 lecture #2 écriture Données PC Lecture adresse Mémoire instructions instruction Zéro M u x ALUSrc ALU MemWrite MemtoReg Résultat M u x 1 Mémoire données Données lues M u x 1 Adresse Données à écrire Ext. bit de signe 1 32 Contrôle ALU Instr 6 [15-0] MemRead Instr ALUOp M u x [20-16] Instr 1 [15-11] RegDest
194
contrôle en mode pipeline
on établit les lignes de contrôle à chaque étape du pipeline chaque composant du chemin de données n'est utilisé qu'à une étape → 5 groupes de lignes IF : rien de spécial (les lignes pour écrire le PC et la lecture de la mémoire instruction sont toujours assertées) ID : rien de spécial (la lecture du register file est toujours assertée) EX : il faut établir RegDest, ALUOp et ALUSrc
195
contrôle en mode pipeline
MEM PCSrc IF/ID ID/EX EX/MEM MEM//WB Branch Add Add Décal. gauche 2 bits Résultat 4 RegWrite Registres Registre lecture #1 lecture #2 écriture Données PC Lecture adresse Mémoire instructions instruction Zéro M u x ALUSrc ALU MemWrite MemtoReg Résultat M u x 1 Mémoire données Données lues M u x 1 Adresse Données à écrire Ext. bit de signe 1 32 Contrôle ALU Instr 6 [15-0] MemRead Instr ALUOp M u x [20-16] Instr 1 [15-11] RegDest
196
contrôle en mode pipeline
on établit les lignes de contrôle à chaque étape du pipeline chaque composant du chemin de données n'est utilisé qu'à une étape → 5 groupes de lignes IF : rien de spécial (les lignes pour écrire le PC et la lecture de la mémoire instruction sont toujours assertées) ID : rien de spécial (la lecture du register file est toujours assertée) EX : il faut établir RegDest, ALUOp et ALUSrc Mem : il faut établir Branch, MemRead et MemWrite PCSrc est établi à partir de Branch et éventuellement la ligne Zero de l'ALU (si Branch est vrai)
197
contrôle en mode pipeline
WB PCSrc IF/ID ID/EX EX/MEM MEM//WB Branch Add Add Décal. gauche 2 bits Résultat 4 RegWrite Registres Registre lecture #1 lecture #2 écriture Données PC Lecture adresse Mémoire instructions instruction Zéro M u x ALUSrc ALU MemWrite MemtoReg Résultat M u x 1 Mémoire données Données lues M u x 1 Adresse Données à écrire Ext. bit de signe 1 32 Contrôle ALU Instr 6 [15-0] MemRead Instr ALUOp M u x [20-16] Instr 1 [15-11] RegDest
198
contrôle en mode pipeline
on établit les lignes de contrôle à chaque étape du pipeline chaque composant du chemin de données n'est utilisé qu'à une étape → 5 groupes de lignes IF : rien de spécial (les lignes pour écrire le PC et la lecture de la mémoire instruction sont toujours assertées) ID : rien de spécial (la lecture du register file est toujours assertée) EX : il faut établir RegDest, ALUOp et ALUSrc Mem : il faut établir Branch, MemRead et MemWrite PCSrc est établi à partir de Branch et éventuellement la ligne Zero de l'ALU (si Branch est vrai) WB : il faut établir MemtoReg et RegWrite
199
contrôle en mode pipeline
Instr. Execution Memory Write-back RegDest ALUOP1 ALUOP0 ALUSrc Branch Mem-Read Mem-Write Reg-Write Memto-Reg R-format 1 lw sw X beq
200
contrôle en mode pipeline
les lignes de contrôle sont établies au décodage puis transmises via les registres du pipeline EX Mem WB Contrôle IF/ID ID/EX EX/MEM MEM/WB Instruction
201
contrôle en mode pipeline
PCSrc ID/EX Contrôle WB EX/MEM M MEM//WB IF/ID WB EX M WB Add Branch Add Décal. gauche 2 bits Résultat 4 RegWrite Registres Registre lecture #1 lecture #2 écriture Données ALUSrc MemWrite PC Lecture adresse Mémoire instructions instruction Zéro M u x ALU MemtoReg Résultat M u x 1 Mémoire données Données lues M u x 1 Adresse Données à écrire 1 Ext. bit de signe 32 Contrôle ALU Instr 6 [15-0] MemRead Instr ALUOp M u x [20-16] Instr 1 [15-11] RegDest
202
plan du cours réalisation d'une ALU effectuant les opérations de base arithmétiques et logiques CPU en mode cycle unique réalisation d'un chemin de données réalisation une unité de contrôle CPU en mode multicycle chemin de données contrôle gestion des interruptions CPU en mode pipeline gestion des aléas Hiérarchie des mémoires. Caches
203
gestion des aléas les exemples précédents sont « sympas » : pas d'interférences entre les différentes instructions autre exemple (moins sympa) sub $2, $1, $3 and $12, $2, $5 or $13, $6, $2 add $14, $2, $2 lw $15, 100($2)
204
gestion des aléas CC1 CC2 CC3 CC4 CC5 CC6 CC7 CC8 CC9 valeur du
registre $2 10 10 10 10 10/-20 -20 -20 -20 -20 instructions du programme ALU sub $2, $1, $3 IM Reg DM Reg ALU and $12, $2, $5 IM Reg DM Reg ALU IM Reg DM Reg or $13, $8, $2 ALU add $14, $2, $2 IM Reg DM Reg ALU IM Reg DM Reg sw $15, 100($2)
205
gestion des aléas pas de problème CC1 CC2 CC3 CC4 CC5 CC6 CC7 CC8 CC9
valeur du registre $2 10 10 10 10 10/-20 -20 -20 -20 -20 instructions du programme ALU sub $2, $1, $3 IM Reg DM Reg pas de problème ALU and $12, $2, $5 IM Reg DM Reg ALU IM Reg DM Reg or $13, $8, $2 ALU add $14, $2, $2 IM Reg DM Reg ALU IM Reg DM Reg sw $15, 100($2)
206
gestion des aléas peut être résolu en modifiant le hardware :
CC1 CC2 CC3 CC4 CC5 CC6 CC7 CC8 CC9 valeur du registre $2 10 10 10 10 10/-20 -20 -20 -20 -20 instructions du programme peut être résolu en modifiant le hardware : écriture pendant la 1ère moitié du cycle lecture pendant la 2nde moitié du cycle ALU sub $2, $1, $3 IM Reg DM Reg ALU and $12, $2, $5 IM Reg DM Reg ALU IM Reg DM Reg or $13, $8, $2 ALU add $14, $2, $2 IM Reg DM Reg ALU IM Reg DM Reg sw $15, 100($2)
207
gestion des aléas aléas (ligne de dépendance vers l'arrière) CC1 CC2
valeur du registre $2 10 10 10 10 10/-20 -20 -20 -20 -20 instructions du programme aléas (ligne de dépendance vers l'arrière) ALU sub $2, $1, $3 IM Reg DM Reg ALU and $12, $2, $5 IM Reg DM Reg ALU IM Reg DM Reg or $13, $8, $2 ALU add $14, $2, $2 IM Reg DM Reg ALU IM Reg DM Reg sw $15, 100($2)
208
gestion des aléas le résultat dont a besoin est disponible dès la fin de l'étape EX de l'instruction sub $2, $1, $3 : CC3 les instructions and $12, $2, $5 et or $13, $6, $2 en ont besoin au début de leur étape EX, soit CC4 et CC5 il « suffit » de forwarder le résultat dès qu'il est disponible, sans attendre qu'il soit disponible à la lecture dans le register file nécessaire d'être capable de détecter les aléas
209
détection des aléas (1) on se limite au cas où l'on veut forwarder vers une instruction dans l'étape EX opération d'ALU (instruction de type R) opération de calcul d'adresse aléa quand une instruction a besoin du contenu d'un registre pour son étape EX alors qu'une instruction précédente va écrire ce même registre dans son étape WB on se repère en utilisant les buffers entre les étapes : ID/EX.RegisterRs se réfère au numéro du registre Rs se trouvant dans le buffer ID/EX du pipeline
210
Rappel format des instructions MIPS pour les instructions de type R, de branchement et d'accès à la mémoire champ rs rt rd shamt funct position des bits 31:26 25:21 20:16 15:11 10:6 5:0 instructions de type R (exemple : add rd, rs, rt ) 3510 ou 4310 offset 0:15 instructions d'accès à la mémoire (exemple : lw rt, offset(rs) ) 410 instructions de saut conditionnel (exemple : beq rs, rt, offset)
211
détection des aléas (1) on se limite au cas où l'on veut forwarder vers une instruction dans l'étape EX opération d'ALU (instruction de type R) opération de calcul d'adresse aléa quand une instruction a besoin du contenu d'un registre pour son étape EX alors qu'une instruction précédente va écrire ce même registre dans son étape WB on se repère en utilisant les buffers entre les étapes : exemple : ID/EX.RegisterRs se réfère au numéro du registre Rs se trouvant dans le buffer ID/EX du pipeline 2 paires de conditions d'aléas 1.a : EX/MEM.RegisterRd = ID/EX.RegisterRs 1.b : EX/MEM.RegisterRd = ID/EX.RegisterRt 2.a : MEM/WB.RegisterRd = ID/EX.RegisterRs 2.b : MEM/WB.RegisterRd = ID/EX.RegisterRt
212
détection des aléas (2) sub $2, $1, $3 and $12, $2, $5
est un aléa de type 1.a EX/MEM.RegisterRd = ID/EX.RegisterRs = $2 sub $2, $1, $3 or $13, $6, $2 est un aléa de type 2.b MEM/WB.RegisterRd = ID/EX.RegisterRt = $2 pas d'aléa pour les autres dépendances
213
détection des aléas (3) les règles précédentes ne sont pas suffisantes
certaines instructions n'écrivent pas dans le register file et elles provoqueraient un forward là où il n'est pas utile test de la ligne de commande RegWrite dans le champ WD des buffers du pipeline certaines instructions qui utilisent le registre $0 comme destination (exemple : sll $0 $1, 2) pas nécessaire de forwarder des résultats vers $0 les conditions 1 et 2 sont valides si EX/MEM.RegisterRd ≠ 0 et MEM/WB.RegisterRd ≠ 0 nécessaire aussi d'identifier correctement les données à forwarder
214
gestion des aléas CC1 CC2 CC3 CC4 CC5 CC6 CC7 CC8 CC9 valeur du
registre $2 10 10 10 10 10/-20 -20 -20 -20 -20 valeur de EX/MEM X X X -20 X X X X X valeur de MEM/WB X X X X -20 X X X X instructions du programme ALU sub $2, $1, $3 IM Reg DM Reg ALU and $12, $2, $5 IM Reg DM Reg ALU IM Reg DM Reg or $13, $8, $2 ALU add $14, $2, $2 IM Reg DM Reg ALU IM Reg DM Reg sw $15, 100($2)
215
gestion des aléas les dépendances sont marquées à partir des registres
CC1 CC2 CC3 CC4 CC5 CC6 CC7 CC8 CC9 valeur du registre $2 10 10 10 10 10/-20 -20 -20 -20 -20 valeur de EX/MEM X X X -20 X X X X X valeur de MEM/WB X X X X -20 X X X X instructions du programme les dépendances sont marquées à partir des registres du pipeline au lieu du register file ALU sub $2, $1, $3 IM Reg DM Reg ALU and $12, $2, $5 IM Reg DM Reg ALU IM Reg DM Reg or $13, $8, $2 ALU add $14, $2, $2 IM Reg DM Reg ALU IM Reg DM Reg sw $15, 100($2)
216
gestion des aléas toutes vers l'avant : les données sont
CC1 CC2 CC3 CC4 CC5 CC6 CC7 CC8 CC9 valeur du registre $2 10 10 10 10 10/-20 -20 -20 -20 -20 valeur de EX/MEM X X X -20 X X X X X valeur de MEM/WB X X X X -20 X X X X instructions du programme toutes vers l'avant : les données sont disponibles venant des registres du pipelines ALU sub $2, $1, $3 IM Reg DM Reg ALU and $12, $2, $5 IM Reg DM Reg ALU IM Reg DM Reg or $13, $8, $2 ALU add $14, $2, $2 IM Reg DM Reg ALU IM Reg DM Reg sw $15, 100($2)
217
gestion des aléas modifier le datapath pour prendre les
CC1 CC2 CC3 CC4 CC5 CC6 CC7 CC8 CC9 valeur du registre $2 10 10 10 10 10/-20 -20 -20 -20 -20 valeur de EX/MEM X X X -20 X X X X X valeur de MEM/WB X X X X -20 X X X X instructions du programme modifier le datapath pour prendre les données à partir de n'importe quel registre du pipeline ALU sub $2, $1, $3 IM Reg DM Reg ALU and $12, $2, $5 IM Reg DM Reg ALU IM Reg DM Reg or $13, $8, $2 ALU add $14, $2, $2 IM Reg DM Reg ALU IM Reg DM Reg sw $15, 100($2)
218
gestion des aléas modification du chemin de données
ID/EX EX/MEM MEM/WB ALU registers data memory M u x modification du chemin de données pour les seules instructions de type R (add, sub, and, or)
219
gestion des aléas ID/EX EX/MEM MEM/WB M u x ALU registers ForwardA data memory M u x M u x ForwardB Rs Rt M u x Rt EX/MEM.RegisterRd Rd Forwarding unit MEM/WB.RegisterRd pour les seules instructions de type R (add, sub, and, or)
220
gestion des aléas Mux control Source Explication ForwardA = 00 ID/EX
le premier opérande de l'ALU vient du register file ForwardA = 10 EX/MEM le premier opérande de l'ALU est forwardé du résultat précédent de l'ALU ForwardA = 01 MEM/WB le premier opérande de l'ALU est forwardé de la mémoire donnée ou d'un résultat précédent de l'ALU ForwardB = 00 le second opérande de l'ALU vient du register file ForwardB = 10 le second opérande de l'ALU est forwardé du résultat précédent de l'ALU ForwardB = 01 le second opérande de l'ALU est forwardé de la mémoire donnée ou d'un résultat précédent de l'ALU
221
gestion des aléas détection des aléas EX if (EX/MEM.RegWrite and (EX/MEM.RegisterRd ≠0) and (EX/MEM.RegisterRd = ID/EX.RegisterRs)) ForwardA=10 if (EX/MEM.RegWrite and (EX/MEM.RegisterRd ≠0) and (EX/MEM.RegisterRd = ID/EX.RegisterRt)) ForwardB=10 détection des aléas MEM if (MEM/WB.RegWrite and (MEM/WB.RegisterRd ≠0) and (MEM/WB.RegisterRd = ID/EX.RegisterRs)) ForwardA=01 if (MEM/WB.RegWrite and (MEM/WB.RegisterRd ≠0) and (MEM/WB.RegisterRd = ID/EX.RegisterRt)) ForwardB=01
222
gestion des aléas dans l'exemple précédent, pas d'aléa dans l'étage WB car résolu par un mécanisme interne au register file si on considère la suite d'instructions add $1, $1, $2 add $1, $1, $3 add $1, $1, $4 problème à l'étage WB nécessitant un forward depuis l'étage MEM équations modifiées pour en tenir compte : if (MEM/WB.RegWrite and (MEM/WB.RegisterRd ≠0) and not (EX/MEM.RegWrite and (EX/MEM.RegisterRd ≠0) and (EX/MEM.RegisterRd ≠ ID/EX.RegisterRs)) and (MEM/WB.RegisterRd = ID/EX.RegisterRs)) ForwardA=01 if (MEM/WB.RegWrite and (MEM/WB.RegisterRd ≠0) and not (EX/MEM.RegWrite and (EX/MEM.RegisterRd ≠0) and (EX/MEM.RegisterRd ≠ ID/EX.RegisterRt)) and (MEM/WB.RegisterRd = ID/EX.RegisterRt)) ForwardB=01
223
gestion des aléas Modifications nécessaires ID/EX EX/MEM MEM//WB IF/ID
Contrôle WB EX/MEM M MEM//WB IF/ID WB EX M WB M u x Registres Registre lecture #1 lecture #2 écriture Données ForwardA PC Lecture adresse Mémoire instructions instruction Zéro ALU Résultat M u x Mémoire données Données lues M u x Adresse Données à écrire ForwardB IF/ID.RegisterRs IF/ID.RegisterRt IF/ID.RegisterRt M u x EX/MEM.RegisterRd IF/ID.RegisterRd Forwarding unit MEM/WB.RegisterRd
224
gestion des aléas ID/EX NB : EX/MEM beaucoup d'éléments
du chemin de données non représentés (branchements, extension du bit de signe, etc...) Contrôle WB EX/MEM M MEM//WB IF/ID WB EX M WB M u x Registres Registre lecture #1 lecture #2 écriture Données ForwardA PC Lecture adresse Mémoire instructions instruction Zéro ALU Résultat M u x Mémoire données Données lues M u x Adresse Données à écrire ForwardB IF/ID.RegisterRs IF/ID.RegisterRt IF/ID.RegisterRt M u x EX/MEM.RegisterRd IF/ID.RegisterRd Forwarding unit MEM/WB.RegisterRd
225
gestion des aléas les développements précédents montrent la complexité de la gestion de quelques aléas ce ne sont pas les seuls... succession d'opérations lw et sw instructions de type li (load immediate) sauts conditionnels etc... nécessaire de prévoir les conditions de forwarding prenant en compte ces aléas complexité accrue du chemin de données et du contrôle
226
gestion des aléas certaines situations imposent de bloquer temporairement le pipeline (« stalls ») par exemple quand une instruction veut lire un registre qui vient d'être accédé en écriture par l'instruction précédente (lw)
227
encore en train de lire en
gestion des aléas IM Reg ALU DM CC1 CC2 CC3 CC4 CC5 CC6 CC7 CC8 CC9 encore en train de lire en mémoire quand on en a besoin dans l'ALU instructions du programme lw $2,20( $1) and $4, $2, $5 or $13, $8, $2 add $9, $4, $2 slt $1, $6, $3
228
l'instruction est un load
gestion des aléas nécessaire de bloquer temporairement le pipeline nécessaire de détecter l'aléa durant l'étape ID pour ajouter le blocage dans le contrôle if (ID/EX.MemRead and ((ID/EX.RegisterRt = IF/EX.RegisterRs) or (ID/EX.RegisterRt = IF/ID.RegisterRt))) stall the pipeline ensuite la logique de forwarding peut gérer la dépendance et le processus d'exécution peut se poursuivre le registre de destination du load correspond à un des registres source dans l'instruction à l'étape ID l'instruction est un load
229
gestion des aléas si l'instruction dans l'étape ID est bloquée, alors l'instruction dans l'étape IF doit l'être aussi gel du registre PC et du buffer IF/ID les étapes en aval (EX et suivantes) sont « occupées » en exécutant une instruction nop (no operation) Instr. Execution Memory Write-back RegDest ALUOP1 ALUOP0 ALUSrc Branch Mem-Read Mem-Write Reg-Write Memto-Reg R-format 1 lw sw X beq
230
gestion des aléas si l'instruction dans l'étape ID est bloquée, alors l'instruction dans l'étape IF doit l'être aussi gel du registre PC et du buffer IF/ID les étapes en aval (EX et suivantes) sont « occupées » en exécutant une instruction nop (no operation) obtenu en forçant à 0 les lignes de contrôle dans ID/EX automatiquement transmis aux buffers en aval Instr. Execution Memory Write-back RegDest ALUOP1 ALUOP0 ALUSrc Branch Mem-Read Mem-Write Reg-Write Memto-Reg R-format lw sw beq
231
gestion des aléas l'instruction and est chargée
CC1 CC2 CC3 CC4 CC5 CC6 CC7 CC8 CC9 instructions du programme l'instruction and est chargée et décodée aux cycles 2 et 3 Son étape EX est retardée jusqu'au cycle 5 l'instruction or est chargée au cycle 3 mais son étape ID est retardée au cycle 5 ALU lw $2,20( $1) IM Reg DM Reg ALU and devient nop IM Reg DM Reg ALU and $4, $2, $5 IM Reg DM Reg ALU IM Reg DM Reg or $13, $8, $2 ALU add $9, $4, $2 IM Reg DM Reg
232
gestion des aléas PCWrite ID/EX.MemRead unité de détection d'aléas
Contrôle M u x WB EX/MEM M MEM//WB M u x WB IF/ID EX M WB IF/ID.Write Registres Registre lecture #1 lecture #2 écriture Données ForwardA PC Lecture adresse Mémoire instructions instruction Zéro ALU Résultat M u x Mémoire données Données lues M u x Adresse Données à écrire ForwardB IF/ID.RegisterRs IF/ID.RegisterRt IF/ID.RegisterRt M u x EX/MEM.RegisterRd IF/ID.RegisterRd Forwarding unit MEM/WB.RegisterRd
233
gestion des aléas les aléas vus jusqu'à présent sont des aléas structurels ou de données les aléas de contrôles sont liés aux branchements complexes à gérer supposer que le branchement n'est pas pris tester le plus rapidement possible (dès l'étape ID) la condition si nécessaire (branchement pris) vider le pipeline (flush) et aller vers la nouvelle branche les exceptions sont gérées comme les aléas de contrôle stockage de la cause et du compteur PC dans des registres dédiés, puis branchement non conditionnel à une adresse réservée ( hex) hors du champ de ce cours...
234
plan du cours réalisation d'une ALU effectuant les opérations de base arithmétiques et logiques CPU en mode cycle unique réalisation d'un chemin de données réalisation une unité de contrôle CPU en mode multicycle chemin de données contrôle gestion des interruptions CPU en mode pipeline gestion des aléas Hiérarchie des mémoires. Caches
235
hiérarchie des mémoires - caches
l'accès à la mémoire est pénalisant (lent par rapport à l'horloge de la CPU) difficile d'avoir une grande quantité de mémoire à proximité immédiate du processeur pour créer une situation optimisant les ressources disponibles, on utilise le fait que toutes les données ou les instructions ne sont pas accédées avec la même probabilité localité temporelle : si un item a été référencé, il sera probablement référencé encore dans un court laps de temps localité spatiale : si un item a été référencé, les items voisins le seront probablement aussi la mémoire disponible sera organisée en plusieurs couches suivant une hiérarchie
236
hiérarchie des mémoires
organisation de la mémoire en plusieurs niveaux pour fournir la quantité nécessaire avec la technologie fournissant le meilleur compromis vitesse/coût plus on est « loin » de la CPU, moins on a besoin de vitesse CPU vitesse taille coût technologie mémoire la plus rapide la plus petite la plus chère SRAM mémoire DRAM en 2010 SRAM : 5000$ /GB DRAM : 20$ / GB Flash : 4$ /GB Disque : 0,02$ /GB mémoire la plus lente la plus grande la moins chère disque magnétique, mémoire flash, SDD
237
hiérarchie des mémoires
les mouvements de données ne se font qu'entre niveaux adjacents la quantité minimum transférée est un « bloc » CPU niveau 0 si les données cherchées sont dans le niveau supérieur : « succès » ou « hit » sinon : « échec » ou « miss » (avec pénalité temporelle) la bonne compréhension de la hiérarchie est essentielle pour obtenir les meilleures performances niveau 1 niveau 2
238
hiérarchie des mémoires
La hiérarchie le plus souvent rencontrée CPU mémoire cache mémoire principale disque dans les chemins de données que nous avons utilisés, les mémoires d'instructions et de données sont en fait des caches de la mémoire principale, extérieure à la CPU (sur la carte mère) les points importants pour optimiser la performance : placement du bloc dans le niveau supérieur identification du bloc remplacement du bloc en cas d'échec stratégie d'écriture
239
exemple d'un cache très simple
dans notre exemple les requêtes du processeur sont d'un seul mot les blocs du cache sont constitués d'un seul mot problème : comment savoir si un mot est dans le cache ? si il y est, comment le trouver ? un mot ⇔ un bloc ⇒ facile de savoir si le mot est présent pour placer de façon ordonnée les mots dans le cache, on va faire correspondre la position dans le cache avec l'adresse en mémoire du mot (« direct mapping ») si la taille du cache est une puissance de 2, la position dans le cache sera donnée par les bits de poids faible de l'adresse en mémoire
240
exemple d'un cache très simple
cache à 8 places pour une mémoire de 32 mots 000 001 010 011 100 101 110 111 00000 11111
241
exemple d'un cache très simple
cache à 8 places pour une mémoire de 32 mots 000 001 010 011 100 101 110 111 00001 00101 01001 01101 10001 10101 11001 11101
242
exemple d'un cache très simple
pour savoir si la donnée dans le cache correspond au mot demandé : ajout d'un ensemble de tags au contenu du cache les bits de poids fort de l'adresse mémoire non utilisés pour l'adresse dans le cache plus un bit indiquant si le contenu du cache est valide (adresse cache déjà utilisée pour une donnée mémoire) état du cache TD
243
taille du cache adresse du mot cherché codée sur 32 bits
les 2 derniers bits sont 00 (on adresse des octets) les blocs peuvent contenir plusieurs mots pour un cache de 2n blocs, chacun contenant 2m mots (2m+2 octets) n bits pour identifier l'index des blocs 32 – (n+m+2) bits pour le tag + 1 bit de validation nombre de bits dans le cache = n x (taille du bloc + taille du tag + 1)
244
accès au cache pour un cache de 1024 blocs de 1 mot
… … = Tag 20 Données 32 10 Index Hit 1 1022 1023 1021 Index V Tag Données ...
245
accès au cache dans le cas d'un échec du cache, la procédure pour accéder à la donnée dans le niveau suivant de la hiérarchie est complexe, nécessitant, entre autres, des blocages du pipeline hors du champ de ce cours...
246
accès au cache en écriture
contrainte : garder la cohérence entre le contenu du cache et le contenu de la mémoire plusieurs stratégies possibles : écrire systématiquement dans le cache et aussi dans la mémoire (write-through) peut ralentir considérablement le processeur écrire dans le cache et dans un buffer et vider le buffer dans la mémoire par un système indépendant les performances vont dépendre de la vitesse d'accès à la mémoire en écriture vis-à-vis du taux d'opérations d'écriture que génère le processeut n'écrire que dans le cache et vider le cache dans la mémoire uniquement quand le bloc doit être remplacé (write-back) complexe à gérer
247
Conclusions on a vu comment implémenter un processeur « simple » dans différentes configurations d'exécution cycle unique multi-cycles pipeliné même pour cette architecture simple, l'obtention de meilleures performances se fait au prix d'une complexité accrue, en particulier pour les opérations de contrôle la compréhension du fonctionnement interne du processeur peut aider à optimiser la façon de programmer en particulier pour les accès aux données
248
à suivre... Périphériques
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.