Chip123 科技應用創新平台

標題: verilog 浮點數運算疑問@@ [打印本頁]

作者: 呆頭鴨    時間: 2009-9-2 08:23 PM
標題: verilog 浮點數運算疑問@@
想請問有設計過IEEE 754 浮點數 規則的程式的大大.....+ h4 q" ~; C& c5 o% S

8 W7 N  r' B2 E. ?- M0 Y/ x8 _規則小弟是看的懂,不過疑問處在於' y$ n) R) ]+ e, m8 y: J
假設我設計一個簡單的浮點數加法器,輸入數值a跟b相加.
* Z# g7 l+ S5 u( [) y3 k那麼,我的"a如果是十進制10.5"  "b是2.125"6 M& \1 C4 `/ c( n/ l+ x
a跟b是要先正規化之後再行運算嗎?6 R8 I. V, Z- O( a# o9 Z
這樣正規化之前,10.5要怎麼顯示成二進位?是固定位元顯示整數部份,
# z2 M! C0 {9 L. E另一部份固定位元顯示小數部份..ex: 10.5=>1010.1
" D( r: e5 l% Y% R0 d2 C這樣輸入a之後變成10101,程式內部再將a[4:1]斷定成整數a[0]斷定成浮點數,
) o/ O2 {; n- O這樣設計對嗎?
+ W2 n, Q0 K& w! |我是剛接觸的菜鳥..還請大大們指教提拔....如果有相關code可以參考感激不盡m(_ _)m
作者: playfuntime    時間: 2009-9-4 05:18 PM
我之前也是這樣子用~
$ p6 }2 z7 J6 K8 B8 m3 G' Q" T
% j% U' E% Y5 L: s+ O我覺得應該是ok的情況!
作者: 呆頭鴨    時間: 2009-9-4 08:56 PM
不過如果照這樣寫,感覺上小數點是固定的,不像浮點數的感覺耶....
作者: addn    時間: 2009-9-8 08:48 PM
您好
4 Q) i! W- e. e; p1.如果a,b兩值還沒正規化,則先將a,b正規化,7 `4 f& y/ }4 F) c
2.將a,b尾數對齊  k7 U- S0 g/ b1 p) ]0 v& `
3.尾數相加
0 Q+ ?  f: F. d+ X6 \+ v7 P& h+ \4.將結果正規化
8 s% \6 }  s1 v8 I1 q
/ W7 P$ O9 F% w# Z, n* U& u您參考看看
作者: 呆頭鴨    時間: 2009-9-16 09:38 PM
大大~我陷在卡在將輸入數值做正規化的動作,5 @4 {) O& P+ t
假如輸入的a是10.5, 在程式裡面會變成10101串列輸入,假設我程式固定只有運算到小數第一位,2 I; A. b  ^1 p( N5 r6 I3 n
這樣可以抓到1010.1並且將其正規化,但是如果我輸入數值是整數的00100,這樣他要怎麼判別小數點的位置@@?! V3 i8 S0 p; o6 h: T! g' f& n
他要怎麼判斷輸入的數值是不是浮點數?
作者: addn    時間: 2009-9-17 08:51 AM
您好! m- Z0 m" W# e7 C, l

0 G- Z: O, q  L# A  a,b兩數要做浮點相加,那麼a,b兩值就要為浮點格式,$ q& `. ?+ q  _* F& U4 s. \
你的問題不是卡在正規化,10.5=1010.1是定點小數,
! O( V7 O% Q8 {2 u% y10101,00100都不是浮點格式,如何將之正規化,$ l. z' N9 ]( Q5 |: y& F( i
不能拿兩個定點格式的值來做浮點運算,
作者: 呆頭鴨    時間: 2009-9-17 09:27 PM
大大~: r1 L! N7 G0 h) D& W' ~: l
請問您說的浮點格式,是像IEEE 754格式這種嗎?....還是??& c7 j( t1 {/ k" a6 m  ?6 V

* j* f  u% Z4 |3 K- G5 B; @是怎樣的浮點數格式輸入到a才可以被正規化呢^^"~不好意思喔~新手問了一些蠢問題@@
作者: addn    時間: 2009-9-18 09:04 AM
您好
. o  X6 h3 `% u! o- \+ M  IEEE 754是浮點格式的一種,當然還有其他的,: X$ y+ D; M: T) \2 q6 _6 j& U
看你要用哪一種嚕,5 Z3 r9 a$ d0 [8 i1 `

( n9 o7 E4 a, B7 m$ e, Q' Z0 ?( k如果你用IEEE 754,那麼輸入a,b值就要符合 IEEE 754格式
作者: 呆頭鴨    時間: 2009-9-18 10:06 PM
IEEE 754的浮點數格式 不是已經正規化了嗎?...# t# h/ s9 ?/ b' [' N0 u3 l
7 P- q8 b1 o1 Q$ {. i2 c# t
沒辦法寫CODE讓輸入的串列資料,將十進致10.5二進致為1010.1輸入後再由程式正規化嗎?
作者: addn    時間: 2009-9-20 11:40 AM
您好$ e  S( u0 B7 V: S$ Q/ B

- Z! l2 [# x6 E a,b不是已知的值嗎?為甚麼不直接用浮點格式來表示,9 s& Y+ C% l" T0 V: `6 T! @
而要用定點再轉一次呢?
作者: 呆頭鴨    時間: 2009-9-20 09:17 PM
大大~) [, T: L1 {+ u9 V, a% \
: T9 ~$ W! m, J7 f/ ~4 }  L' ^3 |
你的意思是說 假設我程式可以算到小數第3位,輸入的a 10.5 就是變1010.100- j7 W% k+ H$ j- i1 @! r" L. w
如果是整數1,則變成0001.000  這樣來做正規化?" Z* ~8 M; Y3 q0 ?7 P8 @# d: K
還是說Quartus II 有可以判定輸入式浮點數的語法嗎?/ g* ]" @# @) q# z3 r% W

- `( }4 W& e0 E% X/ ^* m* ?如果沒有的話也得要把輸入的數值做正規化將其輸出,否則也不會有大大說的浮點數格式的輸入吧@@?. U2 c& J$ E+ a# K! _
不知道我這樣說有沒有錯...^^"
作者: addn    時間: 2009-9-21 08:22 PM
您好
9 C2 g9 c3 m) ?  Z. u; ~- {" N$ y6 P5 U7 G
我的意思是你要自己算,將10.5或1先自己轉好成IEEE 754格式,* |4 {$ s' ?5 B6 Q5 L3 }9 v
然後在輸入到a,b
作者: 呆頭鴨    時間: 2009-9-21 10:45 PM
大大~7 g2 Q9 T, W& W9 }  R  o+ O" x
我知道你的意思了,不過我目前是需要把非IEEE 754格式的浮點數轉成IEEE 754格式.....
8 Q; G: I' |5 i1 l0 u/ o7 b這樣是不可能實現的嗎?^^"
作者: masonchung    時間: 2009-9-22 10:21 PM
可以實現
1 @0 \& q) F; K! m% U; \: [! ^  X請把了解規則 用電路可把非IEEE 754格式的浮點數(Fixed Point)轉成IEEE 754格式(Float Point)
$ e" v4 S7 m( Y6 X4 P然後就可以當成浮點數加法器的輸入% [& s5 S0 b1 i$ v6 y1 F; i

5 a5 F1 ~6 M# u[ 本帖最後由 masonchung 於 2009-9-22 10:24 PM 編輯 ]
作者: 呆頭鴨    時間: 2009-9-23 08:05 PM
masonchung 大大~
3 R) H. y! ~" w: q" @6 z& H' U/ i 0 D2 `( I8 I) [, V( C1 E6 b; \+ Y
如果要這樣做的話,我的A如果是十進制"2.5",並且可運算到小數點後第5位,二進制的輸入訊號是不是一定要是10.10000
- i( N( W  f7 ~. D+ h這樣有錯嗎?3 N# d, i$ ]" T! U/ g, u  ]. }
另外有一點有點疑問,這種作法是不是只能做無號數的浮點數運算?& i4 U' L4 @; u3 G. S
-2.5的話,轉成二進制輸入到A會變什麼? 110.10000這樣?
作者: masonchung    時間: 2009-9-30 09:04 AM
你說的二進制是 二補數的表示法 http://zh.wikipedia.org/zh-tw/%E4%BA%8C%E8%A3%9C%E6%95%B8
/ y  J- [- K) b. m5 ^/ W) U7 i8 Q2 o/ o- Q& v
ieee754 的 二進位浮點數格式在此 http://zh.wikipedia.org/wiki/IEEE_7545 |/ N/ S! |  Q/ Z7 B$ t/ M

. h* C* _2 Y* w5 G( Z2 k這兩種格式轉換可用電路實現
9 s/ \0 Q: }9 T" A& ]+ S' j! o) ^3 U6 Y9 E% x2 _( a
然後再輸入到浮點數加法器運算
作者: 呆頭鴨    時間: 2009-10-18 02:03 PM
謝謝大大們的幫助,目前我已經完成了部分的程式,現在又遇到一點問題,想提出來跟大大們討論一下...
& K* Q. V( O: X+ n- j想請問大大們~
  K% k/ h" `  t# p( o  xa= 41B20000  (16進制- ieee754格式)  十進制22.25
+ y) L! R) f3 }b=C2010000  (16進制- ieee754格式)   十進制-32.25
6 U: `+ N  \8 L( ?! ]請問可以直接對ieee754格式的a跟b做四則運算嗎? 9 Q" d0 d; r$ q3 e
(小數點對齊,實數相對位移後)a+b是否等於C2580000 ?
* g0 `# @+ J+ y: z6 J , n/ t) v; j/ r- P6 M8 \
- B: @8 K9 v* a8 X
還是說一定要先做十進制的22.25+(-32.25)= -10 最後答案才用IEEE754表示?1 c. e2 Z2 V) z7 M3 q9 V
-10的IEEE754表示=C1200000
2 ?+ @  C' p8 G1 L; z / k6 W! X7 U  i) F0 i# G
C2580000與C1200000好像不太一樣.: ^' F& p# Z2 X3 ~& @  m! L
還是說要怎麼逆運算才可以求出-10?7 ]( f  `4 b" G8 v0 U4 l
大大曉得嗎@@?
作者: phil1801    時間: 2009-10-19 10:55 AM
最近剛好有碰到類似的問題 , 感謝說明
作者: masonchung    時間: 2009-10-19 12:13 PM
請問可以直接對ieee754格式的a跟b做四則運算嗎?   F% z% @/ N0 Z+ ~
(小數點對齊,實數相對位移後)a+b是否等於C2580000 ?
+ E( Z% r6 \$ T7 G5 s) d不對# |  ^( R, J7 \7 k2 Z5 V6 E7 h+ U
只有浮點數加法器和乘法器
! d4 X2 N2 f0 V, k- r/ W- U) |所以負數要用二補數
+ j& c# S" f# w) z% OC2010000=1_10000100_0000001_0000_0000_0000_0000! k6 T6 M2 A) n0 p/ u
二補數=1101_1111.1100
: F, P5 U4 ]0 b! }8 h22.25=0001_0110.0100$ g# K. Z/ g$ i) }- t: k5 P
兩者相加即為答案-10, 透過浮點數加法器輸出為C12000003 y0 C; |5 R3 n* \# o

' t( D$ @0 ^8 i# v* \' b9 a[ 本帖最後由 masonchung 於 2009-11-2 11:12 AM 編輯 ]
作者: masonchung    時間: 2009-10-19 02:05 PM
此二補數 1101_1111.1100 表示成IEEE754格式為42010000
- n: g' N5 a1 N4 y: `) P4 Y所以真正的浮點加法器輸入的MSB只要反相 就變成二補數
作者: 呆頭鴨    時間: 2009-10-19 08:05 PM
mas大..但是如果轉成二補數42010000之後8 J/ v& n& z( d7 w' o
與41b20000 偏移值調整後42590000 做有效位數相加=425A0000 ←這樣吧@@?
3 g& E6 H7 t3 q4 O並不等於C1200000 的說....
作者: masonchung    時間: 2009-10-21 12:08 PM
42010000 (-32.25) 是IEEE754格式 也就是浮點數加法器的輸入A
0 M1 t- i7 D+ c6 G6 ]41b20000 (22.25) 是IEEE754格式 也就是浮點數加法器的輸入B
; X, L  U8 N/ J5 L這個浮點加法器內部輸入級 的功用就是偏移值調整後做有效位數相加
+ B$ L% C( r# c: ?5 c7 Q
, ^9 p, A, l  Z6 }6 b3 r所以 浮點加法器內部 運算級
4 K# E( W, S% Q- O5 h# FA=1101_1111.1100: _5 X% V# M0 s: J0 f) S  k0 t, P
B=0001_0110.0100
) ~" s9 U- Z8 V( Y& ?6 l* aA+B=1111_0110.0000 = -(10)
: t: i4 h, `+ U- T
7 Q- [! t1 i( N' B7 R. i再透過浮點數加法器輸出級 轉換為IEEE754格式4 J2 C+ Q" w4 p0 N% P9 n/ \- }0 `0 Q
輸出為C1200000
5 a# ]" i. N/ s0 |/ t# R: s8 R, D
0 t. m# F/ D! j- p  n1 m$ V[ 本帖最後由 masonchung 於 2009-11-2 11:16 AM 編輯 ]
作者: 呆頭鴨    時間: 2009-10-21 08:20 PM
謝謝大大提點~又學到東西了...^^  o7 g2 Y! r4 H4 h) Y$ Z9 _' M
7 i9 n6 [- v3 A) ^, B( `
另外想問做乘法運算
6 x  T( k1 j1 r3 ?有效位數直接a*b跟  a+a 加b次  哪一種作法在硬體上速度較快呢?) t7 }2 t4 ?3 |' c) {
除法也是如此嗎?
作者: 呆頭鴨    時間: 2009-10-23 08:43 PM
大大~另外請問使用quartus做波形模擬的時候,input有辦法設定輸入10進制浮點數嗎? EX: (22.25)
$ Z& K$ b. S  z3 B6 R- m# _  C假如無法使用,這樣的話10進制的浮點數數值要如何輸入? 難道是輸入 A1= 22   A2=0.25  A1+A2=A  這樣訊號要怎麼分離@@~不知道大大有沒有聽的懂我的意思^^"
作者: masonchung    時間: 2009-10-29 11:12 AM
input有辦法設定輸入10進制浮點數嗎?
) s( ^0 W; @" J( _  L因為你的電路功能是浮點數ALU 輸入自然是IEEE-754格式
) G1 T) Y2 _1 ^6 ^) l1 E先自行換算22.25 成IEEE-754格式 41b20000 輸入
/ M) Z% z2 D5 Y: R6 L8 }; s6 x; \' E
quartus 用32bit 就可以輸入阿+ V! M+ H$ I4 x" Q- n* G) A

; l7 \3 H4 k9 s9 u~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~! h4 A/ r4 @8 J+ e7 J
如果規定要用10進制浮點數輸入) K2 S1 G9 p2 a
那你的輸入級就要多一個轉換電路
' g) y0 b) s! T2 O+ |* K' A可把非IEEE 754格式的浮點數(Fixed Point)轉成IEEE 754格式(Float Point)& d  G+ v) o& k6 k) s
2 D& {( [7 k- k/ d0 Q9 @7 |
[ 本帖最後由 masonchung 於 2009-10-29 01:13 PM 編輯 ]
作者: 呆頭鴨    時間: 2009-10-30 08:28 PM
標題: 回復 25# 的帖子
如果規定要用10進制浮點數輸入3 L$ ]5 D3 Y( O, C* S+ |
那你的輸入級就要多一個轉換電路9 `8 p( M" b) r5 C% L' M
可把非IEEE 754格式的浮點數(Fixed Point)轉成IEEE 754格式(Float Point)
3 t3 l8 a* F9 t----------------------------------------7 f6 t$ J0 \/ c" V5 C" K9 Z4 R
非IEEE 754格式的浮點數 輸入~ 是類似(22.25) => 10110.01 輸入至input ?- c+ w$ k1 D1 |2 v; b" _! [
那在quartus看到的input是不是變成1011001 ? 8 G+ H  u, D3 j5 `  P3 U
這樣的話我怎麼曉得我輸入訊號小數點位置在哪@@?(10.5)=>1010.1
1 |& ?# N2 N5 X3 \還是說要給input的訊號,其訊號源必須要產生固定小數點N位的數值.3 Z9 N# H, `& S+ u6 S9 s9 a
假如訊號源固定產生小數點3位的訊號~4 E/ `. ?1 T- |3 b, S# n9 y
22.25=> 10110.010   第3位補0
, c7 l) l- o: I, P: |- k/ }10.5  => 1010.100   後2位補0至第3位....是這樣嗎?  如果是這樣就可以在程式內部判斷[2:0]為小數[3:N]為整數.......不知道是不是這樣做?
' C, u7 `$ r' k3 _( v+ J
* x4 k. m9 S) t8 M. P-----------------------------------
, A& Z+ S! m- F& binput有辦法設定輸入10進制浮點數嗎?
, R' K) X1 z( V$ [quartus 用32bit 就可以輸入阿
7 ^' I, K  E% _8 z, e6 A 這邊大大是說 我input寫成32bit就可以在模擬的時候使用類似22.25十進制的浮點數?
作者: masonchung    時間: 2009-11-2 11:36 AM
標題: 回復 26# 的帖子
小數點是人判定的,輸入不足位數要補02 M8 M1 y* G6 }  ^3 Q
硬體運算時對齊小數點即可
* d. ~* A9 _6 s7 b8 a
& Z/ e( [; ?& }( ~0 z*******************************************************# |/ l7 z7 B+ y  A3 f" H) z$ R
41b20000 ==>32bit: A% S! B; h7 r, `
這邊是說輸入已經是IEEE-754格式
4 o" W- t2 E3 j- Q8 r0 Y+ o*******************************************************
% g; K( Z4 V! W! b( g7 J% u如果輸入是10進位浮點數 輸入quartus 後 要換成sign bit + 32-bit fixed-point
6 m8 x1 Q1 l1 i% e: H, m" P$ A# w" o22.25 = (10110.01) 二進位 = {sign-bit=0,0016.4000} 十六進位
: K. d1 x7 q& @+ O& M; A& m! H% K# D+ ^# }( T9 ?; H' S5 X* p
用fixed-point to float-point 轉換電路 6 G; r5 M% D' n" p4 q
換算成IEEE-754浮點數格式- a- j% r5 s( l4 E
就可以給浮點數ALU 作運算' P+ p" o* }* D! G5 G7 z
; l5 c" B! }- B/ L( C
[ 本帖最後由 masonchung 於 2009-11-2 11:41 AM 編輯 ]
作者: 呆頭鴨    時間: 2009-11-2 07:56 PM
謝謝大大~我知道怎麼做了) y! O) i: S! p- M7 L  ?5 b- ?4 k% e5 H
4 v7 @6 j/ {7 Y6 Z8 Z3 `; r1 k
另外請問,做浮點數除法運算時 做法為 指數相減 有效數相除
* R" l% E4 v  H& f但是為何A[22:0]跟B[22:0]的有效數相除時  C=A/B; }5 c2 n$ D" l# f0 {7 \
如果A<B則無法運算
; `1 N6 }. p- {: p7 W是除法運算需要用其他方式完成嗎?
作者: masonchung    時間: 2009-11-4 10:21 AM
標題: 回復 28# 的帖子
除法運算在FPGA 沒有DW IP # H; x6 E/ ~) S& r4 g
所以可用布斯Booth 或 SRT 的演算法來完成8 H& r6 |+ Z4 q7 i, ^. o0 j
* |- d5 M9 |/ L6 ~+ s0 O0 c% ?$ Z
[ 本帖最後由 masonchung 於 2009-11-4 10:27 AM 編輯 ]
作者: 呆頭鴨    時間: 2009-11-10 10:47 PM
大大~請問BOOTH做除法器.是只要把乘法的+ -規則相反變- +就可以了嗎@@"& @( h$ ]4 p# t
如果我乘法要一次判斷比較多位元規則該怎麼定呢??~因為網上找到的大多都是用2BIT作判斷~
: f, ~4 {! J0 E7 I8 I; C
6 g9 `0 }# i: P: D, [+ b) r2 E另外請問一下.SRT俗稱是^^?




歡迎光臨 Chip123 科技應用創新平台 (http://free.vireal.world/chip123_website/innoingbbs/) Powered by Discuz! X3.2