Die Motivation für mich diesen Artikel zu schreiben und mich auch überhaupt mit diesem Thema genauer Auseinanderzusetzen, war die tägliche Arbeit mit meinem Computer, ohne genau zu verstehen wie er eigentlich funktioniert. Ein Computer ist wohl für die meisten Menschen eine große Blackbox, in der man Daten hineinschüttet und irgendetwas brauchbares wieder herauskommt. Um zu verstehen wie ein Computer funktioniert habe ich mich mit dem elementarsten Bauteilen beschäftigt und viele wunderbarer Verbindungen zur Chemie, Physik und Elektrotechnik entdeckt, die dann schließlich den Weg zur Digitaltechnik ebnen. Dabei ist wie so oft youtube ein wunderbarer Begleiter mit vielen guten Kanälen von Menschen die wirklich Spass und Leidenschaft an den Thema haben, etwas was ich in der Uni oft vermisse.

In einem Video von Ben Eater erklärt er wie man einen Schaltkreis baut der Binärzahlen addieren kann, dafür benutzt er mehrere vorgefertigte Logik IC´s. Meine Idee war es nun das selbe zu tun, aber alles aus Transistoren, also quasi den elementarsten Bauteilen, aufzubauen.

Dafür erkläre ich im ersten Abschnitt ein paar Grundlagen zu Transistoren und zur Logik und zeige dann wie man aus diesen Basiselementen einen Addier Schaltkreis zusammenbaut.

Der Transistor

Vom Relais zur Elektronenröhre zum Transistor.

Der Transistor ist ein Bauteil welches es einem ermöglicht gesteuert Stromkreise zu schließen oder zu öffnen. Mit einem Schalter ist es ebenfalls möglich ein Stromkreis zu öffnen oder zu schließen und der Transistor besitzt im Prinzip die selbe Funktion, aber während ein Schalter physisch von jemanden ausgelöst werden muss, lässt sich der Transistor selber durch anlegen eines Stromes steuern. Die Vorstufe des Transistors war das Relais, was die selbe Funktion hat, aber etwas umständlicher und größer gebaut ist. Hier wurde durch das Anlegen eines Stromes noch tatsächlich ein Stromkreis physisch geschlossen in dem sich ein Bauteil entsprechend bewegt hat. Entsprechend hört man auch ein Klacken beim Auslösen des Relais. Bei dem Transistor “bewegt” sich an sich nichts sichtbares mehr, alles läuft auf Atomebene ab.

Wie funktioniert der Transistor?

Ein Transistor besteht aus einem Collector, Basis und Emitter Anschluss und der Strom zwischen Collector und Emitter fließt nur, wenn ein Strom zwischen Basis und Emitter fließt. So lassen sich Stromkreise öffnen und schließen. Hauptbestandteil für den Transistor ist mit Phosphor oder Bor verunreinigten Silicium, so dass das eigentlich nicht leitende Silicium zum Halbleiter wird. An sich ist Silicium ein Halbmetall, besitzt also Eigenschaften von Metallen und Nichtmetallen. Metalle sind an sich sehr gute elektrische Leiter, da sie viele freie Elektronen in der äußerten Schalte besitzen, also eine hohe Dichte von beweglichen Ladungsträger, sprich Elektronen besitzen und Strom ist ja nichts anderes als bewegte Elektronen.

Transistor mit den drei Anschlüssen

An sich besitzt Silicium zwar eine hohe thermische Leitfähigkeit aber keine gute elektrische. Dies ändert sich durch Dotierung, so wird Silicium zum Halbleiter. Silicium besitzt vier Valenzelektronen und geht mit seinem Nachbar Silicium Atomen ein Kristallgitter ein um auf volle Orbitale von acht Valenzelektronen zu kommen. Die Dotierung beschreibt nun die Einlagerung von Fremdatomen in Silicium um die Leitfähigkeit zu verändern und wird auch als Verunreinigung bezeichnet. Dabei unterscheidet man zwischen N-Typ und P-Typ Dotierungen.

