Vous êtes sur la page 1sur 139

Circuits et architecture des ordinateurs

Anne 2011/2012

Universit Paris Diderot

Olivier Carton

Version du 21 dc. 2011

Licence Creative Commons


Circuits et architecture des ordinateurs 1 Circuits et architecture des ordinateurs en M1

1 Circuits et architecture des ordinateurs en M1

Licence Creative Commons.

Cours rfrenc sur le site de lUniversit Numrique Ingnierie et Technologie (Unit)

Rattrapage du cours annul le mardi 6 dcembre de 8h30 10h30 en salle 270F


Cours le lundi en salle 470E (halle aux farines) de 13h30 15h30
Bibliographie
Travaux dirigs (tkgate version 1.8.7)
vendredi en salle 473F ou 447C de 8h30 10h30 (Pierre Letouzey)
Ce support de cours en PDF
Processeur LC3
Rfrences
Annes 2006/2007, 2007/2008, 2008/2009, 2009/2010 et 2010/2011
Projet

Prsentation du cours
Cours n 1 : historique et reprsentation des donnes
galeries de photos
entiers
entiers signs
Cours n 2 : reprsentation des donnes (suite), transistors, portes
rels (norme IEEE 754)
caractres (ASCII et Unicode)
logique de Boole
table de vrit
tableaux de Karnaugh
transistors
portes logiques (inverseur, nand, nor)
Cours n 3 : additionneurs
circuits lmentaires
additionneurs
semi-additionneur
additionneur complet
additionneur par propagation de retenue (ripple-carry adder)
calcul des indicateurs
soustraction
Cours n 4 : additionneurs (suite)
additionneur par anticipation de retenue (carry-lookahead adder)
additionneur rcursif
additionneur hybride
additionneur par slection de retenue
Cours n 5 : mmoire
mmoire statique/mmoire dynamique
bascule RS

-1-
1 Circuits et architecture des ordinateurs en M1 Olivier Carton

bascule D
mmoire 4 3 bits
Cours n 6 : circuits squentiels et architecture gnrale dun micro-processeur
principe des circuits squentiels
construction dune guirlande
cas dun automate fini
modle de von Neumann
unit de contrle
unit de traitement
mmoire
Cours n 7 : description du LC-3
registres
organisation de la mmoire
jeu dinstructions du processeur LC-3
chemins de donnes du LC-3
Cours n 8 : programmation en assembleur du LC-3
longueur dune chane
mutiplication non signe, signe et logarithmique
addition 32 bits
Cours n 9 : appels de sous-programmes, pile
appels de sous-programme
pile
sauvegarde des registres
tours de Hano
Cours n 10 : appels systmes et interruptions
entres/sorties
appels systmes
interruptions
Cours n 11 : autres architectures
processeurs 80x86
comparaison CISC/RISC
architecture IA-64
Cours n 12 : pipeline
principe
tages
ralisation
alas
Cours n 13 : gestion de la mmoire
mmoires associatives
mmoire virtuelle
mmoires cache
Examen : mercredi 11 janvier de 15h30 18h30 en salle 575F

-2-
Historique 2 Historique

2 Historique
2.1 Historique gnral
Quelques dates cls

500 av JC
apparition des bouliers et abaques
1632
invention de la rgle calcul
1642
Pascal invente la Pascaline
1833
machine de Babbage
1854
publication par Boole dun ouvrage sur la logique
1904
invention du tube vide
1937
article dAlan Turing sur la calculabilit : machines de Turing
1943
cration du ASCC Mark 1 (Harvard - IBM) : Automatic Sequence-Controlled Calculator
1946
construction de lENIAC
1947
invention du transistor (Bell)
1955
premier ordinateur Transistors : TRADIC (Bell)
1958
premier circuit intgr (Texas Instrument)
1964
langage de programmation BASIC
1965
G. Moore nonce la loi qui porte son nom : loi de Moore
1969
systme dexploitation MULTICS puis UNIX (Bell)
1971
premier microprocesseur : 4004 dIntel (4 bits, 108 KHz, 2300 transistors)
1972
microprocesseur 8008 dIntel (8 bits, 200 KHz, 3500 transistors)
1973
langage C pour le dveloppement dUNIX
1974
premier microprocesseur Motorola : 6800 (8 bits)
1974
microprocesseur 8080 dIntel

-3-
2.2 Historique des micro-processeurs Olivier Carton

2.2 Historique des micro-processeurs

2.2.1 Rfrences
Histoire des micro-processeurs de 1971 1996
Collection de micro-processeurs
Autre collection de micro-processeurs
Histoire des premiers micro-processeurs
Muse en franais de la micro-informatique

2.2.2 Principaux micro-processeurs


Intel 4004
1971, 4 bits, 108 KHz, 2300 transistors
Intel 8008
1972, 8 bits, 200 KHz, 3500 transistors
Intel 8080
1974, 8 bits, 6000 transitors
Motorola 6800 (Photos avec boitier plastique et boitier cramique)
1974, 8 bits, 2Mhz, 7000 transistors
MOS Technology 6502
1975, 1 MHz, 8 bits
Zilog Z80
1976, 2Mhz, 8 bits
Intel 8086
1978, 16 bits
Motorola 6809
1978, 8 bits
Intel 8088
1979, 16 bits
Motorola 68000
1979, 16 bits, 68000 transistors
Pentium
1993, CISC
PowerPC
1993, RISC
Sparc
1995, RISC

2.2.3 Gnalogie des micro-processeurs

-4-
Historique 2.2.3 Gnalogie des micro-processeurs

-5-
2.2.3 Gnalogie des micro-processeurs Olivier Carton

Gnalogie des micro-processeurs

2.2.3.1 Sources
Intel
4004
iAPX 432
Intel i860
Intel i960
Itanium
Core
Core 2
Motorola
68000
F8
IMP-16
DEC (T-11)
ARM
PA-RISC (wikipedia)
PA-RISC (openpa)
RISC
MIPS
PowerPC
DEC alpha
SPARC
National 320xx
Comparatif de quelques architectures

-6-
Reprsentation des donnes 3 Reprsentation des donnes

3 Reprsentation des donnes


Dans un ordinateur, toute linformation est sous forme de bits qui sont regroups en octets. Il faut donc
quil y ait un codage de cette information. Ce codage dpend bien sr du type des donnes. Cette partie
dcrit les codages les plus utiliss pour les types de base, cest--dire les entiers, les nombres flottants
et les caractres.

3.1 Entiers

3.1.1 Entiers positifs


Les entiers positifs sont toujours cods en base 2. Une suite b k-1 ,,b 0 de k bits reprsente lentier n
donn par la formule suivante.

n = i=0 k-1 b i 2 i .

Avec k bits, on peut donc reprsenter tous les entiers de lintervalle 0 2 k -1. Le nombre de bits
utiliss pour coder les entiers dpend de la machine. Cest encore trs souvent 32 bits mais lapparition
des micro-processeurs 64 bits rend le codage 64 bits de plus en plus frquent.

3.1.2 Big endian/Little endian


Cette caractristique dcrit dans quelle ordre sont placs les octets qui reprsentent un entier. Dans le
mode big endian les octets de poids fort sont placs en tte et occupent donc des emplacements
mmoire avec des adresses plus petites. Dans le mode little endian, les octets de poids faibles sont au
contraire placs en tte. Dans le cas dentiers de 32 bits, il existe encore des modes mixtes. Cette
terminologie provient du livre Les voyages de Gulliver de J. Swift.

Big et little endian

Le mode big endian acclre les oprations qui ncessitent de regarder en premier les bits de poids
forts comme la recherche du signe, la comparaison de deux entiers et la division. Au contraire le mode
little endian favorise les oprations qui commencent par les bits de poids faible comme laddition et la
multiplication.

-7-
3.1.3 Codage BCD (Binary Coded Decimal) Olivier Carton

Big endian Mixed endian Little endian


Motorola 68xx, 680x0
IBM Motorola PowerPC Intel
Hewlett-Packard Silicon Graphics MIPS DEC VAX
SPARC

3.1.3 Codage BCD (Binary Coded Decimal)


Il sagit dune reprsentation surtout utilise dans les premiers temps de linformatique. La
reprsentation BCD dun entier n est obtenue de la manire suivante. Lentier n est crit en dcimal
puis chaque chiffre dcimal entre 0 et 9 est ensuite cod sur 4 bits. Il faut donc (k+1)/2 octets pour
coder un nombre ayant k chiffres dcimaux. Le seul intrt de cette reprsentation est de faciliter
laffichage en base 10 de lentier. Certains processeurs possdaient quelques instructions spcifiques
pour traiter, en particulier pour laddition, les entiers cods en BCD.

3.1.4 Entiers signs


Il existe plusieurs faons de coder les entiers signs. La reprsentation avec un bit de signe est la plus
simple mais elle a trop dinconvnients pour tre utilise en pratique. La reprsentation biaise est
uniquement utilise pour le codage des exposants des flottants. La reprsentation en complment 2
est utilise par tous les ordinateurs car elle facilite de nombreuses oprations.

3.1.4.1 Reprsentation avec un bit de signe


Dans cette reprsentation, le bit de poids fort indique le signe du nombre avec la convention 0 pour
positif et 1 pour ngatif. Les bits restants sont utiliss pour coder la valeur absolue du nombre comme
un nombre positif. Cette reprsentation semble la plus naturelle mais elle nest pas utilise en pratique
car elle souffre de nombreux dfauts dont le principal est de compliquer les additions et soustractions.
En effet, pour additionner deux nombres cods de cette faon, il est ncessaire de faire une addition ou
une soustraction suivant que ces deux nombres sont du mme signe ou de signes diffrents.

Avec k bits, cette reprsentation permet de reprsenter tous les entiers de de lintervalle -2 k-1 +1
2 k-1 -1. Lentier 0 a alors deux codages.

Reprsentation avec bit de signe sur 3 bits

-8-
Reprsentation des donnes 3.1.4 Entiers signs

3.1.4.2 Reprsentation biaise


Cette reprsentation est utilise pour le codage des exposants des nombres flottants. Avec k bits, cette
reprsentation permet de reprsenter tous les entiers de lintervalle -2 k-1 2 k-1 -1. Chaque entier n de
cet intervalle est cod par le codage de n + 2 k-1 comme un entier positif.

Reprsentation biaise (avec un biais de 4) sur 3 bits

3.1.4.3 Reprsentation en complment 2


Cette reprsentation est la plus importante car cest elle qui est utilise dans les ordinateurs. Malgr
son apparente complexit, elle simplifie de nombreuses oprations sur les entiers.

Avec k bits, cette reprsentation permet de reprsenter tous les entiers de de lintervalle -2 k-1
2 k-1 -1. Les entiers de 0 2 k-1 -1 sont cods comme les nombres positifs. Le bit de poids fort de leur
reprsentation est donc toujours 0. Un nombre ngatif n de lintervalle -2 k-1 -1 est reprsent par le
codage de n+2 k (qui appartient lintervalle 2 k-1 2 k -1) sur k bits.

Dans la reprsentation en complment 2, les reprsentations dont le bit de poids fort est 0 sont
utilises par les nombres positifs. Au contraire, les reprsentations dont le bit de poids fort est 1 sont
utilises par les nombres ngatifs. Le bit de poids fort se comporte donc comme un bit de signe. Ceci
facilite le test de signe dun entier sign.

-9-
3.1.4 Entiers signs Olivier Carton

Reprsentation en complment 2 sur 3 bits

3.1.4.3.1 Calcul de loppos


tant donn un entier n positif ou ngatif reprsent en complment 2, lalgorithme suivant permet
de calculer la reprsentation en complment 2 de son oppos -n. Ceci est bien sr possible pour
toutes les valeurs de lintervalle -2 k-1 2 k-1 -1 sauf pour -2 k-1 dont loppos nest plus dans
lintervalle.

Lalgorithme est le suivant. Soit n la reprsentation en complment 2 de n. Lalgorithme comporte


les deux tapes suivantes qui utilisent des oprations prsentes dans tous les micro-processeurs et
facilement ralisables avec des portes logiques.

1. Calculer le complment bit bit de n.


2. Ajouter 1 au rsultat de ltape prcdente.

Pour expliquer cette algorithme, on remarque que le complment bit bit de m donne la diffrence
entre le nombre crit avec que des 1 et n, cest--dire la valeur 2 k -n-1. Le rsultat de lalgorithme est
donc 2 k -n. Le tableau ci-dessous permet de vrifier que quel que soit le signe de n, lalgorithme
donne le bon rsultat. Soit n un entier positif ou ngatif et soit n son codage en complment 2.

Nombre n Codage n de n Rsultat Nombre cod


0 n 2 k-1 -1 n = n 2 k -n = -n -n
-2 k-1 +1 n -1 n = n+2 k 2 k -n -n
n= -2 k-1 n = 2 k-1 n = 2 k-1 n

- 10 -
Reprsentation des donnes 3.1.4 Entiers signs

3.1.4.3.2 Calcul de la somme


Un des grands avantages de la reprsentation en complment 2 est de faciliter les additions et
soustractions. En effet, laddition de deux nombres m et n se fait simplement en additionnant leur
reprsentations m et n.

Le tableau ci-dessous rcapitule les diffrents cas de laddition suivant les signes des oprandes.
Soient m et n deux entiers signs reprsents sur k bits. On distingue donc les trois cas : le cas m et n
positifs, le cas m positif et n ngatif et le cas m et n ngatifs. Le quatrime cas est omis du tableau car
il est symtrique du cas m positif et n ngatif. Pour chacun des cas, on donne les codages respectifs m
et n de m et n, puis on distingue nouveau deux sous-cas suivant la valeur de la somme m+n. Le
rsultat de laddition de m et n nest pas ncessairement m+n puisque m+n peut tre suprieur
2 k et ne pas scrire sur k bits. Le rsultat de cette addition est m+n si 0 m+n 2 k -1 et m+n-2 k
si 2 k m+n 2 k+1 -1.

Nombre Codage Nombre Codage Nombre C k


Cas Rsultat Commentaire
m m n n cod C k-1
0 m+n
m positif n positif m+n m+n 00 Rsultat positif
2 k-1 -1
0 m m = m 0 n n = n
2 k-1 -1 2 k-1 -1 2 k-1 m+n Dbordement car
m+n m+n-2 k 01
2 k -2 m+n 2 k-1
2 k-1 m+n Rsultat ngatif
m positif n ngatif m+n m+n 00
n = n + 2 -1
k car |m| < |n|
0 m m = m -2 k-1 n k
2 k-1 -1 -1
2 2 k m+n Rsultat positif
m+n-2 k m+n 11
2 k +2 k-1 -1 car |m| > |n|
2 k m+n Dbordement car
m+n-2 k m+n+2 k 1 0
m ngatif n ngatif 2 k +2 k-1 -1 m+n < -2 k-1
m = m n = n +
-2 k-1 m -2 k-1 n k 2 k +2 k-1
+ 2k 2
-1 -1 m+n m+n-2 k m+n 11 Rsultat ngatif
2 k+1 -1

3.1.4.3.3 Exemple de calculs de somme


On se place avec k = 3 bits. Les nombres reprsentables en complments deux sont donc les entiers
de -4 3. La table ci-dessous donne pour chaque paire de reprsentation, la somme et sa valeur. Les
valeurs des deux retenues C 2 et C 3 sont codes par la couleur du fond. Les couleurs jaune et rouge
correspondent aux dbordements, cest--dire C 2 C 3 = 1.

C2 = 0 C2 = 1

C3 = 0 C3 = 1 C3 = 0 C3 = 1

- 11 -
3.1.4 Entiers signs Olivier Carton

100 101 110 111 000 001 010 011


+
-4 -3 -2 -1 0 1 2 3
100 000 001 010 011 100 101 110 111
-4 0 1 2 3 -4 -3 -2 -1
101 001 010 011 100 101 110 111 000
-3 1 2 3 -4 -3 -2 -1 0
110 010 011 100 101 110 111 000 001
-2 2 3 -4 -3 -2 -1 0 1
111 011 100 101 110 111 000 001 010
-1 3 -4 -3 -2 -1 0 1 2
000 100 101 110 111 000 001 010 011
0 -4 -3 -2 -1 0 1 2 3
001 101 110 111 000 001 010 011 100
1 -3 -2 -1 0 1 2 3 -4
010 110 111 000 001 010 011 100 101
2 -2 -1 0 1 2 3 -4 -3
011 111 000 001 010 011 100 101 110
3 -1 0 1 2 3 -4 -3 -2

3.1.4.4 Extension signe et non signe


Avec toutes les reprsentations tudies, un nombre signs ou non qui peut tre reprsent sur k bit
peut encore tre reprsent avec k+h bits pour tout h 0. On tudie ici comme calculer cette
reprsentation sur k+h bits pour la reprsentation des nombres non signs et pour la reprsentation en
complment 2 des nombres signs.

3.1.4.4.1 Extension non signe


Soit un nombre n positif ayant b k-1 b 0 comme reprsentation non signe sur k bits. La
reprsentation non signe de n sur k+h bits est simplement la reprsentation 00b k-1 b 0 obtenue en
ajoutant h chiffres 0 devant la reprsentation k bits.

Extension non signe de k bits k+h bits dun entier

- 12 -
Reprsentation des donnes 3.2 Nombres en virgule fixe

3.1.4.4.2 Extension signe


Soit un nombre n positif ou ngatif ayant b k-1 b 0 comme reprsentation en complment 2 sur k
bits. Si n est positif, la reprsentation en complment 2 de n sur k+h bits est la reprsentation
00b k-1 b 0 obtenue en ajoutant h chiffres 0 devant la reprsentation k bits. Si n est ngatif, la
reprsentation en complment 2 de n sur k+h bits est la reprsentation 11b k-1 b 0 obtenue en
ajoutant h chiffres 1 devant la reprsentation k bits. Dans les deux cas, la reprsentation de n sur k+h
est b k-1 b k-1 b k-1 b k-2 b 1 b 0 obtenue en ajoutant h copies du bit de poids fort b k-1 devant la
reprsentation sur k bits.

Extension signe de k bits k+h bits dun entier

3.1.4.5 Comparaison des reprsentations

Reprsentation Avantages Inconvnients


reprsentation naturelle 2 reprsentations pour 0
avec bit de signe intervalle symtrique comparaison difficile
changement de signe facile addition difficile
reprsentation de 0
comparaison facile
biaise intervalle non symtrique
vritable diffrence
addition difficile
reprsentation de 0
bit de signe
en complment 2 intervalle non symtrique
comparaison facile
addition et soustraction semblables

3.2 Nombres en virgule fixe

3.3 Nombres en virgule flottante


La norme IEEE 754 dfinit des codages des nombres en virgule flottante sur un format de 32 bits
appel simple prcision (dclar par float en C), un format de 64 bits appel double prcision
(dclar double en C) et un format de 80 bits appel prcision tendue (dclar long double en
C). Elle dfinit aussi les oprations arithmtiques usuelles (+,-,,/,) et les arrondis effectuer pour

- 13 -
3.3 Nombres en virgule flottante Olivier Carton

ces oprations. Par contre, elle ne normalise pas les fonctions mathmatiques comme exp, log, sin, cos,
. Lintrt principal de cette norme est davoir des comportements identiques des programmes sur
des machines diffrentes.

Le codage dun nombre est inspir de la notation scientifique comme -1.5 10 +3 . Chaque nombre est
dcompos en trois parties : signe, exposant et mantisse. Le signe est cod par le bit de poids fort.
Ensuite un certain nombre de bits sont consacrs lexposant et le reste la mantisse. La table
ci-dessous donne le nombre de bits de chacun des lments dans les diffrents formats.

Encodage Signe s Exposant e Mantisse m Valeur dun nombre


Simple prcision 32 bits 1 bit 8 bits 1e254 23 bits (-1) s 1.m 2 e-127
Double prcision 64 bits 1 bit 11 bits 1e2046 52 bits (-1) s 1.m 2 e-1023
Prcision tendue 80 bits 1 bit 15 bits 1e32766 64 bits (-1) s 1.m 2 e-16383

Dans la table ci-dessus, la formule 1.m doit tre interprte de la faon suivante. Si les bits de la
mantisse sont b 1 b 2 b n , on a

1.m = 1 + b 1 /2 + b 2 /2 2 + b 3 /2 3 + + b n /2 n

Soit lexemple en simple prcision 1011111101011000 (0xbf580000 en hexadcimal). Il se


dcompose en le signe s = 1, lexposant e = 01111110 = (126) 10 et la mantisse m = 10101000. La
valeur de 1.m = 1+1/2+1/8+1/16 = 1,6875. La valeur du nombre est donc -1,6875 2 -1 = -0,84375.

Les fonctions C suivantes permettent de considrer un flottant comme un entier et inversement afin par
exemple dafficher le codage hexadcimal dun flottant. Il nest pas possible dutiliser les cast
directement sur les valeurs car cela effectuerait une conversion. On utilise au contraire un cast sur les
pointeurs.
// On suppose sizeof(int) == sizeof(float)
int float2int(float f) {
int* p = (int*) &f;
return *p;
}

float int2float(int n) {
float* p = (float*) &n;
return *p;
}

int main(void) {
// Float --> hexa
printf("%08x\n", float2int(-0.84375));

// Hexa --> float


printf("%g\n", int2float(0xbf580000));
}

Si le nombre de bits consacrs lexposant est k, la valeur de lexposant e vrifie 0 < e < 2 k -1. Les
valeurs 0 et 2 k -1 sont rserves pour des valeurs spciales.

- 14 -
Reprsentation des donnes 3.4 Caractres

La norme prvoit quatre types darrondi : vers 0, vers +, vers - ou au plus prs. En thorie,
lutilisateur a le choix de larrondi mais aucun des langages de programmation actuels ne permet de le
choisir effectivement.

Les valeurs spciales qui peuvent tre reprsentes sont donnes par la table ci-dessous dans le cas de
la simple prcision.

Signe Exposant Mantisse Valeur Commentaire


0 0 0 0 unique reprsentation de 0
s 0 m0 (-1) s 0.m 2 -126 nombres dnormaliss
0 255 0 + rsultat de 1/0
1 255 0 - rsultat de -1/0
0 255 m0 NaN Not a Number : rsultat de 0/0 ou -1

Dans le cas de la simple prcision, les valeurs maximales sont (2-2 -23 )2 127 2 128 . La plus petite
valeur positive reprsentable est 2 -23 2 -126 = 2 -249 (nombre dnormalis).

3.4 Caractres

3.4.1 Codage ASCII


Le codage ASCII affecte un code sur 7 bits aux principaux caractres mais pas aux caractres
accentus. Il existe des extensions plus ou moins standards pour coder les caractres accentus sur un
octet comme le codage ISO Latin 1.

3.4.2 Codage UNICODE


Le codage Unicode permet de manipuler tous les caractres possibles. Il affecte en effet un code 32
bits tous les caractres de toutes les langues. Il faut cependant faire attention au fait que les codes ne
sont pas manipuls explicitement pour viter que chaque caractre occupe 4 octets. On utilise un
format de codage dont le plus rpandu est le format UTF-8.

- 15 -
4 Transistors et portes logiques Olivier Carton

4 Transistors et portes logiques


On explique dans cette partie le fonctionnement schmatique dun transistor ainsi que la faon de
raliser des portes logiques avec des transistors.

4.1 Semi-conducteurs
Les trois semi-conducteurs utiliss dans la fabrication des composants lectroniques sont les suivants :

le silicium Si utilis majoritairement,


le germanium Ge,
larsniure de gallium AsGa.

En plaant ces diffrents lments dans la table des lments chimiques (cf. figure ci-dessous), on
constate que ces lments sont proches. Ces semi-conducteurs sont forms dlments ayant 4
lectrons de valence sur la dernire couche comme le silicium ou le germanium ou dun mlange
dlments ayant 3 et 5 lectrons de valence comme le gallium et larsenic.

Une partie de la table des lments

4.1.1 Semi-conducteur intrinsque


Dans un cristal de silicium pur, les atomes forment 4 liaisons de covalence avec 4 voisins. Il
remplissent ainsi la dernire couche en partageant les lectrons.

Cristal de silicium

Dans la figure ci-dessus, le cristal est reprsent en plan mais il faut bien sr imaginer ce cristal dans
lespace. La maille lmentaire du rseau est reprsente la figure ci-dessous.

- 16 -
Transistors et portes logiques 4.1.2 Semi-conducteurs dops

Rseau dans lespace

Au zro absolu, cest--dire la temprature 0K, la structure du cristal est stable et le silicium nest
pas conducteur du courant lectrique. Lorsque la temprature augmente, les lectrons possdent une
nergie supplmentaire qui provoque la rupture de certaines liaisons de covalence. Certains lectrons
deviennent libres (cf. figure ci-dessous) et le silicium est alors peu conducteur, do le nom de
semi-conducteur.

lectron libre

4.1.2 Semi-conducteurs dops


Le silicium est dop en introduisant des impurets dans le cristal. On distingue deux types de dopage
suivant la nature des lments ajouts au silicium. On parle de semi-conducteur de type n lorsque le
dopage est ralis avec des lments ayant 5 lectrons de covalence comme le phosphore, larsenic et
lantimoine. Latome avec 5 lectrons de covalence forme 4 liaisons de covalence et garde un lectron
qui est alors relativement libre (cf. figure ci-dessous).

- 17 -
4.2 Diode Olivier Carton

Silicium dop n avec un lectron libre

On parle de semi-conducteur de type p lorsque le dopage est ralis avec des lments ayant 3
lectrons de covalence comme le bore, laluminium et le gallium. Latome avec 3 lectrons de
covalence ne peut former que 3 liaisons de covalence. Il y en quelque sorte un trou dlectron (cf.
figure ci-dessous).

Silicium dop p avec un trou

4.2 Diode
Une jonction entre un semi-conducteur de type n et un semi-conducteur de type p est appele une
diode. La partie de type n est appele cathode et la partie de type p est appele anode. Le courant
lectrique ne peut passer travers une diode que dans un seul sens comme lvoque son symbole en
forme dentonnoir.

Diode

Le principe de fonctionnement de la diode est le suivant. Les lectrons libres du semi-conducteur de


type n ont tendance aller boucher les trous du semi-conducteur de type p. Il en dcoule une diffusion
des lectrons de la rgion dope n vers la rgion dope p. Chaque lectron qui se dplace laisse un ion
positif dans la rgion n. Il sensuit donc un champ lectrique de rappel vers la rgion n qui conduit
un quilibre. Dans cet quilibre, il y a une zone, appele zone de charge despace qui ressemble du
silicium non dop et o il y a en outre un champ lectrique.

- 18 -
Transistors et portes logiques 4.3 Transistors

Si on applique une tension positive la cathode et ngative lanode, les lectrons sont attirs vers le
bord de la cathode et les trous vers le bord de lanode. La zone de charge despace stend et la diode
nest pas conductrice. Si on contraire, on applique une tension positive lanode et ngative la
cathode qui est suprieure au champ lquilibre, les lectrons peuvent circuler de la cathode vers
lanode et la diode est conductrice.

