Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-9-2 20:23:40 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
想請問有設計過IEEE 754 浮點數 規則的程式的大大.....
+ t+ Y7 @! g8 O  U
6 n: p8 }, p* ?3 y% G- w& ?規則小弟是看的懂,不過疑問處在於
2 p1 _. c: V. q! O假設我設計一個簡單的浮點數加法器,輸入數值a跟b相加.
# _1 W9 r1 p5 w% P" l那麼,我的"a如果是十進制10.5"  "b是2.125"
3 G# G2 s2 @9 k% O4 a! O) P( F# L) qa跟b是要先正規化之後再行運算嗎?9 q4 G2 z* N. \7 L4 J6 {3 b( C
這樣正規化之前,10.5要怎麼顯示成二進位?是固定位元顯示整數部份,. {) M  z3 h" t+ c$ o
另一部份固定位元顯示小數部份..ex: 10.5=>1010.1
( y! |5 w& n8 n! G- O3 l  }5 h* A# L這樣輸入a之後變成10101,程式內部再將a[4:1]斷定成整數a[0]斷定成浮點數,5 x( u# ]. T8 H, m3 L5 B" }
這樣設計對嗎?
2 V1 o+ {' f# W我是剛接觸的菜鳥..還請大大們指教提拔....如果有相關code可以參考感激不盡m(_ _)m
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
推薦
 樓主| 發表於 2009-10-18 14:03:42 | 只看該作者
謝謝大大們的幫助,目前我已經完成了部分的程式,現在又遇到一點問題,想提出來跟大大們討論一下...
) C: \& {0 q% h* d$ I" @想請問大大們~( a+ Q/ n  _  U0 u7 o* p
a= 41B20000  (16進制- ieee754格式)  十進制22.25* V6 t% n+ `( ]* p( D% {
b=C2010000  (16進制- ieee754格式)   十進制-32.255 U' {. `$ o9 u
請問可以直接對ieee754格式的a跟b做四則運算嗎? ! g3 J+ I" a1 v
(小數點對齊,實數相對位移後)a+b是否等於C2580000 ?: X; A$ k* o, ]0 o6 D$ Y# ^0 I
: G6 J) P' Z: {& o

- m. [  V& ^4 R) H還是說一定要先做十進制的22.25+(-32.25)= -10 最後答案才用IEEE754表示?( S  B; m7 r& x; D
-10的IEEE754表示=C1200000
. g/ |+ Z9 H2 U! `( J7 q
' P, W; C$ J5 O9 KC2580000與C1200000好像不太一樣.5 Y% O  d" ^1 Y
還是說要怎麼逆運算才可以求出-10?) v6 A3 N3 C5 o- q, u
大大曉得嗎@@?
回復 支持 1 反對 0

使用道具 舉報

30#
 樓主| 發表於 2009-11-10 22:47:59 | 只看該作者
大大~請問BOOTH做除法器.是只要把乘法的+ -規則相反變- +就可以了嗎@@"
. b% \$ K) Y  w  k, n/ |0 \如果我乘法要一次判斷比較多位元規則該怎麼定呢??~因為網上找到的大多都是用2BIT作判斷~7 J& a$ N% u% W; Y

1 A% \4 C1 l6 y! g+ H' L另外請問一下.SRT俗稱是^^?
29#
發表於 2009-11-4 10:21:18 | 只看該作者

回復 28# 的帖子

除法運算在FPGA 沒有DW IP 6 _' z) I# {! c
所以可用布斯Booth 或 SRT 的演算法來完成0 h& L! b' a+ L. k

# a0 `) b/ ]% C. j[ 本帖最後由 masonchung 於 2009-11-4 10:27 AM 編輯 ]

評分

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

查看全部評分

28#
 樓主| 發表於 2009-11-2 19:56:24 | 只看該作者
