0

基本的に、モジュールには次のコードがあります。数値を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 を実行すると、遅い方法で意味不明な数値も表示されます。

誰が何が悪いのか教えてもらえますか? ありがとう。

4

2 に答える 2

2

これは、おそらく合成ツールの方がうまくいく可能性があるため、単純z <= -a;に 、 where a、およびzare of typeを使用することをお勧めしsignedます。

これにより、ターゲット アーキテクチャが何であれ、合成がターゲット アーキテクチャの否定を最適化します。たとえば、FPGA での not + 1 の計算は非常に効率的です。

于 2013-10-07T21:12:33.413 に答える