Meine Aufgabe
Ich arbeite an einer zusätzlichen Arbeitsaufgabe, die uns unser Lehrer aus dem Buch zugewiesen hat. Entwerfen Sie eine kombinatorische Schaltung, die zwei vorzeichenlose 4-Bit-Zahlen A und B vergleicht, um zu sehen, ob B größer als A ist. Die Schaltung hat einen Ausgang X, sodass X = 1, wenn A < B, und X = 0, wenn A = B oder A >B.
Meine Ideen
Ich hatte 2 Ideen, aber beide sind nicht sehr gut. 1 sollte die 2er-Komplementversion von A (positiv) und B (negativ) erhalten. Ich könnte sie dann addieren und wenn wir ein negatives Ergebnis hätten, wäre es offensichtlich, dass B größer als A ist. Das führende Bit wäre 1, also würde ich einfach das führende Bit negieren und das wäre meine Ausgabe. Sonst würde es 1 ausgeben. Dies ist fast eine Lösung, aber ich glaube nicht, dass es funktionieren würde, wenn wir A = B hätten, weil dann das führende Bit 0 wäre, aber wir hätten eine Ausgabe von 1, was A> B anzeigen würde, wenn tatsächlich A = B.
Meine zweite Idee war, jede Zahl in 4 Bits aufzuteilen und die Bits jeder Zahl zu vergleichen und so herauszufinden. Dies würde jedoch eine Wahrheitstabelle mit 256 Zeilen erfordern, und ich würde die Frage lieber nicht beantworten, als das aufzuschreiben.
Keiner meiner Ansätze scheint wirklich machbar zu sein (ich habe nicht einmal das Gefühl, dass sie die Aufgabe erfüllen). Kann jemand einen Hinweis darauf geben, was ein guter Ansatz oder eine gute Idee wäre, um diese Aufgabe zu erfüllen? (Ich suche keine vollständige Lösung, nur etwas, um mich anzufangen)
Wenn Sie die größte Zahl zwischen zwei vorzeichenlosen Zahlen A und B finden möchten, müssen Sie sich nur das höchstwertige Bit ansehen, bei dem die Bits in A und B nicht gleich sind. Die größere Zahl ist die Zahl, die ein ' 1' an diesem Punkt und die kleinere Zahl ist die Zahl, die an diesem Punkt eine '0' hat. zB wenn
dann ist A größer als B, weil beim höchstwertigen Bit, bei dem die Bitnummern nicht gleich sind (in diesem Fall Bitindex 2), A 1 und B 0 ist.
Um dieses Problem zu lösen, können wir also damit beginnen, eine Variable X zu definieren , wobei X ist hoch, wenn i) die Bits von A und B im aktuellen Bitindex nicht gleich sind, ii) alle Bits von A und B in allen Indizes gleich waren, die größer als der aktuelle Index sind, und iii) das Wertbit von B im aktuellen Index, B , ist hoch. Mit dieser Logik können wir die Werte von X extrahieren = {X X X X } als Sein
wir können dann unser Endergebnis X als erhalten
Tatsächlich wäre Ihre Nachschlagetabellen-Idee in einigen Anwendungen so, wie es gemacht wird. Es verwendet eine beträchtliche Menge an Nur-Lese-Speicher, um die Aufgabe zu erfüllen, hat aber den Vorteil, dass alle Lösungen innerhalb eines einzigen Lesezyklus gefunden werden.
Sie haben Recht damit, dass diese Nachschlagetabelle 256 Einträge hätte. Sie haben insgesamt 8 Bits, von denen jedes einen beliebigen Wert haben kann. 2 8 = 256.
Eine andere Möglichkeit, über dieses Problem nachzudenken, besteht darin, herauszufinden, was Sie an einer beliebigen Bitposition wissen müssten, um die Antwort zu bestimmen. Angenommen, Sie wüssten, ob die höherwertigen Ziffern größer als, kleiner als oder gleich sind. Bei größer oder kleiner als haben die Ziffern links von Ihnen bereits das Ergebnis bestimmt. Im Fall von gleich bestimmt Ihr Bit das Ergebnis, wenn sie unterschiedlich sind.
Überlegen Sie sich jetzt die Logik, die die drei möglichen Zustände von den höheren Bits, den beiden zu vergleichenden Bits, aufnimmt und die drei möglichen Zustände erzeugt, um sie an dieselbe Logik für das nächste Bit weiterzugeben. Sie sollten in der Lage sein, mit dieser Methode eine Logikschaltung zu konstruieren, die mit beliebig großen Zahlen funktioniert, wobei die Zeit zum Finden der Lösung proportional zur Anzahl der Bits in den Zahlen ist. Beachten Sie auch, dass das obere Bit ein Sonderfall ist. Sie können sich das so vorstellen, dass Sie implizit wissen, dass alle Bits links gleich sind.
Ignacio Vazquez-Abrams
Dunka
Ignacio Vazquez-Abrams
Dunka
Ignacio Vazquez-Abrams
Dunka
Ignacio Vazquez-Abrams
Spehro Pefhany
Dunka
Spehro Pefhany