Une introduction à l'architecture des ordinateurs

Béatrice Bérard, Jean Goubault-Larrecq
LSV/UMR 8643, CNRS, ENS Cachan & INRIA Futurs projet SECSI
61 avenue du président-Wilson, F-94235 Cachan Cedex
goubault@lsv.ens-cachan.fr
Phone: +33-1 47 40 75 68   Fax: +33-1 47 40 75 21


Ce document est la retranscription de notes de cours par Béatrice Bérard sur l'architecture des ordinateurs, datant de 1993. Ces notes s'inspiraient du livre d'A. Tannenbaum, “architecture des micro-ordinateurs”. Ce cours présente les choses de façon suffisamment simple pour qu'on puisse se faire une idée raisonnablement claire de la façon dont fonctionnent les ordinateurs, depuis les circuits électroniques jusqu'à la micro-programmation.

Les processeurs aujourd'hui sont infiniment plus compliqués, les mémoires vives ne fonctionnent plus à base de flip-flops, soyez prévenus. Mais ceci reste une excellente introduction. Je mettrai quelques commentaires en notes en bas de page au sujet de certains points que je souhaute préciser, précédées de “[JGL]”.

Je remercie Béatrice de m'avoir fourni ses notes de cours. Toute faute ou omission est bien sûr de ma responsabilité.

– Jean Goubault-Larrecq, Cachan, 30 septembre 2005.


1  Couche physique: circuits logiques

1.1  Portes logiques et algèbre de Boole

La forme la plus élémentaire de circuit est la porte logique. Son comportement est dit binaire car il est caractérisé par deux états: l'état 0, qui représente la valeur logique faux et l'état 1, qui représente la valeur logique vrai.

Les constructeurs utilisent dans certains cas une logique dite positive: l'état 1 correspond à une tension comprise entre 2 et 5 volts (niveau haut) et l'état 0 à une tension comprise entre 0 et 1 volt (niveau bas). Dans d'autres cas, ils utilisent une logique dite négative où l'état 1 correspond au niveau bas, tandis que l'état 0 correspond au niveau haut1.

La transmission n'est pas instantanée: le délai de traversée d'une porte correspond au temps de propagation des signaux de l'entrée vers la sortie (de l'ordre de quelques nanosecondes pour la porte la plus simple2).

1.1.1  Porte NON

La porte logique la plus simple est celle qui réalise une inversion logique. Elle est symbolisée par:
Elle est construite à l'aide d'un transistor, selon deux techniques possibles: le transistor à jonctions (technologie dite bipolaire) ou le transistor à effet de champ (technologie dite unipolaire). Dans la première famille on trouve par exemple les circuits RTL (Resistor Transistor Logic), TTL (Transistor Transistor Logic), DTL (Diode Transistor Logic) ou encore ECL (Emitter Coupled Logic). La deuxième famille est celle des circuits MOS (Metal Oxyde Semiconductor) qui sont en général moins rapides, sauf les plus récents comme HMOS ou XMOS3.

Un transistor fonctionne comme un interrupteur4:

1.1.2  Porte NON-ET

La porte NON-ET est réalisée en reliant deux transistors en série, selon le schéma suivant:
Symbole logique de la porte NON-ET:
On vérifie facilement que la tension de sortie Vs est au niveau bas si et seulement si V1 et V2 sont au niveau haut.

1.1.3  Porte NON-OU

Sur le même principe, le montage de deux transistors en parallèle permet d'obtenir une porte NON-OU:
Sur le schéma précédent, on vérifie que Vs est au niveau bas si et seulement si l'une des deux tensions V1 ou V2 est au niveau haut.

Le symbole logique de cette porte est:
Ainsi, pour réaliser un OU (respectivement un ET), il faut relier un NON-OU avec un inverseur (respectivement un NON-ET avec un inverseur).

Ces portes sont utilisées pour construire des fonctions booléennes à variables booléennes, qui sont décrites soit par une table de vérité, soit en utilisant une notation fonctionnelle où le symbole + remplace OU, le point ou aucun symbole représente ET et une variable comme A surmontée d'une barre représente NON A.

