Title: Etienne Tremblay
1Etienne Tremblay
- Ordinateurs, Structure et Applications
GIF-16116
Cours 5, Introduction aux microprocesseurs
Université Laval, Hiver 2007
2Intro à larchitecture des microprocesseurs
- Larchitecture dun CPU est lorganisation de
lensemble des composantes du CPU qui lui
permettent daller chercher et dexécuter des
instructions. Ces composantes et leur
organisation diffèrent pour chaque CPU les CPU
peuvent adresser la mémoire de différentes façons
(modes dadressages), ils gèrent les accès
mémoires différemment (ex. caches et pagination),
chaque CPU avait son propre jeu dinstruction,
etc. Tout cela fait parti de larchitecture dun
CPU. - Dans le cours 2, nous avons vu que le CPU était
responsable daller chercher les instructions en
mémoire et de les exécuter. Ces notes de cours
montrent dabord un exemple de CPU très simples
qui accomplit ces tâches. Ensuite, quelques
caractéristiques des CPUs modernes sont
présentées, Le tout, étant une introduction à la
microprogrammation et à larchitecture des
microprocesseurs.
3Programmes, instructions et u-instruction
- Un programme est un ensemble dinstructions
effectuant une tâche donnée, déterminée par le
programmeur. - Une instruction est constituée de deux parties
lopcode (code op en français) et des données
dont le format et la taille dépendent de
lopcode. Lopcode détermine la tâche que doit
faire le CPU afin dexécuter linstruction. Par
exemple, il y aura un opcode pour dire au CPU
deffectuer une addition. Les données reliées à
cet opcode indiqueront quels éléments doivent
être additionnés. - Une instruction est vue par le CPU comme un
ensemble de micro-instructions (u-instruction).
Une u-instruction est donc une partie logique
dune instruction. En dautres mots, on dit
quune instruction est un microprogramme et que
la microprogrammation est la création de
séquences de u-instructions afin de réaliser des
instructions.
4Un exemple de CPU, illustration (1/4)
5Un exemple de CPU, registres (2/4)
- Le CPU en exemple a plusieurs registres. Comme
dans le cours 2, il a PC, MAR,MDR, et IR. Il a
aussi des registres à lusage de lALU (Regs et
ACC). - PC est le Program Counter. Des lignes de contrôle
provenant du CCU permettent de lincrémenté ou de
le mettre sur le bus interne. - MAR (Memory Address Register) peut prendre la
valeur sur le bus interne et la transférer sur le
bus dadresse. - MDR (Memory Data Register) est un tampon où sont
emmagasiné les données provenant du bus de
données. Il est possible décrire ou lire MDR,
échangeant ainsi des données du bus de contrôle
au bus interne ou vice versa. - IR est lInstruction Register. Il contient la
prochaine instruction que devra exécuter le CPU.
Il est possible de charger sa valeur à partir du
bus interne. - LACC ou accumulateur contient le résultat de
toute opération de lALU. Il est possible de
mettre le contenu de lACC sur le bus interne ou
de lécrire dans un des registres de lALU. - Les registres de lALU (Regs) sont des registres
de travail très rapide à usage temporaire. Leur
rôle est de permettre au CPU de faire des
opérations mathématiques relativement complexes
en évitant de faire des accès à la mémoire.
6Un exemple de CPU, ALU (3/4)
- Le CPU en exemple a un ALU très simple. Cet ALU a
deux entrées (A et B) et une sortie, Deux
multiplexeurs (MUX_A et MUX_B) contrôlés par le
CCU détermine quelles seront les entrées. Le CCU
détermine également quelle sera lopération
effectuée par lALU (, -, , ). Le résultat de
lopération se retrouve toujours dans
laccumulateur. À partir de là, il peut être
propager dans les registres de travail de lALU,
sur le bus interne, ou à lentrée (B) de lALU.
Voici quelques détails supplémentaires sur lALU - Si on suppose 6 registres de travail interne (R0,
R1, R2, R3, R4 et R5), il faut 3 lignes de
contrôle provenant du CCU pour MUX_A et 3 lignes
pour MUX_B (MUX_A Select et MUX_B Select). En
effet, chaque MUX a 8 entrées possibles et 23
8 (6 Regs 0 Acc ou Bus interne). - Si on suppose que lALU peut effectuer 16
opérations, il faut 4 lignes de contrôles pour
déterminer ce que fera lALU (Function Select). - Les lignes de contrôles branchées sur les
registres de travail et laccumulateur
détermineront où se retrouvera le résultat dune
opération de lALU.
7Un exemple de CPU, CCU (4/4)
- Le CPU en exemple a un CCU rudimentaire. Il opère
de la façon suivante - Lorsque quune instruction est chargée dans le
registre dinstruction (IR), un mapping program
détermine lemplacement de la première
u-instruction à effectuer pour effectuer
linstruction. Lopcode de linstruction sert
dentrée au mapping prom. La sortie est
simplement un numéro de u-instruction à
effectuer. - Un compteur (Counter) détermine quelle sera la
prochaine u-instruction à faire. La valeur
initiale de ce compteur provient de lopcode de
linstruction via le mapping prom. Par la suite,
le compteur est incrémenté à chaque coup
dhorloge, changeant lu-instruction en cours. - Lu-instruction PROM est une mémoire contrôlant
lensemble du CPU. Pour chaque numéro
du-instruction à lentrée, il existe un ensemble
de valeurs prédéterminées pour toutes les lignes
de contrôle du CPU à la sortie. Autrement dit, le
nombre à lentrée de ce PROM déterminera si les
registres sont chargés ou lus, quelle sera
lopération effectuée par lALU et quels sera la
valeur de certaines lignes du bus de contrôle.
Les lignes de contrôles (ou mot de contrôle) sont
représentées par des o dans lexemple. Elles
partent toutes du CCU et elles se rendent au
diverses composantes du CPU. - Les u-instructions sont crées de telle sorte
quau moins une u-instruction par instruction
recharge lIR et, ensuite, recharge le compteur
dinstruction.
8Microprogramme pour addition (1/3)
9Microprogramme pour addition (2/3)
- Supposons un programme qui contient la ligne code
ZZ Y en langage C. Supposons, que le PC
du CPU indique que cette ligne de code soit la
prochaine à être exécuter. Supposons aussi que Z
et Y sont des variables situées à un emplacement
précis dune mémoire reliées au CPU. Voici ce que
le CPU en exemple fera pour exécuter la tâche
demandée - Découpons dabord la ligne de code en
instructions. La table précédente montre que
ZZY se découpe en trois instructions de
notre CPU. Chaque instruction se découpe
elle-même en u-instructions qui vont dabord
charger linstruction à exécuter selon le PC,
exécuter linstruction, puis passer à la
prochaine instruction. - Donc, la première chose faite par le CPU sera
daller chercher linstruction MOV ACC,Y en
mémoire. Ceci est réalisé en mettant le PC sur le
bus dadresse (PC-gtMAR) et en activant les ligne
de lecture de la mémoire (les deux tâches sont
effectuées dans la même u-instruction). - Ensuite, le contenu du bus de donnée
(linstruction elle-même!) est transféré dans le
registre dinstruction (MDR-gtIR) par une
micro-instruction. On peut assumer que le
compteur de u-instruction sera chargé par la même
instruction. - Linstruction est décodée par le mapping prom du
CPU et le bus dadresse est changé pour aller
chercher Y (IRadresse de Y -gt MAR). On notera
que ladresse de Y était indiquées dans
linstruction. Il sagit dun paramètre
accompagnant lopcode pour linstruction MOV
ACC,Y . - La valeur de Y est mise dans laccumulateur
(MDR-gtA). Cette u-instruction sera
vraisemblablement exécutée en reliant lentrée A
de lALU au bus interne et lentrée B de lALU à
0.
10Microprogramme pour addition (3/3)
- Maintenant que Y est mis dans laccumulateur, il
faut aller chercher la prochaine instruction à
effectuer. Pour cela, il faut incrémenter le PC.
Cela est fait par une u-instruction - La première instruction est terminée. Il faut
aller chercher et exécuter la seconde instruction
ADD ACC,Y . Le tout se déroule comme pour la
première instruction, sauf pour les entrées de
lALU elles deviennent le bus interne et lACC à
la place de bus interne et 0. La fonction de
lALU choisie est laddition. - La troisième instruction est exécuté en exécutant
5 u-instructions qui ressemblent aux
u-instructions de la deuxième u-instruction. Vers
la fin de linstruction, la micro-instruction
A-gtMDR-gtZ change la valeur de Z puisque ladresse
de Z est dans le MAR. La ligne de code est ainsi
complétée. - Une autre instruction est obtenue de la mémoire
et le cycle de fetch/execute recommence
11Microprogramme pour addition (Annexe)
- Les figures de cette acétate montrent les
micro-instructions et les lignes de contrôle pour
linstruction MOV ACC, Y , ainsi quune autre
représentation de lALU.
12Améliorations du CPU en exemple
- Le CPU en exemple est très très rudimentaire et
il comporte certaines lacunes (Ce nest quun
exemple pour illustrer le concept!). Il existe
une multitude daméliorations possibles. En voici
une liste assurément incomplète - Permettre les branchements inconditionnels et
conditionnels. - Permettre les interruptions.
- Ajouter un pipeline.
- Gérer les cas spéciaux de lALU (exemple
division par zéro). - Optimiser et améliorer lALU.
- Ajouter une pile pour pouvoir appeler des
u-fonctions. - Traiter un jeu dinstruction plus complexe et
mettre un buffer dinstruction plus grand. - etc.
- Pour voir comment serait implémenter certaines de
ces améliorations, voir http//www10.dacafe.com/b
ook/parse_book.php?articleBITSLICE/bitslcP.html. - Les acétates qui suivent présentent certaines
améliorations possibles sans entrer dans les
détails dimplémentation!
13CISC et RISC
- Il existe plusieurs approches pour la conception
dun CPU et de son jeu dinstruction. Ces
approches influencent chaque aspect du design de
larchitecture dun CPU. Les principales
approches utilisées à ce jour sont CISC et RISC. - Le CISC (Complex Instruction Set Computer)
consiste à construire un CPU avec un jeu
dinstructions complexe dont la longueur (des
instructions) varie. Comme les instructions
peuvent être longues et complexes, peu de
registres sont requis. Exemple 8086 et Pentium. - Le RISC (Reduced Instruction Set Competer)
consiste à construire un jeu dinstructions dont
la longueur est fixe. Chaque instruction a la
même taille (ex. 4bytes) et plusieurs registres
sont requis pour exécuter des tâches complexes.
Exemple PowerPC.
14Comparaison CISC et RISC
- 10 instructions représentent environ 70 des
instructions utilisés par un microprocesseur un
jeu dinstruction complexe est rarement requis. - Plusieurs registres permettent déviter les accès
mémoires et daccélérer la vitesse du
microprocesseur. - Beaucoup de temps de calcul est requis pour
appeler et revenir de procédures qui sont de plus
en plus fréquentes dans un programme modulaire.
Plusieurs registres est un avantage de ce côté
(passage de paramètres par registre par exemple) - Comme la longueur des instructions des
processeurs RISC est fixe, les opérations de
fetch et execute sont facilités le pipelinage
est simplifié (voir plus loin), les opérandes de
chaque instructions ont toujours la même
position, la manipulation du pointeur sur les
instructions est plus simple, etc. - Les programmes fait pour une architecture RISC
sont généralement un peu plus gros que ceux pour
une architecture CISC certaines instructions
complexes requièrent plusieurs instructions
simples pour être exécutées. - Les CPUs RISC et CISC modernes ont des
performances comparables les instructions RISC
sont devenues plus complexes et les processeurs
CISC ont plus de registres.
15Fecth and Execute Timing
- Le processus de Fetch and Execute peut se
découper en plusieurs étapes qui prennent un
temps fini - Aller chercher linstruction en mémoire (Fetch)
- Décoder linstruction (Decode)
- Exécuter linstruction (Execute)
- Écrire le résultat de linstruction (Write back)
- Exécuter une instruction peut prendre plusieurs
coups dhorloge en fonction du temps requis pour
chacune de ces étapes. Par exemple, le 8086
prends 6 coups dhorloge pour aller chercher une
instruction en mémoire! - Chaque étape du processus de Fetch et Execute
peut être faite par des circuits spécialisés et
indépendants.
16Pipelining
- Le pipelinage est une technique qui consiste
à exécuter plusieurs instructions simultanément - Pendant quune instruction est cherchée en
mémoire (fetch), le CPU avec pipeline peut
décoder une autre instruction, exécuter une
troisième instruction et écrire le résultat dune
quatrième instruction Plus le processus de Fetch
et Execute est découpé en petites tâches
individuelles, plus dinstructions peuvent être
exécutées simultanément. - Pour quun pipeline fonctionne, il faut que
chaque étape du Fetch N Execute sexécute à
lintérieur dun temps fini (habituellement un
cycle dhorloge). - Le pipelinage permet une accélération
substantielle de lexécution des programmes.
Toutefois, cette technique fait surgir plusieurs
problèmes. Par exemples il ne faut pas exécuter
une instruction avant que toutes les données
requises pour cette instructions ne soient
présentes les énoncés conditionnels rompent la
séquence des instructions lors dune
interruption il faut attendre que la pipeline se
vide, etc - Habituellement, plusieurs instructions sont
chargées dans CPU en avance.
17Pipelining (2)
Tiré de Irv Englander, p.216
18Scalar et Superscalar
Un CPU scalaire exécute 1 instruction par cycle
dhorloge grâce à sa pipeline. Un CPU
superscalaire peut exécuter plus dune
instructions par seconde grâce à plusieurs
pipelines en parallèles.
Tiré de Irv Englander, p.217
19Branch et pipeline
- Avec une pipeline, un CPU exécute plusieurs
instructions simultanément. Il doit utiliser
plusieurs instructions consécutives en mémoire.
Quelle est linstruction qui suit un saut
conditionnel (appelé BRANCH, JNZ par exemple pour
le 8086)? - Afin de gérer les sauts conditionnels, le CPU
tente de prévoir si le saut sera effectué. Il
exécute les instructions quil prévoit être les
suivantes. - Si le CPU se trompe, beaucoup de processeur est
perdu, car la pipeline doit être vidée. Si le CPU
a raison toutefois, les instructions sont
exécutées comme sil ny avait pas eu de branch. - Il existe des alternatives de design à ce
problème par exemple il est possible de rouler 2
pipeline en parallèle et de choisir, après
évaluation du saut conditionnel quelle est la
bonne pipeline. - Il existe aussi des outils qui aident à prévoir
le résultat du prochain saut conditionnel. Par
exemple, il peut y avoir une table historique des
résultats des énoncés conditionnels.
20Modern CPU block diagram (1)
Tiré de Irv Englander p.221
21Modern CPU block diagram (2)
- Un CPU moderne contient plusieurs circuits vus
dans les acétates et les cours précédents - Bus Interface Unit Permet dAccéder aux BUS de
données, dadresse et de contrôle. - Cache and Memory management unit Gère les
caches, la mémoire et la mémoire virtuelle. - Instruction Unit Gère lacquisition, le décodage
et lexécution des instructions. - Branch processing unit Gère les branchement pour
le pipelinage. - Load/Store unit Sauvegarde et lit des données ou
des résultats. - Floating point Contient des registres spéciaux
et une unité de calcul spécial pour traiter les
fractions (ALU). - Registres Contient tous les registres du CPU.
- Integer Contient une unité de calcul pour les
entiers (ALU). - Completion unit Termine une instruction
provenant de la pipeline.
22Références et exercices
- Références
- Irv Englander, sections 7.2, 8.1 et 8.4
- http//www10.dacafe.com/book/parse_book.php?articl
eBITSLICE/bitslcP.html - William Stallings Débuts des chapitres 16 et 17.
- Exercices
- Décrivez les micro étapes réalisées afin de faire
une instruction. - Lisez les chapitres 1 et 2 de Bit-Slice Design,
Controllers and ALUs de D. E. White (voir la
deuxième référence!). - Quelle est la différence entre CISC et RISC?
- Quest quun microprocesseur superscalaire?
- Quelles sont les différentes composantes dun
CPU moderne? - Quest-ce que le pipelinage?