N-Typ Verunreinigung: Elemente wie Phosphor mit fünf Elektronen in der äußersten Schale.

P-Typ Verunreinigung: Elemente wie Bor mit drei Elektronen in der äußersten Schale.

Diese Dotierungen führen dazu dass es in der äußersten Schale entweder ein Elektron zu viel oder zu wenig gibt, so dass sich die Elektronen insgesamt mehr bewegen können.

Interessant ist jetzt die Verbindung dieser beiden Silicium Dotierung, dies wird p/n junction genannt. Die Verbindung ergibt eine depletion-region im Übergang der beiden verunreinigenden Silicium Schichten die isoliert und den Strom nur in eine Richtung leitet (Diode). Ein npn- Transistor besitzt nun zwei N-Typ Schichten mit einer dünnen P-Typ Schicht dazwischen. Es bildet sich ein elektrisches Feld zwischen den Schichten, da sich die Elektronen von der N-Schicht zur der P-Schicht bewegen, welche einen Stromfluss blockiert. Durch Anlegen eines Stromes an der P-Schicht wird das elektrisches Feld aufgelöst und Elektronen fließen sowohl von der Basis, als auch vom Collector zum Emitter.

Der Transistor ist ein elementares Bauteil für die Moderne Mikrotechnologie und Millionenfach in Computern und Mikroprozessoren verbaut. Dies ist auch der Grund wieso Silicium so sehr für die Moderne IT benötigt wird.

Schaltbild Transistor

Logik-Schaltungen

Der Transistor ist so wichtig, weil es mit ihm möglich ist logische Schaltungen aufzubauen und aus diesen logischen Schaltungen kann dann wiederum alles andere gebaut werden. In der booleschen Algebra gibt es die Elementaren Operationen NOT, AND und OR die im folgenden kurz mit einer Wahrheitstafel und ihrem elektronischen Schaltbild gezeigt sind. Danach gehe ich dann darauf ein wie aus diesen Basiselementen auch etwas sinnvolles gebaut werden kann.

Warheitstafel der AND Verknüpfung:

Schaltsymbol für AND
\begin{tabular}{|c|c|c|} \hline A & B & A\wedge B  \\ \hline 0 & 0 & 0 \\ \hline  1 & 0 & 0 \\ \hline  0 & 1 & 0 \\ \hline   1 & 1 & 1 \\ \hline  \end{tabular}

Wahrheitstafel der NOT Verknüpfung:

Schaltsymbol für NOT
\begin{tabular}{|c|c|} \hline A & \neg A  \\ \hline 0 & 1 \\ \hline  1 & 0 \\ \hline \end{tabular}

Wahrheitstafel der OR Verknüpfung:

Schaltsymbol für OR

\begin{tabular}{|c|c|c|} \hline A & B & A\lor B  \\ \hline 0 & 0 & 0 \\ \hline  1 & 0 & 1 \\ \hline  0 & 1 & 1 \\ \hline   1 & 1 & 1 \\ \hline  \end{tabular}

Als nächstes Zeige ich eine Möglichkeit um eine logische Verknüpfung mithilfe eines Transistors tatsächlich in der Realität umzusetzen. Dabei steht wenig Strom für 0 und viel Strom für 1. Wichtig ist dabei auch die Grenze zwischen wenig und viel Strom, z.B. von 0 – 0.7V wenig Strom (logische 0) und ab 1.5V viel Strom (logische 1). Denn es ist in der Realität nicht möglich eine ganz klare Grenze zu ziehen und eine logische 0 auch immer bei 0V zu haben, da es immer kleine Schwankungen gibt.

Schaltplan für NOT mit einem Transistor
Schaltplan AND mit zwei Transistoren

Aus den einfachen elementaren booleschen Operationen können dann andere komplexere Operationen wie NAND, NOR oder XOR gebaut werden, die später für den Addierschaltkreis benötigt werden.

Die NAND Verknüfung bedeutet “NOT AND” und ist damit zusammengesetzt aus den beiden elementaren Bausteinen.

Wahrheitstafel der NAND Verknüpfung:

