Aus Das deutschsprachige Scratch-Wiki

Logikgatter sind mathematische Funktionen, die Wahrheitswerte (Fachbegriff: Boolean) mit verschiedenen Methoden verarbeiten. Diese verschiedenen Methoden nennt man Logikgatter. Ein Beispiel: Das UND-Gatter gibt true zurück, wenn Bedingung A und Bedingung B beide richtig sind. In allen anderen Fällen gibt es false aus.

Was ist ein Boolean?

Ein Boolean-Wert ähnelt einer Variable. Aber der erhebliche Unterschied besteht darin, dass Booleane nur zwei Werte speichern können: true und false. Das sind die beiden englischen Wörter für Wahr und Falsch. Oft werden sie auch als 1 und 0 bezeichnet (siehe Binärsystem) In Scratch gibt es die Booleane auch. Es sind die Blöcke mit den Spitzen links und rechts. Es ist ganz einfach: Nehmen wir zum Beispiel den Taste [ v] gedrückt?-Block. Er ist auch ein Boolean und funktioniert ganz einfach: Wenn die Taste gedrückt ist, steht der Boolean auf "Wahr", wenn die Taste nicht gedrückt wird, steht sie auf "Falsch". So funktioniert das im Prinzip auch mit allen anderen Wahrheitsblöcken in Scratch.

Gatter

AND-Gatter

Das AND-Gatter (auf Deutsch Und-Gatter) gibt true zurück, wenn A und B beides richtig ist, ansonsten wird false wiedergegeben.

AND-Gatter
Bedingung A Bedingung B Ergebnis
False False False
False True False
True False False
True True True
<<A> und <B>>

Um ein AND-Gatter mit mehreren Eingaben zu erhalten, kann man den Und-Block verschachteln:

<<<A> und <B>> und <<C> und <D>>>

NAND-Gatter

Das NAND-Gatter (auf Deutsch Nicht-Und-Gatter) ist das Gegenteil von dem UND-Gatter. Es gibt false (nicht true) zurück wenn A und B richtig ist, ansonsten immer true. NAND bedeutet Not AND

NAND-Gatter
Bedingung A Bedingung B Ergebnis
False False True
False True True
True False True
True True False

Für dieses Gatter gibt es keinen Scratch-Block, es gibt aber eine Alternative.

<nicht <<A> und <B>>>

Um ein NAND-Gatter mit mehreren Eingaben zu erhalten, kann man die gezeigte Alternative verschachteln.

<nicht <<<A> und <B>> und <<C> und <D>>>>

OR-Gatter

