Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-9-2 20:23:40 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
想請問有設計過IEEE 754 浮點數 規則的程式的大大.....
5 F+ \9 _; D0 ]. d0 O
+ z, Z9 `$ T/ l規則小弟是看的懂,不過疑問處在於4 X- {5 x. z9 |# F! ^
假設我設計一個簡單的浮點數加法器,輸入數值a跟b相加.
/ s3 M& q- ^6 d$ z" n& y那麼,我的"a如果是十進制10.5"  "b是2.125", x# z3 ]. s) x, A* ~& B; A
a跟b是要先正規化之後再行運算嗎?
" A5 b$ ?4 X3 j# |' I這樣正規化之前,10.5要怎麼顯示成二進位?是固定位元顯示整數部份,
' }9 }2 S, G7 E- T- B) m; X+ ]另一部份固定位元顯示小數部份..ex: 10.5=>1010.1/ v% m1 F# m) \7 L
這樣輸入a之後變成10101,程式內部再將a[4:1]斷定成整數a[0]斷定成浮點數,! N' j' F7 S! \$ `$ U3 N
這樣設計對嗎?
- G: j! j6 N6 e# [$ u. h我是剛接觸的菜鳥..還請大大們指教提拔....如果有相關code可以參考感激不盡m(_ _)m
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
推薦
 樓主| 發表於 2009-10-18 14:03:42 | 只看該作者
