Apprendre › Chapitre 8
Multiplexeurs, décodeurs et encodeurs expliqués
8 min de lecture · Équipe bitGateLab
Les blocs combinatoires de taille moyenne sont les pièces avec lesquelles on assemble presque n'importe quel système numérique : le multiplexeur choisit une donnée parmi plusieurs, le démultiplexeur aiguille une donnée vers une destination, le décodeur active une seule ligne en fonction d'un nombre binaire et l'encodeur fait l'inverse. Vous allez voir ici leurs équations, leurs tables de vérité et deux applications qui tombent à tous les examens : réaliser une fonction logique avec un multiplexeur et concevoir un décodeur pour afficheur 7 segments.
Le multiplexeur (MUX)
Un multiplexeur à 2n entrées de données possède n entrées de sélection et une sortie. Le nombre binaire présent sur les lignes de sélection indique quelle entrée de données est transmise à la sortie. Le plus simple est le MUX 2 vers 1 :
Y = S·I0 + S·I1
Avec S = 0, la sortie recopie I0 ; avec S = 1, elle recopie I1. Le MUX 4 vers 1 utilise deux lignes de sélection S1 S0, et chaque entrée de données est multipliée par le minterme de sélection qui lui correspond :
Y = S1·S0·I0 + S1·S0·I1 + S1·S0·I2 + S1·S0·I3
| S1 | S0 | Y |
|---|---|---|
| 0 | 0 | I0 |
| 0 | 1 | I1 |
| 1 | 0 | I2 |
| 1 | 1 | I3 |
Chaque terme est une AND de l'entrée de données avec les lignes de sélection (directes ou complémentées), et toutes ces AND sont réunies par une OR.
Réaliser une fonction avec un MUX
Comme le MUX contient déjà tous les mintermes de ses variables de sélection, il sert de « fonction programmable ». Avec un MUX à 2n entrées, vous pouvez réaliser n'importe quelle fonction de n variables en appliquant 0 ou 1 sur chaque entrée de données. Mieux encore : le même MUX permet de réaliser une fonction de n + 1 variables si vous reliez la variable restante (ou son complément) aux entrées de données.
Exemple : réalisez F(A, B, C) = Σm(1, 2, 6, 7) avec un MUX 4 vers 1, en prenant A et B pour la sélection (A = S1, B = S0).
- Regroupez les lignes de la table de vérité par paires ayant la même valeur de A B et regardez comment F dépend de C.
- AB = 00 : m0 = 0 (C = 0), m1 = 1 (C = 1). F = C, donc I0 = C.
- AB = 01 : m2 = 1 (C = 0), m3 = 0 (C = 1). F = C, donc I1 = C.
- AB = 10 : m4 = 0, m5 = 0. I2 = 0.
- AB = 11 : m6 = 1, m7 = 1. I3 = 1.
Vérification avec A = 0, B = 1, C = 0 (minterme 2) : la sélection 01 choisit I1 = C = 1. Correct, m2 appartient bien à la fonction.
Le démultiplexeur et le décodeur
Le démultiplexeur (DEMUX) 1 vers 4 prend une donnée D et l'envoie sur l'une de ses quatre sorties selon S1 S0 ; les autres restent à 0 : Y0 = D·S1·S0, Y1 = D·S1·S0, Y2 = D·S1·S0, Y3 = D·S1·S0.
Si, dans le DEMUX, vous fixez D = 1 et que vous l'appelez « validation », vous obtenez un décodeur : n entrées et 2n sorties, dont une seule est active, celle qui correspond au nombre présent en entrée. Un décodeur 3 vers 8 génère les 8 mintermes de trois variables. C'est pourquoi n'importe quelle fonction de trois variables se réalise avec un décodeur et une porte OR qui réunit les sorties de ses mintermes.
Exemple : additionneur complet avec un décodeur 3 vers 8. Entrées A, B et Cin.
- Somme S = Σm(1, 2, 4, 7) : OR à 4 entrées reliée aux sorties Y1, Y2, Y4, Y7.
- Retenue Cout = Σm(3, 5, 6, 7) : OR à 4 entrées reliée à Y3, Y5, Y6, Y7.
Vérifiez un cas : A = 1, B = 1, Cin = 0 correspond au nombre 110 = 6. Seule Y6 s'active ; Y6 ne figure pas dans la OR de S (S = 0), mais figure dans celle de Cout (Cout = 1). En effet, 1 + 1 + 0 = 10 en binaire.
L'encodeur de priorité
L'encodeur effectue l'opération inverse : à partir de 2n lignes, il fournit le numéro binaire sur n bits de la ligne active. Le problème est de savoir que faire si deux lignes s'activent en même temps ; la solution pratique est l'encodeur de priorité, qui fournit le numéro de la ligne active la plus élevée. Pour 4 entrées, de D3 (la plus prioritaire) à D0 :
Y1 = D3 + D2, Y0 = D3 + D2·D1, V = D3 + D2 + D1 + D0
La sortie V (« valide ») indique qu'au moins une entrée est active ; sans elle, vous ne pourriez pas distinguer « D0 active » de « aucune active », car les deux cas donnent Y1 Y0 = 00. Essayez avec D2 = D1 = 1 : Y1 = 1 et Y0 = 0 + 0·1 = 0, soit 10 = 2. C'est D2 qui l'emporte, comme il se doit.
Décodeur BCD vers 7 segments
Un afficheur 7 segments comporte une LED par segment. Le décodeur reçoit un chiffre BCD (A B C D, A étant le bit de poids fort) et allume les segments qui dessinent ce chiffre. Pour un afficheur à cathode commune, 1 signifie segment allumé :
| Chiffre | ABCD | a | b | c | d | e | f | g |
|---|---|---|---|---|---|---|---|---|
| 0 | 0000 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
| 1 | 0001 | 0 | 1 | 1 | 0 | 0 | 0 | 0 |
| 2 | 0010 | 1 | 1 | 0 | 1 | 1 | 0 | 1 |
| 3 | 0011 | 1 | 1 | 1 | 1 | 0 | 0 | 1 |
| 4 | 0100 | 0 | 1 | 1 | 0 | 0 | 1 | 1 |
| 5 | 0101 | 1 | 0 | 1 | 1 | 0 | 1 | 1 |
| 6 | 0110 | 1 | 0 | 1 | 1 | 1 | 1 | 1 |
| 7 | 0111 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
| 8 | 1000 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| 9 | 1001 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
Les codes 1010 à 1111 ne sont pas des codes BCD valides ; on les traite donc comme des cas indifférents (X) dans le tableau de Karnaugh. Cela simplifie beaucoup chaque segment.
Segment a : il ne vaut 0 que pour les chiffres 1 et 4. Dans le tableau à 4 variables, avec des X de 10 à 15, les plus grands groupes sont : A (8 cases avec les X), C (8 cases), B·D (mintermes 5, 7, 13, 15) et B·D (les quatre coins : 0, 2, 8, 10).
a = A + C + B·D + B·D
Vérifiez le 4 (0100) : A = 0, C = 0, B·D = 1·0 = 0, B·D = 0·1 = 0. Résultat 0 : le segment a reste éteint, c'est correct.
Si l'afficheur est à anode commune, chaque segment s'allume avec un 0 ; toutes les sorties sont donc inversées.
Erreurs fréquentes
- Inverser l'ordre des lignes de sélection : si S1 et S0 sont croisées, l'entrée I1 est échangée avec I2 et la fonction est fausse.
- Oublier que de nombreux décodeurs ont des sorties actives à l'état bas et utiliser une OR là où il faut une NAND.
- Concevoir un encodeur sans priorité et sans sortie de validité, qui fournit 00 aussi bien pour « D0 active » que pour « rien d'actif ».
- Mélanger la table pour cathode commune avec un afficheur à anode commune : ce sont exactement les segments opposés qui s'allument.
- Ne pas exploiter les combinaisons 1010 à 1111 comme cas indifférents et aboutir à des équations deux fois plus grosses.
Essayez dans le simulateur
Comparez la table de vérité de la fonction avec sa version réalisée à l'aide d'un multiplexeur.
- Créez une table de vérité à trois entrées A, B, C et mettez F = 1 sur les lignes 1, 2, 6 et 7.
- Placez dans l'éditeur un multiplexeur 4 vers 1 (ou réalisez-le avec quatre AND, deux NOT et une OR à quatre entrées) et reliez A et B à la sélection.
- Reliez C, le complément de C, un 0 fixe et un 1 fixe aux entrées de données, dans cet ordre.
- Parcourez les huit combinaisons d'entrée et observez que la sortie coïncide avec la table.
- Recommencez avec le segment a de l'afficheur : saisissez sa colonne dans une table à 4 variables, marquez les lignes 10 à 15 comme X et examinez les groupes que propose le tableau de Karnaugh.
Exercices
- Réalisez F(A, B, C) = Σm(0, 3, 5, 6) avec un MUX 4 vers 1 en prenant A et B pour la sélection.
Réponse
AB = 00 : m0 = 1, m1 = 0, I0 = C. AB = 01 : m2 = 0, m3 = 1, I1 = C. AB = 10 : m4 = 0, m5 = 1, I2 = C. AB = 11 : m6 = 1, m7 = 0, I3 = C. C'est la fonction de parité paire (elle vaut 1 lorsque le nombre de uns est pair) : F = A ⊕ B ⊕ C.
- Combien de lignes de sélection faut-il à un MUX à 16 entrées, et combien de variables peut avoir au maximum la fonction qu'il réalise ?
Réponse
4 lignes de sélection (24 = 16). En reliant la variable restante aux données, il peut réaliser n'importe quelle fonction ayant jusqu'à 5 variables.
- Trouvez l'équation du segment e en utilisant les combinaisons 10 à 15 comme cas indifférents.
Réponse
e = 1 pour 0, 2, 6 et 8. Groupes : B·D (0, 2, 8, 10) et C·D (2, 6, 10, 14). Résultat : e = B·D + C·D = D·(B + C).
- Dans l'encodeur de priorité à 4 entrées, quelle sortie obtient-on pour D3 = 0, D2 = 0, D1 = 1, D0 = 1 ?
Réponse
Y1 = 0 + 0 = 0, Y0 = 0 + 1·1 = 1, V = 1. Sortie 01 : D1 l'emporte sur D0.