謝謝大大~我知道怎麼做了
4 q: s  M( c/ Y* E" n( ~3 @' ?
) t  {. _2 H8 [9 w; A另外請問,做浮點數除法運算時 做法為 指數相減 有效數相除% N' R3 U' K' ^
但是為何A[22:0]跟B[22:0]的有效數相除時  C=A/B# Y8 h& g6 X$ }- R5 D% M) K# F
如果A<B則無法運算) l3 O' c) J3 ~* P
是除法運算需要用其他方式完成嗎?
27#
發表於 2009-11-2 11:36:10 | 只看該作者

回復 26# 的帖子

小數點是人判定的,輸入不足位數要補0
$ s# o- x( e* f  P, P硬體運算時對齊小數點即可
% Q. k, H% }( n/ F8 m# O7 c" t; E
*******************************************************& G2 K8 |; R/ b7 P
41b20000 ==>32bit
- p( y% w8 m; [% g7 w; r這邊是說輸入已經是IEEE-754格式
& b- Z7 K* e% c# V4 v*******************************************************: b4 Y4 t4 b0 D! c
如果輸入是10進位浮點數 輸入quartus 後 要換成sign bit + 32-bit fixed-point
" Q  |; p* Y- h. b. U. K/ X22.25 = (10110.01) 二進位 = {sign-bit=0,0016.4000} 十六進位
. |* T& f* A6 P7 s1 }9 ]
+ N( ]7 T/ V  `9 u; w用fixed-point to float-point 轉換電路
0 D9 I9 y2 I# u5 S) j0 P換算成IEEE-754浮點數格式
% B7 B* _; U# a: V5 l就可以給浮點數ALU 作運算
* d* t5 p4 |# i$ Y4 y& O" a: E! ^, u
[ 本帖最後由 masonchung 於 2009-11-2 11:41 AM 編輯 ]
26#
 樓主| 發表於 2009-10-30 20:28:16 | 只看該作者

回復 25# 的帖子

如果規定要用10進制浮點數輸入
* o' {1 [$ l% V那你的輸入級就要多一個轉換電路4 L) m8 S' n) n% \# w0 k4 ?
可把非IEEE 754格式的浮點數(Fixed Point)轉成IEEE 754格式(Float Point)
' _; U6 _) m4 x----------------------------------------
7 ~4 G* j7 k) t2 G! X+ W: K非IEEE 754格式的浮點數 輸入~ 是類似(22.25) => 10110.01 輸入至input ?7 N6 G4 L! Z8 z) F, b6 R0 M
那在quartus看到的input是不是變成1011001 ?
# W/ H# B' o: u% ^2 \7 l7 c1 w這樣的話我怎麼曉得我輸入訊號小數點位置在哪@@?(10.5)=>1010.1
$ U. A1 ^6 r. N6 \還是說要給input的訊號,其訊號源必須要產生固定小數點N位的數值.
3 s+ X6 K. q' V7 X: R假如訊號源固定產生小數點3位的訊號~  l  K' V  s, s9 R& F
22.25=> 10110.010   第3位補0( y$ W/ d1 U' z+ U- E
10.5  => 1010.100   後2位補0至第3位....是這樣嗎?  如果是這樣就可以在程式內部判斷[2:0]為小數[3:N]為整數.......不知道是不是這樣做?3 P& ~5 H4 @' ?* `+ Q5 C
- [1 l+ w6 R' ~- t' {
------------------------------------ W9 D7 t( N  ~; H; J: S
input有辦法設定輸入10進制浮點數嗎?5 z$ f6 [  I% @- Q, j3 K  a
quartus 用32bit 就可以輸入阿
+ F! \7 S# F" E4 p 這邊大大是說 我input寫成32bit就可以在模擬的時候使用類似22.25十進制的浮點數?
25#
發表於 2009-10-29 11:12:30 | 只看該作者
input有辦法設定輸入10進制浮點數嗎?  H' N; ~* d6 t3 ?  W* [: b
因為你的電路功能是浮點數ALU 輸入自然是IEEE-754格式6 V% \) B7 y! b* r7 B, {8 R4 r7 u
先自行換算22.25 成IEEE-754格式 41b20000 輸入
5 ]0 e, J0 S' t2 Z. ^# c4 U# h; P# I0 c+ B# x& U  ?
quartus 用32bit 就可以輸入阿
0 o/ S! K' C9 f+ b: u1 O
5 s+ z  S- q7 ~6 M' W~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~5 r0 {' a' v3 C; P, z2 Q* h. ]: r
如果規定要用10進制浮點數輸入
3 ^) t0 D2 t+ E2 c; ?# `0 ]5 r那你的輸入級就要多一個轉換電路
; J5 J$ T$ Y) g2 u可把非IEEE 754格式的浮點數(Fixed Point)轉成IEEE 754格式(Float Point)
2 G( l5 d# T( v/ G" u1 U
2 v! g$ I% Z& f% ^* J! D/ g/ ^[ 本帖最後由 masonchung 於 2009-10-29 01:13 PM 編輯 ]

評分

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

查看全部評分

24#
 樓主| 發表於 2009-10-23 20:43:11 | 只看該作者
大大~另外請問使用quartus做波形模擬的時候,input有辦法設定輸入10進制浮點數嗎? EX: (22.25)( M% V: r5 n. M" A
假如無法使用,這樣的話10進制的浮點數數值要如何輸入? 難道是輸入 A1= 22   A2=0.25  A1+A2=A  這樣訊號要怎麼分離@@~不知道大大有沒有聽的懂我的意思^^"
23#
 樓主| 發表於 2009-10-21 20:20:14 | 只看該作者
謝謝大大提點~又學到東西了...^^
* {4 D( Y5 f: u1 c+ r! ^. s: L) k  }5 l5 w  R7 Z( S! _
另外想問做乘法運算4 X" o2 w- h+ |8 x7 O
有效位數直接a*b跟  a+a 加b次  哪一種作法在硬體上速度較快呢?7 s) A% U+ c! x! Y/ Z' q
除法也是如此嗎?
22#
發表於 2009-10-21 12:08:33 | 只看該作者
42010000 (-32.25) 是IEEE754格式 也就是浮點數加法器的輸入A
; L1 ~. P& Y: W) {41b20000 (22.25) 是IEEE754格式 也就是浮點數加法器的輸入B- O3 U0 W: |9 e. d; C
這個浮點加法器內部輸入級 的功用就是偏移值調整後做有效位數相加
% L1 O- D$ Q" l6 ?' O" ^: F; B! e- L7 Y! B4 f" T5 |
所以 浮點加法器內部 運算級% E( k: h+ _- U4 C8 D0 D
A=1101_1111.1100  |) P( G  ?2 X: _1 l4 F; j
B=0001_0110.0100
: U1 o5 ]. X4 a. X7 ?5 BA+B=1111_0110.0000 = -(10)
7 T; x* D4 ?. S  M5 {0 g1 u/ m0 S0 a! T( i! C
再透過浮點數加法器輸出級 轉換為IEEE754格式; x4 a- Y, t' G
輸出為C1200000% R! I1 X/ f9 c. c

1 A* g. w6 T$ @: ^  b[ 本帖最後由 masonchung 於 2009-11-2 11:16 AM 編輯 ]

評分

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

查看全部評分

21#
 樓主| 發表於 2009-10-19 20:05:06 | 只看該作者
mas大..但是如果轉成二補數42010000之後
/ |; p2 H& f( \/ m3 {( ~% W6 K與41b20000 偏移值調整後42590000 做有效位數相加=425A0000 ←這樣吧@@?
8 P+ N# ?" A) A' P, V並不等於C1200000 的說....
20#
發表於 2009-10-19 14:05:59 | 只看該作者
此二補數 1101_1111.1100 表示成IEEE754格式為420100006 f8 w; u; p2 d& j) s  B. Y
所以真正的浮點加法器輸入的MSB只要反相 就變成二補數
19#
發表於 2009-10-19 12:13:41 | 只看該作者
請問可以直接對ieee754格式的a跟b做四則運算嗎? 8 v- C- L- q, Z. p
(小數點對齊,實數相對位移後)a+b是否等於C2580000 ?
5 Z' O' G- Z* Q5 d! _1 z& v不對
! p2 P/ s# ]' a* J; S9 G4 t$ C8 w* @6 B只有浮點數加法器和乘法器$ I5 v: ]2 B; @9 w5 R2 \
所以負數要用二補數7 {* t  _! a/ I" h9 N
C2010000=1_10000100_0000001_0000_0000_0000_0000
8 I& t9 y9 R  S& f9 Q! [0 C" [二補數=1101_1111.1100% I. c1 n) [3 u$ L- E& l
22.25=0001_0110.0100; g/ W- G" }2 f* k2 n+ f8 E( g
兩者相加即為答案-10, 透過浮點數加法器輸出為C12000007 {9 H! i; D. S; A

# `6 p( S, A0 R. V2 D8 I[ 本帖最後由 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%B8
$ Z, h+ p1 X' F% Z  S
8 |& ?" r& _5 {4 [6 dieee754 的 二進位浮點數格式在此 http://zh.wikipedia.org/wiki/IEEE_7549 T* Q7 r, I" ?5 g
2 `! U' N% z4 G% {8 w
這兩種格式轉換可用電路實現 , ~+ `- t9 c" h7 g( I! b

' h4 d6 }3 P5 C# G$ z' n+ v然後再輸入到浮點數加法器運算
15#
 樓主| 發表於 2009-9-23 20:05:40 | 只看該作者
masonchung 大大~5 k9 u$ R0 E- l) V' r, J3 c
( X+ Q; H: O& S9 z% I& ~8 ~
如果要這樣做的話,我的A如果是十進制"2.5",並且可運算到小數點後第5位,二進制的輸入訊號是不是一定要是10.10000& k* ~: V* z; F5 q
這樣有錯嗎?& O3 a/ G) P/ |2 `+ J6 |) l
另外有一點有點疑問,這種作法是不是只能做無號數的浮點數運算?
# a" W. n' ]. H) c3 V  m-2.5的話,轉成二進制輸入到A會變什麼? 110.10000這樣?
14#
發表於 2009-9-22 22:21:46 | 只看該作者
可以實現
' C( ]) t# ~' N4 Z請把了解規則 用電路可把非IEEE 754格式的浮點數(Fixed Point)轉成IEEE 754格式(Float Point)5 \4 z/ G7 p' }- [
然後就可以當成浮點數加法器的輸入# O, ~: N5 O/ Z, R9 k% l

! [; ^& B4 f) v, q[ 本帖最後由 masonchung 於 2009-9-22 10:24 PM 編輯 ]
13#
 樓主| 發表於 2009-9-21 22:45:15 | 只看該作者
大大~8 R6 f6 w' m* h! r6 |
我知道你的意思了,不過我目前是需要把非IEEE 754格式的浮點數轉成IEEE 754格式.....
. S  H- E! R4 c- B" |這樣是不可能實現的嗎?^^"
12#
發表於 2009-9-21 20:22:38 | 只看該作者
您好5 C9 E+ B. J7 }, i4 G0 e
9 [9 K% r+ {! y# S+ S: Q6 t- L
我的意思是你要自己算,將10.5或1先自己轉好成IEEE 754格式,
+ Y& }+ m7 }" Y然後在輸入到a,b

評分

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

查看全部評分

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

本版積分規則

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

GMT+8, 2024-5-2 06:46 PM , Processed in 0.144008 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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