Das OR-Gatter (auf Deutsch 'Oder-Gatter) gibt true zurück, wenn eine von den beiden Bedingungen A und B erfüllt ist. Wenn beide falsch sind, steht es auf false.

OR-Gatter
Bedingung A Bedingung B Ergebnis
False False False
False True True
True False True
True True True
<<A> oder <B>>

Um ein OR-Gatter mit mehreren Eingaben zu erhalten, kann man den Oder-Block verschachteln.

<<<A> oder <B>> oder <<C> oder <D>>>

NOR-Gatter

Das NOR-Gatter (auf Deutsch Nicht-Oder-Gatter) ist das Gegenteil vom ODER-Gatter. Es gibt true zurück wenn nicht eines von beiden Bedingungen richtig ist; wenn beides falsch ist. Ansonsten gibt es false zurück.

NOR-Gatter
Bedingung A Bedingung B Ergebnis
False False True
False True False
True False False
True True False

Für dieses Gatter gibt es keinen Scratch-Block, es gibt aber eine Alternative.

<nicht <<A> oder <B>>>

Um ein NOR-Gatter mit mehreren Eingaben zu erhalten, kann man die gezeigte Alternative verschachteln.

<nicht <<<A> oder <B>> oder <<C> oder <D>>>>

XOR-Gatter

Das XOR-Gatter (kommt von Exclusive OR) gibt true zurück wenn eine ungerade Anzahl von Eingängen auf true steht und der Rest auf false.

XOR-Gatter
Bedingung A Bedingung B Ergebnis
False False False
False True True
True False True
True True False

Für dieses Gatter gibt es keinen Scratch-Block, bei zwei Eingängen funktioniert allerdings:

<<<A> oder <B>> und <nicht <<A> und <B>>>>

Oder so:

<nicht <<A> = <B>>>

XNOR-Gatter

Das XNOR-Gatter (kommt von Exclusive NOR) gibt true zurück wenn eine gerade Anzahl von Eingängen auf true steht und der Rest auf false.

XNOR-Gatter
Bedingung A Bedingung B Ergebnis
False False True
False True False
True False False
True True True

Für dieses Gatter gibt es keinen Scratch-Block, bei zwei Eingängen funktioniert allerdings:

<nicht <<<A> oder <B>> und <nicht <<A> und <B>>>>>

Oder so:

<<A> = <B>>

NOT-Gatter

Das NOT-Gatter (auf Deutsch Nicht-Gatter) kehrt den Boolean um.

NOT-Gatter
Bedingung A Ergebnis
False True
True False
<nicht <A>>

Geschickte Verschachtelung

Man kann diese Gatter geschickt verschachteln, um mathematische Funktionen zu erhalten. Wenn man eine Kombination haben möchte, die prüft ob von vier Booleanen (A, B, C und D) zwei auf wahr stehen und zwei auf falsch, kann man die folgende Logikgatter-Verschachtelung benutzen:

<<<<<A> = <B>> und <<C> = <D>>> und <nicht <<A> = <C>>>> oder <<nicht <<A> = <B>>> und <nicht <<C> = <D>>>>>

Wenn man die Namen der Logikgatter benutzen würde, also statt <A> = <B>, XNOR hinschreiben würde, sähe es so aus:

<<<<<A> XNOR <B>> AND <<C> XNOR <D>>> AND <<A> XOR <C>>> OR <<<A> XOR <B>> AND <<C> XOR <D>>>>

Das funktioniert so: Wenn A=B ist und C=D, also A und B richtig oder falsch, und C und D das andere (Beispiel: A und B = true, dann ist C und D = false), dann ist A XNOR B true und C XNOR D auch true. Weil dann beides true ist, ist das UND-Gatter dazwischen auch true. Das XOR-Gatter mit A und C ist deshalb noch dabei, weil man sonst alles (also A, B, C und D) aufs gleiche setzen könnte. Z.B. A = true, B = true, C = true und D = true. Das wäre dann aber falsch, weil es dann vier richtige gibt, und nicht zwei richtige und zwei falsche. Das XOR-Gatter ist also dazu da, sich zu vergewissern ob A und B unterschiedlich sind als C und D. Das wäre also geklärt. Die beiden anderen XOR-Gatter sind dazu da, zu erkennen ob nicht vielleicht A und C, B und D gleich sind und nicht A und B, C und D. Weil wenn dann A = true, B = false, C = true und D = false, dann würde, wenn es diese beiden XOR-Gatter nicht gäbe, das Skript es nicht erkennen. Und die Bedeutung vom ODER-Gatter ist natürlich klar.

Mathematische Funtionen

Man kann Gatter auch verschachteln, um mathematische Berechnungen durchzuführen. Einfache Plus-Berechnungen zum Beispiel.

Halbaddierer

Ein Halbaddierer führt einfache Berechnungen bis 1+1 aus (0+0, 0+1, 1+0 und 1+1). Das Ergebnis wird in Binärzahlen dargestellt. Ein Halbaddierer besteht aus einen Exklusiv-Oder-Gatter und einem Und-Gatter. Der Halbaddierer hat zwei Ausgänge, einer heißt Summe, einer heißt Übertrag. Der Ausgang Summe wird errechnet durch

<<A> XOR <B>>

Der Ausgang Übertrag wird errechnet durch

<<A> AND <B>>

Hier ist die Tabelle der Eingaben und der dazugehörigen Ergebnisse.

Halbaddierer
Erster Summand Zweiter Summand Ausgang Summe Ausgang Übertrag
False False False False
False True True False
True False True False
True True False True

Hierbei steht False für 0 und True für 1. Würde man False durch 0 ersetzen und True durch 1, sähe die Tabelle wie folgt aus.

Halbaddierer
Erster Summand Zweiter Summand Ausgang Summe Ausgang Übertrag
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1

Würde man die Ausgänge Summe und Übertrag als Binärcode sehen, hätte der Übertrag den Wert 2 und die Summe den Wert 1. Daraus könnte man dann Zahlen von 0 bis 2 bilden.

Man kann aus zwei Halbaddierern einen Volladdierer bauen.

Volladdierer

Ein Volladdierer führt genau wie der Halbaddierer einfache Plus-Berechnungen durch (bis 2+1 oder 1+2). Allerdings nutzt der Volladdierer im Gegensatz zum Halbaddierer seine Ausgänge komplett. Bei den Ausgänge von einem Halbaddierer ist die höchste ausgebbare Zahl die 2. Bei einem Volladdierer ist das die 3, weil die beiden Ausgänge beide auf Richtig, also auf 1 stehen können (Wenn beide Ausgänge auf 1 stehen, macht man daraus die Binärzahl) 11. Das ist umgerechnet die 3). Deshalb hat der Volladdierer auch 3 Eingänge, A, B und C. Um aus diesen drei Eingängen ein Skript zu bauen, welches die beiden Ausgänge Summe und Übertrag richtig setzt, bedarf es einem aus dem ersten Blick kompliziert wirkendes Gebilde.

setze [summe v] auf <<<A> XOR <B>> XOR <C>>
setze [übertrag v] auf  <<<A> AND <B>> NOR <<<A> XOR <B>> AND <C>>>