Exemple 1   Construire la fonction f définie par f (A, B, C) = M, où M=1 si et seulement si au moins deux des variables valent 1.


Remarque 2   Avec une porte de type NON-OU (ou NON-ET), on peut réaliser n'importe quelle fonction booléenne.


On cherche souvent à réduire le nombre de portes, en utilisant les propriétés algébriques des opérations logiques, par exemple la distributivité de ET sur OU: A (B+C) = AB+AC.

En fait, on dispose de circuits qui réalisent directement des fonctions logiques complexes.

1.2  Principe des circuits logiques

Un circuit intégré est une plaquette de silicium sur laquelle sont intégrées les portes du circuit. La plaquette est encapsulée dans un boîtier avec sur les côtés des broches permettant les connexions électriques.

Ces circuits sont classés suivant la densité d'intégration, c'est-à-dire le nombre de portes ou transistors par circuits (ou par mm2):
SSI Small Scale Integration 1 à 10 portes par circuit
MSI Medium Scale Integration 10 à 100
LSI Large Scale Integration 100 à 100 000
VLSI Very Large Scale Integration plus de 100 000 et jusqu'à 1 million5


Exemple 3   Un circuit SSI dans un boîtier à 14 broches: circuit TTL 7400 de Texas Instruments.


Bien entendu, plus l'échelle d'intégration augmente, plus il y a de portes par rapport au nombre de broches. On distingue plusieurs catégories de circuits MSI qui vont être décrits dans les paragraphes suivants.

1.3  Les circuits combinatoires

Dans ces circuits, la sortie est une expression logique des valeurs d'entrée.

1.3.1  Multiplexeur

Un multiplexeur comporte 2n entrées, 1 sortie et n lignes de sélection. La configuration des n lignes de sélection fournit une valeur parmi les 2n entrées et connecte cette entrée à la sortie.

Par exemple, une conversion parallèle-série utilise un multiplexeur de la façon suivante: une information de 8 bits arrive sur les 8 lignes d'entrée appelées D0, D1, ..., D7. Sur les trois lignes de sélection A, B, C, on diffuse séquentiellement les valeurs binaires dans l'ordre 000=0 à 111=7, de sorte que les 8 bits du mot d'entrée sont transmis en série sur la ligne de sortie.

1.3.2  Décodeur

Un décodeur comprend n entrées et 2n sorties, la sortie activée correspondant à la configuration binaire du mot formé par les n entrées. Un tel circuit sert à sélectionner des adresses de la mémoire.

Un décodeur 3 vers 8 (n=3) est réalisé par:


Un tel décodeur est utilisé pour une mémoire de 8 mots. Pour une mémoire composée de 8 circuits de 8K chacun6, le circuit 0 contient les octets d'adresses 0 à 8 × 1 024−1 = 8 192−1 = 8 191, le numéro 1 de 8 192 à 16 383, etc. On sélectionne suivant les 3 bits de poids fort pour avoir le numéro de circuit.

1.3.3  Comparateur

Un comparateur à 2n entrées et 1 sortie, les 2n entrées formant deux mots de n bits: A et B. La sortie vaut 1 si le mot A=B, sinon7.

1.3.4  Circuits FPLA

Ce sont des réseaux logiques programmables (Field Programmable Logic Array) qui permettent de réaliser des fonctions lorsqu'elles sont sous la forme d'une somme de produits.

Considérons par exemple 20 broches dont 12 correspondent à des entrées et 6 à des sorties. Les 12 entrées sont inversées, ce qui fournit 24 variables internes. Ces 24 variables sont toutes connectées à 50 portes ET, ce qui donne 1 200 fusibles, au départ intacts.

Programmer le circuit consiste alors à détruire certains fusibles pour obtenir les produits de la fonction à programmer. Les 6 sorties proviennent de 6 portes OU qui reçoivent chacune les sorties des 50 portes ET. On obtient ainsi 300 fusibles dont certains sont détruits pour obtenir la somme des termes de la fonction.



1.4  Les circuits de calcul

1.4.1  Décaleur

