Chip123 科技應用創新平台
標題:
verilog 浮點數運算疑問@@
[打印本頁]
作者:
呆頭鴨
時間:
2009-9-2 08:23 PM
標題:
verilog 浮點數運算疑問@@
想請問有設計過IEEE 754 浮點數 規則的程式的大大.....
! n/ c" L9 u% A: A$ I/ @, N2 [1 T: |
9 Q) B0 D3 k( F# i
規則小弟是看的懂,不過疑問處在於
1 `& z/ X) p) `* E2 k
假設我設計一個簡單的浮點數加法器,輸入數值a跟b相加.
: Y+ V8 ~# ~! h5 ~6 B2 n
那麼,我的"a如果是十進制10.5" "b是2.125"
, G' _1 g. t2 q
a跟b是要先正規化之後再行運算嗎?
' i2 J: ^, ^) P- [7 E
這樣正規化之前,10.5要怎麼顯示成二進位?是固定位元顯示整數部份,
( y/ _7 {& N! O
另一部份固定位元顯示小數部份..ex: 10.5=>1010.1
; M" d6 U2 }% i+ z: e/ n
這樣輸入a之後變成10101,程式內部再將a[4:1]斷定成整數a[0]斷定成浮點數,
& ]6 K; [& m3 ]
這樣設計對嗎?
! }; ~" F6 K; y# D
我是剛接觸的菜鳥..還請大大們指教提拔....如果有相關code可以參考感激不盡m(_ _)m
作者:
playfuntime
時間:
2009-9-4 05:18 PM
我之前也是這樣子用~
P9 I h1 C# | o
X% P( P7 @$ R' ^+ K
我覺得應該是ok的情況!
作者:
呆頭鴨
時間:
2009-9-4 08:56 PM
不過如果照這樣寫,感覺上小數點是固定的,不像浮點數的感覺耶....
作者:
addn
時間:
2009-9-8 08:48 PM
您好
~ j+ _9 V0 p8 w) L$ Z+ f9 g
1.如果a,b兩值還沒正規化,則先將a,b正規化,
5 Q/ x1 q6 f- _5 R9 t" V/ X4 `
2.將a,b尾數對齊
8 F) }* g/ W7 m& [& h9 K
3.尾數相加
" g5 W! E# O% n W# @3 d: S
4.將結果正規化
6 W+ e7 a6 f2 ^8 E0 X" s# X9 C
! s' Z) |& P% h: G% M/ a! ~
您參考看看
作者:
呆頭鴨
時間:
2009-9-16 09:38 PM
大大~我陷在卡在將輸入數值做正規化的動作,
( A# |8 i) R# f4 V- B9 B o5 v; @
假如輸入的a是10.5, 在程式裡面會變成10101串列輸入,假設我程式固定只有運算到小數第一位,
/ t* L$ o! t" \- `: T
這樣可以抓到1010.1並且將其正規化,但是如果我輸入數值是整數的00100,這樣他要怎麼判別小數點的位置@@?
) D9 o' ~2 }1 M+ C0 @; u
他要怎麼判斷輸入的數值是不是浮點數?
作者:
addn
時間:
2009-9-17 08:51 AM
您好
9 x. V5 z+ |3 g- L6 I
6 L/ `. T3 ~( ~; z; L
a,b兩數要做浮點相加,那麼a,b兩值就要為浮點格式,
W0 G- v a J" o( n- z
你的問題不是卡在正規化,10.5=1010.1是定點小數,
) P! x% @9 O) q; A& T
10101,00100都不是浮點格式,如何將之正規化,
$ W! _4 o# i3 C
不能拿兩個定點格式的值來做浮點運算,
作者:
呆頭鴨
時間:
2009-9-17 09:27 PM
大大~
6 k* Q" K$ [, u! Q c7 a
請問您說的浮點格式,是像IEEE 754格式這種嗎?....還是??
$ h5 i: N9 I2 s+ m
; m5 W5 Z# q8 H% P9 i- C( ?$ _/ q% o9 L
是怎樣的浮點數格式輸入到a才可以被正規化呢^^"~不好意思喔~新手問了一些蠢問題@@
作者:
addn
時間:
2009-9-18 09:04 AM
您好
2 D$ V7 n9 O' Y* |7 O, J% b! ^
IEEE 754是浮點格式的一種,當然還有其他的,
& |" Y0 e$ _' y. m- V
看你要用哪一種嚕,
" ~& N- l7 U) O
$ X* K% b% O+ S o% n1 k
如果你用IEEE 754,那麼輸入a,b值就要符合 IEEE 754格式
作者:
呆頭鴨
時間:
2009-9-18 10:06 PM
IEEE 754的浮點數格式 不是已經正規化了嗎?...
" ~' w! M: l- {, Q' \0 M8 N
9 v9 @: W: B' H1 `. A$ P. V
沒辦法寫CODE讓輸入的串列資料,將十進致10.5二進致為1010.1輸入後再由程式正規化嗎?
作者:
addn
時間:
2009-9-20 11:40 AM
您好
: L' o$ l( z/ M. G2 q+ R
/ Z2 u" J: z) p
a,b不是已知的值嗎?為甚麼不直接用浮點格式來表示,
7 K6 }7 U* y2 I6 Q: o1 |
而要用定點再轉一次呢?
作者:
呆頭鴨
時間:
2009-9-20 09:17 PM
大大~
z5 W4 C' t0 {8 ^! u) w
! z5 Q) x9 p7 G
你的意思是說 假設我程式可以算到小數第3位,輸入的a 10.5 就是變1010.100
5 Q# g' W0 V' Y: l+ j: V' d
如果是整數1,則變成0001.000 這樣來做正規化?
) o$ Q. q* X! q/ B
還是說Quartus II 有可以判定輸入式浮點數的語法嗎?
4 l0 T5 C2 `( \0 [- g
V7 V1 c s/ }5 x: W8 P
如果沒有的話也得要把輸入的數值做正規化將其輸出,否則也不會有大大說的浮點數格式的輸入吧@@?
: @; h) e& n5 ]1 m0 w9 E& N
不知道我這樣說有沒有錯...^^"
作者:
addn
時間:
2009-9-21 08:22 PM
您好
, {& m# a5 z5 v& `3 p! `
% e7 i' j6 I6 B' D( F% ~% o% S
我的意思是你要自己算,將10.5或1先自己轉好成IEEE 754格式,
6 U/ `$ m! V7 r4 Q: U5 C1 V
然後在輸入到a,b
作者:
呆頭鴨
時間:
2009-9-21 10:45 PM
大大~
8 W$ `8 C' v& [; Z& B1 O0 r- b+ @8 G; k
我知道你的意思了,不過我目前是需要把非IEEE 754格式的浮點數轉成IEEE 754格式.....
" w: h5 w+ W6 S0 |3 n
這樣是不可能實現的嗎?^^"
作者:
masonchung
時間:
2009-9-22 10:21 PM
可以實現
1 Y$ H% a j8 |& f5 w& Q% h
請把了解規則 用電路可把非IEEE 754格式的浮點數(Fixed Point)轉成IEEE 754格式(Float Point)
% f- z" J0 |: ?/ x8 D
然後就可以當成浮點數加法器的輸入
9 l) g& J" W$ X
% @6 [$ \# N+ F! K9 t( ^, s9 x
[
本帖最後由 masonchung 於 2009-9-22 10:24 PM 編輯
]
作者:
呆頭鴨
時間:
2009-9-23 08:05 PM
masonchung
大大~
% {" K2 o, T! ^
& U: \6 n' f# T% B1 W
如果要這樣做的話,我的A如果是十進制"2.5",並且可運算到小數點後第5位,二進制的輸入訊號是不是一定要是10.10000
% F1 h4 m3 r5 U9 u
這樣有錯嗎?
+ R: f0 D; m& z
另外有一點有點疑問,這種作法是不是只能做無號數的浮點數運算?
' s1 D1 M. ^: {
-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
5 {: c, U( o @: b' O4 C
7 p( R. x# s- s
ieee754 的 二進位浮點數格式在此
http://zh.wikipedia.org/wiki/IEEE_754
, A3 W Q+ W9 g E6 S7 b- t
. `0 S' ?6 D" Z$ {& h1 r' p9 K8 U4 n c
這兩種格式轉換可用電路實現
6 K' ]6 }% z6 U3 R5 i5 G
$ A1 m) S1 b' y' r) i, X* J0 l
然後再輸入到浮點數加法器運算
作者:
呆頭鴨
時間:
2009-10-18 02:03 PM
謝謝大大們的幫助,目前我已經完成了部分的程式,現在又遇到一點問題,想提出來跟大大們討論一下...
3 u: \6 R6 F+ b7 j9 D* \
想請問大大們~
8 W1 [5 f! J1 a: j
a=
41B20000 (16進制- ieee754格式) 十進制22.25
3 {$ ], o: `9 H, a# w
b=C2010000 (16進制- ieee754格式) 十進制-32.25
9 }# w& S5 Z8 L7 V
請問可以直接對ieee754格式的a跟b做四則運算嗎?
) G0 i: R% [$ Y9 X9 L6 j
(小數點對齊,實數相對位移後)
a+b是否等於C2580000 ?
! J. Q: c5 j7 K% i, Y: Z/ ~
9 @9 y/ r& ~/ j8 l4 Q' @% g
. ?, r& `" ^( H* [
還是說一定要先做十進制的22.25+(-32.25)= -10 最後答案才用IEEE754表示?
0 f# s, M1 c+ e7 h/ }8 e
-10的IEEE754表示=C1200000
' z3 y) @. U2 }9 w, l V
, `% }2 y# R6 S- P- a$ T4 Y
C2580000與C1200000好像不太一樣.
' f* R: {6 _# r3 N# r- K, c Z
還是說要怎麼逆運算才可以求出-10?
/ ]; ~2 ?/ H9 a* X! b; V/ S
大大曉得嗎@@?
作者:
phil1801
時間:
2009-10-19 10:55 AM
最近剛好有碰到類似的問題 , 感謝說明
作者:
masonchung
時間:
2009-10-19 12:13 PM
請問可以直接對ieee754格式的a跟b做四則運算嗎?
- a7 a9 l0 V2 n1 Q) {9 @5 s
(小數點對齊,實數相對位移後)a+b是否等於C2580000 ?
2 l/ m6 ^( A8 G' U
不對
- U: H6 W( l* K& P9 u. \4 }
只有浮點數加法器和乘法器
: ~1 K9 K) I0 U
所以負數要用二補數
4 T8 s3 V( s0 c' k
C2010000=1_10000100_0000001_0000_0000_0000_0000
. P" j0 t' Z0 E. i- A
二補數=1101_1111.1100
- d$ p6 H& I& _
22.25=0001_0110.0100
. r# { Y4 h5 W! e |' ]0 H
兩者相加即為答案-10, 透過浮點數加法器輸出為C1200000
) S. L& o; o; u |
) |+ {+ |$ l) J! x+ a, R
[
本帖最後由 masonchung 於 2009-11-2 11:12 AM 編輯
]
作者:
masonchung
時間:
2009-10-19 02:05 PM
此二補數 1101_1111.1100 表示成IEEE754格式為42010000
1 @8 b' n6 C/ i# o1 ]2 } a ~
所以真正的浮點加法器輸入的MSB只要反相 就變成二補數
作者:
呆頭鴨
時間:
2009-10-19 08:05 PM
mas大..但是如果轉成二補數42010000之後
7 ^. ?4 M; F( t6 l3 l
與41b20000 偏移值調整後42590000 做有效位數相加=425A0000 ←這樣吧@@?
+ c% T0 T# e5 R2 }7 k% R/ y% T f
並不等於C1200000 的說....
作者:
masonchung
時間:
2009-10-21 12:08 PM
42010000 (-32.25) 是IEEE754格式 也就是浮點數加法器的輸入A
- S4 o. d7 C9 _& z1 f( u+ F
41b20000 (22.25) 是IEEE754格式 也就是浮點數加法器的輸入B
# P; H- {8 G( _- w
這個浮點加法器內部輸入級 的功用就是偏移值調整後做有效位數相加
: E3 ^/ ~4 t k+ v6 h
) X- j3 h) n) z0 b' O) ^7 \
所以 浮點加法器內部 運算級
1 T8 N( X/ z" N) f! _2 Q) r- U& g
A=1101_1111.1100
' O7 ]1 A4 N2 w# e4 |$ h
B=0001_0110.0100
# T/ d2 v' M6 u: Z- P) O
A+B=1111_0110.0000 = -(10)
/ r( ]7 ^3 R) U) Z0 m# `3 H' w
) [/ U" u0 I' S# J
再透過浮點數加法器輸出級 轉換為IEEE754格式
0 J7 J- ?4 v0 s, z/ U
輸出為C1200000
# t6 O3 i- z: I! c+ S, ]
* a+ `% L4 `0 D2 Q" W$ p
[
本帖最後由 masonchung 於 2009-11-2 11:16 AM 編輯
]
作者:
呆頭鴨
時間:
2009-10-21 08:20 PM
謝謝大大提點~又學到東西了...^^
7 P Z- j( f& k3 {
. G0 d, C" q) ? f+ F: J* W
另外想問做乘法運算
0 s, E/ U4 ?5 x1 I7 Q6 A
有效位數直接a*b跟 a+a 加b次 哪一種作法在硬體上速度較快呢?
7 S" a3 O4 s I2 f3 O
除法也是如此嗎?
作者:
呆頭鴨
時間:
2009-10-23 08:43 PM
大大~另外請問使用quartus做波形模擬的時候,input有辦法設定輸入10進制浮點數嗎? EX: (22.25)
- z" i% d2 g6 L1 }* j- A& z5 T
假如無法使用,這樣的話10進制的浮點數數值要如何輸入? 難道是輸入 A1= 22 A2=0.25 A1+A2=A 這樣訊號要怎麼分離@@~不知道大大有沒有聽的懂我的意思^^"
作者:
masonchung
時間:
2009-10-29 11:12 AM
input有辦法設定輸入10進制浮點數嗎?
2 q6 S! D( R7 v! `3 x
因為你的電路功能是浮點數ALU 輸入自然是IEEE-754格式
0 v2 |7 P P4 I7 c
先自行換算22.25 成IEEE-754格式 41b20000 輸入
# y, P% A" N8 J, T, z
' _' ^" ~5 u# O: ]8 Z- N: F
quartus 用32bit 就可以輸入阿
5 \/ W% \/ d% |) B0 x
" W1 k$ x& Y/ L$ `1 X! G9 u# v
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ l1 c- Q' z6 e6 ~* @: K3 @- J
如果規定要用10進制浮點數輸入
5 C& ]7 m8 m4 ^0 V: _+ W
那你的輸入級就要多一個轉換電路
1 h/ Z+ w. I) p3 V# R2 s8 ?
可把非IEEE 754格式的浮點數(Fixed Point)轉成IEEE 754格式(Float Point)
}' A) F7 p0 v/ _
0 D) ?- c# t* f& ? F
[
本帖最後由 masonchung 於 2009-10-29 01:13 PM 編輯
]
作者:
呆頭鴨
時間:
2009-10-30 08:28 PM
標題:
回復 25# 的帖子
如果規定要用10進制浮點數輸入
: G0 L% ?" t9 V' U; |9 `
那你的輸入級就要多一個轉換電路
& x! f& \2 U* [4 x0 m+ W
可把非IEEE 754格式的浮點數(Fixed Point)轉成IEEE 754格式(Float Point)
, q% `) q$ m) d
----------------------------------------
6 W8 D) b% C, u
非IEEE 754格式的浮點數 輸入~ 是類似(22.25) => 10110.01 輸入至input ?
; h7 S# I% J4 a k. |" u5 C
那在quartus看到的input是不是變成1011001 ?
$ @! }- @; J# }7 _- f x
這樣的話我怎麼曉得我輸入訊號小數點位置在哪@@?(10.5)=>1010.1
7 J v5 c% {4 T) P4 L2 y
還是說要給input的訊號,其訊號源必須要產生固定小數點N位的數值.
. r) X& ]3 e$ C$ d% J
假如訊號源固定產生小數點3位的訊號~
+ o/ E ]# f |: \8 B
22.25=> 10110.010 第3位補0
( @+ `$ ]( ~# d1 ^3 T% w% @
10.5 => 1010.100 後2位補0至第3位....是這樣嗎? 如果是這樣就可以在程式內部判斷[2:0]為小數[3:N]為整數.......不知道是不是這樣做?
$ Z6 { T. F1 a J
0 b, ?, N; g! j
-----------------------------------
* L% _% S* b) C' }) g' C
input有辦法設定輸入10進制浮點數嗎?
' j/ ]$ c% f9 a$ Y: L1 g
quartus 用32bit 就可以輸入阿
. W1 ^# U9 G4 ]
這邊大大是說 我input寫成32bit就可以在模擬的時候使用類似22.25十進制的浮點數?
作者:
masonchung
時間:
2009-11-2 11:36 AM
標題:
回復 26# 的帖子
小數點是人判定的,輸入不足位數要補0
^+ l! l% J w+ M8 H/ {) z
硬體運算時對齊小數點即可
; B# N8 t& b! k6 G D* n
# C* ?* L n1 t0 ]5 T& x
*******************************************************
8 x* V5 m' J" Y h: J" A. O
41b20000 ==>32bit
6 U' U; G+ f4 [) c& y- p3 ]
這邊是說輸入已經是IEEE-754格式
9 x0 L0 E4 O; q9 l! }: p
*******************************************************
& j- F/ P Q- z$ j. e: p+ l0 M1 v8 j
如果輸入是10進位浮點數 輸入quartus 後 要換成sign bit + 32-bit fixed-point
: w9 K: j4 Y( d" s3 `
22.25 = (10110.01) 二進位 = {sign-bit=0,0016.4000} 十六進位
7 ?/ R9 r) H2 q1 D! n
+ E( g+ a) ], Y, D# A. x
用fixed-point to float-point 轉換電路
7 a/ @1 j5 A* ~
換算成IEEE-754浮點數格式
/ ]0 j/ x6 V" Y Y% [1 H( Y
就可以給浮點數ALU 作運算
4 Q0 `$ i8 Z* Z7 p) q5 `4 d( Q0 ^
0 u) [7 h; Y4 h! u! y
[
本帖最後由 masonchung 於 2009-11-2 11:41 AM 編輯
]
作者:
呆頭鴨
時間:
2009-11-2 07:56 PM
謝謝大大~我知道怎麼做了
. w% D( T! s8 ~
: N# H/ f0 i4 Z
另外請問,做浮點數除法運算時 做法為 指數相減 有效數相除
6 x7 r0 e& v, W0 t
但是為何A[22:0]跟B[22:0]的有效數相除時 C=A/B
4 i& M4 _3 ^. u# U# `' Y& Q
如果A<B則無法運算
/ \( X1 ?! ]+ e4 k! v2 e- I+ {3 V
是除法運算需要用其他方式完成嗎?
作者:
masonchung
時間:
2009-11-4 10:21 AM
標題:
回復 28# 的帖子
除法運算在FPGA 沒有DW IP
6 `: Z8 l/ }) q# x
所以可用布斯Booth 或 SRT 的演算法來完成
8 Z! @& A9 W7 G0 t) R7 `; |
' S( R& N- m: d" O+ g7 S
[
本帖最後由 masonchung 於 2009-11-4 10:27 AM 編輯
]
作者:
呆頭鴨
時間:
2009-11-10 10:47 PM
大大~請問BOOTH做除法器.是只要把乘法的+ -規則相反變- +就可以了嗎@@"
* z$ \5 B6 r. W6 u3 q
如果我乘法要一次判斷比較多位元規則該怎麼定呢??~因為網上找到的大多都是用2BIT作判斷~
" j) }: z- ~; Y0 p1 L
, S- m# J+ v$ s$ U+ o+ _$ o7 I6 W
另外請問一下.SRT俗稱是^^?
歡迎光臨 Chip123 科技應用創新平台 (http://free.vireal.world/chip123_website/innoingbbs/)
Powered by Discuz! X3.2