Welche 4-Bit-Binärzahl ist größer?

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)

Ihre Wahrheitstabelle wird weit weniger als 256 tatsächliche Zeilen haben, da nur 1 von 4 Bedingungen wahr sein kann.
@IgnacioVazquez-Abrams wie in, es ist nur wahr, wenn A = 1 und B = 0, sonst haben wir A = B oder A <B. Das würde mir jedoch immer noch eine Wahrheitstabelle mit 64 Zeilen hinterlassen.
Ich zähle 12 Reihen. Niederwertige Bits spielen keine Rolle, die höherwertigen Bits bestimmen das Ergebnis.
@IgnacioVazquez-Abrams Ich bin durch diese Aussage etwas verwirrt, das LSB bestimmt manchmal, was größer ist wie 0000 gegenüber 0001
Aber niemals mit 0b1000 vs. 0b0000 bis 0b0111.
Es gibt also Bereiche, in denen uns das MSB mitteilen kann, welcher Wert größer ist. Und ich muss mir keine Gedanken darüber machen, welchen Wert die anderen Bits haben (sie werden zu egal Eingaben). Aber wie würde ich all diese Bereiche finden?
Indem man darüber nachdenkt. 1s zum MSB bedeutet, dass Sie alle kleineren Bits ignorieren können.
Wenn Sie Ihre Antwort mit einem optimierten Ergebnis vergleichen möchten, können Sie sich das interne Diagramm von ICs ansehen, die für diesen Zweck entwickelt wurden (z. B. 74HCxx). Ich denke nicht, dass dies gegen den Geist verstößt, keine Hausaufgaben für das OP zu machen, da sie immer noch die Arbeit zeigen müssen, um das Ergebnis abzuleiten.
@SpehroPefhany danke für den Vorschlag, aber ich bin mir nicht sicher, was ein IC ist
Integrierter Schaltkreis. Schlagen Sie 74HC85 nach , wenn Sie Ihre Antwort erhalten haben.

Antworten (2)

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

A = 1100 B = 1011

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 ich , wobei X ich 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 ich , ist hoch. Mit dieser Logik können wir die Werte von X extrahieren ich = {X 3 X 2 X 1 X 0 } als Sein

X 3 = B 3 ( A 3 B 3 ) X 2 = B 2 ( A 2 B 2 ) . ( A 3 B 3 ) ¯ X 1 = B 1 ( A 1 B 1 ) . ( A 2 B 2 ) ¯ . ( A 3 B 3 ) ¯ X 0 = B 0 ( A 0 B 0 ) . ( A 1 B 1 ) ¯ . ( A 2 B 2 ) ¯ . ( A 3 B 3 ) ¯

wir können dann unser Endergebnis X als erhalten

X = X 3 + X 2 + X 1 + X 0

Am Ende habe ich gesagt, wir haben drei Möglichkeiten: A<B,A>B,A=B. Erstellte eine Wahrheitstabelle und eine K-Karte für diese drei Möglichkeiten und reduzierte sie auf f = A>B. Am Ende brauchte ich nur eine Schaltung, um die Gleichheit zu bestimmen, und eine Schaltung, um festzustellen, ob A> B (wir brauchen die Gleichheitsschaltung, um A> B zu bestimmen).

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.