Un décaleur est formé de (n+1) entrées D1, ..., Dn, C et de n sorties S1, ..., Sn et opère un décalage de 1 bit sur les entrées D1, ..., Dn. Si C=1, il s'agit d'un décalage à droite et si C=0, d'un décalage à gauche8.

1.4.2  Additionneur

Pour réaliser des additions de 2 mots de 16 bits, on utilise 16 additionneurs à 1 bit, reliés pour gérer la propagation éventuelle de retenues. Ces additionneurs sont eux-mêmes formées à l'aide de demi-additionneurs.

Ce demi-additionneur est donc constitué de deux portes, un OU exclusif pour le résultat et un ET pour la retenue:



Table de vérité:
A B S R
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1


Afin de permettre une liaison de plusieurs additionneurs en série, un additionneur doit avoir une retenue en entrée Re en plus de la retenue en sortie Rs:
A B Re S Rs
0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1


On peut vérifier que le circuit suivant réalise correctement l'additionneur.



En représentant les deux demi-additionneurs par des carrés contenant le signe +, on obtient une représentation simplifiée de l'additionneur 1 bit:



1.4.3  Unité arithmétique et logique

Exemple d'une UAL (Unité Arithmétique et Logique) à un bit qui réalise ET, OU, NON, SOMME9.



1.5  Circuits logiques à mémoire: les bascules

Appelés également circuits séquentiels ou flip-flops, les bascules mémorisent l'état antérieur des variables de sortie et permettent ainsi de mémoriser un bit.

1.5.1  Bascules RS (avec portes NON OU)

Ces circuits ont deux entrées: S (set) qui correspond à la mise à 1 et R (reset) qui correspond à la remise à 0. Ils ont également deux sorties: Q1 et Q2.

Une bascule doit en principe mémoriser celle des deux entrées R et S qui a été mise à 1 le plus récemment.



S R Q1 Q2  
0 0 0 1 E1
0 0 0 1 E'1
0 0 1 0 E'2
1 0 1 0 E2
1 1 0 0 inutilisé


Si S=0 et R=1, on vérifie qu'on passe dans l'état stable E1Q1=0 et Q2=1. À partir de l'état E1, si R passe à 0, on obtient S=0, R=0, Q1=0, Q2=1, donc pas de changement10.

À partir de ce même état, si S passe à 1, on arrive à un état stable E2: S=1, R=0, Q1=1, Q2=0. Si S repasse à 0, cet état est inchangé.

On remarque que si S=R=0, il est possible d'avoir soit Q1=1, Q2=0, soit l'inverse, ce qui conduit à n'utiliser que les états E1, E2, E'1, E'2, et pas R=S=1.

Le fonctionnement et les états de la bascule sont représentés par un automate:



En général, on représente Q1 et Q2 comme Q et non Q, car dans les états utiles, Q2 est la négation de Q1. Il suffit alors de se donner une sortie Q et la table de vérité d'une bascule décrit la valeur de l'état suivant en fonction de la valeur de l'état courant.

S R Qn+1 (état suivant)
0 1 0  
1 0 1  
0 0 Qn (état suivant=état précédent)
1 1 indéfini


1.5.2  Bascules RS (à horloges)

Quand H=0, R'=S'=0, il n'y a aucun changement d'état possible, quelles que soient les valeurs des entrées R et S. En revanche, quand H=1, R'=R et S'=S.



Le nouvel état Qn+1 est obtenu uniquement à l'issue d'un signal (H=1) d'horloge.

1.5.3  Bascules D

La bascule D est obtenue à partir de ce qui précède en utilisant une seule entrée D, avec S=D, R= non D.



Cette bascule fournit en Q la valeur de D jusqu'à la prochaine impulsion de l'horloge. Ce mécanisme lève l'ambiguïté puisqu'on n'a jamais R=S=1. Bien entendu, il y a encore d'autres bascules.

1.5.4  Bascules JK

Les bascules JK règlent aussi le problème de l'état indéterminé.



On a la table de transitions suivantes. L'état Q ne change que lorsque l'entrée d'horloge H est mise à 1.

