プロが教えるわが家の防犯対策術!

質問タイトルの通りです。
FPGAを使った実装を試みています。
FPGAの中にfloat限定のDSPがあるのですが、実装したいアプリケーションがunsigned int型のため、
DSPを全く使用していない状態です。なので、このunsigned intの値をfloatに変換し、float上で四則計算した後、またunsigned intに戻す。
という処理をして、DSPを活用できないか、と考えています。
が、値がぐちゃぐちゃになり、うまくいきません。

何か、よいアイディアをお持ちの方はいらっしゃらないでしょうか。
よろしくお願いします。

質問者からの補足コメント

A 回答 (2件)

プログラムにバグがあるか、DSPの仕様を誤解しているか、のどちらかですね。


情報が無いので、どちらかは分かりません。
    • good
    • 0
この回答へのお礼

ありがとうございます。ということは、一般的なC言語とかであれば、intをfloatと見立てて計算することは可能ということでしょうか。具体的にどのようにすればよいのでしょうか。

お礼日時:2017/04/10 23:12

当該FPGAは使ったことないし、データシート全部に目を通してませんが。



○unsigned int は何ビットなのでしょうか?
intのサイズはいろんな条件によって違います。
8ビット、16ビット、32ビット、64ビット、あるいはそれ以外、いろんなケースが考えられます。

○「見做す」という言葉を、どういう意味で使っていますか?
整数と浮動小数点数とでは、内部のビット毎の意味あいが違います。
整数4 と同じビットパターンの浮動小数点数は 4.0にはなりません。
整数4 と同じ値4.0の浮動小数点数は ビットパターンが整数4とは異なります。
互いに「型変換」が必要です。
※ 高級言語で4=4.0のように扱えるのは、「暗黙の型変換」が行われるからです。


その資料によると、IEEE754形式の浮動小数点数に対応しているようです。
https://ja.wikipedia.org/wiki/IEEE_754
ですので、intのビット幅によっては、
int→float→int
とできなくはないと思います。

うまくいかないのは次の点を考慮していないからではないでしょうか?
・ビット幅。
先のWikipediaにある「桁・ビット数(p)」がintの桁に足りないと、その部分か切り捨てられてしまいます。
32ビットintを単精度floatに入れようとすると、下位8ビットを0にしたのとほぼ同じです。
・ビットパターン
型変換無しに浮動小数点数演算したら、期待通りには結果は得られません。


また、その資料によると、固定小数点にも対応しているようです。
固定小数点で「小数点以下0桁」なのが「整数」です。
もしかしたら、これを活用できるかもしれません。
    • good
    • 0
この回答へのお礼

急に仕事がゴタゴタしてしまい、投稿したのを失念していました。お
礼が随分と遅くなってしまって、大変申し訳ありません!!!
詳しいご回答をありがとうございました。

●私の環境でいうunsigned intとfloatがそれぞれ何ビットを指すのか、調べてみたところ、どちらも32bitでした。

●ビットパターンが異なるため、型変換してビットパターンを変換しないといけない、ということですね。
もちろん型変換すると、そこにオーバーヘッドが発生するので、必要ないなら省くのが理想ですが、ビットパターンが異なるために、型変換は必須になってしまいますよね。やはりuint -> float -> uintの型変換を行うようにします。ありがとうございます。

●固定少数点の活用は私もボンヤリとですが、考えてました。kmeeさまのお陰で少しここに取り組んでみようと意欲が出てきました。ありがとうございます。

☆最終目標としては、整数における、和・積・AND、OR、XORの計算を、floatで実行することなのです。和・積は何とかなりそうだと分かりました。あとは論理演算をfloatでやる、というところなのですが、よいアイディアはありませんかね。。。

お礼日時:2017/04/14 17:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!