Vhdl 用HDL实现有符号加法器

Vhdl 用HDL实现有符号加法器,vhdl,verilog,Vhdl,Verilog,大家好,, 我正在做一个项目,需要我使用签名加法器。 如何在不使用算术运算符的情况下在HDL中实现此加法器?(不需要测试台),是否有方法修改现有加法器电路以用作有符号加法器,如果是这样,您的输入将非常有帮助。 先谢谢你 要回答问题的第一部分,您需要实现(例如)一个纹波进位加法器,它是一系列以某种方式连接的全加器。互联网上会有很多关于这个的东西,因为这是标准的东西。例如: 回答问题的第二部分:可以处理有符号数的加法器与只能处理无符号数的加法器相同,只要输入和输出使用2的补码表示 要使用二的补码表示

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

要回答问题的第一部分,您需要实现(例如)一个纹波进位加法器,它是一系列以某种方式连接的全加器。互联网上会有很多关于这个的东西,因为这是标准的东西。例如:

回答问题的第二部分:可以处理有符号数的加法器与只能处理无符号数的加法器相同,只要输入和输出使用2的补码表示

要使用二的补码表示法对一个数求反,一个将所有的位反转并加一。例如,使用8位2的补码表示

 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位2的补码表示中:

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

您可以通过符号扩展来加宽使用2的补码表示法(即有符号数)的数字:也就是说,您使用左手位(MSB,符号位)并向左重复它(在本例中是一次,因为我们仅加宽1位)。

如何在HDL中实现此加法器-与实现任何逻辑电路的方式相同。从真相表开始。StackOverflow应该是你最后的选择。用离散的步骤定义你必须做的事情,然后搜索并学习其中的每一个步骤。简而言之,做你的家庭作业。如果你还有问题,就把它们贴在这里。谢谢你,有没有一种不用“+”操作符就可以实现的方法。