Introduction aux microprocesseurs

Structure de base d’un calculateur

D’un point de vue matériel, un système informatique minimal est constitué d’un processeur, des mémoires et d’un ensemble des circuits d’interfaces.

Le microprocesseur (MPU : Micro-Processing Unit) élément de base, est un circuit intégré à très grande échelle d’intégration (VLSI : Very Large-Scale Integration) capable d'exécuter des instructions (opérations élémentaires) chargées dans la mémoire de programme. Ainsi, il remplit donc les fonctions d’une unité centrale de traitement (CPU : Central Processing Unit) en un seul boîtier.

Toutes les informations que le microprocesseur utilise, sont stockées dans des mémoires; le fonctionnement du microprocesseur est entièrement conditionné par le contenu de celles-ci. Ces mémoires contiennent deux types d'informations : le programme et les données, nécessaires pour la réalisation d'une tâche précise.

·         Le programme (ensemble des ordres élémentaires à exécuter) est placé de façon définitive dans des mémoires qui ne pourront qu'être lues par le microprocesseur. Ce sont des mémoires non volatiles, de type ROM (Read Only Memory), PROM, EPROM, Flash

·         Les données ou OPERANDES proviennent le plus souvent, d'un calcul effectué par le microprocesseur ou d'un périphérique d'entrée, (clavier, disque, ...). Elles sont stockées dans des mémoires qui peuvent être lues et écrites, appelées RAM (Random Acces Memory).

Dans un système à microprocesseur (Figure 1), l'interface d’entrée-sortie (E/S) permet d’assurer la liaison entre l'unité centrale de traitement et l'environnement extérieur (périphériques). Le microprocesseur échange les informations avec les composants qui lui sont associés (mémoire et périphériques E/S) au moyen d’un ensemble des lignes de connexions appelé bus.

Figure 1 : Schéma bloc d’un système à microprocesseur

Un bus est un ensemble de fils qui assurent la transmission du même type d’information. On distingue trois types de bus :

-          Le bus de données : bidirectionnel, assure le transfert des informations entre le microprocesseur et son environnement. Le nombre de lignes du bus de données définit la capacité de traitement du microprocesseur ; selon le microprocesseur la largeur du bus peut être de 8 bits, 16 bits, 32 bits, 64 bits …

-          Le bus d’adresses : unidirectionnel, permet la sélection de la case contenant l’information à traiter dans un espace adressable. L’espace adressable peut avoir 2n emplacements, avec n est le nombre de lignes du bus d'adresses.

-          Le bus de contrôle : constitué de quelques lignes, assure la synchronisation du flux d'informations entre le microprocesseur et les circuits aux qu’il s’adresse.

Architecture d’un CPU

Le microprocesseur est constitué des unités fonctionnelles suivantes :

-          Une unité Arithmétique et Logique (UAL ou ALU en anglais),

-          Des registres,

-          Une unité de contrôle (CU).

Unité arithmétique et logique

Cet organe, interne au microprocesseur, permet la réalisation des opérations arithmétiques (Addition, Soustraction…) et logiques (AND, OR, XOR…). Outre les opérations arithmétiques et logiques, l'ALU réalise aussi les opérations de décalage et de rotation. Le registre d’état lié étroitement à l’ALU, met à la disposition du programmeur (à travers ces indicateurs « Flags ») des renseignements supplémentaires sur le résultat de quelques opérations (résultat nul, négatif, dépassement…). Citons quelques indicateurs que nous retrouvons dans la plupart des microprocesseurs :

-          Le bit de retenue (: carry), mis à 1 si le résultat d’une opération dépasse la taille du registre de destination.

-          Le bit de retenue intermédiaire (AC : Auxiliary-Carry), retenue sur le quatrième bit (utilisé pour le calcul en BCD).

-          Le bit de signe (S ou N), mis à 1 si le résultat d’une opération arithmétique est négatif.

-          Le bit zéro (Z) : mis à 1 si le résultat d’une opération est nul.

