基本上我的模块中有以下代码。我想将一个数字更改为 2 的补码负数。
例如。100 变为 -100,-200 变为 200。
我发现的一个捷径是从 LSB 读取直到达到“1”,然后翻转它之后的所有位。我正在尝试使用最少的性能折衷来实现一个 32 位转换器(我听说 num <= not(num) + 1 非常耗费资源)
flipBit <= '0'; -- reset the flip bit
FOR i IN 0 TO 31 LOOP
IF flipBit = '1' THEN
tempSubtract(i) <= not Operand2(i);
ELSE
tempSubtract(i) <= Operand2(i);
END IF;
IF Operand2(i) = '1' THEN
flipBit <= '1';
END IF;
END LOOP;
然而,它所做的并不是全部。此外,当我以缓慢的方式执行 num <= not(num)+1 时,它也会给我乱码。
谁能告诉我怎么了?谢谢。