Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-9-2 20:23:40 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
想請問有設計過IEEE 754 浮點數 規則的程式的大大.....; X' L( o5 \  q+ l+ |2 |
9 J0 k/ X2 Q7 U4 S
規則小弟是看的懂,不過疑問處在於
$ |0 a1 }; X. m# c9 B假設我設計一個簡單的浮點數加法器,輸入數值a跟b相加.! ~% C5 c$ d0 f( ?/ K, ~
那麼,我的"a如果是十進制10.5"  "b是2.125"2 T* Z: p- u3 n9 }' s5 I8 o7 B3 w; e
a跟b是要先正規化之後再行運算嗎?! R+ E/ T7 g; {( I9 x! |# e1 j& |
這樣正規化之前,10.5要怎麼顯示成二進位?是固定位元顯示整數部份,
# @' I" Z4 A+ o- W- B另一部份固定位元顯示小數部份..ex: 10.5=>1010.1
# A% g" E0 z- G: }9 Z5 j這樣輸入a之後變成10101,程式內部再將a[4:1]斷定成整數a[0]斷定成浮點數,, r9 o% s- ~7 O  g. y7 d6 Z( d
這樣設計對嗎?9 K/ x# `2 S/ f* c3 g" T
我是剛接觸的菜鳥..還請大大們指教提拔....如果有相關code可以參考感激不盡m(_ _)m
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
推薦
 樓主| 發表於 2009-10-18 14:03:42 | 只看該作者
謝謝大大們的幫助,目前我已經完成了部分的程式,現在又遇到一點問題,想提出來跟大大們討論一下...% q. `3 z2 p- O9 J8 l
想請問大大們~+ N( D. J6 T+ n2 j6 v9 d6 d( v5 G
a= 41B20000  (16進制- ieee754格式)  十進制22.25+ I8 M" [8 Y& Q0 M. O! a3 Z
b=C2010000  (16進制- ieee754格式)   十進制-32.25
5 S$ e; P8 N" ^: h' ?請問可以直接對ieee754格式的a跟b做四則運算嗎? : E$ H8 F+ S, I: o2 H5 S
(小數點對齊,實數相對位移後)a+b是否等於C2580000 ?" f! U# I& G8 ~0 E8 m- j0 G6 E( r

. t2 j* ^( ]  q  T& @* l
6 q3 K! k- w% o3 s1 k3 l1 i還是說一定要先做十進制的22.25+(-32.25)= -10 最後答案才用IEEE754表示?% q9 O1 R4 O- C! ~' [0 W5 x
-10的IEEE754表示=C1200000# F  v/ _  D* q1 N; B3 q

8 ]1 I+ c2 t, T+ rC2580000與C1200000好像不太一樣.
' }! L# s. [# N4 j6 @/ b) b還是說要怎麼逆運算才可以求出-10?
, Y8 I. J, n4 ^/ R* `# g大大曉得嗎@@?
回復 支持 1 反對 0

使用道具 舉報

30#
 樓主| 發表於 2009-11-10 22:47:59 | 只看該作者
大大~請問BOOTH做除法器.是只要把乘法的+ -規則相反變- +就可以了嗎@@"2 R+ Z$ I. x) ?" r) l
如果我乘法要一次判斷比較多位元規則該怎麼定呢??~因為網上找到的大多都是用2BIT作判斷~
& x- x( c8 y, t4 A* Z  B7 O8 d4 G0 `; `
另外請問一下.SRT俗稱是^^?
29#
發表於 2009-11-4 10:21:18 | 只看該作者

回復 28# 的帖子

除法運算在FPGA 沒有DW IP / i$ f$ q, Z6 o% q
所以可用布斯Booth 或 SRT 的演算法來完成6 v% f# M5 H8 Q7 Q
/ N' z! y( n8 k; f' y. G
[ 本帖最後由 masonchung 於 2009-11-4 10:27 AM 編輯 ]

評分

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

查看全部評分

28#
 樓主| 發表於 2009-11-2 19:56:24 | 只看該作者
謝謝大大~我知道怎麼做了: D1 ?* t2 @0 z5 S0 V# ]+ P# t

) M2 N/ f' I) b) v& t. [/ g  t另外請問,做浮點數除法運算時 做法為 指數相減 有效數相除
  P/ h& q& u# a6 v9 Z$ a& |, e% A% G' M但是為何A[22:0]跟B[22:0]的有效數相除時  C=A/B% o7 p+ ^. U8 O
如果A<B則無法運算2 w( R4 x, w7 w% |! U
是除法運算需要用其他方式完成嗎?
27#
發表於 2009-11-2 11:36:10 | 只看該作者

回復 26# 的帖子

小數點是人判定的,輸入不足位數要補0! A3 E3 K+ R! K% `' X0 h
硬體運算時對齊小數點即可9 t6 a2 Q5 v0 L0 N* c% Q
2 C# p& R1 ?/ s* P# D
*******************************************************1 j+ y( k0 X  w' P, v
41b20000 ==>32bit
% U. W0 G3 t! K5 V6 u$ l5 u  [這邊是說輸入已經是IEEE-754格式
4 J6 i4 ~7 ~+ L7 i$ Z% p/ L4 X*******************************************************
  X2 u5 G6 }/ I9 E4 S如果輸入是10進位浮點數 輸入quartus 後 要換成sign bit + 32-bit fixed-point
3 b) C* w9 a( q8 L22.25 = (10110.01) 二進位 = {sign-bit=0,0016.4000} 十六進位
# f3 H% R2 ^. [9 m7 c
, x$ ~: W% g* e1 I% L  V6 m  d! A6 p用fixed-point to float-point 轉換電路
. b" t3 `) O3 b' V7 Z換算成IEEE-754浮點數格式
' x6 v. R5 |6 H. V* @就可以給浮點數ALU 作運算
$ U  @- b  x  R( P, ^9 j4 z  C, d# d' m3 _8 x+ x
[ 本帖最後由 masonchung 於 2009-11-2 11:41 AM 編輯 ]
26#
 樓主| 發表於 2009-10-30 20:28:16 | 只看該作者

回復 25# 的帖子

如果規定要用10進制浮點數輸入
6 G' R+ I9 H+ t+ P8 }# S那你的輸入級就要多一個轉換電路" t9 {( F6 q+ e( n4 x
可把非IEEE 754格式的浮點數(Fixed Point)轉成IEEE 754格式(Float Point)) |3 I( F/ |2 T/ }7 c: _+ c
----------------------------------------
) U3 E  Z4 S3 t- o非IEEE 754格式的浮點數 輸入~ 是類似(22.25) => 10110.01 輸入至input ?; A2 r6 U( j0 t/ v
那在quartus看到的input是不是變成1011001 ? ! J8 G, b+ G6 i4 @1 Z$ X
這樣的話我怎麼曉得我輸入訊號小數點位置在哪@@?(10.5)=>1010.1
+ x2 I: u7 J5 s$ l! ?6 K& p還是說要給input的訊號,其訊號源必須要產生固定小數點N位的數值." z1 J7 {5 F0 |
假如訊號源固定產生小數點3位的訊號~
3 M7 s1 o' g" ]7 w& z2 i/ O% X; A22.25=> 10110.010   第3位補0
& x/ B$ L5 N7 V* ]4 X10.5  => 1010.100   後2位補0至第3位....是這樣嗎?  如果是這樣就可以在程式內部判斷[2:0]為小數[3:N]為整數.......不知道是不是這樣做?
8 k: o0 j. ~' z: u5 Y' `$ c* v  Y7 {$ m
-----------------------------------
/ H* M! `# a: D. \- h1 H& o" L8 l7 I) hinput有辦法設定輸入10進制浮點數嗎?' {1 E2 }6 T) p3 J) ]5 P
quartus 用32bit 就可以輸入阿& `- q4 \' B+ J. ^
這邊大大是說 我input寫成32bit就可以在模擬的時候使用類似22.25十進制的浮點數?
25#
發表於 2009-10-29 11:12:30 | 只看該作者
input有辦法設定輸入10進制浮點數嗎?) k/ K# u% z* a$ h
因為你的電路功能是浮點數ALU 輸入自然是IEEE-754格式$ T/ k* y, @) m
先自行換算22.25 成IEEE-754格式 41b20000 輸入. j" k' f% k$ N, v$ e
6 O7 ?( m1 ]/ |% n$ L* G
quartus 用32bit 就可以輸入阿: h% t$ T( a! |+ \- C+ v

* v  R' F9 h' _~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 W3 b' i- k, E8 b$ L  p如果規定要用10進制浮點數輸入# Y* \4 B7 b$ j# F6 q& v
那你的輸入級就要多一個轉換電路
( K  B% N+ F- v  ]" ?  {8 T可把非IEEE 754格式的浮點數(Fixed Point)轉成IEEE 754格式(Float Point)4 G) E" z, l3 K7 c  E% ^/ k; I2 i
2 F) X) i8 V( G  A. d2 o
[ 本帖最後由 masonchung 於 2009-10-29 01:13 PM 編輯 ]

評分

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

查看全部評分

24#
 樓主| 發表於 2009-10-23 20:43:11 | 只看該作者
大大~另外請問使用quartus做波形模擬的時候,input有辦法設定輸入10進制浮點數嗎? EX: (22.25)) p% I4 u. j& ^0 k- Z6 D
假如無法使用,這樣的話10進制的浮點數數值要如何輸入? 難道是輸入 A1= 22   A2=0.25  A1+A2=A  這樣訊號要怎麼分離@@~不知道大大有沒有聽的懂我的意思^^"
23#
 樓主| 發表於 2009-10-21 20:20:14 | 只看該作者
謝謝大大提點~又學到東西了...^^
* {. U% }& K3 r# s7 q6 W
1 k& l* b# L" J6 |# K6 w7 l4 j9 A另外想問做乘法運算" T) M. a4 L% i. J  q. h- N
有效位數直接a*b跟  a+a 加b次  哪一種作法在硬體上速度較快呢?% z# U3 A" h* U! F8 A2 I9 n$ n
除法也是如此嗎?
22#
發表於 2009-10-21 12:08:33 | 只看該作者
42010000 (-32.25) 是IEEE754格式 也就是浮點數加法器的輸入A
  P7 z  s( j* l% ?& v# I% u41b20000 (22.25) 是IEEE754格式 也就是浮點數加法器的輸入B
; G2 R' V+ K5 h8 B這個浮點加法器內部輸入級 的功用就是偏移值調整後做有效位數相加  A3 e  c, D- v9 L' @) K

2 H( F4 y5 F& X+ H! _% z) n所以 浮點加法器內部 運算級
% `: f2 h, V6 t, ~1 i8 vA=1101_1111.1100
# {+ x5 h5 J$ yB=0001_0110.0100
$ }2 u& x- x  ]6 L; a2 S. w- pA+B=1111_0110.0000 = -(10)7 {$ k  U8 p' g

2 s/ _! f! t5 @再透過浮點數加法器輸出級 轉換為IEEE754格式8 ?8 b  K, O% r  `) Q
輸出為C1200000, o: \8 [( E+ d$ x( R" ^% R. j
6 ~6 W7 B1 `. O2 ?1 B" l) F1 e4 e
[ 本帖最後由 masonchung 於 2009-11-2 11:16 AM 編輯 ]

評分

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

查看全部評分

21#
 樓主| 發表於 2009-10-19 20:05:06 | 只看該作者
mas大..但是如果轉成二補數42010000之後
# a- _/ B! r  t$ {& \) }與41b20000 偏移值調整後42590000 做有效位數相加=425A0000 ←這樣吧@@?
" Z" ^3 U8 ], E9 s6 H- p; Y# ^+ _並不等於C1200000 的說....
20#
發表於 2009-10-19 14:05:59 | 只看該作者
此二補數 1101_1111.1100 表示成IEEE754格式為420100001 m$ D$ E2 \$ F+ P/ U1 G! K
所以真正的浮點加法器輸入的MSB只要反相 就變成二補數
19#
發表於 2009-10-19 12:13:41 | 只看該作者
請問可以直接對ieee754格式的a跟b做四則運算嗎?
0 b- L* s! {! {/ R: ~" v(小數點對齊,實數相對位移後)a+b是否等於C2580000 ?
1 z; k$ Z0 |* A& k- {4 o3 Z不對
' X& V% h4 A) Z: v7 P- w只有浮點數加法器和乘法器0 ]. }* W, N4 C' G
所以負數要用二補數
" a# g# }7 e( W1 }9 ^C2010000=1_10000100_0000001_0000_0000_0000_0000
- a7 @# K1 z( W" Q+ J二補數=1101_1111.1100" z2 \- ]6 o. m
22.25=0001_0110.0100$ {* r& o+ D( o2 L+ G
兩者相加即為答案-10, 透過浮點數加法器輸出為C1200000! o) c4 k0 @9 M3 A' O
) \( X* w! q' 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 X: z' N/ W* ^5 t* T  L
7 w" U$ V8 {/ y0 _& W
ieee754 的 二進位浮點數格式在此 http://zh.wikipedia.org/wiki/IEEE_754
; j0 @# z4 w1 F9 p4 ~( N) e1 t
, W( ]0 t# e1 [+ |8 S這兩種格式轉換可用電路實現
' l& e1 y/ O4 V7 `: `
; l7 S# q$ L, J4 W4 A( B然後再輸入到浮點數加法器運算
15#
 樓主| 發表於 2009-9-23 20:05:40 | 只看該作者
masonchung 大大~
8 A) f8 }0 ^+ j2 R & w4 L8 ~8 m( Z5 N( H# y6 z  T
如果要這樣做的話,我的A如果是十進制"2.5",並且可運算到小數點後第5位,二進制的輸入訊號是不是一定要是10.10000
  j  V" K' Y, J3 X4 Z/ F這樣有錯嗎?
' {" d4 J8 C$ v2 W4 r5 l另外有一點有點疑問,這種作法是不是只能做無號數的浮點數運算?
8 S* ^* A6 f3 I: G-2.5的話,轉成二進制輸入到A會變什麼? 110.10000這樣?
14#
發表於 2009-9-22 22:21:46 | 只看該作者
可以實現
" I: I" S- K* o. }: t; j" A請把了解規則 用電路可把非IEEE 754格式的浮點數(Fixed Point)轉成IEEE 754格式(Float Point)0 N; o6 f. k3 M
然後就可以當成浮點數加法器的輸入
7 j% X1 M5 K( ?  \1 f! B
  S% y5 F4 Y  U* m1 Y' z6 ][ 本帖最後由 masonchung 於 2009-9-22 10:24 PM 編輯 ]
13#
 樓主| 發表於 2009-9-21 22:45:15 | 只看該作者
大大~# e0 Q4 q+ m; X
我知道你的意思了,不過我目前是需要把非IEEE 754格式的浮點數轉成IEEE 754格式....., S# ?$ s# d, n: C7 Z* H
這樣是不可能實現的嗎?^^"
12#
發表於 2009-9-21 20:22:38 | 只看該作者
您好- s% t7 T9 o. m  g* H  U
7 E- p; \' {: T9 L
我的意思是你要自己算,將10.5或1先自己轉好成IEEE 754格式,
! J0 ~. K7 ]( Z, Z/ d然後在輸入到a,b

評分

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

查看全部評分

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

本版積分規則

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

GMT+8, 2025-1-30 11:25 PM , Processed in 0.193011 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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