Schaltbild für NAND
\begin{tabular}{|c|c|c|} \hline A & B & \neg(A\wedge B)  \\ \hline 0 & 0 & 1 \\ \hline  1 & 0 & 1 \\ \hline  0 & 1 & 1 \\ \hline   1 & 1 & 0 \\ \hline  \end{tabular}

Etwas komplexer ist die XOR Verknüpfung, XOR steht für exklusives oder, also eine OR Verknüpfung die genau dann 1 ist wenn einer und nur einer der beiden Inputs 1 ist.

Wahrheitstafel der XOR Verknüpfung:

Schaltbild für XOR
\begin{tabular}{|c|c|c|} \hline A & B & A\underline{\lor}B  \\ \hline 0 & 0 & 1 \\ \hline  1 & 0 & 1 \\ \hline  0 & 1 & 1 \\ \hline   1 & 1 & 0 \\ \hline  \end{tabular}

Die XOR Verknüpfung lässt sich natürlich auch mit den drei elementaren Verknüpfungen darstellen:

A\underline{\lor} B = (A \lor B) \wedge \neg(A \wedge B)

Alle Operationen gibt es auch fest verdrahtet als integrierter Schaltkreis, so dass wesentlich weniger Platz gebraucht wird. Aber mein Ansatz ist es ja den Adder ohne IC´s und nur mit Transistoren zu bauen.

3-Bit Adder

Als eine Anwendung für die Boolesche Operationen soll jetzt ein Schaltkreis dargestellt werden der Binärzahlen addieren kann. In der Uni habe ich viel über die Boolesche Algebra gelernt, aber die Zusammenhänge mit Schaltkreisen in diesen diese Logik tatsächlich konkrete Funktionen erfüllt ist mir nicht bekannt gewesen. Umso erstaunlicher wie man etwas wie “Rechnen” auf einen einfachen Algorithmus herunterbrechen kann, den dann ein Schaltkreis in nahezu Lichtgeschwindigkeit ausführt. Beim Addieren differenziert man zwischen Halb- und Voll-Addierer. Ein Halb-Addierer kann nur zwei einstellige Binärzahlen addieren und ein Voll-Addierer berücksichtigt noch den Übertrag aus der letzten Rechnung. Um einfach Anzufangen habe ich mich zuerst an einem Halb-Addierer gemacht.

Grundsätzlich funktioniert das Addieren im Binärsystem so: Da es nur zwei Elemente gibt, gestaltet sich das Addieren sehr einfach. 1 + 0, sowie 0 + 1 ergeben 1, 0 + 0 ergibt 0 und 1 + 1 ergibt 0, mit einem Übertrag von 1.

7 + 11 = 20 in Binär

Der einfachste Fall ist es zwei einstellige Binärzahlen, also ein Bit, zu addieren. Wichtig ist dass das Ergebnis dann zwei Bit hat. Das erste Bit ist “S” für Summe und das zweite Bit “C” für Carry.

\begin{tabular}{|c|c|c|c|} \hline A & B & C & S  \\ \hline 0 & 0 & 0 & 0 \\ \hline  1 & 0 & 0 & 1 \\ \hline  0 & 1 & 0 & 1 \\ \hline   1 & 1 & 1 & 0 \\ \hline  \end{tabular}

Diese Wahrheitstafel lässt sich mit einer XOR und AND Schaltung realisieren und wird Halb-Addierer genannt, da ein vorheriges Carry-Bit nicht berücksichtigt wird.

Schaltbild für Halb-Addierer

Ich habe diesen 1-Bit Halb-Addierer mit Transistoren nachgebaut. Im Prinzip habe ich die beiden Logischen Operationen XOR und AND gebaut und den Input als Schalter dargestellt. Der Output wird dann als LED angezeigt. Diese erste Version zeigt eine recht unübersichtliche Schaltung die die gewünschte Funktion erfüllt.

Problem mit dem Strom…Wiederstände spielen große Rolle, 0 ist nicht gleich 0… Schwankungen überall

