Vous êtes sur la page 1sur 32

Chapitre

Le microprocesseur
2
Un microprocesseur est un circuit intégré complexe caractérisé par une très
grande intégration et doté des facultés d'interprétation et d'exécution des instructions d'un programme.
Il est chargé d’organiser les tâches précisées par le programme et d’assurer leur exécution. Il doit
aussi prendre en compte les informations extérieures au système et assurer leur traitement. C’est le
cerveau du système.
A l’heure actuelle, un microprocesseur regroupe sur quelques millimètre carré des
fonctionnalités toujours plus complexes. Leur puissance continue de s’accroître et leur encombrement
diminue régulièrement respectant toujours, pour le moment, la fameuse loi de Moore (1).

1 Architecture de base d’un microprocesseur Un


microprocesseur est construit autour de deux éléments principaux :

Une unité de commande


Une unité de traitement

associés à des registres chargées de stocker les différentes informations à traiter. Ces trois éléments
sont reliés entre eux par des bus interne permettant les échanges d’informations.

Bus d’adresses

Programme
Unité de Unité de
traitement commande

Données

Bus de données

Remarques :
Il existe deux types de registres :

les registres d'usage général permettent à l'unité de traitement de manipuler des


données à vitesse élevée. Ils sont connectés au bus données interne au
microprocesseur.
les registres d'adresses (pointeurs) connectés sur le bus adresses.

4.1.1 L’unité de commande


Elle permet de séquencer le déroulement des instructions. Elle effectue la recherche en
mémoire de l'instruction. Comme chaque instruction est codée sous forme binaire, elle en assure le
décodage pour enfin réaliser son exécution puis effectue la préparation de l'instruction suivante. Pour
cela, elle est composée par :

le compteur de programme constitué par un registre dont le contenu est initialisé avec
l'adresse de la première instruction du programme. Il contient toujours l’adresse de
l’instruction à exécuter.

(1) Moore (un des co-fondateurs de la société Intel) a émis l'hypothèse que les capacités technologiques permettraient de
multiplier par 2 tous les 18 mois le nombre de transistors intégrés sur les circuits.
1.1 L’unité de commande

a) Rôle

L’unité de commande a pour rôle de gérer le bon déroulement du programme. Elle doit donc
prendre en compte, les unes après les autres, chacune des instructions ; décoder l’instruction
en cours, lancer les ordres (micro-commandes) aux composants du système qui participent à
la réalisation de cette instruction ; puis aller chercher une nouvelle instruction et
recommencer.

Pour cela l’unité de commande est constituée d’un certain nombre de composants internes qui
assurent chacun une fonction bien déterminée.

b) Composants de l’unité de commande

> Le registre instruction

L’instruction que l’unité de commande va devoir traiter est chargée préalablement dans un
registre particulier appelé registre instruction.

> Le séquenceur

En fonction de l’instruction à traiter – qui vient d’être chargée dans le registre instruction –
l’unité de commande va devoir émettre un certain nombre de microcommandes vers les
autres composants du système.

Ces ordres ne devront bien évidemment pas être émis n’importe quand, ni vers n’importe quel
composants, mais respecter une chronologie bien précise selon le type d’instruction à
exécuter. Cette chronologie (ce séquencement) est rythmée par une horloge interne au
système, quartz oscillant à une fréquence comprise à l’heure actuelle entre 2 et 3.2 GHz. On
comprend intuitivement que plus cette fréquence est élevée et plus l’unité centrale de
traitement travaille « vite » -- mais ce n’est pas le seul facteur de rapidité.

Le composant qui émet ces microcommandes (en fonction du code opération (préalablement
décodé) de l’instruction située dans le registre instruction) est le séquenceur, qui comme son
nom le laisse entendre, envoie une séquence de microcommandes vers les composants
impliqués par l’instruction.

Pour exécuter correctement son travail, le séquenceur doit, en outre, connaître l’état d’un
certain nombre d’autres composants et disposer d’informations concernant la ou les
opérations qui ont déjà été exécutées (par exemple, doit-on tenir compte dans l’addition en
cours d’une éventuelle retenue préalable générée par une addition précédente). La
connaissance de ces informations se fait à l’aide d’un autre composant appelé registre
indicateur ou, plus couramment registre d’état, et qui, grâce à des indicateurs (drapeaux ou
flags), qui ne sont en fait que des registres de bascules, mémorisera certaines informations
telles que retenue préalable, imparité, résultat nul, etc.

> Le compteur ordinal

Quand le séquenceur a fini de générer les microcommandes nécessaires, il faut qu’il


déclenche le chargement, dans le registre instruction, d’une nouvelle instruction. Pour cela il
dispose d’un registre « compteur d’instructions » (qui serait plutôt un « pointeur »
d’instructions).

Ce registre porte le nom de compteur ordinal (Program Counter ou Instruction Pointer). Il


s’agit d’un registre spécialisé, qui est chargé automatiquement par le système lors du
lancement d’un programme, avec l’adresse mémoire de la première instruction du
programme à exécuter.

Par la suite, à chaque fois qu’une instruction a été chargée dans le registre instruction et
qu’elle s’apprête à être exécutée, ce compteur ordinal est incrémenté (augmenté) de manière
à pointer sur l’adresse de la prochaine instruction à exécuter.
le registre d'instruction et le décodeur d'instruction : chacune des instructions à exécuter
est rangée dans le registre instruction puis est décodée par le décodeur d’instruction.

Bloc logique de commande (ou séquenceur) : Il organise l'exécution des instructions au


rythme d’une horloge. Il élabore tous les signaux de synchronisation internes ou externes (bus
de commande) du microprocesseur en fonction des divers signaux de commande provenant
du décodeur d’instruction ou du registre d’état par exemple. Il s'agit d'un automate réalisé soit
de façon câblée (obsolète), soit de façon micro-programmée, on parle alors de micro-
microprocesseur.

1.2 L’unité de traitement


C’est le cœur du microprocesseur. Elle regroupe les circuits qui assurent les traitements nécessaires
à l'exécution des instructions :

L’Unité Arithmétique et Logique (UAL) est un circuit complexe qui assure les fonctions
logiques (ET, OU, Comparaison, Décalage , etc…) ou arithmétique (Addition, soustraction).

Le registre d'état est généralement composé de 8 bits à considérer individuellement. Chacun


de ces bits est un indicateur dont l'état dépend du résultat de la dernière opération effectuée
par l’UAL. On les appelle indicateur d’état ou flag ou drapeaux. Dans un programme le
résultat du test de leur état conditionne souvent le déroulement de la suite du programme. On
peut citer par exemple les indicateurs de :
o retenue (carry : C)
o retenue intermédiaire (Auxiliary-Carry : AC)
o signe (Sign : S)
o débordement (overflow : OV ou V)
o zéro (Z)
o parité (Parity : P)

