在以“ 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
处安装逆变器以解决此问题?
在这种情况下,等于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
,也设置了进位。
总而言之,如果您使用有符号逻辑,并且需要了解是否有溢出,则需要对照结果的两个来检查两个操作数的符号。