Digitaltechnik


von Prof. Jürgen Plate

6 Schaltnetze

In diesem Kapitel wird die Vorgehensweise beim Schaltungsentwurf digitaler Schaltungen erläutert. In den meisten Fällen stellt sich eine Aufgabenstellung in verbalisierter Form dar, beispielsweise die Beschreibung eines zu lösenden Problems. Aus dem Text müssen die Ein- und Ausgangsvariablen extrahiert und die logische Zuordnung von 0 und 1 fixiert werden (z. B. Schalter geschlossen = 0). Dabei sollte darauf geachtet werden, dass die Ein- und Ausgangsvariablen klar voneinander getrennt sind. Sind alle Ein- und Ausgänge definiert, wird die Wahrheitstabelle oder eine Logikgleichung erstellt, in der alle möglichen Eingangskombinationen und das resultierende Ausgangssignal eingetragen werden.

Was zeichnet ein Schaltnetz aus?

Bei einem Schaltnetz hängen die Ausgangssignale nur von den aktuell anliegenden Eingangssignalen ab. Ein Schaltnetz verhält sich zu jedem Zeitpunkt gleich. Die Werte der Eingangssignale werden nur auf irgendeine Art und Weise kombiniert, daher nennt man es auch "kombinatorische" Schaltung.

Eingangssignale → Schaltnetz → Ausgangssignale

Typische Beispiele von Schaltnetzen:

Gegenbeispiele: Anhand von Zeitdiagrammen kann man oft erkennen, dass es sich nicht um ein Schaltnetz handeln kann, z. B.:

Am Anfang ist Y = A ∧ ¬B, zu einem späteren Zeitpunkt ist ¬Y = A ∧ ¬B → kein Schaltnetz.

Im folgenden sind die wichtigsten Eigenschaften eines Schaltnetzes zusammengefasst und siw werden jenen des Schaltwerks gegenüber gestellt:

6.1 Schaltnetz-Entwurf

Der Entwurf eines Schaltnetzes gliedert sich in mehrere Ablaufschritte:
  1. Verbale Aufgabenstellung (Problembeschreibung)
  2. Festlegen der Ein- und Ausgangsvariablen.
  3. Erstellen der Wahrheitstabelle oder Umsetzen in eine Logikgleichung (ggf. Expandierung zur DNF/KNF).
  4. Vereinfachung/Umformung mittels KV-Diagramm, boolescher Algebra, QMC usw.
  5. Bestimmen der minimierten logischen Verknüpfung.
  6. Umformen der minimierten Funktionen entsprechend den praktischen Erfordernissen (z.B. NAND statt UND/ODER/NICHT.
  7. Zeichnen der Blockschaltung (Logikdiagramm)

Beispiel: Aufbau einer Wechselschaltung

Problembeschreibung:
Der Ausgangszustand ist immer dann zu ändern, wenn sich eine der Eingangsvariablen ändert und der Ruhezustand der Eingänge nicht identisch ist. Ändern sich beide Eingangsvariablen, so soll sich der Ausgangszustand nicht ändern. Weiterhin ist die Schaltung mit NAND-Gattern zu realisieren.

Festlegen der Ein- und Ausgangsvariablen und Erstellen der Wahrheitstabelle:

Bestimmen der Logikgleichung:
Aus der Wahrheitstabelle werden die Funktionen zur Bestimmung der korrekten Funktion der Schaltung ermittelt:

Z = (A ∧ ¬B) ∨ (¬A ∧ B)

Vereinfachung, Umformung:
Eine weitere Vereinfachung der Gleichung ist nicht möglich (sofort erkennbar bei Eintragen ins KV-Diagramm). Die Schaltung soll ausschliesslich mittels NAND-Gattern aufgebaut werden. Um dies zu realisieren, muss die Logikgleichung noch umgeformt werden:

Z = (A ∧ ¬B) ∨ (¬A ∧ B) = ¬ ¬[(A ∧ ¬B) ∨ (¬A ∧ B)] = ¬[¬(A ∧ ¬B) ∧ ¬(¬A ∧ B)]

Schaltungsdesign:
Mit der so entstandenen Gleichung, die nur noch aus NAND-Verknüpfungen besteht, kann die Schaltung aufgebaut werden.

Wenn man einige Minuten nachdenkt (oder auch ein paar mehr), kommt man eventuell auf eine Lösung, die mit nur vier NAND-Gatteren auskommt. Diese Lösung ist aber mit keinem Standardverfahren zu finden, sondern nur durch "Tüfteln":

Daniel Düsentrieb hat natülich gleich am Anfang gemerkt, dass hier mit viel Aufwand eine Lösung für die Realisierung einer EXOR-Verknüpfung mit NAND-Gatteren erarbeitet wurde.

Beispiel: Pseudotetradenerkennung

Problemstellung:
Bei Vorliegen einer Pseudotetade eines 8421-BCD-Codes soll am Ausgang der Schaltung eine "1" erzeugt werden. Zur Erinnerung: der BCD-Code umfasst nur die Codierung der Ziffern 0 bis 9. Von den 16 möglichen Codeworten werden also nur 10 verwendet. Die restlichen sechs Codeworte werden "Pseudotetraden" genannt.

Festlegen der Ein- und Ausgangsvariablen:
Die Eingangsvariablen x3 bis x0 entsprechen der Gewichtung 8-4-2-1. Die Ausgangsvariable y liefert das Ergebnis.

Erstellen der Wahrheitstabelle und Bestimmen der Logikgleichung:
Aus der Wahrheitstabelle wird ein KV-Diagramm mit den Einsern ausgefüllt:

Vereinfachung, Umformung:
Die Vereinfachung ergibt y = (x1 ∧ x3)(x2 ∧ x3). Hier könnte man sogar noch x3 ausklammern.

Schaltungsdesign:
Die Realisierung erfolgt als zweistufige Standardschaltung.

Beispiel: 2-aus-3-Schaltung

Problemstellung:
Bei Anlagen die einen hohen Sicherheitsstandard erfüllen, werden oft redundante Geber bzw. Sensoren eingesetzt. In diesem Fall sollen drei Sensoren überwaxht werden. Beim Auslösen von zwei der Sensoren (egal welche) soll ein Sicherheitsalarm erfolgen. Die Schaltung soll wieder ausschliesslich mit NAND-Gattern realisiert werden.

Festlegen der Ein- und Ausgangsvariablen:
Die Eingangsvariablen A, B und C entsprechen den digitalen Sensoren. Die Ausgangsvariable Z liefert das Ergebnis (Alarm).

Erstellen der Wahrheitstabelle und Bestimmen der Logikgleichung:

Die Minterme werden nun in einem KV-Diagramm eingetragen, um mögliche Vereinfachungen zu erkennen:

Daraus ergibt sich die die vereinfachten Funktionsgleichungen für die 2-aus-3- Schaltung:

Z = (A ∧ B) ∨ (A ∧ C) ∨ (B ∧ C)

Um der Aufgabenstellung gerecht zu werden, muss die Funktion in eine reine Verknüpfung aus NAND-Gattern überführt werden:

Z = ¬[¬(A ∧ B) ∧ ¬(A ∧ C) ∧ ¬(B ∧ C)]

Aufbau der Schaltung:
Im letzten Schritt kann nun die Hardware realisiert werden. Dazu werden die einzelnen Blöcke der Gleichung als Gatter an das jeweilige Eingangssignal angeschlossen.

6.2 Vergleicher-Schaltungen

In digitalen Schaltungen müssen oft Bitkombinationen oder Zahlen verglichen werden. Solche Vergleicherschaltungen haben also drei Ausgänge: Die einfachste Schaltung stellt der 1-Bit-Vergleicher dar. In der Praxis sind es aber meistens mehrstellige Zahlen, die verglichen werden müssen. Im Aufbau des 2-Bit-Vergleichers erkennt man auch den Aufbau aller mehrstelligen Vergleicher.

1-Bit-Vergleicher

Hier werden zwei 1-Bit Zahlen miteinander verglichen. Daher gibt es zwei Eingänge und drei Ausgänge.

Die Wahrheitstabelle lautet:

Aus der Wahrheitstabelle lassen sich die Logikgleichungen der drei Ausgangsvariablen direkt erschließen:

A=B: (¬a ∧ ¬B) ∨ (A ∧ B)
A>B: A ∧ ¬B
A<B: ¬A ∧ B

Das führt dann zur folgenden Schaltung:

2-Bit-Vergleicher

Mit dem 2-Bit-Vergleicher können zwei zweistellige Dualzahlen verglichen werden. Dabei stellt die Zahl (A1,A0) den ersten Operanden dar und (B1,B0) den zweiten. A0 bzw. B0 entspricht 20, A1 bzw. B1 21.

Die Wahrheitstabelle ist schon wesentlich umfangreicher. Rechts daneben stehen die KV-Diagramme für alle drei Ausgänge. Der Fall A=B läßt sich nicht vereinfachen, bei den anderen beiden Fällen lassen sich eine Vierergruppe und zwei Zweiergruppen bilden:

Aufgabe: Tragen Sie nun die Gruppen im KV-Diagramm ein und stellen Sie die Logikgleichungen auf.

Bei der Realisierung der Schaltung wird aber diesmal nicht der übliche Weg der Minimierung und Umformung beschritten, sondern es wird auf den 1-Bit-Vergleicher zurückgegriffen (Stichwort "Funktionenbündel"). Es werden die Stellen A0/B0 und A1/B1 getrennt verglichen, was zu folgenden Logikgleichungungen führt (Ausgänge der 1-Bit-Vergleicher sind in eckigen Klammern geschrieben):

A<B: [A1<B1] ∨ ( [A1=B1] ∧ [A0<B0] )
A=B: [A0=B0] ∧ [A1=B1]
A>B: [A1>B1] ∨ ( [A1=B1] ∧ [A0>B0] )

Es ergibt sich dann folgendes Schaltbild:

6.3 Codierschaltungen

Zu dieser Gruppe von Schaltnetzen gehören der Codierer (Encoder), der Decodierer (Decoder) und der Umcodierer. Gemeinsames Merkmal dieser Schaltungen ist ein- bzw. ausgangseitige Verarbeitung/Bereitstellung codierter Signale (Zeichen- bzw. Zifferncodes).

Codierer (Encoder)

Ein Codierer ist eine Binärschaltung, die eine Menge von Eingangswerten im 1-aus-n-Code in eine Menge von Ausgangswerten in einem beliebigen überführt, z. B. als Codierer bei einer Tastatur.

Beispiel: 1-aus-10-Code (x9, x8, ...x1, x0) → 8421-Code (y3, y2, y1, y0)

Das Aufstellen der Wahrheitstabelle würde sich bei 10 Eingangsvariablen zur Fleissarbeit auswachsen, denn hieraus resultiert eine Wahrheitstabelle mit 1024 Zeilen!

Jedoch ist eine starke Vereinfachung möglich, da immer nur eine Eingangsvariable den Wert "1" haben darf. Damit reduziert sich die Wahrheitstabelle auf nur zehn Zeilen. Es muss jedoch bei der Realisierung sicher gestellt werden, dass jeweils nur ein Eingang "1" ist.

Leider ist ein Minimieren nicht möglich. Somit ergeben sich die Logikgleichungen:

y3 = x8 ∨ x9
y2 = x4 ∨ x5 ∨ x6 ∨ x7
y1 = x2 ∨ x3 ∨ x6 ∨ x7
y0 = x1 ∨ x3 ∨ x5 ∨ x7 ∨ x9

Für die Schaltung werden vier ODER-Gatter mit max 5 Eingängen benötigt.

Wie schon erwähnt, besteht noch ein Problem: Bei mehreren aktive Eingängen entstehen falsche bzw. nicht zulässige Codeworte. Abhilfe schafft hier ein Prioritätscodierer mit Prioritätsreihenfolge für die Eingänge, z. B. Eingang x0 niedrigste Priorität, Eingang x9 höchste Priorität. Der Aufbau eines solchen Prioritätscodierer soll hier der Übersichtlichkeit halber an einem Beispiel mit nur vier Eingängen gezeigt werden, der folgende Eigenschaften besitzt:

Aus der Wahrheitstabelle und den KV-Diagrammen ergibt sich:

A  = x3 ∨ x2 ∨ x1 ∨ x0 (KNF)
I1 = x3 ∨ x2
I0 = x3 ∨ (¬x2 ∧ x1)

Daraus resultiert die recht einfache Schaltung:

Prioritätsencoder werden häufig in Rechnerschaltungen verwendet, wenn Ereignisse parallel auftreten und auf einzelnen Leitungen signalisiert werden, aber nicht parallel bearbeitet werden können. → Der Prioritätsencoder signalisiert dem Rechner, welches Ereignis mit höchster Priorität bearbeitet werden muss.

Decodierer (Decoder)

Ein Decodierer wandelt eine Menge von Eingangswerten in beliebigem n aus- m-Code in eine Menge von Ausgangswerten im 1-aus-n-Code um. Der Decodierer ist somit genau die Umkehrung des Codierers. Würde man einen Codierer und einen Decodierer in Reihe schalten, so entstünde an den Ausgängen des Decodierers der Code, der am Eingang des Codierers vorhanden wäre. Er findet Anwendung z. B. bei Anzeigen oder zur Adressdecodierung bei Speicherelementen.

Beispiel: BCD-8421-Code (x3,x2,x1,x0) → 1-aus-10-Code (y9,y8,...y1,y0)
Es müssen zehn Ausgangsvariable in eine Wahrheitstabelle eingetragen und minimiert werden. Vereinfachung ist auch hier möglich, da immer nur eine Ausgangsvariable den Wert "1" hat.

Wenn sichergestellt ist, dass den Pseudotetraden nicht ein anderer Code zugeordnet ist, können diese zur Vereinfachung herangezogen werden (P-Terme). Dann ergibt sich folgende Wahrheitstabelle und das daneben stehende KV-Diagramm. Die Möglichkeiten, Gruppen zu bilden sind bereits eingetragen.

Die Auswertung des KV-Diagramms führt zu folgenden Logikgleichungen:

y0 = ¬x0 ∧ ¬x1 ∧ ¬x2 ∧ ¬x3
y1 = x0 ∧ ¬x1 ∧ ¬x2 ∧ ¬x3
y2 = ¬x0 ∧ x1 ∧ ¬x2
y3 = x0 ∧ x1 ∧ ¬x2
y4 = ¬x0 ∧ ¬x1 ∧ x2
y5 = x0 ∧ ¬x1 ∧ x2
y6 = ¬x0 ∧ x1 ∧ x2
y7 = x0 ∧ x1 ∧ x2
y8 = ¬x0 ∧ x3
y9 = x0 ∧ x3

Daraus ergibt sich folgende Schaltung (nur teilweise ausgeführt):

Codewandler

Ein Codewandler, auch Umcodierer oder Codeumsetzer genannt, führt einen beliebigen n-aus-m-Code in einen anderen n-aus-m-Code über. Hierbei kann die Wortbreite des Eingangscodes unterschiedlich zu der des Ausgangscodes sein. Der kombinatorische Zusammenhang zwischen Eingangscode und Ausgangscode wird durch eine Tabelle hergestellt (z.B. Codewandler zur Anzeige einer Dualzahl mit einer 7-Segment-Anzeige).

Beispiel: Codewandler Aiken-Code(x3,x2,x1,x0) → 2-aus-5-Walking-Code(y4,y3,y2,y1,y0)

Es wird also ein vierstelliger Code in einen fünfstelligen Code umgewandelt. Die folgende Wahrheitstabelle zeigt die Zuordnung zwischen den beiden Codes.

Daraus kann man dann für y0 bis y4 die KV-Diagramme erstellen:

Es ergeben sich daraus die minmierten Logikfunktionen für y0 bis y4:

y0 = (¬x2 ∧ ¬x1) ∨ (¬x1 ∧ x0) ∨ (x3 ∧ x1 ∧ ¬x0)
y1 = (¬x2 ∧ ¬x0) ∨ (¬x3 ∧ x1) ∨ (x2 ∧ x1 ∧ x0)
y2 = (x3 ∧ ¬x2) ∨ (¬x3 ∧ x2) ∨ (¬x3 ∧ ¬x1 ∧ x0) ∨ (¬x3 ∧ x1 ∧ ¬x0)
y3 = (x2 ∧ ¬x1) ∨ (¬x3 ∧ x1 ∧ x0)
y4 = (x3 ∧ x1) ∨ (x3 ∧ ¬x0)

Erfolgt die Realisierung mit NAND-Gattern und unter Mehrfachausnutzung von gleichen Termen, ergibt sich folgende Schaltung:

Beispiel: Für einen Codewandler, der den 8421-BCD-Code in den Gray-Code umwandelt, sollen die Verknüpfungsgleichungen sowie die Schaltungsimplementierungen gefunden werden. Die Wahrheitstabelle umfasst nur zehn Zeilen, da die Pseudotetraden hier weggelassen werden können.

Sofort ins Auge fällt die Funktion O für den Ausgang: O = A. Auch die zweite Verknüpfung P = A ∨ B ist sofort aus der Wahrheitstabelle zu entnehmen. Die Funktionsgleichungen für Q und R lassen sich mittels KV-Diagrammen zu Q = C ⊕ B und R = D ⊕ C reduzieren. Wir haben es also mit einmal ODER und zweimal EXOR zu tun. Aufgrund der Tatsache, dass bei der Funktion P = A ∨ B nur entweder A oder B den Wert 1 haben, kann auch hier das EXOR verwendet werden: P = A ⊕ B. So hat man es nur mit einer Sorte Gatter zu tun. Die Schaltung ist entsprechend einfach:

Beispiel: Es soll ein Umcodierer von 8-4-2-1-BDC in den bekannten 7-Segment-Code realisiert werden. Im folgenden Bild ist die Wahrheitstabelle und die übliche Benennung der Segmente zu sehen. Bei der Anzeige handelt es sich um ein Display mit gemeinsamer Kathode, eine "1" in der Wahrheitstabelle bedeutet also, dass das entsprechende Segment leuchten soll. Bei einer Anzeige mit gemeinsamer Anode müssten die Werte für A bis G invertiert werden.

Wendet man die Tabelle an, ergibt sich das folgende Anzeigebild:

Entsprechend den sieben Segmenten sind auch sieben KV-Diagramme notwendig. Die eigentliche Minimierung sei an dieser Stelle als Übungsaufgabe zu betrachten ("p" = P-Terme, dont't care).

Beispiel: Codewandler Excess-3 ↔ BCD mittels Addierer

In diesem speziellen Fall kann man sich das Leben ganz leicht machen. Der Excess-3-Code entsteht ja durch Addition von 3 zum BCD-Code. Also nehmen wir einen 4-Bit-Addierer und stellen den einen Summanden per Verdrahtung auf "3" (0011) für den Umcodierern BCD → Excess-3 bzw. auf das Komplement für das Umcodieren in Gegenrichtung.

6.4 Multiplexer und Demultiplexer

Datenauswahlschaltungen (Multiplexer, MUX) und Datenverteilerschaltungen (Demultiplexer, DMUX) werden z. B. beim Zeitmultiplex verwendet. Abhängig von Steuersignalen wird eine Übertragungsstrecke zeitlich nacheinander verschiedenen Nutzern zur Verfügung gestellt.

Voraussetzung für eine einwandfreie Datenübertragung ist die richtige Synchronisierung der Steuersignale (Adressleitungen) von Sender und Empfänger.

Mit einem Multiplexer (Parallel-Seriell-Wandler) lassen sich parallel anliegende Daten in serielle, d. h. in zeitlich nacheinander abgegebene Daten umwandeln. Dabei werden die auf mehreren Leitungen anliegenden Daten auf einer Leitung zeitlich getrennt übertragen. Ein n-zu-1-MUX hat ld(n) Steuersignale, n Dateneingänge und einen Ausgang. Die Eingänge sind von 0 bis n-1 durchnummeriert. Es wird derjenige Eingang zum Ausgang durchgeschaltet, der die Nummer hat, die in Form einer binären Zahl an den Stuer- bzw. Adresseingängen anliegt.

Mit dem Demultiplexer (Seriell-Parallel-Wandler) werden die seriell auf einer Leitung anliegende Daten wieder auf mehrere Leitungen verteilt. Ein 1-zu-n-DEMUX hat ebenfalls ld(n) Steuersignale, einen Dateneingang und n Ausgänge, die ebenfalls 0 bis n-1 durchnummeriert sind.

Der einfachste Fall ist ein 2-zu-1-MUX (zwei Eingangssignale) und entsprechend ein 1-zu-2-DMUX (zwei Ausgänge) → ein Steuersignal nötig. Abhängig von einem Steuersignal S soll

Ohne Beschränkung der Allgemeinheit kann festgelegt werden, dass für S = 0 der Ein- oder Ausgang A ausgewählt wird und für S = 1 der Ein- oder Ausgang B. Der nicht ausgewählte Ausgang beim DMUX soll jeweils 0 sein. Die Wahrheitstabellen für beide Komponenten lauten:

Damit ergeben sich die folgenden Logikfunktionen:

Y = (¬S ∧ A) ∨ (S ∧ B)

A = ¬S ∧ E
B = S ∧ E

Woraus sich die Schaltung für Multiplexer (MUX) und Demultiplexer (DEMUX) ergibt:

Zweites Beispiel: 4-zu-1-MUX, 1-zu-4-DMUX → zwei Steuersignale nötig (S1,S0) Auch hier wird wieder willkürliche festgelegt:

Die beiden Wahrheitstabellen lauten dann wie folgt, wobei beim Multiplexer die Tabelle durch X-Terme stark verkürzt werden kann:

Die Logikfunktionen für MUX und DMUX lauten dann:

Y = (¬S1 ∧ ¬S0 ∧ A) ∨ (¬S1 ∧ S0 ∧ B) ∨ (S1 ∧ ¬S0 ∧ C) ∨ (S1 ∧ S0 ∧ D)

A = ¬S1 ∧ ¬S0 ∧ E
B = ¬S1 ∧ S0 ∧ E
C = S1 ∧ ¬S0 ∧ E
D = S1 ∧ S0 ∧ E

Die Schaltungen von MUX und DMUX sind bei vier Eingängen bzw. Ausgängen schon etwas komplexer:

Das Prinzip der Blockschaltung wird in der Digitaltechnik teilweise iterativ gehandhabt. Sobald eine häufig verwendete Schaltung aus etlichen Gattern besteht, wird nicht mehr die detaillierte Logikschaltung wiedergegeben, sondern ein vereinfachtes Blockschaltbild eingesetzt. Für die oben gezeigten Multiplexer und Demultiplexer sehen die vereinfachten Schaltbilder folgendermaßen aus:

Schlussbemerkung: Mit einem Multiplexer lassen sich auch beliebige Schaltfunktionen realisieren, indem man die die Eingangsvariablen an die Steuereingänge anschließt und die Multiplexereingänge entsprechend dem Y-Wert der Wahrheitstabelle statisch an "0" oder "1" anschließt. Im folgenden Bild ist der MUX einmal als AND und einmal als EXOR beschaltet.

6.5 Rechen-Schaltungen

Jeder Digitalrechner benötigt zur Durchführung von arithmetischen Operationen wie Addition, Subtraktion, Multiplikation, Division usw. ein sogenanntes Rechenwerk. In diesem Rechenwerk finden auch logische Operationen (z. B. Negieren sowie UND- und ODER-Verknüpfung) und Vergleiche statt, weshalb der Begriff ALU (= Arithmetic Logic Unit) für derartige Schaltungen geprägt wurde.

Gemeint sind damit Digitalschaltungen, die derartige Operationen binär vornehmen. Wie aus dem Kapitel über Zahlensysteme und Binärarithmetik geläufig, können alle arithmetischen Operationen auf die Addition zurückgeführt werden. Aus diesem Grund besitzen die Additionsschaltungen die höchste Bedeutung.

Addierer

Betrachtet man die heute gebräuchliche Wortlängen in Computern von 32 oder 64 Bit, ergibt sich für das bisher verwendete Entwurfsverfahren ein Problem: Beispielsweise hätte ein Addierwerk für zwei 32-Bit-Zahlen 65 Eingangsvariable (Zwei Operanden mit 32 Bit und den Carry-Eingang). Die Wahrheitstabelle hätte dann 265 Zeilen. Bei zwei Zeilen pro Zentimeter wird die Tabelle ca. 1,5 * 1014 km lang, was etwa 1'000'000 mal der Entfernung Erde - Sonne entspricht. → Herkömmlicher Entwurf ist nicht machbar. Die Lösung ist das Zerlegen in mehrere hintereinander geschaltete Additionen mit geringerer Wortlänge - im einfachsten Fall die Addition von zwei einstelligen Dualzahlen.

Der Halbaddierer

Eine der wichtigsten Grundschaltungen für Rechenkomponenten ist der Halbaddierer. Er ist in der Lage, die einfache Aufgabe zu lösen, die Summe S mit Übertrag C der beiden einstelligen Dualzahlen A sowie B zu bilden.

Die Wahrheitstabelle ist einfach:

   a  b   ü  s 
   0  0   0  0
   0  1   0  1
   1  0   0  1
   1  1   1  0 
Es lassen sich auch sofort die Logikgleichungen ablesen:

s = (¬a ∧ b) ∨ (a ∧ ¬b)
ü = (a ∧ b)

Die Summe entspricht also der EXOR-Verknüpfung, womit die Schaltung recht einfach wird:

Ein Nachteil des Halbaddierers besteht allerdings darin, dass die Verarbeitung eines Eingangsübertrages (z. B. von der vorhergehenden Dualstelle) nicht möglich ist. Eine folgerichtige Erweiterung des Halbaddierers stellt der Volladdierer dar. Diese Grundschaltung ermöglicht daher auch problemlos den Aufbau mehrstelliger Rechenwerke, wobei für jede zu addierende Dualstelle ein Volladdierer benötigt wird.

Volladdierer

Will man mehrstellige Dualzahlen addieren, muss das Addierschaltnetz bei jeder Stelle auch den Übertrag der vorhergehenden Stelle berücksichtigen, es kommt also eine Eingangsvariable hinzu. Der erste Gedanke wäre sicher, ein entsprechendes Schaltnetz zu entwerfen. Man kann aber auch zur Summe den Übertrag der vorhergehenden Stelle addieren, indem man einen zweiten Halbaddierer verwendet (die beiden Übertragsausgänge werden ODER-verknüpft):

Nun hat man einen Volladdierer für zwei Dualstellen. Zum Aufbau mehrstelliger Addierwerke wird lediglich der Übertrags-Ausgang einer Stelle mit dem Übertragseingang der nächsten verbunden. Nachteilig ist, dass diese Schaltung relativ aufwendig ist. Deshalb suchen wir eine einfachere Schaltung und wir beginnen wie üblich mit der Wahrheitstabelle (der Halbaddierer ist nochmals aufgeführt):

Daraus können dann die KV-Diagramme gebildet werden:

Beim Übertrag ergibt sich die Möglichkeit der Vereinfachung:
ü = (a ∧ b) ∨ (a ∧ c) ∨ (b ∧ c)

Bei der Summe scheint keine weitere Vereinfachung möglich, in Kurzschreibweise lautet die DNF s = Σ(1,2,4,7), was zur folgenden Schaltung führt:

Da sich die Standard-Vereinfachung jedoch ausschließlich auf die Verknüpfungen UND, NICHT und ODER (bzw. NAND und NOR) stützt, wir aber auch andere Typen von Verknüpfungen kennen gelernt haben, lohnt es sich, einen anderen Ansatz zu verfolgen. Schliesslich finden sich im Angebot der Hersteller auch EXOR und Äquivalenz-Gatter. Mit diesem Ansatz im Hinterkopf wird die Summenfunktion umgeformt:

s = (¬a ∧ ¬b ∧ c) ∨ (a ∧ ¬b ∧ ¬c) ∨ (a ∧ ¬b ∧ ¬c) ∨ (a ∧ b ∧ c)
s = ¬a ∧ [(¬b ∧ c) ∨ (b ∧ ¬c)] ∨ a ∧ [(¬b ∧ ¬c) ∨ (b ∧ c)]

(¬b ∧ c) ∨ (b ∧ ¬c) ist gleich (b ⊕ c) und (¬b ∧ ¬c) ∨ (b ∧ c) ist gleich ¬(b ⊕ c). Dies kann man in die Summenfunktion einsetzen:

s = [¬a ∧ (b ⊕ c)] ∨ [a ∧ ¬(b ⊕ c)]

Auch hier erkennt man eine EXOR-Funktion, womit sich die endgültige Summenfunktion ergibt:

s = a ⊕ (b ⊕ c) = a ⊕ b ⊕ c

Damit wird die Schaltung für die Summenfunktion sehr einfach:

Für die mehrstellige Addition schaltet man einfach etliche Addierer parallel (für jedes Bit des Datenwortes ein Volladdierer) und verbindet den Übertragsausgang mit dem Übertragseingang des jeweilgen "Nachbarn". Das folgende Blockschaltbild zeigt einen 4-Bit-Addierer:

Nachteil dieser Schaltung ist, dass bei Anwendung einer realen Elektronik mit entsprechenden Laufzeiten zwischen Gatterein- und Ausgang der Wert von Summe und Übertrag erst spät zur Verfügung steht. Für jede Stufe n gilt ja, dass Summe und Übertrag erst dann korrekt zur Verfügung stehen, wenn alle Stufen 0 ... n-1 davor bereits durchlaufen wurden (ripple carry). Man versucht, das durch einen höheren Schaltungsaufwand abzumildern, indem insbesondere der Übertrag "vorausschauend" ermittelt wird (carry look-ahead).

Arithmetisch-Logische Einheit (ALU)

Die ALU (Arithmetic and Logic Unit) bildet den Kern des Rechenwerks. Sie kann einfache arithmetische und logische Operationen durchführen (im wesentlichen Addition, Subtraktion, Increment, Decrement, Negieren, UND, ODER, EXOR, NEXOR (=Äquivalenz). Heute werden i. A. parallel arbeitende ALUs verwendet → Parallelrechenwerk. Kern der ALU ist ein Addierer. Der in der Regel verwendete Addierer ist ein Schaltnetz zur Addition von zwei Dualzahlen, die jeweils n Bit lang sind → n-Bit-Volladdierer. Um zwischen Addition und Subtraktion umschalten zu können, werden EXOR-Gatter vor die Eingänge gesetzt. Der zweite Eingang aller EXOR-Gatter wird mit einem gemeinsamen Steuereingang verbunden (im Bild S0 oder S1). Liegt der Steuereingang auf "0" wird das Signal unverändert durchgeleitet, liegt er dagegen auf "1" erfolgt eine Komplementierung. Für eine Subtraktion im Zweierkomplement muss dann nur noch der Carry-Eingang C0 auf "1" gesetzt werden (wegen der Zweierkomplementbildung durch Addition von 1 zum Einerkomplement). Die Tabelle links im Bild listet die Möglichkeiten der Steuereingänge auf.

Durch die Erweiterung des Paralleladdieres kann dann die ALU gebildet werden. Mit weiteren, teilweise in den Volladdierer integrierten Steuersignalen lassen sich weitere - auch stellenweise - logische Verknüpfungen realisieren. Zum Beispiel EXOR-Verknüpfung durch Abschalten des Übertrags von einer Stelle zur nächsten.

Von der Funktion her entspricht die ALU einer Anzahl verschiedener Verknüpfungsfunktionen mit je zwei n-stelligen Eingängen A und B und einem n-stelligen Ausgang F. Dabei ist jeweils immer nur eine Funktion aktiviert. Die Auswahl der Funktion erfolgt mit einem binären Steuerwort S (Steuersignale). In der ALU können auch noch weitere Funktionen integriert werden, z. B. Increment/Dekrement; es sind jedoch immer sehr einfache und grundlegende Funktionen. Es werden meist auch nicht alle der theoretisch möglichen Bitkombinationen des Steuerwortes verwendet, da nicht jede Kombination eine sinnvolle Funktion darstellt. Das folgende Blockschaltbild zeigt eine 4-Bit-ALU für Addition und Subtraktion. Die Steuerbits entstehen folgendermaßen:

Durch die Erweiterung der ALU mit UND-Gattern können die Eingänge wahlweise gesperrt werden. Der jeweils gesperrte Operand erscheint mit dem Wert 0. Auf diese Weise lässt sich der "Befehlssatz" erweitern, beispielsweise sind nun Increment/Decrement (A + 1, B + 1, A - 1, B - 1) oder die Komplementierung eines Operanden (0 - A, 0 - B, 0 - A + 1, 0 - B + 1) möglich. Da sich normalerweise am Ausgang der ALU ein Speicherelement befindet, besteht so auch die Möglichkeit dieses zu löschen (Addition von 0 + 0).

Übung: Welche Bitkombinationen müssen jeweils an die Steuereingänge C0, S0 ... S3 angelegt werden, um die oben beschriebenen Operationen vorzunehmen? Füllen Sie die folgende Tabelle aus:

Neben den Rechenfunktionen beherrschen die meisten ALUs auch logische Funktionen, die sich ebenfalls per Steuerleitungen auswählen lassen. Logische Verknüpfungen der Operanden erfolgen immer bitweise (A0 mit B0, A1 mit B1 usw.). Das folgende Bild zeigt beispielhaft eine solche Stufe für die Verknüpfungen UND, ODER, EXOR. Weitere Verknüpfungen wären möglich, wobei Invertierung (Einerkomplement) und Negation (Zweierkomplement) ja schon von der Recheneinheit übernommen werden.

Beispiel: reale ALU 74181
Diese ALU besitzt sechs Steuerleitungen (S0, S1, S2, S3, M, Cn), jeweils vier Eingangsleitungen für die Operanden A und B, vier Ausgangsleitungen für das Ergebnis der Operation sowie eine Ausgangsleitung Cn+4 für einen eventuellen Übertrag, einen Vergleichsausgang "A=B" und zwei Ausgänge P und G für die Übertragsauswertung.

Für die speziellen Ausgänge gilt:

Die Steuerleitung M unterscheidet zwischen logischen und arithmetischen Operationen, so dass sich ein Befehlssatz von insgesamt 32 (nicht in jedem Fall sinnvollen) Befehlen ergibt:

6.6 Schaltnetz-Analyse

Die Schaltnetzanalyse geht, wie der Namen schon vermuten lässt, von einer Blockschaltung (Logikdiagramm) aus und hat die Wahrheitstabelle bzw. die Schaltfunktion zum Ziel. Das Ablaufschema der Schaltnetz-Analyse beginnt mit dem Logikdiagramm: DIe Hilfvariablen erlauben es, Teile der Schaltung Schritt für Schritt zu analysieren und diese Ergebnisse dann zusammenzuführen, indem die Hilfsvariablen durch Funktionennen der Eingangswerte ersetzt werden. Man arbeitet sich dabei normalerweise vom Ausgang zu den Eingängen vor. Es kommt aber auch vor, dass man günstiger von der anderen Seite aus beginnt oder sich sogar von beiden Seiten "nach innen" arbeitet.

Unabhängig davon, ob das Ergebnis der Analyse nun eine Schaltfunktion ist, die gegebenenfalls noch zur DNF oder KNF erweitert werden muss, oder eine Wahrheitstabelle, kann aus dem Ergebnis die jeweils andere Form der Beschreibung ermittelt werden (Tabelle ↔ Schaltfunktion).

Bedauerlicherweise gibt es kein Schema oder ein Patentrezept für die Schaltnetzanalyse, hier ist immer Einfallsreichtum und Intuition gefragt.

Beispiel: Es ist folgendes Schaltnetz zu analysieren und die Schaltfunktion bzw. die Wahrheitstabelle zu ermitteln.

Im Bild sind schon drei Hilfsvariablen h1, h2 und h3 eingetragen.

  1. Verwendung von Gleichungen:
    Das Logikdiagramm wird in eine Schaltfunktion umgesetzt und in eine disjunktive oder konjunktive Form umgewandelt:

    y = ¬(h1 ∨ h2 ∨ h3) → y = ¬h1 ∧ ¬h2 ∧ ¬h3

    mit ¬h1 = a ∨ ¬b, ¬h2 = ¬a ∨ ¬c und ¬h3 = b ∨ c ergibt sich:
    y = (a ∨ ¬b) ∧ (¬a ∨ ¬c) ∧ (b ∨ c)

    Die Funktion y kann nun direkt oder über die inverse Funktion ¬y in eine Wahrheitstabelle übertragen werden:

    Daraus lassen sich dann die Schaltfunktionen leicht ablesen:
    y = Σ(1,6) = Π(0,2,3,4,5,7)

  2. Verwendung von Tabellen:
    Hier werden der Reihe nach sämtliche relevanten Signale, insbesondere auch die Hilfsvariablen, in eine Tabelle eingetragen. Es ist nützlich, die Eingangsvariablen sowohl in Eigenform als auch invertiert einzutragen - es macht die Arbeit leichter:

    Auch hier lassen sich dann die Schaltfunktionen leicht ablesen:
    y = Σ(1,6) = Π(0,2,3,4,5,7)

  3. Analyse mit Zeitdiagrammen:
    Bei einer Analyse von Schaltnetzen mit Zeitdiagrammen ermittelt man die DNF oder KNF aus dem zeitlichen Verlauf der Ausgangssignale in Abhängigkeit von den Eingangssignalen.

    Hierbei sind alle Bitkombinationen der Eingangssignale notwendig, um die DNF/KNF zu erhalten. Mit Papier und Bleistift ist dies nur bei sehr einfachen Schaltungen möglich, bei komplexeren Schaltungen ist man auf eine entsprechende Simulations-Software angewiesen.

    Beispiel: Resultat der Simulation einer Schaltung mit vier Eingangssignalen a1, a0, b1, b0 und vier Ausgangssignalen p3, p2, p1, p0:

    Aus dem Timing-Diagramm ergibt sich:

    p3(a1,a0,b1,b0) = Σ(15)
    p2(a1,a0,b1,b0) = Σ(10,11,14)
    p1(a1,a0,b1,b0) = Σ(6,7,9,11,13,14)
    p0(a1,a0,b1,b0) = Σ(5,7,13,15)

6.7 Ergänzungen

Schalter und Tasten

Schalter werden zur Eingabe von Festwerten ("0" oder "1") und zur Auswahl von Signalen verwendet. Hierbei ist in der Regel der Schaltzustand von Interesse, nicht der Zeitpunkt des Umschaltens.

Tasten dienen zum Erzeugen von (kurzen) Impulsen, hier ist der normalerweise der Zeitpunkt der Tastenbetätigung oder die Anzahl der erzeugten Impulse von Bedeutung. Wichtig ist auch, dass immer ein korrekter "0"- oder "1"-Pegel erzeugt wird. Deshalb ist ein Umschalter eher ungeeignet, denn hier sind, wenn auch nur für ganz kurze Zeit, beide Ausgänge "offen" (wenn der bewegliche Teil des Schalter gerade zwischen Ruhe- und Arbeitskontakt wechselt). Deshalb zieht man die Leitung über einen Widerstand auf z. B: "1"-Pegel und schaltet dann geben den "0"-Pegel.

Sowohl Schalter als auch Tasten "prellen". Hierunter versteht man die Eigenschaft eines Schalters oder einer Taste, beim Schließen zunächst schnell und mehrmals hintereinander den Schaltkontakt zu schließen und wieder zu öffnen. Erst wenn der Schalter oder Taster mechanisch zur Ruhe gekommen ist, ergibt sich ein stabiles Signal. Beim Öffnen von Schalter oder Taster passiert dasselbe.

Bei Schaltnetzen ergeben sich daher beim Betätigen eines Schalters oder Tasters mehfach schnell hintereinander unterschiedliche Ausgangssignale - solange, bis die Schaltung "zur Ruhe" gekommen ist. Da moderne Digitalschaltungen im Nanosekundenbereich reagieren, ist dies nicht verwunderlich. Bei Schaltwerken (mit Gedächtnis) ergeben sich daher gleich mehrere Folgezustände, was natürlich unerwünscht ist.

Daher müssen Schalter und Taster "entprellt" werden, wenn die Anzahl der Impulse von Bedeutung ist. Die hierzu verwendete "Entprellschaltung" basiert auf einem SR-Flipflop, dessen Eigenschaften erst im folgenden Kapitel erläutert werden.

LEDs und Siebensegmentanzeigen

Leuchtdioden (LEDs, Light Emitting Diodes) werden zur Anzeige einzelner Signale verwendet, mit Siebensegmentanzeigen können die Dezimalzahlen von 0 bis 9 und die Hexadezimalzahlen A bis F sowie ein Dezimalpunkt dargestellt werden. Dies ist die einfachste Form der Anzeige. Für komplexere Aufgaben werden dann alfanumerische oder grafische Displays verwendet.

LEDs

Es können sowohl "0"- als auch "1"-Pegel (bzw. "L"- und "H"-Pegfel) eines Gatterausgangs angezeigt werden. LEDs benötigen für eine ausreichende Leuchtstärke Ströme von 2 - 20 mA und gleichzeitig eine Strombegrenzung durch einen Vorwiderstand. Je nach verwendeter Logikbaustein-Familie ist auch noch eine Verstärkung der Ausgangsignale erforderlich.

Siebensegment-Anzeigen

Siebensegmentanzeigen bestehen aus acht LEDs (sieben strichförmige und eine punktförmige) mit gemeinsamer Anode oder Kathode. Die Ansteuerung erfolgt normalerweise über einen zwischengeschalteten Umcodierer, der die Dualzahlen in den 7-Segment-Code umwandelt (siehe Abschnitt "Umcodierer").

Schmitt-Trigger

Der Schmitt-Trigger ist nach seinem Erfinder Otto Schmitt benannt, der diesen 1934 noch als Student erfunden hat. Es handelt sich um eine elektronische Komparator-Schaltung, bei der die Ein- bzw. Ausschaltschwellen nicht zusammenfallen, sondern um eine bestimmte Spannung, die Schalthysterese, gegeneinander versetzt sind. Verwendet wird ein Schmitt-Trigger zur Erzeugung binärer Signale oder um eindeutige Schaltzustände aus einem analogen Eingangssignal zu erzielen.

Bausteine mit Schmitt-Trigger-Verhalten weisen am Eingang zwei definierte Schaltschwellen für die Übergänge L → H und H → L auf. Die Werte sind so gewählt, dass sich die oben erwähnte Hysterese ergibt. Hierdurch erfolgt am Ausgang ein abrupter Pegelübergang auch dann, wenn das Eingangssignal verschliffen ist, sich nur langsam ändert oder im Bereich zwischen L- und H-Pegel liegt.

Übertragungskennlinie eines Inverters mit Schmitt-Trigger-Verhalten:

Damit ergibt sich z. B. die nachfolgend dargestellte Reaktion auf ein verschliffenes Eingangssignal:

Es werden Digitalausteine angeboten, die neben logischen Verknüpfungen (UND, ODER, NAMD, NOR) auch fest implementierte Schmitt-Trigger enthalten. Innerhalb der Schaltungen werden sie meistens mit einem Hysteresesymbol gekennzeichnet und können anstelle gleichartiger Bausteine ohne Triggerwirkung eingesetzt werden.

Außerdem kann mittels Schmitt-Trigger auch ein Taktgenerator aufgebaut werden, siehe Kapitel "Takterzeugung, astabile Schaltungen". Des weiteren kann ein Schmitt-Trigger verwendet wewrden, um bei Schaltwerken eine Einschalt-Normierung (Reset) vorzunehmen. Dazu wird der Eingang mit einem RC-Glied beschaltet wie im Bild. Beim Einschalten ist der Kondensator entladen und demzufolge der Eingang des Schmitt-Triggers auf L. Mit zunhmender Aufladung des Kondensators wird irgendwann die Triggerschwelle erreicht und der Ausgang des Schmitt-Triggers wechselt seinen Zustand, der dann bis zum Abschalten erhalten bleibt.

6.8 Übungen

Aufgaben

  1. Entwerfen Sie eine Schaltung, die zwei zweistellige Dualzahlen a = (a1,a0) und b = (b1,b0) auf die Bedingungen a > b, a = b und a < b überprüft.
    Die Ausgänge u, v und w sollen "1" sein, wenn die jeweilige Bedingung erfüllt ist. Geben Sie eine nur aus NAND-Gattern aufgebaute Schaltung an, die sich mit möglichst geringem Aufwand realisieren läßt.

  2. Entwerfen Sie einen Prioritätscodierer, der den 1-aus-10 Code in den Exzeß-3-Code umwandelt. Höchste Priorität: Eingang x9, niedrigste Priorität: Eingang x0.

  3. Entwerfen Sie ein möglichst aufwandsarmes Schaltnetz in zweistufiger NAND-Technik zur Umsetzung des Exzeß-3-Codes in den 8421-Code. Die Pseudotetraden des Exzeß-3-Codes können nicht auftreten.

  4. Beschreiben Sie die folgende verbal definierte logische Funktion durch eine schaltalgebraische Gleichung und zeichen Sie ein Logik-Diagramm:

    Herr Meier fährt mit seinem Auto, wenn er den Zündschlüssel hat UND wenn Benzin im Tank ist UND wenn er NICHT zuviel Alkohol getrunken hat UND wenn er zur Bank ODER ins Büro muss ODER wenn er NICHT zuhause bleiben will.

  5. Das Motorschütz eines Aufzugsantriebs soll nur eingeschaltet werden dürfen, wenn folgende Bedingungen erfüllt sind (Variblennamen in Klammern): Außerdem hat der Aufzug zwei Betriebsarten: In beiden Betriebsarten muss, damit der Aufzug fährt, entweder ein Befehl zur Aufwärtsfahrt (O) oder zur Abwärtsfahrt (U) gegeben worden sein.

    Geben Sie die Schaltfunktion zum Einschalten des Motorschützes an und minimieren Sie diese anschließend.

  6. Analysieren Sie das nachfolgend dargestellte Schaltnetz. Geben Sie die Wahrheitstabelle sowie die DNF und KNF der Funktion y an.

Lösungen




  1. Y = Herr Meier fährt mit seinem Auto
    A = er hat den Zündschlüssel
    B = Benzin ist im Tank
    C = er hat zuviel Alkohol getrunken
    D = er muss zur Bank
    E = er muss ins Büro
    F = er will zuhause bleiben

    Y = A ∧ B ∧ ¬C ∧ (D ∨ E ∨ ¬F)

  2. Motor im Normalbetrieb:
    M1 = T ∧ S ∧ ¬H ∧ ¬B ∧ ¬L ∧ (O ∨ U)

    Motor im Revisionsbetrieb:
    M2 = T ∧ ¬H ∧ ¬B ∧ ¬L ∧ (O ∨ U)

    → M = (M1 ∧ N) ∨ (M2 ∧ R)

    "Ausklammern" von [T ∧ ¬H ∧ ¬B ∧ ¬L ∧ (O ∨ U)] ergibt:
    M = [(N ∧ S) ∨ R] ∧ T ∧ ¬H ∧ ¬B ∧ ¬L ∧ (O ∨ U)

  3. y(a,b,c) = Σ(0,1,3,5) = Π(2,4,6,7)

Zum vorhergehenden Abschnitt Zum Inhaltsverzeichnis Zum nächsten Abschnitt


Copyright © Hochschule München, FK 04, Prof. Jürgen Plate
Letzte Aktualisierung: