Verilog 为什么使用加法执行减法?

Verilog 为什么使用加法执行减法?,verilog,digital,Verilog,Digital,我很好奇为什么我们在数字设计系统中使用加法来实现减法 我有一种预感,它与成本和性能有关,但我不明白它如何省钱或更高效。这实际上可以分解为两个问题: 为什么不为每次操作使用专用电路? 设计中的每一个额外电路都需要花费金钱和时间来设计、验证和分配空间、电源和时间预算。如果我们能设计出一个可以处理多个操作的电路,我们(几乎)总是会领先 在数字电路中,“a+b”和“a-b”是需要不同电路的两种不同操作。幸运的是,在算术中,“a+b”与“a+(-b)”是相同的,所以数学并不关心我们使用哪一个。一些非常聪明

我很好奇为什么我们在数字设计系统中使用加法来实现减法


我有一种预感,它与成本和性能有关,但我不明白它如何省钱或更高效。

这实际上可以分解为两个问题:

为什么不为每次操作使用专用电路?

设计中的每一个额外电路都需要花费金钱和时间来设计、验证和分配空间、电源和时间预算。如果我们能设计出一个可以处理多个操作的电路,我们(几乎)总是会领先

在数字电路中,“a+b”和“a-b”是需要不同电路的两种不同操作。幸运的是,在算术中,“a+b”与“a+(-b)”是相同的,所以数学并不关心我们使用哪一个。一些非常聪明的人想出了一种巧妙的符号数字表示法,它利用了这个数学事实,称为。这种表示法可以方便地添加和反转正数和负数

因为我们现在可以用一个电路实现加法和减法,所以没有必要创建第二个电路

好的,为什么要添加?
如果这些运算现在是可互换的,为什么我们要实现加法而不是减法?我只能对此进行推测,但我怀疑以下原因:

加法器电路比减法器电路简单:

半加法器:

半减法器:

注意减法器有一个附加的反相器。在数字设计中,每一个晶体管都很重要,所以在其他条件相同的情况下,我们应该使用元件较少的电路

此外,加法只是一种更常见的操作。增加指令指针和其他内存地址、迭代器/循环索引以及其他规则格式的值比向后走要常见得多。如果我们选择以本机方式处理减法或加法(我们是这样做的,因为我们只将一个电路用于两者),那么选择最常见的电路是有意义的。现在我们在减法运算中增加了一个额外的步骤(转换为二的补码),但这比在更常见的加法运算中增加一个额外的步骤要好

进一步阅读
EE.SE上有一个非常类似的问题:


这里是SO:

查找2的补码。加法和减法没有区别,只需要创建负数版本。