Hier ist die Tabelle dazu:


Volladdierer
Erster Summand Zweiter Summand Dritter Summand Ausgang Summe Ausgang Übertrag
False False False False False
False False True True False
False True False True False
True False False True False
True True False False True
True False True False True
False True True False True
True True True True True

Würde man False durch 0 ersetzen und True durch 1, sähe die Tabelle wie folgt aus.

Volladdierer
Erster Summand Zweiter Summand Dritter Summand Ausgang Summe Ausgang Übertrag
0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
1 0 0 1 0
1 1 0 0 1
1 0 1 0 1
0 1 1 0 1
1 1 1 1 1

Man kann aus mehreren Volladdierern einen Ripple-Carry-Volladdierer (Ein Ripple-Carry-Volladdierer ist ein Addierer mit mehreren Bits als Ausgang z.B. der 4-Bit-Volladdierer) konstruieren. Das hört sich erst einmal sehr kompliziert an, ist aber einfach nur eine Verkettung von mehreren Volladdierern. Ein Ripple-Carry-Volladdierer hat den Vorteil, dass er unendlich weit ausgebaut werden kann. Das bedeutet, mit einem groß weit genug ausgebauten Ripple-Carry-Volladdierer, kann man Berechnungen wie 149+38 rechnen.

4-Bit-Volladdierer

Ripple-Carry-Volladdierer Verkettung.jpg

Der 4-Bit-Volladdierer kann Additionen ausführen. Die Ergebnisse sind 4 Bits lang. Ein Bit ist eine Ziffer im Binärcode. Also eine Ziffer die den Wert "0" oder "1" annehmen kann. Eine 4 Bit lange Binärzahl ist zum Beispiel 1011. Die Länge dieses Codes ist 4 Ziffern - 4 Bits. Ein 4-Bit-Volladdierer entsteht durch die Verkettung von mehreren Volladdierern. Ein Volladdierer hat 3 Eingänge. Die nennen wir hier X, Y und Z. Er hat zwei Ausgänge, die nennen wir Summe und Übertrag. Wenn man einen 4-Bit-Volladdierer baut, braucht man drei Volladdierer. Die sind ineinander verkettet. Und zwar so: Man braucht Booleane. Einen nennen wir Z, einen X1, einen Y1, einen X2, einen Y2, einen X3 und einen Y3. Die Ausgänge X1 und Y1 liefern die Werte für die Eingänge X und Y des ersten Volladdierers, die Ausgänge X2 und Y2 liefern die Werte für die Eingänge X und Y bei dem zweiten Volladdierer, die Variablen X3 und Y3 für die Eingänge X und Y des dritten Volladdierers. Die Variable Z wird für den Eingang Z im ersten Volladdierer gebraucht. Warum der zweite und der dritte Volladdierer keine solche Variable hat, erfährst du gleich. Wenn der erste Volladdierer mit seinen Variablen X1, Y1 und Z die Berechnung gemacht hat, wird der Ausgang Summe beibehalten, die Variable Übertrag geht in den Eingang Z des zweiten Volladdierers. Dann führt der zweite Volladdierer mit den Eingängen X2, Y2 und dem Übertrag der vorherigen Berechnung die nächste Berechnung durch. Der Ausgang Summe wird beibehalten, der Ausgang Übertrag geht in den Eingang Z des dritten Volladdierers Das gleiche wiederholt sich mit dem dritten Volladdierer, das bedeutet der dritte Volladdierer führt die Berchnungen mit den Variablen X3, Y3 und dem Ausgang Übertrag der Berechnung des zweiten Volladdierers. Die Ausgänge die jetzt noch übrig geblieben sind, sind die Ausgänge Summe von der Berechnung des ersten Volladdierers, der Ausgang Summe von der Berechnung des zweiten Volladdierers und die beiden Ausgänge Summe und Übertrag von der Berechnung des dritten Volladdierers. Wenn man aus diesen vier Ausgängen (vier Bit) eine Zahl kriegen will, muss man das Prinzip der Binärzahlen benutzen. Dementsprechend bekommt der Ausgang Summe des ersten Volladdierers den Wert 1, der Ausgang Summe von dem zweiten Volladdierer den Wert 2, der Ausgang Summe des dritten Volladdierers die 4 und der Ausgang Übertrag von dem dritten Volladdierer den Wert 8. Wenn man daraus die Binärzahl errechnet hat man das Ergebnis. Fertig!



Code zum Einbinden ins Forum:
[wiki=de:Logikgatter]Logikgatter[/wiki]
Cookies helfen uns bei der Bereitstellung von Das deutschsprachige Scratch-Wiki. Durch die Nutzung von Das deutschsprachige Scratch-Wiki erklärst du dich damit einverstanden, dass wir Cookies speichern.