Chip123 科技應用創新平台

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

作者: 呆頭鴨    時間: 2009-9-2 08:23 PM
標題: verilog 浮點數運算疑問@@
想請問有設計過IEEE 754 浮點數 規則的程式的大大.....: C5 q* ?7 W/ Y7 k5 P& d
. v  ]. Y/ N) ?/ D6 J
規則小弟是看的懂,不過疑問處在於) A2 A- {  K; Q3 f
假設我設計一個簡單的浮點數加法器,輸入數值a跟b相加.  }0 d1 l* R- E! ?5 i
那麼,我的"a如果是十進制10.5"  "b是2.125"
; C/ a: z; O- H  Ha跟b是要先正規化之後再行運算嗎?
; m) D& u# F6 b! F9 q* Q這樣正規化之前,10.5要怎麼顯示成二進位?是固定位元顯示整數部份,
5 D& ?; u3 d: t2 M5 ?0 D* [! s' j另一部份固定位元顯示小數部份..ex: 10.5=>1010.1
/ l' w1 ~" U! u4 Q這樣輸入a之後變成10101,程式內部再將a[4:1]斷定成整數a[0]斷定成浮點數,+ }+ o8 d1 P% c: \7 G  {) O
這樣設計對嗎?
( g* A! h. ?2 D5 i我是剛接觸的菜鳥..還請大大們指教提拔....如果有相關code可以參考感激不盡m(_ _)m
作者: playfuntime    時間: 2009-9-4 05:18 PM
我之前也是這樣子用~
; N. a8 p, W5 e! R* j
$ |$ X, G* u& f3 i$ a8 P我覺得應該是ok的情況!
作者: 呆頭鴨    時間: 2009-9-4 08:56 PM
不過如果照這樣寫,感覺上小數點是固定的,不像浮點數的感覺耶....
作者: addn    時間: 2009-9-8 08:48 PM
您好! E! N. `, D7 h$ k
1.如果a,b兩值還沒正規化,則先將a,b正規化,
* C5 T; m7 c" Q: _3 j2.將a,b尾數對齊% i, r0 S1 v0 I. L. A! Q
3.尾數相加
* F! H  A4 W; R4 H3 `* }, G5 H4.將結果正規化: H2 C5 w" s; T

) {  I0 {& k, h) f# E; t您參考看看
作者: 呆頭鴨    時間: 2009-9-16 09:38 PM
大大~我陷在卡在將輸入數值做正規化的動作,
1 T. ]4 f6 k' W假如輸入的a是10.5, 在程式裡面會變成10101串列輸入,假設我程式固定只有運算到小數第一位,2 D! x1 ~1 a' y$ ?1 @5 o
這樣可以抓到1010.1並且將其正規化,但是如果我輸入數值是整數的00100,這樣他要怎麼判別小數點的位置@@?  l: H' O- i; O9 y0 S' E
他要怎麼判斷輸入的數值是不是浮點數?
作者: addn    時間: 2009-9-17 08:51 AM
您好2 b% {7 |5 ]0 O3 m0 \* H

