0. Introduction

0.1 La machine à calculer

Les processeurs ne sont rien d’autres que des machines à calculer (un peu évoluées) programmables. Imaginez que vous êtes comptable, et que vous ayez à effectuer une série d’opérations qu’on vous a gentiment inscrites sur une feuille de papier. Voici un exemple d’instructions qu’on peut vous avoir donné :

  1. faire 112 + 3
  2. faire 4 + 5
  3. faire 2 + 16

Un exemple un peu plus compliqué serait :

  1. faire 112 + 2
  2. faire “résultat précédent” * 5

ou bien

  1. 112 + 3
  2. résultat précédent - 4
  3. si le résultat est nul, passer à l’étape 6, sinon continuer
  4. 3 * 4
  5. résultat précédent + 9
  6. ouvrir la fenêtre
  7. résultat de l’étape 2 - 15
  8. passer à l’étape 12

Un microprocesseur est un dispositif électronique qui pourrait faire ce travail à votre place, pourvu qu’on lui donne la feuille de papier (et de l’énergie).

0.2 Instructions et données

Les séries d’opérations ci-dessus sont appelées programmes. En d’autres termes, un programme de microprocesseur est juste une liste d’opérations à effectuer. Dans notre cas, où le microprocesseur est simple, les instructions resteront simples et en petit nombre.

Dans la littérature, on nomme ce genre de processeur "processeur RISC" (pour Reduced Instruction Set  Computer).

Si le processeur est plus complexe, incluant des périphériques multiples (gestionnaire de mémoire, entrées-sorties, …), les instructions peuvent devenir très complexes et très nombreuses. La dénomination consacrée à ce genre de processeur est CISC (pour Complex Instruction Set Processor).

Dans les suites d’opérations ci-dessus, on distingue deux types d’objets :

  • les données :
    • d’abord les opérandes proprement dits (“3”, “4”, “112”, …),
    • et les opérandes implicites (“résultat précédent”, “résultat de l’étape 2”, …);
  • les instructions :
    • pour nous ce sont principalement les opérations (au sens arithmétique du terme) à effectuer (“+”, “−”, “*”, “/”...),
    • il y a aussi des tests (“si le résultat précédent est nul...”),
    • et des sauts, conditionnés par un test (“alors passer à l’étape 6”) ou non (“passer à l’étape 12”)
    • ainsi que des instructions spéciales (“ouvrir la fenêtre”). Dans notre cas, une instruction de ce genre pourrait être “mettre en marche le buzzer”, ou “allumer la LED numéro 10”...

Notez que ces suites d’opérations sont numérotées : elles ont un ordre. Dans le premier exemple, l’ordre n’a pas tellement d’importance, mais il en a une dans le deuxième et le troisième quand on parle de “résultat précédent”, d’“étape 6”, …

0.3 De la feuille à l’électronique

Passons du comptable et de la feuille de papier aux composants électronique.

La feuille de papier a un rôle de mémorisation :

  • c’est sur elle qu’est écrite la suite d’opérations à effectuer,
  • c’est probablement aussi sur elle que seront écrit les résultats.

Nous la modéliserons par une mémoire vive, une RAM (pour Random Access Memory). C’est cette RAM qui stockera les instructions à effectuer, les données, ainsi que les résultats que le microprocesseur va calculer. Le microprocesseur sera donc relié à cette RAM, et ira lire les instructions à effectuer, selon le principe suivant :

  • aller lire la première ligne (instructions et données associées)
  • faire ce qui est indiqué
  • aller lire la ligne suivante (instructions et données associées)
  • faire ce qui est indiqué
  • revenir à l’étape 3 (etc. jusqu’à ce que mort s’ensuive...)

Première remarque

: le microprocesseur doit lire les lignes une par une. Il doit donc maintenir un compteur de ligne interne qui indique la ligne courante (ou la prochaine ligne à lire, comme cela nous arrangera).

Deuxième remarque

: le processeur est un dispositif électronique qui ne comprend que des suites de bits. Il faudra donc coder les instructions sur un nombre de bit suffisant pour coder toutes les instructions dont nous aurons besoin. Les données seront limitées à des entiers naturels (positifs) et il faudra trouver un moyen de coder les données implicites.

Troisième remarque

: dans notre architecture, la RAM stockera les données et les instructions de façon imbriquée. Il est possible d’utiliser deux RAM différentes, ou des zones distinctes, mais ce n’est pas l’objet de ce cours.

0.4 Interlude rappel : fonctionnement de la RAM

Le schéma de la RAM est donné en figure 1.1.

Figure 1.1 : Symbole de la RAM

 

La RAM possède trois bus :

  • un bus d’adresses, ADDRESS[7:0] indiquant l’emplacement en mémoire de la donnée à laquelle on accède,
  • un bus de donnée, D[7:0], pour les données qu’on écrit en RAM,
  • un bus de donnée, Q[7:0], pour les données qu’on va lire en RAM,

ainsi que

  • un signal de contrôle sur 1 bit, WRITE, indiquant si on est entrain de faire une lecturedans la RAM (WRITE=0), ou une écriture (WRITE=1).

Le fonctionnement de la RAM est le suivant :

  • la RAM sort en permanence sur Q[ ] la donnée stockée à l’adresse présente sur ADRESSE[ ]
  • (après, Q[ ], on en fait ce qu’on veut... Si on n’a pas envie de l’utiliser, on l’ignore),
  • si WRITE est actif (1), la valeur présente sur D[ ] est stockée à l’adresse présente sur ADRESSE[ ],
  • si WRITE est inactif (0), D[ ] est ignoré.
  • De plus, pendant que WRITE est actif, le bus Q[ ] prend la même valeur de D[ ].

Pour les chronogrammes, on se reportera à la figure 1.2

Figure 1.2: Exemple d'accès à la RAM

Nous relierons notre microprocesseur (automate) à une RAM pouvant stocker 256 mots de 8 bits chacun :

  • 8 bits : les lignes de données D[ ] seront un bus 8 bits
  • 256 mots : il nous faudra donc 8 bits d’adresse (pour coder une adresse allant de 0 à 255)

L’architecture globale, qui nous re-servira en TP est donc la suivante (voir figure 1.3)

  • notre microprocesseur
  • la RAM, reliée au processeur par ses bus de données, adresses et la ligne de WRITE
  • un buzzer qui servira à jouer de la musique

Figure 1.3: schéma global