第10回「固定小数点の演算」(201302)

HDLによる回路設計を行う場合、取り扱う数値は整数であることが多いかと思います。
しかしデジタルフィルタやモータ制御などの回路設計では小数を取り扱うことも少なくはありません。今回は小数を含めた固定小数点の演算について触れてみたいと思います。


●小数値の表現方法

整数部は2進数の場合、それぞれの桁は2の0乗、2の1乗と2のべき乗単位の重みを持ちますが、これと同じように小数部は2の-1乗、2の-2乗といったようにマイナスの数値が指数部となった重みを持ちます。

onepoint10_1


例えば、整数部6ビット、小数部6ビットのフォーマットで表現される2進数(000100.010110)は、10進数で表現すると4.34375になります。

onepoint10_2



●フォーマットを決める

小数値の表現方法が分かったところで、小数値を扱う場合に重要なのが数値を表現するためのフォーマット決めです。符号ビットの有無、整数部の桁数、小数部の桁数を決める作業です。必要なビット数については、取り扱う数値と演算精度および演算結果などから検討する必要があります。


例えば、符号なし数値、整数部6ビット、小数部6ビットで構成するフォーマットでは、数値の最小値は (000000.000001)=0.015625となります。すなわちこのフォーマットでは0.015625より小さい数値を取り扱うことができません。さらに0.09という数値を取り扱いたくても、ちょうど0.09の値になるようなビットアサインはできず、以下のように多少の誤差(0.00375)を含んだ近似値で取り扱うことになります。この誤差を量子化誤差と呼びます。

onepoint10_3


回路設計ではビット幅を決めた時点で量子化誤差を生じる場合があります。この時量子化誤差が回路性能に与える影響をシミュレーションなどで十分に評価検討した上で整数部、小数部の必要ビット数を決めなければなりません。



●固定小数点の演算

では固定小数点の数値の演算について考えてみます。実はフォーマットさえ決まれば演算の記述は難しくありません。演算対象の信号のフォーマットを揃えて、演算後のビット数とフォーマットを正しく認識すれば、そのまま加算、減算、乗算の演算ができてしまいます。

整数部3ビット、小数部3ビット符号なし数値のフォーマットで簡単な演算をやってみましょう。


例1)3+1.5=4.5


onepoint10_4



例2)3-1.5=1.5


onepoint10_5




例3)3×1.5=4.5
※乗算後のビット幅と小数点の位置に注意すること


onepoint10_6



このように固定小数点の演算は小数部の数値表現、フォーマットをおさえれば難しくはありません。実は設計者がどこに小数点があるかをしっかりと把握した上で必要なビット拡張を行い、フォーマットを合わせた上で演算の記述をすればよいだけのことなのです。


これから制御系の回路設計で固定小数点の演算を行う機会がある方は参考にしてみてください。



XILINX
教育サービス
HDLABトレーニング(SystemC)
HDLABトレーニング(SystemVerilog)
HDLABトレーニング(Verilog HDL)
HDLABトレーニング(フレッシュマン向け)
HDLABトレーニング(専門分野)
HDLABトレーニング(組込み分野)
HDLABトレーニング(XILINX認定)
HDLABトレーニング日程表
HDLABトレーニング開催リクエスト
設計スキルアセスメント
設計技能検定試験「ESA」
設計技能検定試験「ESA Basic」
設計・コンサルティング
ARM CPUモデル環境
SystemC
Design Style Guide
e-Learning System「STIL」
設計・検証のワンポイント
購入・見積もり
ダウンロード
お問い合わせ

XAP