J K Qn+1
0 0 Qn
0 1 1
1 0 0
1 1 non Qn


1.6  Structure d'une mémoire

En réunissant plusieurs bascules sur un même signal d'horloge, on peut fabriquer un circuit qui constitue un registre, d'où la possibilité de construire des mémoires11. Le problème est de minimiser le nombre de broches.

Exemple 4   Une mémoire de quatre mots de 3 bits chacun, M0, ..., M3 dans un boîtier à 14 broches, chaque mot de 3 bits étant formé à partir de 3 bascules12.
8 entrées: 3 sorties de données D0, D1, D2.

Les lectures et les écritures sont réalisées de la manière suivante:
Remarquons que AA1 et les entrées des quatre mots forment un décodeur.

Sur les lignes de sortie, on utilise des circuits qui jouent le rôle d'interrupteurs13 et comportent 3 états: 0, 1, et un état de haute impédance qui déconnecte le circuit lorsque la commande vaut 0. Circuit 3 états:
Si les 3 signaux RD, CS, OE sont à 1, les sorties sont activées, sinon elles sont déconnectées par les circuits trois états.
Ce schéma se généralise avec un nombre de mots égal à 2n en utilisant n lignes d'adresses A0, ..., An−1. La taille d'un mot correspond au nombre de bascules, au nombre d'entrées et au nombre de sorties.

La structure décrite ci-dessus concerne les mémoires statiques. Pour les mémoires dynamiques, la structure interne n'utilise pas des bascules mais des condensateurs14. La capacité est plus grande, mais la charge électrique baisse avec le temps, d'où la nécessité de rafraîchir. Il existe différentes variantes intermédiaires entre les mémoires dynamiques15 et les mémoires à lecture seulement (ROM, “read only memory”), programmables une seule fois à la fabrication16.

1.7  Microprocesseur

Il est relié aux mémoires et aux circuits d'entrée-sortie par des bus, c'est-à-dire des lignes groupées: au moins n lignes d'adresses dans le bus d'adresses pour 2n mots mémoire et p lignes de données dans le bus de données si les mots ont chacun p bits.

Exemple 5   Le microprocesseur Z8017: 16 lignes d'adresses A0, ..., A15 permettant d'adresser 64 Koctets18, des mots de 8 bits correspondant à 8 lignes de données D0, ..., D7, 13 lignes de commande.


Les bus de d'adresses et de données sont actifs au niveau haut (1), tandis que les signaux de commande sont actifs au niveau bas (0). Commandes:


2  Couche microprogrammée

Dans ce chapitre, on considère une mémoire centrale de 212 mots de 16 bits, comportant une pile d'exécution, reliée à un bus d'adresses à 12 lignes et à un bus de données à 16 lignes. On suppose qu'un programme en langage machine est chargé dans cette mémoire centrale.

Le microprogramme est un programme qui réside dans une mémoire locale du (micro) processeur: c'est un interpréteur qui décode et exécute une par une les instructions en langage machine19, en répétant le schéma général suivant: Avant de revoir le détail de ces opérations, nous décrivons la structure d'une micromachine et les micro-instructions.

2.1  Structure de la micromachine

La micromachine contient deux parties: le chemin des données et le bloc de contrôle. Voir la figure 1.



Figure 1: Une machine microprogrammée



2.1.1  Le chemin des données

Il comprend (voir la partie gauche de la figure 1):

2.1.2  Le bloc de contrôle

Il comprend (voir la partie droite de la figure 1):

2.2  Les micro-instructions

2.2.1  Structure d'une micro-instruction

Une micro-instruction est donc un mot de 32 bits comportant 13 champs:
La figure 2 montre quelques exemples de micro-instructions. La colonne de gauche indique de façon fonctionnelle (dans un langage de type Pascal) les opérations à effectuer et les colonnes suivantes contiennent les valeurs des bits de la micro-instruction correspondante.

  C B A ADDR
