bitGateLab Digital · Lernen
Deutsch
Simulator öffnen

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

S1S0Y
00I0
01I1
10I2
11I3

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).

  1. Fasse die Wahrheitstabelle zu Paaren mit demselben Wert von A B zusammen und sieh dir an, wie F von C abhängt.
  2. AB = 00: m0 = 0 (C = 0), m1 = 1 (C = 1). F = C, also I0 = C.
  3. AB = 01: m2 = 1 (C = 0), m3 = 0 (C = 1). F = C, also I1 = C.
  4. AB = 10: m4 = 0, m5 = 0. I2 = 0.
  5. 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 typische 3-zu-8-Decoder der 74HC-Familie hat low-aktive Ausgänge: Der gewählte Ausgang geht auf 0 und die übrigen auf 1. In diesem Fall wird aus dem OR der Minterme nach dem De-Morgan-Gesetz ein NAND derselben Ausgänge.

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

a b c d e f g
Bezeichnung der Segmente einer 7-Segment-Anzeige.

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:

ZifferABCDabcdefg
000001111110
100010110000
200101101101
300111111001
401000110011
501011011011
601101011111
701111110000
810001111111
910011111011

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

Probiere es im Simulator aus

Vergleiche die Wahrheitstabelle der Funktion mit der Version, die mit dem Multiplexer aufgebaut ist.

  1. Lege eine Wahrheitstabelle mit drei Eingängen A, B, C an und setze F = 1 in den Zeilen 1, 2, 6 und 7.
  2. 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.
  3. Schließe C, die Negation von C, eine feste 0 und eine feste 1 in dieser Reihenfolge an die Dateneingänge an.
  4. Schalte die Eingänge durch alle acht Kombinationen und beobachte, dass der Ausgang mit der Tabelle übereinstimmt.
  5. 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

  1. 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.

  2. 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.

  3. 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).

  4. 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.