Die Komponenten des von Neumann Rechners: elektrotechnische Grundlagen

Der Abschnitt behandelt die für den von Neumann-Rechner, insbesondere den Prozessor, relevanten elektrotechnischen Grundlagen: Einführung in die Digitaltechnik, Transistoren, Schaltnetze und Schaltwerke.

Einordnung des Artikels

Elektrotechnische Grundlagen

Aufgaben

Die folgenden Aufgaben sollen einen Eindruck vermitteln, welche Themen in dem theoretisch anmutenden Kapitel besprochen werden und welche Probleme sich damit lösen lassen.

1. Erkennen von Übertragungsfehlern:

Eine dreistellige Dualzahl soll übertragen werden; zusätzlich wird das führende Bit als Kontroll-Bit eingesetzt und immer so gesetzt, dass insgesamt eine gerade Anzahl von Einsen übertragen wird. Nach der Übertragung soll festgestellt werden, ob das Kontroll-Bit richtig gesetzt ist (1 = true, 0 = false).

2. Auslösen von Warnsignalen:

4 Temperaturmessfühler sollen nach bestimmten Regeln einen Alarm auslösen können; Dazu wird für jeden Fühler ein Schwellenwert festgelegt. Über zwei Steuerleitungen (s1 s0) können die Zahlen 0, 1, 2, 3 als Dualzahl übertragen werden. Das durch die Steuerleitungen übertragene Signal legt die Regeln fest, wann ein Alarm ausgelöst wird:

Geben Sie hierfür die logische Tabelle und die Realisierung als Schaltung an!

3. Multiplikation ganzer Zahlen:

Zwei vierstellige Dualzahlen sollen multipliziert werden.

Entwerfen Sie eine Schaltung, die dies ausführen kann!

4. Taschenrechner für ganze Zahlen:

Dem Taschenrechner sollen zwei vierstellige Dualzahlen eingegeben werden können. Durch Steuerleitungen soll eine der Rechenoperationen

ausgeführt werden.

Entwerfen Sie eine Schaltung, die dies ausführen kann!

Digitaltechnik, Schaltnetze und Schaltwerke

Untersucht man Schaltungen mit kontinuierlichen Zuständen für Spannungen und Ströme, spricht man von Analogtechnik. Als Beispiel diene ein Ohmscher Widerstand R, an den eine Spannung U angelegt wird, die in einem Intervall, etwa von 0 V bis 5 V, variieren kann. Der Strom durch den Widerstand I = U/R variiert dann ebenfalls in einem Intervall. Beide Größen U und I können kontinuierliche Werte annehmen.

Der Begriff Digitaltechnik soll von Analogtechnik abgrenzen und bedeutet, dass nur zwei diskrete Zustände betrachtet werden, die als H (high) und L (low) oder 1 und 0 bezeichnet werden. Sie können auch als Wahrheitswerte interpretiert werden: 1 = true, 0 = false. Da es technisch extrem schwierig ist, einen exakten Spannungswert (oder Stromwert) einzustellen, wird je ein Intervall auf die Zustände 0 und 1 abgebildet; etwa eine Spannung zwischen 0 V und 0,4 V auf den Zustand 0 und eine Spannung zwischen 2,4 V und 2,9 V auf den Zustand 1. (Eine andere Realisierung wäre: 0 - 1,5 V entspricht 0 und 3,5 - 5 V entspricht 1, diese Realisierung ist in Abbildung 2 dargestellt.) Spannungen, die nicht in den Intervallen liegen, führen zu einem undefinierten Zustand — beim regulären Betrieb der betrachteten Schaltungen dürfen sie nicht vorkommen. Arbeiten Schaltungen mit identischen Spannungspegeln, sind sie beliebig miteinander kombinierbar — man spricht dann von Logikfamilien.

Abbildung 2: Die Zustände high und low als Spannungsintervalle.Abbildung 2: Die Zustände high und low als Spannungsintervalle.

Die Begriffe Schaltnetz und Schaltwerk werden in der Umgangssprache kaum voneinander getrennt; in der Digitaltechnik sind sie scharf voneinander abgegrenzt: Man spricht von Schaltnetzen, wenn nur Schaltungen verwendet werden, bei denen die Eingabewerte eindeutig den Ausgabewert (oder die Ausgabewerte) bestimmen. Man spricht auch von kombinatorischer Logik (Combinational Circuits). Die bereits betrachteten logischen Schaltungen fallen unter diese Kategorie.

Wird zusätzlich mindestens ein Bauteil in die Schaltung aufgenommen, das einen oder mehrere Werte speichern kann, spricht man von einem Schaltwerk oder einer sequentiellen Schaltung (Sequential Circuits); der Ausgabewert hängt jetzt von den Eingabewerten und dem gespeicherten Wert ab. Die einfachsten Speicher sind Flip-Flops, die später erklärt werden.

Transistoren

Einteilung der Transistoren

Bei den logischen Schaltungen wurden die Eingabewerte durch Schalterstellungen repräsentiert. Diese Schalter sind natürlich nicht — wie dort gezeichnet — als mechanische Schalter realisiert sondern durch Transistoren. Bei den ersten Computern wurden Röhren eingesetzt, die eine nahezu identische Kennlinie besitzen wie Transistoren (siehe weiter unten); allerdings haben sie deutlich höhere thermische Leistungen und schalten sehr viel langsamer. An der Kennlinie kann man erkennen, dass sowohl Röhren als auch Transistoren als Verstärker oder als Schalter einsetzbar sind.

Ein Transistor besteht immer aus zwei Halbleiter-Grenzschichten. Der Name Transistor ist ein Kunstwort aus transfer resistor, was etwa bedeuten soll, dass der die Veränderung des Widerstandes an einer Grenzschicht zur anderen Grenzschicht übertragen wird, kurz kann man auf deutsch auch steuerbarer Widerstand sagen.

Man unterscheidet bipolare Transistoren und unipolare Transistoren. Bei bipolaren Transistoren sind sowohl positive als auch negative Ladungsträger am Ladungstransport beteiligt, beim unipolaren Transistor immer nur eine Ladungsart (also entweder die negativen Elektronen oder die positiven Löcher).

Abbildung 3: Einteilung von Transistoren in unipolare und bipolare Transistoren sowie deren weitere Unterteilung. Bei den bipolaren Transistoren wird zusätzlich angegeben, wie die dotierten Schichten angeordnet sind: npn- oder pnp-Transistor. Die unipolaren Transistoren werden im Text näher erläutert.Abbildung 3: Einteilung von Transistoren in unipolare und bipolare Transistoren sowie deren weitere Unterteilung. Bei den bipolaren Transistoren wird zusätzlich angegeben, wie die dotierten Schichten angeordnet sind: npn- oder pnp-Transistor. Die unipolaren Transistoren werden im Text näher erläutert.

Die bipolaren Transistoren werden durch einen Strom gesteuert (Basisstrom IB). Die unipolaren Transistoren werden durch eine Spannung gesteuert; da dies gleichbedeutend ist mit einem elektrischen Feld, nennt man sie auch Feldeffekt-Transistoren (FET).

Bei den Bipolar-Transistoren muss man unterscheiden, in welcher Reihenfolge die Halbleiterschichten angeordnet sind: sie heißen npn- und pnp-Transistor (siehe Abbildung 4 und 5).

Die unipolaren Transistoren (oder Feldeffekt-Transistoren) werden ebenfalls in 2 Gruppen eingeteilt: man spricht von Sperrschicht-FET (JFET, J = junction) oder Isolierschicht-FET (IG-FET, IG = isoliertes Gate). Da die Isolierschicht heute fast immer aus Siliziumdioxid ist, werden sie auch als MOS-FET bezeichnet (MOS = metal oxide semiconductor).

Für den Einsatz im Computer als Schalter eignen sich vor allem die Feldeffekt-Transistoren. Dies liegt daran, dass sie über die Spannung gesteuert werden und einen nahezu unendlich hohen Eingangswiderstand besitzen. Daher ist der Stromfluss fast gleich null und es wird fast keine Leistung umgesetzt. Für jeden Prozessor besteht das Problem, dass Wärme abgeführt werden muss; durch den Einsatz von Feldeffekt-Transistoren wird zumindest die Wärmeentwicklung in den Schaltern minimiert.

Bipolar-Transistoren