rad:=co; rd; 0 0 2 0 0 1 1 0 0 0 0 0 00
rd; 0 0 2 0 0 0 1 0 0 0 0 0 00
ri:=rdo; 1 0 2 0 0 0 0 0 1 3 0 0 00
co:=co+1; 0 0 0 0 0 0 0 0 1 0 6 0 00
rad:=ri; rdo:=ac; wr; 0 0 2 0 1 1 0 1 0 0 3 1 00
ual:=rit; if n goto 15; 0 1 2 0 0 0 0 0 0 0 0 4 15
ac:=inv(rdo); 1 0 3 0 0 0 0 0 1 1 0 0 00
rit:=decalg(rit); if n goto 25; 0 1 2 2 0 0 0 0 1 4 0 4 25
ual:=ac; if z goto 25; 0 2 2 0 0 0 0 0 0 0 0 1 22
ac:=bet(ri,amasq); goto 0; 0 3 1 0 0 0 0 0 1 1 8 3 00
pp:=pp-1; rd; 0 0 0 0 0 0 1 0 1 2 2 7 00
rit:=decalg(ri+ri); if n goto 69; 0 1 0 2 0 0 0 0 1 4 3 3 69


Figure 2: Quelques exemples de micro-instructions



Dans la dernière ligne du tableau, par exemple, les opérations sont
rit:=decalg(ri+ri); if n goto 69;
La micro-instruction associée comporte donc:

2.2.2  Exécution d'une micro-instruction

L'exécution est divisée en quatre étapes, correspondant chacune à un des quatre sous-cycles de l'horloge.

2.3  L'interprétation des instructions en langage machine

2.3.1  Les instructions du langage machine

Un ensemble d'instructions est représenté dans le tableau de la figure 3.

Binaire Symbole Instruction Opération
0000 xxxx xxxx xxxx LODD Chargement ac:=m[x]
    mode direct  
0001 xxxx xxxx xxxx STOD Rangement m[x]:=ac
    mode direct  
0010 xxxx xxxx xxxx ADDD Addition ac:=ac+m[x]
    mode direct  
0011 xxxx xxxx xxxx SUBD Soustraction ac:=acm[x]
    mode direct  
0100 xxxx xxxx xxxx JPOS Saut si >0 if (ac>0) co:=x
0101 xxxx xxxx xxxx JZER Saut si =0 if (ac=0) co:=x
0110 xxxx xxxx xxxx JUMP Saut co:=x
0111 xxxx xxxx xxxx LOCO Chargement ac:=x (0≤ x≤ 4 095)
    constante  
1000 xxxx xxxx xxxx LODL Chargement ac:=m[pp+x]
    mode local  
1001 xxxx xxxx xxxx STOL Rangement m[pp+x]:=ac
    mode local  
1010 xxxx xxxx xxxx ADDL Addition ac:=ac+m[pp+x]
    mode local  
1011 xxxx xxxx xxxx SUBL Addition ac:=acm[pp+x]
    mode local  
1100 xxxx xxxx xxxx JNEG Saut si <0 if (ac<0) co:=x
1101 xxxx xxxx xxxx JNZE Saut si ≠ 0 if (ac≠ 0) co:=x
1110 xxxx xxxx xxxx CALL Appel procédure pp:=pp−1; m[pp]:=co; co:=x
1111 0000 0000 0000 PSHI Empilement pp:=pp−1; m[pp]:=m[ac]
    indirect  
1111 0010 0000 0000 POPI Dépilement m[ac]:=m[pp]; pp:=pp+1
    indirect  
1111 0100 0000 0000 PUSH Empilement pp:=pp−1; m[pp]:=ac
1111 0110 0000 0000 POP Dépilement ac:=m[pp]; pp:=pp+1
    indirect  
1111 1000 0000 0000 RETN Retour co:=m[pp]; pp:=pp+1
1111 1010 0000 0000 SWAP Échange tmp:=ac; ac:=pp; pp:=tmp
    AC et pile  
1111 1100 yyyy yyyy INSP Incrémentation pp:=pp+y (0≤ y≤ 255)
    de PP  
1111 1110 yyyy yyyy DESP Décrémentation pp:=ppy (0≤ y≤ 255)
    de PP  


