Decoder und Encoder: Eine 7-Segment-Anzeige ansteuern
Decoder übersetzen Binärwerte in One-Hot- oder Segmentausgänge, Encoder führen die Umkehrung aus. Bauen Sie einen BCD-zu-7-Segment-Treiber und lernen Sie Prioritätsencoder kennen.
Kurz gesagt: Ein aktiv-high-Binärdecoder mit Enable ordnet einen -Bit-Code einem von gesetzten Ausgängen zu; aktiv-low-Varianten kehren diese Konvention um. Ein einfacher Encoder erwartet einen One-Hot-Eingang, während ein Prioritätsencoder bei mehreren aktiven Eingängen einen Gewinner definiert. Ein BCD-zu-7-Segment-Block ist ein Codewandler und kein One-Hot-Decoder, weil mehrere Segmentausgänge gleichzeitig aktiv sein können.
Decoder und Encoder übersetzen zwischen kompakten Binärindizes und breiteren Signalgruppen. Sie erscheinen bei Adressauswahl, Instruktionssteuerung, Ereigniscodierung, Anzeige-Logik und vielen anderen Schnittstellen. Ihre Namen beschreiben die logische Richtung, aber eine vollständige Schnittstelle braucht auch Polarität, Enable-Verhalten und eine Regel für ungültige oder gleichzeitige Eingänge.
In diesem Leitfaden bauen wir einen funktionierenden BCD-zu-7-Segment-Anzeigetreiber aus booleschen Ausdrücken, unterscheiden Anzeigen mit gemeinsamer Anode und gemeinsamer Kathode, untersuchen Prioritätsencoder für Interrupts und erstellen die Schaltungen in DigiSim.
Was ist ein Decoder?
Ein Binärdecoder ist eine kombinatorische Schaltung, die einen -Bit-Eingang auf einen ausgewählten Ausgang aus bis zu Ausgängen abbildet. Im aktiv-high-Beispiel unten ist der gewählte Ausgang HIGH und alle anderen LOW. Reale Decoder-ICs besitzen oft Enable-Eingänge und können aktiv-low-Ausgänge verwenden; dann ist die ausgewählte Leitung LOW.

Ein 2-zu-4-Decoder: Der 2-Bit-Eingang wählt einen von vier Ausgängen. Der Eingang 10 (binär 2) aktiviert .
Der 2-zu-4-Decoder: Wahrheitstabelle und boolesche Ausdrücke
| 0 | 0 | 1 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 0 | 0 |
| 1 | 0 | 0 | 0 | 1 | 0 |
| 1 | 1 | 0 | 0 | 0 | 1 |
Jeder Ausgang ist eine eindeutige UND-Kombination der Eingangsvariablen, jeweils invertiert oder nicht:
Die kanonische SOP-Schaltung verwendet zwei Inverter und vier UND-Terme mit je zwei Eingängen. Ein synthetisierter ASIC oder FPGA kann dieselbe Funktion auf andere Zellen oder Lookup-Tabellen abbilden.
Auf größere Decoder skalieren
Ein 3-zu-8-Decoder folgt demselben booleschen Muster mit acht Mintermen. Allgemein enthält eine direkte SOP-Form pro Ausgang einen Minterm. Das ist eine Lehrkonstruktion und keine universelle Vorgabe für die physische Gatterzahl; größere Decoder werden meist hierarchisch aufgebaut.
Die 7-Segment-Anzeige
Eine 7-Segment-Anzeige stellt Dezimalziffern mit sieben LEDs in einer Achtform dar. Jedes Segment heißt a bis g:
━━━━━ (a)
│ │
(f) (b)
│ │
━━━━━ (g)
│ │
(e) (c)
│ │
━━━━━ (d)
Um eine Ziffer von 0 bis 9 anzuzeigen, beleuchten wir die passende Segmentkombination. Die Ziffer „7“ benötigt beispielsweise die Segmente a, b und c; d, e, f und g bleiben aus.
Gemeinsame Kathode und gemeinsame Anode
7-Segment-Anzeigen gibt es in zwei physischen Konfigurationen. Der Unterschied ist für den Treiber entscheidend:
- Gemeinsame Kathode: Alle LEDs teilen einen gemeinsamen Masseanschluss (Kathode). Ein Segment leuchtet, wenn seine Anode HIGH angesteuert wird. Die Decoder-Ausgänge sind aktiv-high: Eine logische 1 schaltet das Segment ein.
- Gemeinsame Anode: Alle LEDs teilen eine gemeinsame positive Versorgung (Anode). Ein Segment leuchtet, wenn seine Kathode LOW gezogen wird. Die Decoder-Ausgänge müssen aktiv-low sein: Eine logische 0 schaltet das Segment ein.
Die logische 7-Segment-Komponente von DigiSim verwendet aktiv-high-Segmentbefehle. Bei einer physischen Anzeige ist die Ausgangspolarität nur ein Teil der Schnittstelle: Verwenden Sie Strombegrenzung, prüfen Sie, ob der Treiber den nötigen Strom liefern oder senken kann, und beachten Sie die Leistungsgrenzen pro Segment und Gehäuse.
Wichtige Erkenntnis: Dies ist KEIN einfacher Decoder
Ein 7-Segment-Decoder unterscheidet sich grundsätzlich von einem Standard-Binärdecoder. Ein 4-zu-16-Decoder aktiviert genau EINEN Ausgang. Ein 7-Segment-Decoder aktiviert mehrere Segmente gleichzeitig – bei der Ziffer „8“ alle sieben. Es handelt sich um eine kombinatorische Schaltung mit sieben unabhängigen Ausgangsfunktionen, die jeweils aus demselben 4-Bit-BCD-Eingang abgeleitet werden.
BCD-zu-7-Segment: Wahrheitstabelle
BCD (Binary Coded Decimal) verwendet vier Bit für die Ziffern 0 bis 9. Der Decoder bildet jede Ziffer auf das passende Segmentmuster ab:
| Ziffer | a | b | c | d | e | f | g | ||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 |
| 2 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 |
| 3 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 |
| 4 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 |
| 5 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 |
| 6 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 |
| 7 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
| 8 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| 9 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
BCD-Werte 10 bis 15 gehören nicht zum Dezimalzifferncode. Ihre Anzeigemuster sind eine Systementscheidung: Definieren Sie eine leere Anzeige, ein Fehlersymbol, Hexadezimalzeichen A–F oder Don’t-Care-Verhalten entsprechend dem Vertrag.
Boolesche Ausdrücke für Segmentausgänge herleiten
Jedes der sieben Segmente besitzt eine eigene boolesche Funktion der vier BCD-Eingänge , , , . Ermitteln Sie, bei welchen Ziffern ein Segment leuchtet, schreiben Sie die Summe der Produkte oder minimieren Sie sie mit Karnaugh-Diagrammen.
Segment a (oben waagerecht)
Segment a leuchtet bei 0, 2, 3, 5, 6, 7, 8 und 9 und bleibt bei 1 und 4 aus. Die Minterme mit sind:
Nach Minimierung mit einem Karnaugh-Diagramm (BCD-Eingänge 10–15 als Don’t-Cares) ergibt sich:
Äquivalent gilt , also XNOR von und .
Segment g (Mitte waagerecht)
Segment g leuchtet bei 2, 3, 4, 5, 6, 8 und 9 und bleibt bei 0, 1 und 7 aus. Der minimierte Ausdruck ist:
Ausgeschrieben: .
Segment d (unten waagerecht)
Segment d leuchtet bei 0, 2, 3, 5, 6, 8 und 9 und bleibt bei 1, 4 und 7 aus. Der minimierte Ausdruck ist:
Die übrigen vier Segmente (b, c, e, f) werden genauso hergeleitet: Minterme auflisten, die Policy für ungültige Eingänge festlegen, das Ergebnis auf einem Karnaugh-Diagramm eintragen und einen minimierten Ausdruck ablesen. Kommerzielle Treiber der 74x47/48-Familie implementieren festgelegtes BCD-zu-Segment-Verhalten; ihre internen Netze müssen diesen Gleichungen nicht entsprechen.
Ungültige BCD-Eingänge behandeln
BCD verwendet nur 0 bis 9, ein 4-Bit-Eingang kann aber 10 bis 15 darstellen. Was soll die Anzeige für solche Werte zeigen?
- Anzeige leeren: Alle Segmente aus. Das Ergebnis ist definiert, kann aber einen Upstream-Fehler verbergen, wenn kein Diagnosepfad existiert.
- Don’t-Care behandeln: 10–15 als Optimierungsfreiheiten verwenden. Das kann die Logik vereinfachen, ist aber nur sicher, wenn diese Eingänge für die Anzeige nicht relevant werden können.
- Hexadezimal anzeigen: Für eine Hex-Anzeige bilden 10–15 auf A bis F ab; dafür werden zusätzliche Segmentmuster benötigt.
Die obigen Ausdrücke verwenden die Don’t-Care-Variante. Der spezielle BCD-zu-7-Segment-Leitfaden leitet alle sieben Funktionen her und erklärt, wann diese Annahme sicher ist.
Einen 7-Segment-Treiber in DigiSim bauen
Folgen Sie diesen Schritten für einen funktionierenden Anzeigetreiber:
- BCD-Eingänge platzieren: Fügen Sie vier
INPUT_SWITCH-Komponenten hinzu und beschriften Sie sie mit , , und . - Komplemente erzeugen: Platzieren Sie vier NICHT-Gatter für , , und .
- Segmentlogik bauen: Implementieren Sie für jedes Segment (a bis g) den booleschen Ausdruck mit UND- und ODER-Gattern. Beginnen Sie mit Segment a und dem minimierten Ausdruck oben.
- Anzeige anschließen: Platzieren Sie
SEVEN_SEGMENT_DISPLAYund verbinden Sie jeden Segmentausgang mit dem passenden Eingang. - Systematisch testen: Schalten Sie alle gültigen BCD-Werte 0000 bis 1001 durch und prüfen Sie jede angezeigte Ziffer.
Als Abkürzung können Sie die Komponente DIGIT_DISPLAY verwenden. Beim Gatteraufbau sollten Sie alle zehn gültigen Ziffern und alle sechs ungültigen Codes prüfen, statt bei einem sichtbaren Beispiel aufzuhören.
Was ist ein Encoder?
Ein Encoder führt die inverse Operation eines Decoders aus. Er nimmt Eingangsleitungen (von denen höchstens eine aktiv sein sollte) und erzeugt einen -Bit-Binärwert, der den aktiven Eingang identifiziert.
| Funktion | Decoder | Encoder |
|---|---|---|
| Richtung | Binärcode zu One-Hot | One-Hot zu Binärcode |
| Eingang | Bit | Leitungen |
| Ausgang | Leitungen | Bit |
| Beispiel | Adresse zu Speicher-Chip-Select | Tastaturtaste zu Scan-Code |
Einfacher 4-zu-2-Encoder
Ein einfacher 4-zu-2-Encoder besitzt vier Eingänge (, , , ) und zwei Ausgänge (, ). Die booleschen Ausdrücke sind:
Das funktioniert nur, wenn zu jeder Zeit genau ein Eingang aktiv ist. Sind mehrere aktiv, wird der Ausgang mehrdeutig.
Prioritätsencoder
In realen Systemen können mehrere Eingänge gleichzeitig aktiv sein. Ein Prioritätsencoder löst diese Mehrdeutigkeit, indem er nur den aktiven Eingang mit der höchsten Priorität codiert (typischerweise den höchsten Index).
| Gültig | Codierter Eingang | ||||||
|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | X | X | 0 | keiner |
| 0 | 0 | 0 | 1 | 0 | 0 | 1 | |
| 0 | 0 | 1 | X | 0 | 1 | 1 | |
| 0 | 1 | X | X | 1 | 0 | 1 | |
| 1 | X | X | X | 1 | 1 | 1 | (höchste Priorität) |
Die X-Einträge bedeuten „Don’t-Care“. Eingänge mit niedrigerer Priorität werden ignoriert, sobald ein höherer aktiv ist. Der Gültig-Ausgang zeigt, ob überhaupt ein Eingang aktiv ist – wichtig, wenn die nachgelagerte Logik „Eingang 0 aktiv“ von „kein Eingang aktiv“ unterscheiden muss.
Prioritätsencoder in der Interrupt-Behandlung
Eine wichtige Anwendung sind Interrupt-Controller. In einem Mikroprozessorsystem können mehrere Geräte (Tastatur, Netzwerkkarte, Timer, Laufwerk) gleichzeitig über Interruptleitungen die CPU anfordern.
Ein Prioritätsencoder kann die höchste zulässige Anfrage bestimmen und ihren Index ausgeben. Ein vollständiger Interrupt-Controller speichert zusätzlich wartende Ereignisse, wendet Masken und Prioritätszustand an, liefert eine protokolldefinierte Interrupt-ID oder einen Vektor, verfolgt die Bearbeitung und bewahrt nicht ausgewählte Anfragen. Ein zustandsloser Encoder kann Anfragen niedriger Priorität allein nicht halten.
Der Intel 8259A ist ein historisches Beispiel für einen Controller, der Anfrage, Maske, In-Service-Zustand, Prioritätsauflösung und Vektorerzeugung verbindet. Das gesamte Gerät auf einen 8-Eingangs-Encoder zu reduzieren, würde seine Zustandsfunktionen verfehlen.
Einen 3-zu-8-Decoder in DigiSim bauen
So entsteht ein vollständiger 3-zu-8-Decoder:
- Eingänge platzieren: Fügen Sie drei
INPUT_SWITCH-Komponenten mit den Bezeichnungen , und hinzu. - Komplemente erzeugen: Platzieren Sie drei NICHT-Gatter für , und .
- UND-Array bauen: Platzieren Sie acht 3-Eingangs-UND-Gatter. Jedes erhält eine eindeutige Kombination aus ursprünglichen und invertierten Eingängen:
- … und so weiter bis …
- Ausgänge hinzufügen: Verbinden Sie jeden UND-Ausgang mit einer
OUTPUT_LIGHT. Beim Umschalten der Eingänge sollte immer genau eine Lampe leuchten. - Enable ergänzen (optional): Verknüpfen Sie jeden Ausgang mit einem Enable-Signal, um einen aktivierbaren Decoder für die Speicheradressierung zu erhalten.
Anwendungen
Speicheradressdecodierung
In Prozessorsystemen helfen Decoder bei der Auswahl des Speicher- oder I/O-Ziels für eine Adresse. Ein 2-zu-4-Decoder an zwei oberen Adressbits kann einen Bereich in vier gleich große Zweierpotenz-Regionen teilen. Weitere Adressbits und Zugriffsqualifikationen sind für zusätzliche Abbildungen nötig. Teilen Ziele einen Tristate-Bus, muss die Bussteuerung höchstens einen aktivierten Ausgang sicherstellen; viele moderne On-Chip-Verbindungen verwenden statt interner Tristate-Leitungen multiplexierte Antworten.
Tastaturcodierung
Eine gescannte Tastenmatrix liefert Zeilen- und Spaltenbeobachtungen. Ein Prioritätsencoder kann mehrere aktive Spalten absichtlich auf einen Index reduzieren, verliert dann aber andere gleichzeitig gedrückte Tasten. Für echtes Multi-Key-Rollover muss der vollständige Matrixzustand bewahrt und verarbeitet werden. Elektrisches Ghosting, Entprellung, Scan-Code-Erzeugung und Priorität sind getrennte Probleme.
Anzeigesysteme
BCD-zu-7-Segment-Wandlung kommt in Uhren, Messgeräten, Haushaltsgeräten und Anzeigetafeln vor. Bei einer multiplexierten Anzeige teilen sich mehrere Stellen den Segmenttreiber. Der Controller präsentiert ein Muster, aktiviert die passende Stelle und fährt dann fort. Wählen Sie Bild- und Stellenfrequenzen nach Flimmern, Kamera, Helligkeit, Tastgrad und Gerätegrenzen; es gibt keine universelle 1-kHz-Schwelle. Fügen Sie Blankings ein, wenn Treiber- und Stellenverzögerungen sonst Geistersegmente erzeugen.
Instruktionsdecodierung in CPUs
In einer kleinen Lehr-CPU kann ein 4-Bit-Opcode einen 4-zu-16-Decoder speisen, dessen ausgewählte Leitung während des Fetch-Decode-Execute-Zyklus zu ALU-, Register- und Speichersteuerung beiträgt. Reale Instruktionsdecoder können hierarchisch, tabellengesteuert, mikroprogrammiert oder verteilt sein; Steuersignale verbinden Opcodeinformationen normalerweise mit Zeit- und weiteren Instruktionsfeldern.
Timing und Hazards
Kombinatorische Ausgänge ändern sich nicht gleichzeitig. Wenn mehrere Eingangsbits wechseln, kann ein Mintermdecoder wegen unterschiedlicher Verzögerungen kurz den alten Ausgang, keinen Ausgang oder in physischer Hardware einen unbeabsichtigten Ausgang auswählen. Ein 7-Segment-Netz kann vorübergehend ein Übergangsmuster anzeigen.
Verwenden Sie registrierte Ein- oder Ausgänge, wenn der Verbraucher synchron abtastet. Blanken Sie bei einer multiplexierten Anzeige während des Wechsels von Stelle und Muster, falls Ghosting relevant ist. Bei Chip-Selects und Write-Enables analysieren Sie Hazards und erfüllen die Timing-Anforderungen des Zielgeräts; verlassen Sie sich nicht allein auf eine statische Wahrheitstabelle.
Selbst ausprobieren
- 2-zu-4-Decoder bauen: Verwenden Sie vier UND-Terme mit passenden Invertern. Prüfen Sie, dass jede aktivierte Eingabekombination genau einen HIGH-Ausgang erzeugt und im deaktivierten Zustand keiner aktiv ist.
- 7-Segment-Anzeige verdrahten: Implementieren Sie die booleschen Ausdrücke mindestens für a und g selbst und verbinden Sie sie mit
SEVEN_SEGMENT_DISPLAY. - 4-zu-2-Encoder erstellen: Codieren Sie, welche von vier Tasten gedrückt wird, in einen 2-Bit-Binärwert.
- Prioritätslogik ergänzen: Lassen Sie bei zwei gleichzeitig gedrückten Tasten die Taste mit der höheren Nummer gewinnen.
- BCD-Zähler mit Anzeige bauen: Verbinden Sie einen
COUNTERmit dem 7-Segment-Decoder und beobachten Sie die automatische Folge 0 bis 9.
Fahren Sie mit Zählern und Zustandsautomaten fort, um den Decoder mit einem Zählsignal zu speisen, oder öffnen Sie die UND-Gatterreferenz – das Grundelement für jeden Decoderausgang. Multiplexer lösen das inverse Routingproblem; siehe der Multiplexer-Leitfaden.



