Serieller Addierer mit Einerkomplementarithmetik

Der Apollo Guidance Computer (AGC) verwendete die Komplementarithmetik. Der folgende Clip aus Frank O'Briens Buch über den Apollo Guidance Computer (2010) bietet eine teilweise Rechtfertigung für diese technische Entscheidung:

Der Schlüssel zur Einfachheit solcher Addierer ist die Anforderung, dass Zahlen das Einerkomplement für ihre Darstellung verwenden.

Frage: Warum ist die eigene Komplementdarstellung der Schlüssel zur Einfachheit eines seriellen Addierers?

Hier ist der Clip im Kontext von The Apollo Guidance Computer: Architecture and Operation ( http://amzn.to/2EfVFla ):

Clip aus dem AGC-Buch

Die Antwort steht im letzten Satz des Zitats.

Antworten (1)

Brians Kommentar ist meiner Meinung nach der offensichtliche - die zusätzliche Idee, dass "+1" für die Zweierkomplementnotation erforderlich ist. (Ich habe seinen Kommentar erhöht.) Die Implikation ist hier, dass es wesentlich mehr Logik geben müsste, um diese zusätzliche Funktion auszuführen, die das eigene Komplement nicht benötigt.

Aber ich glaube nicht, dass es das war.

Ein serieller Addierer führt genau die gleichen Funktionen aus, egal ob Einerkomplement oder Zweierkomplement. Der einzige Unterschied besteht darin, dass der Übertrag für das Zweierkomplement bei negativen Zahlen mit „1“ anstelle von „0“ beginnt, während der Übertrag für das Einerkomplement immer „0“ ist, unabhängig davon. Dies ist jedoch kein Problem. Für einen seriellen Zweierkomplement-Addierer muss lediglich ein "Preset" zum Carry-State-FF hinzugefügt werden (zusätzlich zum "Reset".) Und das ist eigentlich gar nicht so schwierig. Es fügt etwas hinzu. Aber ich glaube einfach nicht, dass es genug hinzufügt, um ein starkes Argument dafür zu liefern, dass dies der Grund war.

(Wenn Sie den typischen moderneren "serial adder"-Ansatz sehen möchten, werfen Sie einen Blick auf Use of D flip-flop in Serial Adder . Dort können Sie sehen, von welchem ​​FF ich oben spreche.)

Negative Zahlen verwenden in beiden Schreibweisen eine "1" als Vorzeichenbit. Dies wird verwendet, um die Bits (falls zutreffend) zu invertieren, wenn sie durch den Addierer geschoben werden. Auch dies wäre in beiden Fällen identisch. Null zusätzliche Logik in diesem Punkt.

Die Realität sieht also, glaube ich, etwas anders aus. Es geht um die Möglichkeit, den FF komplett zu entfernen. Sie verwendeten einfach ein ODER-Gatter, gefolgt von einer Verzögerungsleitungsschaltung zwischen zwei Halbaddierern, um die Notwendigkeit eines FF vollständig zu ersetzen. Dieses ODER-Gatter plus Verzögerungsleitung hat deutlich weniger Teile als ein FF und unterstützt "Preset" nicht einfach.

Hier ist ein schnelles Diagramm:

Geben Sie hier die Bildbeschreibung ein

Ich kann keine Dokumentation darüber finden, dass dies der eigentliche Grund ist. Wenn ich könnte, würde ich es hier posten. Aber ich erinnere mich an die Verwendung von Verzögerungsleitungen "früher" für diese und beim Nachdenken vermute ich den Unterschied zwischen einem einfachen Gate + einer Verzögerungsleitung und der alternativen Verwendung eines vollständigen FF (wie es moderne Bücher zu diesem Thema zu haben scheinen). it done) war meiner Meinung nach eher der Grund.

+1 übrigens für deine Frage. Du hast mich einen Moment zum Nachdenken gebracht und das weiß ich zu schätzen.

Der Übertrag für das Zweierkomplement beginnt mit "1" anstelle von "0" für negative Zahlen. Meine Zweierkomplement-Addierer tun dies nicht und sie funktionieren einwandfrei. Wohlgemerkt, sie invertieren die Bits (falls zutreffend) auch nicht, wenn sie durch den Addierer verschoben werden . Das "alle Bits invertieren und dann eins hinzufügen" ist als Rezept zum Negieren einer ganzen Zahl sinnvoll, aber eine schreckliche Definition. Eine konzeptionell viel bessere Definition ist, dass die Zweierkomplementdarstellung dieselbe ist wie eine vorzeichenlose Binärdarstellung, außer dass der Stellenwert des msb -2^(N-1) anstelle von +2^(N-1) ist.
Daher ist das Zitat in der Frage, dass serielle Addierer nicht mit Zweierkomplementzahlen funktionieren können, höchst verdächtig.
Ahh, vielleicht meinten Sie, dass Carry-In nicht für negative Zahlen gilt, sondern wenn die ALU eine Subtraktion durchführt?
@BenVoigt Ich bin heute Abend etwas beschäftigt. Und ich weiß, dass Sie Erfahrung haben, aus der Sie schöpfen. Aber das scheint mir "offensichtlich" und ich habe auch Erfahrung, aus der ich schöpfe. Ich spreche von einem seriellen Addierer und den Unterschieden in seiner Hardware, die ausreichen könnten, um jemanden dazu zu bringen, das Einerkomplement dem Zweierkomplement vorzuziehen. Nur das. Nichts mehr. Das ist die Frage des OP. Wenn ich etwas Zeit finde (wird leider nicht heute Abend oder morgen sein), werde ich in Betracht ziehen, ein detaillierteres, konkretes Beispiel zu liefern. Aber es ist nicht schwer zu sehen. Also bin ich erst einmal verwirrt über deine Verwirrung. Vielleicht ändert sich auch meine Verwirrung.