Les accumulateurs sont des registres de travail qui servent à stocker une opérande au début
d'une opération arithmétique et le résultat à la fin de l'opération.

1.3 Schéma fonctionnel

Bus d’adresses

Registre d’@

Acc.

Registre PC
d’états
Programme
UAL Bus de
commande
Bloc logique de commande

Données
Registre Décodeur
d’instruction d’instruction

Registre Données

Bus de données
2. Cycle d’exécution d’une instruction
Le microprocesseur ne comprend qu’un certain nombre d’instructions qui sont codées en
binaire. Le traitement d’une instruction peut être décomposé en trois phases.

Phase 1: Recherche de l'instruction à traiter

1. Le PC contient l'adresse de l'instruction suivante du programme. Cette valeur est placée sur le
bus d'adresses par l'unité de commande qui émet un ordre de lecture.
2. Au bout d'un certain temps (temps d'accès à la mémoire), le contenu de la case mémoire
sélectionnée est disponible sur le bus des données.
3. L'instruction est stockée dans le registre instruction du processeur.

1
microprocesseur
PC $2000 mémoire
@ $2000
$2000 Instr. 1
RI Instr. 1
$2001 Opér. 1
3
$2002 Instr. 2
Décodeur
d’instruction $2003 Instr. 3
2
$2004

Inst. 1
$FFFF

Phase 2 : Décodage de l’instruction et recherche de l'opérande

Le registre d'instruction contient maintenant le premier mot de l'instruction qui peut être codée sur
plusieurs mots. Ce premier mot contient le code opératoire qui définit la nature de l'opération à
effectuer (addition, rotation,...) et le nombre de mots de l'instruction.

1. L'unité de commande transforme l'instruction en une suite de commandes élémentaires


nécessaires au traitement de l'instruction.
2. Si l'instruction nécessite une donnée en provenance de la mémoire, l'unité de commande
récupère sa valeur sur le bus de données.
3. L’opérande est stockée dans un registre.
2
microprocesseur
PC $2000 mémoire
Bloc @ $2001
logique de $2000 Instr. 1
commande Instr. 1
RI $2001 Opér. 1

$2002 Instr. 2
Décodeur
d’instruction $2003 Instr. 3

1 $2004
UAL

Opér. 2 Opér. 1 Opér. 1


$FFFF

Phase 3 : Exécution de l'instruction

1. Le micro-programme réalisant l'instruction est exécuté.


2. Les drapeaux sont positionnés (registre d'état).
3. L'unité de commande positionne le PC pour l'instruction suivante.

microprocesseur
PC $2002 mémoire
Bloc
logique de 3 $2000 Instr. 1
commande Instr. 1
RI $2001 Opér. 1

$2002 Instr. 2
Décodeur
d’instruction $2003 Instr. 3

$2004
UAL Z=1 C=0 …

1 2

Result. Opér. 1
$FFFF
3. Les instructions-machine.

L'ordinateur exécute des instructions codées en langage machine. La syntaxe de ce langage


permet de constituer des chaînes de valeurs binaires qui sont analysées puis exécutées par l'unité
centrale. Le langage machine est le langage formé d’instructions constituant le répertoire d'une
machine donnée. C'est donc dire que chaque machine a son propre langage machine.

Notons que le langage machine est le seul langage directement assimilable par un ordinateur.

Les difficultés de programmation directe en langage machine ont cependant conduit à concevoir
des langages s'éloignant peu à peu de la machine réelle: langages d'assemblage d'abord (de bas
niveau), jusqu'aux langages dits évolués (FORTRAN, COBOL, PASCAL, C, ...). Ces langages
évolués sont traduits par des compilateurs et des éditeurs de lien pour former des versions
exécutables en langage machine, donc des suites d'instructions machine.

Les instructions machine sont réparties selon les types suivants:


¾ instructions de traitement ayant pour fonction d'effectuer les opérations arithmétiques et
logiques
¾ instructions d'échange permettant le transfert des données entre la mémoire et les unités
périphériques
¾ instructions de rupture de séquence ayant pour rôle de modifier la séquence de déroulement
des instructions.

En général, les instructions renferment les informations suivantes:


¾ le code opération
¾ un ou des opérandes
¾ l'endroit où doit être rangé le résultat.

Elles peuvent aussi indiquer l'adresse de la prochaine instruction.

Si le langage machine peut être différent d'une machine à une autre, c'est que certaines
caractéristiques des instructions peuvent varier, entre autres:

¾ La longueur de l'instruction (nombre de bits).


¾ Le nombre d'opérandes.
¾ La longueur de chaque opérande.
¾ La longueur du code d'opération.
¾ La nature des opérations possibles.

Le constructeur de la machine doit donc faire plusieurs choix. Ces choix sont en relation avec
d'autres choix qui déterminent d'autres caractéristiques d'une machine, par exemple la capacité de
la mémoire, la longueur des mots mémoire, le débit binaire des unités, etc. Ainsi, la longueur de
l'instruction détermine le nombre de mots machine qui seront nécessaires pour la stocker.

1
La façon dont le nombre de bits qui forment l'instruction est réparti entre le code opération et les
opérandes est aussi capitale: chaque opérande doit avoir une longueur suffisante pour que toutes
les cellules mémoire soient accessibles et la longueur du code d'opération détermine le nombre
d'instructions disponibles. Nous verrons plus les répercussions de cette répartition des bits sur la
puissance et la capacité d'une machine.

Enfin, le nombre d'opérandes peut varier, ce qui suppose des différences de fonctionnement
considérables. Nous examinerons des exemples d'instructions à 4, 3, 2, 1 et même 0 opérandes.
Notons qu'une même machine peut avoir plusieurs formats d'instruction différents.

3.1. Format général d'une instruction.

Le schéma suivant montre le format général d'une instruction à trois opérandes

CODE SPÉCIFICATEUR SPÉCIFICATEUR SPÉCIFICATEUR


OPÉRATION D'OPÉRANDE D'OPÉRANDE D'OPÉRANDE

n-3m bits m bits m bits m bits

n bits

.
Cette instruction comporte un code d'opération, et 3 "spécificateurs d'opérande". Une instruction
peut en contenir 0, 1 ou plusieurs spécificateurs d'opérande, en général des adresses d'opérande.
C'est donc dire que cette instruction contient 3 adresses et un code d'opération. Toutes les
adresses doivent avoir la même longueur (m bits dans le schéma). Si l'instruction est codée sur n
bits, il reste donc:

n bits - 3m bits (l'espace occupé par les adresses) pour le code d'opération.

Cela signifie que:

¾ si chaque adresse est codée sur m bits, une adresse peut faire référence à 2m cellules
différentes (en mode d'adressage direct), soient les cellules dont l'adresse est comprise entre
0 et 2m-1.
¾ si le code opération est codé sur k bits (n - 3m bits), l'ordinateur pourra avoir 2k opérations
différentes.

3.2. Répertoire d'instructions.

L'ensemble des instructions qu'une machine peut exécuter constitue son répertoire d'instructions
ou jeu d'instructions. Le choix des instructions et leur nombre dépend naturellement du type de
travail que l'ordinateur aura à exécuter: plus le travail est diversifié et complexe, plus la liste a de
chances d'être longue et l'ordinateur coûteux car l'implantation de la plupart des opérations est
faite de façon câblée (électroniquement).

2
La longueur du code opération détermine le nombre d'opérations différentes qui constituent le
répertoire. Plus le code opération est court, plus le répertoire sera limité. Il doit cependant
contenir au moins une instruction pour
¾ communiquer avec l'extérieur
¾ entrer et sortir des données
¾ effectuer une rupture de séquence ou un test
À l'inverse, plus le code opération est long, plus le répertoire d'instruction de la machine est
grand, ce qui permet d'ajouter au répertoire de base d'autres instructions plus sophistiquées, et par
le fait-même, d'en accroître la complexité.

Le constructeur se retrouve ici encore devant des choix à faire: il doit trouver un équilibre entre la
sophistication et la simplicité. Ces choix ont des répercussions énormes sur l'architecture de la
machine et sur son coût. En effet, le choix des instructions et leur nombre fixe de façon définitive
la structure de l'unité de contrôle et celle de l'unité de calcul; on ne peut modifier le répertoire
d'instructions une fois l'ordinateur construit.

3.2.1. Exemple d'un répertoire d'instructions.

Voici un répertoire d'instructions très simple. Les instructions de cette machine fictive sont
codées sur 18 bits répartis de la façon suivante:

CODE ADRESSE DU ADRESSE DU ADRESSE DU


OPÉRATION 1er OPÉRANDE 2e OPÉRANDE 3e OPÉRANDE

3 bits 5 bits 5 bits 5 bits

18 bits

Les 3 bits du code d'opération permettent de disposer de 8 instructions différentes. Le répertoire


pourrait être le suivant:

Tableau 1

CODE OPÉRATION MNÉMONIQUE SIGNIFICATION


000 Addition ADD C Å (A) + (B)
001 Soustraction SOU C Å (A) - (B)
010 Initialisation INI Si A ≠ 0 alors A Å C
Si B ≠ 0 alors B Å 1
Si C ≠ 0 alors C Å 2
Rupture
011 Conditionnelle EGU Si (A) = (B) alors
compteur ordinal Å C

3
Rupture
100 Inconditionnelle RUP compteur ordinal Å C
Lire un nombre octal et le ranger dans
101 Lecture LIR A;
si B ≠ 0 en lire un second
si C ≠ 0 en lire un troisième
110 Écriture ECR Imprimer (A);
si B ≠ 0 alors imprimer (B)
si C ≠ 0 alors imprimer (C)
111 Arrêt ARR Ne plus exécuter d'instructions

Dans ce tableau, la première colonne donne le code d'opération binaire (sur 3 bits); chaque
opération est symbolisée par le mnémonique correspondant. Les lettres A, B et C désignent des
adresses symboliques et (A), (B) et (C) désignent le contenu des cellules d'adresses A, B et C (les
adresses effectives). Les affectations sont représentées par Å : C Å (A) signifie de placer à
l'adresse C le contenu de la cellule d'adresse A.

3.2.2. Exemple d'une instruction machine et de son exécution.

Soit l'instruction suivante:

[29] Å [12] + [18]

Il s'agissait de faire l'addition du contenu de la cellule d'adresse 12 et du contenu de la cellule


d'adresse 18 et de ranger le résultat dans la cellule d'adresse 29. Nous pouvons écrire cette
instruction avec le répertoire d'instructions.

Code opération Opérandes

ADD A, B, SOMME

À partir des adresses des opérandes et du code opération, nous pouvons construire l'instruction
machine de la façon suivante:

ADD A, B, Somme

adresse décimale 12 18 29
binaire 000 01100 10010 11101

4
000 011 001 001 011 101
octal 0 3 1 1 3 5

Imaginons que l'instruction machine soit logée à l'adresse Z de la mémoire centrale. Pour que
cette instruction soit exécutée, le travail de l'unité de contrôle s'effectuerait selon la séquence
d'événements suivante:

Au temps T0:
L'unité centrale de traitement traite l'instruction logée à l'adresse Z-1 de la mémoire

Figure 1

5
ADRESSES DONNÉES

MÉMOIRE
12 000010
REGISTRE

•••
D'ADRESSE
18 000004
Ž-1

•••
29

•••
REGISTRE
DE DONNÉES Ž-1 ??????
?????? Ž 031135

UNITÉ CENTRALE DE TRAITEMENT

UNITÉ DE UNITE ARITHMÉTIQUE


CONTROLE ET LOGIQUE

REGISTRE R4
D'INSTRUCTION

?????? R3

DÉCODEUR D'INSTRUCTION R2

R1

REGISTRE DE DONNÉES
COMPTEUR
ORDINAL
SÉQUENCEUR
Ž-1 REGISTRE D'ADRESSE

6
Au temps T1:

9 Le compteur ordinal passe à l'adresse Z.


9 L'instruction logée à l'adresse Z est chargée dans le registre d'instruction de l'unité de
contrôle.
9 L'unité de contrôle commence le décodage.
9 Le séquenceur avertit les unités concernées (ALU, mémoire) et orchestre les opérations
(voir 1 sur figure 16).
9 Dans un premier temps, le décodeur d'adresses transmet la première adresse déchiffrée
(A) à l'ALU (voir 2 sur figure 16)
9 cela permettant à l'ALU de lire le contenu de l'adresse A (3, 4 et 5 sur figure 16)
9 ce contenu est transféré dans le registre de données de l'ALU (6 sur figure 16)
9 pour finalement être rangé dans le registre R2 de l'ALU (7 sur figure 16).

ADRESSES DONNÉES

MÉMOIRE

12 000010
REGISTRE
•••

D'ADRESSE
18 000004 4
12
•••

29
5
•••

REGISTRE 3
DE DONNÉES
Ž-1 ??????
Ž 031135 000010

UNITÉ CENTRALE DE TRAITEMENT


6

UNITÉ DE UNITE ARITHMÉTIQUE


CONTROLE ET LOGIQUE

REGISTRE R4
D'INSTRUCTION

031135 R3

1
DÉCODEUR D'INSTRUCTION 7 R2 000010
ADD 12
R1

REGISTRE DE DONNÉES
COMPTEUR
ORDINAL 000010
SÉQUENCEUR 2
Ž REGISTRE D'ADRESSE
12

Figure 2 1

7
Au temps T2:
9 L'unité de contrôle coordonne le chargement du contenu de l'adresse B dans le registre
R3 de l'ALU:

Figure 17
ADRESSES DONNÉES

MÉMOIRE

12 000010
REGISTRE
•••

D'ADRESSE
18 000004
4 18
•••

29
5
•••

REGISTRE 3
DE DONNÉES
Ž-1 ??????
000004
Ž 031135

UNITÉ CENTRALE DE TRAITEMENT

UNITÉ DE UNITE ARITHMÉTIQUE


CONTROLE ET LOGIQUE

REGISTRE R4
D'INSTRUCTION

031135 7 R3 000004

DÉCODEUR D'INSTRUCTION R2 000010


ADD 12 18
R1
1
REGISTRE DE DONNÉES
COMPTEUR
ORDINAL 000004
SÉQUENCEUR 2
Ž REGISTRE D'ADRESSE
18

8
Au temps T3: (voir figure 18)
9 l'unité de contrôle décode l'adresse de SOMME,
9 l'adresse de SOMME ainsi que le code d'opération sont transmis à l'ALU.
9 L'ALU exécute l'opération à l'aide de son additionneur et range la valeur du résultat dans
le registre R4,
9 la valeur du résultat est copiée dans le registre de données,
9 la valeur du résultat est copiée à l'adresse SOMME de la mémoire.

Figure 3
ADRESSES DONNÉES

MÉMOIRE

12 000010
REGISTRE
•••

D'ADRESSE
18 000004
29
•••

29 000014
•••

REGISTRE
DE DONNÉES
Ž-1 ??????
000014
Ž 031135

UNITÉ CENTRALE DE TRAITEMENT

UNITÉ DE UNITE ARITHMÉTIQUE


CONTROLE ET LOGIQUE

REGISTRE R4 000014
D'INSTRUCTION
031135 R3
ADDITIONNEUR

000004

DÉCODEUR D'INSTRUCTION R2 000010


ADD 12 18 29
R1

REGISTRE DE DONNÉES
COMPTEUR
ORDINAL 000014
SÉQUENCEUR
Ž REGISTRE D'ADRESSE
29

9
3.3 Nombre d'opérandes.

Voyons maintenant les différences de fonctionnement qu'implique un changement du nombre


d'opérandes. Le format des instructions d'une machine peut en effet comporter 4, 3, 2, 1 ou même
0 opérandes. On parle d'instruction à 4, 3, 2, 1 ou 0 adresse.

3.3.1. Instruction à 4 adresses.

Figure 28

CODE ADRESSE DU ADRESSE DU ADRESSE DU ADRESSE


OPÉRATION 1er OPÉRANDE 2e OPÉRANDE 3e OPÉRANDE INSTRUCTION
SUIVANTE

n-4m bits m bits m bits m bits m bits

n bits

Exemple : ADD X, Y, Z, W

L'instruction signifie: (Z) Å (X) + (Y) & (W) c'est à dire:

9 additionner les contenus des cellules de mémoire d'adresse X et Y,


9 placer le résultat de l'addition dans la cellule d'adresse Z,
9 aller chercher la prochaine instruction à la cellule d'adresse W.

Les instructions à 4 adresses sont très rares, car elles sont très longues. Les constructeurs
préfèrent prévoir un compteur ordinal dans l'unité de contrôle qu'un opérande servant à indiquer
l'adresse de la prochaine instruction.

4.2.6.2.Instruction à 3 adresses.

Figure 29

CODE ADRESSE DU ADRESSE DU ADRESSE DU


OPÉRATION 1er OPÉRANDE 2e OPÉRANDE 3e OPÉRANDE

n-3m bits m bits m bits m bits

n bits

.
Ces instructions ont le même format que celles utilisées dans les exemples de programmes vus
précédemment. Un processeur fonctionnant avec de telles instructions localise l'instruction

19
suivante à l'aide d'un registre compteur ordinal. Le compteur ordinal doit comporter m bits de
position, car il est destiné à recevoir des adresses.

3.3.2. Instruction à 2 adresses

Figure 3

CODE ADRESSE DU ADRESSE DU


OPÉRATION 1er OPÉRANDE 2e OPÉRANDE

n-2m bits m bits m bits

n bits

Les instructions à 2 adresses sont les plus courantes. L'adresse du résultat est implicitement
choisie: celui-ci est rangé à l'adresse du 2ième opérande ou à celle du premier opérande selon le
choix fait par le constructeur.

Exemple: L'expression (X) = (A + B * C) / D peut être programmée de la façon suivante:

INSTRUCTION PSEUDO-CODE

MUL B, C (C) Å (B) * (C)


ADD A, C (C) Å (A) + (C)
DIV C, D (D) Å (C) / (D)
MOV D, X (X) Å (D)

Avantages sur les instructions à 3 ou 4 adresses:

1. puissance accrue de la machine, car pour une même longueur d'instruction on a:


a) des opérandes plus longs (donc possibilité de faire référence à plus de cellules de mémoire)
et/ou
b) un code d'opération plus long (donc plus d'instructions différentes dans le répertoire)

