Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-9-2 20:23:40 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
想請問有設計過IEEE 754 浮點數 規則的程式的大大.....
2 t  J7 i# h( A" s0 G
5 C/ R+ J+ h- U! g, r' j規則小弟是看的懂,不過疑問處在於- k0 A% D8 y) E" R9 O/ z0 j+ _0 D
假設我設計一個簡單的浮點數加法器,輸入數值a跟b相加.
3 B4 F7 [, I! |. v# z: t那麼,我的"a如果是十進制10.5"  "b是2.125"
8 a# E' a# E" n% Ba跟b是要先正規化之後再行運算嗎?
- N" v/ l, z1 l9 p這樣正規化之前,10.5要怎麼顯示成二進位?是固定位元顯示整數部份,9 @- m9 O+ x! v$ |- j
另一部份固定位元顯示小數部份..ex: 10.5=>1010.1: u3 T! H8 z4 Z# f7 v. X: b
這樣輸入a之後變成10101,程式內部再將a[4:1]斷定成整數a[0]斷定成浮點數," c9 p* N! I' v
這樣設計對嗎?- a/ ^0 P0 ?$ M
我是剛接觸的菜鳥..還請大大們指教提拔....如果有相關code可以參考感激不盡m(_ _)m
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
推薦
 樓主| 發表於 2009-10-18 14:03:42 | 只看該作者
謝謝大大們的幫助,目前我已經完成了部分的程式,現在又遇到一點問題,想提出來跟大大們討論一下.... j! o; C, X0 q
想請問大大們~
+ r# E7 L0 H6 L! `a= 41B20000  (16進制- ieee754格式)  十進制22.25! L7 {8 Z1 k' Z& j/ p
b=C2010000  (16進制- ieee754格式)   十進制-32.25- i6 k3 a- o" N5 L' W( ~
請問可以直接對ieee754格式的a跟b做四則運算嗎?
; n' R8 s# ~, p( c7 T(小數點對齊,實數相對位移後)a+b是否等於C2580000 ?: R; b) Q) P; q
3 O3 {1 z3 d6 O+ L* E
' M* y/ I3 q- }5 |" }' Q2 o! l
還是說一定要先做十進制的22.25+(-32.25)= -10 最後答案才用IEEE754表示?
  j) U1 S, d* M+ W-10的IEEE754表示=C1200000
$ _7 o0 M0 z0 q8 ]  k3 I 9 f4 M& R; c6 }
C2580000與C1200000好像不太一樣.8 s$ w" c; @- S! y
還是說要怎麼逆運算才可以求出-10?
9 w8 b. x! U# p  s) y: p; v* F3 H大大曉得嗎@@?
回復 支持 1 反對 0

使用道具 舉報

30#
 樓主| 發表於 2009-11-10 22:47:59 | 只看該作者
大大~請問BOOTH做除法器.是只要把乘法的+ -規則相反變- +就可以了嗎@@"
9 ^3 A4 y  u4 B; z5 F- z* e如果我乘法要一次判斷比較多位元規則該怎麼定呢??~因為網上找到的大多都是用2BIT作判斷~7 q1 a$ P9 ^' V0 d
1 {" K: `$ W- v/ f9 C* a- c" D
另外請問一下.SRT俗稱是^^?
29#
發表於 2009-11-4 10:21:18 | 只看該作者

回復 28# 的帖子

除法運算在FPGA 沒有DW IP & T  m/ f+ y- }! k0 ^: g! N: ]
所以可用布斯Booth 或 SRT 的演算法來完成
" R0 |; v2 r7 C+ ?$ W$ H+ B: [, C# R& H
[ 本帖最後由 masonchung 於 2009-11-4 10:27 AM 編輯 ]

評分

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

查看全部評分

28#
 樓主| 發表於 2009-11-2 19:56:24 | 只看該作者
