如何在不使用加法器的情况下制作数字的2补码

HBv*_*Bv6 4 verilog fpga vhdl twos-complement

在双补码中反转一个数字的符号,你通常只是否定每一位并添加1.例如:

011 (3)
100 + 1 = 101 (-3)
Run Code Online (Sandbox Code Playgroud)

在VHDL中是:

a <= std_logic_vector(unsigned(not(a)) + 1);
Run Code Online (Sandbox Code Playgroud)

通过这种方式,合成器使用N位加法器.

没有使用加法器,还有另一种更有效的解决方案吗?

Tim*_*Tim 5

我猜这不是一个更简单的方法,但加法器可能没有你想象的那么糟糕.

如果您试图说明反转32位数字,则综合工具可能以32位加法器结构开始.然而,当看到B输入总是连接到1时,由于未使用的门(AND门与一个引脚接地,OR门与一个引脚连接到逻辑1等),它可以"挖空"许多结构. ).

所以你想到的就是一个合理有效的逻辑blob,它只会增加一个输入数字.