乗除算の代わりにビットシフト(Logical Shift)を使う場合の注意



使用ソフトウェア:
使用ソフトウェア・バージョン: N/A
使用ソフトウェア・バージョンに特化: N/A
二次のソフトウェア: Driver Software>>NI-RIO

問題: FPGAのプログラムを書いています。
割り算をしたいのですが、FPGAでは商&余り関数しかありません。この関数を使うと実行速度が低下するので、代わりにビットシフトを使おうと思います。
符号付の数値をビットシフトする場合、符号ビットはどのように扱われますか?

解決策: FPGAでは割り算をすることができないので、商&余り関数を使うことになりますが、この関数は、実行に必要とするTick数が多く、FPGAの実行速度を下げてしまいます。
乗算、除算は、ビットシフトで同様の結果を得ることが可能ですので、商&余り関数の代わりにビットシフトを使うことで速度の低下を防ぐことができます。
しかし、符号つきの数値を扱う場合には注意が必要です。
ビットシフトは符号ビットを特別扱いはせずに、シフトさせます。
データの最上位ビットが符号になりますが、上位にビットシフト(乗算に相当)すると符号ビットがなくなってしまいますし、下位にビットシフト(除算に相当)すると元の符号ビットは下位の数値を表すビットの上位桁に移動し、最上位ビットに0が追加されていくので結果の符号ビットは0になります。したがって、符号を考えずにビットシフトを使うと、求めたい値と大きく異なってしまうことになります。
ビットシフトを使う場合は、符号に十分注意し、負の数の場合の扱いを正しくおこなうようにしてください。

関連リンク:

添付:





報告日時: 03/24/2006
最終更新日: 04/01/2006
ドキュメントID: 3VN16C8V