Schon diese “einfache” Schaltung war nicht ganz einfach zu realisieren. Schnell wurde klar das die Wahl der Widerstände eine großen Einfluss auf den Stromfluss hat und eine auf dem Papier korrekte Schaltung nicht ganz so einfach zu übertragen ist. Ich habe einige Versuche mit verschiedenen Bauteilen gebraucht bevor ich eine laufende Version erstellt habe. Die LEDs leuchten beide auch nicht gleich hell, je nach dem welchen Schalter man betätigt. Das Zeigt einem das eine 1 nicht gleich voller Strom und eine 0 kein Strom bedeutet. Viel mehr gibt es kleine Abweichungen so das eine Definition wie 1 > 0.7 V und 0 < 0.7 V sinvoll ist.

Um diesen Halb-Addierer zu einem Voll-Addierer zu erweitern muss nun auch der Übertrag aus der Vorherigen Summe betrachtet werden. D.h. zusätzlich zu den beiden Inputs A und B gibt es jetzt auch noch ein C_{in} für den eingehenden Übertrag. Am besten sieht man sich alle Möglichkeiten der Berechnung wieder in einer Wahrheitstafel an und leitet daraus dann ein Schaltbild mit der konjunktiven oder disjunktiven Normalform ab.

Im Prinzip haben wir jetzt die drei Inputs, A, B und C_{in} und versuchen davon die beiden Outputs S und C_{out} zu bestimmen.

\begin{tabular}{|c|c|c|c|c|} \hline A & B & C_{in} & S & C_{out} \\ \hline 0 & 0 & 0 & 0 & 0\\ \hline  1 & 0 & 0 & 1 & 0 \\ \hline  0 & 1 & 0 & 1 & 0 \\ \hline   1 & 1 & 0 & 0 & 1 \\ \hline   0 & 0 & 1 & 1 & 0 \\ \hline    0 & 1 & 1 & 0 & 1 \\ \hline    1 & 0 & 1 & 0 & 1 \\ \hline    1 & 1 & 1 & 1 & 1 \\ \hline   \end{tabular}

Daraus lässt sich jetzt eine Formel der booleschen Algebra für die beiden Outputs S und C_{out} angeben.

S = (A \wedge \neg B \wedge \neg C_{in}) \lor  (\neg A \wedge  B \wedge \neg C_{in}) \lor  (\neg A \wedge \neg B \wedge C_{in}) \lor  (A \wedge  B \wedge C_{in})

C_{out} = (A \wedge B \wedge \neg C_{in}) \lor (\neg A \wedge B \wedge C_{in}) \lor (A \wedge \neg B \wedge C_{in}) \lor (A \wedge B \wedge C)

Man kann die beiden Formeln jetzt so verwenden und als Schaltkreis umsetzen, aber man tut sich leichter wenn man noch etwas vereinfacht (mit KV-Diagramm z.B.) um auf folgende Darstellung zu kommen:

S = (A\underline{\lor}B) \underline{\lor} C_{in}

C_{out} = (C_{in} \wedge (A\underline{\lor}B)) \lor (A \wedge B)

Nachdem ich versucht habe den Schaltkreis auf diese Weise aufzubauen, bin ich schnell auf Probleme gestoßen, da die im letzten Abschnitt vorgestellten Schaltpläne nicht dafür geeignet sind erweitert zu werden. Nach etwas Recherche bin ich auf die RTL (Resistor-Transistor-Logik) gestoßen, die sich wesentlich besser für ein solches Projekt eignet. Die RTL benötigt nicht viele Transistoren und liefert ein direkt Output der entweder High oder Low ist, je nach logischer Schaltung. Die Basiselemente der RTL sind dabei Inverter, also NOT, NOR oder NAND Schaltungen.

Schaltbild NAND GATE

NAND und NOR sind dabei logisch vollständig, das heißt alle logischen Formel lassen sich aus ihnen ableiten. So kann auch die Formel oben für die Summe und den Carry ausschließlich durch NAND (NOR) Gates ausgedrückt werden.

NAND \neg (A \wedge B)

\neg A = \neg (A \wedge A)

A \wedge B = \neg (\neg ( A \wedge B))

