Lernen › Thema 8
Multiplexer, Decoder und Encoder verständlich erklärt
8 Min. Lesezeit · bitGateLab-Team
Die mittelgroßen kombinatorischen Bausteine sind die Teile, aus denen fast jedes digitale System aufgebaut wird: Der Multiplexer wählt einen Datenwert aus mehreren aus, der Demultiplexer verteilt einen Datenwert an ein Ziel, der Decoder aktiviert abhängig von einer Binärzahl genau eine Leitung, und der Encoder macht das Gegenteil. Hier siehst du ihre Gleichungen, ihre Wahrheitstabellen und zwei Anwendungen, die in jeder Prüfung vorkommen: eine logische Funktion mit einem Multiplexer zu realisieren und einen Decoder für eine 7-Segment-Anzeige zu entwerfen.
Der Multiplexer (MUX)
Ein Multiplexer mit 2n Dateneingängen hat n Auswahleingänge und einen Ausgang. Die Binärzahl an den Auswahlleitungen bestimmt, welcher Dateneingang zum Ausgang durchgeschaltet wird. Der einfachste ist der 2-zu-1-MUX:
Y = S·I0 + S·I1
Mit S = 0 übernimmt der Ausgang I0; mit S = 1 übernimmt er I1. Der 4-zu-1-MUX verwendet zwei Auswahlleitungen S1 S0, und jeder Dateneingang wird mit dem zugehörigen Minterm der Auswahlsignale multipliziert:
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 |
Jeder Term ist ein AND des Dateneingangs mit den Auswahlleitungen (direkt oder negiert), und alle werden in einem OR zusammengeführt.
Eine Funktion mit einem MUX realisieren
Da der MUX bereits alle Minterme seiner Auswahlvariablen enthält, eignet er sich als „programmierbare Funktion“. Mit einem MUX mit 2n Eingängen kannst du jede Funktion von n Variablen realisieren, indem du an jeden Dateneingang 0 oder 1 legst. Noch besser: Mit demselben MUX lässt sich eine Funktion von n + 1 Variablen realisieren, wenn du die übrige Variable (oder ihre Negation) an die Dateneingänge anschließt.
Beispiel: Realisiere F(A, B, C) = Σm(1, 2, 6, 7) mit einem 4-zu-1-MUX und verwende A und B als Auswahlsignale (A = S1, B = S0).
- Fasse die Wahrheitstabelle zu Paaren mit demselben Wert von A B zusammen und sieh dir an, wie F von C abhängt.
- AB = 00: m0 = 0 (C = 0), m1 = 1 (C = 1). F = C, also I0 = C.
- AB = 01: m2 = 1 (C = 0), m3 = 0 (C = 1). F = C, also I1 = C.
- AB = 10: m4 = 0, m5 = 0. I2 = 0.
- AB = 11: m6 = 1, m7 = 1. I3 = 1.
Probe mit A = 0, B = 1, C = 0 (Minterm 2): Die Auswahl 01 wählt I1 = C = 1. Richtig, m2 gehört zur Funktion.
Demultiplexer und Decoder
Der 1-zu-4-Demultiplexer (DEMUX) nimmt einen Datenwert D und leitet ihn abhängig von S1 S0 an einen von vier Ausgängen; die übrigen bleiben auf 0: Y0 = D·S1·S0, Y1 = D·S1·S0, Y2 = D·S1·S0, Y3 = D·S1·S0.
Legst du beim DEMUX D fest auf 1 und nennst diesen Eingang „Freigabe“ (Enable), erhältst du einen Decoder: n Eingänge und 2n Ausgänge, von denen nur einer aktiv ist, nämlich der, der zur Zahl am Eingang gehört. Ein 3-zu-8-Decoder erzeugt die 8 Minterme von drei Variablen. Deshalb lässt sich jede Funktion von drei Variablen mit einem Decoder und einem OR-Gatter aufbauen, das die Ausgänge ihrer Minterme zusammenführt.
Beispiel: Volladdierer mit einem 3-zu-8-Decoder. Eingänge A, B und Cin.
- Summe S = Σm(1, 2, 4, 7): OR mit 4 Eingängen an den Ausgängen Y1, Y2, Y4, Y7.
- Übertrag Cout = Σm(3, 5, 6, 7): OR mit 4 Eingängen an Y3, Y5, Y6, Y7.
Prüfe einen Fall: A = 1, B = 1, Cin = 0 ist die Zahl 110 = 6. Nur Y6 wird aktiv; Y6 liegt nicht am OR von S (S = 0), wohl aber am OR von Cout (Cout = 1). Tatsächlich ist 1 + 1 + 0 = 10 im Binärsystem.
Der Prioritätsencoder
Der Encoder führt die umgekehrte Operation aus: Aus 2n Leitungen liefert er die n-Bit-Binärzahl der aktiven Leitung. Das Problem ist, was geschehen soll, wenn zwei gleichzeitig aktiv sind; die praktische Lösung ist der Prioritätsencoder, der die Nummer der höchsten aktiven Leitung liefert. Für 4 Eingänge D3 (höchste Priorität) bis D0:
Y1 = D3 + D2, Y0 = D3 + D2·D1, V = D3 + D2 + D1 + D0
Der Ausgang V („valid“, gültig) zeigt an, dass mindestens ein Eingang aktiv ist; ohne ihn könntest du „D0 aktiv“ nicht von „keiner aktiv“ unterscheiden, weil beide Y1 Y0 = 00 ergeben. Probiere es mit D2 = D1 = 1: Y1 = 1 und Y0 = 0 + 0·1 = 0, also 10 = 2. D2 gewinnt, wie es sein soll.
BCD-zu-7-Segment-Decoder
Eine 7-Segment-Anzeige hat eine LED pro Segment. Der Decoder erhält eine BCD-Ziffer (A B C D, mit A als höchstwertigem Bit) und schaltet die Segmente ein, die diese Ziffer darstellen. Bei einer Anzeige mit gemeinsamer Kathode bedeutet 1, dass das Segment leuchtet:
| Ziffer | 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 |
Die Codes 1010 bis 1111 sind keine gültigen BCD-Werte, deshalb behandelt man sie im Karnaugh-Diagramm als Don't-Care-Bedingungen (X). Das vereinfacht jedes Segment erheblich.
Segment a: Es ist nur bei den Ziffern 1 und 4 gleich 0. Im Diagramm für 4 Variablen, mit X bei 10 bis 15, sind die größten Blöcke: A (8 Felder mit den X), C (8 Felder), B·D (Minterme 5, 7, 13, 15) und B·D (die vier Ecken: 0, 2, 8, 10).
a = A + C + B·D + B·D
Prüfe die 4 (0100): A = 0, C = 0, B·D = 1·0 = 0, B·D = 0·1 = 0. Ergebnis 0: Das Segment a bleibt dunkel, richtig.
Hat die Anzeige eine gemeinsame Anode, leuchtet jedes Segment bei 0, alle Ausgänge werden also invertiert.
Häufige Fehler
- Die Reihenfolge der Auswahlleitungen zu vertauschen: Werden S1 und S0 gekreuzt, tauschen die Eingänge I1 und I2 ihre Plätze, und die Funktion ist falsch.
- Zu vergessen, dass viele Decoder low-aktive Ausgänge haben, und ein OR zu verwenden, wo ein NAND hingehört.
- Einen Encoder ohne Priorität und ohne Gültig-Ausgang zu entwerfen, der sowohl bei „D0 aktiv“ als auch bei „nichts aktiv“ 00 liefert.
- Die Tabelle für gemeinsame Kathode mit einer Anzeige mit gemeinsamer Anode zu kombinieren: Dann leuchten genau die falschen Segmente.
- Die Kombinationen 1010 bis 1111 nicht als Don't-Cares zu nutzen und am Ende doppelt so große Gleichungen zu erhalten.
Probiere es im Simulator aus
Vergleiche die Wahrheitstabelle der Funktion mit der Version, die mit dem Multiplexer aufgebaut ist.
- Lege eine Wahrheitstabelle mit drei Eingängen A, B, C an und setze F = 1 in den Zeilen 1, 2, 6 und 7.
- Platziere im Editor einen 4-zu-1-Multiplexer (oder baue ihn aus vier AND, zwei NOT und einem OR mit vier Eingängen auf) und verbinde A und B mit den Auswahleingängen.
- Schließe C, die Negation von C, eine feste 0 und eine feste 1 in dieser Reihenfolge an die Dateneingänge an.
- Schalte die Eingänge durch alle acht Kombinationen und beobachte, dass der Ausgang mit der Tabelle übereinstimmt.
- Wiederhole das mit dem Segment a der Anzeige: Trage seine Spalte in eine Tabelle mit 4 Variablen ein, markiere die Zeilen 10 bis 15 als X und sieh dir die Blöcke an, die das Karnaugh-Diagramm vorschlägt.
Übungen
- Realisiere F(A, B, C) = Σm(0, 3, 5, 6) mit einem 4-zu-1-MUX und verwende A und B als Auswahlsignale.
Lösung
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. Das ist die Funktion für gerade Parität (sie ist 1, wenn eine gerade Anzahl von Einsen anliegt): F = A ⊕ B ⊕ C.
- Wie viele Auswahlleitungen braucht ein MUX mit 16 Eingängen, und wie viele Variablen darf die damit realisierte Funktion höchstens haben?
Lösung
4 Auswahlleitungen (24 = 16). Schließt man die übrige Variable an die Dateneingänge an, lässt sich jede Funktion von bis zu 5 Variablen realisieren.
- Bestimme die Gleichung des Segments e und nutze die Kombinationen 10 bis 15 als Don't-Cares.
Lösung
e = 1 bei 0, 2, 6 und 8. Blöcke: B·D (0, 2, 8, 10) und C·D (2, 6, 10, 14). Ergebnis: e = B·D + C·D = D·(B + C).
- Welchen Ausgang liefert der Prioritätsencoder mit 4 Eingängen bei D3 = 0, D2 = 0, D1 = 1, D0 = 1?
Lösung
Y1 = 0 + 0 = 0, Y0 = 0 + 1·1 = 1, V = 1. Ausgang 01: D1 gewinnt gegen D0.