Der Aufbau eines Bipolartransistors ist in den Abbildungen 4 (npn-Transistor) und 5 (pnp-Transistor) zu sehen. Die Anschlüsse werden bezeichnet:

Abbildung 4: Der npn-Transistor. Links: Der Aufbau mit den drei dotierten Halbleiterschichten und den Bezeichnungen B=Basis, E=Emitter, C=Kollektor. Mitte: Das Schaltzeichen für den npn-Transistor. Rechts: Sein Ersatzschaltbild mit zwei Dioden.Abbildung 4: Der npn-Transistor. Links: Der Aufbau mit den drei dotierten Halbleiterschichten und den Bezeichnungen B = Basis, E = Emitter, C = Kollektor. Mitte: Das Schaltzeichen für den npn-Transistor. Rechts: Sein Ersatzschaltbild mit zwei Dioden.

Abbildung 5: Der pnp-Transistor. Links: Der Aufbau mit den drei dotierten Halbleiterschichten. Mitte: Das Schaltzeichen für den pnp-Transistor. Rechts: Sein Ersatzschaltbild mit zwei Dioden.Abbildung 5: Der pnp-Transistor. Links: Der Aufbau mit den drei dotierten Halbleiterschichten. Mitte: Das Schaltzeichen für den pnp-Transistor. Rechts: Sein Ersatzschaltbild mit zwei Dioden.

Feldeffekt-Transistoren

Beim Bipolartransistor wird der Widerstand der Kollektor-Emitter-Strecke gesteuert (über den Basisstrom IB). Beim Feldeffekt-Transistor wird der zu steuernde Widerstand als Kanal bezeichnet, er besitzt die Anschlüsse S (source = Quelle) und D (drain = Senke, Abfluss). Der Kanal ist nicht mit der Steuer-Elektrode G (gate = Tor oder Gatter) leitend verbunden.

Der Kanal ist entweder als n-leitend oder p-leitend ausgeführt — im Unterschied zum Bipolartransistor ist also nur eine Ladungsart am Leitungsmechanismus beteiligt. Zudem gibt es zwei Möglichkeiten, wie der leitende Kanal vom Gate getrennt werden kann:

Abbildung 6: Links: Aufbau eines n-leitenden Feldeffekt-Transistors. Die beiden p-leitenden Gebiete (Gate G) sind auf gleichem Potential (äußere leitende Verbindung). Je nachdem ob es sich um einen JFET oder einen MOS-FET handelt wird der n-Kanal durch eine Sperrschicht oder durch eine äußere Spannung von G isoliert. Rechts: Schaltzeichen eines Sperrschicht-Feldeffekt-Transistors (JFET).Abbildung 6: Links: Aufbau eines n-leitenden Feldeffekt-Transistors. Die beiden p-leitenden Gebiete (Gate G) sind auf gleichem Potential (äußere leitende Verbindung). Je nachdem ob es sich um einen JFET oder einen MOS-FET handelt wird der n-Kanal durch eine Sperrschicht oder durch eine äußere Spannung von G isoliert. Rechts: Schaltzeichen eines Sperrschicht-Feldeffekt-Transistors (JFET).

Der Transistor als Schalter

Für den Einsatz im Computer als Schalter eignen sich vor allem die Feldeffekt-Transistoren. Dies liegt daran, dass sie über die Spannung gesteuert werden und einen nahezu unendlich hohen Eingangswiderstand besitzen. Daher ist der Stromfluss fast gleich null und es wird fast keine Leistung umgesetzt. Für jeden Prozessor besteht das Problem, dass Wärme abgeführt werden muss; durch den Einsatz von Feldeffekt-Transistoren wird zumindest die Wärmeentwicklung in den Schaltern minimiert.

Abbildung 7: Links: Idealer Schalter, mit dem gesteuert werden kann, ob durch den Widerstand R ein Strom fließt (Schalter ein) oder nicht (Schalter aus). Dazu steht eine Versorgungsspannung U=5 V bereit. Mitte und rechts: Der Schalter wird durch einen Transistor realisiert und wieder wird der Strom durch den Widerstand R ein- oder ausgeschaltet. Die Versorgungsspannung beträgt ebenfalls 5 V. Mitte: Realisierung mit einem Bipolartransistor. Der Schalter wird durch den Basisstrom IB gesteuert. Rechts: Realisierung mit einem Feldeffekt-Transistor; hier wird der Schalter über die Spannung UGS (Spannung zwischen gate G und source S) gesteuert. Wie die Steuerung des Transistors erfolgt, ist nur mit Hilfe des Kennlinienfeldes verständlich.Abbildung 7: Links: Idealer Schalter, mit dem gesteuert werden kann, ob durch den Widerstand R ein Strom fließt (Schalter ein) oder nicht (Schalter aus). Dazu steht eine Versorgungsspannung U = 5 V bereit. Mitte und rechts: Der Schalter wird durch einen Transistor realisiert und wieder wird der Strom durch den Widerstand R ein- oder ausgeschaltet. Die Versorgungsspannung beträgt ebenfalls 5 V. Mitte: Realisierung mit einem Bipolartransistor. Der Schalter wird durch den Basisstrom IB gesteuert. Rechts: Realisierung mit einem Feldeffekt-Transistor; hier wird der Schalter über die Spannung UGS (Spannung zwischen gate G und source S) gesteuert. Wie die Steuerung des Transistors erfolgt, ist nur mit Hilfe des Kennlinienfeldes verständlich.

Um zu verstehen, wie ein Transistor als Schalter eingesetzt werden kann, werden zunächst die Eigenschaften eines idealen Schalters genannt (siehe Abbildung 7 links):

Abbildung 7 zeigt (mitte) einen Bipolartransistor und (rechts) einen Feldeffekt-Transistor, wie er als Schalter genutzt werden kann. Der Unterschied zwischen den beiden besteht nur darin, dass beim Bipolartransistor der Strom IB als Steuergröße wirkt, beim Feldeffekt-Transistor die Spannung UGS. Die Schaltungen mit Transistoren wirken auf den ersten Blick recht kompliziert. Oben wurde gesagt, dass man einen Transistor auch als steuerbaren Widerstand bezeichnen könnte. Wie Transistoren als Schalter eingesetzt werden, ist leichter verständlich, wenn man zunächst in Abbildung 7 den idealen Schalter durch einen variablen Widerstand Rx ersetzt, der Werte zwischen null und unendlich annehmen kann. Dieser ist in Abbildung 8 gezeigt.

Abbildung 8: Links: Der Schalter aus Abbildung 7 wurde durch einen variablen Widerstand Rx ersetzt. Mitte: Rx=0 entspricht dem Zustand ein, ist Rx gleich unendlich, entspricht dies dem Zustand aus. Rechts: Lässt man so Rx alle möglichen Werte durchlaufen, ergibt sich die Kennlinie, die die beiden Schaltzustände als Gerade verbindet. Werden die Spannungspegel für high und low nicht erreicht, erhält man einen undefinierten Zustand.Abbildung 8: Links: Der Schalter aus Abbildung 7 wurde durch einen variablen Widerstand Rx ersetzt. Mitte: Rx = 0 entspricht dem Zustand ein, ist Rx gleich unendlich, entspricht dies dem Zustand aus. Rechts: Lässt man so Rx alle möglichen Werte durchlaufen, ergibt sich die Kennlinie, die die beiden Schaltzustände als Gerade verbindet. Werden die Spannungspegel für high und low nicht erreicht, erhält man einen undefinierten Zustand.

Man hat wie beim idealen Schalter die beiden Grenzfälle und weitere Zwischenzustände:

Trägt man die drei besprochenen Zustände in einem Diagramm auf, das Spannung und Strom am Schalter zeigt (hier also der variable Widerstand Rx), so erhält man die drei Punkte in Abbildung 8 mitte. Variiert man nun Rx im Bereich von null bis unendlich, so erhält man als Kennlinie des Schalters die Gerade in Abbildung 8 rechts.

Anstelle des variablen Widerstandes Rx wird nun ein Transistor (wie in Abbildung 7) eingesetzt. Genauer gesagt entspricht die Kollektor-Emitter-Strecke dem variablen Widerstand (beim Bipolartransistor) und der Anschluss an die Basis dient der Steuerung.