Figure 3: Instructions du langage machine



La première colonne de ce tableau contient le code binaire de l'instruction. Remarquons que les instructions sont rangées par ordre croissant suivant leur code. Ce code est en général divisé en deux parties, la première représentant l'opération proprement dite et la seconde une adresse de la mémoire centrale ou une constante. Dans la deuxième colonne figure le symbole correspondant, tandis que la troisième colonne contient le nom de l'instruction et la quatrième une description fonctionnelle de cette instruction dans un langage du type Pascal. Dans cette colonne, le mot de la mémoire centrale d'adresse x est noté m[x].

Considérons par exemple l'instruction de symbole JUMP. Le code binaire de cette opération commence par 0110, suivi de l'adresse en mémoire centrale (sur 12 bits) où le branchement doit avoir lieu. La description fonctionnelle consiste simplement en une instruction: co:=x, qui signifie que cette adresse de la mémoire centrale doit être copiée dans le compteur ordinal.

Certaines opérations ont un code opération sur 16 bits, car elles ne nécessitent pas d'information supplémentaire: par exemple l'instruction PUSH ajoute le contenu du registre AC au sommet de la pile d'exécution. La pile considérée dans ce chapitre est située à des adresses décroissantes de la mémoire centrale, il faut donc décrémenter de 1 l'adresse du sommet de pile pour y ajouter une donnée: pp:=pp−1; m[pp]:=ac.

On peut observer dans ce tableau trois modes d'adressage: Indépendamment du mode d'adressage, les instructions se divisent en plusieurs catégories:

2.3.2  Interprétation d'une instruction du langage machine

Les figures 4, 5, et 6 montrent un exemple de micro-programme. Un micro-programme est donc une suite de micro-instructions, qui sont ici décrites de manière fonctionnelle pour des raisons de lisibilité, mais qu'il faudrait en fait traduire par les 32 bits correspondants, comme cela a été fait dans la figure 2. Le micro-programme est formé d'une boucle, comprenant trois étapes: La première étape est réalisée par les micro-instructions 0, 1, et 2 du micro-programme. Les deux étapes suivantes sont réalisées par tous les groupes de micro-instructions qui précèdent le retour au début de la boucle, représenté par un branchement sur la première micro-instruction: goto 0;.

Fin de la deuxième étape: supposons par exemple que les micro-instructions exécutées soient celles de numéros 3, 4, et 5. Troisième étape: supposons que l'instruction STOD ait été détectée. Il faut transférer la donnée contenue dans le registre AC en mémoire centrale à l'adresse spécifiée par les 12 bits restants de l'instruction. Exercice  Citer et expliquer la suite des micro-instructions exécutées lors d'un appel de procédure et retour.

0: rad:=co; rd; programme principal
1: co:=co+1; rd; incrémentation de CO
2: ri:=rdo; if n goto 28; analyse et sauvegarde de RDO
3: rit:=decalg(ri+ri); if n goto 19; 00xx ou 01xx?
4: rit:=decalg(rit); if n goto 11; 000x ou 001x?
5: ual:=rit; if n goto 9; 0000 ou 0001?
6: rad:=ri; rd; 0000=LODD
7: rd;  
8: ac:=rdo; goto 0;
9: rad:=ri; rdo:=ac; wr; 0001=STOD
10: wr; goto 0;  
11: ual:=rit; if n goto 15; 0010 ou 0011?
12: rad:=ri; rd; 0010=ADDD
13: rd;  
14: ac:=rdo+ac; goto 0;  
15: rad:=ri; rd; 0011=SUBD
16: ac:=ac+1; rd;  
17: a:=inv(rdo);  
18: ac:=ac+a; goto 0;  
19: rit:=decalg(rit); if n goto 25; 010x ou 011x?
20: ual:=rit; if n goto 23; 0100 ou 0101?
21: ual:=ac; if n goto 0; 0100=JPOS
22: co:=bet(ri,amasq); goto 0;  
23: ual:=ac; if z goto 0; 0101=JZER
24: goto 0;  
25: ual:=rit; if n goto 27; 0110 ou 0111?
26: co:=bet(ri,amasq); goto 0; 0110=JUMP
27: ac:=bet(ri,amasq); goto 0; 0111=LOCO
28: rit:=decalg(ri+ri); if n goto 40; 10xx ou 11xx?
29: rit:=decalg(ri); if n goto 35; 100x ou 101x?
30: ual:=rit; if n goto 33; 1000 ou 1001?
31: a:=ri+pp; 1000=LODL
32: rad:=a; rd; goto 7;
33: a:=ri+pp; 1001=STOL
34: rad:=a; rdo:=ac; wr; goto 10;  


Figure 4: Un exemple de micro-programme




35: ual:=rit; if n goto 38; 1010 ou 1011?
36: a:=ri+pp; 1010=ADDL
37: rad:=a; rd; goto 13;  
38: a:=ri+pp; 1011=SUBL
39: rad:=a; rd; goto 16;  
40: rit:=decalg(rit); if n goto 46; 110x ou 111x?
41: ual:=rit; if n goto 44; 1100 ou 1101?
42: ual:=ac; if n goto 22; 1100=JNEG
43: goto 0;  
44: ual:=ac; if z goto 0; 1101=JNZE
45: co:=bet(ri,amasq); goto 0;  
46: rit:=decalg(rit); if n goto 50;  
47: pp:=pp-1; 1110=CALL
48: rad:=pp; rdo:=co; wr;  
49: co:=bet(ri,amasq); wr; goto 0;  
50: rit:=decalg(rit); if n goto 65; 1111, adresse?
51: rit:=decalg(rit); if n goto 59;  
52: ual:=rit; if n goto 56;  
53: rad:=ac; rd; 1111 000=PSHI
54: pp:=pp-1; rd;  
55: rad:=pp; wr; goto 10;  
56: rad:=pp; pp:=pp+1; rd; 1111 001=POPI
57: rd;  
58: rad:=ac: wr: goto 10;  
59: ual:=rit; if n goto 62;  
60: pp:=pp-1; 1111 010=PUSH
61: rad:=pp; rdo:=ac; wr; goto 10;  
62: rad:=pp; pp:=pp+1; rd; 1111 011=POP
63: rd;  
64: ac:=rdo; goto 0;  
65: rit:=decalg(rit); if n goto 73;  
66: ual:=rit; if n goto 70;  
67: rad:=pp; pp:=pp+1; rd; 1111 100=RETN
68: rd;  
69: co:=rdo; goto 0;  


Figure 5: Un exemple de micro-programme (suite)




70: a:=ac; 1111 101=SWAP
71: ac:=pp;  
72: pp:=a; goto 0;  
73: ual:=rit; if n goto 76;  
74: a:=bet(ri,smasq); 1111 110=INSP
75: pp:=pp+a; goto 0;  
76: a:=bet(ri,smasq); 1111 111=DESP
77: a:=inv(a);  
78: a:=a+1; goto 75;  


Figure 6: Un exemple de micro-programme (fin)




