在取反数字符号的两个补码中,您通常只需取反每一位并加 1。
例如:
011 (3)
100 + 1 = 101 (-3)
在 VHDL 中是:
a <= std_logic_vector(unsigned(not(a)) + 1);
通过这种方式,合成器使用 N 位加法器。
是否有另一种更有效的解决方案而不使用加法器?
最佳答案
我想没有更简单的方法可以做到这一点,但加法器可能没有你想象的那么糟糕。
如果您尝试将 32 位数字取反,则综合工具可能会从 32 位加法器结构开始。但是后来看到B
输入总是连接到 1,由于未使用的门(一个引脚接地的与门,一个引脚连接到逻辑 1 的或门等),它可以“挖空”很多结构。
所以你剩下的我想将是一个相当有效的逻辑块,它只会增加一个输入数字。
关于vhdl - 如何在不使用加法器的情况下制作数字的 2 补码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14539734/