Abbildung 9: Qualitative Darstellung des Kennlinienfeldes eines Bipolartransistors. Eine Kennlinie wird für einen speziellen Wert des Steuerstromes (Basisstrom) IB aufgenommen. Legt man nun an die Schaltung aus Abbildung 7 (links) eine Spannung von 5 V an, so ergibt sich der Arbeitspunkt indem man die Gerade, die man beim variablen Widerstand diskutiert hat mit der Kennlinie schneidet. (Da es sich um eine qualitative Darstellung handelt, sind die Einheiten hier willkürlich gewählt: sind etwa auf der x-Achse Volt und auf der y-Achse mA aufgetragen, so hat der Widerstand R den Wert 1000 Ohm.)Abbildung 9: Qualitative Darstellung des Kennlinienfeldes eines Bipolartransistors. Eine Kennlinie wird für einen speziellen Wert des Steuerstromes (Basisstrom) IB aufgenommen. Legt man nun an die Schaltung aus Abbildung 7 (links) eine Spannung von 5 V an, so ergibt sich der Arbeitspunkt indem man die Gerade, die man beim variablen Widerstand diskutiert hat mit der Kennlinie schneidet. (Da es sich um eine qualitative Darstellung handelt, sind die Einheiten hier willkürlich gewählt: sind etwa auf der x-Achse Volt und auf der y-Achse mA aufgetragen, so hat der Widerstand R den Wert 1000 Ohm.)

Die Erklärung erfolgt hier für den Bipolartransistor — für den Feldeffekt-Transistor ist sie etwas schwieriger.

Abbildung 9 zeigt das Kennlinienfeld des Bipolartransistors, in dem der Kollektorstrom IC gegen die Spannung UCE (Spannung zwischen Kollektor und Emitter) aufgetragen ist. Eine Kennlinie wird für einen festen Wert des Basisstromes IB aufgenommen. Die Kennlinie ähnelt der einer idealen Stromquelle: der Strom ist nahezu konstant — unabhängig davon, welche Spannung anliegt. Das heißt aber, dass — außer bei sehr kleinen Spannungen UCE — der (kleine) Basisstrom in einen (großen) Kollektorstrom verwandelt wird und der Verstärkungsfaktor nahezu konstant ist. Damit besteht aber die Möglichkeit, den Kollektorstrom über den Basisstrom zu steuern. Denn ist der Basisstrom unterhalb einer gewissen Schwelle IB0, so ist der Kollektorstrom auch unterhalb einer Schwelle IK0 (Zustand aus); ist der Basisstrom oberhalb einer gewissen Schwelle IB1, so ist der Kollektorstrom auch oberhalb einer Schwelle IK1 (Zustand ein).

Schaltnetze

Schaltnetze wurden oben als Schaltungen bezeichnet, bei denen die Eingabewerte eindeutig die Ausgabewerte bestimmen. Schaltungen, die Werte speichern können, fallen nicht in diese Kategorie. Genauer muss man zwischen Schaltfunktionen und Schaltnetzen unterscheiden: Eine Schaltfunktion besitzt genau einen Ausgabewert, ein Schaltnetz beliebig viele Ausgabewerte. Dargestellt werden sie wieder als angedeutete black box, siehe folgende Abbildung.

Abbildung 10: Schaltfunktion und Schaltnetz als black box. Man beachte, dass das Schaltnetz n Eingabewerte und m Ausgabewerte besitzt, wobei n im Allgemeinen nicht mit m übereinstimmt.Abbildung 10: Schaltfunktion und Schaltnetz als black box. Man beachte, dass das Schaltnetz n Eingabewerte und m Ausgabewerte besitzt, wobei n im Allgemeinen nicht mit m übereinstimmt.

Die bereits besprochenen logischen Funktionen kann man auch als Schaltfunktionen bezeichnen. Weiter unten werden dann auch relevante Beispiele für Schaltnetze behandelt.

Grundschaltungen

Die beiden folgenden Aussagen wirken eher abstrakt und nichtssagend, haben aber — auch für die Praxis — wichtige Konsequenzen:

1. Bedeutung der Schaltfunktionen AND, OR und NOT:

Jede Schaltfunktion und jedes Schaltnetz kann aus den drei Grundschaltungen AND, OR und NOT aufgebaut werden.

2. Bedeutung der Schaltfunktionen NAND und XOR:

Jede Schaltfunktion und jedes Schaltnetz kann aus den zwei Grundschaltungen NAND und XOR aufgebaut werden.

Die zweite Aussage ist für die Praxis sogar relevanter, da sich NAND- und XOR-Schaltungen in der sogenannten CMOS-Technik leichter realisieren lassen.

Der Beweis dieser Aussagen erfolgt in der Booleschen Algebra, die die Gesetze der logischen Funktionen untersucht.

Für die Praxis sind die Aussagen deshalb relevant, weil sie ein Design-Prinzip für komplexe Schaltungen ermöglichen: Man überlegt sich zunächst, welche Schaltfunktion oder welches Schaltnetz (für eine gegebene Anwendung) hilfreich wäre und formuliert sie etwa als Logiktabelle. Die Boolesche Algebra liefert Verfahren, wie man ein gegebenes Schaltnetz auf die Grundschaltungen zurückführen kann — und damit kann man die Schaltung realisieren.

Die folgenden Beispiele sollen einen Einblick geben, wie dieses Design-Prinzip arbeitet.

Spezielle Schaltfunktionen und Schaltnetze

Besprochen werden hier:

  1. Die Identität als Schaltfunktion
  2. AND und OR mit mehreren Eingabewerten
  3. Codierer und Decodierer
  4. Multiplexer und Demultiplexer
  5. Komparator
  6. Arithmetik-Schaltungen
  7. Inkrementierer und Zähler
  8. Programmierbare Logikbausteine (PLD)

Im Detail:

1. Die Identität als Schaltfunktion:

Bei den Booleschen Funktionen wurde die Identität nicht ausdrücklich diskutiert: sie gibt einfach nur den Eingabewert als Ausgabewert weiter und wird deswegen auch als Treiber (driver) bezeichnet; je nach Zusammenhang auch als Puffer (buffer).

Warum hat sie dennoch eine Bedeutung als Schaltfunktion und wird jetzt sogar zu einem Schaltnetz mit n Eingängen und n Ausgängen verallgemeinert? Als logische Funktion ist die Identität trivial — sie verändert die Signale nicht. Physikalisch gesehen spielt die Identität aber eine wichtige Rolle: Im Lauf der Zeit sinken womöglich die Spannungspegel in einer Schaltung und sie müssen wieder aufgefrischt werden (sonst entsteht ein undefinierter Zustand). Das heißt die Identität wird als Verstärker eingesetzt — ist aber logisch gesehen die identische Abbildung.

Die Identität kann auch als echter Verstärker eingesetzt werden, wenn zum Beispiel ein Signal als Steuersignal für ein anderes Gerät verwendet werden muss, das einen deutlich höheren Pegel als high erwartet.

Abbildung 11 zeigt die Identität als Schaltnetz mit n Eingängen und n Ausgängen: Identität heißt hier, dass yi = xi für alle i = 1,...,n.

Abbildung 11: Die Identität als Schaltnetz mit n Eingängen und n Ausgängen.Abbildung 11: Die Identität als Schaltnetz mit n Eingängen und n Ausgängen.

Aufgabe:

Verwandt mit der Identität ist der sogenannte Schmitt-Trigger.

2. AND und OR mit mehreren Eingabewerten:

Die logischen Funktionen AND und OR können für beliebig viele Eingabewerte verallgemeinert werden. Sie besitzen dann immer noch einen Ausgabewert — es handelt sich also um Schaltfunktionen. Für drei Eingabewerte zeigt die folgende Tabelle die Ausgabewerte.

Abbildung 12: Die Schaltfunktionen AND und OR verallgemeinert für drei Eingabewerte. Darunter die zugehörigen Schaltzeichen.Abbildung 12: Die Schaltfunktionen AND und OR verallgemeinert für drei Eingabewerte. Darunter die zugehörigen Schaltzeichen.

Aufgabe:

  1. Wie kann man die logischen Funktionen AND und OR (jetzt mit drei Eingabewerten) auf die logischen Funktionen mit zwei Eingabewerten zurückführen?
  2. Wie sehen die Logiktabelle und diese Zurückführung bei n Eingabewerten aus?
  3. Diskutieren Sie: Wie lassen sich die Funktionen NAND, NOR, XOR auf beliebig viele Eingabewerte verallgemeinern? Wie lauten die zugehörigen logischen Tabellen?

