Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

FPGA數值運算問題解答收集

  [複製鏈接]
跳轉到指定樓層
1#
發表於 2008-1-19 20:56:44 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
在使用FPGA後教了別人數次定點數小數表示法,發現一些狀況。但自己並不是走這一行的,所以一些比較深入的問題也無法回答。所以希望經由各位高手將其應用經驗以或是提供相關資料參考。
% a! S! h9 n, c4 O% d; e; A7 n能得到一些常用於FPGA的數值運算,如小數表示、乘除法、開根及平方、三角函數、亂數以及其他常用數值方法。
( m9 o. v/ c  M9 ~6 ~$ d0 W此篇文章屬拋磚引玉性質,可能對一些人來說這些知識是"幼稚班"等級,但對於像我這種由韌體兼職FPGA工程師是有很大的幫助。
" G# b1 u+ E; q( V1 ?' j格式大概為下列所列,各作者可以自行調整。
1 Q& |5 A0 I5 A# J8 ?! `( Q主題:可以讓人了解的題目
( `5 i* Z% r0 }$ j  f  [/ Q7 ?7 V使用資源:計算時間、使用Gate count數目等
$ X& H5 {0 c9 T8 C% T, Q$ S- L適用及限定範圍:說明常用及不合適的地方
/ ~2 a6 q" u. D, B7 d9 A參考資料來源:出處或參考書本
6 U$ `, i2 h* ?, v原理說明及例子:就是文章開始的地方

評分

參與人數 1Chipcoin +5 收起 理由
chip123 + 5 感謝 拋磚引玉!誰來 仙人指路?

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂1 踩 分享分享
4#
發表於 2008-3-20 10:04:05 | 只看該作者
It is good topic for me. thanks your sharing.
3#
 樓主| 發表於 2008-1-19 20:57:28 | 只看該作者
主題:使用加法做開根及平方計算6 b7 w# o# s. v! |( p: _
使用範圍:整數計算開根及平方,計算慢,gate count少  c+ f) b1 F2 T4 o( [, S, `+ e+ E) [/ j
參考資料:MATH toolkit for Real-Time Programming by Jack W. Crenshaw CMP Books. |& c7 `$ @' X2 j2 ]( W
原理說明:: A2 B: I9 u) g4 k4 w7 o3 i) h5 t0 v
這是我們常用的公式(n+1)^2=n^2+2*n+1! }9 [8 F, \0 I% w
改寫為(n+1)^2=n^2+n+(n+1),其中n^2在上次計算可得到,所以只剩n及(n+1)且只使用加法就可以進行。% S$ h" m$ C! F1 I! A' Z
設計演算法為4 r6 _; p7 z, _( F6 m; ^. U+ S
a=Count7 ^4 B3 g- c8 V$ Q
b=Last Sum= Sum/ U1 W' C8 j9 ~# m
c=Sum=Last Sum+Count1 F% b, w. e& ?) @2 I- ^
d=Squart=Sum+Last Sum
. V9 G9 v2 z7 Q0 d排表為
  L4 _9 K4 i0 j$ M7 Pa b c d
. k; c7 }5 U; j% K2 _9 f 0  0   0  0
9 E, J$ U7 N4 V/ B6 h 1  0   1  1
0 t8 c8 f* F& [5 { 2  1   3  4
/ [) s6 Q' u8 O: ^$ n, _: k+ R, D 3  3   6  9
& l' e- w9 G, g 4  6  10 168 U5 A* \' o& n( }4 `
5 10  15 25; F7 w+ G! b' s( s3 g
若要取得平方,就將輸入做為計算的次數。計算停下來時,取出d就是答案。
# q5 ]  L: H4 b# O( y  K要做開方,就將輸入和輸出比較,超過時停下來,取出a就是答案。
) @2 b% c4 f) D( N! W4 O5 x5 t若要使用到小數,則使用定點數方式可以得到。
2#
 樓主| 發表於 2008-1-19 20:57:07 | 只看該作者
主題:定點數小數表示法7 [! R# H- Q7 ?" H7 H3 E# X
使用範圍:使用整數運算系統下之小數運算7 z& ]/ S. B1 }
參考資料:嵌入式系統構件 Jean J. Labrosse原著 黃文增譯 全華科技圖書出版
. K' p% F! m) f# M0 k- a3 l0 h原理說明:
. P  s7 c7 ?# ]- k( |: M先復習一下計算機概論,有許多人都還給老師了。"^"表示次方運算- \1 U$ c# f0 E  R# |# P" U* u
101.101b=2^3+2^0+2^-1+2^-3=5.625. y8 x& d$ I& L) z) v4 j/ ?9 v
現在是如何運用到FPGA上了。其實這個問題在之前的定點數DSP就遇過了,只是後來應用變少了。現在的FPGA又要用,捲土重來。9 v# L8 n8 }. s: V; ~% x
我們知道FPGA對於整數系統的加減法是可以,但是遇到小數有些人就不知該如何。其實不難,只要在整數運算系統上加上小數點就行了。
4 x' {1 I$ R7 [3 i" Y( |: J  A例如101.1b+101.1b=1011.0b,可以發現去掉小數點就和整數運算沒有兩樣。意指,只要將小數點那個位數對齊就可以了,使用移位對FPGA是很容易的。
" M% S, r3 w$ q0 }) \+ `  c但是整數運算使用為小數要標示小數位置,所以引入類似科學記號表示法。我們知道科學表示法為<尾數>E<指數>,例:3E3=3*10^3=3000,E表示10的次方。
! D( H( s" H7 g% E* n+ e定點數的表示法符號為S,表示法為<尾數>S<指數>,S表示為2的次方。舉例2.5S3=2.5*2^3=2.5*8=20。
7 ?& N" x: w# y# [+ Z# r" N, T  f* f$ v在基本數學運算下的處理為:$ l% A8 u& d# w. m6 Z+ _
1.加減法& }1 y/ S; q! j8 b* [
處理方式是將小數位數對齊再做運算。例:2S3+3S2=20S2+3S2=23S2+ z0 c( y: m* x& w8 `
2.乘除法
, a0 m; A  |: Q( b6 W% ]6 q; b" S乘法時要將指數相加,尾數相乘。例:2S3*3S2=6S5
: O$ u' G. y& H) Z除法時要將指數相減,尾數相除。例:2S3/3S2=0.66S16 @/ [7 A8 [- {5 e5 ~8 x  ~
3.開根
! f" V6 A0 r: C! S( J5 Z主要是推導數學運算對指數的影響。/ t  Q( I8 z5 Q+ L1 F
sqrt(aSb)=sqrt(a)*sqrt(2^b)=sqrt(a)*2^(b/2)8 d" Q; K" t  o& M
可以發現在開根時指數是除2,尾數直接開根。" ~. G- w1 ~6 U4 s8 e) x# o8 v
4.小數精度的選用
( o/ s& S- N6 {9 N為了符合精度,要如何選用指數範圍。我們使用定點數其精度取決於二進位小數取多少位。" y7 l4 T1 z) C6 A! r* N, [' U
例如若是使用S-4為其指數,每二數之間最小距離為2^-4=0.0625。此為S-4下的精度。
5 l+ i, ]( M# H; e對應十進位精度可以使用log(精度)/log(2)去計算要使用的指數。( w0 h2 A: A* k1 P1 E
使用精度0.1則S取用為log(0.1)/log(2)=-3.32,則使用S-4為其數值格式,就夠用了。7 u1 p) G9 X' u$ l& e" D6 ]% J. K
5.數值範圍& C+ A; M4 l& U0 }, i
因為定點數是有限的位元組成,也是有限的數字集合及有限的可使用範圍,一但超過範圍的數也無法表示。也就是在運算上有可能會產生縊位問題,而造成非預期結果。
0 }, h2 {0 u- x: B3 A$ ]所以只可以使用在變動不大的運算上。所以要考量使用的數值範圍及使用精度,這方面是定點數在使用前要考量好的。
1 o1 ~0 x8 m" h, Y, B/ a- {定點數應用例:# d! M# v7 j" V/ M3 E' c- Q
已知機器運算只能使用整數的狀況下,要使用小數,則是使用負的S指數,將尾數變成整數。尾數送入機器去運算;指數則是人工管理。
; f! d0 J( d) ]例:r=10.1求圓面積area,假設輸出入需求精度為0.1$ ~9 D: M* y/ t- X" w, i
解答:精度為0.1則,log(0.1)/log(2)=-3.32,故選用的S指數要到S-4可以達成。" Z. d3 l, G. n) h8 E( [/ ]
pi=3.1416=50S-4(四捨五入)
0 e, k. W1 k& K+ O4 sr=10.1=162S-4(四捨五入)- H' w5 @1 Y4 T/ z3 ^
area=pi*r*r=50S-4*162S-4*162S-4=1312200S-12=5126S-4(四捨五入)$ \) n8 l; ~! H/ R! w/ F
換算為320.3756 p5 }0 E& B, w7 O  ^- o
實際為320.47386659269480825557425152834( Q/ X/ X3 c! j0 P8 j+ R2 I5 q9 p
只有精準到整數,是因為所有數值精確度只有到0.1,誤差是0.05,運算來源有三個,故最大誤差為0.15,所以符合誤差範圍。
4 U  L: s4 y! @$ f$ w由算式可以得知機器只計算50*162*162,解讀結果需右移8位元含四捨五入,輸出結果為S-4格式。0 D  n/ \6 ^7 e& h3 T3 V7 V
小技巧:. N) C, s8 C) q! K+ L8 a+ b
定點數之計算可以使用小算盤來算。將小算盤設定為工程型。使用二進位顯示就可以將十進位轉成二進位。' J! H1 f; V- V* [0 [# \) u
因二進位只能使用整數,所以要先轉成整數才可以顯示。
+ p( N' E2 h0 a例如:pi的取用。2 V% ?% f3 q4 j+ p1 m+ R
pi取S-4結果為何?先取出pi=3.1415926535897932384626433832795
7 ^  c# l  o/ D& t. U若我們使用精度為Qword則有64位元可以用,可以先乘上2^32,取用4相關的指數,可以在顯示時容易找到小數點位置。5 ]3 Z: I( C: B4 U' R  U& f
結果為13493037704.522018958598982648896
. M/ Z4 h) p" s' {直接按二進位,結果為11 0010 0100 0011 1111 0110 1010 1000 1000+ {8 l$ I# P$ F+ _, @( _
找到小數點位置後可以發現是110010bS-4
- n* \( Z" T" e8 T3 S) D( e3 b輸入110010按十進位可得50,我們可知pi=50S-4: k! K$ i9 @7 K( X4 Y: B  }
另外pi常有人用201/64來表示,其實是使用S-6的格式,可以看上面的值找出pi=11001001bS-6=201S-6- u6 H! ^) k. a/ N: V9 C9 z
另外四捨五入在二進位很容易做,只要看取需要取用的小數精度下一位是否為1,若是則結果加一,不是則捨棄。  N3 S3 Y! L  m0 D9 Q
但會引發另一問題,剛好尾數LSB為多個1連續,則會進位。7 J( R. C; |* Q* S% z$ p$ _: }/ Q
以pi為例取S-10至S-15四捨五入後表示的數皆相同,都會和S-10完全一樣,精度沒有增加,pi皆為3217S-10,就算是寫成不同的S值,如12868S-12,仍等於3217S-10。
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2025-1-20 01:51 AM , Processed in 0.156000 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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