A \lor B = \neg (\neg A \wedge \neg B)

So lassen sich die Basisbausteine der boolschen Algebra NOT, AND und OR, aus dem NAND Ausdruck ableiten. Jetzt wäre es möglich die oben angegebene Formel für S und C_{out} entsprechend der Regeln umzuwandeln, so dass nur noch NAND Ausdrücke vorkommen. Dieser resultierende Ausdruck wäre aber nicht minimal und wahrscheinlich sehr komplex. Ein minimalen Ausdruck in der Logik zu finden ist nicht ganz einfach. Wenn der Ausdruck minimal aus NAND Verknüpfungen bestehen soll, wird es schwierig, da dies ein NP-Vollständiges Problem ist. Eine Technik um solche Minimierungen durchzuführen heißt Ganzzahlige lineare Optimierung. Dieser Algorithmus kann kleine boolesche Ausdrücke mit nicht zu vielen Variablen vereinfachen. Ein paar schlaue Menschen haben dies bereits getan und so lässt sich ein Voll-Addierer folgendermaßen nur mit NAND Schaltungen darstellen:

Voll-Addierer mit nur 9 NAND Gates

Dabei lassen sich folgende Elemente identifizieren und mit der oben angegeben Formel für S und C_{out} verknüpfen:

Die roten Kästen sind dabei jeweils der Teil der Schaltung die für eine XOR stehen.

Mit diesem Schaltbild für den Voll-Addierer und dem Schaltbild für ein NAND Gate, war es nicht mehr allzu schwer das Ganze aufzubauen. Ich habe noch ein paar Dumme Fehler gemacht die mich noch einige Zeit beschäftigt haben, aber im Grunde ließ sich der Voll-Addierer nach dem bestellen von mehr Widerständen problemlos aufbauen.

Ich habe dann insgesamt ein Halb-Addierer (für das erste Bit) und zwei Voll-Addierer auf insgesamt zwei Breadboards aufgebaut um insgesamt 3-Bit Binärzahlen addieren zu können. Der Schaltplan für den Halbaddierer lässt sich gut an den obigen Bilder ablesen, es werden die vier NAND Gates für die XOR Verknüpfung gebraucht und noch ein zusätzliches NAND Gate um das Ergebnis des ersten NAND Gates zu invertieren für das AND.

Ich habe die einzelnen Addier Einheiten nach dem Carry-Ripple-Adder Prinzip aufgebaut, d.h. der Carry wird jeweils von einer Addiereinheit zur nächsten übergeben, so wie es wohl auch jeder intuitiv gemacht hätte. In manchen Fällen wenn das Carry Bit weit bis ans Ende der Rechnung getragen wird können andere Formen sinnvoller sein.

3 + 6 = 9

Wenn man genau hinguckt kann man auf den Bild die einzelnen NAND Gates erkennen, es handelt sich dabei immer um zwei Transistoren direkt nebeneinander.

So eine gesamte Addiereinheit gibt es dann auch als integrierter Schaltkreis (IC), der wesentlich kleiner ist.

Dieses Projekt war ein spannender Einblick in die Welt des Computers und um zu verstehen wie ein Computer auf unterster Ebene operiert. Es ist spannend das die Berechnung unglaublich schnell, fast in Lichtgeschwindigkeit abläuft, aber der Computer vom eigentlichen “Rechnen” natürlich nichts versteht. Die einzelnen Logik-Gatter ermöglichen es den Elektronen einfach nur in eine bestimmte Richtung zu fließen oder gedrückt zu werden, so dass am Ende die richtige Lampe aufleuchtet. Welche Lampe richtig ist wird nach einfachen logischen Regeln entschieden, der Computer kann den Algorithmus abarbeiten und die richtige Zahl ermitteln, aber er hat natürlich kein Verständnis dafür was die Zahlen bedeuten oder für was sie stehen. Er kennt lediglich die Regeln um damit zu operieren. Aber es ist erstaunlich für was das alles reicht.

Quellen:

Ben Eater auf Youtube

Schaltpläne wurden mit Autodesk Eagle erstellt