« 怒涛の納品2 | トップページ | HDMIを2つ入力するための回路 »

2017.04.01

固定小数点回路と浮動小数点回路

XILINXのFPGAである種の信号処理回路を作っているのですが、固定小数点回路と浮動小数点回路で結果が一致しました。

Fixed_vs_float

固定小数点では、16bit表現のとき、

符号.有効数字15桁

のようにして-1~1を表現する場合、結果を32768で割ることになります。

結果がパワーのような「二乗」で表現されている場合、16bitでは表現しきれないので32bit(二乗の和を積和する場合は48bit程度に拡張して)計算して、最終結果を32768*32768で割ることになります。

このような桁の換算が結構混乱しますが、演算自体は高速です。また、適当なビット([34:19]とか)をスライスして切り出せば、結果を目ですぐに見ることができ便利です。

一方、浮動小数点の場合は桁の換算は不要なのですが、XILINXのIPコアはIEEE754という形式で数を扱うので、これについて理解しておかなければなりません。詳しくはWikipediaを参照してください。

私は下記の形式にします。

Float

IEEE754で表現された数値は、16進表現をぱっと見て人間が理解できるものでもないので、デバッグはやりにくいです。

C言語のfloatと互換性があるのかどうかはよくわかりませんが、IEEE754の32bit形式で格納された値をfloat型に変換するには、

*(float *)(&val)

で、要するに無理やりキャストでうまくいくようでした。

固定小数点と、浮動小数点の両方で計算したある種の計算の結果が、先のグラフに示したとおりで、まったく同じになりました。

|

« 怒涛の納品2 | トップページ | HDMIを2つ入力するための回路 »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



« 怒涛の納品2 | トップページ | HDMIを2つ入力するための回路 »