как да се сравнят две данни в 2s допълни форма?

E

eexuke

Guest
Dear All,
За да се реши кой е по-голям от две данни в 2s допълни форма, само идея, е да ги преведат в десетичен .....Имате ли някакви други добри начини да го прави?
Благодарности!

 
добре, може просто да го сравни като всеки две двоични числа и обърнете резултат след сравнение.
т.е. ако А = 1001, B = 1111;
след това на двукомпонентни имате B> А, но за 2's инвертна допълни, че и изречете> Б.
(това работи, ако номерата са само грозен)

 
Изваждане на две числа и да проверите дали резултатът е нула или отрицателни.
Не забравяйте да направят резултата ни най-малко по-широк от въвеждане на номера.

 
Мисля, че се изважда два пъти номер е добре!
ти само проверка на резултата, който може да ви даде кой е по-голям!

 
Аз не виждам смисъл.

Не е ли винаги е вярно, че ако А (двоичен)> Б (двоичен), тогава
А (2 COMP) <Б (2 COMP)

01 <10, но 10> 01

Проблемът би трябвало да възникнат в 1 "????

Или аз нещо явно има?

 
Ако двете числа са положителни, не повече да кажа!A> B винаги е прав.

но ако nagetive както и пренебрегването на знака малко, след това
Ако А (двоичен) <Б (двоичен), то А (2 COMP)> B (2 COMP)

т.е., 101 и 110 (първите 1 е знак малко), след това 01 <10.така че ако 2 Comp, 101 е -3 и 110 е -2; друго двоичен, 101 е -1 и 110, е -2.

Така че мисля, 1А и 1Б, ако A> B, след това 1A <1B (двоичен) и 1A> 1Б (2 COMP)

 
Добре, Разбирам ви.Така че най-бързият начин да impliment на една машина е просто да се изважда да използвате някои високо ниво език.

 
Нямате нужда от един език на високо ниво.Просто изпълнение на конвенционални двоичен subtractor.Нейната много подобен на ехидна.

Най-бързо?Хмм, може би има по-бърз начин да направя 2's Comp сравнение величина.Това не знам.

 
дам един пример тук, може би U намерят по-добър начин да го изпълни!
Винаги @ (posedge CLK или negedge rst_)
започвам
ако (! rst_)
започвам
do_o <= # unit_delay 0; / / на голяма стойност регистър
id_out_o <= # unit_delay 1'b0 / / номер на регистъра 0 за di1_i или 1 за di2_i
приключвам
в противен случай
IF (di1_i [word_g] == di2_i [word_g])
започвам
IF (di1_i [word_g-1: 0] <di2_i [word_g-1: 0])
започвам
do_o <= # unit_delay di2_i;
id_out_o <= # unit_delay 1'b1;
приключвам
в противен случай
започвам
do_o <= # unit_delay di1_i;
id_out_o <= # unit_delay 1'b0;
приключвам
приключвам
в противен случай
започвам
IF (di2_i [word_g] == 1'b0)
започвам
do_o <= # unit_delay di2_i;
id_out_o <= # unit_delay 1'b1;
приключвам
в противен случай
започвам
do_o <= # unit_delay di1_i;
id_out_o <= # unit_delay 1'b0;
приключвам
приключвам
приключвам

 
Съм заспала за средата на кода!

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="Wink" border="0" />Какво ще кажете за това?

Код:

compare16 модул (A, B, равенство, по-голяма);

вход [15:0] А, Б;

мощност между половете, по-голяма;присвоите равенство = (A == б);

възлага по-голяма = (A> B);

endmodule
 
промяна на комплемента код в обратен код,
след това да ги сравните от MSB на LSB

 
eexuke написа:

Dear All,

За да се реши кой е по-голям от две данни в 2s допълни форма, само идея, е да ги преведат в десетичен .....
Имате ли някакви други добри начини да го прави?

Благодарности!
 
За да се провери две числа трябва да ги изваждате.Ако MSB на резултата е 0, а броят на резултата (останалите цифри без MSB) е 0, тогава двете числа са равни.
Ако MSB на резултата е 0 и номер е / = 0, тогава резултатът е положителен, което означава, че ако резултатът = A - B тогава е по-голям брой от Б.
Ако MSB на резултата е 1 и след това резултатът е отрицателен, което означава, че Б е по-голям.

 

Welcome to EDABoard.com

Sponsor

Back
Top