1
[JGL] Plus un circuit contient de transistors, plus il est cadencé à une fréquence élevée, et plus sa tension d'alimentation est élevée, plus il consomme. Les processeurs modernes contiennent un nombre gigantesque de transistors: le Pentium IV Prescott, à la date d'aujourd'hui, contient 125 millions de transistors. Il tourne de plus à 3,2GHz. Pour diminuer la consommation électrique, donc la chaleur engendrée (il faut en premier lieu éviter que le processeur fonde! Un Pentium IV Prescott consomme entre 100 et 250 watts; poussé à 3,57GHz, il monte de 45 degrés à 94 degrés, et brûle, voir l'article), sa tension d'alimentation est basse: de 1,3, voire de 1,0 volt selon les modèles.
2
[JGL] Beaucoup moins aujourd'hui. Noter qu'un processeur cadencé à 3,2 GHz reçoit un tic d'horloge tous les 1/3,2.109 ≈ 0,3 ns. Noter aussi qu'un processeur à cette fréquence doit être petit: la lumière ne parcourt que 10 cm pendant ces 0,3ns!
3
[JGL] Aujourd'hui, tous les processeurs sont en technologie MOSFET, ou des améliorations.
4
[JGL] Ici, un transistor à jonction NPN. Il en existe aussi des PNP, qui auraient la flèche de l'émetteur orientée dans l'autre sens.
5
Ceci est largement dépassé aujourd'hui. Toujours le Pentium IV Prescott: 109 mm2 pour 125 millions de transistors.
6
1K, ou plutôt 1Ko, signifie 1 Kilo-octet, soit 1024 = 210 octets.
7
Exercice: réalisez-le avec n portes “ou exclusif” et n−1 portes “et”
8
Exercice: réalisez-le en circuit.
9
Les petits ronds en entrée des portes ET du décodeur sont des négations logiques. Cette UAL calcule A et B, A ou B, non B, ou bien A+B selon que les bits sur les deux lignes en bas à gauche valent 00, 01, 10, ou 11.
10
sur les sorties Q1 et Q2.
11
Les mémoires actuelles ne sont plus fabriquées à l'aide de bascules, et stockent plusieurs bits d'information par transistor. Néanmoins, l'explication à base de bascules reste simple et compréhensible.
12
Les bascules utilisées sont des bascules D. L'entrée d'horloge est ici nommée CK.
13
On les appelle des “latch”.
14
En fait des transistors à effet de champ, dans lesquels on piège des électrons (ou des trous, c'est-à-dire des absences d'électrons), ce qui revient effectivement à les voir comme des condensateurs de très faible capacité.
15
et aujourd'hui les mémoires statiques-dynamiques (SDRAM), les innombrables variantes de mémoire vidéo, etc.
16
mais il existe aussi les PROM (“programmable ROM”), qui sont programmables une fois après fabrication, par destruction de fusibles, les EPROM (“erasable PROM”), que l'on peut effacer en totalité typiquement par une exposition prolongée à des rayons ultraviolets, puis reprogrammer, les EEPROM (“electrically erasable PROM”), que l'on peut effacer en totalité par une impulsion électrique, puis reprogrammer, les mémoires FLASH, qui sont intermédiaires entre les EEPROM et les mémoires vives (RAM, “random access memory”) que nous avons décrites dans cette section. On peut lire et écrire dans une FLASH à volonté, mais le temps d'accès est plus long que pour les RAM. Ceci permet d'utiliser les mémoires FLASH comme des substituts rapides à des disques durs.
17
Un microprocesseur très populaire à la fin des années 1970 et jusque vers 1985, de la défunte firme Zilog—laquelle avait été fondée par des transfuges de chez Intel.
18
Rappel: 1 Koctet égale 210 = 1 024 octets, donc 64 Koctets égalent 216 = 65 536 octets. Un octet est un mot de p=8 bits.
19
Tous les microprocesseurs n'ont pas une couche microprogrammée: c'était par exemple le cas des processeurs RISC (Reduced Instruction Set Computer) des années 1980. Les processeurs modernes sont microprogrammés, c'est le cas des Pentium. C'est aussi le cas de petits processeurs appelés PIC, dont on peut reprogrammer le micro-code. Il se trouve qu'on peut en fait reprogrammer en partie le micro-code des Pentium.
20
Le registre %eip dans le Pentium, par exemple.
21
C'est-à-dire que c'est un endroit où le microprogramme va sauvegarder RI, ou bien utiliser comme registre auxiliaire pour calculer RI. Le “T” à la fin de “RIT” est pour Temporaire.
22
Ce sont donc en particulier des registres non modifiables.
23
Ce microprocesseur-jouet ne peut accéder qu'à des adresses sur 12 bits: pour toute adresse a, l'adresse effective envoyée sur le bus d'adresses sera le ET bit à bit de a avec AMASQ. La pile est elle stockée sur les 256 premiers octets, et est donc aux adresses de la forme a ET PMASQ.
24
L'adresse à l'intérieur de la mémoire de commande, s'entend, pas de la mémoire centrale.

This document was translated from LATEX by HEVEA.