[PR]
2025年04月26日
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
real型を使ってみた
2008年12月18日
どんどんマニアックな方向に進んでいきます(笑)
浮動小数点数化に伴い、整数から浮動小数点数に変換するIPだとか、
浮動小数点数の乗算をするIPだとかを使用しています。
計算の過程で定数を乗ずる必要があるので、これどうしようか?と悩んでいます。
単にSTD_LOGIC_VECTORならビットシフトとか駆使してどうにでもなるんですが、
これはIEEE754で規格化された倍精度演算です。
単純にビットシフトとかで解決する問題でもないんですよ。
で、本やらネットやらを駆使して、
実数を定数として扱う場合について、要はreal型について調べるんですが、
流石マニアックなreal型
な に も の っ て な い ! ! !
ふー
どうしようもないんで自己流で書いてみました。
constant SIX : real :=6.0;
何故かこれで論理合成パスしました。でも本当に正しいか分かりません。
恐らく内部的には"00011100.....000110"みたいになってるんじゃないですかね?(適当)
ちなみに数字の後ろに「.0」を付けることがポイントです!
これで浮動小数点数として認識されます。つけないと怒られます。
ここら辺はC言語とかと同じですな。
というか、そもそもこのreal型は倍精度なのか単精度なのかも分かりません。
あーだめだ。IPがSTD_LOGIC_VECTORだからrealだとはじかれる。
ここはパワーで解くしかありませんな
6.0を正規化すると
6.0=110=0.11×23
符号部0
指数部00000000011
仮数部1100..(50個ゼロが続く)
よって3C000000000000なり!
STD_LOGIC_VECTORで定義するとバイナリを全部書かなければならず、
面倒なのでintegerからコンバートか?
あぁ、そういえばintegerは32bitだった・・・
浮動小数点数化に伴い、整数から浮動小数点数に変換するIPだとか、
浮動小数点数の乗算をするIPだとかを使用しています。
計算の過程で定数を乗ずる必要があるので、これどうしようか?と悩んでいます。
単にSTD_LOGIC_VECTORならビットシフトとか駆使してどうにでもなるんですが、
これはIEEE754で規格化された倍精度演算です。
単純にビットシフトとかで解決する問題でもないんですよ。
で、本やらネットやらを駆使して、
実数を定数として扱う場合について、要はreal型について調べるんですが、
流石マニアックなreal型
な に も の っ て な い ! ! !
ふー
どうしようもないんで自己流で書いてみました。
constant SIX : real :=6.0;
何故かこれで論理合成パスしました。でも本当に正しいか分かりません。
恐らく内部的には"00011100.....000110"みたいになってるんじゃないですかね?(適当)
ちなみに数字の後ろに「.0」を付けることがポイントです!
これで浮動小数点数として認識されます。つけないと怒られます。
ここら辺はC言語とかと同じですな。
というか、そもそもこのreal型は倍精度なのか単精度なのかも分かりません。
あーだめだ。IPがSTD_LOGIC_VECTORだからrealだとはじかれる。
ここはパワーで解くしかありませんな
6.0を正規化すると
6.0=110=0.11×23
符号部0
指数部00000000011
仮数部1100..(50個ゼロが続く)
よって3C000000000000なり!
STD_LOGIC_VECTORで定義するとバイナリを全部書かなければならず、
面倒なのでintegerからコンバートか?
あぁ、そういえばintegerは32bitだった・・・
PR
Comment