Zurück zum Index
Autoren-Aufruf! Ich habe seit Jahren keine Zeit und Lust mehr, die Inhalte von Mandalex zu pflegen, weswegen sie teilweise veraltet und inkorrekt sind. Wenn ein Wikipedia-Autor über diese Seite stolpert und Lust hat, meine Texte irgendwie in Wikipedia zu integrieren, darf er oder sie mir eine Email schreiben, ich würde die einzelnen Seiten dann gerne abgeben, auf dass ich die Seite irgendwann schliessen kann. Und bevor die Frage kommt: Nein, ich zahle nichts.
Dieses Wort steht für eine Art von logischen Gattern. Es wird nicht direkt definiert, dass eine AND- oder OR-Schaltung existiert und was sie liefern, sondern es wird nur gesagt, was die Gatter tun. Im Skript sind die Gatter dargestellt durch Kreise, hier werde ich Rechtecke benutzen.
Ein Gatter besteht immer aus einem Entscheidungskörper und einem Ausgang. Zudem kann noch jedes Gatter mehrere (0 bis unendlich) Eingänge haben. Der Körper wird zusätzlich bezeichnet durch eine Zahl (Thereshold, Schwellwert). Beispiel:
+-------+
in --------| |
| |
in --------| 2 |----- out
| |
in --------| |
+-------+
Und so funktioniert ein Gatter: Jede Leitung kann nur 0 oder 1 enthalten, jedes Gatter gibt also stets entweder 0 oder 1 weiter. Diese Bits sind getaktet, das heisst, die Gatter senden nur in regelmässigen Zeitabständen Ergebnisse weiter. Für jedes Gatter errechnet sich das Signal am Ausgang nach folgender einfachen Regel:
0 wird gesendet, wenn die Anzahl 1 bei den Eingängen kleiner ist als der Schwellwert.
1 wird gesendet, wenn die Anzahl 1 bei den Eingängen grösser oder gleich ist als der Schwellwert.
Damit wird bereits einiges an logischen Schaltungen möglich. Zusätzlich wird nun aber doch noch soetwas wie ein Inverter eingeführt: Das Input-Signal ist entweder ein Befürworter oder ein Gegner. Befürworter sind genau das Gleiche wie bis anhin. Gegner jedoch haben ein absolutes Vetorecht. Sobald auch nur ein Gegner ein Veto sendet (eine 1), so gibt die Schaltung ein 0 weiter. Die Regeln sind also:
0 wird gesendet, wenn die Anzahl 1 bei den Befürwortern kleiner ist als der Schwellwert, oder der Gegner eine 1 sendet.
1 wird gesendet, wenn die Anzahl 1 bei den Befürwortern grösser oder gleich ist als der Schwellwert und der Gegner eine 0 sendet.
In den Zeichnungen wird ein Gegner durch ein Kreischen markiert. Es gibt auch noch die Variante, dass Gegner kein absolutes Vetorecht haben, sondern dass ihre Stimme einfach von der Anzahl 1 bei den Befürwortern abgezogen wird (subtractive Inhibition), diese Variante wird hier jedoch nicht behandelt.
Mit diesen einfachen Definitionen lassen sich nun bereits eine Vieltahl an Gattern konstruieren:
CLOCK oder TRUE
Gibt stets eine 1 zurück, egal, ob es nun einen Eingang besitzt (mit egal welchen Signalen), oder keinen.
+-------+
| |
| |
in - - - - | 0 |----- out
| |
| |
+-------+
DELAY
Gibt stets das Signal weiter, das es bekommen hat. Durch das Taktsignal wird also einfach das Bit für einen Takt festgehalten.
+-------+
| |
| |
in --------| 1 |----- out
| |
| |
+-------+
NOT
Wird eine 1 gesendet, so entspricht dies einem Veto, herausgegeben wird also eine 0. Wird aber eine 0 gesendet, so liegt kein Veto vor und der Grenzwert ist erreicht, es wird eine 1 zurückgegeben.
+-------+
| |
| |
in -------O| 0 |----- out
| |
| |
+-------+
OR
Gibt eine 1 zurück, sobald midestens ein Input eine 1 liefert.
+-------+
| |
in --------| |
| 1 |----- out
in --------| |
| |
+-------+
AND
Gibt nur dann eine 1 zurück, wenn beide Inputs eine 1 liefern.
+-------+
| |
in --------| |
| 2 |----- out
in --------| |
| |
+-------+
NOR
Gibt nur dann eine 1 zurück, wenn beide Inputs eine 0 liefern.
+-------+
| |
in -------O| |
| 0 |----- out
in -------O| |
| |
+-------+
Weitere Gatter sind möglich, aber die wichtigsten stehen da. Durch Vernetzung der Gatter sind nun grössere Konstrukte möglich:
1-bit-Speicher:
Wird am Signal "write 0" eine 1 gesendet, so wird solange eine 0 in der Schleife gehalten, bis ein neuer Input kommt. Wird am Signal "write 1" eine 1 gesendet, so wird solange eine 1 in der Schleife gehalten, bis ein neuer Input kommt. Wird am Signal "read" eine 1 gesendet, so wird am Ausgang das gespeicherte Bit ausgegeben.
+--------------+
| | +-------+
| +-------+ | | |
+--| | | read ---| |
| | | | 2 |------ out
write 1 ---| 0 |---+----------| |
| | | |
write 0 --O| | +-------+
+-------+