-          Le bit de débordement (OV : overflow), mis à 1 si une opération arithmétique a écrasé le bit de signe.

 

Pour monter l’utilité de ces indicateurs, prenons l’exemple d’une instruction conditionnelle :

Si (A = B) alors

      Traitement 1

Sinon

      Traitement 2

La comparaison entre  A et B est traitée par le microprocesseur de la manière suivante :

-    Soustraire B de A

-    Si l’indicateur Z = 1 (c-à-d  A – B = 0) il exécute le Traitement 1 et saute le traitement 2.

-   Sinon (Z = 0) il saute le traitement 1 et exécution du Traitement 2.

Toutes les instructions du saut conditionnel, se basent sur le test sur ces indicateurs.


 

Les registres

Il existe deux types de registres : les registres à usage général, et les registres d'adresses (ou pointeurs).

Les registres à usage général (Registres de travail)

Ce sont des mémoires rapides à l'intérieur du microprocesseur ; ils permettent à l'UAL de manipuler des données à vitesse élevée.

L'adresse d'un registre est associée à son nom (Exemple :  A, BX, WREG…).

Les registres d’adresses (pointeurs)

Ces registres sont utilisés pour l’adressage de la mémoire. Parmi ces registres, nous pouvons citer : 

-       Le compteur de programme PC : le microprocesseur utilise ce registre pour repérer l’exécution du programme. Celui-ci contient toujours l’adresse de la prochaine instruction à exécuter.

-       Le pointeur de pile (Stack Pointer SP) : pointe toujours le sommet de la pile. La pile est une partie de la mémoire de données de type LIFO (Last In First Out) utilisée pour sauvegarder l’adresse de retour d’un sous-programme et/ou des variables locales. 

-       Les registres pointeurs de données ou d'index : utilisés pour l’adressage indirect de la mémoire de données.

L’unité de contrôle (UC)

Elle permet de séquencer le déroulement des instructions. Elle effectue la recherche en mémoire des instructions, le décodage et l’exécution de l’instruction recherchée. Elle est composée essentiellement d’un :

·         Registre d’instruction (RI) : recoit le code de l’instruction à exécuter.

·         Décodeur d’instruction : permet de déterminer le type de l’instruction à exécuter.

·         Bloc logique de contrôle (ou séquenceur) : Il organise toutes les étapes d’exécution des instructions au rythme d’une horloge et élabore tous les signaux de synchronisation internes et externes du microprocesseur.

Fonctionnement du microprocesseur

Le programme est une suite d’instructions stockées dans la mémoire de programme. Pour exécuter ces instructions de manière séquentielle, le microprocesseur utilise un registre appelé compteur de programme. Ce registre contient l’adresse de l’instruction à exécuter.

Jeu d’instructions

Les microprocesseurs sont capables d'effectuer un certain nombre d'opérations élémentaires. Cet ensemble d’opérations élémentaires est appelé jeu d’instructions. Une instruction au niveau machine doit fournir à l'unité centrale toutes les informations nécessaires pour déclencher une telle opération élémentaire. Elle comporte en général plusieurs champs ; le premier champ contient le code de l’opération (Code-Op ou Op-Code en anglais) ; les autres champs peuvent comporter des données ou l'identificateur des opérandes. Sur certaines machines toutes les instructions ont la même longueur, sur d'autres cette longueur est variable.

Format d’une instruction :

Code de l’opération

 

Opérande1

,

Opérande2

Exemple :

Additionner le contenu du registre A avec le contenu de la case mémoire dont l’adresse est mentionnée dans le champ 3

ADDITIONNER

 

Registre A

,

@ Case mémoire

Cycle d’exécution d’une instruction

Lors de son exécution, une instruction est décomposée en mini-opérations élémentaires. Celles-ci sont généralement au nombre de trois : Recherche de l'instruction, Décodage et Exécution.

Recherche de l’instruction (Fetch)

Le contenu du compteur de programme est placé sur le bus d’adresses (c'est l'unité de contrôle qui établit la connexion). L'unité de contrôle (UC) émet un ordre de lecture de la case mémoire dont le contenu sera ensuite acheminé à travers le bus de données au registre instruction (RI).

Remarque : Dès la mise sous tension ou après un RESET, le compteur de programme est initialisé par une valeur (adresse) fixée par le constructeur du microprocesseur, appelée Vecteur RESET.

Décodage (Decode)

Le registre d'instruction (RI) contient le code opératoire. L'unité de contrôle décode le contenu de RI pour savoir la nature de l'opération à effectuer (addition, rotation, ...) et incrémente le compteur de programme (PC) pour qu’il se pointe sur l'instruction suivante.

Exécution (Execute)

Le cycle d’exécution varie en fonction de l’architecture et le type de l’instruction. Mais d’une manière générale c’est l’ALU qui exécute l'instruction en cours et positionne les indicateurs du registre d'état.

La Figure 2  illustre la séquence de déroulement de ces étapes. Chaque instruction est équivalente à une suite de mini-opérations exécutées dans un ordre précis. C’est ainsi qu’un microprocesseur procède à l’exécution de chaque instruction.

Figure 2 : Etapes d'exécution d'une instruction

Ces micro-opérations (fetch, decode, execute) sont cadencées au rythme d’horloge qui pilote le séquenceur. La durée de traitement d’une instruction s’appelle cycle d’instruction ou cycle machine.

Figure 3 : Cycle d'exécution d'une instruction

Le nombre de périodes d’horloge nécessaires à l’exécution d’une instruction dépend de l’architecture du processeur et du mode d’adressage. Le microcontrôleur PIC que nous allons étudier, exécute toutes les instructions (hormis les instructions de saut) sur quatre périodes d’horloge.

Différentes architectures

Les différentes unités sont organisées suivant deux architectures :

-       L’architecture Von Neumann (du nom d’un des savants qui a contribué à la mise au point des premiers ordinateurs). La mémoire de programme, la mémoire de données et les périphériques d’entrées/sorties partagent le même bus d’adresses et de données.

-       L’architecture Harvard, sépare systématiquement la mémoire de programme de la mémoire de données : l'adressage de ces mémoires est indépendant. Ce type d’architecture favorise l’accès simultané aux mémoires de programme et de données.

Figure 4 : Architecture Von Neumann

Figure 5 : Architecture Harvard

Au niveau du jeu d’instructions, les microprocesseurs se réparties en deux grandes catégories appelées CISC et RISC :

·         Architecture CISC (Complex Instruction Set Computer) : une instruction peut effectuer plusieurs opérations élémentaires (faire par exemple une opération arithmétique avec chargement du résultat dans la mémoire). La longueur de l’instruction et le temps d’exécution varient d’une instruction à l’autre.

·         Architecture RISC (Reduced Instruction Set Computer) : les processeurs RISC possèdent un jeu d’instruction réduit où chaque instruction effectue une opération élémentaire. Seules les instructions Load et Store accèdent à la mémoire. La plupart des instructions ont la même taille et s’exécutent sur un seul cycle machine.

Les processeurs spécialisés

Les microcontrôleurs

Au début de la commercialisation des microprocesseurs, un système minimum était obligatoirement constitué de plusieurs circuits intégrés.

Les microcontrôleurs sont apparus suite au progrès considérable de l’intégration des composants. Un microcontrôleur regroupe dans un même boîtier les éléments essentiels d’un système à microprocesseur, à savoir, la CPU, les mémoires RAM et ROM et quelques interfaces d’entrées-sorties (PORTS, Timers, ADC ...). Il s’agit d’un dispositif de contrôle, dont sa conception met l’accent sur la réduction du coût de développement des applications embarquées.

Les processeurs de traitement de signal (DSP)

Les DSP (Digital Signal Processor) sont des processeurs optimisés pour l’exécution des applications de traitement numérique de signal (filtrage numérique, convolution, transformée de Fourrier rapide…). Les DSP sont employés dans les modems, les téléphones mobiles, les appareils multimédia …).