2. baisse du coût relié au décodage


3. moins d'accès à la mémoire requis

Pour illustrer ces avantages, reprenons la machine imaginée à la section 2.2. Cette machine avait
des instructions sur 18 bits. Chaque instruction avait 3 opérandes de 5 bits et un code d'opération
sur 3 bits, ce qui lui donnait les caractéristiques suivantes:

nombre de cellules de mémoire adressables: 25 = 32 cellules


nombre d'instructions du répertoire: 23 = 8 instructions

20
Imaginons la même machine, mais avec 2 opérandes au lieu de 3. Les 18 bits de l'instruction
pourraient, par exemple, se répartir ainsi: 2 opérandes de 7 bits et un code d'opération de 4 bits,
ce qui donnerait les caractéristiques suivantes:

nombre de cellules de mémoire adressables: 27 = 128 cellules


nombre d'instructions du répertoire: 24 = 16 instructions

Comme on le constate, le répertoire d'instruction a doublé et le nombre de cellules de mémoire


adressables a quadruplé par rapport à l'instruction à trois adresses.

En fait, dans les instructions à 3 adresses, le 3ème opérande ne sert qu'à indiquer l'adresse de
rangement du résultat, puisque les opérations logiques et arithmétiques s'effectuent sur deux
opérandes à la fois. La suppression du 3ème opérande ne nuit donc pas au travail de l'ALU.
Évidemment, il peut être ennuyeux de perdre la valeur du 2ème opérande en lui substituant le
résultat, mais on peut remédier à cela en faisant une copie du deuxième opérande dans une autre
cellule de mémoire si cette valeur doit être conservée.

3.3.3. Instruction à une adresse

Figure 4

CODE ADRESSE DE
OPÉRATION L' OPÉRANDE

n-m bits m bits

n bits

.
Une instruction à une adresse nécessite non seulement un compteur ordinal, mais aussi un registre
supplémentaire pour stocker temporairement les valeurs intermédiaires pendant le calcul. Ce
registre, appelé accumulateur (ACC.) peut contenir la donnée source ou le résultat du calcul.

