在 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 位)。
大家好, 我正在从事一个需要我使用签名加法器的项目。 如何在不使用算术运算符的情况下在 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 位)。