0 минус 0 дает перенос 1 в схеме сумматора-вычитателя

полная сумматорная схема

В этой конструкции сумматора-вычитателя с входом «M» в качестве флага для вычитания 0 минус 0, по-видимому, дает неверный Cout. Предположим, что мы используем здесь только один полный сумматор (игнорируем A1/B1, A2/B2, A3/B3) для простоты, и M=1, A0=0, A1=0:

Полный сумматор получит входы:

0 (B0) XOR 1 (M) = 1

0 (A0) = 0

1 (M) = 1

Это приводит к 1+1=0, где Cout = 1, но Cout должно равняться 0 для полного сумматора:

полная таблица истинности сумматора

Я думаю, что инвертирование конечного Cout даст правильный результат, но везде, где я ищу в Интернете эту схему сумматора-вычитателя, нет инвертора для конечного Cout. В этой схеме должен быть инвертор на конце Cout, чтобы решить эту проблему?


person platizin    schedule 26.09.2019    source источник


Ответы (1)


Выполнение, равное 1, в этом случае совершенно нормально.

Когда вы работаете с логикой без знака, выполнение используется как флаг переполнения: при условии, что вы работаете с 4-битными операндами, операция:

a = 1000, b = 1001 (Decimal a = 8, b = 9)

  1000 +
  1001 =
--------
1 0001

производит перенос 1'b1, потому что результат 8+9 не может быть представлен 4 битами.

С другой стороны, при работе с логикой со знаком сигнал выполнения теряет свое значение "переполнения". Сделаем пример:

a = 0111, b = 0010 (Decimal a = 7, b = 2)

  0111 +
  0010 =
--------
0 1001

В этом случае результат равен 1001, то есть -7 в дополнении до двух. Очевидно, что у нас произошло переполнение, так как мы добавили два положительных числа, а получили отрицательное. Вынос в любом случае равен 0. В качестве последнего случая, если мы рассмотрим:

a = 1111, b = 0001 (Decimal a = -1, b = 1)

  1111 + 
  0001 =
--------
1 0000

мы видим, что хотя результат правильный -1+1=0, выполнение установлено.

В заключение, если вы работаете в логике со знаком и вам нужно понять, было ли переполнение, вам нужно проверить знак двух операндов против знака результата.

  • Оба операнда положительные (MSB = 0) и отрицательный результат (MSB = 1): переполнение
  • Оба операнда отрицательные (MSB = 1) и положительный результат (MSB = 0): переполнение
  • В любом другом случае: без переполнения
person Sandro Sartoni    schedule 15.03.2020