Exemple: Le calcul de l'expression (X) = (A + B * C) / D peut être programmé de la façon


suivante:

INSTRUCTIONS SIGNIFICATION

LOAD B ACC. Å (B)


MUL C ACC Å Contenu de l'ACC. + (C)
ADD A ACC Å Contenu de l'ACC. + (A)
DIV D ACC Å Contenu de l'ACC. / (D)
STORE X (X) Å Contenu de l'ACC.

Remarque: Les instructions de rupture inconditionnelle sont un exemple d'instruction à 1


opérande.

21
3.3.4. Instruction à 0 adresse

Le processeur à 0 adresse possède un accumulateur particulier qu'on nomme pile. Une pile est un
rangement par ordre chronologique. Contrairement à un accumulateur ordinaire, placer une
donnée dans une pile ne détruit pas son contenu précédent: celui-ci sera plutôt repoussé au fond
de la pile. Généralement, l'accès aux données se fait dans l'ordre inverse où celles-ci ont été
rangées dans la pile; on désigne souvent ce type d'accès par le sigle anglais LIFO (Last In, First
Out). Cela implique qu'on a accès qu'à la donnée qui est au sommet de la pile (soit la dernière
entrée) ou aux données se trouvant dans des emplacements consécutifs à partir du sommet.

Figure 31

PILE

8 7 6 5 4 3 2 1
8 7 6 5 4 3 2 1
ORDRE DE SORTIE
ORDRE D'ENTRÉE

L'instruction à 0 adresse permet de modifier la pile en effectuant une opération sur les deux
données à partir du sommet, et en plaçant le résultat de l'opération au sommet de la pile.

Exemple: ADD signifie: additionner les valeurs du sommet de la pile et placer le résultat
dans la pile.

Figure 32

valeur de X
ADD valeur de X + valeur de Y
valeur de Y
valeur de Z
valeur de Z

Pour ranger des données dans la pile ou pour les en retirer, on utilise deux instructions :

22
PUSH A: place le contenu de A dans la pile (et pousse les contenus précédents vers le fond de
la pile)

POP A: retire la valeur située au sommet de la pile et la range à l'adresse A (et fait "remonter" les
contenus précédents d'une position vers le sommet)

Exemple: Le calcul de l'expression (R) = ((R) + (Y))/((A) + (B)) peut être programmée de la
façon suivante:

NO. INSTRUCTIONS SIGNIFICATION


1 A Entrer la valeur de A
2 PUSH Placer la valeur de A dans la pile
3 B Entrer la valeur de B
4 PUSH Placer la valeur de B dans la pile
5 ADD Sommet de la pile Å (A) + (B)
6 Y Entrer la valeur de Y
7 PUSH Placer la valeur de Y dans la pile
8 R Entrer la valeur de R
9 PUSH Placer la valeur de R dans la pile
10 ADD Sommet de la pile Å (Y) + (R)
11 DIV Sommet de la pile Å Résultat de la 2ième addition
divisé par Résultat de la 1ière addition
12 POP Sortir la valeur de Sommet de la pile
13 R R Å Sommet de la pile

La figure suivante montre quel est le contenu de la pile après chacune des opérations:

CONTENU DE LA PILE APRES CHAQUE INSTRUCTION

1. 2. 3. 4.
(Y)
(B)

(A) + (B) (A) + (B)


(A) (A)

5. 6. 7.

(R)

(Y) (R) + (Y)

(A) + (B) (R) + (Y)


(A) + (B)
(A) + (B)

23
4. Les modes d’adressage
Les modes d’adressages permettent de déterminer la manière avec laquelle, accéder à une position en
mémoire. Ce qui correspond au calcul de l’adresse effective (EA : Effective Address) de cette position.
L’adresse effective étant le déplacement (offset) de la case mémoire dans le segment.
Voici quelques modes d'adressages:
1- Adressage implicite : L’instruction contient seulement le code opération.
Exemple : NOT AX ; permet de complémenter le contenu du registre AX.

2- Adressage immédiat : La donnée est fournie immédiatement après l’instruction


Exemple : MOV AL, 21h ; permet de transférer 21h dans le registre AL.

3- Adressage d’un registre : La donnée est contenue dans un registre.


Exemple : MOV AX, BX : charge le contenu du registre BX dans le registre AX.

4- Adressage direct ou étendu : L’instruction comporte l’adresse effective de la case mémoire où se


trouve la donnée.
Exemple : MOV BL, [0200h] ; transfère le contenu de la case mémoire d’adresse 0200h vers le registre BL.

5- Adressage indirect par registre ou basé (et basé avec déplacement) : L’offset est contenu dans un registre
de base BX ou BP. EA= (BP) ; EA= (BX) (contenu de BP ou de BX).
Exemples :
- MOV AL, [BX] ; transfère la donnée dont l’offset est contenu dans le registre de base BX vers le registre AL.
Le segment associé par défaut au registre BX est le segment de données DS ;
- MOV AL, ES : [BX] ; transfère dans registre AL, la donnée dont l’offset est contenu dans le registre de base
BX du segment de données supplémentaires ES ;
- MOV AL, [BP] ; le segment par défaut associé au registre de base BP est le segment de pile.
Dans le cas de l’adressage basé avec déplacement, une constante est additionnée au contenu du registre de
base. EA= (BP) + d ; EA= (BX) + d.
Exemple : MOV [BX+100h], AX ; L’adresse effective est donnée par (BX) + 100h.

6- Adressage relatif : L'adresse effective est obtenue en additionnant un déplacement au contenu du


compteur ordinal. Ce type d'adressage est utilisé dans les instructions de saut ou de branchement.
Exemples : JMP 05h ; branchement inconditionnel à l’adresse IP + 05h.
5. Langage de programmation
Le langage machine est le langage
compris par le microprocesseur. Ce langage Langage haut niveau
est difficile à maîtriser puisque chaque (for, if…then, write, etc…)
instruction est codée par une séquence
propre de bits. Afin de faciliter la tâche du compilation
programmeur, on a créé différents langages
plus ou moins évolués. Langage assembleur
Le langage assembleur est le langage (sta, lda, cmp, mov, bra, etc…)
le plus « proche » du langage machine. Il est
composé par des instructions en général assemblage
assez rudimentaires que l’on appelle des
mnémoniques. Ce sont essentiellement des Langage machine
opérations de transfert de données entre les (0001 1101, 1111 0110, etc…)
registres et l'extérieur du microprocesseur
(mémoire ou périphérique), ou des opérations arithmétiques ou logiques. Chaque instruction
représente un code machine différent. Chaque microprocesseur peut posséder un assembleur
différent.
La difficulté de mise en œuvre de ce type de langage, et leur forte dépendance avec la machine
a nécessité la conception de langages de haut niveau, plus adaptés à l'homme, et aux applications
qu'il cherchait à développer. Faisant abstraction de toute architecture de machine, ces langages
permettent l'expression d'algorithmes sous une forme plus facile à apprendre, et à dominer (C, Pascal,
Java, etc…). Chaque instruction en langage de haut niveau correspondra à une succession
d’instructions en langage assembleur. Une fois développé, le programme en langage de haut niveau
n’est donc pas compréhensible par le microprocesseur. Il faut le compiler pour le traduire en
assembleur puis l’assembler pour le convertir en code machine compréhensible par le
microprocesseur. Ces opérations sont réalisées à partir de logiciels spécialisés appelés compilateur et
assembleur.

