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

标签 vhdl verilog fpga twos-complement

在取反数字符号的两个补码中,您通常只需取反每一位并加 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/

相关文章:

vhdl - 赛灵思 "Dead code"

tdd - 在Verilog或VHDL中进行逻辑(芯片)设计的测试驱动开发(TDD)的经验

VHDL 缓冲区变量与输出变量

vhdl - 是否可以检查输入文本文件的长度?

syntax-error - 从 Vivado 获取 "No such design unit"

vhdl - 其他 => Verilog 中的 '1' 语句

c++ - FPGA - 使用 C/C++ 测量 CPU 延迟

audio - PCM流实时音乐压缩

python - Cocotb 在门级仿真中使用泛型/参数

tcl - TCl脚本错误的解决办法是什么?