在 HDL 中实现有符号加法器

Implementing signed adder in HDL

大家好, 我正在从事一个需要我使用签名加法器的项目。 如何在不使用算术运算符的情况下在 HDL 中实现此加法器?(不需要测试台),是否有办法修改现有的加法器电路以作为带符号的加法器工作,如果是这样,您的输入将有很大帮助。 先感谢您。

要回答问题的第一部分,您需要实现(例如)一个波纹进位加法器,它是一系列全加器 以某种方式连接。互联网上会有大量关于此的内容,因为它是标准内容。例如:http://eda-playground.readthedocs.io/en/latest/code-examples/full-adder.html

回答问题的第二部分:可以处理有符号数的加法器与只能处理无符号数的加法器是相同的,只要输入和输出使用 two's complement 代表。

要使用二进制补码表示对数字取反,将所有位取反并加一。例如,使用 8 位二进制补码表示

 23  is  00010111    and
-23  is  11101001    which was generated by inverting all the bits (11101000) and then adding 1

现在让我们使用标准加法器将两者相加,即像您在学校学到的那样进行长加法:

 23  is  00010111 
-23  is  11101001 +
         --------
      (1)00000000
         --------

看:它起作用了! (1) 是进位输出,可以忽略。将两个数字相加的结果需要比这两个数字中较宽的那个宽一位。所以,我们真的应该首先将两个输入加宽到 9 位。因此,在 9 位二进制补码表示中:

 23  is  000010111 
-23  is  111101001 +
         ---------
      (1)000000000
         ---------

您通过 sign-extending 扩大使用二进制补码表示的数字(即 signed 数字):也就是说,你拿左边的位(MSB,符号位)并向左重复它(在这种情况下一次,因为我们只加宽了 1 位)。