Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 39014|回復: 29
打印 上一主題 下一主題

[問題求助] verilog 浮點數運算疑問@@

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-9-2 20:23:40 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
想請問有設計過IEEE 754 浮點數 規則的程式的大大.....% ]( L4 g( [9 n. A% s* V
) R! l# u8 X% T& T& V
規則小弟是看的懂,不過疑問處在於9 L( X  m0 _$ X
假設我設計一個簡單的浮點數加法器,輸入數值a跟b相加.
3 ?1 l( ]# ?) J! s那麼,我的"a如果是十進制10.5"  "b是2.125"3 a* L; ^, j+ w! o3 T3 l/ J+ l7 Y
a跟b是要先正規化之後再行運算嗎?
8 u4 N1 b$ x7 h3 k- b4 b這樣正規化之前,10.5要怎麼顯示成二進位?是固定位元顯示整數部份,
8 G; i( J) y; U; Q. T另一部份固定位元顯示小數部份..ex: 10.5=>1010.18 g) t( `7 C, i; \7 ]# r
這樣輸入a之後變成10101,程式內部再將a[4:1]斷定成整數a[0]斷定成浮點數,8 N! P2 @( j/ J
這樣設計對嗎?
  G+ n! B' L! O我是剛接觸的菜鳥..還請大大們指教提拔....如果有相關code可以參考感激不盡m(_ _)m
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
推薦
 樓主| 發表於 2009-10-18 14:03:42 | 只看該作者
謝謝大大們的幫助,目前我已經完成了部分的程式,現在又遇到一點問題,想提出來跟大大們討論一下...  d+ _$ e" g+ \
想請問大大們~
8 ?9 W6 K! J4 l* da= 41B20000  (16進制- ieee754格式)  十進制22.25) j  L6 t9 R% k" j5 G% ^0 q
b=C2010000  (16進制- ieee754格式)   十進制-32.25$ Y+ a5 i% K, O9 `. m
請問可以直接對ieee754格式的a跟b做四則運算嗎?
8 T1 Y, v5 ]: @7 [  \0 i6 Q(小數點對齊,實數相對位移後)a+b是否等於C2580000 ?2 F$ Z5 D3 q& N/ X0 o( Z" A
4 E* k  z& W8 ~3 u) m; N

# E  d& X4 C' j% @& j, ^' z: O還是說一定要先做十進制的22.25+(-32.25)= -10 最後答案才用IEEE754表示?
4 c$ x7 D+ V; y7 {- L, q-10的IEEE754表示=C12000000 m" v2 Z: K. V: b

. q* l, ?7 `3 Z2 Z) MC2580000與C1200000好像不太一樣.
- Z1 Z; E& s2 W/ h還是說要怎麼逆運算才可以求出-10?, J- ]; b6 x5 m+ }+ F
大大曉得嗎@@?
回復 支持 1 反對 0

使用道具 舉報

2#
發表於 2009-9-4 17:18:51 | 只看該作者
我之前也是這樣子用~
9 [! |4 \& e1 ^3 J # J+ D5 X# M! b8 L& a3 X, `* ]
我覺得應該是ok的情況!
3#
 樓主| 發表於 2009-9-4 20:56:26 | 只看該作者
不過如果照這樣寫,感覺上小數點是固定的,不像浮點數的感覺耶....
4#
發表於 2009-9-8 20:48:56 | 只看該作者
您好
; w+ e( f6 x. G( ~! y0 v* N+ h' c1.如果a,b兩值還沒正規化,則先將a,b正規化,: r0 L+ U  v2 A$ Z
2.將a,b尾數對齊8 C, n% }% c  G6 [
3.尾數相加; F3 Y  y2 Z2 H! p2 j6 t& _
4.將結果正規化
$ k) Y6 j& L6 H0 i
2 p" Q* b) d- Y- ^2 A您參考看看
5#
 樓主| 發表於 2009-9-16 21:38:06 | 只看該作者
大大~我陷在卡在將輸入數值做正規化的動作,, J% s; H, a; |) _# c6 ]
假如輸入的a是10.5, 在程式裡面會變成10101串列輸入,假設我程式固定只有運算到小數第一位,
3 @) F) Y. x' \: Q這樣可以抓到1010.1並且將其正規化,但是如果我輸入數值是整數的00100,這樣他要怎麼判別小數點的位置@@?
& J$ M- g$ p: K9 ^4 r/ r他要怎麼判斷輸入的數值是不是浮點數?
6#
發表於 2009-9-17 08:51:20 | 只看該作者
您好& e2 T: f5 ^! V4 [9 {: {
# k% j5 L  @( z& t- F( n
  a,b兩數要做浮點相加,那麼a,b兩值就要為浮點格式,
0 T' B) V3 T0 @( c; H$ i6 G你的問題不是卡在正規化,10.5=1010.1是定點小數,
2 M4 X/ A5 S2 `7 Z, A10101,00100都不是浮點格式,如何將之正規化,  i9 X- [0 K* J( O: u7 {% w( F: g
不能拿兩個定點格式的值來做浮點運算,
7#
 樓主| 發表於 2009-9-17 21:27:31 | 只看該作者
大大~
: c9 ]2 E+ {* }2 Y請問您說的浮點格式,是像IEEE 754格式這種嗎?....還是??/ t. ?+ X1 k! @- z$ ^- _0 z0 U
5 U2 K" l, w% C  w( N% i
是怎樣的浮點數格式輸入到a才可以被正規化呢^^"~不好意思喔~新手問了一些蠢問題@@
8#
發表於 2009-9-18 09:04:41 | 只看該作者
您好
0 G1 b$ K- z4 k  V/ ^  IEEE 754是浮點格式的一種,當然還有其他的,
0 U" d* e: \/ m5 u1 { 看你要用哪一種嚕,
0 p/ W* W( C6 R# f: G/ {( x3 [3 D# u- ?' [0 s: h. h6 G5 {
如果你用IEEE 754,那麼輸入a,b值就要符合 IEEE 754格式
9#
 樓主| 發表於 2009-9-18 22:06:54 | 只看該作者
IEEE 754的浮點數格式 不是已經正規化了嗎?...7 r* ]: y5 ]- o! n* A

) z) Q$ d# n' n) O  Y沒辦法寫CODE讓輸入的串列資料,將十進致10.5二進致為1010.1輸入後再由程式正規化嗎?
10#
發表於 2009-9-20 11:40:30 | 只看該作者
您好
+ r1 D2 w* @# h6 I+ m. d& t  {0 U4 v) M
a,b不是已知的值嗎?為甚麼不直接用浮點格式來表示,% L+ T6 [% k( v+ H7 n+ X4 t
而要用定點再轉一次呢?
11#
 樓主| 發表於 2009-9-20 21:17:28 | 只看該作者
大大~1 W* D: r$ `% g/ t, ]. a; L8 }
) C' Z8 o% I% ~+ |
你的意思是說 假設我程式可以算到小數第3位,輸入的a 10.5 就是變1010.100% c) U' G9 M3 n- W
如果是整數1,則變成0001.000  這樣來做正規化?
0 ^6 A1 r9 j; l0 ^; t, x5 q) c* f* s還是說Quartus II 有可以判定輸入式浮點數的語法嗎?9 j8 T4 W, }2 p1 \0 S

% v; |7 h+ D. c) K如果沒有的話也得要把輸入的數值做正規化將其輸出,否則也不會有大大說的浮點數格式的輸入吧@@?9 |0 }* K  P" V7 N, S
不知道我這樣說有沒有錯...^^"
12#
發表於 2009-9-21 20:22:38 | 只看該作者
您好/ R* T; ]3 j% H% U6 R: u

, M; ?! b9 Z  w3 A1 C我的意思是你要自己算,將10.5或1先自己轉好成IEEE 754格式,
0 @) p4 E' N! y+ \! d+ R1 }然後在輸入到a,b

評分

參與人數 1 +5 收起 理由
呆頭鴨 + 5 謝謝大大一直幫我解答...

查看全部評分

13#
 樓主| 發表於 2009-9-21 22:45:15 | 只看該作者
大大~
# k1 A6 ]3 |: p+ U0 E5 S, v我知道你的意思了,不過我目前是需要把非IEEE 754格式的浮點數轉成IEEE 754格式.....% o# Z! k' v) f
這樣是不可能實現的嗎?^^"
14#
發表於 2009-9-22 22:21:46 | 只看該作者
可以實現
/ ]/ E/ D, v  p' U2 j6 k; j請把了解規則 用電路可把非IEEE 754格式的浮點數(Fixed Point)轉成IEEE 754格式(Float Point)% u' q, [  J8 `
然後就可以當成浮點數加法器的輸入% `/ O0 w$ {/ V$ Z

* o  e! I. m9 C  _1 e7 y- f0 o[ 本帖最後由 masonchung 於 2009-9-22 10:24 PM 編輯 ]
15#
 樓主| 發表於 2009-9-23 20:05:40 | 只看該作者
masonchung 大大~
3 l& ^: S# D9 y3 U( h8 G, {
4 [' X6 t9 X6 k( R; H+ Y如果要這樣做的話,我的A如果是十進制"2.5",並且可運算到小數點後第5位,二進制的輸入訊號是不是一定要是10.10000
' ^4 a9 k0 A+ K這樣有錯嗎?- \3 D0 ~: Z0 X, j
另外有一點有點疑問,這種作法是不是只能做無號數的浮點數運算?
) f/ p7 ]& B8 j) s5 A7 \, `) q-2.5的話,轉成二進制輸入到A會變什麼? 110.10000這樣?
16#
發表於 2009-9-30 09:04:45 | 只看該作者
你說的二進制是 二補數的表示法 http://zh.wikipedia.org/zh-tw/%E4%BA%8C%E8%A3%9C%E6%95%B8
2 I# V" t+ O! s2 j0 r  m. ?/ c3 ]9 I
ieee754 的 二進位浮點數格式在此 http://zh.wikipedia.org/wiki/IEEE_754
3 Y, I) U' R/ M: K& `; w
& ?- B. j0 y, I! S0 {8 {& q這兩種格式轉換可用電路實現 : I+ a2 Z" r; |" s7 Z( m8 y

1 i% o1 i: r! s1 |: |" l2 i然後再輸入到浮點數加法器運算
18#
發表於 2009-10-19 10:55:44 | 只看該作者
最近剛好有碰到類似的問題 , 感謝說明
19#
發表於 2009-10-19 12:13:41 | 只看該作者
請問可以直接對ieee754格式的a跟b做四則運算嗎? * ~7 e. R+ b0 H1 m
(小數點對齊,實數相對位移後)a+b是否等於C2580000 ?; O1 Y8 y/ x; V2 l0 k8 Z
不對
8 ~* T" X# M( F+ {. p; q只有浮點數加法器和乘法器+ d6 y. Q2 Q4 h) k) I" {. L
所以負數要用二補數
# o" I4 N& _2 {7 \9 E3 \$ A/ QC2010000=1_10000100_0000001_0000_0000_0000_0000
) G% d  M4 N4 I& C2 S! q二補數=1101_1111.11001 P7 M& A$ _" B* h/ o
22.25=0001_0110.0100" S# X0 N5 }3 d3 W/ h
兩者相加即為答案-10, 透過浮點數加法器輸出為C1200000! D; h$ g' E5 N

' y, k( O$ \. h/ A1 s[ 本帖最後由 masonchung 於 2009-11-2 11:12 AM 編輯 ]
20#
發表於 2009-10-19 14:05:59 | 只看該作者
此二補數 1101_1111.1100 表示成IEEE754格式為42010000+ X# S# F/ n, b- M7 U. i
所以真正的浮點加法器輸入的MSB只要反相 就變成二補數
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

首頁|手機版|Chip123 科技應用創新平台 |新契機國際商機整合股份有限公司

GMT+8, 2025-1-31 06:16 AM , Processed in 0.309018 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表