3. Codierer und Decodierer

Viele Maschinensprache-Befehle sind reine Kopierbefehle oder sie sind aus einem Kopierbefehl und anderen Befehlen zusammengesetzt. Man muss also oft auf eine Speicherzelle mit gegebener Adresse zugreifen, dies erledigt der Adress-Decodierer. Oder man erhält ein Signal aus einer bestimmten Speicherzelle und muss mit der Adresse dieser Speicherzelle weiterrechnen: Adress-Codierer.

Zur Erinnerung: Mit einer n-stelligen Dualzahl lassen sich 2n verschiedene Zahlen darstellen, nämlich die Zahlen 0, 1, 2,..., 2n-1. (Für die Zahl 2n benötigt man schon eine Stelle mehr.) Verwendet man die Dualzahlen um Speicherzellen zu adressieren, so lassen sich mit Hilfe von n-stelligen Adressen (n Bits) 2n Adressen angeben; die Adressen werden aber meist mit 1, 2,..., 2n durchgezählt).

Auf diesen Eigenschaften beruhen der Decodierer (decoder) und Codierer (coder). Die folgende Abbildung zeigt den Adress-Decodierer mit 2 Eingängen und 4 Ausgängen. Dabei ergibt sich aber eine Schwierigkeit: Bisher wurden die Eingänge (nahezu wahllos) mit x1,...,xn durchnumeriert. Sollen die Eingabewerte aber eine Dualzahl zusammensetzen, kommt es auf die Reihenfolge an, wie die Bits gelesen werden — genau das ist der Clou eines Stellenwertsystems. Im Folgenden wird daher die Konvention verwendet: Soll eine Menge von Ein- oder Ausgabewerten als Dualzahl interpretiert werden, gibt der Index die Potenz an, die im Stellenwertsystem verwendet wird. Eine dreistellige Dualzahl wird man dann als x2 x1 x0 schreiben, x0 steht für die Einer, x1 für die Zweier, x2 für die Vierer.

Abbildung 13: Der Adress-Decodierer: Die beiden Eingabewerte x1 x0 stehen für eine zweistellige Dualzahl. Es stehen vier Ausgänge zur Verfügung, mit denen eine von vier Speicherzellen angesprochen werden kann. Je nachdem welche Dualzahl eingegeben wird, wird die zugehörige Speicherzelle angesprochen.Abbildung 13: Der Adress-Decodierer: Die beiden Eingabewerte x1 x0 stehen für eine zweistellige Dualzahl. Es stehen vier Ausgänge zur Verfügung, mit denen eine von vier Speicherzellen angesprochen werden kann. Je nachdem welche Dualzahl eingegeben wird, wird die zugehörige Speicherzelle angesprochen.

Aufgabe:

Stellen Sie den Schaltzustand eines 3/8-Adress-Decodierers dar, der die siebte (von acht) Speicherzellen anspricht.

Achtung: Hinter dieser Aufgabe verbirgt sich einer der häufigsten Programmierfehler: Man bildet eine Liste (oder einen Vektor) von n Objekten und vergisst, ob man die Liste mit 0, 1,..., n-1 oder 1, 2,..., n durchnumeriert hat.

Mit den Ausgängen müssen nicht Speicherzellen angesprochen werden, die Schaltung kann natürlich auch dafür verwendet werden, eine Dualzahl (in Abbildung 13: ein Eingabewert mit 2 Stellen) in einen beliebigen Code umzuwandeln. Daher nennt man die Schaltung allgemein Decodierer. (Man kann sich den Decodierer auch so vorstellen: Ein Adress-Decodierer gibt eine Adresse an und dort steht, wie der Eingabewert zu übersetzen ist.)

Aufgabe:

Überprüfen Sie, ob die Schaltung in Abbildung 14 tatsächlich die logische Tabelle des 2/4 Adress-Decodierers erfüllt!

Abbildung 14: Die Schaltung, die den Adress-Decodierer realisiert - aufgebaut aus NOT und AND.Abbildung 14: Die Schaltung, die den Adress-Decodierer realisiert - aufgebaut aus NOT und AND.

Werden Eingang und Ausgang des Decodierers vertauscht, spricht man von einem Codierer. Am leichtesten vorzustellen ist wieder der Adress-Codierer: Jetzt besitzt der Eingang 2n Eingabewerte (Signal, das aus einer von 2n Speicherzellen kommt) und am Ausgang wird die zugehörige Adresse erzeugt (als n-stellige Dualzahl). Man muss aber eine Einschränkung auferlegen: Unter den 2n Eingabewerten muss sich genau eine 1 befinden — andernfalls ist der Ausgabewert nicht definiert; oder man vereinbart, dass die erste vorkommende 1 codiert wird.

Die folgende Abbildung 15 zeigt einen 4/2 Adress-Codierer und einen speziellen Zustand des 8/3 Adress-Codierers.

Abbildung 15: Links: Der 4/2 Adress-Codierer mit 4 Eingängen und 2 Ausgängen. Rechts: Der 8/3 Adress-Codierer, bei dem der 5. Eingang angesprochen wird. Da die Eingänge aber von 0 ausgehend gezählt werden, entspricht dies der Dualzahl 100=4 (die möglichen Adressen laufen von 0 bis 7).Abbildung 15: Links: Der 4/2 Adress-Codierer mit 4 Eingängen und 2 Ausgängen. Rechts: Der 8/3 Adress-Codierer, bei dem der 5. Eingang angesprochen wird. Da die Eingänge aber von 0 ausgehend gezählt werden, entspricht dies der Dualzahl 100 = 4 (die möglichen Adressen laufen von 0 bis 7).

4. Multiplexer und Demultiplexer

Der elementare Multiplexer realisiert die Alternative, die in jeder Programmiersprache vorkommt:

IF (Bedingung)
    THEN Anweisung
    ELSE Anweisung

In der einfachsten Form sind die Anweisungen lediglich 2 Bits x0 und x1, beim Multiplexer sind dies die beiden Eingänge. Die Bedingung (condition) ist eine weitere Steuerleitung, die in der symbolischen Darstellung von den Eingängen unterschieden wird. Der Multiplexer besitzt dann einen Ausgang y, für den gelten soll:

Abbildung 16: Links: Der mechanische Umschalter, der dem Multiplexer entspricht; mit ihm kann eine von zwei Möglichkeiten ausgewählt werden, durch welche Leitung der Strom fließt. Mitte: Der Multiplexer mit 2 Eingängen (x0 und x1) und einer Steuerleitung c. Rechts: Die logische Tabelle für den Multiplexer.Abbildung 16: Links: Der mechanische Umschalter, der dem Multiplexer entspricht; mit ihm kann eine von zwei Möglichkeiten ausgewählt werden, durch welche Leitung der Strom fließt. Mitte: Der Multiplexer mit 2 Eingängen (x0 und x1) und einer Steuerleitung c. Rechts: Die logische Tabelle für den Multiplexer.

Man kann sich den Multiplexer am einfachsten so vorstellen: je nachdem, welche Bedingung gesetzt ist (c = 1 oder c = 0) wird das Eingabe-Signal x0 oder x1 durchgelassen. Die folgende Abbildung zeigt die Schaltung des Multiplexers.

Abbildung 17: Die Schaltung des Multiplexers zurückgeführt auf die Grundschaltungen AND, OR (>= 1) und NOT.Abbildung 17: Die Schaltung des Multiplexers zurückgeführt auf die Grundschaltungen AND, OR (>= 1) und NOT.

Aufgabe:

Überprüfen Sie, ob die Schaltung in Abbildung 17 die logische Tabelle des Multiplexers erfüllt!

Mit dem elementaren Multiplexer wird mit Hilfe einer Bedingung eine aus zwei Alternativen ausgewählt. Naheliegend ist es, den Multiplexer zu verallgemeinern:

Das heißt: der allgemeine Multiplexer verfügt über n Steuerleitungen (für die n Bedingungen) und jeweils 2n Eingänge und Ausgänge. Und je nachdem welche Bedingungen gesetzt sind, wird einer der 2n Eingänge an den Ausgang durchgereicht. Man nennt dies den 2n : 1 Multiplexer.

Da man sich bei der Anzahl der Eingänge nicht auf Zahlen der Form 2n festlegen möchte, kann man auch den N:1 Multiplexer anbieten. Um die Anzahl n seiner Steuerleitungen zu berechnen muss man die auf N folgende Zahl der Form 2n suchen — wer mit dem Logarithmus vertraut ist, kann dies in zwei eindeutigen Rechenschritten erledigen.

