Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Halbaddierer und Volladdierer

Nach dieser Lektion: Ich kann zwei Binärzahlen Spalte für Spalte mit Übertrag addieren.

Lektion, 50 Min.7 BefehleDigitaldesign-Lab: Verilog, VHDL und yosys in einer privaten Ubuntu-VM

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

BegriffWas er bedeutetBeispiel
Summenbitdas Bit, das in der Spalte stehen bleibt
Übertragdas Bit, das in die nächste Spalte wandertcarry
Halbaddiereraddiert zwei Bits und kennt keinen Übertrag von rechts
Volladdiereraddiert zwei Bits und einen Übertrag von rechts
Binärzahleine Zahl, die nur aus 0 und 1 besteht0110

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

SpalteBit aBit bÜbertrag von rechtsSummenbitÜbertrag nach links
0, ganz rechts01010
111001
210101
3, ganz links00110

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Die Summe 6 plus 3 binär ausgeben

Befehl
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 darunterSumme als ZahlZwei Bits: Übertrag, Summenbit
Keine000
Eine101
Zwei210
Drei311

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

Befehl
cd ~/hdl

Hier 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

Befehl
grep assign half_adder.v

Hier 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

Befehl
printf '%s\n' 'module halbsub(input a, input b, output diff, output borgen);' '  assign diff = a ^ b;' '  assign borgen = ~a & b;' 'endmodule' > halbsub.v

Hier 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

Befehl
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.v

Hier 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

Befehl
iverilog -o /tmp/halbsub halbsub.v halbsub_tb.v

Hier 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

Befehl
vvp /tmp/halbsub

Hier 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.

Über dieses Lab und seinen Quellcode: Digitaldesign-Lab: Verilog, VHDL und yosys in einer privaten Ubuntu-VM

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.