Exemple de programme :

Code machine ( 68HC11 ) Assembleur ( 68HC11 ) Langage C

@00 C6 64 LDAB #100 A=0 ;


@01 B6 00 LDAA #0 for ( i=1 ; i<101 ; i++) A=A+i ;
@03 1B ret ABA
@04 5A DECB
@05 26 03 BNE ret

Performances d’un microprocesseur


On peut caractériser la puissance d’un microprocesseur par le nombre d’instructions qu’il est
capable de traiter par seconde. Pour cela, on définit :

le CPI (Cycle Par Instruction) qui représente le nombre moyen de cycles d’horloge
nécessaire pour l’exécution d’une instruction pour un microprocesseur donné.

le MIPS (Millions d'Instructions Par Seconde) qui représente la puissance de


traitement du microprocesseur.

FH avec FH en MHz
MIPS=
CPI
Pour augmenter les performances d’un microprocesseur, on peut donc soit augmenter la fréquence
d'horloge (limitation matérielle), soit diminuer le CPI (choix d'un jeu d'instruction adapté).

6. Notion d’architecture RISC et CISC


Actuellement l’architecture des microprocesseurs se composent de deux grandes familles :

L’ architecture CISC (Complex Instruction Set Computer)


L’architecture RISC (Reduced Instruction Set Computer)

6.1 L’architecture CISC

6.1.1 Pourquoi
Par le passé la conception de machines CISC était la seule envisageable. En effet, vue que la
mémoire travaillait très lentement par rapport au processeur, on pensait qu’il était plus intéressant de
soumettre au microprocesseur des instructions complexes. Ainsi, plutôt que de coder une opération
complexe par plusieurs instructions plus petites (qui demanderaient autant d’accès mémoire très lent),
il semblait préférable d’ajouter au jeu d’instructions du microprocesseur une instruction complexe qui
se chargerait de réaliser cette opération. De plus, le développement des langages de haut niveau
posa de nombreux problèmes quant à la conception de compilateurs. On a donc eu tendance à
incorporer au niveau processeur des instructions plus proches de la structure de ces langages.

6.1.2 Comment
C’est donc une architecture avec un grand nombre d’instructions où le microprocesseur doit
exécuter des tâches complexes par instruction unique. Pour une tâche donnée, une machine CISC
exécute ainsi un petit nombre d’instructions mais chacune nécessite un plus grand nombre de cycles
d’horloge. Le code machine de ces instructions varie d’une instruction à l’autre et nécessite donc un
décodeur complexe (micro-code)

6.2 L’architecture RISC

6.2.1 Pourquoi
Des études statistiques menées au cours des années 70 ont clairement montré que les
programmes générés par les compilateurs se contentaient le plus souvent d'affectations, d'additions et
de multiplications par des constantes. Ainsi, 80% des traitements des langages de haut niveau
faisaient appel à seulement 20% des instructions du microprocesseur. D’où l’idée de réduire le jeu
d’instructions à celles le plus couramment utilisées et d’en améliorer la vitesse de traitement.

6.2.2 Comment
C’est donc une architecture dans laquelle les instructions sont en nombre réduit (chargement,
branchement, appel sous-programme). Les architectures RISC peuvent donc être réalisées à partir de
séquenceur câblé. Leur réalisation libère de la surface permettant d’augmenter le nombres de
registres ou d’unités de traitement par exemple. Chacune de ces instructions s’exécutent ainsi en un
cycle d’horloge. Bien souvent, ces instructions ne disposent que d’un seul mode d’adressage. Les
accès à la mémoire s’effectue seulement à partir de deux instructions (Load et Store). Par contre, les
instructions complexes doivent être réalisées à partir de séquences basées sur les instructions
élémentaires, ce qui nécessite un compilateur très évolué dans le cas de programmation en langage
de haut niveau.
6.3 Comparaison
Le choix dépendra des applications visées. En effet, si on diminue le nombre d'instructions, on
crée des instructions complexes (CISC) qui nécessitent plus de cycles pour être décodées et si on
diminue le nombre de cycles par instruction, on crée des instructions simples (RISC) mais on
augmente alors le nombre d'instructions nécessaires pour réaliser le même traitement.

Architecture RISC Architecture CISC

instructions simples ne prenant qu’un instructions complexes prenant plusieurs


seul cycle cycles
instructions au format fixe instructions au format variable
décodeur simple (câblé) décodeur complexe (microcode)
beaucoup de registres peu de registres
seules les instructions LOAD et STORE toutes les instructions sont susceptibles
ont accès à la mémoire d’accéder à la mémoire
peu de modes d’adressage beaucoup de modes d’adressage
compilateur complexe compilateur simple

7. Améliorations de l’architecture de base


L'ensemble des améliorations des microprocesseurs visent à diminuer le temps d'exécution du
programme.
La première idée qui vient à l’esprit est d’augmenter tout simplement la fréquence de l’horloge
du microprocesseur. Mais l’accélération des fréquences provoque un surcroît de consommation ce qui
entraîne une élévation de température. On est alors amené à équiper les processeurs de systèmes de
refroidissement ou à diminuer la tension d’alimentation.
Une autre possibilité d’augmenter la puissance de traitement d’un microprocesseur est de
diminuer le nombre moyen de cycles d’horloge nécessaire à l’exécution d’une instruction. Dans le cas
d’une programmation en langage de haut niveau, cette amélioration peut se faire en optimisant le
compilateur. Il faut qu’il soit capable de sélectionner les séquences d’instructions minimisant le
nombre moyen de cycles par instructions. Une autre solution est d’utiliser une architecture de
microprocesseur qui réduise le nombre de cycles par instruction.

7.1 Architecture pipeline

7.1.1 Principe
L’exécution d’une instruction est décomposée en une succession d’étapes et chaque étape
correspond à l’utilisation d’une des fonctions du microprocesseur. Lorsqu’une instruction se trouve
dans l’une des étapes, les composants associés aux autres étapes ne sont pas utilisés. Le
fonctionnement d’un microprocesseur simple n’est donc pas efficace.
L’architecture pipeline permet d’améliorer l’efficacité du microprocesseur. En effet, lorsque la
première étape de l’exécution d’une instruction est achevée, l’instruction entre dans la seconde étape
de son exécution et la première phase de l’exécution de l’instruction suivante débute. Il peut donc y
avoir une instruction en cours d’exécution dans chacune des étapes et chacun des composants du
microprocesseur peut être utilisé à chaque cycle d’horloge. L’efficacité est maximale. Le temps
d’exécution d’une instruction n’est pas réduit mais le débit d’exécution des instructions est
considérablement augmenté. Une machine pipeline se caractérise par le nombre d’étapes utilisées
pour l’exécution d’une instruction, on appelle aussi ce nombre d’étapes le nombre d’étages du
pipeline.
Exemple de l’exécution en 4 phases d’une instruction :

Recherche Décodage Exécution Sauv. résultat

Modèle classique :

R1 R2 R3

D1 D2 D3

E1 E2 E3

S1 S2 S3
Nbre de
1 2 3 4 5 6 7 8 9 10 11 12 Cycles

Modèle pipeliné :

R1 R2 R3 R4 R5 R6 R7 R8 R9

D1 D2 D3 D4 D5 D6 D7 D8 D9

E1 E2 E3 E4 E5 E6 E7 E8 E9

S1 S2 S3 S4 S5 S6 S7 S8 S9
Nbre de
1 2 3 4 5 6 7 8 9 10 11 12 Cycles

7.1.2 Gain de performance


Dans cette structure, la machine débute l’exécution d’une instruction à chaque cycle et le
pipeline est pleinement occupé à partir du quatrième cycle. Le gain obtenu dépend donc du nombre
d’étages du pipeline. En effet, pour exécuter n instructions, en supposant que chaque instruction
s’exécute en k cycles d’horloge, il faut :

n.k cycles d’horloge pour une exécution séquentielle.


k cycles d’horloge pour exécuter la première instruction puis n-1 cycles pour les n-1
instructions suivantes si on utilise un pipeline de k étages

Le gain obtenu est donc de :


n ik
G=
k+n-1
Donc lorsque le nombre n d’instructions à exécuter est grand par rapport à k, on peut admettre qu’on
divise le temps d’exécution par k.

Remarques :
Le temps de traitement dans chaque unité doit être à peu près égal sinon les unités rapides doivent
attendre les unités lentes.

Exemples :
L’Athlon d’AMD comprend un pipeline de 11 étages.
Les Pentium 2, 3 et 4 d’Intel comprennent respectivement un pipeline de 12, 10 et 20 étages.
7.1.3 Problèmes
La mise en place d’un pipeline pose plusieurs problèmes. En fait, plus le pipeline est long,
plus le nombre de cas où il n’est pas possible d’atteindre la performance maximale est élevé. Il existe
3 principaux cas où la performance d’un processeur pipeliné peut être dégradé ; ces cas de
dégradations de performances sont appelés des aléas :

aléa structurel qui correspond au cas où deux instructions ont besoin d’utiliser la
même ressource du processeur (conflit de dépendance),

aléa de données qui intervient lorsqu’une instruction produit un résultat et que


l’instruction suivante utilise ce résultat avant qu’il n’ait pu être écrit dans un
registre,

aléa de contrôle qui se produit chaque fois qu’une instruction de branchement


est exécutée. Lorsqu’une instruction de branchement est chargée, il faut
normalement attendre de connaître l’adresse de destination du branchement pour
pouvoir charger l’instruction suivante. Les instructions qui suivent le saut et qui
sont en train d’être traitées dans les étages inférieurs le sont en général pour rien,
il faudra alors vider le pipeline. Pour atténuer l’effet des branchements, on peut
spécifier après le branchement des instructions qui seront toujours exécutées. On
fait aussi appel à la prédiction de branchement qui a pour but de recenser lors
de branchements le comportement le plus probable. Les mécanismes de
prédiction de branchement permettent d'atteindre une fiabilité de prédiction de
l'ordre de 90 à 95 %.

R1 R2 R3 R4 R4 R4 R4 R5 R6 Bulles (NOP)

D1 D2 D3 D3 D3 D3 D4 D5 D6

E1 E2 E3 E4 E5 E6

S1 S2 S3 S4 S5 S6
Nbre de
1 2 3 4 5 6 7 8 9 10 11 12 Cycles

Lorsqu’un aléa se produit, cela signifie qu’une instruction ne peut continuer à progresser dans
le pipeline. Pendant un ou plusieurs cycles, l’instruction va rester bloquée dans un étage du pipeline,
mais les instructions situées plus en avant pourront continuer à s’exécuter jusqu’à ce que l’aléa ait
disparu. Plus le pipeline possède d’étages, plus la pénalité est grande. Les compilateurs s’efforcent
d’engendrer des séquences d’instructions permettant de maximiser le remplissage du pipeline. Les
étages vacants du pipeline sont appelés des « bulles » de pipeline, en pratique une bulle correspond
en fait à une instruction NOP (No OPeration) émise à la place de l’instruction bloquée.

7.2 Notion de cache mémoire

7.2.1 Problème posé


L’écart de performance entre le microprocesseur et la mémoire ne cesse de s’accroître. En
effet, les composants mémoire bénéficient des mêmes progrès technologique que les
microprocesseurs mais le décodage des adresses et la lecture/écriture d’une données sont des
étapes difficiles à accélérer. Ainsi, le temps de cycle processeur décroît plus vite que le temps d’accès
mémoire entraînant un goulot d’étranglement. La mémoire n'est plus en mesure de délivrer des
informations aussi rapidement que le processeur est capable de les traiter. Il existe donc une latence
d’accès entre ces deux organes.
4.7.2.2 Principe
Depuis le début des années 80, une des solutions utilisées pour masquer cette latence est de
disposer une mémoire très rapide entre le microprocesseur et la mémoire. Elle est appelée cache
mémoire. On compense ainsi la faible vitesse relative de la mémoire en permettant au
microprocesseur d’acquérir les données à sa vitesse propre. On la réalise à partir de cellule SRAM de
taille réduite (à cause du coût). Sa capacité mémoire est donc très inférieure à celle de la mémoire
principale et sa fonction est de stocker les informations les plus récentes ou les plus souvent utilisées
par le microprocesseur. Au départ cette mémoire était intégrée en dehors du microprocesseur mais
elle fait maintenant partie intégrante du microprocesseur et se décline même sur plusieurs niveaux.
Le principe de cache est très simple : le microprocesseur n’a pas conscience de sa présence
et lui envoie toutes ses requêtes comme s’il agissait de la mémoire principale :

Soit la donnée ou l’instruction requise est présente dans le cache et elle est alors envoyée
directement au microprocesseur. On parle de succès de cache. (a)

soit la donnée ou l’instruction n’est pas dans le cache, et le contrôleur de cache envoie
alors une requête à la mémoire principale. Une fois l’information récupérée, il la renvoie
au microprocesseur tout en la stockant dans le cache. On parle de défaut de cache. (b)

a) up
1
mémoire
Unité de Unité de Cache
traitement commande