Für die Schaltung des 2n : 1 Multiplexers muss man nicht viel überlegen: Da man die Auswahl zwischen 4 Alternativen auf zwei mal zwei Alternativen zurückführen kann, kann man die Schaltung des 4:1 Multiplexers auf mehrere 2:1 Multiplexer zurückführen, siehe Abbildung 18 — das Verfahren kann dann für größere Zahlen wiederholt werden.

Abbildung 18: Die Zurückführung des 4:1 Multiplexers auf drei 2:1 Multiplexer.Abbildung 18: Die Zurückführung des 4:1 Multiplexers auf drei 2:1 Multiplexer.

Ausgehend von der einfachen Alternative wurde der 2:1 Multiplexer zur Realisierung der Mehrfachalternative zum n:1 Multiplexer verallgemeinert. Bei beiden wird ein Bit durchgereicht; die Auswahl des durchgereichten Bits erfolgt mit Hilfe der Bedingungen, die in den Steuerleitungen kodiert sind. Es kann dann nicht schwer sein, den Multiplexer in die andere Richtung zu verallgemeinern: anstelle eines Bits soll ein Wort (mit Wortbreite m) durchgereicht werden. Der Multiplexer besitzt anstelle von n Eingängen n · m Eingänge und m Ausgänge; er wird als (n · m) : m Multiplexer bezeichnet. Ein Beispiel mit Wortbreite 4 zeigt die folgende Abbildung.

Abbildung 19: Ein (n · m) : m Multiplexer mit m=4 (Wortbreite) und n=8. Er besitzt also insgesamt 32 Eingänge, 3 Steuerleitungen und 4 Ausgänge. Seine Arbeitsweise sollte man so interpretieren: Am Eingang kommen 8 Worte (der Länge 4 Bits) an, von denen eines ausgewählt wird und an den Ausgang durchgereicht wird.Abbildung 19: Ein (n · m) : m Multiplexer mit m = 4 (Wortbreite) und n = 8. Er besitzt also insgesamt 32 Eingänge, 3 Steuerleitungen und 4 Ausgänge. Seine Arbeitsweise sollte man so interpretieren: Am Eingang kommen 8 Worte (der Länge 4 Bits) an, von denen eines ausgewählt wird und an den Ausgang durchgereicht wird.

So wie der Codierer zum Decodierer umgedreht werden kann, wird aus dem Multiplexer der Demultiplexer, indem man Eingang und Ausgang miteinander vertauscht. Abbildung 20 zeigt den 1:8 Demultiplexer. Je nachdem welche Bedingung gesetzt ist (Steuerleitungen) wird der Eingabewert an die entsprechende Stelle der Ausgabe durchgereicht; die anderen Stellen der Ausgabe werden 0 gesetzt. Alle besprochenen Verallgemeinerungen können natürlich auf den Demultiplexer übertragen werden.

Abbildung 20: Das Gegenstück zum 8:1 Multiplexer (links) ist der 1:8 Demultiplexer (rechts): es werden lediglich Ein- und Ausgänge vertauscht.Abbildung 20: Das Gegenstück zum 8:1 Multiplexer (links) ist der 1:8 Demultiplexer (rechts): es werden lediglich Ein- und Ausgänge vertauscht.

Anwendung des Demultiplexers: Verbindet man in Abbildung 20 den Ausgang y des Multiplexers mit dem Eingang x des Demultiplexers und legt an beide Bauteile identische Steuersignale (c2 c1 c0) an, so wird einfach nur ein Bit vom Eingang ganz links zum Ausgang ganz rechts durchgereicht. Wozu kann das gut sein? Mit dieser Anordnung wird eine parallele Übertragung in eine serielle Übertragung verwandelt — bei großen Wortbreiten kann man dadurch Leitungen einsparen.

Aufgaben:

1. Wieviele Leitungen benötigt man, wenn 64 Bits seriell mit Hilfe eines Multiplexer/Demultiplexers übertragen werden? 2. Worin liegen die Vor- und Nachteile, wenn eine parallele Übertragung in eine serielle Übertragung umgewandelt wird?

Lösungen:

1. Für die parallele Übertragung von 64 Bits benötigt man offensichtlich 64 Leitungen.

Bei serieller Übertragung mit einem Multiplexer/Demultiplexer benötigt man 6 Steuerleitungen (da 26 = 64) und eine Leitung, die Multiplexer und Demultiplexer verbindet, also insgesamt nur 7 Leitungen.

2. Vorteile der parallelen Übertragung:

Vorteil der seriellen Übertragung:

5. Komparator:

Der einfache Komparator (oder 1-Bit-Komparator) vergleicht zwei Dualzahlen und hat einen Ausgabewert; dieser ist gleich 1 ist, wenn die Zahlen gleich sind. Somit realisiert er die logische Funktion XNOR (Äquivalenz).

Abbildung 21: Der einfache Komparator (oder 1-Bit-Komparator), der zwei Dualzahlen vergleicht. Links: Die zugehörige logische Tabelle. Rechts: Das Schaltzeichen des einfachen Komparators.Abbildung 21: Der einfache Komparator (oder 1-Bit-Komparator), der zwei Dualzahlen vergleicht. Links: Die zugehörige logische Tabelle. Rechts: Das Schaltzeichen des einfachen Komparators.

Der 1-Bit-Komparator kann leicht zum n-Bit-Komparator verallgemeinert werden: er hat 2n Eingänge, die für die beiden n-stelligen Dualzahlen x0 und x1 stehen, und einen Ausgang. Der Ausgabewert gibt wieder an, ob x0 und x1 gleich sind oder nicht.

Der Universalkomparator hat zwei Bits x0 und x1 als Eingabewerte und drei Ausgänge. Es wird derjenige Ausgabewert auf 1 gesetzt, der den Fall beschreibt:

Abbildung 22: Der Universalkomparator, der zwei Bits vergleicht. Links: Die zugehörige logische Tabelle. Rechts: Das Schaltzeichen des Universalkomparators.Abbildung 22: Der Universalkomparator, der zwei Bits vergleicht. Links: Die zugehörige logische Tabelle. Rechts: Das Schaltzeichen des Universalkomparators.

Durch Zusammenschalten von n Universalkomparatoren erhält man den Vergleich von zwei n-stelligen Dualzahlen a und b — wieder mit den drei Ausgängen:

6. Arithmetik-Schaltungen

Aufgaben: 1. Halb-Addierer:

Zwei einstellige (positive) Dualzahlen x0 und x1 sollen addiert werden. Geben Sie dazu die logische Tabelle an! Was unterscheidet die Operation x0 + x1 von den Booleschen Funktionen (wie AND, OR, NAND und so weiter)?

2. Voll-Addierer:

Zwei vierstellige (positive) Dualzahlen sollen addiert werden. Kann die Addition auf die Addition einstelliger Dualzahlen zurückgeführt werden oder ist sie komplexer?

Lösungen:

1. Halb-Addierer: Addition von 2 einstelligen (positiven) Dualzahlen.

Das Problem der Addition ist, dass das Ergebnis entweder einstellig oder zweistellig ist. Die Booleschen Funktionen wie AND hatten zwei Eingabewerte und einen Ausgabewert.

Abbildung 23: Links: Logische Tabelle des Halb-Addierers. Man beachte, dass eine Stelle nicht ausreicht, um das Ergebnis anzugeben. Mitte: Schaltzeichen des Halb-Addierers. Rechts: Realisierung des Halb-Addierers durch XOR uns AND. Der Übertrag sollte als solcher kenntlich gemacht werden (etwa durch die Bezeichnung cout oder nur c).Abbildung 23: Links: Logische Tabelle des Halb-Addierers. Man beachte, dass eine Stelle nicht ausreicht, um das Ergebnis anzugeben. Mitte: Schaltzeichen des Halb-Addierers. Rechts: Realisierung des Halb-Addierers durch XOR uns AND. Der Übertrag sollte als solcher kenntlich gemacht werden (etwa durch die Bezeichnung cout oder nur c).

Abbildung 23 zeigt die logische Tabelle der Addition zweier einstelliger Zahlen. Für das Ergebnis müssen zwei Stellen vorgesehen werden, da es zu einem Übertrag (carry-bit, Sie kennen es vielleicht als: 1 im Sinn) kommen kann, nämlich bei 1 + 1 = (10)2; für die anderen drei Fälle würde eine Stelle im Ergebnis ausreichen.

