2017-03-02 1 views
0

Zwei 8-Bit-Eingänge werden dem Komparator zugeführt, und wenn der erste größer als der zweite ist, sollen sie subtrahiert werden, sonst sollen sie addiert werden. Aber, und < Operatoren sollen nicht verwendet werden, um sie zu vergleichen. Also, ich habe meine Logik geschrieben wie:Vergleich zweier Zahlen ohne Vergleich Operatoren in Verilog

input[7:0] in1,in2; 
output select; 
assign select=(in1-in2)?0:1; 

Es ist immer subtrahiert, es sei denn, Differenz 0 ist gleich Wenn ich Division verwenden, 0 kann nicht ein Eingang oder mein Programm kann abstürzen sein. Irgendwelche Vorschläge, wie man dieses Problem löst?

Vielen Dank für Ihre Zeit.

Antwort

2

Denken Sie daran, dass das am weitesten links liegende Bit einer negativen Zahl immer 1 ist. Damit können Sie das Vorzeichen des Unterschieds überprüfen.

input[7:0] in1,in2; 
output select; 
wire [7:0] difference = in1-in2; 
wire sign_of_difference = difference[7]; 
assign select = sign_of_difference? 0:1; 
+0

Vielen Dank Alper. Aber warum funktionierte das und die Logik, die ich benutzte, nicht? Passt der Draht oder die Größe zueinander? – ZealousCoder

+1

Gern geschehen, ZealousCoder. In 'assign select = (in1-in2)? 0: 1;', 'in1-in2' ist ein 8-Bit-Wert. '(in1-in2)?' Operation vergleicht, ob das Ergebnis dieser 8-Bit-Subtraktion größer als Null ist oder nicht, und gibt nur 0 zurück, wenn 'in1-in2' gleich Null ist. Bitte denken Sie daran, die Antwort zu akzeptieren, wenn Sie glauben, dass sie Ihr Problem löst. –