2.1.1 Décodeurs :
Un décodeur est un circuit possédant n entrées et n sorties numérotées (figure 2.1). À tout moment,
une et une seule sortie est active : celle dont le numéro correspond à la valeur binaire présente sur les n
entrées. Le décodeur traduit donc la valeur d’entrée en une information de position spatiale.
Fig.2.1 Décodeur 3 vers 8. Avec la valeur 6 en entrée (110 en binaire), la sortie numéro
6 est activée.
Un décodeur peut être utilisé pour n’activer qu’au plus un composant 3-états à la fois, puisqu’au plus
une seule de ses sorties est active à la fois.
2.1.2 Multiplexeurs :
Ces sont des circuits d’aiguillage pour les signaux logiques. Un multiplexeur possède 2nentrées de
données, n entrées de commandes, et une seule sortie. On indique sur la commande le numéro (en binaire) de
l’entrée de donnée qui va être aiguillée en sortie. On a en figure 2.2 un exemple de multiplexeur 8 vers 1 sur
la commande duquel est écrit (; la sortie reflète alors l’état de la sixième entrée : E6.
Bien sûr, les multiplexeurs peuvent être mis en parallèle pour aiguiller des bus entiers. On mettra
alors en commun les lignes de commande, et en parallèle les lignes de données.
2.1.3 Mémoires :
Cette section est consacrée aux circuits utilisés dans la mémoire centrale des ordinateurs, qui contient
les programmes et les données manipulés par les programmes. Une mémoire est constituée de cellules
mémoires (bascules bistables) qui sont regroupées pour former des cases mémoires. Ces cases mémoires sont
ordonnées et chaque case mémoire est identifiée par une adresse unique obtenue par la combinaison binaire
d'un ensemble de fils constituant le bus d'adresse. Cette adresse est généralement exprimée en hexadécimal.
L'ensemble de fils permettant de lire ou d'écrire sur chaque cellule mémoire forme le bus de donnée. Lorsque
n
le bus d'adresse est composé de n fils, la taille de la mémoire est T=2 cases ou mots. Le nombre m de fils du
bus de donnée quant à lui indique la largeur des mots mémoires. La largeur dépend de l’architecture utilisée.
(voir figure 2.3). On peut donc voir une mémoire comme un ruban de cases numérotées.
2.1.3.1 R.A.M :
Les RAMs (Random Access Memory) peuvent être lues et écrites, et l’attribut random indique que
ces lectures-écritures peuvent se faire à des suites d’adresses totalement quelconques, par opposition à des
mémoires de type séquentiel (comme les disques durs) qui font des séries d’accès à des adresses
consécutives.
Une RAM peut être statique ou dynamique.Chaque bit mémoire d’une RAM statique (SRAM) est
constitué d’une bascule, et conserve son état tant qu’elle est alimentée. A l’inverse, chaque bit d’une RAM
dynamique (DRAM) est composé d’une capacité, qui doit être rafraîchie périodiquement par une
électronique séparée. Les RAMs statiques ont un taux d’intégration plus faible que les RAM dynamiques,
Microprocesseurs & DSP 9
puisqu’un bit mémoire nécessite 6 transistors dans un cas, une capacité et un transistor dans l’autre.
2.1.3.2 R.O.M : Les ROMs (Read Only Memory) sont fonctionnellement identiques aux RAMs, mais ne
permettent que la lecture et pas l’écriture. Utilisées dans la mémoire centrale d’un ordinateur, les RAMs
pourront stocker les programmes et les données, alors que les ROMs vont seulement stocker des programmes
invariables, comme par exemple le programme exécuté au démarrage de la machine, et stocké dans la ROM
dite de BIOS. Dans certains ordinateurs plus anciens, tout le système d’exploitation était stocké en ROM, ce
qui permettait d’avoir un système incorruptible et au démarrage rapide.
Les ROMs existent également dans un grand nombre de types différents, principalement selon la
façon dont on peut programmer leur contenu (invariable, par définition).
- Il y a d’abord les ROMs programmées par masque à l’usine ; elles sont produites en grand nombre avec un
faible coût à l’unité, mais leur contenu ne peut jamais être mis à jour ultérieurement.
- Les PROMs (Programmable Rom) sont programmables par un appareil spécial, qui généralement détruit
par un courant fort une liaison interne correspondant à un bit.
- Les EPROMs (Erasable PROM) fonctionnent de la même façon, mais possèdent une fenêtre transparente et
peuvent être effacées par une exposition d’une vingtaine de minutes aux rayons ultraviolets.
- Elles sont maintenant souvent remplacées par des EEPROMs (Electrically EPROM), reprogrammables
électriquement. Les mémoires Flash sont également une forme de mémoires effaçables électriquement, mais
on réserve généralement le terme EEPROM aux mémoires capables d’effacer à l’échelle du mot, et le terme
"mémoires Flash" à celles qui effacent à l’échelle de blocs. Dans les deux cas, le temps d’effacement est long
par rapport au temps de lecture, et elles ne peuvent pas être considérées comme une forme spéciale de RAM.
On trouve de la mémoire EEPROM et flash dans les assistants personnels, dans les sticks mémoire sur ports
USB, pour le stockage du firmware de nombreux appareils (BIOS d’ordinateurs, lecteurs de DVD, tuners
satellites, etc...)
Les boîtiers mémoires disposent d'un certain nombre de connections externes leur permettant d'être
reliés ensemble sur un même bus de donnée et de pouvoir accéder à ce bus indépendamment des autres.
L'entrée notée CE (Chip Enable) ou CS (Chip Select), souvent complémentée, permet de déconnecter
électroniquement la mémoire du bus de donnée (bus de donnée à l'état haute impédance). L'entrée R/W
permet d'autoriser l'écriture ou la lecture de la mémoire.
Fig.2.4 Interface d’un boîtier de RAM statique de n mots de m bits, avec données lues et écrites communes.
Microprocesseurs & DSP 10
Lire une mémoire consiste à placer sur le bus d'adresse les coordonnées de la case mémoire, la
sélectionner à l'aide du CS, et ensuite transférer son contenu sur le bus de donnée externe (Figure 2.5) .
2.2 Architecture :
Un système à base de microprocesseur est formé des trois éléments :
- Une unité de traitement centrale (CPU : Central Processing Unit)
- Une mémoire (ROM et RAM)
- Des ports d'entrées/sorties.
Les trois modules sont interconnectés à l'aide de trois bus (comme le montre la figure suivante) : bus
de données, bus d'adresses et bus de contrôles ou commandes.
la sortie. Il existe aussi des ports bidirectionnels. Donc le microprocesseur peut lire des données à partir d'un
périphérique d'entrée (exemple souris, clavier, disque dur, etc...) de même il peut restituer le résultat de son
traitement au monde extérieur en adressant des périphériques de sortie (tels que l'imprimante, l'écran, etc...)
En résumé, les interfaces d'entrées/sorties vont soulager le microprocesseur pour la communication avec le
monde extérieur.
Le microprocesseur doit donc contrôler les fonctions effectuées par les autres modules, il doit chercher ainsi
que décoder des instructions rangées en mémoire, et il doit adresser des interfaces d'entrées/sorties pour lire
des données du monde extérieur, et restituer le résultat de son traitement.
Nombre de bits 8 10 16 20 24 30
Espace mémoire 256 Octets 1 Ko 64 Ko 1 Mo 16 Mo 1 Go
Décodage d’adresses :
Le but du décodage d'adresse est de déterminer les combinaisons logiques des fils d'adresse qui
permettent d'activer le boîtier mémoire adéquat. Le décodage de type linéaire associe un composant à un bit
de sélection du microprocesseur. Les bits de sélection sont les bits de poids fort du bus d'adresses. Les bits de
poids faible permettent d’accéder aux cases mémoires à l’intérieur du composant. Méthode simple ne
nécessitant aucun composant externe et valable pour systèmes à nombre de boîtiers mémoires ou
périphériques réduit. Le décodage par zone ne gaspille pas le nombre de bits réservés pour le décodage. Un
décodeur d'adresse permet de sélectionner les boîtiers mémoires ou périphériques par plages d'adresses.
Microprocesseurs & DSP 13
Cas 3 : 1 x µP avec bus d'adresses de 16bits, 2 x Circuits mémoire de 16Ko. Décodage par inverseur.
Cas 4 : 1 x µP avec bus d'adresses de 16bits, 2 x Circuits mémoire de 16Ko. Décodage par 74LS139.
Cas 5 : 1 x µP avec bus d'adresses de 16bits, 8 x Circuits mémoire de 8Ko. Décodage par 74LS138.
Un port d'entrée est essentiellement composé de tampons trois états. Ceux-ci se comportent comme
des interrupteurs électroniques qui font apparaître, au moment voulu, les niveaux logiques du périphérique
d'entrée sur le bus de données; ces niveaux seront mémorisés dans un registre du µP.
Un port de sortie est essentiellement composé de bascules de type D. Celles-ci se comportent comme
de petites mémoires. Leur entrée est reliée au bus de données. Le processeur vient écrire un niveau logique 0
ou 1 dans chacun des bascules. Les sorties des bascules contrôlent les périphériques, généralement via un
étage de puissance.
Il existe deux méthodes classiques pour adresser les circuits d'entrées/sorties. La première méthode
consiste à séparer l'adressage de la mémoire et l'adressage des entrées/sorties. En plus du bus d'adresse, il y a
une ligne supplémentaire où le processeur indique s'il s'adresse à la mémoire ou aux circuits d'entrées/sorties.
Cette méthode a l'avantage d'augmenter d'une certaine façon l'espace d'adressage. C'est pourquoi les premiers
micro-processeurs l'utilisaient car leur espace d'adressage était souvent réduit. Cette méthode a par contre
l'inconvénient de nécessiter des instructions spécifiques pour accéder aux circuits d'entrées/sorties.
La seconde méthode consiste à réserver une partie de l'adressage de la mémoire aux entrées/sorties.
On parle d'entrées/sorties en mémoire. Cette méthode réduit donc l'espace d'adressage disponible pour la
mémoire mais ce n'est pas gênant sur les micro-processeurs modernes qui disposent d'un (très) large espace
d'adressage. Elle permet aussi l'utilisation des instructions de chargement et rangement pour accéder aux
circuits d'entrées/sorties et de bénéficier ainsi des différents modes d'adressage. Cette méthode est toujours
utilisée sur les micro-processeurs RISC car elle diminue le nombre d'instructions et simplifie le décodage de
celles-ci.
Lorsqu'un circuit d'entrée/sortie a reçu une donnée, le micro-processeur doit venir la lire pour la
récupérer. Les buffers de ces circuits sont généralement assez petits. Ceci implique que la donnée doit être
lue rapidement. Sinon, des données qui arrivent risquent d'être perdues.
Il existe essentiellement deux méthodes pour éviter que des données soient perdues. La première
consiste à faire en sorte que le micro-processeur interroge régulièrement les différents circuits d'entrée/sortie
pour savoir si une donnée est disponible. Cette méthode est la plus simple. Par contre, elle utilise beaucoup le
micro-processeur même quand il n'a aucune entrée/sortie. La seconde utilise les interruption qui permettent
aux circuit d'entrée/sortie de prévenir le micro-processeur lorsqu'une donnée est disponible. Le micro-
processeur interrompt alors la tâche en cours pour lire la donnée et la placer dans un buffer en mémoire où
elle est mise en attente pour une tâche.
L'interface d'E/S possède de la mémoire tampon pour stocker les données échangées (1 octet à
quelques Méga-octets, suivant le type d'interface). L'interface stocke aussi des informations pour gérer la
communication avec le périphérique :
Microprocesseurs & DSP 16
- des informations de commande, pour définir le mode de fonctionnement de l'interface: sens de transfert
(entrée ou sortie), mode de transfert des données (par scrutation ou interruption), etc. Ces informations de
commandes sont communiquées à l'interface lors de la phase d'initialisation de celle-ci, avant le début du
transfert.
- des informations d'état, qui mémorisent la manière dont le transfert c'est effectué (erreur de transmission,
réception d'informations, etc...). Ces informations sont destinées au µP.
La communication entre l'interface d'entrées/sorties et les périphériques peut être série (sur un seul fil
bit par bit) ou parallèle (sur plusieurs fils). Malgré la rapidité de la liaison parallèle, elle n'est pas adaptée à
certaines applications. En effet ce type de liaison a des faiblesses lorsqu'il s'agit de communiquer avec un
organe pour une longue distance, on préfère donc utiliser la liaison série malgré son faible débit contre la
liaison parallèle. Le circuit 8255 d'Intel est un exemple d'interface d'entrée/sortie parallèle.
La liaison entre l'émetteur et le récepteur en mode série peut être : Simplexe, Half duplexe ou Full
duplexe. La vitesse de transmission est mesurée en bps (bits par seconde), mais aussi en BAUD (nombre des
changements du signal par Seconde). Les vitesses normalisées sont : 50, 75, 110, 150, 300, 600, 1200,
2400,4800, 9600, 19200, 38400 bauds. Il existe 2 types de communications série: Synchrone et Asynchrone.
Communications asynchrones : la transmission s'effectue caractère par caractère. Un caractère comprend :
- un bit de départ (START),
- des bits de donnée selon un format variable (5, 6, 7, 8 bits),
- un bit de parité (optionnel),
- un ou plusieurs bits d'arrêt (Stop).
Communications synchrones : Avec la communication synchrone les données sont transmissent d'une
manière continue. Il est donc nécessaire d'effectuer la synchronisation des caractères au début du bloc de
données (avec un signal d'horloge). Le circuit 8250 est un exemple d'interface d'entrée/sortie série.
Une troisième méthode est utilisée lors d'un transfert de la mémoire RAM à un port d'E/S. Pour éviter
que le µP effectue des opérations de lecture et d'écriture répétées (un certain temps est perdu entre le
traitement de chaque octet), une procédure est mise au point pour l'accès direct à la mémoire (Direct Memory
Access), qui permet de transférer des données de la mémoire RAM au port d'E/S sans passer par le µP. Pour
cela, on utilise un contrôleur DMA, qui reprend le rôle du µP, c'est à dire qu'il gère les transferts de la RAM
aux ports d'E/S.
- à l'ignorer et passer normalement à l'instruction suivante : c'est possible uniquement pour certaines
interruptions, nommées interruptions masquables. Il est en effet parfois nécessaire de pouvoir ignorer les
interruptions pendant un certains temps (pour effectuer des traitements très urgents par exemple). Lorsque le
traitement est terminé, le µP démasque les interruptions et les prend alors en compte.
Lorsque le (programme d'interruption) traitant a effectué son travail, il exécute l'instruction spéciale
IRET qui permet de reprendre l'exécution à l'endroit où elle avait été interrompue.
Le microprocesseur 8086 possède trois lignes principales d'interruption : INTR, NMI, et RESET.
Si le système est relié à plusieurs périphériques, alors qu'il n'y a qu'un seul signal de demande d'interruption :
INTR, la présence d'un contrôleur d'interruptions devient une nécessité. C'est un circuit spécial, extérieur au
µP, dont le rôle est de distribuer et de mettre en attente les demandes d'interruptions provenant des différents
périphériques.
2. Le contrôleur d'interruptions reçoit ce signal sur une de ses bornes IRQi. Dès que cela est possible (suivant
les autres interruptions en attente de traitement), le contrôleur envoie un signal sur sa borne INT.
3. Le microprocesseur prend en compte le signal sur sa borne INTR après avoir achevé l'exécution de
l'instruction en cours (ce qui peut prendre quelques cycles d'horloge). Si l'indicateur IF=0, le signal est
ignoré, sinon, la demande d'interruption est acceptée.
4. Si la demande est acceptée, le microprocesseur met sa sortie INTA au niveau 0 pendant 2 cycles d'horloge,
pour indiquer au contrôleur qu'il prend en compte sa demande.
5. En réponse, le contrôleur d'interruption place le numéro de l'interruption associé à la borne IRQi sur le bus
de données.
6. Le processeur lit le numéro de l'interruption sur le bus de données et l'utilise pour trouver le vecteur
d'interruption. Ensuite, tout se passe comme pour un appel système c'est à dire que le processeur :
(a) sauvegarde les indicateurs du registre d'état sur la pile ;
7. La procédure traitant l'interruption se déroule. Pendant ce temps, les interruptions sont masquées (IF=0).
Si le traitement est long, on peut dans certains cas ré-autoriser les interruptions avec l'instruction STI.
8. La procédure se termine par l'instruction IRET, qui restaure CS, IP et les indicateurs à partir de la pile, ce
qui permet de reprendre le programme qui avait été interrompu.
Chargement de la pile :
Déchargement de la pile :
Dans le µP 8086 le registre SP sert à indiquer l'adresse du sommet d'une pile dans la RAM. Les
instruction push et pop permettent respectivement d'empiler et de dépiler des données. Les instructions call
et ret utilisent la pile pour appeler une fonction et la quitter par la suite en retournant à l'instruction suivant
immédiatement l'appel.
En cas d'interruption, les registres FLAGS, CS et IP sont automatiquement empilés. Dans le cas d'un
changement de niveau de priorité lors de l'interruption, les registres SS et SP le sont aussi.