Vergleicht man die logische Tabelle der Addition mit den bekannten Booleschen Funktionen, so sieht man, dass für das Ergebnis (y1 y0 = x1 + x0) gilt:

In der logischen Schaltung des Halb-Addierers wird y1 meist als cout (carry out) bezeichnet; die Ausgänge y0 und y1 werden oft auf verschiedenen Seiten der black box angebracht (dabei steht c jetzt für carry und out dafür, dass es sich um ein Ausgangssignal handelt).

Wird mit mehrstelligen Zahlen gerechnet (siehe nächste Aufgabe), unterscheidet man zwischen cout und cin (carry in).

2. Voll-Addierer: Addition von 2 vierstelligen (positiven) Dualzahlen.

Man beginnt die Addition natürlich mit dem niedrigsten Bit (Einer) — diese kann durch den Halb-Addierer der letzten Aufgabe realisiert werden. Aber ab der nächsten Stelle gibt es wieder eine Neuerung: Da jetzt ein Übertrag vorliegen kann, muss man eventuell drei Summanden addieren. Ein bereits vorhandener Übertrag wird als cin bezeichnet; der Übertrag, der im Ergebnis entsteht, ist dann wieder cout.

Die Schaltung, die die Addition mit drei Summanden (zwei Eingabewerte und ein cin) realisiert, wird als Voll-Addierer bezeichnet; die zugehörige logische Tabelle ist in Abbildung 24 dargestellt. Nachdem der Voll-Addierer bekannt ist, könnte man den Halb-Addierer auch folgendermaßen charakterisieren: er addiert zwei Dualzahlen, wobei noch kein cin (carry in) vorliegt.

Abbildung 24: Links: Logische Tabelle des Ein-Bit-Voll-Addierers. Falls Cin=0, stimmt die logische Tabelle natürlich mit der des Halb-Addierers überein (obere Hälfte der Tabelle). Für Cin=1 ergeben sich neue Werte. Rechts: Schaltzeichen des Ein-Bit-Voll-Addierers.Abbildung 24: Links: Logische Tabelle des Ein-Bit-Voll-Addierers. Falls Cin = 0, stimmt die logische Tabelle natürlich mit der des Halb-Addierers überein (obere Hälfte der Tabelle). Für Cin = 1 ergeben sich neue Werte. Rechts: Schaltzeichen des Ein-Bit-Voll-Addierers.

Die Darstellung des Voll-Addierers ist etwas problematisch:

Da das Addieren üblicherweise von rechts nach links durchgeführt wird, wird der Addierer manchmal wie Abbildung 25 dargestellt. Dabei wird jeder Übertrag zur nächsten Addition weitergereicht. Für das niedrigste Bit reicht der Halb-Addierer, für die höheren Bits wird ein Voll-Addierer benötigt. Das Ergebnis ist eine fünfstellige Zahl (c4s3s2s1s0)2: die Ergebnisse der vier Additionen sowie als höchstes Bit der Übertrag der letzten Addition.

Abbildung 25: Der 4-Bit-Voll-Addierer setzt sich aus einem Halb-Addierer und drei Voll-Addierern zusammen.Abbildung 25: Der 4-Bit-Voll-Addierer setzt sich aus einem Halb-Addierer und drei Voll-Addierern zusammen.

7. Inkrementierer und Zähler:

Der Inkrementierer muss eine Variable um 1 erhöhen; es ist naheliegend, dies durch eine Addition zu realisieren. Da man aber Register als Zähler betreiben kann, ist es einfacher das Inkrementieren durch Zählen zu ersetzen. Und Zähler benötigen einen Speicher — gehören also nicht zu den Schaltnetzen sondern zu den Schaltwerken.

8. Programmierbare Logikbausteine (= Programmable Logic Device = PLD):

Bisher wurden Schaltfunktionen und Schaltnetze besprochen, die eine logische Funktion realisieren. Da aus der Booleschen Algebra bekannt ist, dass man jede logische Funktion auf bestimmte Grund-Operationen zurückführen kann (etwa AND, OR, NOT), ist es möglich Bauteile anzubieten, in denen zahlreiche dieser Grund-Operationen enthalten sind und die erst vom Nutzer programmiert werden (salopp gesagt: sie werden verdrahtet). Dass es solche programmierbaren Bauteile geben kann, wie die Grund-Operationen angeordnet sein müssen und wie sie anschließend programmiert werden können, um eine gewünschte logische Funktion zu erfüllen, muss man aus den Gesetzen der Booleschen Algebra herleiten — was hier nicht erfolgt.

Dazu werden elementare Logikbausteine in einer Ebene (array, daher auch die Bezeichnung Programmable Logic Array = PLA) angeordnet. Jeder Baustein hat zwei Eingänge (x0 und x1) und zwei Ausgänge (y0 und y1) sowie zwei Steuerleitungen (s0 und s1). Welche logische Funktion an die Ausgänge gelegt wird, bestimmen die Signale an den Steuerleitungen; eine mögliche Realisierung könnte wie in der folgenden Abbildung aussehen.

Abbildung 26: Eine mögliche Realisierung des elementaren Bausteins für einen programmierbaren Logikbaustein. Links: Der Baustein besitzt zwei Eingänge x0 und x1 und zwei Ausgänge y0 und y1. Durch zwei Steuersignale s0 und s1 wird definiert, welche logische Funktion der Baustein ausführt. Rechts: Die logische Tabelle zeigt die Wirkung der Steuersignale.Abbildung 26: Eine mögliche Realisierung des elementaren Bausteins für einen programmierbaren Logikbaustein. Links: Der Baustein besitzt zwei Eingänge x0 und x1 und zwei Ausgänge y0 und y1. Durch zwei Steuersignale s0 und s1 wird definiert, welche logische Funktion der Baustein ausführt. Rechts: Die logische Tabelle zeigt die Wirkung der Steuersignale.

Diese elementaren Logikbausteine werden nun in einer Ebene (oder vielleicht besser: Gitter) angeordnet und können je nach Wahl der Signale an den Steuerleitungen jede beliebige logische Funktion ausführen. Die Größe des Gitters legt fest, wie viele Ein- und Ausgabewerte die logische Funktion besitzen darf.

Abbildung 27: Ein programmierbarer Logikbaustein mit drei Eingabewerten (x0, x1 und x2) und zwei Ausgabewerten (y0 und y1). Die Eingänge für die Steuersignale sind nicht dargestellt. Die elementaren Bausteine sind in einem Gitter angeordnet und werden mit Einsen (von oben) und mit den x-Werten beziehungsweise 0 von links gespeist. Berechnet werden zwei Funktionen f0 und f1, die der Nutzer durch die Steuersignale definieren kann.Abbildung 27: Ein programmierbarer Logikbaustein mit drei Eingabewerten (x0, x1 und x2) und zwei Ausgabewerten (y0 und y1). Die Eingänge für die Steuersignale sind nicht dargestellt. Die elementaren Bausteine sind in einem Gitter angeordnet und werden mit Einsen (von oben) und mit den x-Werten beziehungsweise 0 von links gespeist. Berechnet werden zwei Funktionen f0 und f1, die der Nutzer durch die Steuersignale definieren kann.

Bei simplen Schaltungen kann man noch selbst herausfinden, welche Verknüpfungen an den einzelnen Gitterstellen einzusetzen sind, um eine gewünschte Ausgabe zu erhalten. Bei komplexen Schaltungen unterstützt eine sogenannte Hardware-Beschreibungssprache (Hardware Description Language), mit der eine Schaltung spezifiziert werden kann. Ein Beispiel dafür ist VHDL = Very High Speed Integrated Circuit Hardware Description Language). Derartige Sprachen können dann zeigen, wie sich die zugehörige Schaltung mit Transistoren realisieren lässt und es können Tests durchgeführt werden.

Schaltwerke

Die von Neumann-Rechnerarchitektur beinhaltet eine klare Trennung zwischen Berechnungen (ALU) und Speicher. Insbesondere im Prozessor werden Zwischenspeicher benötigt, die sehr schnell aber dennoch zuverlässig arbeiten müssen. Hier sollen einige davon vorgestellt werden. Zuerst wird mit der monostabilen Kippstufe ein naheliegendes Verfahren zur Speicherung von Dualzahlen vorgestellt, sie wird aber im Register nicht eingesetzt, da sie zu schwerfällig ist.

