Einige Grundlagen der digitalen Logik sind der Halbaddierer und der Volladdierer . Wir wissen, wie man die Summe zweier Binärwerte auf der Ebene von UND/ODER/NICHT-Gattern auf einfache Weise erzeugt, wie es in vielen Lehrbüchern dargestellt wird. (Kümmern Sie sich nicht um fortgeschrittene Tricks, die in echten Hochleistungschips verwendet werden.) Ein paar Optimierungen, und wir können subtrahieren .
Was ich mich nicht erinnern kann, jemals gesehen zu haben, sind Methoden auf Gate-Ebene, um das Minimum oder Maximum von zwei Binärwerten zu erzeugen. Gibt es so etwas? Wenn ja, verwenden es irgendwelche Mikroprozessoren?
Wie wäre es, bevor Sie sich mit dem Min/Max befassen, einfach zwei Zahlen zu vergleichen? Angenommen, Sie haben zwei Binärzahlen: A und B, und Sie möchten wissen, ob A > B. Was Sie tun, ist eine einfache Subtraktion, C=BA. Wenn C negativ ist, dann war A größer als B. Bei einer binären Zweierkomplementzahl ist das höchstwertige Bit (MSB) 1, wenn die Zahl negativ ist, und 0, wenn sie positiv ist. Nach der Subtraktion sagt Ihnen also ein einzelnes Bit, ob A oder B größer ist.
Nun, das war eine super einfache Art, es zu erklären. Dabei sind einige Details zu beachten.
Dies funktioniert mit vorzeichenbehafteten Zahlen (Zweierkompliment). Wenn A und B nicht signiert sind, müssen Sie sie zuerst in signiert konvertieren. Das bedeutet eigentlich nur, dass man links ein Null-Bit hinzufügt und die resultierende Zahl um ein Bit größer ist. Wenn beispielsweise A = 1111 (unsigned) ist, müssen Sie A = 01111 (signed) machen.
Das andere Problem ist, dass Sie auf den Zahlenbereich achten müssen, den Sie verwenden werden, und sicherstellen müssen, dass Sie keine Überlauf-/Unterlaufbedingungen haben. Normalerweise gehe ich damit um, indem ich A und B etwas mehr gebe. Aus einer 8-Bit-Zahl mit Vorzeichen wird also eine 9-Bit-Zahl mit Vorzeichen. Sie tun dies, indem Sie das oberste (Vorzeichen-)Bit duplizieren. Wenn beispielsweise A = 1000 (mit Vorzeichen) ist, wird A zu 11000 (mit Vorzeichen).
Sobald Sie die Mathematik richtig durchgeführt haben, können Sie das MSB von C verwenden, um festzustellen, welche Zahl größer ist. Sie können dann einen einfachen MUX verwenden, um A oder B auszuwählen, abhängig vom Wert des MSB von C.
Es heißt Magnitude Comparator und verwendet weniger Gates als die Vanilla-Lösung. Siehe https://stackoverflow.com/questions/10767316/finding-the-maximum-of-two-integers-in-binary-using-bit-logic-only .
Die „Vanille“-Lösung, die Differenz zu berechnen und das MSB zu betrachten, hat den Vorteil, dass bekannte „Teile“ wiederverwendet werden, und kann Ihnen je nach Anwendungsfall etwas Entwurfszeit sparen. Sie können zumindest alle Gatter bis auf eines für die Ausgabe speichern, da Sie nur auf das MSB schauen.
Ignacio Vazquez-Abrams
Das Photon
Ignacio Vazquez-Abrams
Das Photon
travisbartley
Superkatze
Das Photon
Superkatze
Das Photon
Superkatze