4.3 Transistors
Le transistor est la brique avec laquelle sont construits les circuits lectroniques tels les
micro-processeurs. La technologie actuellement utilise pour fabriquer les micro-processeurs est la
technologie MOS (Metal-Oxide-Semiconductor). Il existe deux types de transistors MOS : les
transistors de type n et les transistors de type p. Les micro-processeurs actuels utilisent des transistors
des deux types. On parle alors de technologie CMOS (Complementary Metal-Oxide-Semiconductor).

4.3.1 Fonctionnement
Un transistor possde trois broches appeles drain, grille et source. Pour dautres types de transistors,
elle sont aussi appeles collecteur, base et metteur. Dans le cas des transistors MOS, le drain et la
source jouent des rles (presque) symtriques et sont (pratiquement) interchangeables. Un transistor se
comporte comme un interrupteur lectrique entre la source et le drain qui serait command par la
grille. Le dessin ci-dessous illustre de manire image la faon dont fonctionne un transistor.

Fonctionnement imag dun transistor

- 19 -
4.3.2 Composition Olivier Carton

Le comportement dun transistor n-MOS est le suivant. Si la grille est mise une tension de 2.9V, la
source et le drain sont connects. Si au contraire, la grille est mise une tension de 0V, le circuit entre
la source et le drain est ouvert. Le fonctionnement dun transistor p-MOS est linverse. Le drain et la
source sont connects lorsque la tension applique la grille est 0V.

4.3.2 Composition
Un transistor est form de deux jonctions np obtenues en intercalant une couche p (respectivement n)
entre deux couches n (respectivement p). Le transistor de type n correspond aux trois couches n-p-n et
le transistor de type p aux couches p-n-p. Il y a en outre une grille en mtal au dbut de la technique
MOS mais maintenant faite en polysilicium. Cette grille est spare de la couche intermdiaire par une
fine couche doxyde de silicium SiO 2 isolant. Le potentiel appliqu la grille permet de modifier
ltat de la couche intermdiaire.

Transistors n-MOS et p-MOS

4.3.3 Principe de fonctionnement


On considre un transistor de type n. Si aucune tension nest applique la grille, les deux jonctions
np et pn se comporte comme des diodes en opposition et aucun courant ne peut passer entre la source
et le drain. Si au contraire une tension positive est applique la grille, les lectrons chargs
ngativement saccumulent dans le substrat dans la zone prs de la grille. La rgion du substrat prs de
la grille va alors se comporter comme un semi-conducteur dop n (cf. figure ci-dessous). Le courant
peut alors passer entre la source et le drain.

- 20 -
Transistors et portes logiques 4.4 Conventions dans les schmas

Formation dun tunnel n dans le substrat

4.4 Conventions dans les schmas


Dans tous les schmas du cours, on adopte la convention qui est illustre la figure suivante. Si un fil
sarrte a une intersection avec un autre fil, les deux fils sont connects. Si par contre, deux fils se
croisent, il ny a pas connexion des deux fils sauf si lintersection est matrialise par un gros point.

Convention des connexions aux intersections

4.5 Portes not, nand et nor


La porte la plus simple est la porte not de la ngation. Elle prend en entre une valeur x qui vaut 0 ou 1
et elle sort la valeur 1-x. La table de vrit de cette porte est donne ci-dessous.

Entre Sortie
I I
0 1
1 0

La porte not peut tre ralise en logique CMOS par un circuit constitu de deux transistors, un de
type n et un de type p. Ce circuit est appel inverseur. Linverseur ainsi que son symbole sont
reprsents la figure ci-dessous.

Schma et symbole de linverseur

La porte nand prend en entre deux valeurs 0 ou 1. La sortie vaut 0 si les deux entres valent 1 et elle
vaut 1 si au moins une des deux entres vaut 0. La table de vrit est donne ci-dessous.

- 21 -
4.5 Portes not, nand et nor Olivier Carton

Entres Sortie
A B (A B)
0 0 1
0 1 1
1 0 1
1 1 0

Un circuit pour raliser la porte nand en logique CMOS est donn ci-dessous. Il est constitu de quatre
transistors dont deux n-MOS et deux p-MOS.

Schma et symbole de la porte nand

La porte nor prend en entre deux valeurs 0 ou 1. La sortie vaut 0 si au moins une des entres vaut 1 et
elle vaut 1 si les deux entres valent 0. La table de vrit est donne ci-dessous.

Entres Sortie
A B (A B)
0 0 1
0 1 0
1 0 0
1 1 0

Un circuit pour raliser la porte nor en logique CMOS est donn ci-dessous. Il est constitu de quatre
transistors dont deux n-MOS et deux p-MOS. Cest le circuit dual du circuit de la porte nand. Les deux
transistors p-MOS qui tait en parallle dans le circuit de la porte nand sont en srie dans le circuit de
la porte nor. Au contraire, les deux transistors n-MOS qui tait en srie dans le circuit de la porte nand
sont en parallle dans le circuit de la porte nor.

- 22 -
Transistors et portes logiques 4.6 Portes or et and

Schma et symbole de la porte nor

4.6 Portes or et and


Si dans le schma de la porte nor, chaque transistor n-MOS est remplac par un transistor p-MOS et
inversement, on obtient un schma qui donne thoriquement une porte or. Pourtant, le circuit de la
porte or nest pas ralis de cette manire. Cela provient du fait que la source et le drain des transistors
ne jouent pas des rles compltement symtriques. Pour des raisons de consommation, les connexions
avec le 0 sont toujours commandes par des transistors de type n et les connexions avec le 1 par des
transistors de type p.

Les circuits des portes and et or sont respectivement obtenus en combinant un circuit de la porte nand
et nor avec un inverseur.

La porte and prend en entre deux valeurs 0 ou 1. La sortie vaut 1 si les deux entres valent 1 et elle
vaut 0 sinon. La table de vrit est donne ci-dessous.

Entres Sortie
A B AB
0 0 0
0 1 0
1 0 0
1 1 1

Schma et symbole de la porte and

- 23 -
4.7 Portes nand et nor trois entres Olivier Carton

La porte and pourrait thoriquement tre aussi ralise par le schma ci-dessous qui comporte moins
de transistors. Ce schma nest cependant pas utilis en pratique. Dans ce schma, la sortie est relie
au 1 par des transistors n et au 0 par des transistors p. Ceci induit une consommation excessive par
rapport au schma prcdent.

Mauvais schma dune porte and

La porte or prend en entre deux valeurs 0 ou 1. La sortie vaut 0 si les deux entres valent 0 et elle
vaut 1 sinon. La table de vrit est donne ci-dessous.

Entres Sortie
A B AB
0 0 0
0 1 1
1 0 1
1 1 1

Schma et symbole de la porte or

4.7 Portes nand et nor trois entres


On peut bien sr raliser une porte nand trois entres en combinant deux portes nand deux entres.
Il est plus conomique en nombre de transistors de raliser directement cette porte. Cest la mme
chose pour la porte nor trois entres.

- 24 -
Transistors et portes logiques 4.8 Portes and et or entres multiples

Schma et symbole de la porte nand 3 entres

Schma et symbole de la porte nor 3 entres

4.8 Portes and et or entres multiples


Les schmas des portes nand et nor trois entres peuvent tre gnraliss pour obtenir des schmas
pour des portes nand et nor un nombre quelconque dentres. Pour des raisons technologiques, ces
portes ne sont pas ralises de cette faon. Il est prfrable de construire des portes un grand nombre
dentres en combinant plusieurs portes 2 ou 3 entres.

Des circuits pour les portes and ou or entres multiples peuvent tre construits en utilisant un arbre
constitu de portes and ou or respectivement. La construction dun circuit pour une porte k entres
peut tre faite de manire rcursive. Si k vaut 1 ou 2, le circuit est vident. Si k est suprieur 2, on
construit dabord deux circuits ayant respectivement k/2 et k/2 entres. Les sorties des ces deux
circuits sont ensuite envoyes sur une dernire porte and ou or. On vrifie par rcurrence que le
nombre de portes dun tel circuit est exactement k-1 et que sa profondeur (nombre maximal de portes
mises en cascade) est log 2 (k).

Pour k = 4, on obtient le premier circuit reprsent la figure ci-dessous. Pour conomiser les
transistors, chaque bloc de trois portes and ou or peut tre remplac par deux portes nand et une porte
nor ou linverse. On obtient ainsi le second circuit reprsent la figure ci-dessous. Il existe dautres

- 25 -
4.9 Porte xor Olivier Carton

circuits comme le troisime reprsent la figure ci-dessous qui ralisent une porte and 4 entres. Ce
circuit est cependant viter car il augmente le temps de latence en raison de sa plus grande
profondeur.

Schmas de portes and 4 entres

En appliquant le procd ci-dessus pour k = 16, puis en remplaant chaque bloc de trois portes and par
deux portes nand et une porte nor, on obtient le circuit ci-dessous qui a 10 portes nand et 5 portes nor.
Ce circuit est particulirement rgulier car k est une puissance de 2.

Schma dune porte and 16 entres

4.9 Porte xor


La porte xor permet de raliser la fonction ou exclusif qui savre trs utile pour construire les
additionneurs. Comme toutes les autres fonctions boolennes, elle se ralise avec les portes and et or
ou bien encore nand et nor. Il faut la considrer comme une abrviation pour un petit circuit trs utile.

- 26 -
Transistors et portes logiques 4.9 Porte xor

Entres Sortie
A B AB
0 0 0
0 1 1
1 0 1
1 1 0

Schmas et symbole de la porte xor

- 27 -
5 Circuits lmentaires Olivier Carton

5 Circuits lmentaires
Les dcodeurs et multiplexeurs sont des circuits relativement lmentaires mais trs souvent utiliss. Il
sagit de deux briques de base pour la construction de circuits plus labors. Ils sont en particulier
prsents dans chaque circuit mmoire. Un dcodeur y dcode ladresse et active la ligne
correspondante. Un multiplexeur permet dy slectionner la bonne sortie lors dune lecture.

5.1 Dcodeurs
Un dcodeur k bits possde k entres et 2 k sorties. La sortie dont le numro est donn par les entres
est active (valeur 1) alors que toutes les autres sorties sont inactives (valeur 0).

Le dcodeur 1 bit a donc une seule entre A 0 et deux sorties S 0 et S 1 . La table de vrit des sorties
S 0 et S 1 est la suivante.

Entre Sorties
A0 S0 S1
0 1 0
1 0 1

On remarque que la sortie S 0 est la ngation de lentre A 0 alors que la sortie S 1 est gale A 0 . On a
donc le circuit suivant avec un seul inverseur.

Schma et symbole dun dcodeur 1 bit

Le dcodeur 2 bits a deux entres A 0 et A 1 ainsi que quatre sorties S 0 , S 1 , S 2 et S 3 . La table de


vrit des quatre sorties en fonction des deux entres est la suivante.

Entres Sorties
A1 A0 S0 S1 S2 S3
0 0 1 0 0 0
0 1 0 1 0 0
1 0 0 0 1 0
1 1 0 0 0 1

On remarque que lon a les quatre formules suivantes pour les sorties.

- 28 -
Circuits lmentaires 5.1 Dcodeurs

S0 = A 1 A 0
S1 = A 1 A 0
S2 = A 1 A 0
S3 = A1 A0

Schma et symbole dun dcodeur 2 bits

Le dcodeur 3 bits a 3 entres et 8 sorties. Chaque sortie est obtenue comme le et logique des entres
ou de leurs ngations. Les entres devant tre inverses correspondent aux zros dans lcriture en
binaire du numro de la sortie. Ainsi la sortie S 5 est gal A 2 A 1 A 0 car 5 scrit 101 en
binaire.

Schma et symbole dun dcodeur 3 bits

Les circuits donns pour k gal 1, 2 et 3 se gnralisent facilement un entier quelconque. Le circuit
est alors constitu dinverseurs et de 2 k portes and ayant chacune k entres. Le nombre dinverseurs
ncessaires est k puisquil en faut un pour chaque entre A i afin de disposer de sa ngation A i . Sur
les schmas pour k = 1, 2, 3, certains inverseurs peuvent tre vits en rutilisant une valeur calcule
par un autre. Par contre, les schmas deviennent beaucoup moins clair. Comme chaque porte and k
entres peut tre ralise avec k-1 portes and 2 entres (cf. la section portes logiques), on obtient un
total de (k-1)2 k portes and. La profondeur de ce circuit est alors log 2 (k).

- 29 -
5.1.1 Dcodeur rcursif Olivier Carton

5.1.1 Dcodeur rcursif


Il est possible de construire de manire rcursive un dcodeur ayant n entre. Il faut alors introduire un
circuit un peu plus gnral avec une nouvelle entre appele CS pour Chip Select. Un dcodeur k bits
avec une entre CS possdent donc k+1 entres CS, A 0 , , A k-1 et 2 k sorties S 0 , , S 2 k -1 . Ce
circuit se comporte de la faon suivante. Si lentre CS vaut 0, toutes les sorties valent 0 et si CS vaut
1, il se comporte comme un simple dcodeur. Lentre dont le numro scrit en binaire A k-1 A 0
vaut 1 et toutes les autres sorties valent 0.

Pour k = 1, la table de vrit du dcodeur 1 bit avec une entre CS est donc la suivante.

Entre Sorties
CS A 0 S 0 S 1
0 0 0 0
0 1 0 0
1 0 1 0
1 1 0 1

On en dduit facilement le circuit ci-dessous.

Schma et symbole dun dcodeur 1 bit avec entre CS

Pour k > 1, on peut construire un dcodeur k+1 entres en utilisant deux dcodeurs k entres et un
dcodeur 1 entre et en les combinant comme sur le schma ci-dessous. Les deux dcodeurs k
entres reoivent les entres A 0 , , A k-1 et leurs deux entres CS sont commandes par les deux
sorties du dcodeur 1 bit. Ce dernier reoit en entre A k et CS.

Construction rcursive dun dcodeur k+1 entres

- 30 -
Circuits lmentaires 5.2 Multiplexeurs

Pour k gal 2 et 3, la construction donne les deux dcodeurs suivants.

Schmas des dcodeurs rcursifs 2 et 3 bits

On montre facilement que le nombre de dcodeurs 1 bit utiliss dans le dcodeur k bits est 2 k -1 et que
le nombre de portes and utilises est donc 2 k+1 -2. La profondeur du circuit est k. Par rapport au
dcodeur construit de manire directe, le circuit construit rcursivement utilise moins de portes
logiques (2 k+1 au lieu de k2 k ) mais a une profondeur suprieure (k au lieu de log 2 (k)).

5.2 Multiplexeurs
Un multiplexeur est en quelque sorte linverse dun dcodeur. Un multiplexeurs k bits permet de
slectionner une entre parmi 2 k disponibles. Un multiplexeur k bits a k + 2 k entres et une seule
sortie. Les k premires entres A 0 ,,A k-1 sont appeles bits dadresses car elles donnent le numro
de lentre slectionner parmi les entres B 0 ,,B 2 k -1 . La sortie S est alors gale cette entre
slectionne.

Le multiplexeur 1 bit a donc 3 entres A 0 , B 0 et B 1 et une seule sortie S. La formule donnant la sortie
S en fonction des entres est la suivante.

S = (A 0 B 1 ) (A 0 B 0 )

Schma et symbole dun multiplexeur 1 bit

- 31 -
5.2 Multiplexeurs Olivier Carton

Le multiplexeur 2 bit a donc 6 entres A 0 , A 1 , B 0 , B 1 , B 2 et B 3 et une seule sortie S. La formule


donnant la sortie S en fonction des entres est la suivante.

S = (A 1 A 0 B 3 ) (A 1 A 0 B 2 ) (A 1 A 0 B 1 ) (A 1 A 0 B 0 )

Schma et symbole dun multiplexeur 2 bits

Le multiplexeur k bits peut tre construit rcursivement en utilisant le schma ci-dessous qui donne la
construction dun multiplexeur k+1 bits avec deux multiplexeurs k bits et un multiplexeur 1 bit.

Multiplexeur k+1 bits construit avec deux multiplexeurs k bits

Pour k gal 2 et 3, la construction donne les deux multiplexeurs suivants.

- 32 -
Circuits lmentaires 5.3 Construction de circuits

Schmas des multiplexeurs rcursifs 2 et 3 bits

Comme pour les dcodeurs rcursifs, on montre facilement que le nombre de multiplexeurs 1 bit
utiliss dans le multiplexeur k bits est 2 k -1 et que le nombre de portes logiques and et or utilises est
donc 3(2 k -1). La profondeur du circuit est k. Par rapport au multiplexeur construit de manire directe,
le circuit construit rcursivement utilise moins de portes logiques (3 2 k au lieu de k2 k ) mais a une
profondeur suprieure (k au lieu de log 2 (k)).

5.3 Construction de circuits


Dans cette partie, nous expliquons comment construire le circuit dune fonction boolenne. Nous
allons le faire sur lexemple de la fonction hidden bit.

5.3.1 Dfinition
Nous commenons par donner la dfinition de la fonction hidden bit. Cette fonction prend en entre k
valeurs boolennes et retourne une valeur boolenne. Soient k entres binaires A 1 ,, A k et soit s la
somme de ces entres, cest--dire le nombre dentres gales 1 : s = #{ i | A i = 1 }. Cette somme est
comprise entre 0 et k. La sortie S est alors gale 0 si s = 0 et elle est gale A s si 1 s k.

5.3.2 Cas k = 1
Entre Sorties
A1 s S
0 0 0
1 1 1

On a alors lgalit S = A 1 . Le circuit est dans ce cas trivial puisquil se contente de mettre lentre
A 1 en sortie.

- 33 -
5.3.3 Cas k = 2 Olivier Carton

5.3.3 Cas k = 2
Entres Sorties
A1 A2 s S
0 0 0 0
1 0 1 1
0 1 1 0
1 1 2 1

On a alors lgalit S = A 1 . Le circuit est encore une fois immdiat puisquil se contente de mettre
lentre A 1 en sortie.

5.3.4 Cas k = 3
Le cas k = 3 est le premier cas intressant. On commence par calculer la table qui donne pour chaque
valeur des entres les valeurs des deux sorties s et S.

Entres Sorties
A1 A2 A3 s S
0 0 0 0 0
1 0 0 1 1
0 1 0 1 0
1 1 0 2 1
0 0 1 1 0
1 0 1 2 0
0 1 1 2 1
1 1 1 3 1

Partir de cette table de vrit de la fonction, il est facile de trouver une expression de la sortie S en
fonction des trois entres A 1 , A 2 et A 3 .

S = A1 A2 A3 + A1 A2 A3 + A1 A2 A3 + A1 A2 A3

Les quatre monmes correspondent aux quatre lignes de la table o la sortie prend la valeur 1. Le
premier monme A 1 A 2 A 3 correspond par exemple la seconde ligne de la table. La sortie S vaut 1
lorsque A 1 = 1, A 2 = 0 et A 3 = 0.

Il est possible de construire un circuit partir de la formule ci-dessus. Les valeurs des monmes
peuvent tre calcules par quatre portes et trois entres et la valeur finale de S peut tre calcule par
trois portes ou deux entres. Afin de construire un circuit le plus petit possible, il est ncessaire de
simplifier au maximum la formule.

- 34 -
Circuits lmentaires 5.3.4 Cas k = 3

La formule ci-dessus peut tre simplifie. La somme des deux premiers monmes peut tre rduite
un seul monme plus simple de la faon suivante.

A 1 A 2 A 3 + A 1 A 2 A 3 = A 1 A 3 (A 2 + A 2 ) = A 1 A 3

Nous prsentons maintenant une mthode graphique lmentaire permettant de trouver une expression
simple pour une formule. Cette mthode dite des tables de Karnaugh (cf. aussi wikibook) ne donne
pas toujours la meilleure expression mais elle fonctionne relativement bien tout en tant facile mettre
en uvre.

Nous expliquons la mthode sur notre exemple. La mthode consiste disposer les valeurs de
lexpression dans une table rectangulaire comme ci-dessous.

A1 A1
A2 A2 A2 A2
A3 1 0 0 1
A3 1 1 0 0

Il faut essayer alors de regrouper les valeurs 1 en blocs rectangulaires. Ainsi, les deux 1 rouges
correspondent A 1 = 1 et A 3 = 0. Ils donnent donc le monme A 1 A 3 que nous avions obtenu en
regroupant les deux premiers monmes de notre formule initiale. Les blocs de 1 peuvent ne pas tre
contigus. Les deux 1 bleus correspondent A 2 = 1 et A 3 = 1 et ils donnent le monme A 2 A 3 . Les
blocs de 1 peuvent ventuellement se chevaucher. On a donc finalement trouv la formule suivante
pour S.

S = A2 A3 + A1 A3

Le circuit construit partir de la formule prcdente ne contient plus que deux portes et et une porte ou
deux entres. On reconnat le circuit dun multiplexeur 1 bit o A 3 est le bit dadresse (ou de
commande) et A 1 et A 2 sont les entres.

Schma pour la fonction hidden bit 3 entres

- 35 -
5.3.5 Cas k = 4 Olivier Carton

5.3.5 Cas k = 4
Entres Sorties
A1 A2 A3 A4 s S
0 0 0 0 0 0
1 0 0 0 1 1
0 1 0 0 1 0
1 1 0 0 2 1
0 0 1 0 1 0
1 0 1 0 2 0
0 1 1 0 2 1
1 1 1 0 3 1
0 0 0 1 1 0
1 0 0 1 2 0
0 1 0 1 2 1
1 1 0 1 3 0
0 0 1 1 2 0
1 0 1 1 3 1
0 1 1 1 3 1
1 1 1 1 4 1

A1 A1
A2 A2 A2 A2
A4 1 1 0 1
A3
A4 1 0 0 1
A4 1 1 0 0
A3
A4 0 0 0 1

S = A1 A3 A4 + A2 A3 A4 + A1 A2 A4 + A1 A3 A4

- 36 -
Circuits lmentaires 5.3.6 Cas k = 5

Schma pour la fonction hidden bit 4 entres

5.3.6 Cas k = 5
S = A1 A3 A4 A5 + A2 A3 A4 A5 + A1 A2 A4 A5 + A1 A3 A4 A5
+ A1 A2 A4 A5 + A1 A3 A4 A5 + A1 A2 A3 A5 + A1 A2 A4 A5

Schma pour la fonction hidden bit 5 entres

- 37 -
6 Additionneurs Olivier Carton

6 Additionneurs
Laddition est une opration trs courante dans un microprocesseur. Outre dans lunit arithmtique,
elle sert pour incrmenter le compteur de programme et pour les calculs dadresses. Il est donc
important quelle soit optimise pour tre rapide. Malgr la simplicit apparente du problme, il existe
de multiples faons de construire des additionneurs efficaces en temps et en nombre de portes logiques
utilises.

6.1 Semi-additionneur
Ce premier circuit est la brique de base. Il prend en entre deux bits A et B et calcule la somme S et la
retenue C (pour Carry en anglais). Les bits C et S peuvent aussi tre vus comme les bits de poids fort
et de poids faible de lcriture sur deux bits de la somme A + B.

Entres Sorties
A B C S
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 0

On remarque sur la table de vrit que S est le ou exclusif des deux entres A et B, i.e. S = A B et
que C vaut 1 lorsque les deux entres valent 1, cest--dire C = A B.

Schma et symbole dun semi-additionneur (HA)

6.2 Additionneur complet 1 bit


Pour construire un additionneur sur plusieurs bits, plusieurs additionneurs 1 bit sont mis en cascade.
Chacun de ces addionneurs prend en entre deux bits A et B ainsi que la retenue prcdente C 0 . Il
calcule la somme S de ces trois valeurs binaires ainsi que la retenue C 1 . Comme pour le
semi-additionneur, ces bits C 1 et S peuvent aussi tre vus comme les bits de poids fort et de poids
faible de lcriture sur deux bits de la somme A + B + C 0 . Cette somme scrit justement sur deux bits
car elle est comprise entre 0 et 3.

- 38 -
Additionneurs 6.2 Additionneur complet 1 bit

Entres Sorties
A B C0 C1 S
0 0 0 0 0
0 1 0 0 1
1 0 0 0 1
1 1 0 1 0
0 0 1 0 1
0 1 1 1 0
1 0 1 1 0
1 1 1 1 1

On peut remarquer sur la table de vrit que S est le ou exclusif des trois entres A, B et C 0 , i.e. S = A
B C 0 et que la retenue C 1 vaut 1 ds que deux des trois entres valent 1, cest--dire C 1 = AB
AC 0 BC 0 .

Schma partir des formules dun additionneur complet

Ce circuit peut aussi tre construit en assemblant deux semi-additionneurs en cascade. Le premier
semi-additionneur calcule dabord la somme de A et B puis le second calcule la somme du premier
rsultat et de C 0 . La retenue C 1 vaut 1 sil y a au moins une retenue une des deux sommes
effectues.

- 39 -
6.3 Additionneur par propagation de retenue Olivier Carton

Schma et symbole dun additionneur complet (SC)

6.3 Additionneur par propagation de retenue


Ladditionneur par propagation de retenue est le plus simple. Il est calqu sur lalgorithme manuel
pour effectuer laddition. Les paires de bits sont additionns colonne par colonne et les retenues sont
propages vers la gauche.

En mettant en cascade k additionneurs complets 1 bits, on construit un additionneur k bits appel


additionneur par propagation de retenue car la retenue se propage dadditionneur en additionneur.

Ladditionneur est form de k additionneurs 1 bit numrots de 0 k-1 de la droite vers la gauche.
Ladditionneur i reoit en entres les bits A i et B i des entres A et B ainsi que la retenue C i
engendre par ladditionneur i-1. Il calcule le bit S i de la somme et la retenue C i+1 qui est transmise
ladditionneur i+1.

Ladditionneur 0 reoit une retenue C 0 qui est normalement 0 pour effectuer une addition. Lutilit
de cette entre est double. Elle permet dune part de cascader les additionneurs pour former des
additionneurs sur plus de bits. Elle permet dautre part deffectuer la soustraction.

Le nombre de portes logiques utilises par un additionneur par propagation de retenue k bits est
proportionnel au nombre k. Le temps de propagation de la retenue est galement proportionnel au
nombre k. Pour cette raison, cet additionneur est impraticable pour des nombres levs de bits comme
16 ou 64. Il est seulement utilis pour des petits nombres de bits, comme 4. Par contre, il peut servir de
brique de base des additionneurs plus sophistiqus comme ladditionneur hybride.

Additionneur 4 bits

- 40 -
Additionneurs 6.4 Calcul des indicateurs

6.4 Calcul des indicateurs


Dans tout micro-processeur, il existe des indicateurs ou flags qui sont des registres 1 bit pouvant
prendre les valeurs 0 ou 1. Ils sont mis jour ds quun chargement ou une opration logique ou
arithmtique est effectue. Ces indicateurs peuvent ensuite tre tests par les branchement
conditionnels.

Les principaux indicateurs utiliss sont les indicateurs N, Z, C et O dcrits ci-dessous. Chacun de ces
indicateurs concerne le rsultat de la dernire opration effectue (chargement, logique ou
arithmtique).

Indicateur N (pour Ngatif)


Il indique si le rsultat est ngatif. Comme les entiers sont reprsents en complments 2, il est
gal au bit de poids fort du rsultat.
Indicateur Z (pour Zro)
Il indique si le rsultat est gal 0. Il est donc gal au complmentaire du ou logique (cest--dire
un nor) de tous les bits du rsultat.
Indicateur C (pour Carry)
Il indique si lopration a provoqu une retenue. Il est peut donc uniquement tre positionn par
les oprations arithmtiques. Il est mis 1 lorsquil y a une retenue. Ceci correspond un
dbordement pour une addition de nombres non signs.
Indicateur O (pour Overflow)
Il indique un dbordement lors dune addition de nombres signs. Ce dbordement intervient
lorsque la somme de deux nombres positifs est suprieure 2 k-1 ou lorsque la somme de deux
nombres ngatifs est infrieure -2 k-1 -1. Cet indicateur est gal au ou exclusif C k C k-1 des
deux dernires retenues.

Calcul des indicateurs

6.5 Additionneur par anticipation de retenue


La lenteur de ladditionneur par propagation de retenue impose dutiliser dautres techniques pour des
additionneurs ayant un nombre important de bits. Comme cette lenteur est due au temps ncessaire la
propagation de la retenue, toutes les techniques ont pour but dacclrer le calcul des retenues. La
premire technique appele anticipation de retenue consiste faire calculer les retenues par un circuit
extrieur.

- 41 -
6.5 Additionneur par anticipation de retenue Olivier Carton

Afin de faciliter le calcul des retenues, on introduit deux quantits appeles G (pour Generate en
anglais) et P (pour Propagate en anglais). Pour deux quantits binaires A et B, les quantits G et P sont
dfinies de la faon suivante.

G = AB et P = A + B

Soient A = A n-1 A 0 et B = B n-1 B 0 deux entres de n bits. On note C i la retenue de laddition des
i bits de poids faible de A et B. Pour acclrer le calcul des C i , on introduit les deux quantits G i et P i
associes aux entres A i et B i par les formules suivantes.

G i = A i B i et P i = A i + B i

La valeur G i est la retenue engendre par laddition des deux bits A i et B i et la valeur de P i
dtermine si la retenue de C i se propage. On a donc la formule suivante qui exprime simplement que
la retenue C i+1 provient soit directement de laddition des bits A i et B i soit de la propagation de la
retenue C i .

C i+1 = G i + P i C i

En utilisant plusieurs fois cette formule, on peut obtenir les formules suivantes qui expriment C i+1 en
fonction dune retenue prcdente et des valeurs G j et P j intermdiaires.

C i+1 = G i + P i G i-1 + P i P i-1 C i-1


C i+1 = G i + P i G i-1 + P i P i-1 G i-2 + P i P i-1 P i-2 C i-2

Le circuit suivant permet de calculer la somme ainsi que les deux quantits G i et P i .

Cellule de calcul de S, G et P.

- 42 -
Additionneurs 6.5.1 Calcul anticip des retenues

6.5.1 Calcul anticip des retenues


En utilisant les formules ci-dessus, on obtient les formules suivantes pour les retenues C 1 , C 2 , C 3 , et
C 4 partir de C 0 et des signaux G 0 , P 0 , G 1 , P 1 , G 2 , P 2 G 3 et P 3 .

C1 = G0 + P0C0
C2 = G1 + P1G0 + P1P0C0
C3 = G2 + P2G1 + P2P1G0 + P2P1P0C0
C4 = G3 + P3G2 + P3P2G1 + P3P2P1G0 + P3P2P1P0C0

Comme la retenue C 4 nest pas ncessaire pour calculer les sommes S 0 , S 1 , S 2 et S 3 , celle-ci
peut-tre calcule en utilisant la formule suivante.

C4 = G3 + P3C3

Lutilisation de cette dernire formule ne retarde pas les calculs des sommes et conomise des portes.

Circuit de calcul des retenues

6.5.2 Additionneur 4 bits avec calcul anticip des retenues

- 43 -
6.5.3 Additionneur 16 bits avec calcul anticip des retenues Olivier Carton

Additionneur 4 bits avec calcul anticip des retenues

6.5.3 Additionneur 16 bits avec calcul anticip des


retenues
Plus gnralement, on note pour deux indices i et j, G j,i et P j,i la retenue engendre par laddition des
bits de i j et la possibilit quune retenue se propage travers les bits de i j. On a donc la formule
suivante qui exprime la retenue C j+1 en fonction de G j,i , P j,i et C i .

C j+1 = G j,i + P j,i C i

- 44 -
Additionneurs 6.5.3 Additionneur 16 bits avec calcul anticip des retenues

Circuit de calcul des retenues et de G et P

- 45 -
6.6 Additionneur rcursif Olivier Carton

Additionneur 16 bits avec calcul anticip des retenues

6.5.4 Additionneur 64 bits avec calcul anticip des


retenues

Additionneur 64 bits avec calcul anticip des retenues

6.6 Additionneur rcursif


On commence par dfinir une opration binaire sur les paires (G,P). Cette opration note prend en
paramtre deux paires (G, P) et (G, P) de valeurs binaires et retourne une nouvelle paire (G, P) =
(G, P) (G, P) dfinie par les formules suivantes.

G = G + PG et P = PP

Cette opration nest pas commutative mais elle est associative. Les deux calculs de ((G, P) (G, P))
(G, P) ou de (G, P) ((G, P) (G, P)) donnent en effet la paire suivante. Il sagit pour les
connaisseurs dun produit semi-direct.

- 46 -
Additionneurs 6.6 Additionneur rcursif

(G+PG+PPG, PPP)

Cette opration permet des calculs rapides de toutes les valeurs G et P en utilisant les formules
ci-dessous.

Pour i = k, on a G i,i = G i et P i,i = P i . Pour i j k, on a la formule suivante qui permet de calculer


rcursivement toutes les valeurs G k,i et P k,i .

(G k,i , P k,i ) = (G k,j+1 , P k,j+1 ) (G j,i , P j,i ).

Le circuit GP ci-dessous calcule lopration Il prend en entre deux paires (G k,j+1 , P k,j+1 ) et (G j,i ,
P j,i ) et calcule la paire (G k,i , P k,i ) en utilisant la formule ci-dessus.

Cellule de calcul des G k,i et P k,i

Le circuit GP peut tre utilis pour former un arbre de calcul des valeurs G k,i et P k,i . Cet arbre ne
calcule pas toutes les valeurs G k,i et P k,i mais seulement celles ncessaires au calcul des retenues.

Arbre de calcul des G k,i et P k,i

- 47 -
6.6 Additionneur rcursif Olivier Carton

Le circuit GP peut tre tendu en un circuit GPC qui effectue en outre le calcul de la retenue en
utilisant la formule suivante dj donne ci-dessus.

C j+1 = G j,i + P j,i C i .

Le circuit GPC prend donc entre deux paires (G k,j+1 , P k,j+1 ) et (G j,i , P j,i ) et une retenue C i et
calcule la paire (G k,i , P k,i ) et la retenue C j+1 .

Cellule de calcul des G k,i , P k,i et C j

Si on remplace les circuit GP par des circuits GPC dans larbre de calcul ci-dessus, on obtient un
circuit qui calcule en outre les retenues.

Additionneur rcursif 8 bits

- 48 -
Additionneurs 6.7 Additionneur hybride

Pour un circuit travaillant sur des entres de k bits, la profondeur de larbre est gale log k. Le
nombre de portes du circuit est donc de lordre de k. Le temps de calcul des retenues est proportionnel
log k. Les signaux G et P doivent descendre jusqu la racine de larbre puis les calculs de retenues
doivent remonter jusquaux feuilles.

6.7 Additionneur hybride


Lide gnrale dun additionneur hybride est de combiner des techniques diffrentes de calcul de
retenues pour construire un gros additionneur. Une premire technique comme la propagation de la
retenue peut tre utilise pour construire des petits additionneurs qui sont ensuite regroups en utilisant
une autre technique comme le calcul anticip de la retenue. On construit ci-dessous un additionneur 16
bits en combinant 4 additionneurs 4 bits par propagation de retenue. Ces 4 additionneurs 4 bits sont
assembls autour dun circuit danticipation de retenue qui calcule leurs 4 retenues dentre.

Afin de pouvoir utiliser un circuit danticipation de retenue, il faut disposer dun circuit calculant les
valeurs G et P associes chacun des blocs de 4 bits. Ce circuit GP prend en entre les 8 valeurs G 0 ,
G 1 , G 2 , G 3 , P 0 , P 1 , P 2 , et P 3 associes aux 4 paires de bits et produit les valeurs G 3,0 et P 3,0 du
bloc de 4 bits.

On construit 4 additionneurs par propagation de retenue qui calculent galement les valeurs G 0 , G 1 ,
G 2 , G 3 , P 0 , P 1 , P 2 , et P 3 associes aux 4 paires de bits.

Additionneur 4 bits et calcul de G et P

Les quatre additionneurs par propagation de retenue 4 bits 4SGP sont combins au circuit
danticipation de retenue 4C par lintermdiaire des circuits GP de calcul des valeurs G et P des blocs.
Le circuit global obtenu est un additionneur hybride 16 bits.

- 49 -
6.8 Additionneur par slection de retenue Olivier Carton

Additionneur hybride 16 bits

6.8 Additionneur par slection de retenue


Lide gnrale de ladditionneur par slection de retenue est deffectuer en parallle le calcul avec
une retenue de 0 et le calcul avec une retenue de 1 puis de slectionner le bon rsultat lorsque la
retenue est enfin connue.

Additionneur par slection de retenue 16 bits

- 50 -
Additionneurs 6.9 Soustracteur

6.9 Soustracteur
Pour calculer la diffrence A - B de deux nombre signs A et B, on utilise un circuit qui calcule
dabord loppos -B de B puis effectue la somme de A avec -B grce un additionneur. Le calcul de
-B est ralis en prenant la ngation de B bit bit puis en ajoutant 1 au rsultat obtenu. Ce dernier 1 est
en fait ajout directement la somme de A et -B en linjectant comme retenue C 0 ladditionneur.

Le circuit ci-dessous effectue une somme ou une diffrence suivant la valeur de la commande Cmd. Si
Cmd vaut 0, le circuit calcule la somme A + B. Si, au contraire, Cmd vaut 1, le circuit calcule la
diffrence A - B. En effet, chacune des portes xor effectue la ngation ou non dune entre B i suivant
la valeur de Cmd.

La diffrence est ici calcule avec un simple additionneur par propagation de retenue mais tout autre
additionneur plus sophistiqu aurait pu aussi tre utilis.

Soustracteur 4 bits

- 51 -
7 Mmoires Olivier Carton

7 Mmoires
On appelle mmoire un composant lectronique permettant de stocker une information sous forme
binaire. On distingue les mmoires lecture seule appeles ROM pour Read Only Memory et les
mmoires lecture/criture appeles improprement RAM pour Random Access Memory. Le contenu
des mmoires lecture seule est fix lors de la fabrication en usine et reste dans la mmoire lorsque
celle-ci nest pas alimente. Au contraire, les mmoires lecture/criture sont volatiles. Le contenu est
perdu ds quelles ne sont plus alimentes.

Il existe des mmoires intermdiaires entre les RAM et les ROM. Elles se comportent comme des
ROM dans la mesure o elles ne perdent pas leur contenu sans alimentation mais ce contenu peut
toutefois tre modifi par un processus spcial. Le contenu dune EPROM est effac par une
exposition aux ultra-violets. Un nouveau contenu peut alors tre crit par un appareil spcialis. Les
EEPROM peuvent tre reprogrammes de manire lectrique. Les mmoires flash sont des EEPROM
dont la reprogrammation est rapide (do leur nom).

Les mmoires des tous premiers ordinateurs taient magntiques. Les mmoires sont maintenant des
composants lectroniques base de transistors. Il existe deux types de mmoires qui se distinguent par
leur technique de fabrication : les mmoires dynamiques et les mmoires statiques. Il sagit dans les
deux cas de mmoires volatiles qui ncessitent une alimentation pour conserver leur contenu. La
mmoire dynamique est appele DRAM pour Dymanic RAM par opposition la mmoire statique
appele SRAM pour Static RAM.

Mmoire dynamique Mmoire statique


Grande densit dintgration Petite densit dintgration
Bon march Chre
Lente Rapide
Mcanisme de rafrachissent

Comme son cot est moindre et que sa densit dintgration est suprieure, la mmoire dynamique est
utilise pour la mmoire principale de lordinateur. Par contre, la mmoire statique est utilise pour les
caches en raison de sa plus grande vitesse.

7.1 Mmoire dynamique


Chaque lment de mmoire dynamique est form dun condensateur et dun transistor de commande
(cf. figure ci-dessous). La ligne A est appele ligne de commande ou ligne dadresse. La ligne B est la
ligne de donne sur laquelle est lu ou crit le bit dinformation. Le bit dinformation est reprsent par
la charge du condensateur. Lorsque la ligne de commande est 0, le condensateur est isol de la ligne
de donne et la charge reste prisonnire du condensateur. Au contraire, lorsque la ligne de commande
est 1, on peut lire le bit en dtectant la charge ou crire un nouveau bit en forant la ligne de donne
une valeur.

- 52 -
Mmoires 7.2 Mmoire statique

Mmoire dynamique 1 bit

7.1.1 Types de mmoires dynamiques


Il existe deux types principaux de mmoire dynamique qui se distinguent par leur faon de
communiquer avec le processeur. Les premires mmoires dynamiques taient asynchrones alors que
les mmoires actuelles sont synchrones. Ces dernires sont appeles SDRAM pour Synchronous
Dymanic RAM.

Lorsque le processeur lit une donne dans une mmoire asynchrone, celui-ci lui envoie ladresse puis
attend que celle-ci lui retourne la donne cette adresse. Plusieurs cycles horloge peuvent scouler
avant que la donne ne parvienne au processeur. Aprs rception de la donne, le processeur peut
nouveau demander une autre donne la mmoire. chaque requte la mmoire, le processeur reste
inactif en attendant que la donne narrive.

Dans le cas de mmoire synchrone, le processeur peut envoyer la mmoire une nouvelle requte de
lecture ou dcriture avant que celle-ci nait fini de traiter la premire requte. Les demandes
successives sont alors excutes squentiellement par la mmoire. Chaque requte est reue pendant
un cycle dhorloge et les donnes sont dlivres quelques cycles dhorloge plus tard. Le nombre de
cycles dhorloge entre la requte et la donne est fixe. De cette manire, le processeur peut dterminer
quelle requte correspond chaque donne. Le principe de fonctionnement dune mmoire synchrone
est identique au pipeline utilis pour raliser un processeur. La mmoire est organise comme une
chane o sont traites les requtes. La mmoire traite simultanment plusieurs requtes qui se
trouvent des tapes diffrentes de la chane. Le traitement dune seule requte prend plusieurs cycles
dhorloge mais une requte est traite chaque cycle.

Parmi les mmoires synchrones, on distingue encore plusieurs variantes. Les mmoires SDR SDRAM
pour Single Data Rate SDRAM reoivent une requte chaque cycle dhorloge. Les mmoires DDR
SDRAM pour Double Data Rate DRAM permettent de doubler le dbit de donnes entre le processeur
et la mmoire. Une requte est encore traite chaque cycle dhorloge mais chaque requte concerne
deux mots conscutifs en mmoire. Le premier mot est transmis sur le front montant du signal
dhorloge alors que le second est transmis sur front descendant du signal dhorloge. Les mmoires
DDR2 SDRAM doublent encore le dbit de donnes en traitant quatre mots conscutifs en mmoire
chaque requte.

7.2 Mmoire statique


Chaque lment de mmoire statique est form de six transistors. Quatre de ces six transistors
constituent deux inverseurs mis tte-bche et les deux derniers, commands par la ligne dadresse A,
relient les inverseurs aux lignes de donnes

- 53 -
7.2 Mmoire statique Olivier Carton

Mmoire statique 1 bit

Le verrou SR est un bit de mmoire muni de deux entres S et R permettant de le positionner 1 (Set)
ou 0 (Reset). Ce circuit peut tre ralis avec deux portes nor ou deux portes nand. Dans ce dernier
cas, les commandes S et R sont inverses : elles sont actives pour la valeur 0 et inactive pour la valeur
1.

Verrou SR

Linconvnient principal du verrou SR est que son tat nest pas spcifi si les deux commandes S et R
sont actives simultanment. Le verrou D rsout ce problme. Ce verrou a deux entres D (pour Data)
et W (pour Write). La premire entre donne la valeur qui doit tre crite dans le bit de mmoire et la
seconde entre valide lentre D. Si W vaut 0, rien nest crit dans la mmoire et son tat reste
inchang. Si au contraire W vaut 1, la valeur de D est crite dans la mmoire.

Verrou D (mmoire 1 bit)

La bascule D est obtenue en mettant en srie deux verrous D avec des entres W en opposition
(ngation lune de lautre). Lentre W du premier verrou D est lentre Clk de la bascule et sa sortie
est lentre D du second verrou D. Lentre W du second verrou est la ngation Clk de lentre Clk
de la bascule. Quand lentre Clk de la bascule vaut 1, son entre D est crite dans le premier verrou
pendant que le second verrou reste inchang. Quand lentre Clk de la bascule vaut 0, le premier
verrou reste inchang et son tat est crit dans le second verrou. Il sagit dune sorte de bufferisation
qui permet de lire et dcrire simultanment dans une mmoire 1 bit. Pendant que Clk vaut 1, le

- 54 -
Mmoires 7.3 Organisation de la mmoire

premier verrou reoit la nouvelle valeur pendant que lancienne valeur est lue dans le second verrou.
Pendant que Clk vaut 0, la nouvelle valeur est transfre dans le second verrou.

Les bascules D sont utilises dans les circuits squentiels et elle reoivent alors le signal dhorloge sur
lentre Clk (pour Clock).

Bascule D (mmoire 1 bit avec bufferisation)

7.3 Organisation de la mmoire

7.3.1 Mmoires k n bits


La mmoire peut tre vue comme organise en grille. Chaque ligne correspond une adresse. Le
nombre de lignes est donc une puissance de deux. Ce nombre est gal 2 k o k est le nombre de
lignes dadresse. Chaque colonne de la grille correspond un des bits de la donne transmise. Le
nombre de colonnes peut tre quelconque mme si dans la pratique, cest aussi une puissance de deux,
souvent 8, 16 ou 32.

- 55 -
7.3.2 Mmoires 1 bit Olivier Carton

Mmoire 4 3 bits

7.3.2 Mmoires 1 bit


Dans le cas dune mmoire 1 bit, il y a un intrt ne pas lorganiser comme une seule colonne selon
le principe prcdent mais encore sous forme dune grille. Il y a alors un gain sur le nombre de portes
logiques utilises pour le dcodage des adresses.

- 56 -
Mmoires 7.3.3 Couplage de mmoire

Organisations colonne et grille dune mmoire 2 8 1 bits

Soit par exemple une mmoire 2 8 1 bits. Si elle est organise selon une seule colonne, on a un
dcodeur 8 entres qui utilise donc 256 = 2 8 portes et logique ayant chacune 8 entres. Cette mme
mmoire peut tre organise selon une grille 16 16. Les quatre premiers bits A 0 A 3 sont envoys
sur un dcodeur pour slectionner la ligne parmi les 16 = 2 4 lignes. Un multiplexeur command par
les quatre derniers bits A 4 A 7 permet de slectionner le bit parmi les 16 bits provenant des 16
colonnes. Le dcodeur et le multiplexeur utilisent chacun 16 portes et logique ayant chacune 3 ou 4
entres. Ceci fait un total de 32 portes dans lorganisation en grille et donc un gain de 224 portes
portes par rapport lorganisation en colonne. Dans le cas de mmoires ayant un nombre trs
important de bits, le gain est bien suprieur.

Dans le cas dune grille, celle-ci na pas besoin dtre carre comme dans lexemple. Il est possible
dutiliser tous les intermdiaires entre une seule colonne et un carr. Par contre, ce sont les grilles
carres qui procurent le plus grand gain en nombre de portes logiques. Dans lorganisation colonne, le
nombre de portes utilises est proportionnel au nombre de bits de la mmoire. Chaque bit mmoire
ncessite un seul transistor alors que chaque porte logique ncessite plusieurs transistors. Du coup,
lessentiel des transistors est finalement utilis pour le dcodage des adresses. Dans lorganisation en
grille, le nombre de portes logiques utilises pour le dcodage est proportionnel la racine carre n
de n o n est le nombre de bits de la mmoire.

7.3.3 Couplage de mmoire


La plupart des mmoires utilises dans les ordinateurs sont des mmoires 1 bit. Pour obtenir une
mmoire dont chaque mot est un octet, il est ncessaire dassembler huit botiers. Ceux-ci sont mis en
parallle dans la mesure o ils reoivent tous la mme adresse. Par contre, chacun des botiers reoit
une seule ligne du bus de donne.

- 57 -
7.4 Mmoires associatives Olivier Carton

Mmoire 2 8 8 bits

7.3.4 Augmentation de la taille


Pour construire une mmoire ayant 2 k mots avec des botiers mmoire 2 k mots, il faut utiliser 2 k-k
botiers. Les k bits dadresses sont alors distribus de la manire suivante. Les k bits de poids faibles
A 0 A k-1 sont envoys sur tous les botiers. Les k-k bits de poids fort A k A k-1 arrivent sur un
dcodeur permettant de slectionner un seul des 2 k-k botiers mmoire. Tous les bits du bus de
donnes sont relis chacun des botiers. Ceci est possible aussi bien en lecture quen criture car les
entre/sorties des botiers sont dans un tat dit haute impdance lorsque le circuit nest pas slectionn.

Mmoire 2 12 8 bits

7.4 Mmoires associatives


Les mmoires associatives permettent de stocker un ensemble de paires (cls,valeurs), de rechercher
en temps constant si une valeur est associe une cl. Un tel dispositif est utilis dans les routeurs
rseaux et surtout pour le Translation Lookaside Buffer de la mmoire virtuelle. La mmoire
associative sert alors traduire les adresses virtuelles en adresses physiques.

- 58 -
Mmoires 7.4 Mmoires associatives

Principe de la mmoire associative

Organisation dune mmoire associative

Cellule de mmoire associative

- 59 -
8 Circuits squentiels Olivier Carton

8 Circuits squentiels
Il ny a aucune notion de temps dans les circuits combinatoires. Un circuit combinatoire est
simplement une fonction qui calcule des valeurs de sortie en fonction des valeurs dentre. On peut
ajouter la notion de temps avec un signal dhorloge. Un signal dhorloge est un signal carr priodique
qui peut tre produit par un quartz.

8.1 Principe

Principe du circuit squentiel

8.2 Horloge

Signal dhorloge

8.3 Exemple
Le petit circuit ci-dessous permet dincrmenter ou de dcrmenter un entier cod sur trois bits. Soit n
lentier reprsent en binaire par les trois bits dentre A 2 A 1 A 0 . Si la valeur en entre de Cmd est 0,
lentier reprsent par les trois bits de sortie S 2 S 1 S 0 est n+1. Si au contraire la valeur en entre de
Cmd est 1, lentier reprsent par les trois bits de sortie S 2 S 1 S 0 est n-1. Les calculs de n+1 ou n-1
sont bien sr effectus modulo 8.

Incrmenteur/dcrmenteur commande

- 60 -
Circuits squentiels 8.4 Automate

Le circuit ci-dessous ralise une guirlande lumineuse. Les lampes sallument tour de rle de manire
cyclique. La vitesse du processus est contrle par le signal dhorloge Clk. Le sens de rotation du
cycle est dtermin par lentre Cmd.

Guirlande commande

8.4 Automate

Implantation dun automate

- 61 -
9 Architecture dun micro-processeur Olivier Carton

9 Architecture dun micro-processeur


Avant dtudier larchitecture dtaille dun micro-processeur prcis, on aborde ici larchitecture
globale dun micro-processeur. Tous les micro-processeurs conus jusqu aujourdhui sorganisent
globalement de mme faon. Ils peuvent tre dcomposs en quatre composants dcrits par le modle
de von Neumann.

9.1 Modle de von Neumann


Le modle de von Neumann donne les quatre composants essentiels qui constituent un
micro-processeur. Il dcrit galement les interactions entre ces diffrents composants.

Les quatre composants du modle de von Neumann sont les suivants.

1. unit de contrle
2. unit de traitement
3. mmoire
4. unit dentres/sorties

Modle de von Neumann

9.2 Organisation interne des composants

- 62 -
Architecture dun micro-processeur 9.2.1 Mmoire

Unit de contrle

Unit de traitement

9.2.1 Mmoire
Le registre dadresse (Memory Address Register) est le registre o est stock ladresse de la case
mmoire lue ou crite lors dun accs la mmoire. La donne transite par le registre de donne
(Memory Data Register). Lors dune lecture, la donne parvient au processeur dans ce registre. Lors
dune criture, la donne est place dans ce registre par le processeur avant dtre crite dans la case
mmoire.

- 63 -
9.3 Instructions Olivier Carton

Mmoire

9.3 Instructions

9.4 Cycle dexcution


1. chargement de linstruction
2. dcodage de linstruction
3. calcul des adresses des oprandes
4. chargement des oprandes
5. excution
6. mise en place du rsultat

9.5 Registres PC et IR
Le compteur de programme (PC pour Program counter) contient en permanence ladresse de la
prochaine instruction excuter. chaque dbut de cycle dexcution, linstruction excuter est
charge dans le registre IR partir ladresse contenue dans le registre PC. Ensuite, le registre PC est
incrment pour pointer sur linstruction suivante.

Le registre dinstruction (IR) contient linstruction en cours dexcution. Ce registre est charg au
dbut du cycle dexcution par linstruction dont ladresse est donne par le compteur de programme
PC.

9.6 Codage des instructions


Les instructions excuts par le processeur sont stockes en mmoire. Toutes les instructions possibles
sont reprsentes par des codes. Le code dune instruction est appel op-code. Les op-code peuvent
tre de longueur fixe comme dans le LC-3 ou de longueur variable comme dans le Pentium.

- 64 -
Micro-processeur LC-3 10 Micro-processeur LC-3

10 Micro-processeur LC-3
Le micro-processeur LC-3 est vocation pdagogique. Il nexiste pas de ralisation concrte de ce
processeur mais il existe des simulateurs permettant dexcuter des programmes. Lintrt de ce
micro-processeur est quil constitue un bon compromis de complexit. Il est suffisamment simple pour
quil puisse tre apprhend dans son ensemble et que son schma en portes logiques soit accessible. Il
comprend cependant les principaux mcanismes des micro-processeurs (appels systme, interruptions)
et son jeu dinstructions est assez riche pour crire des programmes intressants.

10.1 Registres
Le micro-processeur LC-3 dispose de 8 registres gnraux 16 bits appels R0,,R7. Il possde aussi
quelques registres spcifiques dont lutilisation est aborde plus tard. Le registre PSR (Program Status
Register) regroupe plusieurs indicateurs binaires dont lindicateur de mode (mode utilisateur ou mode
privilgi), les indicateurs n, z et p qui sont tests par les branchements conditionnels ainsi que le
niveau de priorit des interruptions. Les registres USP (User Stack Pointer) et SSP (System Stack
Pointer) permettent de sauvegarder le registre R6 suivant que le programme est en mode privilgi ou
non. Comme tous les micro-processeurs, le LC-3 dispose dun compteur de programme PC et dun
registre dinstruction IR qui sont tous les deux des registres 16 bits.

Registres du LC-3

10.1.1 Registre PSR


Le registre PSR regroupe plusieurs informations diffrentes. Le bit de numro 15 indique si le
processeur est en mode utilisateur (0) ou privilgi (1). Les trois bits de numros 10 8 donnent la
priorit dexcution. Les trois bits de numros 2 0 contiennent respectivement les indicateurs n, z et
p.

Registre PSR

- 65 -
10.2 Indicateurs N, Z et P Olivier Carton

10.2 Indicateurs N, Z et P
Les indicateurs sont des registres 1 bit. Les trois indicateurs n, z et p font, en fait, partie du registre
spcial PSR. Ils sont positionns ds quune nouvelle valeur est mise dans un des registres gnraux
R0,,R7. Ceci a lieu lors de lexcution dune instruction logique (NOT et AND), arithmtique (ADD)
ou dune instruction de chargement (LD, LDI, LDR et LEA). Ils indiquent respectivement si cette
nouvelle valeur est ngative (n), nulle (z) et positive (p). Ces indicateurs sont utiliss par linstruction
de branchement conditionnel BR pour savoir si le branchement doit tre pris ou non.

10.3 Mmoire
La mmoire du LC-3 est organise par mots de 16 bits. Ladressage du LC-3 est galement de 16 bits.
La mmoire du LC-3 est donc forme de 2 16 mots de 16 bits, cest--dire 128 KiB avec des adresses
de 0000 FFFF en hexadcimal. Cette organisation de la mmoire est inhabituelle mais elle simplifie
le cblage. La mmoire de la plupart des micro-processeurs est organise par octets (mots de 8 bits).
Par contre, ces micro-processeurs ont la possibilit de charger directement 2, 4 ou 8 octets. Pour
certains, ce bloc doit tre align sur une adresse multiple de 2, 4 ou 8 alors que ce nest pas ncessaire
pour dautres.

Mmoire du LC-3

10.4 Instructions
Les instructions du LC-3 se rpartissent en trois familles : les instructions arithmtiques et logiques,
les instructions de chargement et rangement et les instructions de branchement (appeles aussi
instructions de saut ou encore instructions de contrle).

Les instructions arithmtiques et logiques du LC-3 sont au nombre de trois. Le LC-3 possde une
instruction ADD pour laddition, une instruction AND pour le et logique bit bit et une instruction NOT
pour la ngation bit bit. Le rsultat de ces trois oprations est toujours plac dans un registre. Les
deux oprandes peuvent tre soit les contenus de deux registres soit le contenu dun registre et une
constante pour ADD et AND.

- 66 -
Micro-processeur LC-3 10.4.1 Description des instructions

Les instructions de chargement et rangement comprennent des instructions (avec des noms
commencent par LD) permettant de charger un registre avec une valeur et des instructions (avec des
noms commencent par ST) permettant de ranger en mmoire le contenu dun registre. Ces instructions
se diffrencient par leurs modes dadressage qui peut tre immdiat, direct, indirect ou relatif. Les
instructions de chargement sont LD, LDI, LDR, LEA et les instructions de rangement sont ST, STI et
STR.

Les instructions de branchement comprennent les deux instructions de saut BR et JMP, les deux
instructions dappel de sous-routine JSR et JSRR, une instruction TRAP dappel systme, une
instruction RET de retour de sous-routine et une instruction RTI de retour dinterruption.

10.4.1 Description des instructions


10.4.1.1 Instructions arithmtiques et logiques
Ces instructions du LC-3 nutilisent que les registres aussi bien pour les sources que pour la
destination. Ceci est une caractristique des architectures RISC. Le nombre dinstructions
arithmtiques et logiques du LC-3 est rduit au strict ncessaire. Les micro-processeurs rels possdent
aussi des instructions pour les autres oprations arithmtiques (soustraction, multiplication, division) et
les autres oprations logiques (ou logique, ou exclusif). Ils possdent aussi des instructions pour
laddition avec retenue, les dcalages.

10.4.1.1.1 Instruction NOT


Linstruction NOT permet de faire le non logique bit bit dune valeur 16 bits. Sa syntaxe est NOT
DR,SR o DR et SR sont les registres destination et source.

10.4.1.1.2 Instruction ADD


Linstruction ADD permet de faire laddition de deux valeurs 16 bits. Elle convient pour les additions
pour les nombres signs ou non puisque les nombres sont reprsents en complment 2. Elle a deux
formes diffrentes. Dans la premire forme, les deux valeurs sont les contenus de deux registres
gnraux. Dans la seconde forme, la premire valeur est le contenu dun registre et la seconde est une
constante (adressage immdiat). Dans les deux formes, le rsultat est rang dans un registre.

La premire forme a la syntaxe ADD DR,SR1,SR2 o DR est le registre destination o est rang le
rsultat et SR1 et SR2 sont les registres sources do proviennent les deux valeurs. La seconde forme
a la syntaxe ADD DR,SR1,Imm5 o DR et SR1 sont encore les registres destination et source et
Imm5 est une constante code sur 5 bits (-16 Imm5 15). Avant deffecteur lopration, la constante
Imm5 est tendue de faon signe sur 16 bits en recopiant le bit 4 sur les bits 5 15.

10.4.1.1.3 Instruction AND


Linstruction AND permet de faire le et logique bit bit de deux valeurs 16 bits. Elle a deux formes
similaires celles de linstruction ADD de syntaxes AND DR,SR1,SR2 et AND DR,SR1,Imm5.

- 67 -
10.4.1 Description des instructions Olivier Carton

10.4.1.2 Instructions de chargement et rangement


Les instructions de chargement permettent de charger un des registres gnraux avec un mot en
mmoire alors que les instructions de rangement permettent de ranger en mmoire le contenu dun de
ces registres. Ce sont les seules instructions faisant des accs la mmoire. Ces diffrentes instructions
se diffrencient par leur mode dadressage. Un mode dadressage spcifie la faon dont ladresse
mmoire est calcule. Le micro-processeur LC-3 possde les principaux modes dadressage qui sont
les modes dadressage immdiat, direct, relatif et indirect. La terminologie pour les modes dadressage
nest pas fixe car chaque constructeur a introduit ses propres termes. Le mme mode peut avoir des
noms diffrents chez deux constructeurs et le mme nom utilis par deux constructeurs peut recouvrir
des modes diffrents.

Il faut faire attention au fait que presque tous les modes dadressage du LC-3 sont relatifs au compteur
de programme. Cette particularit est l pour compenser la petite taille des offsets qui permettent un
adressage un espace rduit.

Excepte linstruction LEA, les instructions de chargement et rangement vont par paire. Pour chaque
mode dadressage, il y a une instruction de chargement dont le mnmonique commence par LD pour
LoaD et une instruction de rangement dont le mnmonique commence par ST pour STore.

Toutes les instructions de chargement et rangement contiennent un offset. Cet offset nest en gnral
pas donn explicitement par le programmeur. Celui-ci utilise des tiquettes et lassembleur se charge
de calculer les offsets.

10.4.1.2.1 Instruction LEA


Linstruction LEA pour Load Effective Address charge dans un des registres gnraux la somme du
compteur de programme et dun offset cod dans linstruction. Ce mode adressage est gnralement
appel adressage absolu ou immdiat car la valeur charge dans le registre est directement contenue
dans linstruction. Aucun accs supplmentaire la mmoire nest ncessaire. Cette instruction est par
exemple utilise pour charger dans un registre ladresse dun tableau.

Adressage immdiat

- 68 -
Micro-processeur LC-3 10.4.1 Description des instructions

10.4.1.2.2 Instructions LD et ST
Les instructions LD et SD sont les instructions gnrales de chargement et rangement. Linstruction LD
charge dans un des registres gnraux le mot mmoire ladresse gale la somme du compteur de
programme et dun offset cod dans linstruction. Linstruction ST range le contenu du registre cette
mme adresse. Ce mode adressage est gnralement appel adressage direct. Il ncessite un seul accs
la mmoire.

Adressage direct

10.4.1.2.3 Instructions LDR et STR


Linstruction LDR charge dans un des registres gnraux la mot mmoire ladresse gale la somme
du registre de base et dun offset cod dans linstruction. Linstruction STR range le contenu du
registre cette mme adresse. Ce mode adressage est gnralement appel adressage relatif ou bas. Il
ncessite un seul accs la mmoire. La premire utilit de ces instructions est de manipuler les objets
sur la pile comme par exemple les variables locales des fonctions. Elles servent aussi accder aux
champs des structures de donnes. Le registre de base pointe sur le dbut de la structure et loffset du
champ dans la structure est cod dans linstruction.

Adressage relatif

- 69 -
10.4.1 Description des instructions Olivier Carton

10.4.1.2.4 Instructions LDI et STI


Les instructions LDI et STI sont les instructions les plus complexes de chargement et rangement. Elle
mettent en uvre une double indirection. Elles calculent, comme les instructions LD et SD, la somme
du compteur de programme et de loffset. Elle chargent la valeur contenue cette adresse puis utilisent
cette valeur nouveau comme adresse pour charger ou ranger le registre. Ce mode adressage est
gnralement appel adressage indirect. Il ncessite deux accs la mmoire.

Adressage indirect

10.4.1.3 Instructions de branchements

10.4.1.3.1 Instruction BR
Linstruction gnrale de branchement est linstruction BR. Elle modifie le droulement normal des
instructions en changeant la valeur contenue par le registre PC. Cette nouvelle valeur est obtenue en
ajoutant la valeur de PC un offset cod sur 9 bits dans linstruction.

Le branchement peut tre inconditionnel ou conditionnel. Le cas conditionnel signifie que le


branchement est rellement excut seulement si une condition est vrifie. Certains des trois
indicateurs n, z, et p sont examins. Si au moins un des indicateurs examins vaut 1, le branchement
est pris. Sinon, le branchement nest pas pris et le droulement du programme continue avec
linstruction suivante.

On rappelle que les trois indicateurs n, z et p sont mis jour ds quune nouvelle valeur est charge
dans un des registres gnraux. Ceci peut tre ralis par une instruction arithmtique ou logique ou
par une instruction de chargement. Les indicateurs qui doivent tre pris en compte par linstruction BR
sont ajouts au mnmonique BR pour former un nouveau mnmonique. Ainsi linstruction BRnp
excute le branchement si lindicateur n ou lindicateur p vaut 1, cest--dire si lindicateur z vaut 0.
Le branchement est alors pris si la dernire valeur charge dans un registre est non nulle.

- 70 -
Micro-processeur LC-3 10.4.1 Description des instructions

Branchement conditionnel

Les programmes sont crits en langage dassembleur qui autorise lutilisation dtiquettes (labels en
anglais) qui vitent au programmeur de spcifier explicitement les offsets des branchements. Le
programmeur crit simplement une instruction BR label et lassembleur se charge de calculer
loffset, cest--dire la diffrence entre ladresse de linstruction de branchement et ladresse dsigne
par ltiquette label.

Comme loffset est cod sur 9 bits, linstruction BR peut uniquement atteindre une adresse situe de
-255 256 mots mmoire. Le dcalage dune unit est d au fait que le calcul de la nouvelle adresse
est effectu aprs lincrmentation du compteur de programme qui a lieu lors de la phase de
chargement de linstruction.

10.4.1.3.2 Instruction JMP


Linstruction JMP permet de charger le compteur de programme PC avec le contenu dun des registres
gnraux. Lintrt de cette instruction est multiple.

1. Linstruction JMP compense la faiblesse de linstruction BR qui peut uniquement effectuer un


branchement proche. Linstruction JMP permet de sauter nimporte quelle adresse. Si ltiquette
label dsigne une adresse trop loigne, le branchement cette adresse peut tre effectue par
le code suivant.
LD R7,labelp
JMP R7
labelp: .FILL label
...
label: ...

2. Linstruction JMP est indispensable pour tout les langages de programmation qui manipulent
explicitement comme C et C++ ou implicitement des pointeurs sur des fonctions. Tous les
langages de programmation objet manipulent des pointeurs sur des fonctions dans la mesure o
chaque objet a une table de ses mthodes.
3. Linstruction JMP permet aussi les retours de sous-routines puisque linstruction RET est en fait
une abrviation pour linstruction JMP R7.

- 71 -
10.4.2 Rcapitulatif des Instructions Olivier Carton

Branchement par registre

10.4.2 Rcapitulatif des Instructions


La table suivante donne une description concise de chacune des instructions. Cette description
comprend la syntaxe, laction ainsi que le codage de linstruction. La colonne nzp indique par une
toile * si les indicateurs n, z et p sont affects par linstruction.

- 72 -
Micro-processeur LC-3 10.5 Codage des instructions

Syntaxe Action nzp Codage


Op-code Arguments
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
NOT DR,SR DR not SR * 1001 DR SR 111111
ADD DR,SR1,SR2 DR SR1 + SR2 * 0001 DR SR1 0 0 0 SR2
ADD DR,SR1,Imm5 DR SR1 + SEXT(Imm5) * 0001 DR SR1 1 Imm5
AND DR,SR1,SR2 DR SR1 and SR2 * 0101 DR SR1 0 0 0 SR2
AND DR,SR1,Imm5 DR SR1 and SEXT(Imm5) * 0101 DR SR1 1 Imm5
LEA DR,label DR PC + SEXT(PCoffset9) * 1110 DR PCoffset9
DR mem[PC +
LD DR,label * 0010 DR PCoffset9
SEXT(PCoffset9)]
mem[PC + SEXT(PCoffset9)]
ST SR,label 0011 SR PCoffset9
SR
LDR DR mem[BaseR +
* 0110 DR BaseR Offset6
DR,BaseR,Offset6 SEXT(Offset6)]
STR mem[BaseR + SEXT(Offset6)]
0111 SR BaseR Offset6
SR,BaseR,Offset6 SR
DR mem[mem[PC +
LDI DR,label * 1010 DR PCoffset9
SEXT(PCoffset9)]]
mem[mem[PC +
STI SR,label 1011 SR PCoffset9
SEXT(PCoffset9)]] SR
Si (cond) PC PC +
BR[n][z][p] label 0000 n z p PCoffset9
SEXT(PCoffset9)
NOP No Operation 0000 0 0 0 000000000
JMP BaseR PC BaseR 1100 0 0 0 BaseR 0 0 0 0 0 0
RET ( JMP R7) PC R7 1100 000 111 000000
R7 PC; PC PC +
JSR label 0100 1 PCoffset11
SEXT(PCoffset11)
JSRR BaseR R7 PC; PC BaseR 0100 0 0 0 BaseR 0 0 0 0 0 0
RTI cf. interruptions 1000 000000000000
R7 PC; PC
TRAP Trapvect8 1111 0000 Trapvect8
mem[Trapvect8]
Rserv 1101

10.5 Codage des instructions


Chaque instruction est reprsente en mmoire par un code. Il est important que le codage des
instructions soit rflchi et rgulier pour simplifier les circuits de dcodage.

Toutes les instructions du LC-3 sont codes sur un mot de 16 bits. Les quatre premiers bits contiennent
lop-code qui dtermine linstruction. Les 12 bits restant codent les paramtres de linstruction qui
peuvent tre des numros de registres ou des constantes.

- 73 -
10.5.1 Codage de ADD Olivier Carton

titre dexemple, les codages des deux instructions ADD et BR sont dtaills ci-dessous.

10.5.1 Codage de ADD


Linstruction ADD peut prendre deux formes. Une premire forme est ADD DR,SR1,SR2 o DR,
SR1 et SR2 sont les trois registres destination, source 1 et source 2. Une seconde forme est ADD
DR,SR1,Imm5 o DR et SR1 sont deux registres destination et source et Imm5 est une constante
signe sur 5 bits.

Le codage de linstruction ADD est le suivant. Les quatre premiers bits de numros 15 12 contiennent
lop-code 0001 de linstruction ADD. Les trois bits suivants de numros 11 9 contiennent le numro
du registre destination DR. Les trois bits suivants de numros 8 6 contiennent le numro du registre
source SR1. Les six derniers bits contiennent le codage du troisime paramtre SR2 ou Imm5. Le
premier de ces six bits de numro 5 permet de distinguer entre les deux formes de linstruction. Il vaut
0 pour la premire forme et 1 pour la seconde forme. Dans la premire forme, les bits de numros 2 0
contiennent le numro du registre SR2 et les bits de numros 4 et 3 sont inutiliss et forcs 0. Dans
la seconde forme, les cinq derniers bits de numro 4 0 contiennent la constante Imm5.

Le tableau ci-dessous donne un exemple de codage pour chacune des formes de linstruction ADD.

Instruction Codage Code en hexa


15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Op-code DR SR1 0 0 0 SR2
ADD R2,R7,R5 0001 010 111 0 00 101 0x16C5
Op-code DR SR1 1 Imm5
ADD R6,R6,-1 0001 110 110 1 11111 0x1DBF

10.5.2 Codage de BR
Le codage de linstruction BR est le suivant. Les quatre premiers bits de numros 15 12 contiennent
lop-code 0000 de linstruction BR. Les trois bits suivants de numros 11 9 dterminent
respectivement si lindicateur n, z et p est pris en compte dans la condition. Si ces trois bits sont b 11 ,
b 10 et b 9 , la condition cond est donne par la formule suivante.

cond = (b 11 n) (b 10 z) (b 9 p)

Les 9 derniers bits de numros 8 0 codent loffset du branchement.

Si les trois bits b 11 , b 10 et b 9 valent 1, la condition est toujours vrifie puisque n + z + p = 1. Il sagit
alors de linstruction de branchement inconditionnel BR. Si au contraire les trois bits b 11 , b 10 et b 9
valent 0, la condition nest jamais vrifie et le branchement nest jamais pris. Il sagit alors de
linstruction NOP qui ne fait rien. En prenant un offset gal 0, le code de linstruction NOP est
0x0000.

Le tableau ci-dessous donne un exemple de codage pour trois formes typiques de linstruction BR.
Dans les exemples ci-dessous, on a donn des valeurs explicites aux offsets afin dexpliquer leur
codage mais cela ne correspond pas la faon dont linstruction BR est utilise dans les programmes.

- 74 -
Micro-processeur LC-3 10.6 Schma interne du LC-3

Instruction Codage Code en hexa


15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Op-code n z p PCoffset9
BRnz -137 0000 1 0 1 101110111 0x0B77
BR 137 0000 1 1 1 010001001 0x0E89
NOP 0000 0 0 0 000000000 0x0000

10.5.3 Rpartition des op-code


On peut remarquer les op-code des instructions nont pas t affects de manire alatoire. On peut
mme observer une certaine rgularit qui facilite le dcodage. Les op-code des instructions de
chargement et de rangement qui se correspondent (LD et ST, LDR et STR, ) ne diffrent que dun
seul bit.

MSB LSB
00 01 10 11
00 BR ADD LD ST
01 JSR(R) AND LDR STR
10 RTI NOT LDI STI
11 JMP LEA TRAP

10.6 Schma interne du LC-3


Le schma ci-dessous donne une ralisation du processeur LC-3 avec les diffrents lments :
registres, ALU, unit de contrle, . Les dtails des entres/sorties sont donns dans un schma
ultrieur.

- 75 -
10.6 Schma interne du LC-3 Olivier Carton

Chemins de donnes du LC-3

- 76 -
Programmation du micro-processeur LC-3 11 Programmation du LC-3

11 Programmation du LC-3
11.1 Programmation en assembleur
La programmation en langage machine est rapidement fastidieuse. Il est inhumain de se souvenir du
codage de chacune des instructions dun micro-processeur mme simplifi lextrme comme le LC-3
et a fortiori encore plus pour un micro-processeur rel. Le langage dassemblage ou assembleur par
abus de langage rend la tche beaucoup plus facile mme si cette programmation reste longue et
technique.

Lassembleur est un programme qui autorise le programmeur crire les instructions du


micro-processeur sous forme symbolique. Il se charge de traduire cette criture symbolique en codage
hexadcimal ou binaire. Il est beaucoup plus ais dcrire ADD R6,R1,R2 plutt que 0x1C42 en
hexadcimal ou encore 0001 1100 0100 0010 en binaire.

Lassembleur permet aussi lutilisation dtiquettes symboliques pour dsigner certaines adresses.
Ltiquette est associe une adresse et peut alors tre utilise dans dautres instructions. On peut par
exemple crire un morceau de code comme ci-dessous.
...
label: ADD R6,R1,R2
...
BRz label
...

Ltiquette label est alors associe ladresse ou se trouvera linstruction ADD R6,R1,R2 lors de
lexcution du programme. Cette adresse est alors utilise pour calculer le codage de linstruction BRz
label. Comme le codage de linstruction BR contient un offset, lassembleur calcule la diffrence
entre les adresses des deux instructions ADD R6,R1,R2 et BRz label et place cette valeur dans
les 9 bits de poids faible du codage de BRz.

11.1.1 Syntaxe
La syntaxe des programmes en assembleur est la mme pour tous les assembleurs quelques dtails
prs.

Les instructions dun programme en assembleur sont mises dans un fichier dont le nom se termine par
lextension .asm. Chaque ligne du fichier contient au plus une instruction du programme. Chaque
ligne est en fait divise en deux champs qui peuvent chacun ne rien contenir. Le premier champ
contient une tiquette et le second champ une instruction. Linstruction est forme de son nom
symbolique appel mnmonique et dventuel paramtres.

Les espaces sont uniquement utiles comme sparateurs. Plusieurs espaces sont quivalents un seul.
Les programmes sont indents de telle manire que les tiquettes se trouvent dans une premire
colonne et les instructions dans une seconde colonne.

Linstruction peut tre remplace dans une ligne par une directive dassemblage. Les directives
dassemblage permettent de donner des ordres lassembleur. Elles sont lquivalent des directives
commenant par # comme #include ou #if du langage C.

- 77 -
11.1.2 Directives dassemblage Olivier Carton

11.1.1.1 Constantes
Il existe deux types de constantes : les constantes entires et les chanes de caractres. Les chanes de
caractres peuvent uniquement apparatre aprs la directive .STRINGZ. Elles sont alors dlimites par
deux caractres " comme dans "Exemple de chaine" et sont implicitement termines par le
caractre nul \0.

Les constantes entires peuvent apparatre comme paramtre des instructions du LC3 et des directives
.ORIG, .FILL et .BLKW. Elles peuvent tre donnes soit sous la forme dun entier crit dans la base
10 ou 16, soit sous la forme dun caractre. Les constantes crite en base 16 sont prfixes par le
caractre x. Lorsque la constante est donne sous forme dun caractre, sa valeur est le code ASCII du
caractre. Le caractre est alors entour de caractres comme dans Z.
; Exemple de constantes
.ORIG x3000 ; Constante entire en base 16
AND R2,R1,2 ; Constante entire en base 10
ADD R6,R5,-1 ; Constante entire ngative en base 10
.FILL Z ; Constante sous forme dun caractre
.STRINGZ "Chaine" ; Constante chane de caractres
.END

11.1.1.2 Commentaires
Les commentaires sont introduits par le caractre point-virgule ; et il stendent jusqu la fin de la
ligne. Ils sont mis aprs les deux champs dtiquette et dinstruction mais comme ces deux champs
peuvent tre vides, les commentaires peuvent commencer ds le dbut de la ligne ou aprs ltiquette.
Voici quelques exemples de commentaires
; Commentaire ds le dbut de la ligne
label: ADD R6,R1,R2 ; Commentaire aprs linstruction

loop: ; Commentaire aprs ltiquette (avec indentation)


BRz label

11.1.2 Directives dassemblage


.ORIG adresse
Cette directive est suivi dune adresse constante. Elle spcifie ladresse laquelle doit commencer
le bloc dinstructions qui suit. Tout bloc dinstructions doit donc commencer par une directive
.ORIG.
.END
Cette directive termine un bloc dinstructions.
.FILL valeur
Cette directive rserve un mot de 16 bits et le remplit avec la valeur constante donne en
paramtre.
.STRINGZ chaine
Cette directive rserve un nombre de mots de 16 bits gal la longueur de la chane de caractres
termine par un caractre nul et y place la chane. Chaque caractre de la chane occupe un mot
de 16 bits.
.BLKW nombre
Cette directive rserve le nombre de mots de 16 bits pass en paramtre.

- 78 -
Programmation du micro-processeur LC-3 11.2 Exemples de programmes

11.1.3 tiquettes (labels)


Les tiquettes sont des identificateurs forms de caractres alphanumriques et commenant par une
lettre. Elles dsignent une adresse qui peut alors tre utilise dans les instructions.

Ladresse est spcifie en mettant ltiquette suivie du caractre : dans la premire colonne dune
ligne du programme. Ltiquette est alors affecte de ladresse laquelle se trouve linstruction.
Ltiquette peut galement tre mise avant une directive dassemblage comme .BLKW, .FILL ou
.STRINGZ. Elle dsigne alors ladresse laquelle sont placs les mots mmoires produits par la
directive.
; Exemple dtiquettes
label: ADD R0,R1,R2 ; label dsigne ladresse de linstruction ADD
char: .FILL Z ; char dsigne ladresse du caractre Z
string: .STRINGZ "Chaine" ; char dsigne ladresse du premier caractre C

11.2 Exemples de programmes


On tudie dans cette partie quelques exemples de programmes (trs) simples afin dillustrer quelques
techniques classiques de programmation en langage machine. Les codes complets de ces programmes
ainsi que dautres sont disponibles ci-dessous

Longueur dune chane de caractres


Tours de hano
Multiplication non signe
Multiplication signe
Multiplication logarithmique
Calcul du logarithme en base 2

Les programmes ci-dessous sont prsents comme des fragments de programmes puisque les routines
nont pas encore t prsentes. Il faudrait les crire sous forme de routines pour une relle utilisation.

11.2.1 Longueur dune chane


On commence par rappeler le programme en C pour calculer la longueur dune chane de caractres
termine par \0.
int strlen(char* p) {
int c = 0;
while (*p != \0) {
p++;
c++;
}
return c;
}

Le programme ci-dessous calcule la longueur dune chane de caractres termine par le caractre nul
\0. Le registre R0 est utilis comme pointeur pour parcourir la chane alors que le registre R1 est
utilis comme compteur.

- 79 -
11.2.2 Nombre doccurrences dun caractre dans une chane Olivier Carton

; @param R0 adresse de la chane


; @return R1 longueur de la chane
.ORIG x3000
LEA R0,chaine ; Chargement dans RO de ladresse de la chane
AND R1,R1,0 ; Mise 0 du compteur : c = 0
loop: LDR R2,R0,0 ; Chargement dans R2 du caractre point par R0
BRz fini ; Test de fin de chane
ADD R0,R0,1 ; Incrmentation du pointeur : p++
ADD R1,R1,1 ; Incrmentation du compteur : c++
BR loop
fini: NOP
chaine: .STRINGZ "Hello World"
.END