Besprochen werden:

  1. Monostabile Kippstufe
  2. Flip-Flops
  3. Zähler und Inkrementierer

Im Detail:

1. Monostabile Kippstufe:

Naheliegend für einen Speicher ist die Vorstellung, dass er wie ein Schließfach genutzt werden kann: Ein Wert (hier eine Dualzahl) kann in ihm abgelegt und bei Bedarf wieder herausgeholt werden.

Dies kann mit Hilfe eines Kondensators realisiert werden. Der Kondensator besitzt einen stabilen Zustand (nämlich wenn er ungeladen ist) und einen instabilen Zustand (wenn er geladen ist). Da es immer Kriechströme gibt, verbleibt der Kondensator nicht beliebig lange im geladenen Zustand; soll er es dennoch, muss die Ladung immer wieder aufgefrischt werden.

Man kann dies auch so formulieren: Der Kondensator besitzt eine stabile Grundstellung und eine instabile Arbeitsstellung. Damit kann er insbesondere für die Steuerung von zeitlich begrenzten Vorgängen eingesetzt werden (etwa eine Ampelschaltung). Über die Parameter R (Ohmscher Widerstand) und C (Kapazität des Kondensators) kann die Dauer beeinflusst werden, die der Kondensator geladen bleibt.

Abbildung 28: Monostabile Kippstufe (realisiert durch einen Kondensator): Der Kondensator wird durch einen Spannungspuls aufgeladen und entlädt sich im Lauf der Zeit. Für ein gewisses Zeitintervall verbleibt er im Zustand 1 (high).Abbildung 28: Monostabile Kippstufe (realisiert durch einen Kondensator): Der Kondensator wird durch einen Spannungspuls aufgeladen und entlädt sich im Lauf der Zeit. Für ein gewisses Zeitintervall verbleibt er im Zustand 1 (high).

2. Flip-Flops:

Wie oben schon gesagt, sind Speicher, die mit Kondensatoren realisiert werden, zu schwerfällig für die Anwendung im Register. Die beiden folgenden Beispiele sollen einen Eindruck vermitteln, wie man mit Schaltungen, die den Schaltnetzen ähneln, einen Speicher realisieren kann. Entscheidend ist, dass man eine Rückkopplung in die Schaltung einbaut — sonst realisiert sie eine logische Funktion.

Das erste Beispiel soll als Gegenbeispiel für einen Speicher dienen, aber zumindest das Prinzip der Rückkopplung zeigen, siehe die folgende Abbildung.

Abbildung 29: Einfache Rückkopplungsschaltung mit einem Inverter (NOT), der den Ausgabewert wieder als Eingabewert erhält.Abbildung 29: Einfache Rückkopplungsschaltung mit einem Inverter (NOT), der den Ausgabewert wieder als Eingabewert erhält.

Der Inverter aus Abbildung 29 besitzt keinen stabilen Zustand, da bei einer 0 als Eingabewert eine 1 als Ausgabewert entsteht. Und wird die 1 sofort wieder an den Eingang gegeben, springt der Ausgang auf 0 und so fort.

Wie die Rückkopplung für einen Speicher eingesetzt werden kann, zeigt die folgende Abbildung.

Abbildung 30: Links: OR-Schaltung mit Rückkopplung des Ausgangs als einfachstes Beispiel für einen Speicher. Rechts: Die Tabelle ist keine logische Tabelle — denn dann wäre der Ausgabewert y nur von x abhängig — was hier aber nicht der Fall ist. Nähere Erklärung im Text.Abbildung 30: Links: OR-Schaltung mit Rückkopplung des Ausgangs als einfachstes Beispiel für einen Speicher. Rechts: Die Tabelle ist keine logische Tabelle — denn dann wäre der Ausgabewert y nur von x abhängig — was hier aber nicht der Fall ist. Nähere Erklärung im Text.

Die Schaltung in Abbildung 30 unterscheidet sich kaum von der aus Abbildung 29 — anstelle des Inverters ist eine OR-Schaltung eingesetzt, der Ausgabewert wird als eines der beiden Eingabe-Signale verwendet. Doch diese Schaltung kann man als einen Speicher betrachten. Wird am Eingang x = 0 eingegeben, erscheint am Ausgang y = 0. Und dies bleibt so, wenn kein anderer Wert für x eingegeben wird. Sobald aber für x eine 1 eingegeben wird, ist auch y = 1. Und ab diesem Zeitpunkt ist es unerheblich, welcher Wert für x eingegeben wird, der Ausgang bleibt immer bei 1.

Man darf daher die Tabelle (rechts) nicht für eine logische Tabelle halten: Sie liefert nur dann die richtigen Ausgabewerte, wenn der Eingabewert zum ersten Mal eingegeben wurde — der Ausgabewert hängt von der Vorgeschichte ab.

Was speichert die Schaltung eigentlich? Man kann am Ausgabewert erkennen, ob im Verlauf des Betriebs der Schaltung jemals eine 1 eingegeben wurde oder nicht:

Weiter sieht man an der Schaltung, dass es nicht nötig ist, einen Speicher wie ein Schließfach zu konstruieren. Hier wurde nirgends eine Information abgelegt; die Schaltung arbeitet auf den ersten Blick wie eine logische Schaltung, durch den rückgekoppelten Zweig verhält sie sich als hätte sie ein Gedächtnis.

Nach diesen Vorbereitungen kann endlich das Flip-Flop besprochen werden. Man möchte mit ihm ein Bit an Information speichern (aber nicht wie in einem Schließfach) und es soll dazu zwei Eingänge S und R besitzen:

Weiter soll das Flip-Flop 2 Ausgänge Q und P besitzen, um die gespeicherte Information abzufragen:

Das Flip-Flop soll in folgendem Sinn Information speichern, die durch die Eingänge S und R gesteuert werden kann:

Unklar ist dann aber, wie das Flip-Flop reagiert, wenn beide Eingänge gleichzeitig auf 1 gesetzt werden.

Realisierung des Flip-Flop mit zwei NOR:

Die folgende Abbildung 31 (links) zeigt eine Schaltung, die aus zwei NOR-Gliedern aufgebaut ist und Rückkopplungen besitzt.

Abbildung 31: Flip-Flop mit zwei NOR-Gliedern; Erklärung im Text.Abbildung 31: Flip-Flop mit zwei NOR-Gliedern; Erklärung im Text.

Abbildung 31 zeigt:

Aufgaben:

1. Untersuchen Sie die Schaltung in Abbildung 31 und versuchen Sie die Ausgabewerte für Qn+1 und Pn+1 nachzuvollziehen!

2. Besitzen die mit S und R bezeichneten Eingänge und die Ausgänge Q und P das oben beschriebene Verhalten?

3. Identifizieren Sie die oben beschriebenen Funktionalitäten des Flip-Flop:

4. In der Tabelle für die Ausgabewerte treten Inkonsistenzen auf (also Q = P): Wo treten sie auf und gibt die Tabelle hier wirklich die richtigen Ausgabewerte an?

5. Welches Verhalten zeigt die Schaltung bei S = 1 und R = 1?

6. Können Sie instabile Zustände des Flip-Flops erkennen?

Lösungen:

Die Lösungen zu den obigen Aufgaben sind in der folgenden Abbildung 32 dargestellt (links nochmal die Schaltung, rechts die erweiterte Tabelle zur Berechnung der Ausgabewerte).

Um das Verhalten eines Flip-Flops zu verstehen, muss man erkennen, dass es instabile Zustände besitzen kann (in Abbildung 32 zweifarbig dargestellt). Was heißt überhaupt instabiler Zustand? Hat man zu gegebenen S, R, Qn Pn die Werte Qn+1 und Pn+1 berechnet und versucht die nächsten Wert Q'n+1 und P'n+1 zu berechnen, so sieht man, dass in den beiden in Abbildung 32 als instabil gkennzeichneten Zuständen andere Werte als zuvor herauskommen. Das heißt aber, dass das Flip-Flop die zunächst berechneten Werte Qn+1 und Pn+1 nur kurz annimmt und sofort auf Q'n+1 und P'n+1 springt. Überprüft man andere Werte, so sieht man, dass sie stabil sind.