& j- C) O+ \/ X4 A0 ~2 A6 Z  a,b兩數要做浮點相加,那麼a,b兩值就要為浮點格式,0 U+ o8 W0 F+ ?3 [
你的問題不是卡在正規化,10.5=1010.1是定點小數,! g' p- G$ a8 p) B9 n. d" ~- Z
10101,00100都不是浮點格式,如何將之正規化,5 H  a, [: c7 F5 P: O1 p+ u
不能拿兩個定點格式的值來做浮點運算,
作者: 呆頭鴨    時間: 2009-9-17 09:27 PM
大大~2 E7 M; R  X- ^. C7 V9 S
請問您說的浮點格式,是像IEEE 754格式這種嗎?....還是??* Z& t/ h# B" Z# u+ x

( S2 F# p- ^  I( |9 u是怎樣的浮點數格式輸入到a才可以被正規化呢^^"~不好意思喔~新手問了一些蠢問題@@
作者: addn    時間: 2009-9-18 09:04 AM
您好
& ^" _2 D, R% D  IEEE 754是浮點格式的一種,當然還有其他的,/ {+ B+ U4 z  b% l/ ^# T5 y1 T
看你要用哪一種嚕,
# I3 z# B) B  Q8 A
4 P  h( E7 f, Z) c5 P如果你用IEEE 754,那麼輸入a,b值就要符合 IEEE 754格式
作者: 呆頭鴨    時間: 2009-9-18 10:06 PM
IEEE 754的浮點數格式 不是已經正規化了嗎?...
% k+ g, e, a/ O% |$ u; I- f" t% k2 d& k: Y# [
沒辦法寫CODE讓輸入的串列資料,將十進致10.5二進致為1010.1輸入後再由程式正規化嗎?
作者: addn    時間: 2009-9-20 11:40 AM
您好
: J. _% U  J; A8 ]/ a( n3 ~+ Y" \* m# \
a,b不是已知的值嗎?為甚麼不直接用浮點格式來表示,
: _, d, ?$ J* @9 e! O而要用定點再轉一次呢?
作者: 呆頭鴨    時間: 2009-9-20 09:17 PM
大大~
- f8 d$ J$ r) o3 e# z& M/ V/ B' V9 h* r& K" `
你的意思是說 假設我程式可以算到小數第3位,輸入的a 10.5 就是變1010.100
. q8 l  z6 Y) z如果是整數1,則變成0001.000  這樣來做正規化?4 S0 I/ V  T( v0 O) L) B, E
還是說Quartus II 有可以判定輸入式浮點數的語法嗎?) q0 `6 G5 z1 L' X0 w9 F
5 c' n2 Q$ {# N3 M
如果沒有的話也得要把輸入的數值做正規化將其輸出,否則也不會有大大說的浮點數格式的輸入吧@@?% _6 \+ A* R2 k. e2 q+ y: B1 k
不知道我這樣說有沒有錯...^^"
作者: addn    時間: 2009-9-21 08:22 PM
您好
& Y- H" s5 E& J. G0 G( b$ E3 d2 \
我的意思是你要自己算,將10.5或1先自己轉好成IEEE 754格式,
. r8 O1 h' M9 f3 O/ D3 H然後在輸入到a,b
作者: 呆頭鴨    時間: 2009-9-21 10:45 PM
大大~  I2 K) [; F! q$ A+ C
我知道你的意思了,不過我目前是需要把非IEEE 754格式的浮點數轉成IEEE 754格式.....; L) Q# W+ j9 h) g0 J6 J/ w
這樣是不可能實現的嗎?^^"
作者: masonchung    時間: 2009-9-22 10:21 PM
可以實現
0 e+ ?0 [; G$ x; K請把了解規則 用電路可把非IEEE 754格式的浮點數(Fixed Point)轉成IEEE 754格式(Float Point)
, j  `$ n4 R6 Y然後就可以當成浮點數加法器的輸入
, e9 h  c  A4 N  K& g+ J! B: V) k& z4 R1 |8 H7 {2 S1 Z
[ 本帖最後由 masonchung 於 2009-9-22 10:24 PM 編輯 ]
作者: 呆頭鴨    時間: 2009-9-23 08:05 PM
masonchung 大大~- P3 W$ N/ r# ]" u: \$ H7 T; ]3 m
- b$ d, h! ], N- @4 a- V
如果要這樣做的話,我的A如果是十進制"2.5",並且可運算到小數點後第5位,二進制的輸入訊號是不是一定要是10.10000
) }, H: I) ]$ O8 r這樣有錯嗎?, N+ b0 R; I3 f
另外有一點有點疑問,這種作法是不是只能做無號數的浮點數運算?
3 r( b0 x  S3 c, F5 i) y3 R/ _8 w-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
4 w/ S% T; l9 F2 H: {7 ^1 {
7 r# K% Z" r) g* V+ Iieee754 的 二進位浮點數格式在此 http://zh.wikipedia.org/wiki/IEEE_754. X4 {+ i& Q1 r0 Z$ \. x8 K  A

) {% N! a; b' f- _/ X  X! l這兩種格式轉換可用電路實現 7 v9 k7 \% T0 ^% d; U6 i5 t1 H

( w+ Q  c3 ^0 l3 ^! }2 w0 t然後再輸入到浮點數加法器運算
作者: 呆頭鴨    時間: 2009-10-18 02:03 PM
謝謝大大們的幫助,目前我已經完成了部分的程式,現在又遇到一點問題,想提出來跟大大們討論一下...1 U; o, x1 r! L% |
想請問大大們~
& ]' ?2 u  d/ Ya= 41B20000  (16進制- ieee754格式)  十進制22.25
( Y$ I5 j, ^& w" t4 Qb=C2010000  (16進制- ieee754格式)   十進制-32.25
: m4 M7 q; C- `請問可以直接對ieee754格式的a跟b做四則運算嗎?
# p' R* d% m4 ~  e% I(小數點對齊,實數相對位移後)a+b是否等於C2580000 ?
' V) ^* u4 a6 S1 E/ {7 Y# F) N6 H2 { 6 P- F% g& V. g- a+ D3 `) e5 X

  R  u1 N2 Q( ^8 G- s1 g$ y還是說一定要先做十進制的22.25+(-32.25)= -10 最後答案才用IEEE754表示?6 K: Z8 `: ?) Z
-10的IEEE754表示=C1200000
0 U& O3 a; I+ b8 ~' X ) @+ R0 ?# X9 S( o( H
C2580000與C1200000好像不太一樣.# L' d0 D: R; i7 F% w* T
還是說要怎麼逆運算才可以求出-10?
$ H- G$ y3 }( r. Y5 R大大曉得嗎@@?
作者: phil1801    時間: 2009-10-19 10:55 AM
最近剛好有碰到類似的問題 , 感謝說明
作者: masonchung    時間: 2009-10-19 12:13 PM
請問可以直接對ieee754格式的a跟b做四則運算嗎?
& Z- g3 T. b% c5 ], _9 \) p(小數點對齊,實數相對位移後)a+b是否等於C2580000 ?+ z, \# _7 o$ e% ?* P+ `9 H
不對
9 e+ L! }# E* N4 o$ a: c只有浮點數加法器和乘法器
3 {( c% C3 V6 U$ X所以負數要用二補數( ~& R! Y8 H! O9 ^! O* N
C2010000=1_10000100_0000001_0000_0000_0000_0000
! ], L: g8 G- P0 r二補數=1101_1111.1100
4 ?; P( P! c! Z$ \5 H* N" c! {22.25=0001_0110.0100) i' M5 h, I" C/ F+ S
兩者相加即為答案-10, 透過浮點數加法器輸出為C12000005 u; H* U, o9 a$ a- @5 p2 y

$ i! R2 z2 W. H1 g1 e6 r/ q! C[ 本帖最後由 masonchung 於 2009-11-2 11:12 AM 編輯 ]
作者: masonchung    時間: 2009-10-19 02:05 PM
此二補數 1101_1111.1100 表示成IEEE754格式為42010000
9 A2 o! }" u' [8 B所以真正的浮點加法器輸入的MSB只要反相 就變成二補數
作者: 呆頭鴨    時間: 2009-10-19 08:05 PM
mas大..但是如果轉成二補數42010000之後
$ A/ y6 N2 D/ S+ H與41b20000 偏移值調整後42590000 做有效位數相加=425A0000 ←這樣吧@@?
. a' C) W. z" }並不等於C1200000 的說....
作者: masonchung    時間: 2009-10-21 12:08 PM
42010000 (-32.25) 是IEEE754格式 也就是浮點數加法器的輸入A; _' }' q" H$ q
41b20000 (22.25) 是IEEE754格式 也就是浮點數加法器的輸入B
0 |% U* ~" w2 {  D6 O. r% v* X這個浮點加法器內部輸入級 的功用就是偏移值調整後做有效位數相加
- W  [" h/ |; h) c6 T' G. Z! k7 r8 {$ T
所以 浮點加法器內部 運算級7 Y5 a; B9 |1 Y+ q) v
A=1101_1111.1100# y! K4 H3 e5 N( B
B=0001_0110.0100. }# U, ^; r, A( a
A+B=1111_0110.0000 = -(10)
) {2 n7 L* q$ Y/ b; f
' M, ]# ~- P$ o9 X9 O& O再透過浮點數加法器輸出級 轉換為IEEE754格式
2 y3 ?5 }. h/ l! I* v7 s* z輸出為C1200000
# w1 P0 V, W; I$ g! I$ a
9 \4 z; O- [. G  B4 p9 z[ 本帖最後由 masonchung 於 2009-11-2 11:16 AM 編輯 ]
作者: 呆頭鴨    時間: 2009-10-21 08:20 PM
謝謝大大提點~又學到東西了...^^
. x( x$ r' Y7 v# o
  ~) o" L6 u/ J1 K) q: u另外想問做乘法運算8 `9 ?# r  p8 g/ G( y5 N2 Z& B3 q
有效位數直接a*b跟  a+a 加b次  哪一種作法在硬體上速度較快呢?* I1 z9 }5 D  [" ], f) L) P, o8 J
除法也是如此嗎?
作者: 呆頭鴨    時間: 2009-10-23 08:43 PM
大大~另外請問使用quartus做波形模擬的時候,input有辦法設定輸入10進制浮點數嗎? EX: (22.25)
9 Q! {& d9 b+ F( R* g0 q' R假如無法使用,這樣的話10進制的浮點數數值要如何輸入? 難道是輸入 A1= 22   A2=0.25  A1+A2=A  這樣訊號要怎麼分離@@~不知道大大有沒有聽的懂我的意思^^"
作者: masonchung    時間: 2009-10-29 11:12 AM
input有辦法設定輸入10進制浮點數嗎?- e* M! Y# a) ~- F6 K) ]
因為你的電路功能是浮點數ALU 輸入自然是IEEE-754格式
) r- a0 b! B3 A$ W7 q先自行換算22.25 成IEEE-754格式 41b20000 輸入' J% W; M9 j3 G. m7 V, s' N4 P

. I2 k, a% g7 m; b  B1 Wquartus 用32bit 就可以輸入阿* w7 G( y! |# V" |. k3 `6 H5 [# v
; X6 h% L' c( g; o! \$ H
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4 \  g4 h$ z- s- P! W如果規定要用10進制浮點數輸入
. D* y+ k  Y6 I: i  O那你的輸入級就要多一個轉換電路
' ?& o# P. s8 d可把非IEEE 754格式的浮點數(Fixed Point)轉成IEEE 754格式(Float Point)3 T8 i/ ]) a- }4 \

& q0 o5 u) ~1 n3 H0 e- B3 i' @[ 本帖最後由 masonchung 於 2009-10-29 01:13 PM 編輯 ]
作者: 呆頭鴨    時間: 2009-10-30 08:28 PM
標題: 回復 25# 的帖子
如果規定要用10進制浮點數輸入- b7 H5 J- h6 C* i1 o/ Y
那你的輸入級就要多一個轉換電路- h0 F* `2 k- x9 ?) e, p( b3 Z& P
可把非IEEE 754格式的浮點數(Fixed Point)轉成IEEE 754格式(Float Point)
+ m/ d6 a& [, l----------------------------------------
4 M0 s9 }/ |+ A' E" }" l' W非IEEE 754格式的浮點數 輸入~ 是類似(22.25) => 10110.01 輸入至input ?
% }, }' Y" M3 P- |% v2 h6 [那在quartus看到的input是不是變成1011001 ? $ q, W) q7 D/ g3 [0 k' C1 Y# P
這樣的話我怎麼曉得我輸入訊號小數點位置在哪@@?(10.5)=>1010.1
4 A" i: D/ y% d3 @+ j- i: X還是說要給input的訊號,其訊號源必須要產生固定小數點N位的數值.
4 e5 P- e" U) j3 c假如訊號源固定產生小數點3位的訊號~
$ N7 G; \& }' P* ]( r22.25=> 10110.010   第3位補08 X& J. E$ t8 F( w( H
10.5  => 1010.100   後2位補0至第3位....是這樣嗎?  如果是這樣就可以在程式內部判斷[2:0]為小數[3:N]為整數.......不知道是不是這樣做?
" N% ?; A; Y& v
6 V8 F2 g2 @5 i5 U, ]-----------------------------------! s. i# L# ]. o3 F
input有辦法設定輸入10進制浮點數嗎?% y: z8 K  N; Y
quartus 用32bit 就可以輸入阿
6 U; b2 f$ w6 q, m! d 這邊大大是說 我input寫成32bit就可以在模擬的時候使用類似22.25十進制的浮點數?
作者: masonchung    時間: 2009-11-2 11:36 AM
標題: 回復 26# 的帖子
小數點是人判定的,輸入不足位數要補0
8 h! G( @# l9 q* W硬體運算時對齊小數點即可3 m' n9 l+ u$ V8 M: c: m
9 K1 N$ k0 k, _& X
*******************************************************
" n& o; H, I6 U) v; o6 p41b20000 ==>32bit
, I9 L- I' A, F! t這邊是說輸入已經是IEEE-754格式
% x- [2 `: h, z  |& ?& Q*******************************************************0 u8 [& o4 k7 P* P8 ]
如果輸入是10進位浮點數 輸入quartus 後 要換成sign bit + 32-bit fixed-point7 Y3 `8 {' p2 C. j
22.25 = (10110.01) 二進位 = {sign-bit=0,0016.4000} 十六進位 * W9 k, @8 Y1 Q  S8 v$ W& m
5 {6 O# q9 F4 t
用fixed-point to float-point 轉換電路
9 [- A, r0 N  M, W2 z6 w+ N換算成IEEE-754浮點數格式2 b7 |/ w, c& x' M. r
就可以給浮點數ALU 作運算9 C: d0 |& ^# C% x1 Z4 h: n- g
7 d& {. y3 W, O- V; |1 c
[ 本帖最後由 masonchung 於 2009-11-2 11:41 AM 編輯 ]
作者: 呆頭鴨    時間: 2009-11-2 07:56 PM
謝謝大大~我知道怎麼做了
, {/ k: o  C# ~9 H6 b! I; [" r* x$ n
另外請問,做浮點數除法運算時 做法為 指數相減 有效數相除2 z# j4 ^7 a- U0 U1 i  Z, w* D6 F
但是為何A[22:0]跟B[22:0]的有效數相除時  C=A/B
% `9 Z, z  ~, v7 _4 V3 x如果A<B則無法運算% Z3 Q! D7 ~. s4 i
是除法運算需要用其他方式完成嗎?
作者: masonchung    時間: 2009-11-4 10:21 AM
標題: 回復 28# 的帖子
除法運算在FPGA 沒有DW IP
/ W; J5 P+ l& Q4 B所以可用布斯Booth 或 SRT 的演算法來完成
9 v9 D, w; A5 y' r6 C  _
0 \2 o8 t' p7 U  t3 A; u2 F. K[ 本帖最後由 masonchung 於 2009-11-4 10:27 AM 編輯 ]
作者: 呆頭鴨    時間: 2009-11-10 10:47 PM
大大~請問BOOTH做除法器.是只要把乘法的+ -規則相反變- +就可以了嗎@@"
! i, D" L2 E6 j( p如果我乘法要一次判斷比較多位元規則該怎麼定呢??~因為網上找到的大多都是用2BIT作判斷~2 K& \9 N9 V4 d# c0 ]# X" }  I
' C6 w2 o* V- A) u
另外請問一下.SRT俗稱是^^?




歡迎光臨 Chip123 科技應用創新平台 (http://chip123.com/) Powered by Discuz! X3.2