謝謝大大們的幫助,目前我已經完成了部分的程式,現在又遇到一點問題,想提出來跟大大們討論一下...0 a  ]# W0 `' K& q, M: S' Q
想請問大大們~
( o" V* Z  B( ?+ ha= 41B20000  (16進制- ieee754格式)  十進制22.25
3 j( g  w6 y& a( t- g7 Jb=C2010000  (16進制- ieee754格式)   十進制-32.25
7 ^1 T/ F* b6 g/ i6 R請問可以直接對ieee754格式的a跟b做四則運算嗎? ( K- }( }/ z: i% O6 i
(小數點對齊,實數相對位移後)a+b是否等於C2580000 ?
% Q9 `! b! T, |2 ?+ |0 _3 K
1 m1 F! ]' Q0 r$ h 8 ^8 Y/ l9 j/ e5 G0 }$ G" l$ W& Y4 K
還是說一定要先做十進制的22.25+(-32.25)= -10 最後答案才用IEEE754表示?  }1 k! O7 E, f2 ~( O$ Q/ |( ~3 s8 n
-10的IEEE754表示=C1200000
/ J; G* v+ Q+ ^# R; c* M2 c
7 J0 u9 E, L  p, J( |/ Q! L) {C2580000與C1200000好像不太一樣.
+ L- ^1 G% u% @- t" H( O3 Q7 x還是說要怎麼逆運算才可以求出-10?4 Y9 _: h9 K6 C3 t5 ~
大大曉得嗎@@?
回復 支持 1 反對 0

使用道具 舉報

30#
 樓主| 發表於 2009-11-10 22:47:59 | 只看該作者
大大~請問BOOTH做除法器.是只要把乘法的+ -規則相反變- +就可以了嗎@@"
& r; _" f; I6 W6 D9 h如果我乘法要一次判斷比較多位元規則該怎麼定呢??~因為網上找到的大多都是用2BIT作判斷~
8 L# S7 y+ g" k- K6 ~
2 S; z! T6 R& H/ B% k另外請問一下.SRT俗稱是^^?
29#
發表於 2009-11-4 10:21:18 | 只看該作者

回復 28# 的帖子

除法運算在FPGA 沒有DW IP
$ e: N) U6 {* k" ?2 n所以可用布斯Booth 或 SRT 的演算法來完成- {2 h2 \9 W5 h, [, H5 H
! `1 K2 K) _4 g
[ 本帖最後由 masonchung 於 2009-11-4 10:27 AM 編輯 ]

評分

參與人數 1 +3 收起 理由
呆頭鴨 + 3 謝謝大大幫忙~我用BOOTH完成浮點數乘法器了

查看全部評分

28#
 樓主| 發表於 2009-11-2 19:56:24 | 只看該作者
謝謝大大~我知道怎麼做了
7 k( @/ h8 i; @4 R$ T$ S. R5 y4 [2 k
另外請問,做浮點數除法運算時 做法為 指數相減 有效數相除
0 `6 X: r. k! f但是為何A[22:0]跟B[22:0]的有效數相除時  C=A/B8 p0 o1 A  _1 v  ~0 f$ g& |! l
如果A<B則無法運算4 P1 l: t3 H* e
是除法運算需要用其他方式完成嗎?
27#
發表於 2009-11-2 11:36:10 | 只看該作者

回復 26# 的帖子

小數點是人判定的,輸入不足位數要補0- E4 `# A0 e* i. S9 Q0 L
硬體運算時對齊小數點即可
" D2 d. |2 b: E5 l: q
  t& n: A% q8 M3 l& Q* \6 F2 p*******************************************************0 ^* I2 S  E- A) m+ A1 O  S# C
41b20000 ==>32bit( o# D# s$ n' W
這邊是說輸入已經是IEEE-754格式
" Q' E, ?/ `+ `! ]+ p, _*******************************************************
7 }  w  C, |. h如果輸入是10進位浮點數 輸入quartus 後 要換成sign bit + 32-bit fixed-point
1 k; y3 c, q. {( v3 c- p' X5 t3 O1 O22.25 = (10110.01) 二進位 = {sign-bit=0,0016.4000} 十六進位 / K- h; U: u3 R3 |/ n+ d  r
/ N; z. v' e% e2 w$ u" @, v7 i
用fixed-point to float-point 轉換電路 + M& R8 v+ A  A4 u& I' i
換算成IEEE-754浮點數格式' I  M  T( S* S' Z
就可以給浮點數ALU 作運算. J' N# H9 r, E; q$ w2 v# p3 @$ a! ~

' `( c# {; Y, G( `[ 本帖最後由 masonchung 於 2009-11-2 11:41 AM 編輯 ]
26#
 樓主| 發表於 2009-10-30 20:28:16 | 只看該作者

回復 25# 的帖子

如果規定要用10進制浮點數輸入1 Q; b8 A/ _  `8 v
那你的輸入級就要多一個轉換電路
' }- N; ^- r2 l% [) P# d可把非IEEE 754格式的浮點數(Fixed Point)轉成IEEE 754格式(Float Point)- U# N1 o9 Q& s2 u' W7 k
----------------------------------------# F. a$ u% ~+ Q$ l9 x" s( A
非IEEE 754格式的浮點數 輸入~ 是類似(22.25) => 10110.01 輸入至input ?' B. M( h4 x- ]0 m
那在quartus看到的input是不是變成1011001 ? 4 z: u4 I: y  ?; b
這樣的話我怎麼曉得我輸入訊號小數點位置在哪@@?(10.5)=>1010.1# u2 S) |1 V! f! Q7 h; \1 l
還是說要給input的訊號,其訊號源必須要產生固定小數點N位的數值.
" ]) ^3 T: p4 w6 q" g假如訊號源固定產生小數點3位的訊號~
$ \! d( Z$ T4 `1 x* |: `5 I" y22.25=> 10110.010   第3位補0& G" `! M+ ?+ G
10.5  => 1010.100   後2位補0至第3位....是這樣嗎?  如果是這樣就可以在程式內部判斷[2:0]為小數[3:N]為整數.......不知道是不是這樣做?8 b0 d$ f- h8 o3 V+ t  {5 p8 M- `

! |' t* Y: Y% D-----------------------------------( e' r- g( s9 ~+ L5 s
input有辦法設定輸入10進制浮點數嗎?
, H9 L* K$ ~+ E. W( |quartus 用32bit 就可以輸入阿
5 q) @+ \* d% g/ e 這邊大大是說 我input寫成32bit就可以在模擬的時候使用類似22.25十進制的浮點數?
25#
發表於 2009-10-29 11:12:30 | 只看該作者
input有辦法設定輸入10進制浮點數嗎?
% w# }  }3 B- @4 S' v3 D; |& c0 o  B因為你的電路功能是浮點數ALU 輸入自然是IEEE-754格式
  j' |  A8 Y+ m* o先自行換算22.25 成IEEE-754格式 41b20000 輸入
# {; f" @3 c2 _/ c+ ]+ v' U
& Z2 W$ a. Z- Iquartus 用32bit 就可以輸入阿0 Q1 e" l9 G+ p3 o

( D4 C2 ?# c# u6 W9 h~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* o+ R; `+ ^$ q8 A如果規定要用10進制浮點數輸入
/ r, R2 z' g+ _那你的輸入級就要多一個轉換電路" h6 f) v- j$ h: K
可把非IEEE 754格式的浮點數(Fixed Point)轉成IEEE 754格式(Float Point)
; `. i7 V: g% }! ~1 o
* T7 ~6 F9 M* N# {[ 本帖最後由 masonchung 於 2009-10-29 01:13 PM 編輯 ]

評分

參與人數 1 +5 收起 理由
呆頭鴨 + 5 每問一次~就多長知識

查看全部評分

24#
 樓主| 發表於 2009-10-23 20:43:11 | 只看該作者
大大~另外請問使用quartus做波形模擬的時候,input有辦法設定輸入10進制浮點數嗎? EX: (22.25)- U6 E  `) ^7 ~* {4 o
假如無法使用,這樣的話10進制的浮點數數值要如何輸入? 難道是輸入 A1= 22   A2=0.25  A1+A2=A  這樣訊號要怎麼分離@@~不知道大大有沒有聽的懂我的意思^^"
23#
 樓主| 發表於 2009-10-21 20:20:14 | 只看該作者
謝謝大大提點~又學到東西了...^^
* t& [$ z' f( a5 [# z! N6 v/ G
5 ]  r7 v, _+ O+ Y0 U) [7 L; u另外想問做乘法運算: ?9 e" j- g2 P/ e" D9 M3 x' W
有效位數直接a*b跟  a+a 加b次  哪一種作法在硬體上速度較快呢?
) V, N% ~" d& i4 |; X7 N除法也是如此嗎?
22#
發表於 2009-10-21 12:08:33 | 只看該作者
42010000 (-32.25) 是IEEE754格式 也就是浮點數加法器的輸入A
1 ^1 ~; |) a) B+ `, H41b20000 (22.25) 是IEEE754格式 也就是浮點數加法器的輸入B
* D( F, a/ G4 P. C這個浮點加法器內部輸入級 的功用就是偏移值調整後做有效位數相加' c. t3 {/ \- q- S) z* x  S, i
: J( M+ q1 [& s, W
所以 浮點加法器內部 運算級' N8 g5 t" @* @/ J! L$ ^4 w: ~3 g2 w
A=1101_1111.1100
1 B( M- }( J; q% w9 V! _B=0001_0110.0100
* ]8 \& K% u, p& X- c, t* NA+B=1111_0110.0000 = -(10)& k9 U* c6 H: V7 |7 g
8 m; W" v  b0 I4 F1 _
再透過浮點數加法器輸出級 轉換為IEEE754格式
" o& K5 w$ U  S4 ^9 V輸出為C1200000% ^1 B5 l6 V5 c+ D

, \% l% i: M, t" C/ E4 t' @[ 本帖最後由 masonchung 於 2009-11-2 11:16 AM 編輯 ]

評分

參與人數 1 +1 收起 理由
呆頭鴨 + 1 學無止境阿

查看全部評分

21#
 樓主| 發表於 2009-10-19 20:05:06 | 只看該作者
mas大..但是如果轉成二補數42010000之後
5 v' Z# b) ?, Z! K+ e$ I與41b20000 偏移值調整後42590000 做有效位數相加=425A0000 ←這樣吧@@?" X2 g, G7 o! r& N1 R+ b9 A; |
並不等於C1200000 的說....
20#
發表於 2009-10-19 14:05:59 | 只看該作者
此二補數 1101_1111.1100 表示成IEEE754格式為42010000
9 s" D& N- A, H) _' m' g* @- G所以真正的浮點加法器輸入的MSB只要反相 就變成二補數
19#
發表於 2009-10-19 12:13:41 | 只看該作者
請問可以直接對ieee754格式的a跟b做四則運算嗎? . ~; L( B' M0 z  D. p4 {" S
(小數點對齊,實數相對位移後)a+b是否等於C2580000 ?
3 e, ?4 x0 }/ n# {# t不對
  S3 r5 }" {4 S1 g& G, G$ G只有浮點數加法器和乘法器
# @/ _& E% A5 b所以負數要用二補數
( R. f; y' o" I' V6 i5 n) NC2010000=1_10000100_0000001_0000_0000_0000_00008 ]" f5 b7 d: W9 q% b
二補數=1101_1111.1100# w6 r4 |( K1 w
22.25=0001_0110.0100
" S4 R! a" H2 f( c# ]+ L& R# W兩者相加即為答案-10, 透過浮點數加法器輸出為C1200000
# s, a# f2 [, k( `6 _* ^' w0 c$ `" U
) p4 s$ i9 b1 |; n[ 本帖最後由 masonchung 於 2009-11-2 11:12 AM 編輯 ]
18#
發表於 2009-10-19 10:55:44 | 只看該作者
最近剛好有碰到類似的問題 , 感謝說明
16#
發表於 2009-9-30 09:04:45 | 只看該作者
你說的二進制是 二補數的表示法 http://zh.wikipedia.org/zh-tw/%E4%BA%8C%E8%A3%9C%E6%95%B84 @3 B7 m& m5 y6 Y" Z8 n+ T0 Z* d

) @, V7 v9 K/ w& M# e7 r% ~ieee754 的 二進位浮點數格式在此 http://zh.wikipedia.org/wiki/IEEE_754
% k2 l# W# J, G# `9 A; g# w9 p* O4 N
9 T& y8 p# L! ]9 f. E3 q0 M$ T這兩種格式轉換可用電路實現 : q! b8 [! V# X) j/ Z) |4 J

7 r* W% X8 N2 z9 `1 U然後再輸入到浮點數加法器運算
15#
 樓主| 發表於 2009-9-23 20:05:40 | 只看該作者
masonchung 大大~
7 o3 }3 R6 A: L7 r
8 M! A" D/ R& G& X+ j' z! R如果要這樣做的話,我的A如果是十進制"2.5",並且可運算到小數點後第5位,二進制的輸入訊號是不是一定要是10.100009 }( ]' Z' @  [" r! _0 ?& a; C
這樣有錯嗎?) a' j+ k! q% W7 Z- A+ w4 Z
另外有一點有點疑問,這種作法是不是只能做無號數的浮點數運算?
) P- Q) L0 _" j* Y* h9 h# H-2.5的話,轉成二進制輸入到A會變什麼? 110.10000這樣?
14#
發表於 2009-9-22 22:21:46 | 只看該作者
可以實現
8 f  B8 T9 j, h* J請把了解規則 用電路可把非IEEE 754格式的浮點數(Fixed Point)轉成IEEE 754格式(Float Point)2 p" {1 b% [0 Q# F
然後就可以當成浮點數加法器的輸入0 e0 k% }1 N, J% T

1 O9 z' W: T6 _( g[ 本帖最後由 masonchung 於 2009-9-22 10:24 PM 編輯 ]
13#
 樓主| 發表於 2009-9-21 22:45:15 | 只看該作者
大大~
) u9 o7 b. F3 Z) F% }我知道你的意思了,不過我目前是需要把非IEEE 754格式的浮點數轉成IEEE 754格式.....+ A: b) E9 U& J$ _
這樣是不可能實現的嗎?^^"
12#
發表於 2009-9-21 20:22:38 | 只看該作者
您好
5 [1 z: i* ?9 ^, n5 z
- j8 w+ o* x& E' t; o我的意思是你要自己算,將10.5或1先自己轉好成IEEE 754格式,* P1 ?5 O( U& y: z8 P) X
然後在輸入到a,b

評分

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

查看全部評分

您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-4 02:49 AM , Processed in 0.121007 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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