基本的に、モジュールには次のコードがあります。数値を2の補数の負に変更したい。
例えば。100 は -100 になり、-200 は 200 になります。
私が見つけたショートカットは、「1」に達するまでLSBから読み取り、その後すべてのビットを反転することです。最小のパフォーマンス トレードオフを使用して 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 を実行すると、遅い方法で意味不明な数値も表示されます。
誰が何が悪いのか教えてもらえますか? ありがとう。