Mit diesen stabilen Zuständen kann man nun die Funktionalitäten des Flip-Flop untersuchen: die entsprechenden Zeilen sind farbig markiert. Und man erkennt, dass die Eingabe S = 1 und gleichzeitig R = 1 zu inkonsistenten Zuständen führt.

Abbildung 32: Nochmal die Schaltung aus Abbildung 31 für das Flip-Flop und ihre Tabelle.Abbildung 32: Nochmal die Schaltung aus Abbildung 31 für das Flip-Flop und ihre Tabelle.

In Abbildung 32 sind rechts in der Tabelle die instabilen Zustände zweifarbig gekennzeichnet, sie gehen sofort in die stabilen Zustände Q'n+1 und P'n+1 über. Weiter sind die Funktionalitäten des Flip-Flop farbig gekennzeichnet.

Die Existenz der inkonsistenten Zustände (bei S = 1 und gleichzeitig R = 1) zeigt, dass diese Realisierung des Flip-Flop noch unzureichend ist. Aber zumindest besitzt es die erwarteten Funktionalitäten. Es gibt mehrere Möglichkeiten, die Inkonsistenzen zu vermeiden, etwa indem man bei S = 1 und R = 1 eine Eingabe bevorzugt; man sagt ein Eingang ist dominant.

Ein Spezialfall des Flip-Flops ist das sogenannte Toggle-Flip-Flop oder T-Flip-Flop (toggle-switch = Kippschalter). Es ist so konstruiert, dass es durch die ansteigende Flanke eines Signals veranlasst wird, den gespeicherten Zustand zu verändern (also von 0 nach 1 beziehungsweise von 1 nach 0, allgemein: Qn+1 = NOT Qn).

3. Zähler und Inkrementierer:

Oben wurde bereits gesagt, dass Zähler und Inkrementierer einfacher mit Hilfe von Speichern realisiert werden können als durch die Addition.

Aufgabe:

Versuchen Sie einen Zähler aus einer Kette von T-Flip-Flops zu konstruieren. Der Zähler soll ausgehend von (0000)2 bis zur Dualzahl (1111)2 zählen, wobei das Hochzählen durch ein Eingabe-Signal ausgelöst wird (der Anfangszustand wird durch eine weitere Steuerleitung eingestellt).

Lösung:

Zuerst ist es hilfreich, die Systematik zu formulieren, wie im Dualsystem gezählt wird:

0000        0
0001        1
0010        2
0011        3
0100        4
0101        5
0110        6
0111        7
1000        8
1001        9
1010        10
1011        11
1100        12
1101        13
1110        14
1111        15

Man erkennt leicht:

Der Wechsel im niedrigsten Bit wird durch ein T-Flip-Flop realisiert: Die ansteigende Flanke des Signals, das den Zähler auslösen soll, sorgt für den Wechsel im niedrigsten Bit.

Aber wie werden die höheren Bits realisiert? Immer wenn das niedrigere Bit von 1 auf 0 springt, soll das nächste Bit wechseln. Das heißt aber, dass eine 0 im niedrigeren Bit als Zählimpuls (also eine 1) zum nächsten Bit gegeben wird. Die folgende Abbildung zeigt die Realisierung.

Abbildung 33: Das Toggle-Flip-Flop; Erklärung im Text.Abbildung 33: Das Toggle-Flip-Flop; Erklärung im Text.

In Abbildung 33 ist oben das Schaltsymbol für ein T-Flip-Flop zu sehen (das Dreieck deutet an, dass es nicht auf das Signal sondern auf die ansteigende Flanke des Signals reagiert). Der Ausgang P = NOT Q dient wieder dazu, die Konsistenz zu prüfen.

Abbildung 33 unten: Folge von vier T-Flip-Flops zum Zählen von (0000)2 bis (1111)2. Die T-Flip-Flops sind wieder so angeordnet wie man sich die Folge der Bits der Dualzahl vorstellt. Der Impuls, der das Zählen auslösen soll, kommt also von rechts. Der P-Ausgang wird hier nicht verwendet; stattdessen wird der Ausgabewert Q einmal für das Ergebnis verwendet (Leitung nach unten) und er wird verneint (leicht zu übersehen!) an das nächste T-Flip-Flop weitergereicht.

Entwicklung von Schaltungen

Bisher wurden zahlreiche Schaltungen vorgestellt, die im Computer (oder auch in der Steuer- und Regelungstechnik) relevant sind. Naheliegend ist es zu fragen, ob es ein allgemeines Verfahren gibt, wie man Schaltungen entwickelt. Es gibt natürlich Programme, die eine Schaltung, die aus einfachen Schaltnetzen und Schaltwerken aufgebaut ist, die zugehörige Realisierung mit Transistoren berechnen. Dazu müssen die Schaltungen nur mit Hilfe einer zulässigen Menge an elementaren Schaltnetzen und Schaltwerken in einer Hardware-Beschreibungssprache definiert werden.

Aber schwieriger ist die Vorbereitung: Wie kommt man von den Anforderungen an eine Schaltung zu der Realisierung mit elementaren Schaltnetzen und Schaltwerken?

Eine mögliche Hilfe dabei sind Graphen, mit denen Schaltwerke dargestellt werden. Diese Graphen enthalten Knoten (der aktuelle Zustand des Schaltwerkes) und Kanten (die Eingabewerte). Die Kanten sind gerichtet, das heißt sie führen vom alten zum neuen Zustand.

Als einfaches Beispiel ist unten der Graph für den oben (Abbildung 30) mit Hilfe von OR realisierten Speicher gezeigt. Er verfügt über die zwei Zustände 0 und 1 (blau) und die Eingabewerte 0 und 1 führen abhängig vom aktuellen Zustand des Schaltwerkes zu einem neuen Zustand.

Abbildung 34: Graph zur Beschreibung des Speichers aus Abbildung 30. Die Zustände des Speichers sind blau dargestellt (Knoten), die möglichen Eingaben sind Schwarz (Kanten); da die Kanten gerichtet sind, kann man nachvollziehen, zu welchem neuen Zustand eine Eingabe führt. In diesem Beispiel sieht man, dass sowohl die Eingabe von 0 als auch von 1 zu einem anderen Ergebnis führt, je nachdem in welchem Zustand sich der Speicher gerade befindet. Und man erkennt sofort, dass keine Kante zu Zustand 0 hinführt sowie keine Kante von 1 wegführt.Abbildung 34: Graph zur Beschreibung des Speichers aus Abbildung 30. Die Zustände des Speichers sind blau dargestellt (Knoten), die möglichen Eingaben sind Schwarz (Kanten); da die Kanten gerichtet sind, kann man nachvollziehen, zu welchem neuen Zustand eine Eingabe führt. In diesem Beispiel sieht man, dass sowohl die Eingabe von 0 als auch von 1 zu einem anderen Ergebnis führt, je nachdem in welchem Zustand sich der Speicher gerade befindet. Und man erkennt sofort, dass keine Kante zu Zustand 0 hinführt sowie keine Kante von 1 wegführt.

Aufgabe:

Zeichnen Sie den Graphen für das Flip-Flop aus Abbildung 31. Die Eingabe S = 1 und zugleich R = 1 führt zu einem inkonsistenten Zustand und soll daher weggelassen werden.

Lösung:

Abbildung 35: Das Flip-Flop kann zwischen den beiden Zuständen 0 und 1 wechseln; diese werden gespeichert durch die Eingabe (S, R) = (0, 0). Setzen der 1 erfolgt durch (S, R) = (1, 0), Rücksetzen auf 0 durch (S, R) = (0, 1). Die Eingabe (S, R) = (1, 1) soll hier nicht erlaubt sein; ebenso sind die instabilen Zustände, die kurzzeitig angenommen werden können, nicht dargestellt.Abbildung 35: Das Flip-Flop kann zwischen den beiden Zuständen 0 und 1 wechseln; diese werden gespeichert durch die Eingabe (S, R) = (0, 0). Setzen der 1 erfolgt durch (S, R) = (1, 0), Rücksetzen auf 0 durch (S, R) = (0, 1). Die Eingabe (S, R) = (1, 1) soll hier nicht erlaubt sein; ebenso sind die instabilen Zustände, die kurzzeitig angenommen werden können, nicht dargestellt.

Mit Hilfe dieser Beispiele kann man andeuten, wie man im allgemeinen Fall vorgehen wird, wenn man eine Schaltung entwickeln muss: