Digitaltechnik


Prof. Jürgen Plate

Schaltalgebra

Grundfunktionen

Im Unterschied zu analogen oder linearen Schaltungen sind logische Schaltungen zur Übertragung zweier bestimmter Signalzustände vorgesehen: "High" (H) oder logisch "EINS" (1) und "LOW" (L) oder logisch "NULL" (0). Die den beiden Zuständen zugeordneten Signalpegel sind vom Typ der verwendeten Schaltung abhängig. Wie wir noch feststellen werden, hängen sie (leider) von der Art der kommerziell erhältlichen Logik-Schaltkreise verschiedener Familien ab. Die Zuordnung der logischen Zustände ist im Prinzip willkürlich, in der Regel ist die "positivere" Spannung oder "HIGH" dem Logikzustand "EINS" und die "negativere" Spannung oder "LOW" dem Logikzustand "NULL" zugewiesen, d.h. wir verwenden positive Logik.

Die Grundverknüpfungen NICHT, UND, ODER sind die logischen Grundoperationen (Grundfunktionen). Sie sind als Axiome definiert und werden postuliert (nicht beweisbar).

Die Postulate für Konjunktion und Disjunktion zeigen Ähnlichkeit. Vertauscht man in den Postulaten von UND die Werte 0 und 1, erhält man die Postulate von ODER, und umgekehrt. Die Disjunktion bezogen auf den Wert 1 kann als Konjunktion auf den Wert 0 aufgefaßt werden und umgekehrt. Es gibt also eine Dualität von Konjunktion und Disjunktion. Daraus ergibt sich, daß die Übergänge 0 nach 1 und 1 nach 0 durch die Negation darstellbar sind und somit die Funktion ODER durch UND und NICHT nachgebildet werden kann. Erstaunlicherweise sind also nur zwei Grundfunktionen für die Darstellung aller digitaler Schaltungen ausreichend (natürlich wird es einfacher, wenn man weitere "Grundfunktionen" hinzunimmt). In diesem Text werden wegen der zur Verfügung stehenden Type die Ersatzdarstellungen für die logischen Grundfunktionen verwendet:

GrundfunktionZeichenBeispiel
Negation (NICHT) ~ !y = ~x1
Konjunktion (UND)* &y = x1 * x2
Disjunktion (ODER+y = x1 + x2

Da in Gleichungen i. a. mehrere Grundfunktionen vorkommen, gibt es auch in der Boole'schen Algebra Vorrangregeln für die Reihenfolge der Durchführung der einzelnen Operationen. Die Negation besitzt die höchste Präferenz, danach folgt die Konjunktion und schließlich die Disjunktion. Zum Beispiel:

     y = a + ~b * c   mit a=1, b=0, c=0
     y = 1 + ~0 * 0 
       = 1 +  1 * 0
       = 1 +  0
       = 1
Durch Klammerung kann die Präferenzreihenfolge verändert werden; Klammerausdrücke werden zuerst ausgewertet. Zum Beispiel:
     y = (a + ~b) * c   mit a=1, b=0, c=0
     y = (1 + ~0) * 0 
       = (1 +  1) * 0
       =    1     * 0
       = 0
Aus den logischen Grundfunktionen lassen sich beliebige Schaltfunktionen zusammensetzen. Bauen wir doch gleich einmal eine einfache Schaltung, einen digitalen Umschalter. Seine Funktion ist einfach: Wenn der Eingang "G" (Gate) der Schaltung 0 ist, soll der Eingang "A" auf den Ausgang "Q" durchgeschaltet werden, wenn G den Wert 1 besitzt, der Eingang "B". Die Wahrheitstabelle lautet demnach:

G A B Q
0 0 X 0
0 1 X 1
1 X 0 0
1 X 1 1

Die Schaltfunktion dazu:

Q = (~G * A) + (G * B)
Und die Blockschaltung:

Ein zweites Beispiel ist schon etwas komplexer. Es soll eine zweistellige Dualzahl decodiert werden; es ist ein 1-aus-4-Decoder zu bauen. Für jeden Wert der Zahl (00, 01, 10, 11) soll genau ein Ausgang einen 1-Pegel führen, alle anderen Ausgänge sind 0. Die Wahrheitstabelle:

A B Q1 Q2 Q3 Q4
0 0 1 0 0 0
0 1 0 1 0 0
1 0 0 0 1 0
1 1 0 0 0 1

Dazu gibt es vier Schaltfunktionen:

Q1 = ~A * ~B
Q2 = ~A *  B
Q3 =  A * ~B
Q4 =  A *  B
Die Blockschaltung ist natürlich auch aufwendiger als die erste:

Theoreme der Schaltalgebra

Zweck der Theoreme ist die Umformen von Ausdrücken der Schaltalgebra zur optimalen technischen Realisierung der Logikschaltungen. Sie lassen sich aus den obigen Postulaten für die Grundschaltungen herleiten. Ein Beweis kann jederzeit durch vollständiges Einsetzen der Werte 0 und 1, durch Nachprüfen mit Wahrheitstabellen oder Ableiten aus bewiesenen Theoremen geführt werden. Bis auf zwei (doppelte Negation und Satz von Shannon) gibt es zu jedem Theorem eine duale Variante. Die Theoreme sind umkehrbar eindeutig, was eine Anwendung in beiden Richtungen gestattet. Die Theoreme gelten auch ohne Einschränkung, d. h. für jede Variable kann eine Schaltfunktion (in Klammern) stehen.

1x + 0 = x x * 1 = x
2x + 1 = 1 x * 0 = 0
3 Idempotenz-Gesetzx + x = x x * x = x
4x + ~x = 1 x * ~x = 0
5 doppelte Negation~ ~x = x
6 Kommutativ-Gesetz x1 + x2 = x2 + x1 x1 * x2 = x2 * x1
7 Assioziativ-Gesetz x1 + (x2 + x3) = (x1 + x2) + x3 x1 * (x2 * x3) = (x1 * x2) * x3
8 Distributiv-Gesetz x1 * (x2 + x3) = (x1 * x2) + (x1 * x3) x1 + (x2 * x3) = (x1 + x2) * (x1 + x3)
9 Absorptionsgesetz x1 + (x1 * x2) = x1 x1 * (x1 + x2) = x1
10 x1 + (~x1 * x2) = x1 + x2 x1 * (~x1 + x2) = x1 * x2
11 Expansiosgesetz x1 = (x1 * x2) + (x1 * ~x2) x1 = (x1 + x2) * (x1 + ~x2)
12 Theoreme von de Morgan ~(x1 + x2 + x3 + ... + xn) = ~x1 * ~x2 * ~x3 * ... * ~xn ~(x1 * x2 * x3 * ... * xn) = ~x1 + ~x2 + ~x3 + ... + ~xn
13 Shannonsches Inversionstheorem ~F(x1,x2,x3,...,xn, +, *) = F(~x1,~x2,~x3,...,~xn, *, +)

Die Distributivgesetze werden vor allem in der umgekehrten Reihenfolge zum Ausklammern von Variablen oder Ausdrücken verwendet, um Schaltfunktionen zu vereinfachen.

Die de Morgan-Theoreme sind in der Praxis sehr bedeutsam, denn sie drücken die Dualität zwischen Konjunktion und Disjunktion aus. Die Disjunktion kann dementsprechend mitttels Konjunktion und Negation realisiert werden und umgekehrt. Damit reichen, wie oben schon erwähnt, zwei Grundoperationen aus, um alle Schaltfunktionen darzustellen. Andere Schreibweise (für 2 Variable):

x1 + x2 = ~(~x1 * ~x2)
x1 * x2 = ~(~x1 + ~x2)

Das Shannonsches Inversionstheorem erlaubt das Invertieren einer Schaltfunktion. Dazu ein Beispiel. Gesucht wird die Inversion der Schaltfunktion

y = (x1 * (~x2 + (x3 * x4))) + (x2 * ~x4)
Es ergibt sich auf konventiounellem Weg der Umformung:
~y = ~(x1 * (~x2 + (x3 * x4))) * ~(x2 * ~x4) =
   = (~x1 + ~(~x2 + (x3 * x4))) * (~x2 + x4) =
   = (~x1 + (x2 * ~(x3 * x4))) * (~x2 + x4) =
   = (~x1 + (x2 * (~x3 + ~x4))) * (~x2 + x4)
Vergleicht man die Ausdrücke für y und ~y, zeigt sich, daß alle Variablen invertiert sind und alle Disjunktionen durch Konjunktionen ersetzt wurden und umgekehrt. Dies ist eine allgemeingültige Regel für das Invertieren einer Schaltfunktion, eben das Shannonsches Inversionstheorem.
Achtung: Die ursprüngliche Rangfolge der Operationen muß beibehalten werden. Daher sind immer alle Ausdrücke in Klammern zu setzen, auch dort, wo diese zunächst nicht erforderlich wären. Zum Beispiel:
 y =  x1  + (x2 * ~x3) + (~x2 +  x3)
~y = ~x1 * (~x2 +  x3) * ( x2 * ~x3)
Bisher sind als Grundfunktionen mit zwei Variablen die Verknüpfungen UND und ODER bekannt. Zusammen mit der Funktion NICHT für eine Binärvariable sind alle Schaltfunktionen darstellbar. Die Auswahl dieser Grundfunktionen ist zwar willkürlich, aber wohlüberlegt. Andere Verknüpfungen sind teilweise sogar weniger aufwendig. Auch die zuvor behandelten Theoreme lassen sich für andere Grundfunktionen aufstellen. Es stellt sich also die Frage, welche weiteren Schaltfunktionen in der Praxis sinvoll sind. Es bleibt in der Regel bei folgenden Erweiterungen:

NANDNegierte UND-Verknüpfung
NORNegierte ODER-Verknüpfung
ÄQUIVALENZFunktion hat der Wert 1, wenn beide Eingänge gleich sind (auf beliebige Anzahl Eingänge erweiterbar)
ANTIVALENZ
Exklusiv-Oder, (E)XOR
Die Funktion hat den Wert 1, wenn beide Eingänge ungleich sind (auf beliebige Anzahl Eingänge erweiterbar - nur ein Eingang darf 1 sein). Negation der Äquivalenz-Funktion.
INHIBITIONDie Funktion hat den Wert 1, wenn ein Eingang 0 UND der andere Eingang 1 ist. Daher gibt es zwei Inhibitionsfunktionen.

Die Grundfunktionen NICHT, UND, ODER lassen sich durch die neuen Funktionen NAND und NOR, aber auch INHIBITION und IMPLIKATION darstellen. Die letzen beiden spielen in der Praxis jedoch keine so große Rolle. Die Realisierung mit NAND und NOR ist jedoch häufig anzutreffen. Hier werden auch von den Herstellern digitaler Schaltungen zahlreiche Gattertypen angeboten. Im Folgenden wird die Realisierung der drei Grundfunktionen durch NAND und NOR gezeigt.

Funktion Realisierung mit NAND Realisierung mit NOR
NICHT y = ~x = ~(x * x) = ~(x * 1) y = ~x = ~(x * x) = ~(x + 0)
UND y = x1 * x2 = ~ ~(x1 * x2)

y = x1 * x2 = ~(~x1 + ~x2)

ODER y = x1 + x2 = ~(~x1 * ~x2)

y = x1 + x2 = ~ ~(x1 + x2)

Normalformen von Schaltfunktionen

Bisher kennen wir drei Möglichkeiten für die Beschreibung eines Schaltnetzes: Ausgangspunkt ist in der Regel die Wahrheitstabelle (Problemdefinition), von der aus man zur Funktionsgleichung und zur Blockschaltung gelangt. Es wird nun ein einheitlicher Weg gesucht, wie man von der Wahrheitstabelle zur Funktionsgleichung gelangt, die Normalform. Eine Funktionsgleichung in Normalform kann dann möglicherweise noch vereinfacht werden. Es gibt zwei Normalformen, die mittels der bekannten Theoreme ineinander übergeführt werden können: Um zur disjunktiven Normalform zu gelangen werden alle Zeilenkombinationen der Wahrheitstabelle herausgegriffen, bei der die Ausgangsvariable den Wert 1 annimmt. Die Eingangsvariablen jeder Zeile werden in Eigenform (falls der Wert 1 ist) oder negierter Form (falls der Wert 0 ist) konjunktiv verknüpft. Die sich so ergebenden Vollkonjunktionen oder Minterme werden disjunktiv verknüpft. Zum Beispiel:
x1  x2  x3   y     Minterme
 0   0   0   0
 0   0   1   1 → (~x1 * ~x2 *  x3)
 0   1   0   1 → (~x1 *  x2 * ~x3)
 0   1   1   0
 1   0   0   1 → (x1 * ~x2 * ~x3)
 1   0   1   1 → (x1 * ~x2 *  x3)
 1   1   0   1 → (x1 *  x2 * ~x3) 
 1   1   1   0

y = (~x1 * ~x2 * x3) + (~x1 * x2 * ~x3) + (x1 * ~x2 * ~x3) +
    + (x1 * ~x2 * x3) + (x1 * x2 * ~x3) 
Um zur konjunktiven Normalform zu gelangen werden alle Zeilenkombinationen der Wahrheitstabelle herausgegriffen, bei der die Ausgangsvariable den Wert 0 annimmt (Maxterme bzw. Volldisjunktionen). Beispiel:
x1  x2  x3   y     Maxterme
 0   0   0   0 → (x1 + x2 + x3)
 0   0   1   1
 0   1   0   1
 0   1   1   0 → (x1 + ~x2 + ~x3)
 1   0   0   1
 1   0   1   1
 1   1   0   1
 1   1   1   0 → (~x1 + ~x2 + ~x3)

y = (x1 + x2 + x3) * (x1 + ~x2 + ~x3) * (~x1 + ~x2 + ~x3) 
Alternativ stellt man zuerst die disjunktive Normalform für ~y auf. Beispiel:
x1  x2  x3   y     Minterme
 0   0   0   0 → (~x1 * ~x2 * ~x3)
 0   0   1   1
 0   1   0   1
 0   1   1   0 → (~x1 * x2 * x3)
 1   0   0   1
 1   0   1   1
 1   1   0   1
 1   1   1   0 → (x1 * x2 * x3)

~y = (~x1 * ~x2 * ~x3) + (~x1 * x2 * x3) + (x1 * x2 * x3) 
Nach Negation beider Seiten erhält man mit dem Theorem von de Morgan:
y = (x1 + x2 + x3) * (x1 + ~x2 + ~x3) * (~x1 + ~x2 + ~x3) 
Disjunktive und konjunktive Normalform sind vollständig gleichwertig. Die DNF ist aus der Wahrheitstabelle leichter ablesbar und i. A. Basis für die anschließende Vereinfachung. Man kann aber auch den Ansatz wählen, daß man abhängig vom Wert der Ausgangsvariablen DNF oder KNF wählt: Die Normalformen belegen auch die folgende, in der Praxis sehr wichtige Aussage:

Jede Schaltfunktion läßt sich immer durch eine zweistufige Schaltung realisieren.

Als etwas komplexers Beispiel soll eine Binärzahl (8-2-4-1-Code) in die Anzeige für Würfelaugen umgesetzt werden. Die Würfelaugen werden nach folgendem Schema belegt:

Die Wahrheitstabelle ergibt sich dann zu:

W x3 x2 x1 a b c d e f g
1 0 0 0 0 0 0 1 0 0 0
2 0 0 1 0 1 0 0 0 1 0
3 0 1 0 0 1 0 1 0 1 0
4 0 1 1 1 1 0 0 0 1 1
5 1 0 0 1 1 0 1 0 1 1
6 1 0 1 1 1 1 0 1 1 1

Die Gleichungen für die 7 Variablen lauten dann:

a = (~x3 * x2 * x1) + (x3 * ~x2 * ~x1) + (x3 * ~x2 * x1)
b = ~(~x3 * ~x2 * ~x1)
c = (x3 * ~x2 * x1)
d = (~x3 * ~x2 * ~x1) + (~x3 * x2 * ~x1) + (x3 * ~x2 * ~x1)
e = c
f = b
g = a
Nach Vereinfachung mit den Theoremen ergibt sich:
a = (x1 * x2) + x3
b = (x3 + x2 + x1)
c = (x3 * ~x2 * x1)
d = ~x1
e = c
f = b
g = a
Was dann zur folgenden Schaltung führt:

Schaltnetze und Schaltwerke

Bisher wurden nur Schaltfunktionen mit einer Ausgangsvariablen behandelt. Man kann die bisher behandelten Prinzipien auf Binärschaltungen mit mehreren Ausgangsvariablen erweitern. Das führt dann zu sogenannten Schaltnetzen. Dies sind Digitalschaltungen, bei denen der Zustand der Ausgänge zu jedem Zeitpunkt nur vom Zustand der Eingänge zu diesem Zeitpunkt abhängt. Die Vorgeschichte spielt keine Rolle. Es sind keine Rückkopplungen oder Speicher vorhanden.

Soll die Vorgeschichte, d.h. der Zustand der Ausgänge zu einem früheren Zeitpunkt eine Rolle spielen, ist eine Erweiterung um Speicherelemente notwendig. Schaltwerke sind Digitalschaltungen, bei denen der Zustand der Ausgänge zu jedem Zeitpunkt vom Zustand der Eingänge zu diesem Zeitpunkt und endlich vielen vorausgegangenen Zuständen abhängt. Der Zustand von endlich vielen vorhergegangenen Zeitpunkten führt zu inneren Zuständen, welche die Schaltung einnimmt.

Als Speicherelemente werden in der Regel Flipflops verwendet (siehe später).

An dieser Stelle soll als Beispiel für ein Schaltnetz ein Addierer für zwei Dualzahlen behandelt werden, der unter anderem den Kern des Rechenwerks bildet. Das Ergebnis der Addition ist nicht einstellig, denn wenn beide Summanden den Wert 1 haben, wird eine zweite Stelle benötigt. Es ergeben sich also zwei Ausgangsvariablen, ein Summenbit und ein Übertragsbit:

x1x2SummeÜbertrag
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1

Aus dieser Wahrheitstabelle ist nun das Schaltnetz zu entwickeln. Es lassen sich für Summe (S) und Übertrag (Ü) zwei Schaltfunktionen aufstellen:

S = (~x1 * x2) + (x1 * ~x2) = (x1 + x2) * ~(x1 * x2)
Ü = (x1 * x2)
Die Funktionsgleichung für S kann durch Verwendung von Ü vereinfacht werden:
S = (x1 + x2) * ~Ü
Es ergibt sich dann folgende einfache Schaltung:

Will man mehrstellige Dualzahlen addieren, muß 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 zu S 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.

Beispiel: Codewandler Excess-3/BCD mittels Addierer

Zum vorhergehenden Abschnitt Zum Inhaltsverzeichnis Zum nächsten Abschnitt


Copyright © FH München, FB 04, Prof. Jürgen Plate
Letzte Aktualisierung: 30. Sep 2008