謝謝大大~我知道怎麼做了8 z. Y7 }) U( H1 O0 a& p$ N$ m

, u/ r$ _& N, M另外請問,做浮點數除法運算時 做法為 指數相減 有效數相除
6 v, @+ C6 R: c  v) H8 {但是為何A[22:0]跟B[22:0]的有效數相除時  C=A/B
# F4 q+ b) L. L) I/ X; D如果A<B則無法運算
$ A6 j* ~) n  S9 p3 G( t7 ~- ^是除法運算需要用其他方式完成嗎?
27#
發表於 2009-11-2 11:36:10 | 只看該作者

回復 26# 的帖子

小數點是人判定的,輸入不足位數要補0
# L- H2 ~8 x; w, h硬體運算時對齊小數點即可! d) f! A* |  `9 i. r( V) ^
: W7 V0 g5 P8 E1 r
*******************************************************
. K9 @% c3 {$ Z( b+ P41b20000 ==>32bit
! e1 i" B; t; J" ?3 x; L3 d這邊是說輸入已經是IEEE-754格式
# i3 E3 D9 r- Q" s7 E- F8 Z! ~*******************************************************; G; f( m, w1 J( `
如果輸入是10進位浮點數 輸入quartus 後 要換成sign bit + 32-bit fixed-point0 c+ F1 Y& Q1 z
22.25 = (10110.01) 二進位 = {sign-bit=0,0016.4000} 十六進位 5 N# ~6 o; B6 Z2 [9 i+ F

, r' K7 W, U' p用fixed-point to float-point 轉換電路
( i* c9 Z8 }$ i+ O) Y; W0 f換算成IEEE-754浮點數格式
* r9 A0 z5 `3 ^3 X- x就可以給浮點數ALU 作運算
2 [* Q0 O: y. c: B$ H8 I, @( V$ F$ Z
[ 本帖最後由 masonchung 於 2009-11-2 11:41 AM 編輯 ]
26#
 樓主| 發表於 2009-10-30 20:28:16 | 只看該作者

回復 25# 的帖子

如果規定要用10進制浮點數輸入
$ ?, z1 x% S% j( z- {# x% W那你的輸入級就要多一個轉換電路
) m3 d1 V2 E- q3 @可把非IEEE 754格式的浮點數(Fixed Point)轉成IEEE 754格式(Float Point)# O3 s& x$ m$ b9 h; Z, M  i3 d
----------------------------------------
: ^+ x+ P; m" k  F+ u2 v' h非IEEE 754格式的浮點數 輸入~ 是類似(22.25) => 10110.01 輸入至input ?% k2 y* [$ O6 ^: X" ]" N
那在quartus看到的input是不是變成1011001 ? & `' m  ?9 V# B1 ]
這樣的話我怎麼曉得我輸入訊號小數點位置在哪@@?(10.5)=>1010.1
* l8 E" ~3 \/ X9 F) q3 b還是說要給input的訊號,其訊號源必須要產生固定小數點N位的數值.  ^+ x5 E4 l" l" L3 v3 k
假如訊號源固定產生小數點3位的訊號~
1 |; e8 m. T0 Z$ R$ ^% i0 t22.25=> 10110.010   第3位補0
8 L4 {- r9 q1 X7 G6 @- I+ V10.5  => 1010.100   後2位補0至第3位....是這樣嗎?  如果是這樣就可以在程式內部判斷[2:0]為小數[3:N]為整數.......不知道是不是這樣做?
3 n7 E3 h; [) i
  z* g. {7 L. T8 h-----------------------------------
) ^3 V, _4 g' R3 k+ ?$ d" k: Winput有辦法設定輸入10進制浮點數嗎?6 `5 M, |7 ?2 b; I6 V9 y$ j
quartus 用32bit 就可以輸入阿
5 c- z$ m) E5 S$ a0 ` 這邊大大是說 我input寫成32bit就可以在模擬的時候使用類似22.25十進制的浮點數?
25#
發表於 2009-10-29 11:12:30 | 只看該作者
input有辦法設定輸入10進制浮點數嗎?0 c5 x" ^' l1 a" f: Y8 F% \
因為你的電路功能是浮點數ALU 輸入自然是IEEE-754格式
0 S9 _. z4 S) B6 M先自行換算22.25 成IEEE-754格式 41b20000 輸入. L  Q1 o+ H1 r8 w' u. Z3 y8 @
% q$ b! n7 ^4 G
quartus 用32bit 就可以輸入阿% A3 W& @$ N1 t( @6 y
+ x% A: a: Z8 \/ V+ C9 @7 v
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5 ~. O( P+ A) {  T- v  M9 D3 `如果規定要用10進制浮點數輸入
9 O) l7 Y2 b7 }& Z" g* M: C那你的輸入級就要多一個轉換電路! @/ ?6 I5 m; ^, {3 {, H
可把非IEEE 754格式的浮點數(Fixed Point)轉成IEEE 754格式(Float Point)
1 Y9 Y  ?' w$ q3 C" Y% t7 J& r; `" {$ H
[ 本帖最後由 masonchung 於 2009-10-29 01:13 PM 編輯 ]

評分

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

查看全部評分

24#
 樓主| 發表於 2009-10-23 20:43:11 | 只看該作者
大大~另外請問使用quartus做波形模擬的時候,input有辦法設定輸入10進制浮點數嗎? EX: (22.25)
$ Y5 K4 j& T; p: s: @假如無法使用,這樣的話10進制的浮點數數值要如何輸入? 難道是輸入 A1= 22   A2=0.25  A1+A2=A  這樣訊號要怎麼分離@@~不知道大大有沒有聽的懂我的意思^^"
23#
 樓主| 發表於 2009-10-21 20:20:14 | 只看該作者
謝謝大大提點~又學到東西了...^^
5 V2 R; R1 Q: M: K
' ^% W* N; ?1 k6 t: b. Z+ D5 b另外想問做乘法運算' X0 ?6 Q( l9 T5 `6 ~/ ^
有效位數直接a*b跟  a+a 加b次  哪一種作法在硬體上速度較快呢?
" \9 I3 f$ G) X' m! o除法也是如此嗎?
22#
發表於 2009-10-21 12:08:33 | 只看該作者
42010000 (-32.25) 是IEEE754格式 也就是浮點數加法器的輸入A
2 I6 M0 a( N$ U' D/ P. F41b20000 (22.25) 是IEEE754格式 也就是浮點數加法器的輸入B3 Y* Y% w; W" w
這個浮點加法器內部輸入級 的功用就是偏移值調整後做有效位數相加
. x( g/ \- D: _  E6 H. A! h/ S6 ^
: h! m- j' f4 j- t. {; l" A& q" G. w所以 浮點加法器內部 運算級
9 z  q$ c" z5 J! E0 T! UA=1101_1111.1100- Y% V) y" t4 |. x* |) x3 \
B=0001_0110.0100
5 `0 d5 ?; `' I9 B2 z6 \' g4 X" ?  _$ XA+B=1111_0110.0000 = -(10)  b) s4 s. F4 H: `0 Q/ K2 a
7 R; _. O9 Y/ R! v1 X
再透過浮點數加法器輸出級 轉換為IEEE754格式( X! g4 X9 Z% V
輸出為C1200000: |, y8 \1 n4 X( k, [. S1 t/ B
! M0 U" v  R4 n2 {
[ 本帖最後由 masonchung 於 2009-11-2 11:16 AM 編輯 ]

評分

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

查看全部評分

21#
 樓主| 發表於 2009-10-19 20:05:06 | 只看該作者
mas大..但是如果轉成二補數42010000之後
4 E9 s4 W/ U/ L4 d/ L; j與41b20000 偏移值調整後42590000 做有效位數相加=425A0000 ←這樣吧@@?
' |  t4 v/ i; s# S並不等於C1200000 的說....
20#
發表於 2009-10-19 14:05:59 | 只看該作者
此二補數 1101_1111.1100 表示成IEEE754格式為42010000
/ u. ~7 |, X2 P' Z所以真正的浮點加法器輸入的MSB只要反相 就變成二補數
19#
發表於 2009-10-19 12:13:41 | 只看該作者
請問可以直接對ieee754格式的a跟b做四則運算嗎?
; O( S% A* {  ^0 [9 I* d(小數點對齊,實數相對位移後)a+b是否等於C2580000 ?/ r4 Z. _1 v- T: |2 H& t
不對0 M2 y5 c1 S; ]1 D# u
只有浮點數加法器和乘法器, y6 O" P% v- N( |" P
所以負數要用二補數
, D3 y/ p' n& U" D1 B4 DC2010000=1_10000100_0000001_0000_0000_0000_0000
# E5 @6 R( x" y二補數=1101_1111.1100+ T/ j  h. X4 ]) i. ?: d' |2 J5 Z
22.25=0001_0110.0100
& z3 w. J3 e* w6 G5 @6 b' R& m% {/ V+ b兩者相加即為答案-10, 透過浮點數加法器輸出為C1200000# C9 O( E1 E' d4 G4 C
  g& y$ ?. g$ x" Y. R
[ 本帖最後由 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%B82 g, H) n! Y5 w% v# V# O

+ z- w: D9 G' k, A6 V% sieee754 的 二進位浮點數格式在此 http://zh.wikipedia.org/wiki/IEEE_754
$ A$ z( ?# z9 }4 f; s
6 _, H2 s) {# {- \1 `- N2 z- o( o這兩種格式轉換可用電路實現
0 X3 x5 z# M# \9 F7 Y
1 J1 ?, D+ c: M; S1 P2 [% W- k然後再輸入到浮點數加法器運算
15#
 樓主| 發表於 2009-9-23 20:05:40 | 只看該作者
masonchung 大大~
' Q$ N9 |( H% d9 ]; C- F: c2 Q 4 G- Z# Z* Q' V. z& c, Y! B  d
如果要這樣做的話,我的A如果是十進制"2.5",並且可運算到小數點後第5位,二進制的輸入訊號是不是一定要是10.10000
( y) l7 \4 P! {( Y. R: l) I  [) M這樣有錯嗎?
7 I& E3 n7 m( |2 t, p& ~另外有一點有點疑問,這種作法是不是只能做無號數的浮點數運算?
# d3 P$ {' M0 G9 q, k-2.5的話,轉成二進制輸入到A會變什麼? 110.10000這樣?
14#
發表於 2009-9-22 22:21:46 | 只看該作者
可以實現
4 k0 b( O3 l6 I# g  ]請把了解規則 用電路可把非IEEE 754格式的浮點數(Fixed Point)轉成IEEE 754格式(Float Point)
- p$ f, [- T9 _. ^4 r然後就可以當成浮點數加法器的輸入7 f$ Y2 ]3 u% W

& H" n  T& w# E" {) o8 Z[ 本帖最後由 masonchung 於 2009-9-22 10:24 PM 編輯 ]
13#
 樓主| 發表於 2009-9-21 22:45:15 | 只看該作者
大大~
) J# g# w9 X  o5 _: F0 d+ K我知道你的意思了,不過我目前是需要把非IEEE 754格式的浮點數轉成IEEE 754格式.....
9 k7 G% l0 |/ ?這樣是不可能實現的嗎?^^"
12#
發表於 2009-9-21 20:22:38 | 只看該作者
您好
* ]3 G. c" x& R8 e
) E; `! I! U3 |5 v我的意思是你要自己算,將10.5或1先自己轉好成IEEE 754格式,
" ]1 [, k  d' e& J3 t然後在輸入到a,b

評分

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

查看全部評分

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

本版積分規則

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

GMT+8, 2024-6-14 11:12 AM , Processed in 0.651083 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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