Le programme C pour calculer la longueur dune chane de caractres peut tre crit de manire
diffrente en utilisant larithmtique sur les pointeurs.
int strlen(char* p) {
char* q = p;
while (*p != \0)
p++;
return p-q;
}

Ce programme C se transpose galement en langage dassembleur. Le registre R0 est encore utilis


comme pointeur pour parcourir la chane et le registre R1 sauvegarde la valeur initiale de R0. Il
contient en fait loppos de la valeur initiale de R0 afin de calculer la diffrence. Ce programme a le
lger avantage dtre plus rapide que le prcdent car la boucle principale contient une instruction de
moins.
; @param R0 adresse de la chane
; @return R0 longueur de la chane
.ORIG x3000
LEA R0,chaine ; Chargement dans R0 de ladresse de la chane
NOT R1,R0 ; R1 = -R0
ADD R1,R1,1
loop: LDR R2,R0,0 ; Chargement dans R2 du caractre point par R0
BRz fini ; Test de fin de chane
ADD R0,R0,1 ; Incrmentation du pointeur : p++
BR loop
fini: ADD R0,R0,R1 ; Calcul de la diffrence q-p
chaine: .STRINGZ "Hello World"
.END

11.2.2 Nombre doccurrences dun caractre dans une


chane
Le programme ci-dessous calcule le nombre doccurrences dun caractre donn dans une chane de
caractres termine par le caractre nul \0. Le registre R0 est utilis comme pointeur pour
parcourir la chane. Le registre R1 contient le caractre recherch et le registre R2 est utilis comme
compteur. La comparaison entre chaque caractre de la chane et le caractre recherch est effectue
en calculant la diffrence de leurs codes et en testant si celle-ci est nulle. Dans ce but, le programme
commence par calculer loppos du code du caractre recherch afin de calculer chaque diffrence par
une addition.

- 80 -
Programmation du micro-processeur LC-3 11.2.3 Multiplication

; @param R0 adresse de la chane


; @param R1 caractre
; @return R2 nombre doccurrences du caractre
.ORIG x3000
LEA R0,chaine ; Chargement dans RO de ladresse de la chane
LD R1,caract ; Chargement dans R1 du code ASCII de l
AND R2,R2,0 ; Mise 0 du compteur
NOT R1,R1 ; Calcul de loppos de R1
ADD R1,R1,1 ; R1 = -R1
loop: LDR R3,R0,0 ; Chargement dans R3 du caractre point par R0
BRz fini ; Test de fin de chane
ADD R3,R3,R1 ; Comparaison avec l
BRnp suite ; Non galit
ADD R2,R2,1 ; Incrmentation du compteur
suite: ADD R0,R0,1 ; Incrmentation du pointeur
BR loop
fini: NOP
chaine: .STRINGZ "Hello World"
caract: .FILL l
.END

11.2.3 Multiplication
Tous le micro-processeurs actuels possdent une multiplication cble pour les entiers et pour les
nombres flottants. Comme les premiers micro-processeurs, le LC-3 na pas de telle instruction. La
multiplication doit donc tre ralise par programme. Les programmes ci-dessous donnent quelques
implmentation de la multiplication pour les entiers signs et non signs.

11.2.3.1 Multiplication nave non signe


On commence par une implmentation trs nave de la multiplication qui est effectue par additions
successives. On commence par donner une implmentation sous forme de programme C puis on donne
ensuite une traduction en langage dassembleur.
// Programme sous forme dune fonction en C
int mult(int x, int n) {
int r = 0; // Rsultat
while(n != 0) {
r += x;
n--;
}
return r;
}

Dans le programme ci-dessous, les registres R0 et R1 contiennent respectivement x et n. Le registre R2


contient les valeurs successives de r.

- 81 -
11.2.3 Multiplication Olivier Carton

; @param R0 x
; @param R1 n
; @return R2 x n
.ORIG x3000
AND R2,R2,0 ; r = 0
AND R1,R1,R1 ; Mise jour de lindicateur z pour le test
BRz fini
loop: ADD R2,R2,R0 ; r += x
ADD R1,R1,-1 ; n--
BRnp loop ; Boucle si n != 0
fini: NOP
.END

11.2.3.2 Multiplication nave signe


Le programme prcdent fonctionne encore si la valeur de x est ngative. Par contre, il ne fonctionne
plus si la valeur de n est ngative. Les dcrmentations successives de n ne conduisent pas 0 en le
nombre dtapes voulues. Le programme suivant rsout ce problme en inversant les signes de x et n si
n est ngatif. Ensuite, il procde de manire identique au programme prcdent.
; @param R0 x
; @param R1 n
; @return R2 x n
.ORIG x3000
AND R2,R2,0 ; r = 0
AND R1,R1,R1 ; Mise jour de lindicateur z pour le test
BRz fini
BRp loop
; Changement de signe de x et n
NOT R0,R0 ; x = -x
ADD R0,R0,1
NOT R1,R1 ; n = -n
ADD R1,R1,1
loop: ADD R2,R2,R0 ; r += x
ADD R1,R1,-1 ; n--
BRnp loop ; Boucle si n != 0
fini: NOP
.END

11.2.3.3 Multiplication logarithmique non signe


Le problme majeur des deux programmes prcdents est leur temps dexcution. En effet, le nombre
ditrations de la boucle est gal la valeur de R1 et le temps est donc proportionnel cette valeur. Le
programme ci-dessous donne une meilleure implmentation de la multiplication de nombres non
signs. Ce programme pourrait tre tendu aux nombres signs de la mme faon que pour
limplmentation nave. Son temps dexcution est proportionnel au nombre de bits des registres.

On commence par donner un algorithme rcursif en C pour calculer une multiplication qui est inspir
de lexponentiation logarithmique.
// Programme sous forme dune fonction rcursive en C
// Calcul de x * n de faon logarithmique
float mult(float x, int n) {
if (n == 0)
return 0;
// Calcul anticip de la valeur pour n/2 afin
// davoir un seul appel rcursif.
float y = mult(x, n/2);

- 82 -
Programmation du micro-processeur LC-3 11.2.3 Multiplication

if (n%2 == 0)
return y + y;
else
return y + y + x;
}

Pour viter dcrire un programme rcursif, on exprime le problme dune autre faon. On suppose
que lcriture binaire du contenu de R1 est b k-1 b 0 o k est le nombre de bits de chaque registre,
cest--dire 16 pour le LC-3. On a alors la formule suivante qui exprime le produit x n avec
uniquement des multiplications par 2 et des additions. Cette formule est trs semblable au schma de
Horner pour valuer un polynme.

x n = ((((xb k-1 2 + xb k-2 )2 + xb k-3 )2 + )2 + xb 1 )2 + xb 0 .

On note x 1 , , x k les rsultats partiels obtenus en valuant la formule ci-dessus de la gauche vers la
droite. On pose x 0 = 0 et pour 1 j k, le nombre x j est donn par la formule suivante.

x j = ((((xb k-1 2 + xb k-2 )2 + xb k-3 )2 + )2 + xb k-j+1 )2 + xb k-j .

Le nombre x k est gal au produit x n. Il est de plus facile de calculer x j en connaissant x j-1 et b k-j .
On a en effet les relations suivantes.

x j = 2x j-1 si b k-j = 0
x j = 2x j-1 + x si b k-j = 1

Le programme suivant calcule le produit x n en partant de x 0 = 0 puis en calculant de proche en


proche les nombres x j grce aux formules ci-dessus. Les registres R0 et R1 contiennent
respectivement x et n. Le registre R2 contient les valeurs successives x 0 , , x k et le registre R3 est
utilis comme compteur. Pour accder aux diffrents bits b k-1 , , b 0 de n, on utilise le procd
suivant. Le signe de n vu comme un entier sign donne la valeur de b k-1 . Ensuite, lentier n est dcal
vers la gauche dune position chaque itration. Le signe des contenus successifs de R2 donne les
valeurs b k-2 , , b 0 .

; @param R0 x
; @param R1 n
; @return R2 x n
.ORIG x3000
AND R2,R2,0 ; Initialisation x 0 = 0
LD R3,cst16 ; Initialisation du compteur
AND R1,R1,R1
BRzp bit0
bit1: ADD R2,R2,R0 ; Addition de x si b k-j = 1
bit0: ADD R3,R3,-1 ; Dcrmentation du compteur
BRz fini
ADD R2,R2,R2 ; Calcul de 2x j-1
ADD R1,R1,R1 ; Dcalage de n vers la gauche
BRn bit1
BR bit0
fini: NOP
cst16: .FILL 16
.END

- 83 -
11.2.4 Addition 32 bits Olivier Carton

11.2.4 Addition 32 bits


Dans la majorit des micro-processeurs rels, il y a outre les flags n, z et p un flag c qui reoit la
retenue (Carry) lors dune addition par une instruction ADD. Cela permet de rcuprer facilement cette
retenue en testant le flag c. Certains micro-processeurs possdent aussi une instruction ADC qui ajoute
au rsultat de laddition la valeur du flag c. Ceci permet denchaner facilement des additions pour
faire des calculs sur des entiers cods sur plusieurs mots. Le micro-processeur LC-3 na pas de telles
facilits et il faut donc exploiter au mieux ses possibilits.
; @param R1,R0 poids fort et poids faible du premier argument
; @param R3,R2 poids fort et poids faible du second argument
; @return R5,R4 poids fort et poids faible du rsultat
.ORIG x3000
; Addition des poids faibles
ADD R4,R2,R0
; Addition des poids forts
ADD R5,R3,R2
; Test sil y a une retenue sur les poids faibles
AND R0,R0,R0
BRn bit1
; Cas o le bit de poids fort de R0 est 0
AND R2,R2,R2
; Si les deux bits de poids fort de R1 et R0 sont 0,
; il ny a pas de retenue.
BRzp fini
; Si un seul des deux bits de poids fort de R1 et R0 est 1,
; il faut tester le bit de poids fort de R4 pour savoir
; sil y a eu une retenue.
testR4: AND R4,R4,R4
BRzp carry
BR fini
; Cas o le bit de poids fort de R0 est 1
bit1: AND R2,R2,R2
; Si le bit de poids fort de R1 est 0, on est ramen au cas
; un seul des deux bits de poids fort de R1 et R0 est 1.
BRzp testR4
; Si les deux bits de poids fort de R1 et R0 sont 1,
; il y a ncessairement une retenue.
; Correction de la retenue
carry: ADD R5,R5,1
fini: NOP
.END

11.2.5 Conversion en hexa du contenu dun registre


; @param R0 valeur convertir
ADD R1,R0,0 ; R1 <- R0
ld R2,cst4 ; Nombre de caractres
loopo: ld R3,cst4 ; Nombre de bits par caractre
; Rotation de 4 bits
loopi: AND R1,R1,R1
BRn $1
ADD R1,R1,R1
BR $2
$1: ADD R1,R1,R1
ADD R1,R1,1
$2: ADD R3,R3,-1
BRp loopi
; Recupration de 4 bits

- 84 -
Programmation du micro-processeur LC-3 11.2.5 Conversion en hexa du contenu dun registre

AND R0,R1,0xf
ADD R0,R0,-0xa
BRn $3
; Chiffres de 0 9
ld R3,cst40 ; 0x40 = 0 + 0xa
BR $4
; Chiffres de A F
$3: ld R3,cst51 ; 0x51 = A + 0xa
$4: ADD R0,R0,R3
TRAP 0x21 ; Affichage
ADD R2,R2,-1
BRp loopo
NOP
TRAP 0x25 ; Arrt
cst4: .fill 4
cst40: .fill 0x40
cst51: .fill 0x51

- 85 -
12 Les sous-routines et la pile Olivier Carton

12 Les sous-routines et la pile


12.1 Instruction JMP
Linstruction JMP permet de transfrer lexcution du programme une adresse contenue dans un des
8 registres R0,,R7. Ce genre dinstruction est ncessaire tout programme qui gre dynamiquement
les appels de fonction. Cest le cas de tout programme en C qui manipule des pointeurs sur des
fonctions. Cest aussi le cas des langages objets comme C++ dont les objets contiennent une table des
mthodes sous forme de pointeurs de fonctions. Dans le cas du LC-3, cette instruction permet de
compenser la faiblesse de linstruction BR qui peut uniquement sauter une adresse loigne dau plus
256 mots (loffset est cod sur 9 bits en complment 2). Linstruction JMP est aussi indispensable
pour raliser les retours de sous-routine comme nous allons le voir.

La ralisation dune boucle se fait par exemple de la manire suivante.


LD R0,nbiter ; Nombre ditrations de la boucle
; Boucle
loop: ... ; Dbut de la boucle
...
ADD R0,R0,-1 ; Dcrmentation du compteur
BRp loop ; Retour au dbut de la boucle
; Suite du programme
...

12.2 Sous-routines

12.2.1 Appel
Lorsquun programme appelle une sous-routine, il faut dune certaine manire mmoriser ladresse
laquelle doit revenir sexcuter le programme la fin de la routine. Dans le micro-processeur LC-3,
ladresse de retour, cest--dire ladresse de linstruction suivante est mise dans le registre R7 lors dun
appel de sous-routine. Ce registre a donc un rle particulier.

Il existe deux instructions JSR et JSRR permettant dappeler une sous-routine. Linstruction JSR est
semblable linstruction BR de branchement inconditionnel. Il ny a pas de variante conditionnelle de
linstruction JSR. Les trois bits utiliss pour la condition dans le codage linstruction BR sont
rcuprs pour avoir un offset de 11 bits au lieu de 9 bits pour BR. Un bit est aussi ncessaire pour
distinguer JSR et JSRR qui utilisent le mme op-code (cf. codage des instructions du LC-3).
Ladresse de la sous-routine est stocke dans le code linstruction sous forme dun offset de 11 bits.
Linstruction JSRR est semblable linstruction JMP. Elle permet dappeler une sous-routine dont
ladresse est contenue dans un des 8 registres. Cette deux instructions ont en commun de transfrer la
valeur du compteur de programme PC incrment (adresse de linstruction suivante) dans le registre
R7 avant de charger PC avec ladresse de la sous-routine.

12.2.2 Retour
Lors dun appel une sous-routine, ladresse de retour est mise dans le registre R7. La sous-routine se
termine donc par un saut cette adresse avec linstruction JMP R7. Cette instruction peut aussi tre
dsigne par le mnmonique RET.

- 86 -
Les sous-routines et la pile 12.3 Sauvegarde des registres

; Appel de la sous-routine sub


...
JSR sub ; Adresse de linstruction suivante dans R7
...

; Sous-routine sub
sub: ...
...
RET ; JMP R7

12.2.3 Exemple
On reprend le fragment de programme pour calculer la longueur dune chane sous la forme dune
sous-routine appele par un programme principal.
.ORIG x3000
; Programme principal
...
; Premier appel
LEA R0,chaine ; Chargement dans R0 de ladresse de la chane
JSR strlen ; Appel de la sous-routine
...
; Autre appel
JSR strlen
...

; Chaine
chaine: .STRINGZ "Hello World"
.END

; Sous-routine pour calculer la longueur dune chane termine par \0


; @param R0 adresse de la chane
; @return R0 longueur de la chane
; Ladresse de retour est dans R7
strlen: AND R1,R1,0 ; Mise 0 du compteur : c = 0
loop: LDR R2,R0,0 ; Chargement dans R2 du caractre point par R0
BRz fini ; Test de fin de chane
ADD R0,R0,1 ; Incrmentation du pointeur : p++
ADD R1,R1,1 ; Incrmentation du compteur : c++
BR loop
fini: ADD R0,R1,0 ; R0 = R1
RET ; Retour par JMP R7

La routine strlen utilise le registre R1 pour effectuer ses calculs. Si le programme principal utilise
galement ce registre R1, le contenu de ce registre doit tre sauvegard pendant lappel strlen.
Cette question est aborde ci-dessous.

12.3 Sauvegarde des registres


Les registres du micro-processeur LC-3 sont en nombre limit. Lorsque quune routine a besoin de
registres pour faire des calculs intermdiaires, il est prfrable de sauvegarder le contenu de ces
registres. Cela vite de dtruire le contenu du registre qui est peut-tre utilis par le programme
appelant la routine. En particulier si une routine doit appeler une autre sous-routine, elle doit prserver
le registre R7 qui contient ladresse de retour.

- 87 -
12.3.1 Registres Olivier Carton

12.3.1 Registres
Une routine sub qui appelle une autre routine subsub peut utiliser un registre, par exemple R5 pour
sauvegarder le registre R7 qui contient ladresse de retour de sub. Cette mthode donne un code
efficace car il nutilise que les registres. Par contre, on arrive rapidement cours de registres. Il faut
donc utiliser dautres techniques.
sub: ADD R5,R7,0 ; Sauvegarde de R7 dans R5
...
JSR subsub
...
ADD R7,R5,0 ; Restauration de R7
RET

subsub: ...

RET

12.3.2 Emplacements mmoire rservs


Une autre mthode consiste rserver des emplacements mmoire pour la sauvegarde des registres
pendant lexcution dune routine. Les contenus des registres sont rangs dans ces emplacements au
dbut de la routine et ils sont restaurs la fin de celle-ci. Cette mthode a deux inconvnients
majeurs. Dune part, elle ncessite de rserver de la mmoire pour chaque routine. Cela peut gaspiller
beaucoup de mmoire si le programme est consquent. De plus, lespace rserv pour les routines non
appeles est perdu. Dautre part, cette mthode conduit du code qui nest pas rentrant.
; Sous-routine sub sauvegardant R0 et R1
sub: ST R0,saveR0 ; Sauvegarde de R0
ST R1,saveR1 ; Sauvegarde de R1

... ; Corps de la procdure

LD R1,saveR1 ; Restauration de R1
LD R0,saveR0 ; Restauration de R0
RET
saveR0: .BLKW 1 ; Emplacement de sauvegarde de R0
saveR1: .BLKW 1 ; Emplacement de sauvegarde de R1

; Appel de la sous-routine
; Le registre R7 est dtruit
JSR sub

12.3.3 Utilisation dune pile


La meilleure mthode est dutiliser une pile. Cela lapparente la mthode des emplacements
rservs mais dans le cas dune pile, cest un espace global qui est partag par toutes les sous-routines.
Par contre, cette mthode ncessite de rserver un des registres la gestion de la pile. Dans le cas du
micro-processeur LC-3, cest le registre R6 qui est gnralement utilis.

- 88 -
Les sous-routines et la pile 12.3.3 Utilisation dune pile

Pile en mmoire

12.3.3.1 Utilisation du registre R6


Le registre R6 est utilis comme pointeur de pile. Pendant toute lexcution du programme, le registre
R6 donne ladresse de la dernire valeur mise sur la pile. La pile crot vers les adresses dcroissantes.
Nimporte quel autre registre (hormis R7) aurait pu tre utilis mais il est prfrable dutiliser R6 en
cas dinterruption.

12.3.3.2 Empilement dun registre


Un empilement est ralis en dplaant vers les adresses basses le pointeur de pile pour le faire pointer
sur le premier emplacement libre. Ensuite le contenu du registre y est rang en employant un
rangement avec adressage relatif avec offset de 0.
ADD R6,R6,-1 ; Dplacement du haut de pile
STR Ri,R6,0 ; Rangement de la valeur

12.3.3.3 Dpilement dun registre


Le dpilement est bien sr lopration inverse. Le contenu du registre est rcupr avec un chargement
avec adressage relatif. Ensuite le pointeur de pile est incrment pour le faire pointer sur le haut de la
pile.
LDR Ri,R6,0 ; Rcupration de la valeur
ADD R6,R6,1 ; Restauration du haut de pile

Aucune vrification nest faite pour savoir si la pile dborde. Il appartient au programmeur de vrifier
que dans chaque routine, il effectue autant de dpilements que dempilements.

12.3.3.4 Empilement ou dpilement de plusieurs registres