b) up
1 2
mémoire
Unité de Unité de Cache
traitement commande

4 3

Bien entendu, le cache mémoire n’apporte un gain de performance que dans le premier cas. Sa
performance est donc entièrement liée à son taux de succès. Il est courant de rencontrer des taux de
succès moyen de l’ordre de 80 à 90%.

Remarques :
Un cache utilisera une carte pour savoir quels sont les mots de la mémoire principale dont il
possède une copie. Cette carte devra avoir une structure simple.
Il existe dans le système deux copies de la même information : l’originale dans la mémoire
principale et la copie dans le cache. Si le microprocesseur modifie la donnée présente dans le cache,
il faudra prévoir une mise à jour de la mémoire principale.
Lorsque le cache doit stocker une donnée, il est amené à en effacer une autre. Il existe donc un
contrôleur permettant de savoir quand les données ont été utilisées pour la dernière fois. La plus
ancienne non utilisée est alors remplacée par la nouvelle.
A noter que l’on peut reprendre le même principe pour les disques durs et CD/DVD.
7.3 Architecture superscalaire
Une autre façon de gagner en performance est d’exécuter plusieurs instructions en même
temps. L'approche superscalaire consiste à doter le microprocesseur de plusieurs unités de traitement
travaillant en parallèle. Les instructions sont alors réparties entre les différentes unités d'exécution. Il
faut donc pouvoir soutenir un flot important d’instructions et pour cela disposer d’un cache performant.

