Wie ein Chip 6 + 3 rechnet
Ein Addierer ist eine Schaltung, die zwei Binärzahlen addiert. Er rechnet Spalte für Spalte, genau wie Sie auf Papier. Jeder Prozessor enthält Addierer, denn jede andere Rechnung baut auf der Addition auf.
Wenn eine Kasse 6 und 3 Euro addiert, passiert in der Hardware nichts anderes als ein paar Gatter nebeneinander.
Am Ende dieser Lektion
Notiz
Ich kann zwei Binärzahlen Spalte für Spalte mit Übertrag addieren.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Summenbit | das Bit, das in der Spalte stehen bleibt | |
| Übertrag | das Bit, das in die nächste Spalte wandert | carry |
| Halbaddierer | addiert zwei Bits und kennt keinen Übertrag von rechts | |
| Volladdierer | addiert zwei Bits und einen Übertrag von rechts | |
| Binärzahl | eine Zahl, die nur aus 0 und 1 besteht | 0110 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Binär addieren Sie Spalte für Spalte
Sie addieren Binärzahlen wie Dezimalzahlen auf Papier: von rechts nach links. In jeder Spalte steht ein Summenbit, und ein Übertrag geht in die nächste Spalte.
Zwei Einsen ergeben 10. Die 0 bleibt stehen, die 1 wandert als Übertrag nach links. Ab der zweiten Spalte zählt dieser Übertrag mit.
Beispiel: 0110 plus 0011, also 6 plus 3
| Spalte | Bit a | Bit b | Übertrag von rechts | Summenbit | Übertrag nach links |
|---|---|---|---|---|---|
| 0, ganz rechts | 0 | 1 | 0 | 1 | 0 |
| 1 | 1 | 1 | 0 | 0 | 1 |
| 2 | 1 | 0 | 1 | 0 | 1 |
| 3, ganz links | 0 | 0 | 1 | 1 | 0 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Die Summe 6 plus 3 binär ausgeben
python3 -c "print(bin(6 + 3))"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Zwei Bausteine: Halbaddierer und Volladdierer
Ein Halbaddierer hat zwei Eingänge, a und b. Sein Summenbit ist XOR, sein Übertrag ist UND. Er passt nur in die Spalte ganz rechts.
Alle anderen Spalten haben drei Eingänge: a, b und den Übertrag von rechts. Dafür gibt es den Volladdierer. Er hat zwei Ausgänge, denn drei Bits ergeben höchstens 3, und 3 ist binär 11. Im Lab bauen Sie ihn selbst.
Drei Bits zusammen ergeben höchstens 11
| Wie viele Einsen sind darunter | Summe als Zahl | Zwei Bits: Übertrag, Summenbit |
|---|---|---|
| Keine | 0 | 00 |
| Eine | 1 | 01 |
| Zwei | 2 | 10 |
| Drei | 3 | 11 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein Nachbar des Halbaddierers: der Halbsubtrahierer
Um zu sehen, wie ein Baustein aus wenigen Gattern aufgebaut ist, schreiben Sie jetzt einen Nachbarn. Der Halbsubtrahierer rechnet a minus b für ein Bit. Seine Differenz ist wie beim Addierer XOR.
Statt des Übertrags hat er einen Borger. Er ist 1, wenn Sie von 0 ein Bit abziehen und sich eins von links borgen müssen. Der Befehl grep zeigt vorher die zwei Zeilen des Halbaddierers.
In den Ordner hdl wechseln
cd ~/hdlHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die zwei Zeilen des Halbaddierers
grep assign half_adder.vHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Das Modul halbsub.v schreiben
printf '%s\n' 'module halbsub(input a, input b, output diff, output borgen);' ' assign diff = a ^ b;' ' assign borgen = ~a & b;' 'endmodule' > halbsub.vHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Den Testbench halbsub_tb.v schreiben
printf '%s\n' 'module halbsub_tb;' ' reg a, b;' ' wire diff, borgen;' ' halbsub dut(.a(a), .b(b), .diff(diff), .borgen(borgen));' ' integer i;' ' initial begin' ' $display(" a b | borgen diff");' ' for (i = 0; i < 4; i = i + 1) begin' ' {a, b} = i;' ' #1 $display(" %b %b | %b %b", a, b, borgen, diff);' ' end' ' end' 'endmodule' > halbsub_tb.vHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Übersetzen und simulieren
iverilog -o /tmp/halbsub halbsub.v halbsub_tb.vHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die Tabelle des Halbsubtrahierers
vvp /tmp/halbsubHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein häufiger Fehler
Warnung
Viele denken, mit Halbaddierern allein lasse sich jede Zahl addieren. Ein Halbaddierer kennt aber keinen Übertrag von rechts. Nur die Spalte ganz rechts hat keinen. Jede andere Spalte hat drei Eingänge und braucht deshalb einen Volladdierer.