Lors de lempilement ou du dpilement de plusieurs registres, loffset de ladressage relatif permet de
faire en une seule instruction les diffrentes incrmentations ou dcrmentations du registre de pile.
Lempilement des registres R0, R1 et R2 (dans cet ordre peut par exemple tre ralis de la manire
suivante.

- 89 -
12.3.3 Utilisation dune pile Olivier Carton

ADD R6,R6,-3 ; Dplacement du haut de pile


STR R0,R6,2 ; Empilement de R0
STR R1,R6,1 ; Empilement de R1
STR R2,R6,0 ; Empilement de R2

Le fait de placer la dcrmentation du registre de pile R6 avant de placer les contenus des registres R0,
R1 et R2 sur la pile nest pas anodin. Il semble premire vue que linstruction ADD R6,R6,-3
pourrait tre place aprs les trois instructions STR en changeant bien sr les offsets utiliss par ces
trois dernires par les valeurs -1, -2 et -3. Ceci est en fait faux. Si une interruption survient entre le
placement des contenus des registres sur la pile et la dcrmentation de R6, le contenu de la pile peut
tre altr par de valeurs que linterruption mettrait sur la pile. Le fait de dcrmenter dabord R6 peut
tre considr comme une faon de rserver sur la pile les emplacements pour les contenus de R0, R1
et R2. Dans le cas du LC-3, les programmes utilisateur sont en quelque sorte protgs de ce type de
problmes car les interruptions utilisent la pile systme qui est distincte de la pile utilisateur. Par
contre, le code excut en mode privilgi doit respecter cette contrainte.

Le dpilement des registres R2, R1 et R0 se fait la mme manire. Lordre des trois dpilements
effectus par les instructions LDR nest pas impos. Le rsultat serait le mme en les mettant dans un
ordre diffrent. Par contre, on a respect lordre inverse des empilements pour bien montrer quil sagit
de lutilisation dune pile.
LDR R0,R6,2 ; Dpilement de R0
LDR R1,R6,1 ; Dpilement de R1
LDR R2,R6,0 ; Dpilement de R2
ADD R6,R6,3 ; Restauration du haut de pile

La raison pour laquelle lincrmentation de R6 est place aprs le chargement des registres avec les
valeurs sur la pile est identique la raison pour laquelle la dcrmentation de R6 est place avant le
placement des contenus des registres sur la pile.

La pile permet en particulier dchanger les contenus de deux registres sans utiliser de registre
supplmentaire autre que le pointeur de pile R6. Le morceau de code suivant change par exemple les
contenus des registres R1 et R2.
ADD R6,R6,-2 ; Dplacement du haut de pile
STR R1,R6,1 ; Empilement de R1
STR R2,R6,0 ; Empilement de R2
LDR R2,R6,1 ; Dpilement du contenu de R1 dans R2
LDR R1,R6,0 ; Dpilement du contenu de R2 dans R1
ADD R6,R6,2 ; Restauration du haut de pile

Si un micro-processeur possde une opration de ou exclusif bit bit appele XOR, lchange des
contenus de deux registres peut aussi se faire de la manire complique suivante.
; R1 : x R2 : y
XOR R1,R1,R2 ; R1 : x ^ y R2 : y
XOR R2,R1,R2 ; R1 : x ^ y R2 : x
XOR R1,R1,R2 ; R1 : y R2 : x

12.3.3.5 Appels de sous-routine imbriqus


Dans le cas dappels de sous-routine imbriqus, cest--dire dune sous-routine sub appelant une
(autre) sous-routine subsub, il est ncessaire de sauvegarder sur la pile ladresse de retour de sub
contenue dans le registre R7. lappel de la seconde sous-routine subsub, le registre R7 reoit
ladresse de retour de celle-ci et son contenu prcdent est cras.

- 90 -
Les sous-routines et la pile 12.4 Programmation

sub: ADD R6,R6,-2 ; Sauvegarde sur la pile de


STR R7,R6,1 ; - ladresse de retour
STR R0,R6,0 ; - registre R0
...
JSR subsub
...
LDR R0,R6,0 ; Restauration de la pile de
LDR R7,R6,1 ; - registre R0
ADD R6,R6,2 ; - ladresse de retour
RET ; Retour par JMP R7

subsub: ... ; R7 contient ladresse de retour


; cest--dire ladresse de linstruction
; suivant JSR subsub

RET ; Retour par JMP R7

12.3.3.6 Initialisation de la pile


Linitialisation de la pile se fait en mettant dans le registre R6 ladresse du haut de la pile. Il sagit en
fait de ladresse du premier emplacement mmoire aprs lespace rserv la pile. Comme tout
utilisation de la pile commence par dcrmenter le registre R6, cet emplacement nest normalement
jamais utilis par la pile.
; Initialisation de la pile au dbut du programme
psp: .FILL stackend
main: LD R6,psp ; quivalent LEA R6,stackend
...

; Rservation de lespace pour la pile


.ORIG 0x6000
.BLKW 0x100 ; Taille de la pile : 256 octets
stackend: ; Adresse de mot mmoire suivant

12.4 Programmation
Pour illustrer lutilisation de la pile, un programme rcursif (source) calculant la solution du problme
des tours de Hano est donn ci-dessous.
; Tours de Hano
.ORIG x3000
; Programme principal
; Le pointeur de pile R6 est initialis par le simulateur
hanoim: LD R0,nbrdisk ; Nombre de disques
LD R1,startst ; Piquet de depart
LD R2,endst ; Piquet darrive
JSR hanoi
TRAP x25 ; HALT
; Constantes
nbrdisk:.FILL 3 ; Nombre de disques
startst:.FILL 1 ; Piquet de depart
endst: .FILL 2 ; Piquet darrive

; Calcul du piquet intermdiaire avant de lancer la procdure rcursive


; @param R0 nombre de disques
; @param R1 piquet de dpart
; @param R2 piquet darrive
hanoi:

- 91 -
12.4 Programmation Olivier Carton

; Calcul du troisime piquet : R3 = 6 - R1 - R2


ADD R3,R2,R1
NOT R3,R3
ADD R3,R3,7 ; 7 = 6 + 1

; Procdure rcursive
; @param R0 nombre de disques
; @param R1 piquet de dpart
; @param R2 piquet darrive
; @param R3 piquet intermdiaire
hanoirec:
; Dcrmentation du nombre de disques
ADD R0,R0,-1
; Test si le nombre de disques est 0
BRn hanoiend
; Empilement de ladresse de retour
ADD R6,R6,-1
STR R7,R6,0
JSR swapR2R3
JSR hanoirec
JSR swapR2R3
JSR print
JSR swapR1R3
JSR hanoirec
JSR swapR1R3
; Dpilement de ladresse de retour
LDR R7,R6,0
ADD R6,R6,1
; Restauration du nombre de piquets
hanoiend:
ADD R0,R0,1
RET

; change des contenus de R1 et R3


swapR1R3:
ADD R4,R3,0
ADD R3,R1,0
ADD R1,R4,0
RET
; change des contenus de R2 et R3
swapR2R3:
ADD R4,R3,0
ADD R3,R2,0
ADD R2,R4,0
RET

; Affichage de R1 -> R2
print: ; Empilement de R7 et R0
ADD R6,R6,-2
STR R7,R6,1
STR R0,R6,0
; Affichage du caractre 0 + R1
LD R0,char0
ADD R0,R0,R1
TRAP x21 ; Appel systme putc
; Affichage de la chane " --> "
LEA R0,arrow
TRAP x22 ; Appel systme puts
; Affichage du caractre 0 + R2
LD R0,char0
ADD R0,R0,R2
TRAP x21 ; Appel systme putc

- 92 -
Les sous-routines et la pile 12.5 Comparaison avec dautres micro-processeurs

; Retour la ligne
LD R0,charnl
TRAP x21 ; Appel systme putc
; Dpilement de R0 et R7
LDR R0,R6,0
LDR R7,R6,1
ADD R6,R6,2
RET
; Constantes pour laffichage
char0: .FILL 0
charnl: .FILL \n
arrow: .STRINGZ " --> "
.END

12.5 Comparaison avec dautres micro-processeurs


Beaucoup de micro-processeurs (surtout CISC comme le 80x86) possdent un registre, gnralement
appel SP, ddi la gestion de la pile. Il y a alors des instructions spcifiques pour manipuler la pile.
La pile est alors systmatiquement utilise pour les appels des sous-routines. Certaines instructions
permettent en effet les appels et les retours de sous-routines. Dautres instruction permettent dempiler
ou de dpiler un ou plusieurs registres afin de simplifier la sauvegarde des registres.

12.5.1 Instructions CALL et RET


Les instructions dappels de sous-routine empilent alors ladresse de retour plutt que de la mettre
dans un registre particulier. Comme ladresse de retour dune sous-routine se trouve toujours sur la
pile, il existe une instruction spcifique, gnralement appele RET pour terminer les sous-routines.
Cette instruction dpile ladresse de retour puis la met dans le compteur de programme PC. Ceci
explique pourquoi linstruction JMP R7 du LC-3 est aussi appele RET.

12.5.2 Instructions PUSH et POP


Les micro-processeurs ayant un registre ddi la pile possdent des instructions, gnralement
appeles PUSH et POP permettant dempiler et de dpiler un registre sur la pile. Ces instructions
dcrmentent et incrmentent automatiquement le registre de pile pour le mettre jour. Certains
micro-processeurs comme le 80x86 ont mme des instructions permettant dempiler et de dpiler tous
les registres ou un certain nombre dentre eux.

12.6 Appels systme


Linstruction TRAP permet de faire un appel au systme. Les mots mmoire des adresses 0x00 0xFF
contiennent une table des appels systme. Chaque emplacement mmoire contient ladresse dun appel
systme. Il y a donc 256 appels systme possibles. Linstruction TRAP contient le numro dun appel
systme, cest--dire lindice dune entre de la table des appels systmes.

Comme linstruction JSR, linstruction TRAP sauvegarde le compteur de programme PC dans le


registre R7 puis charge PC avec lentre de la table des appels systme dont le numro est indiqu par
linstruction. Le retour dun appel systme se fait par linstruction RET.

La table des appels systme procure une indirection qui a lintrt de rendre les programmes
utilisateurs indpendant du systme. Dans la mesure o lorganisation (cest--dire la correspondance
entre les numros de la table et les appels systme) de la table reste identique, il nest pas ncessaire de

- 93 -
12.7 Interruptions Olivier Carton

changer (recompiler) les programmes utilisateurs.

Sur les micro-processeurs usuels, linstruction TRAP fait passer le micro-processeur en mode
privilgi (aussi appel mode systme). Cest dailleurs souvent la seule instruction permettant de
passer en mode privilgi. Ceci garantit que seul le code du systme dexploitation soit excut en
mode privilgi. Par contre, il faut une instruction capable de sortir du mode privilgi avant
deffectuer le retour au programme principal. Le processeur LC-3 ne possde pas de telle instruction.

12.7 Interruptions
Les interruptions sont un mcanisme permettant un circuit extrieur au micro-processeur
dinterrompre le programme en cours dexcution afin de faire excuter une routine spcifique. Les
interruptions sont en particulier utilises pour la gestion des entres/sorties et pour la gestion des
processus.

12.7.1 Initiation dune interruption


Le micro-processeur possde une ou plusieurs broches permettant de recevoir des signaux provenant
des circuits extrieurs susceptibles de provoquer des interruptions. Avant dexcuter chaque
instruction, le micro-processeur vrifie sil y a un signal (de valeur 1) sur une de ces broches. Si aucun
signal nest prsent, il continue le programme et il excute linstruction suivante. Si au contraire un
signal est prsent, il interrompt le programme en cours et il commence excuter une sous-routine
spcifique appele sous-routine dinterruption. Lorsque cette sous-routine se termine, le
micro-processeur reprend lexcution du programme en cours linstruction o il en tait.

Lexcution dune sous-routine dinterruption sapparente lexcution dune sous-routine du


programme. Par contre elle nest initie par aucune instruction du programme. Elle est initie par le
signal dinterruption et elle peut intervenir nimporte quel moment de lexcution du programme
interrompu. Pour cette raison, cette sous-routine dinterruption ne doit modifier aucun des registres
R0,,R6 et R7 du micro-processeur. De la mme faon, elle ne doit pas modifier aucun des
indicateurs n, z et p car linterruption peut intervenir entre une instruction qui positionne ces
indicateurs (comme LD et ADD) et une instruction de branchement conditionnel (comme BRz) qui les
utilise.

12.7.2 Retour dune interruption


Afin de pouvoir revenir linstruction excuter, le micro-processeur doit sauvegarder le compteur de
programme. Comme aucun registre ne peut tre modifi, le compteur de programme ne peut tre
transfr dans le registre R7 comme les instructions JSR, JSRR et TRAP le font. Le compteur de
programme est empil sur la pile ainsi que le registre PSR qui contient les indicateurs n, z et p. Ensuite
le compteur de programme est charg avec ladresse de la routine dinterruption. La routine
dinterruption se charge elle-mme dempiler les registres dont elle a besoin afin de les restaurer
lorsquelle se termine. La routine dinterruption se termine par une instruction spcifique RTI (pour
ReTurn Interrupt). Il faut dabord dpiler le registre PSR puis sauter linstruction dont ladresse est
sur la pile. Comme le registre R7 doit tre prserv, linstruction RET ne peut tre utilise.
Linstruction RTI se charge de dpiler PSR et de dpiler ladresse de retour pour la charger dans le
registre PC.

- 94 -
Les sous-routines et la pile 12.7.3 Vecteurs dinterruption

12.7.3 Vecteurs dinterruption


Dans les micro-processeurs trs simples, ladresse de la routine dinterruption est fixe. Sil y a
plusieurs circuits extrieurs susceptibles de provoquer une interruption, le premier travail de la routine
dinterruption est de dterminer quel est le circuit qui a effectivement provoqu linterruption. Ceci est
fait en interrogeant les registres dtat (Status Register) de chacun de ces circuits.

Sil y a beaucoup de circuits pouvant provoquer une interruption, il peut tre long de dterminer lequel
a provoqu linterruption. Comme le temps pour grer chaque interruption est limit, les
micro-processeurs possdent plusieurs routines dinterruption. Chacune dentre elles gre un des
circuits extrieurs. Comme pour les appels systmes, il existe une table des interruptions qui contient
les adresses des diffrentes routines dinterruption. Pour le micro-processeur LC-3, celle-ci se trouve
aux adresses de 0x100 0x1FF. Lorsquun circuit engendre une interruption, il transmet au
micro-processeur via le bus de donnes un vecteur dinterruption. Ce vecteur est en fait lindice dune
entre de la table des interruptions. Pour le micro-processeur LC-3, il sagit de la dune valeur 8 bits
auquel le micro-processeur ajoute 0x100 pour trouver lentre dans la table. Chaque circuit externe
reoit le vecteur dinterruption qui lui est attribu lors de son initialisation par le micro-processeur.

Tables des appels systmes et interruptions

12.7.4 Priorits
Dans le micro-processeur LC-3, chaque programme est excut avec une certaine priorit allant de 0
7. Celle-ci est stocke dans 3 bits du registre PSR. Lorsquune interruption est demande par un circuit
extrieur, celle-ci a aussi une priorit. Elle est alors effectivement effectue si sa priorit est suprieure
la priorit du programme en cours dexcution. Sinon, elle est ignore.

Lorsquune interruption est accepte, la routine dinterruption est excute avec la priorit de
linterruption. Cette priorit est mise dans le registre PSR aprs la sauvegarde de celui-ci sur la pile.
la fin de la routine, linstruction RTI restaure le registre PSR en le dpilant. Le programme interrompu
retrouve ainsi sa priorit.

Il est possible quune demande dinterruption intervienne pendant lexcution dune autre routine
dinterruption. Cette interruption est prise en compte si elle a une priorit suprieure celle en cours.
Ce mcanisme permet de grer les urgences diffrentes des interruptions. Une interruption lie un

- 95 -
12.7.5 Contrleur dinterruption Olivier Carton

dfaut de cache est nettement plus urgente quune autre lie larrive dun caractre dun clavier.

Imbrications des interruptions

12.7.5 Contrleur dinterruption


Certains micro-processeurs comme le 8086 ne disposent que de deux interruptions. Chacune de ses
deux interruptions correspond une broche du circuit du micro-processeur. Une premire interruption
appele NMI (Non Maskable Interrupt) est une interruption de priorit maximale puisquelle ne peut
pas tre ignore par le micro-processeur. Celle-ci est gnralement utilise pour les problmes graves
comme un dfaut de mmoire. Une seconde interruption appele INTR est utilise par tous les autres
circuits extrieurs. Afin de grer des priorits et une file dattente des interruptions, un circuit
spcialis appel PIC (Programmable Interrupt Controler) est adjoint au micro-processeur. Ce circuit
reoit les demandes dinterruption des circuits et les transmet au micro-processeur. Le
micro-processeur dispose dune sortie INTA (Interrupt Acknowledge) pour indiquer au PIC quune
interruption est traite et quil peut en envoyer une autre.

Contrleur dinterruptions

- 96 -
Les sous-routines et la pile 12.7.6 Sparation des piles systme et utilisateur

12.7.6 Sparation des piles systme et utilisateur


Pour plusieurs raisons, il est prfrable que la pile utilise par le systme soit distincte de la pile de
chacun des programmes utilisateurs. Dabord, si un programme gre mal sa pile et que celle-ci
dborde, cela nempche pas le systme de fonctionner correctement. Dautre part, si la pile est
partage, un programme peut en inspectant sa pile trouver des informations de scurit quil ne devrait
pas avoir.

Pour ces raisons, le micro-processeur LC-3 permet dutiliser deux piles distinctes. Ceci est mis en
uvre de la manire suivante. Le micro-processeur dispose de deux registres USP (User Stack Pointer)
et SSP (System Stack Pointer) qui sauvegardent le registre R6 utilis comme pointeur de pile. Lorsque
le micro-processeur LC-3 passe en mode privilgi (lors dune interruption), le registre R6 est
sauvegard dans USP et R6 est charg avec le contenu de SSP. Lorsquil sort du mode privilgi, R6
est sauvegard dans SSP et R6 est charg avec le contenu de USP. Ce mcanisme impose bien sr que
le pointeur de pile soit le registre R6.

- 97 -
13 Entres/Sorties Olivier Carton

13 Entres/Sorties
Un micro-processeur ne communique pas directement avec lextrieur. Toutes les entres/sorties se
font par lintermdiaire de circuits spcialiss qui dchargent ainsi le processeur de certaines tches. Il
existe des circuits spcialiss dans les diffrents types de connexions : srie, parallle, SCSI, IDE,
USB, . Un circuit pour une connexion srie se charge par exemple de surveiller les signaux de la
ligne et de le traduire en un octet disponible pour le processeur.

13.1 Adressage des circuits dentres/sorties


Ces diffrents circuits rsident sur la carte mre et communiquent avec le processeur par
lintermdiaire du bus de donne. La communication est en gnral linitiative du micro-processeur.
Hormis les exceptions, ces circuits se contentent de rpondre aux demandes du micro-processeur et
dexcuter ses instructions. Les circuits les plus simples ont gnralement un registre de contrle et un
registre de donne qui peuvent tre lus ou chargs par le micro-processeur. Le registre de contrle
permet au micro-processeur de connatre ltat du circuit et ventuellement de le configurer. Le
registre de donne permet lchange des donnes en entre et/ou en sortie. Le micro-processeur lit
dans ce registre les donnes en entre et y crit les donnes en sortie.

Circuits dentres/sorties

Afin de rpondre aux demandes du micro-processeur, les circuits doivent tre slectionns par celui-ci.
Il existe deux mthodes classiques pour faire cet adressage. La premire mthode tait plutt utilise
par les processeurs anciens alors que la seconde est plus frquente sur les micro-processeurs modernes.

La premire mthode consiste sparer ladressage de la mmoire et ladressage des entres/sorties.


En plus du bus de dadresse, il y a une ligne supplmentaire o le processeur indique sil sadresse la
mmoire ou aux circuits dentres/sorties. Cette mthode a lavantage daugmenter dune certaine
faon lespace dadressage. Cest pourquoi les premiers micro-processeurs lutilisaient car leur espace
dadressage tait souvent rduit. Cette mthode a par contre linconvnient de ncessiter des
instructions spcifiques pour accder aux circuits dentres/sorties.

- 98 -
Entre/Sorties 13.2 Scrutation des circuits dentres/sorties

Adressage distinct des circuits dentres/sorties

La seconde mthode consiste rserver une partie de ladressage de la mmoire aux entres/sorties.
On parle dentres/sorties en mmoire. Cette mthode rduit donc lespace dadressage disponible
pour la mmoire mais ce nest pas gnant sur les micro-processeurs modernes qui disposent dun (trs)
large espace dadressage. Elle permet aussi lutilisation des instructions de chargement et rangement
pour accder aux circuits dentres/sorties et de bnficier ainsi des diffrents modes dadressage.
Cette mthode est toujours utilise sur les micro-processeurs RISC car elle diminue le nombre
dinstructions et simplifie le dcodage de celles-ci.

13.2 Scrutation des circuits dentres/sorties


Lorsquun circuit dentre/sortie a reu une donne, le micro-processeur doit venir la lire pour la
rcuprer. Les buffers de ces circuits sont gnralement assez petits. Ceci implique que la donne doit
tre lue rapidement. Sinon, des donnes qui arrivent risquent dtre perdues.

Il existe essentiellement deux mthodes pour viter que des donnes soient perdues. La premire
consiste faire en sorte que le micro-processeur interroge rgulirement les diffrents circuits
dentre/sortie pour savoir si une donne est disponible. Cette mthode est la plus simple. Par contre,
elle utilise beaucoup le micro-processeur mme quand il na aucune entre/sortie. La seconde utilise
les interruption qui permettent aux circuit dentre/sortie de prvenir le micro-processeur lorsquune
donne est disponible. Le micro-processeur interrompt alors la tche en cours pour lire la donne et la
placer dans un buffer en mmoire o elle est mise en attente pour une tche.

13.3 Entres/Sorties du LC-3


Cdeux circuits dentre/sortie sont adjoints au micro-processeur. Le premier circuit permet de
connecter un clavier et le second de le relier un terminal pour afficher du texte. Chacun de ces
circuits peut par exemple tre un circuit pour une connexion srie.

Le micro-processeur LC-3 utilise des entres/sorties en mmoire. Deux adresses mmoire sont
rserves pour chacun des deux circuits dentres/sorties. Une premire adresse sert pour le registre de
contrle et une seconde sert pour le registre de donne.

Un permet circuit extrieur marqu Logic sur la figure ci-dessous dtermine si ladresse prsente
dans le registre MAR (Memory Address Register) est une adresse en mmoire ou une adresse dun
circuit dentre/sortie. Dans le premier cas, il active la mmoire. Dans le second cas, il active le circuit
correspondant ladresse.

- 99 -
13.3 Entres/Sorties du LC-3 Olivier Carton

Chemins de donnes du LC-3 avec les entres/sorties

- 100 -
Entre/Sorties 13.3.1 Lecture et criture dun caractre

13.3.1 Lecture et criture dun caractre


13.3.1.1 Lecture
Le circuit pour le clavier utilise ladresse 0xfe00 pour le registre de contrle et ladresse 0xfe02 pour
le registre de donne. Le registre de contrle permet uniquement de savoir si un caractre est
disponible. La valeur du bit de poids fort (numro 15) de ce registre indique si un caractre est
disponible. La lecture de ce caractre se fait alors dans le registre de donne. La routine ci-dessous
effectue une lecture bloquante dun caractre du clavier.
DEFINE KBSR 4xfe00 ; Registre de contrle (Status) du clavier
DEFINE KBDR 4xfe02 ; Registre de donne du clavier

getc:
waitkb: LDI R2,pKBSR
BRzp waitkb
LDI R0,pKBDR
RET

pKBSR: .FILL KBSR ; Pointeur sur le registre de contrle


pKBDR: .FILL KBDR ; Pointeur sur le registre de donne

13.3.1.2 criture
Le circuit pour lcran utilise ladresse 0xfe04 pour le registre de contrle et ladresse 0xfe06 pour le
registre de donne. Le registre de contrle permet uniquement de savoir si le dernier caractre crit a
t envoy et si le circuit est prt envoyer un nouveau caractre. Lenvoi dun caractre sur une ligne
srie prend un certain temps. Le micro-processeur doit attendre que lmission dun caractre est
termine avant den crire un autre dans le registre de donne. La valeur du bit de poids fort (numro
15) du registre de contrle indique si le circuit est prt envoyer. Lmission du caractre est initie en
lcrivant dans le registre de donne du circuit. La routine ci-dessous effectue une criture bloquante
dun caractre sur lcran.
DEFINE DPSR 4xfe04 ; Registre de contrle (Status) de lcran
DEFINE DPDR 4xfe06 ; Registre de donne de lcran

putc:
waitdp:
LDI R2,pDPSR
BRzp waitdp
STI R0,pDPDR
RET

pDPSR: .FILL DPSR ; Pointeur sur le registre de contrle


pDPDR: .FILL DPDR ; Pointeur sur le registre de donne

- 101 -
14 Autres architectures Olivier Carton

14 Autres architectures
processeurs 80x86
comparaison CISC/RISC
architecture IA-64

- 102 -
Processeurs 80x86 14.1 Processeurs 80x86

14.1 Processeurs 80x86

14.1.1 Registres

Registres du micro-processeur 8086

14.1.2 Mmoire

Mmoire du micro-processeur 8086

14.1.3 Adressage par segments

- 103 -
14.1.4 Instructions Olivier Carton

Adressage du micro-processeur 8086

14.1.4 Instructions

14.1.5 Instruction de chargement et rangement


MOV chargement et rangement
PUSH empilement
POP dpilement

14.1.6 Instructions arithmtiques


Le micro-processeur possde un jeu dinstruction deux oprandes. Ceci signifie que dans les
opration arithmtiques et logiques, la destination est ncessairement une des deux operandes.

INC incrmentation
DEC dcrmentation
ADD addition
ADC addition avec retenue
SUB soustraction
CMP comparaison (soustraction sans rangement)
NEG oppos

14.1.7 Instructions logiques


NOT ngation
OR, XOR ou logique et ou exclusif
AND, TEST et logique et et logique sans rangement
SHL, SHR, SAL, SAR dcalages gauche et droite
ROL, ROR, RCL, RCR rotations gauche et droite (avec injection de la retenue)

- 104 -
Processeurs 80x86 14.1.8 Branchements

14.1.8 Branchements
JMP branchement
JZ, JNZ branchement si zro ou non
JO, JNO branchement si dbordement (Overflow) ou non
JS, JNS branchement si ngatif ou non
JA, JAE, JG, JGE branchement si plus grand (ou gal) ou non
JB, JBE, JL, JLE branchement si plus petit (ou gal) ou non

14.1.9 Appel et retour de sous-routine


CALL et CALLF appel et appel lointain
RET et RETF retour et retour lointain
INT appel systme

14.1.10 Modes dadressages


absolu
indirect
avec les registres BX, SI ou DI
base + offset
avec les registres BP, BX, BI ou SI avec offset 8 ou 16 bits
index
laddresse est la somme de deux registres. Les paires possibles sont BX+SI, BX+DI, BP+SI et
BP+DI
base + index + offset
identique au mode prcdent avec en plus un offset 8 ou 16 bits

14.1.11 Instructions complexes


PUSHA, POPA empilement et dpilement de tous les registres
ECHG change de deux valeurs
MOVS dplacement de chane : mem[ES:DI] mem[DS:SI]; DI DI+1; SI SI+1. Cette
instruction peut tre prcde dun prfixe comme REP, REPZ ou REPNZ qui donne le nombre
de fois la rpter.
LOOP label dcrmentation et saut : DEC CX et JNZ label

14.1.12 Programmation
Voici un petit exemple de programme qui calcule la longueur dune chane de caractres
; Segment de donnes
data SEGMENT
chaine DB Hello world\0
data ENDS

; Segment de code
code SEGMENT
ASSUME DS:data, CS:code

- 105 -
14.1.12 Programmation Olivier Carton

main: ; Initialisation du registre de segment de donnes


MOV AX,data
MOV DS,AX

; Chargement de ladresse de la chane dans BX


; Il sagit de ladresse relative au dbut du segment
MOV BX,offset chaine
; Initialisation compteur
MOV CX,0

loop: MOV AL,[BX]


CMP AL,0 ; Test de fin de chane
JZ fini
INC BX ; Incrmentation pointeur
INC CX ; Incrmentation compteur
JMP loop

fini: ; Retour au DOS


MOV AH,4CH
INT 21H
code ENDS
END main ; Adresse de lancement

- 106 -
Comparaison CISC/RISC 14.2 Comparaison CISC/RISC

14.2 Comparaison CISC/RISC


Les processeurs gnraux actuels se rpartissent en deux grandes catgories appeles CISC pour
Complex Instruction Set Computer et RISC pour Reduced Instruction Set Computer. Les processeurs
de ces deux catgories se distinguent par la conception de leurs jeux dinstructions. Les processeurs
CISC possdent un jeu tendu dinstructions complexes. Chacune de ces instructions peut effectuer
plusieurs oprations lmentaires comme charger une valeur en mmoire, faire une opration
arithmtique et ranger le rsultat en mmoire. Au contraire, les processeurs RISC possdent un jeu
dinstructions rduit o chaque instruction effectue une seule opration lmentaire. Le jeu
dinstructions dun processeur RISC est plus uniforme. Toutes les instructions sont codes sur la
mme taille et toutes sexcute dans le mme temps (un cycle dhorloge en gnral). Lorganisation du
jeu dinstructions est souvent appel ISA pour Instruction Set Architecture

La rpartition des principaux processeurs dans les deux catgories est la suivante.

CISC RISC
Alpha (DEC)
S/360 (IBM)
PowerPC (Motorola)
VAX (DEC)
MIPS
68xx, 680x0 (Motorola)
PA-RISC (Hewlett-Packard)
x86, Pentium (Intel)
SPARC

14.2.1 Historique
Dans les premiers temps de linformatique, les ordinateurs taient programms en langage machine ou
en assembleur. Pour faciliter la programmation, les concepteurs de micro-processeurs dotrent ceux-ci
dinstructions de plus en plus complexes permettant aux programmeurs de coder de manire plus
concise et plus efficace les programmes.

Lorsque les premiers langages de haut niveau remplacrent lassembleur, cette tendance saccentua.
Les concepteurs de micro-processeurs sefforcrent de combler le foss entre le langage machine et les
langages de haut niveau. Des instructions proches des constructions typiques des langages de haut
niveau furent ajouts aux micro-processeurs. Lide tait de faciliter la compilation des langages de
haut niveau au dtriment de la complexit des micro-processeurs. On ajouta par exemple des
instructions spcifiques pour les appels/retours de fonctions ou des instructions spciales pour les
boucles pour dcrmenter un registre et faire un saut si le rsultat est non nul, tout a en une seule
instruction machine.

Un lment qui favorisa cette complexification des micro-processeurs tait le manque ( cause du prix)
de mmoire et la lenteur de celle-ci. Labsence de beaucoup de mmoire force les programmes tre
le plus compacts possible. Pour rduire le nombre dinstructions ncessaires un programme, il faut
que chaque instruction fasse plusieurs oprations lmentaires. La lenteur relative de la mmoire
pousse aussi avoir des instructions complexes. Il ny a alors moins de codes dinstructions lire en
mmoire et le programme en est acclr.

Comme la densit dintgration des transistors tait encore faible, les micro-processeurs possdaient
trs peu de registres internes. De plus, un grand nombre de registres auraient ncessit plus de bits
pour coder les instructions. Pour compenser cette lacune en registres, certaines instructions taient
capables, par exemple, de charger deux valeurs en mmoire, de faire la somme et de ranger le rsultat

- 107 -
14.2.1 Historique Olivier Carton

en mmoire. Il y avait de nombreux modes dadressage et tous les modes dadressages taient
possibles toutes les instructions. On parle alors dorthogonalit lorsque toutes les instructions
peuvent utiliser tous les modes dadressages. Laboutissement de ce type de jeux dinstructions est
celui du VAX.

La complexification des jeux dinstructions a pour effet de compliquer notablement la phase de


dcodage des instructions. On peux constater que sur certains micro-processeurs jeu dinstructions
complexe, la moiti des transistors sur la puce de silicium est consacre au dcodage des instructions
et au contrle de lexcution de celles-ci.

Comme le dcodage des instructions est rendu difficile par un jeu dinstructions complexes,
lexcution des instructions simples est ralenti par un dcodage compliqu.

Lorsque le jeu dinstructions est complexe, la plupart des compilateurs nutilisent pas tout le jeu
dinstructions. Il se contentent souvent dun nombre rduit dinstructions. Le rsultat est que les
instructions les plus puissantes sont trs rarement utilises. On arrive alors au paradoxe suivant. Les
instructions complexes qui ne sont pratiquement pas utilises ralentissent les instructions simples qui
sont utilises la plupart du temps.

Des tudes statistiques sur des programmes tels des systmes dexploitation ou des applications relles
ont montr les faits suivants.

80 % des programmes nutilisent que 20 % du jeu dinstructions.


Les instructions les plus utilises sont :
les instructions de chargement et de rangement,
les appels de sous-routines.
Les appels de fonctions sont trs gourmands en temps : sauvegarde et restitution du contexte et
passage des paramtres et de la valeur de retour.
80 % des variables locales sont des entiers.
90 % des structures complexes sont des variables globales.
La profondeur maximale dappels imbriqus et en moyenne de 8. Une profondeur plus importante
ne se rencontre que dans 1 % des cas.

Lapparition de larchitecture RISC vint de la volont de favoriser au maximum les instructions


simples qui constituent la grande partie des programmes. Lide est de supprimer les instructions
complexes et les modes dadressage labors afin daugmenter la frquence dhorloge et daugmenter
ainsi la vitesse dexcution de toutes les instructions. La frquence dhorloge dun micro-processeur
est souvent dicte par les instructions les plus complexes qui prennent plus de temps.

La philosophie essentielle des processeurs RISC est davoir un nombre important de registres. Des
instructions de chargement et de rangement avec quelques modes dadressage sont les seules faire les
changes avec la mmoire. Toutes les autres instructions travaillent uniquement avec les registres.

Lapparition des micro-processeurs RISC est en partie due laugmentation de la mmoire disponible
sur les ordinateurs. Celle-ci nest plus une limitation la taille des programme. Un autre facteur
important est le foss qui sest creus entre la vitesse des processeurs et celle de la mmoire. Les
processeurs ont une frquence dhorloge leve par rapport la vitesse de la mmoire. Chaque accs
la mmoire les pnalise. Ceci accentue le rle dun nombre important de registres qui vitent les accs
la mmoire. La lenteur de la mmoire est en partie compense par la prsence de caches faits de
mmoires rapides. Ceux-ci sont trs efficaces pour lire les instructions des programmes puisque ces
accs la mmoire se font des cases mmoire contigus.

- 108 -
Comparaison CISC/RISC 14.2.2 Caractristiques

14.2.2 Caractristiques
Les principales caractristiques des processeurs RISC sont les suivantes.

Codage uniforme des instructions


Toutes les instructions sont codes avec un mme nombre de bits, gnralement un mot machine.
Lop-code se trouve la mme position pour toutes les instructions. Ceci facilite le dcodage des
instructions.
Registres indiffrencis et nombreux
Tous les registres peuvent tre utiliss dans tous les contextes. Il ny a par exemple pas de registre
spcifique pour la pile. Les processeurs sparent cependant les registres pour les valeurs flottantes
des autres registres.
Limitation des accs mmoire
Les seules instructions ayant accs la mmoire sont les instructions de chargement et de
rangement. Toutes les autres instructions oprent sur les registres. Il en rsulte une utilisation
intensive des registres.
Nombre rduit de modes dadressage
Il ny pas de mode dadressage complexe. Les modes dadressages possibles sont gnralement
immdiat, direct, indirect et relatifs. Un registre est souvent fix la valeur 0 afin dobtenir
certains modes dadressages simples comme cas particulier dautres modes dadressage.
Nombre rduit de types de donnes
Les seuls types de donnes supports sont les entiers de diffrentes tailles (8, 16, 32 et 64 bits) et
des nombres flottants en simple et double prcision. Certains processeurs CISC comportent des
instructions pour le traitement des chanes de caractres, des polynmes ou des complexes

La simplification du jeu dinstructions a report une partie du travail sur le compilateur. Ce dernier
joue un rle essentiel dans loptimisation du code engendr. Il doit en particulier grer les points
suivants.

allocation optimale des registres,


limination des redondances,
optimisation des boucles en ne conservant lintrieur que ce qui est modifi,
optimisation du pipeline,
optimisation du choix des instructions,

- 109 -
14.3 Architecture IA-64 Olivier Carton

14.3 Architecture IA-64


Larchitecture IA-64 (Intel Architecture 64 bits) est larchitecture des processeurs 64 bits Itanium et
Itanium 2 dvelopps conjointement par Intel et Hewlett-Packard. Elle utilise une technique appele
EPIC (Explicitly Parallel Instruction Computing).

Larchitecture de ce micro-processeur se distingue des autres architectures car elle introduit plusieurs
concepts novateurs. Bien que lItanium soit un (semi-)chec commercial, il est intressant den tudier
les caractristiques essentielles.

Le principe de la technique EPIC est davoir une paralllisation explicite des instructions. Dans un
programme dun micro-processeur classique, les instructions sont disposes de manire squentielle.
Le micro-processeur peut essayer den excuter certaines en parallle mais il ne dispose daucune
indication pour laider. Il doit donc la vole grer les dpendances des instructions et leur affecter
une unit dexcution. Les instructions du processeur Itanium sont au contraire disposes en paquets
(appels bundles), prtes tre paralllises. Chaque paquet dispose en plus dindications sur les
units ncessaires lexcution de ses instructions. La paralllisation des instructions est donc
prpare au moment de la compilation et de lassemblage.

Voici quelques caractristiques essentielles de larchitecture IA-64.

Nombre important de registres pour faciliter la paralllisation des instructions.


Certains registres sont statiques et dautres sont grs sous forme dune pile pour faciliter les
appels de fonctions.
Instruction de chargement anticip pour masquer la latence de la mmoire
Regroupement des instructions en paquets (bundles) avec des indications explicites des units
ncessaires
Excution par prdicats des instructions.

14.3.1 Organisation
Lorganisation de larchitecture IA-64 est base sur un nombre important de registres et sur de
multiples units dexcution. Ces deux caractristiques permettent un degr lev de paralllisme.
Dans un micro-processeur classique, le nombre de registres rellement disponibles peut tre suprieur
au nombre de registres utiliss par lassembleur. Le micro-processeur effectue la vole un
renommage des registres afin dutiliser au mieux tous les registres. Dans larchitecture IA-64, tous les
registres sont visibles de lassembleur.

14.3.1.1 Registres
Les registres dont dispose larchitecture IA-64 sont les suivants.

128 registres gnraux de 64 bits


128 registres applicatifs de 64 bits
128 registres flottants de 82 bits
64 bits de prdictions

- 110 -
Architecture IA-64 14.3.2 Format des Instructions

14.3.1.2 Units dexcution


Le nombre dunits dexcution peut varier et dpend du nombre de transistors disponibles pour une
implmentation donne. Le micro-processeur sarrange pour utiliser au mieux les units dont il
dispose. Larchitecture distingue les quatre types suivants dunits dexcution.

Unit I
unit arithmtique et logique sur les entiers (additions, soustractions, oprations logiques,
dcalage)
Unit M
unit de chargement et de rangement entre les registres et la mmoire, plus quelques oprations
sur les entiers
Unit B
unit de branchement
Unit F
unit doprations sur les nombres flottants

14.3.1.3 Type dinstructions


Larchitecture distingue aussi des types dinstructions qui correspondent plus ou moins aux units qui
peuvent les excuter.

Type dinstruction Description Unit dexcution


A UAL Unit I ou unit M
I Entier non UAL Unit I
M Accs mmoire Unit M
F Opration sur flottants Unit F
B Branchement Unit B
L+X tendu Unit I/Unit B

14.3.2 Format des Instructions


Les instructions sont regroupes en paquets (bundles) de 128 bits contenant chacun trois instructions et
des indications de paralllisations appeles champ gabarit. Chaque instruction est code sur 41 bits. Il
reste donc 5 = 128 - 341 bits pour le champ gabarit. Le format dun paquet est le suivant.

Format dun paquet de 128 bits

Chaque instruction est code sur 41 bits. Les 4 premiers bits donnent le code-op principal et les 6
derniers bits donnent le numro du registre prdicatif qui conditionne lexcution de linstruction.
Lutilisation des 31 = 41 - 4 - 6 bits restant dpend du code-op principal. Une utilisation typique est

- 111 -
14.3.2 Format des Instructions Olivier Carton

cependant de coder un code-op supplmentaire sur les 10 premiers bits puis de coder 3 registres sur 7
bits chacun.

Format dune instruction sur 41 bits

Linterprtation du code-op principal dpend du champ gabarit car celui-ci indique dj lunit
dexcution ncessaire linstruction. Pour que cette information ne soit pas redondante avec le
code-op, cest le code-op combin avec le champ gabarit qui dtermine linstruction prcise. Le
gabarit indique dabord une catgorie dinstructions, le code-op donne ensuite linstruction dans la
catgorie et le code-op supplmentaire peut encore prciser linstruction. Il sagit en fait dune
organisation hirarchique des codes-op.

14.3.2.1 Champ gabarit


Le champ gabarit code deux informations distinctes. Dune part, il donne lunit dexcution
ncessaire chacune des trois instructions du paquet. Dautre part, il prcise les positions
dventuelles limites. Ces limites sparent des blocs dinstructions qui peuvent chevaucher plusieurs
paquets. Le micro-processeur peut en effet charger plusieurs paquets simultanment pour essayer
dexcuter un maximum dinstructions en parallle. Les blocs sont des suites dinstructions
conscutives dans le flot dinstructions. Une limite indique quune instruction aprs elle peut avoir une
dpendance avec une instruction avant elle. Autrement dit, toutes les instructions entre deux limites
conscutives ne prsentent pas de dpendance. Elles peuvent donc tre excutes en parallle.

Ces deux informations sont regroupes dans un modle dont le numro est donn par le champ gabarit.
Parmi les 32 codes possibles, seuls 24 sont assigns des modles. Les 8 codes restants sont rservs
pour une utilisation ultrieure. La table suivante donne les modles prvus. Les limites sont indiques
par une double barre verticale ||.

- 112 -
Architecture IA-64 14.3.3 Excution prdicative

Modle Instruction 0 Limite Instruction 1 Limite Instruction 2 Limite


00 Unit M Unit I Unit I
01 Unit M Unit I Unit I ||
02 Unit M Unit I || Unit I
03 Unit M Unit I || Unit I ||
04 Unit M Unit L Unit X
05 Unit M Unit L Unit X ||
08 Unit M Unit M Unit I
09 Unit M Unit M Unit I ||
0A Unit M || Unit M Unit I
0B Unit M || Unit M Unit I ||
0C Unit M Unit M Unit I
0D Unit M Unit F Unit I ||
0E Unit M Unit M Unit F
0F Unit M Unit M Unit F ||
10 Unit M Unit I Unit B
11 Unit M Unit I Unit B ||
12 Unit M Unit B Unit B
13 Unit M Unit B Unit B ||
16 Unit B Unit B Unit B
17 Unit B Unit B Unit B ||
18 Unit M Unit M Unit B
19 Unit M Unit M Unit B ||
1C Unit M Unit F Unit B
1D Unit M Unit F Unit B ||

Il est la charge du compilateur de regrouper au mieux les instructions en paquets puis en blocs afin
doptimiser lutilisation des units dexcution du micro-processeur.

14.3.3 Excution prdicative


Les registres prdicatifs sont des registres binaires qui sont positionns par les instructions de
comparaison. Ils sapparentent donc aux indicateurs binaires comme n, z et p prsents dans la plupart
des micro-processeurs. Par contre, ils sont tous indiffrencis et chacun dentre eux peut tre
positionn par une comparaison. En fait, chaque comparaison positionne deux registres prdicatifs
avec des valeurs opposes.

Lexcution de chaque instruction est conditionne par la valeur dun des registres prdicatifs
dtermin par les 6 derniers bits de linstruction. Celle-ci est excute seulement si ce registre
prdicatif vaut 1. Sinon, elle nest pas excute. Le registre prdicatif p0 a toujours la valeur 1. Une
instruction indique donc ce registre prdicatif si elle doit toujours tre excute.

- 113 -
14.3.4 Chargement spculatif Olivier Carton

La compilation dune structure de contrle if-then-else dun langage de haut niveau se traduit
par des sauts en langage dassembleur. La compilation du morceau de code ci-dessous
if (cond) {
bloc 1
} else {
bloc 2
}

conduit au code dassembleur LC-3 suivant.


; Calcul de cond
...
BRz bloc2 ; Condition fausse
; Dbut du bloc 1
...
BR finif ; Fin du bloc 1
bloc2: ; Dbut du bloc 2
...
finif: ; Suite du programme

Si les blocs dinstructions 1 et 2 sont relativement courts, la prsence des sauts pnalise lexcution du
programme.

Le principe dutilisation des registres prdicatifs est le suivant. La calcul de la condition positionne
deux registres prdicatifs p1 et p2 de manire oppose. Si la condition est vraie, p1 est positionn
vrai et p2 faux et si la condition est fausse, p1 est positionn faux et p2 vrai. Ensuite, le
programme excute les instructions du bloc 1 conditionnes par p1 et les instructions du bloc 2
conditionnes par p2. Cela donne le code en assembleur suivant o les sauts ont disparu. La syntaxe
(p) instr signifie que linstruction instr est conditionne par le registre prdicatif p. Le
micro-processeur excute plus dinstructions mais cela est largement compens par la disparition des
sauts si les blocs 1 et 2 sont assez courts.
; Calcul de cond
...
; Positionnement de p1 et p2
; Dbut du bloc 1
(p1) instr1
(p1) instr2
...
; Dbut du bloc 2
(p2) instr1
(p2) instr2
...
; Suite du programme

14.3.4 Chargement spculatif


Lide du chargement spculatif est danticiper le chargement de valeurs partir de la mmoire afin
dviter que le calcul reste bloqu en attente dune valeur. Le chargement dune valeur est scind en
deux actions. La premire est de demander le chargement sans attendre que celui-ci soit termin. La
seconde est de vrifier que le chargement a t effectivement accompli au moment o la valeur doit
tre utilise. Le principe est de placer la demande bien avant lutilisation de la valeur. Le chargement a
alors largement le temps de seffectuer. La vrification est ensuite faite juste avant dutiliser la valeur.
Si la valeur nest pas encore charge, le calcul est bloqu mais cet vnement survient rarement.

- 114 -
Pipeline 15 Pipeline

15 Pipeline
15.1 Principe
Le pipeline est un mcanisme permettant daccrotre la vitesse dexcution des instructions dans un
micro-processeur. Lide gnrale est dappliquer le principe du travail la chane lexcution des
instructions. Dans un micro-processeur sans pipeline, les instructions sont excutes les unes aprs les
autres. Une nouvelle instruction nest commence que lorsque linstruction prcdente est
compltement termine. Avec un pipeline, le micro-processeur commence une nouvelle instruction
avant davoir fini la prcdente. Plusieurs instructions se trouvent donc simultanment en cours
dexcution au cur du micro-processeur. Le temps dexcution dune seule instruction nest pas
rduit. Par contre, le dbit du micro-processeur, cest--dire le nombre dinstructions excutes par
unit de temps, est augment. Il est multipli par le nombre dinstructions qui sont excutes
simultanment.

15.2 tages du pipeline


Afin de mettre en uvre un pipeline, la premire tche est de dcouper lexcution des instructions en
plusieurs tapes. Chaque tape est prise en charge par un tage du pipeline. Si le pipeline possde n
tages, il y a n instructions en cours dexcution simultane, chacune dans une tape diffrente. Le
facteur dacclration est donc le nombre n dtages. On verra que plusieurs problmes rduisent ce
facteur dacclration. Sur les micro-processeurs actuels, le nombre dtages du pipeline peut atteindre
une douzaine ou mme une vingtaine. La frquence dhorloge est limite par ltape qui est la plus
longue raliser. Lobjectif des concepteurs de micro-processeurs est dquilibrer au mieux les tapes
afin doptimiser la performance.

Pour le micro-processeur LC-3, on va dcouper lexcution des instructions en les cinq tapes
suivantes. On va donc construire un pipeline cinq tages.

Lecture de linstruction (Instruction Fetch)


La prochaine instruction excuter est charge partir de la case mmoire pointe par le
compteur de programme PC dans le registre dinstruction IR. Ensuite le compteur de programme
est incrment pour pointer sur linstruction suivante.
Dcodage de linstruction (Instruction Decode)
Cette tape consiste prparer les arguments de linstruction pour ltape suivante o ils seront
utiliss. Ces arguments sont placs dans deux registres A et B. Si linstruction utilise le contenu
de un ou deux registres, ceux-ci sont lus et leurs contenus sont rangs en A et B. Si linstruction
contient une valeur immdiate, celle-ci est tendue (signe ou non signe) 16 bits et place dans
le registre B. Pour les instructions de branchement avec offset, le contenu de PC est rang en A et
loffset tendu dans B. Pour les instructions de branchement avec un registre, le contenu de ce
registre est rang en A et B est rempli avec 0. Les instructions de rangement ST* mettent le
contenu du registre qui doit tre transfr en mmoire dans le registre C.
Excution de linstruction (Instruction Execution)
Cette tape utilise lunit arithmtique et logique pour combiner les arguments. Lopration
prcise ralise par cette tape dpend du type de linstruction.
Instruction arithmtique ou logique (ADD, AND et NOT)
Les deux arguments contenus dans les registres A et B sont fournis lunit arithmtique et
logique pour calculer le rsultat.

- 115 -
15.3 Ralisation du pipeline Olivier Carton

Instruction de chargement et rangement (LD* et ST*)


Le calcul de ladresse est effectu partir de ladresse provenant du registre A et de loffset
contenu dans le registre B.
Instruction de branchement (BR*, JMP, JSR, JSRR et TRAP)
Pour les instructions contenant un offset, laddition avec le contenu du PC est effectue
cette tape. Pour les instructions utilisant un registre, le contenu du registre est juste
transmis.
Accs la mmoire (Memory Access)
Cette tape est uniquement utile pour les instruction de chargement et de rangement. Pour les
instructions arithmtiques et logiques ou les branchements, rien nest effectu. Ladresse du mot
mmoire est contenue dans le registre R. Dans le cas dun rangement, la valeur ranger provient
du registre C. Dans le cas dun chargement, la valeur lue en mmoire est mise dans le registre R
pour ltape suivante.
Rangement du rsultat (Write Back)
Le rsultat des oprations arithmtiques et logiques est rang dans le registre destination. La
valeur lue en mmoire par les instructions de chargement est aussi range dans le registre
destination. Les instructions de branchement rangent la nouvelle adresse dans PC.

Ce schma ne sapplique pas aux deux instructions LDI et STI qui ncessitent deux accs la
mmoire. Les processeurs utilisant un pipeline ne possdent pas dinstruction avec ce mode
dadressage indirect. Dans la suite, on ignore ces deux instructions.

Le pipeline a rduit le nombre dadditionneurs puisque le mme est utilis pour les calculs
arithmtiques et les calculs dadresses. Par contre, certains registres ont d tre multiplis. Le registre
dinstruction IR est prsent chaque tage du pipeline. En effet, lopration effectuer chaque tage
dpend de linstruction en cours. Cette multiplication de certains lments est le prix payer pour
lexcution simultane de plusieurs instructions.

Le tableau ci-dessous reprsente lexcution dun programme pendant quelques cycles dhorloge.
Chacune des instructions commence son excution un cycle aprs linstruction prcdente et passe par
les cinq tapes dexcution pendant cinq cycles conscutifs.

Programme Cycles dhorloge


1 2 3 4 5 6 7 8 9 10
Inst. n 1 IF ID IE MA WB
Inst. n 2 IF ID IE MA WB
Inst. n 3 IF ID IE MA WB
Inst. n 4 IF ID IE MA WB
Inst. n 5 IF ID IE MA WB
Inst. n 6 IF ID IE MA WB

15.3 Ralisation du pipeline


Le pipeline est ralis comme la figure ci-dessous.

- 116 -
Pipeline 15.4 Alas

Pipeline

15.4 Alas
Le bon fonctionnement du pipeline peut tre perturb par plusieurs vnements appels alas (pipeline
hazard en anglais). Ces vnements sont classs en trois catgories.

alas structurels
Ce type de problmes survient lorsque deux instructions dans des tages diffrents du pipeline
ncessitent la mme ressource.

- 117 -
15.4.1 Alas structurels Olivier Carton

alas de donnes
Ce type de problmes survient lorsquune instruction ncessite une donne qui na pas encore t
calcule par une instruction prcdente. Ceci provient du fait que les instructions lisent leurs
arguments dans les premiers tages du pipeline alors quelles produisent leur rsultat dans les
derniers tages.
alas de contrle
Ce type de problmes survient ds quune instruction de branchement est excute. Si le
branchement est effectu, les instructions qui suivent dans le pipeline ne doivent pas tre
excute. Ceci provient du fait que la nouvelle adresse est calcule alors que les instructions qui
suivent ont dj t charges

La solution gnrale pour rsoudre un ala est de bloquer linstruction qui pose problme et toutes
celles qui suivent dans le pipeline jusqu ce que le problme se rsolve. On voit alors apparatre des
bulles dans le pipeline. De manire pratique, la bulle correspond lexcution de linstruction NOP qui
ne fait rien.

Programme Cycles dhorloge


1 2 3 4 5 6 7 8 9 10 11 12
Inst. n 1 IF ID IE MA WB
Inst. n 2 IF ID IE MA WB
Inst. n 3 IF ID Bulle IE MA WB
Inst. n 4 IF Bulle ID IE MA WB
Inst. n 5 IF ID IE MA WB
Inst. n 6 IF ID IE MA WB

15.4.1 Alas structurels


Considrons par exemple le morceau de code suivant.
LDR R7,R6,0
ADD R6,R6,1
ADD R0,R0,1
ADD R1,R1,1

Le droulement de lexcution des quatre premires instructions dans le pipeline devrait tre le
suivant.

Programme Cycles dhorloge


1 2 3 4 5 6 7 8
LDR R7,R6,0 IF ID IE MA WB
ADD R6,R6,1 IF ID IE MA WB
ADD R0,R0,1 IF ID IE MA WB
ADD R1,R1,1 IF ID IE MA WB

- 118 -
Pipeline 15.4.2 Alas de donnes

Ltape MA (accs mmoire) de linstruction LDR R7,R6,0 a lieu en mme temps que ltape IF
(chargement de linstruction) de linstruction ADD R1,R1,1. Ces deux tapes ncessitent
simultanment laccs la mmoire. Il sagit dun ala structurel. Comme cela est impossible,
linstruction ADD R1,R1,1 et celles qui suivent sont retardes dun cycle.

Programme Cycles dhorloge


1 2 3 4 5 6 7 8 9 10 11
LDR R7,R6,0 IF ID IE MA WB
ADD R6,R6,1 IF ID IE MA WB
ADD R0,R0,1 IF ID IE MA WB
ADD R1,R1,1 IF ID IE MA WB
Inst. n 5 IF ID IE MA WB
Inst. n 6 IF ID IE MA WB

Le conflit daccs la mmoire se produit chaque fois quune instruction de chargement ou de


rangement est excute. Celle-ci rentre systmatiquement en conflit avec le chargement dune
instruction qui a lieu chaque cycle dhorloge. Ce problme est gnralement rsolu en sparant la
mmoire o se trouvent les instructions de celle o se trouvent les donnes. Ceci est ralis au niveau
des caches de niveau 1. Le micro-processeur doit alors avoir deux bus distincts pour accder
simultanment aux deux caches.

Comme le micro-processeur LC-3 est trs simple, les seuls alas structurels possibles sont ceux ds
des accs simultans la mmoire. Les registres sont utiliss aux tapes ID (dcodage) et WB
(rangement du rsultat) mais les premiers accs sont en lecture et les seconds en criture. Ceci ne
provoque pas dala.

15.4.2 Alas de donnes


Considrons le morceau de code suivant.
ADD R1,R1,1
ADD R0,R1,R2

Le droulement de lexcution de ces deux instructions dans le pipeline devrait tre le suivant.

Programme Cycles dhorloge


1 2 3 4 5 6
ADD R1,R1,1 IF ID IE MA WB
ADD R2,R1,R0 IF ID IE MA WB

Le problme est que le rsultat de la premire instruction est crit dans le registre R1 aprs la lecture
de ce mme registre par la seconde instruction. La valeur utilise par la seconde instruction est alors
errone.

Le rsultat de la premire instruction est disponible ds la fin de ltape IE (excution de linstruction)


de celle-ci. Il est seulement utilis ltape IE de la seconde instruction. Il suffit alors de le fournir en
entre de ladditionneur la place de la valeur lue dans R1 par la seconde instruction. Ceci est ralis

- 119 -
15.4.2 Alas de donnes Olivier Carton

en ajoutant un chemin de donnes.

Programme Cycles dhorloge


1 2 3 4 5 6
ADD R1,R1,1 IF ID IE MA WB
ADD R2,R1,R0 IF ID IE MA WB

Considrons un autre morceau de code assez semblable.


LDR R1,R6,0
ADD R0,R1,R2

Le droulement de lexcution de ces deux instructions dans le pipeline devrait tre le suivant.

Programme Cycles dhorloge


1 2 3 4 5 6
LDR R1,R6,0 IF ID IE MA WB
ADD R2,R1,R0 IF ID IE MA WB

Dans cet exemple encore, le rsultat de la premire instruction est crit dans le registre R1 aprs la
lecture de ce mme registre par la seconde instruction. Par contre, le rsultat nest pas disponible avant
ltape MA (accs mmoire) de la premire instruction. Comme cette tape a lieu aprs ltape IE de la
seconde instruction, il ne suffit pas dajouter un chemin de donnes pour faire disparatre lala. Il faut
en outre retarder la seconde instruction. Ceci introduit une bulle dans le pipeline.

Programme Cycles dhorloge


1 2 3 4 5 6 7 8 9
LDR R1,R6,0 IF ID IE MA WB
ADD R2,R1,R0 IF ID IE MA WB
Inst. n 3 IF ID IE MA WB
Inst. n 4 IF ID IE MA WB

15.4.2.1 Optimisation du code par le compilateur


Considrons le morceau de programme suivant crit dans un langage comme C.
x = x1 + x2;
y = y1 + y2;

La compilation de ce morceau de code pourrait produire les instructions suivantes o x, x1, , y2


dsignent alors les emplacements mmoire rservs ces variables.

- 120 -
Pipeline 15.4.3 Alas de branchement

LD R1,x1
LD R2,x2
ADD R0,R1,R2
ST R0,x
LD R1,y1
LD R2,y2
ADD R0,R1,R2
ST R0,y

Lexcution de ces instructions provoque des alas de donnes entre les instructions de chargement et
les instructions daddition. Ces alas introduisent des bulles dans le pipeline. Ces bulles peuvent tre
vites si le compilateur ordonne judicieusement les instructions comme dans le code ci-dessous. Plus
de registres sont alors ncessaires.
LD R1,x1
LD R2,x2
LD R3,y1
ADD R0,R1,R2
LD R4,y2
ST R0,x
ADD R0,R3,R4
ST R0,y

15.4.3 Alas de branchement


Lors de lexcution dune instruction de branchement conditionnel, on dit que le branchement est pris
si la condition est vrifie et que le programme se poursuit effectivement la nouvelle adresse. Un
branchement sans condition est toujours pris.

Lorsquun branchement est pris, ladresse de celui-ci est calcule ltape IE (excution de
linstruction) et range dans le registre PC ltape WB (rangement du rsultat). Toutes les
instructions qui suivent linstruction de branchement ne doivent pas tre excutes. Au niveau du
pipeline, on obtient le diagramme dexcution suivant.

Programme Cycles dhorloge


1 2 3 4 5 6 7 8 9 10 11 12
Branchement IF ID IE MA WB
Inst. suivante n 1 IF ID IE
Inst. suivante n 2 IF ID
Inst. suivante n 3 IF
Inst. cible n 1 IF ID IE MA WB
Inst. cible n 2 IF ID IE MA WB
Inst. cible n 3 IF ID IE MA WB

On constate que lexcution dun branchement pris dgrade notablement la performance du pipeline
puisque quatre cycles sont perdus. Comme les branchements constituent en gnral 20 30% des
instructions excutes par un programme, il est primordial damliorer leur excution.

- 121 -
15.4.3 Alas de branchement Olivier Carton

Dans le cas du micro-processeur LC-3, les instructions de branchement sont relativement simples. Une
faon simple doptimiser les branchements est de ne pas leur faire suivre toutes les tapes du pipeline
afin que la nouvelle adresse soit crite le plus tt possible dans le registre PC.

Pour les branchements conditionnels, la condition ne dpend que des indicateurs n, z et p et du code de
linstruction. Cette condition peut donc tre calcule ltape ID (dcodage de linstruction). De
mme, ladresse du branchement est soit le contenu dun registre soit la somme de PC et dun offset.
Dans les deux cas, cette valeur peut tre rendue disponible la fin de ltape ID. Le prix payer est
lajout dun nouvel additionneur ddi ce calcul. La nouvelle adresse est alors crite dans le registre
PC la fin de ltape ID.

Le diagramme prcdent devient alors le diagramme ci-dessous qui montre quil ne reste plus quun
seul cycle dhorloge de perdu.

Programme Cycles dhorloge


1 2 3 4 5 6 7 8 9
Branchement IF ID
Inst. suivante n 1 IF
Inst. cible n 1 IF ID IE MA WB
Inst. cible n 2 IF ID IE MA WB
Inst. cible n 3 IF ID IE MA WB

- 122 -
Mmoire virtuelle 16 Mmoire virtuelle

16 Mmoire virtuelle
16.1 Principe
Lors de la compilation dun programme crit dans un langage de haut niveau, toutes les rfrences
des variables locales ou globales sont transformes en des rfrences des emplacements mmoire
allous ces variables. Les variables globales sont gnralement alloues dans la zone des donnes
alors que les variables locales sont plutt alloues sur la pile. Les pointeurs de certains langages
comme C ou C++ ou les rfrences de Java sont aussi des adresses qui sont manipules de manire
explicites.

Dans un ordinateur sans mmoire virtuelle, les adresses manipules implicitement ou explicitement
par les programmes correspondent aux adresses relles des donnes en mmoire. Le principe de
mmoire virtuelle est de sparer les adresses manipules par les programmes et les adresses relles des
donnes en mmoire. Les adresses manipules par les programmes sont appeles adresses virtuelles et
les adresses des donnes en mmoire sont appeles adresses physiques.

Chaque programme dispose dun espace dadressage virtuel constitu de toutes les adresses virtuelles.
Pour que les programmes fonctionnent correctement, il doit y avoir une correspondance entre les
adresses virtuelles et les adresses physiques. Cette correspondance est assure conjointement dune
part au niveau matriel par un circuit adjoint au processeur appel MMU (Memory Management Unit)
et dautre part au niveau logiciel par le systme dexploitation. Dans les micro-processeurs rcents, ce
circuit MMU est souvent intgr au processeur.

16.2 Fonctionnement
Lespace dadressage virtuel de chaque programme ainsi que lespace mmoire sont diviss en blocs
appels pages de mme taille. Cette taille est trs souvent de lordre 4 Ko mais peut aussi tre de 8 ou
16 Ko sur des micro-processeurs 64 bits. Un bloc de lespace dadressage virtuel est appel page
virtuelle et un bloc de lespace mmoire est appel page physique. Larticle wikipedia utilise les
termes page et frame. Pour chaque page virtuelle utilise par un programme correspond une page
physique. Le systme maintient pour chaque programme une table de correspondance entre les pages
virtuelles et les pages physiques. Cette table est appele table des pages. Elle est bien sr propre
chaque programme. Deux programmes fonctionnant simultanment peuvent utiliser la mme adresse
virtuelle, par exemple 0x1234, pour des donnes diffrentes qui doivent donc se trouver des adresses
physiques diffrentes.

- 123 -
16.3 Translation Lookaside Buffer Olivier Carton

Principe de la mmoire virtuelle

16.3 Translation Lookaside Buffer

Fonctionnement du Translation Lookaside Buffer

- 124 -
Mmoire virtuelle 16.4 Swap

16.4 Swap

Principe de la mmoire virtuelle avec swap

16.5 Table des pages hirarchique

- 125 -
16.6 Linux Olivier Carton

Table des pages hirarchique

Structure des entres (Dword) de la table des pages (80x86)

16.6 Linux
Cet article dveloppe entre autre lorganisation propre linux pour la mmoire virtuelle.

- 126 -
Caches mmoire 17 Caches mmoire

17 Caches mmoire
17.1 Hirarchie de mmoire
Un ordinateur dispose de diffrents types de mmoires qui se distinguent par leurs vitesses daccs.
Plus la mmoire est rapide plus elle cote cher et plus la quantit disponible sur lordinateur est
rduite. Les registres internes entiers ou flottants du micro-processeur constituent la mmoire
laquelle celui-ci accde le plus rapidement mais ils sont en nombre trs limit. Il y a ensuite la
mmoire vive, les disques durs puis les bandes qui sont trs lentes mais qui permettent de stocker des
quantits trs importantes de donnes. Les caches sont intermdiaires entre les registres internes du
micro-processeur et la mmoires vive. Ils sont faits de mmoire rapide mais ils sont de taille rduite
par rapport la mmoire centrale.

Hirarchie de mmoire

17.2 Principe
Quand il est question de vitesse daccs la mmoire, il faut distinguer la latence et le dbit. La
latence est le temps qui scoule entre la demande des donnes et larrive de la premire donne. Le
dbit mesure ensuite le flux de donnes transmises pendant le rgime stable cest--dire une fois la
latence coule. Pour un disque dur, le temps de latence est relativement long car la tte de lecture doit
tre positionne mcaniquement puis il faut encore attendre que le bon secteur se trouve sous la tte.

Depuis quelques temps, il sest creus un foss entre la vitesse des micro-processeurs et la vitesse des
mmoires dynamiques qui sont utilises comme mmoire centrale des ordinateurs. Les mmoires
SDRAM augmentent le dbit mais rduisent peu la latence. Pour viter que le micro-processeur perde
du temps attendre les donnes de la mmoire, des caches mmoire forms de mmoires statiques
plus rapides sont intercals entre le micro-processeur et la mmoire centrale. Le but est semblable
celui des caches disques permettant dacclrer les accs aux disques durs.

- 127 -
17.3 Fonctionnement Olivier Carton

Principe du cache

Le bon fonctionnement des caches est bas sur le principe de localit qui dit que le code et les donnes
des programmes ne sont pas utilises de manire uniforme. On constate souvent que 10% du code dun
programme contribue 90% des instructions excutes. On distingue deux types de localit. La
localit temporelle indique que des lments auxquels on a eu accs rcemment seront probablement
utiliss dans un futur proche. La localit spatiale indique que des lments proches ont tendances
tre rfrencs des instants proches.

17.3 Fonctionnement
Le cache contient des copies de donnes qui sont en mmoire centrale. Avant tout accs la mmoire,
le processeur vrifie si les donnes ne sont pas prsentes dans le cache. Auquel cas, le processeur
utilise les donnes contenues dans le cache et naccde pas la mmoire. Sinon, il est ncessaire
daller chercher les donnes en mmoire centrale.

17.3.1 Organisation
Le cache est organis par lignes. Chaque ligne contient une portion de 8 512 octets des donnes en
mmoires et une tiquette (tag en anglais) qui est ladresse de ces donnes en mmoire. Lorsque le
micro-processeur veut accder la mmoire, il compare ladresse avec les tiquettes des lignes du
cache. Sil trouve ladresse parmi les tiquettes, le micro-processeur utilise directement les donnes du
cache. On parle alors de succs de cache. Sinon on parle de dfaut de cache ou dchec de cache
(cache miss).

Organisation du cache

- 128 -
Caches mmoire 17.4 Associativit

17.3.2 Dfauts de cache


La rponse un dfaut de cache dpend de la nature de laccs aux donnes. Dans le cas dune lecture,
les donnes sont charges de la mmoire centrale dans le cache puis envoyes au micro-processeur. Ce
chargement ncessite de librer au pralable une ligne du cache pour y placer les nouvelles donnes.
Le choix de la ligne librer est contrl par la politique de remplacement. Le chargement dans le
cache des donnes partir de la mmoire centrale implique un dlai puisque cette dernire est
beaucoup plus lente que le cache. Ce dlai est parfois augment par le fait quil faille copier en
mmoire le contenu de la ligne libre.

Dans le cas dun dfaut de cache lors dune criture, deux techniques sont utilises. La premire
technique est de faire comme pour une lecture en chargeant les donnes dans le cache puis de laisser le
processeur crire dans le cache. La seconde technique est dcrire directement les donnes en
mmoire. Lide est que lors dune criture, le processeur na pas besoin dattendre que celle-ci soit
termine pour continuer travailler. Dans ce cas, les critures sont mises en attentes dans un buffer
afin de permettre ces critures de seffectuer sans ralentir le processeur mme en cas de plusieurs
critures conscutives.

17.3.3 Politiques dcriture


Il existe plusieurs faons appeles politiques dcriture de grer les critures dans les caches. La
politique appele write-through consiste rpercuter en mmoire centrale chaque criture dans le
cache. Chaque criture dans le cache provoque alors une criture en mmoire centrale. loppos, la
politique write-back retarde au maximum les critures en mmoire centrale. Les donnes qui ont t
crites dans le cache sont crites en mmoire centrale au moment o la ligne qui contient ces donnes
est libre. Pour savoir si cette criture est ncessaire, chaque ligne contient un bit appel dirty bit qui
indique sil y a eu au moins une criture dans cette ligne.

Il existe aussi des politiques intermdiaires. Dans le cas de la politique write-through, les critures
faire peuvent tre mises en attente temporairement dans une file. Plusieurs critures conscutives la
mme adresse peuvent ainsi tre rpercutes par une seule criture en mmoire. Ce mcanisme rduit
les changes avec la mmoire centrale. Dans le cas dune politique write-back, le cache peut anticiper
lcriture en mmoire de certaines lignes modifies du cache. Il profite de priodes sans change avec
la mmoire pour crire certaines lignes dont le dirty bit est positionn. Cette technique permet dviter
lcriture de la ligne au moment celle-ci est libre.

17.4 Associativit
Un lment crucial de lefficacit du cache est de retrouver rapidement si des donnes une adresse
mmoire sont dj dans le cache. Afin dacclrer cette recherche, le nombre de lignes o peuvent tre
mises les donnes une adresse mmoire fixe est souvent rduit. Ce nombre ne dpend pas de
ladresse et il est appel lassociativit du cache. Lorsque ce nombre est rduit 1, cest--dire que les
donnes de chaque adresse peuvent tre mises dans une seule ligne du cache, on parle de cache direct.
Si au contraire lassociativit est gale au nombre de ligne du cache, cest--dire que chaque donne
peut tre mise dans nimporte quelle ligne du cache, le cache est dit compltement associatif. Si
lassociativit est un entier n, on parle de cache n-associatif (n-way en anglais). Les caches sont trs
souvent directs, 2-, 3- ou 4-associatifs mais rarement plus. Le cache de niveau 1 de lAthlon est par
exemple 2-associatif.

- 129 -
17.4.1 Caches directs Olivier Carton

17.4.1 Caches directs


Dans le cas des caches directs, la ligne o sont places les donnes une adresse sont gnralement
dtermins par des bits de poids faible de ladresse. Cette approche a plusieurs avantages. Dune part
le numro de la ligne est trs facile dterminer partir de ladresse. Dautre part, les bits utiliss pour
dterminer la lignes nont pas tre stocker dans ltiquette, ce qui offre un gains de quelques bits.

Soit un cache direct compos de 256 lignes contenant chacune 16 octets. Comme chaque ligne contient
16 octets, les 4 bits de poids faible de chaque adresse servent uniquement donner la position (offset)
des donnes dans la ligne. Comme le cache a 256 lignes, les 8 bits suivants dterminent la ligne o les
donnes doivent tre places.

Cache direct

Lavantage des caches directs est de simplifier au maximum la recherche des donnes dans le cache. Il
suffit en effet de comparer ltiquette de la ligne correspondante avec une partie de ladresse. Comme
la ligne est unique, il est mme possible de commencer la lecture du cache pendant la comparaison de
ltiquette avec ladresse. Si cette comparaison rvle un dfaut de cache, cette lecture anticipe du
cache est annule.

Les caches directs souffrent par contre dun problme. Si un programme utilise simultanment deux
parties de la mmoire qui doivent aller dans la mme ligne de cache, il peut se produire de nombreux
dfauts de cache.

- 130 -
Caches mmoire 17.5 Politiques de remplacement

17.4.2 Caches n-associatifs


Dans le cas des caches n-associatifs, lorganisation du cache est similaires aux caches directs.
chaque adresse correspond n lignes conscutives du cache au lieu dune. Lindice de la premire ligne
est encore dtermin par des bits de poids faible de ladresse. On appelle gnralement ensemble les
blocs de mmoire ayant mme indice.

Pour n gal 2 ou 4, un cache n-associatif se rvle presquaussi performant quun cache direct ayant
2 ou 4 fois plus de mmoire. Par contre, au del de 8, le cache est pnalis par le temps pris par la
recherche des donnes dans le cache puisquil faut comparer une partie de ladresse avec n tiquettes.
On remarque en outre que les caches compltement associatifs ont des performances comparables aux
caches 8-associatifs.

17.5 Politiques de remplacement


Lorsque le cache nest pas direct et que survient un dfaut de cache, les donnes doivent tre places
dans une des lignes du cache dtermines par ladresse. Il reste alors choisir quelle ligne librer pour
les nouvelles donnes. Il existe plusieurs faons de procder ce choix qui sont appeles politiques de
remplacement. Lobjectif de ces politiques est de minimiser le nombre de dfauts de cache, en
essayant de prvoir au mieux les donnes qui seront utilises par le micro-processeur.

Ces diffrentes politiques de remplacement sont bien sr un compromis entre leur performance et le
surcot de calculs quelles impliquent. Comme ces calculs doivent tre raliss au niveau des circuits
du cache, ils sont ncessairement simples. Les politiques favorisent la libration dune ligne o il ny a
eu aucune criture. Ce choix conomise lcriture en mmoire centrale des donnes contenues dans la
ligne libre.

Les deux politiques les plus couramment utilises sont le tirage alatoire et la politique dite du moins
rcemment utilis (Least Recently Used). Le tirage alatoire consiste choisir au hasard une des lignes
possibles. Lavantage de cette politique est de minimiser le surcot de calcul tout en donnant des
performances raisonnables. La seconde politique choisit la ligne laquelle le dernier accs est le plus
ancien. Lide sous-jacente est que cette ligne a une probabilit plus faible dtre utilise lavenir. En
particulier, les donnes qui ne sont plus utilises par le micro-processeur disparaissent du cache. En
fait, ce sont le plus souvent des approximations de cette politique qui sont utilises en pratique.

17.6 Dfauts de cache


Lorsquil y a trop de dfauts de cache, les performances seffondrent. Le cache fonctionne alors alors
la vitesse de la mmoire centrale ou mme plus lentement en raison des surcots de traitement.
Beaucoup de recherche a t consacr la rduction du nombre de dfauts de cache. Les dfauts de
caches sont gnralement classs en trois catgories.

dfauts de premire rfrence (compulsory misses)


la premire rfrence un bloc, celui-ci doit tre charg dans le cache. Ces dfaut sont en
quelque sorte invitables.
dfauts de capacit (capacity misses)
Ces dfauts sont d au fait que le cache ne peut pas contenir tous les blocs rfrencs pendant
lexcution du programme. Le nombre de ces dfauts peut tre rduit en augmentant la taille du
cache.

- 131 -
17.7 Hirarchie de cache Olivier Carton

dfauts de conflit (conflict misses)


Ces dfauts interviennent en plus des deux prcdents types. Un bloc a pu tre charg puis enlev
du cache car dautres blocs avec le mme indice ont t chargs. Le nombre de ces dfauts peut
tre rduit en augmentant lassociativit du cache.

17.7 Hirarchie de cache


Pour un meilleur compromis entre le prix de la mmoire cache et son efficacit, on utilise plusieurs
niveaux de cache. On parle alors de hirarchie de cache. La plupart des ordinateurs performants
utilisent 3 4 niveaux de cache. Le cache de niveau 1 est le plus prs du micro-processeur. Il est petit
mais fait de mmoire trs rapide. Le cache de niveau 2 est de taille plus grande mais fait de mmoire
moins rapide. Le cache de niveau 3 est encore plus grand mais fait de mmoire encore mois rapide. Le
cache de niveau 1 est directement intgr au processeur. Le cache de niveau 2 est souvent dans le
mme botier que le micro-processeur ce qui permet un large bus entre les deux. Le bus de niveau 3 est
en gnral sur la carte mre du processeur.

Hirarchie de caches

17.8 Sparation des caches


Le cache de niveau 1 est souvent organis en deux caches distincts, un pour les instructions et un autre
pour les donnes. Deux bus permettent alors au micro-processeur daccder simultanment aux deux
caches. Dans le cas dune architecture avec un pipeline, cette organisation est indispensable pour viter
certains alas structurels. En outre, les accs aux instructions ou aux donnes se comportent de
manire assez diffrente. La sparation des caches autorise des optimisations diffrentes pour les deux
caches.

La figure ci-dessous prsente larchitecture trois niveaux de caches du micro-processeur Alpha


21164.

- 132 -
Caches mmoire 17.8 Sparation des caches

Hirarchie de caches du micro-processeur Alpha 21164

- 133 -
18 Bibliographie Olivier Carton

18 Bibliographie
1. J. L. Hennessy and D. A. Patterson, Architecture des machines. Thomson Publishing, 1996, ISBN
2-84180-022-9.
2. W. Stallings, Organisation et architectures des machines. Pearson Education, 2003, ISBN
2-7440-7007-6.
3. Y. N. Patt and S. J. Patel, Introduction to computing systems: from bits and gates to C and
beyond. McGraw Hill, 2004, ISBN 0-07-121503-4.
4. A. Tanenbaum, Architecture de lordinateur. Pearson Education, 2005, ISBN 2-7440-7122-6.
5. B. Goossens, Architecture et micro-architecture des processeurs. Springer, 2002, ISBN
2-287-59761-1.
6. D. Harris and S. Harris, Digital design and computer architecture. Morgan Kaufmann Publishers,
2007, ISBN 0-123704979.

- 134 -
Bibliographie Table des matires

Table des matires


Circuits et architecture des ordinateurs . . . . . . . . . . . . 1
1 Circuits et architecture des ordinateurs en M1 . . . . . . . . . . 1
Historique . . . . . . . . . . . . . . . . . . . 3
2 Historique . . . . . . . . . . . . . . . . . . 3
2.1 Historique gnral . . . . . . . . . . . . . . . 3
2.2 Historique des micro-processeurs . . . . . . . . . . . . 4
Reprsentation des donnes . . . . . . . . . . . . . . . 7
3 Reprsentation des donnes . . . . . . . . . . . . . . 7
3.1 Entiers . . . . . . . . . . . . . . . . . . 7
3.2 Nombres en virgule fixe . . . . . . . . . . . . . . 13
3.3 Nombres en virgule flottante . . . . . . . . . . . . . 13
3.4 Caractres . . . . . . . . . . . . . . . . . 15
Transistors et portes logiques . . . . . . . . . . . . . . 16
4 Transistors et portes logiques . . . . . . . . . . . . . . 16
4.1 Semi-conducteurs . . . . . . . . . . . . . . . 16
4.2 Diode . . . . . . . . . . . . . . . . . . 18
4.3 Transistors . . . . . . . . . . . . . . . . . 19
4.4 Conventions dans les schmas . . . . . . . . . . . . . 21
4.5 Portes not, nand et nor . . . . . . . . . . . . . . 21
4.6 Portes or et and . . . . . . . . . . . . . . . . 23
4.7 Portes nand et nor trois entres . . . . . . . . . . . . 24
4.8 Portes and et or entres multiples . . . . . . . . . . . . 25
4.9 Porte xor . . . . . . . . . . . . . . . . . 26
Circuits lmentaires . . . . . . . . . . . . . . . . 28
5 Circuits lmentaires . . . . . . . . . . . . . . . . 28
5.1 Dcodeurs . . . . . . . . . . . . . . . . . 28
5.2 Multiplexeurs . . . . . . . . . . . . . . . . 31
5.3 Construction de circuits . . . . . . . . . . . . . . 33
Additionneurs . . . . . . . . . . . . . . . . . . 38
6 Additionneurs . . . . . . . . . . . . . . . . . 38
6.1 Semi-additionneur . . . . . . . . . . . . . . . 38
6.2 Additionneur complet 1 bit . . . . . . . . . . . . . 38
6.3 Additionneur par propagation de retenue . . . . . . . . . . 40
6.4 Calcul des indicateurs . . . . . . . . . . . . . . 41
6.5 Additionneur par anticipation de retenue . . . . . . . . . . 41
6.6 Additionneur rcursif . . . . . . . . . . . . . . . 46
6.7 Additionneur hybride . . . . . . . . . . . . . . . 49
6.8 Additionneur par slection de retenue . . . . . . . . . . . 50
6.9 Soustracteur . . . . . . . . . . . . . . . . . 51
Mmoires . . . . . . . . . . . . . . . . . . . 52
7 Mmoires . . . . . . . . . . . . . . . . . . 52
7.1 Mmoire dynamique . . . . . . . . . . . . . . . 52
7.2 Mmoire statique . . . . . . . . . . . . . . . 53
7.3 Organisation de la mmoire . . . . . . . . . . . . . 55
7.4 Mmoires associatives . . . . . . . . . . . . . . 58
Circuits squentiels . . . . . . . . . . . . . . . . . 60
8 Circuits squentiels . . . . . . . . . . . . . . . . 60
8.1 Principe . . . . . . . . . . . . . . . . . . 60

-i-
Table des matires Olivier Carton

8.2 Horloge . . . . . . . . . . . . . . . . . . 60
.
8.3 Exemple . . . . . . . . . . . . . . . . . . 60
.
8.4 Automate . . . . . . . . . . . . . . . . . . 61
.
Architecture dun micro-processeur . . . . . . . . . . . . . 62
.
9 Architecture dun micro-processeur . . . . . . . . . . . . . 62
.
9.1 Modle de von Neumann . . . . . . . . . . . . . . 62
.
9.2 Organisation interne des composants . . . . . . . . . . . . 62
.
9.3 Instructions . . . . . . . . . . . . . . . . . 64
.
9.4 Cycle dexcution . . . . . . . . . . . . . . . . 64
.
9.5 Registres PC et IR . . . . . . . . . . . . . . . . 64
.
9.6 Codage des instructions . . . . . . . . . . . . . . 64
.
Micro-processeur LC-3 . . . . . . . . . . . . . . . . 65
.
10 Micro-processeur LC-3 . . . . . . . . . . . . . . . 65
.
10.1 Registres . . . . . . . . . . . . . . . . . 65
.
10.2 Indicateurs N, Z et P . . . . . . . . . . . . . . . 66
.
10.3 Mmoire . . . . . . . . . . . . . . . . . 66
.
10.4 Instructions . . . . . . . . . . . . . . . . . 66
.
10.5 Codage des instructions . . . . . . . . . . . . . . 73
.
10.6 Schma interne du LC-3 . . . . . . . . . . . . . . 75
.
Programmation du micro-processeur LC-3 . . . . . . . . . . . . 77
.
11 Programmation du LC-3 . . . . . . . . . . . . . . . 77
.
11.1 Programmation en assembleur . . . . . . . . . . . . . 77
.
11.2 Exemples de programmes . . . . . . . . . . . . . . 79
.
Les sous-routines et la pile . . . . . . . . . . . . . . . . 86
.
12 Les sous-routines et la pile . . . . . . . . . . . . . . . 86
.
12.1 Instruction JMP . . . . . . . . . . . . . . . . 86
.
12.2 Sous-routines . . . . . . . . . . . . . . . . 86
.
12.3 Sauvegarde des registres . . . . . . . . . . . . . . 87
.
12.4 Programmation . . . . . . . . . . . . . . . . 91
.
12.5 Comparaison avec dautres micro-processeurs . . . . . . . . . 93
.
12.6 Appels systme . . . . . . . . . . . . . . . . 93
.
12.7 Interruptions . . . . . . . . . . . . . . . . . 94
.
Entre/Sorties . . . . . . . . . . . . . . . . . . 98
.
13 Entres/Sorties . . . . . . . . . . . . . . . . . 98
.
13.1 Adressage des circuits dentres/sorties . . . . . . . . . . . 98
.
13.2 Scrutation des circuits dentres/sorties . . . . . . . . . . . 99
.
13.3 Entres/Sorties du LC-3 . . . . . . . . . . . . . . 99
.
Autres architectures . . . . . . . . . . . . . . . . . 102
.
14 Autres architectures . . . . . . . . . . . . . . . . 102
.
Processeurs 80x86 . . . . . . . . . . . . . . . . . . 103
.
14.1 Processeurs 80x86 . . . . . . . . . . . . . . . 103
.
Comparaison CISC/RISC . . . . . . . . . . . . . . . . 107
.
14.2 Comparaison CISC/RISC . . . . . . . . . . . . . . 107
.
Architecture IA-64 . . . . . . . . . . . . . . . . . 110
.
14.3 Architecture IA-64 . . . . . . . . . . . . . . . 110
.
Pipeline . . . . . . . . . . . . . . . . . . . . 115
.
15 Pipeline . . . . . . . . . . . . . . . . . . . 115
.
15.1 Principe . . . . . . . . . . . . . . . . . . 115
.
15.2 tages du pipeline . . . . . . . . . . . . . . . 115
.
15.3 Ralisation du pipeline . . . . . . . . . . . . . . 116
.

- ii -
Bibliographie Table des matires

15.4 Alas . . . . . . . . . . . . . . . . . . 117


.
Mmoire virtuelle . . . . . . . . . . . . . . . . . . 123
.
16 Mmoire virtuelle . . . . . . . . . . . . . . . . 123
.
16.1 Principe . . . . . . . . . . . . . . . . . . 123
.
16.2 Fonctionnement . . . . . . . . . . . . . . . . 123
.
16.3 Translation Lookaside Buffer . . . . . . . . . . . . . 124
.
16.4 Swap . . . . . . . . . . . . . . . . . . 125
.
16.5 Table des pages hirarchique . . . . . . . . . . . . . 125
.
16.6 Linux . . . . . . . . . . . . . . . . . . 126
.
Caches mmoire . . . . . . . . . . . . . . . . . . 127
.
17 Caches mmoire . . . . . . . . . . . . . . . . . 127
.
17.1 Hirarchie de mmoire . . . . . . . . . . . . . . 127
.
17.2 Principe . . . . . . . . . . . . . . . . . . 127
.
17.3 Fonctionnement . . . . . . . . . . . . . . . . 128
.
17.4 Associativit . . . . . . . . . . . . . . . . . 129
.
17.5 Politiques de remplacement . . . . . . . . . . . . . 131
.
17.6 Dfauts de cache . . . . . . . . . . . . . . . . 131
.
17.7 Hirarchie de cache . . . . . . . . . . . . . . . 132
.
17.8 Sparation des caches . . . . . . . . . . . . . . . 132
.
Bibliographie . . . . . . . . . . . . . . . . . . . 134
.
18 Bibliographie . . . . . . . . . . . . . . . . . 134
.

- iii -