Architecture scalaire :

Unité de
I1 I2 I3 I4 I5 I6 I7 I8
traitement

N cycles

Architecture superscalaire :

Unité de
I1 I3 I5 I6 I8
traitement 1

Unité de
I2 I4 I7
traitement 2

N/2 cycles

Remarque :
C'est le type d'architecture mise en oeuvre dans les premiers Pentium d'Intel apparus en 1993.

7.4 Architecture pipeline et superscalaire


Le principe est de d’exécuter les instructions de façon pipelinée dans chacune des unités de
traitement travaillant en parallèle.

UT1 Recherche Décodage Exécution Sauv. résultat

UT2 Recherche Décodage Exécution Sauv. résultat

Nbre de
1 2 3 4 5 6 7 8 9 10 11 Cycles
Résumé Augmentation des performances
des microprocesseurs

Recherche permanente de l'augmentation des


performances des CPU

Évolution des architectures

Points principaux de cette évolution

Fréquence de fonctionnement
Mémoire cache (L1, L2, L3)
Parallélisation et optimisation des séquences
d'instructions
9 Pipeline
9 Architecture superscalaire
9 Jeu d'instructions (MMX, SSE, 3DNow !)
9 Exécution dynamique (Prédiction des branchements,
Analyse du flux de données, Exécution spéculative)
9 Architecture à deux bus indépendants (DIB, Dual
Independent Bus)
9 Technologie Hyper-Threading (simuler plusieurs
processeurs logiques)
9 Technologie multicoeur (utiliser plusieurs processeurs
physiques)

Chaque point influence en bien ou en mal un autre

Recherche du meilleur compromis


8 Processeurs spéciaux

8.1 Le microcontrôleur
Ce sont des systèmes minimum sur une seule puce. Ils contiennent un CPU, de la RAM, de la
ROM et des ports d’Entrée/Sorties (parallèles, séries, I2C, etc..). Ils comportent aussi des fonctions
spécifiques comme des compteurs programmables pour effectuer des mesures de durées, des CAN
voir des CNA pour s’insérer au sein de chaînes d’acquisition, des interfaces pour réseaux de terrain,
etc ...
Il est adapté pour répondre au mieux aux besoin des applications embarquées (appareil
électroménagers, chaîne d’acquisition, lecteur carte à puce, etc...). Il est par contre généralement
moins puissant en terme de rapidité, de taille de données traitables ou de taille de mémoire
adressable qu’un microprocesseur.

8.2 Le processeur de signal


Le processeur de signal est beaucoup plus spécialisé. Alors qu'un microprocesseur n'est pas
conçu pour une application spécifique, le processeur DSP (Digital Signal Processor) est optimisé pour
effectuer du traitement numérique du signal (calcul de FFT, convolution, filtrage numérique, etc...).
Les domaines d’application des D.S.P étaient à l’origine les télécommunications et le secteur
militaire. Aujourd’hui, les applications se sont diversifiées vers le multimédia (lecteur CD, MP3, etc..)
l’électronique grand public (télévision numérique, téléphone portable, etc…), l’automatique,
l’instrumentation, l’électronique automobile, etc…

9 Exemples
Voici deux exemples d’architecture de deux processeurs qui tenaient le haut du pavé lors de
leur sortie en 1999 : l’Athlon d’AMD et le Pentium III d’Intel. (f ≈500MHz)

9.1 AMD Athlon :

AGU : Adress Generation Unit BTB : Branch Target Buffer


IEU : Integer Execution Unit BHB : Branch History Buffer
Caractéristiques:

9 unité de traitement se composant de :

o 1 ALU (traitement entier) comprenant 6 unités de traitement :


3 unités pour le traitement des données (IEU)
3 unités pour l’adressage des données (AGU)

o 1 FPU (traitement réel) comprenant 3 unités :


1 FPU store
1 Fadd / MMX / 3Dnow !
1 Fmul /MMX / 3Dnow !

Pipeline entier : 10 étages, pipeline flottant : 15 étages.

Prédiction dynamique et exécution du traitement "dans le désordre" (out-of-order)

6 unités de décodage parallèles (3 micro-programmées, 3 câblées) mais seules 3 peuvent


fonctionner en même temps.

Cache mémoire de niveau 1 (L1) : 128 Ko


o 64 Ko pour les données
o 64 Ko pour les instructions

Contrôleur de cache L2 supportant de 512Ko à 8Mo avec vitesse programmable (1/2 ou 1/3
de la vitesse CPU)

22 millions de transistors

9.2 Intel Pentium III

31
Caractéristiques :

Plusieurs unités de traitement mais au 5 instructions exécutées en


même temps sur 5 ports :

o Port 0 : ALU, FPU, AGU MMX et SSE


o Port 1 : ALU, SSE, MMX
o Port 2 : AGU (load)
o Port 3 : AGU (store)
o Port 4 : Store Data Unit

Pipeline entier : 12 à 17 étages, pipeline flottant : environ 25 étages

Prédiction dynamique et exécution du traitement "dans le désordre" (out-of-order)

3 unités de décodage parallèles : 1 micro-programmée, 2 câblées.

5 pipelines de 10 étages

Cache mémoire de niveau 1 (L1) : 32 Ko


o 16 Ko pour les données
o 16 Ko pour les instructions

Contrôleur de cache L2 supportant jusqu’à 512 Ko à ½ de la vitesse CPU

9.5 millions de transistors

32

Vous aimerez peut-être aussi