答案 0 :(得分:0)
要回答问题的第一部分,您需要实现(例如)波纹进位加法器,这是一系列连接在一起的全加器办法。在互联网上会有很多关于这个的东西,因为它是标准的东西。例如:http://eda-playground.readthedocs.io/en/latest/code-examples/full-adder.html
回答问题的第二部分:只要输入和输出使用两个补码,可以处理有符号数的加法器与只能处理无符号数的加法器相同表示。
使用二进制补码表示来否定一个数字,一个反转所有位并加一个。例如,使用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
---------
你通过符号扩展扩大使用双补码表示的数字(即签名的数字):也就是说,你取左手位(MSB,符号位)并向左重复(在这种情况下一次,因为我们只扩展了1位)。