Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

FPGA數值運算問題解答收集

  [複製鏈接]
跳轉到指定樓層
1#
發表於 2008-1-19 20:56:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
在使用FPGA後教了別人數次定點數小數表示法,發現一些狀況。但自己並不是走這一行的,所以一些比較深入的問題也無法回答。所以希望經由各位高手將其應用經驗以或是提供相關資料參考。
( {: ^, m2 R' Y! {; S3 Q3 R能得到一些常用於FPGA的數值運算,如小數表示、乘除法、開根及平方、三角函數、亂數以及其他常用數值方法。1 k& X) E& y  ]8 U
此篇文章屬拋磚引玉性質,可能對一些人來說這些知識是"幼稚班"等級,但對於像我這種由韌體兼職FPGA工程師是有很大的幫助。* A: v8 o0 T  n1 V1 }1 I
格式大概為下列所列,各作者可以自行調整。* q. a$ O8 T& U
主題:可以讓人了解的題目
/ q# g1 S, k* F* G& W% H$ m使用資源:計算時間、使用Gate count數目等5 s  Y  X: d% _) }
適用及限定範圍:說明常用及不合適的地方
) ]# }* I, T  |6 @$ ?! T4 `. A# Y參考資料來源:出處或參考書本
6 f' ~1 s2 ^' ?原理說明及例子:就是文章開始的地方

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂1 踩 分享分享
2#
 樓主| 發表於 2008-1-19 20:57:07 | 只看該作者
主題:定點數小數表示法
4 ^1 E4 X& B# z, V& P使用範圍:使用整數運算系統下之小數運算
" m  J  t& h" h7 K參考資料:嵌入式系統構件 Jean J. Labrosse原著 黃文增譯 全華科技圖書出版
* ^" L/ b: |, J5 x+ D+ @原理說明:: |, ]. V. Y& N- b! A. b  ~, ^
先復習一下計算機概論,有許多人都還給老師了。"^"表示次方運算; x+ t6 M' Y+ b& u' l' u: r# c! v
101.101b=2^3+2^0+2^-1+2^-3=5.6252 ]$ b1 g. C8 D/ ]# c, M
現在是如何運用到FPGA上了。其實這個問題在之前的定點數DSP就遇過了,只是後來應用變少了。現在的FPGA又要用,捲土重來。4 j/ m4 q5 H/ K; a6 c$ k
我們知道FPGA對於整數系統的加減法是可以,但是遇到小數有些人就不知該如何。其實不難,只要在整數運算系統上加上小數點就行了。
" R0 s; b+ x" W: Y6 O例如101.1b+101.1b=1011.0b,可以發現去掉小數點就和整數運算沒有兩樣。意指,只要將小數點那個位數對齊就可以了,使用移位對FPGA是很容易的。* E5 Y& Y& k) b, e. U
但是整數運算使用為小數要標示小數位置,所以引入類似科學記號表示法。我們知道科學表示法為<尾數>E<指數>,例:3E3=3*10^3=3000,E表示10的次方。' e" @" Z6 z8 C* ^# V
定點數的表示法符號為S,表示法為<尾數>S<指數>,S表示為2的次方。舉例2.5S3=2.5*2^3=2.5*8=20。
9 X) C6 Z3 h& j5 ^! ?在基本數學運算下的處理為:
4 s5 F6 V% A: G) y3 c0 b, |% ~1.加減法
: {' N- C: y, ], i& J1 Q6 Z4 V7 m處理方式是將小數位數對齊再做運算。例:2S3+3S2=20S2+3S2=23S2" z8 R, u# ^+ n' C, d3 X- Y
2.乘除法5 i& J1 B1 W2 ]9 k& l) m2 V
乘法時要將指數相加,尾數相乘。例:2S3*3S2=6S5
. {. Q9 W3 ~+ B. n1 k- s, [- r除法時要將指數相減,尾數相除。例:2S3/3S2=0.66S1
( @, A# n5 w% Q3.開根& w: E/ [( V" L
主要是推導數學運算對指數的影響。6 R# g" Z4 I2 d; v
sqrt(aSb)=sqrt(a)*sqrt(2^b)=sqrt(a)*2^(b/2)
1 H4 A; g: S* Q5 G! u) H可以發現在開根時指數是除2,尾數直接開根。8 d0 [) F; x/ p- k% Y
4.小數精度的選用
9 Y* S/ v5 p7 ^) f& C4 Q, f+ n- A( y為了符合精度,要如何選用指數範圍。我們使用定點數其精度取決於二進位小數取多少位。
6 V2 U* m3 ^: l& m9 J8 A例如若是使用S-4為其指數,每二數之間最小距離為2^-4=0.0625。此為S-4下的精度。# R+ I$ e0 _! j8 D3 X# x
對應十進位精度可以使用log(精度)/log(2)去計算要使用的指數。
4 l/ f$ l; a2 \. C$ T使用精度0.1則S取用為log(0.1)/log(2)=-3.32,則使用S-4為其數值格式,就夠用了。9 K! `3 Y+ W7 V! q! G
5.數值範圍7 @- L8 @; X$ ?$ |8 H
因為定點數是有限的位元組成,也是有限的數字集合及有限的可使用範圍,一但超過範圍的數也無法表示。也就是在運算上有可能會產生縊位問題,而造成非預期結果。, q, I2 |# u, ^$ v2 j8 B
所以只可以使用在變動不大的運算上。所以要考量使用的數值範圍及使用精度,這方面是定點數在使用前要考量好的。
7 B# h) F" |7 ^$ m, S定點數應用例:, ^4 _& `' M; I, |( y
已知機器運算只能使用整數的狀況下,要使用小數,則是使用負的S指數,將尾數變成整數。尾數送入機器去運算;指數則是人工管理。$ J9 t1 l3 A; n# J  s( Z
例:r=10.1求圓面積area,假設輸出入需求精度為0.11 ^6 o1 {/ ~- d) f3 O4 b) H
解答:精度為0.1則,log(0.1)/log(2)=-3.32,故選用的S指數要到S-4可以達成。: |7 V  ~' d& m$ Q3 t+ d
pi=3.1416=50S-4(四捨五入)
; b) a6 {7 g. o( h% _r=10.1=162S-4(四捨五入)
3 d( j4 }4 _0 Z# F, h9 harea=pi*r*r=50S-4*162S-4*162S-4=1312200S-12=5126S-4(四捨五入)8 o' _3 m1 n0 L( x
換算為320.375; f( x& `7 ^: \9 v# w
實際為320.47386659269480825557425152834
  D3 i( I; y( E只有精準到整數,是因為所有數值精確度只有到0.1,誤差是0.05,運算來源有三個,故最大誤差為0.15,所以符合誤差範圍。
0 w7 a( E& _. H5 T+ G+ G1 Q由算式可以得知機器只計算50*162*162,解讀結果需右移8位元含四捨五入,輸出結果為S-4格式。' l! c# S( x/ Q4 b
小技巧:
& A6 x* ~4 d2 E3 |* b3 u定點數之計算可以使用小算盤來算。將小算盤設定為工程型。使用二進位顯示就可以將十進位轉成二進位。% _9 A' {* R4 r2 Z
因二進位只能使用整數,所以要先轉成整數才可以顯示。
5 @/ \# h' L: o, ~: b例如:pi的取用。
0 B# X" s' a: j/ Ppi取S-4結果為何?先取出pi=3.1415926535897932384626433832795
: H4 m! L, d5 o5 G0 `, p若我們使用精度為Qword則有64位元可以用,可以先乘上2^32,取用4相關的指數,可以在顯示時容易找到小數點位置。. c, O: I& a' b5 D# g: _/ L, a4 }
結果為13493037704.522018958598982648896
+ e0 q) i3 E2 X" C4 {5 _直接按二進位,結果為11 0010 0100 0011 1111 0110 1010 1000 1000
, o% Z! X, ~2 Z/ H! Z找到小數點位置後可以發現是110010bS-4
# l, T. o. s# x2 w輸入110010按十進位可得50,我們可知pi=50S-4
! d/ k3 g$ T& a1 i另外pi常有人用201/64來表示,其實是使用S-6的格式,可以看上面的值找出pi=11001001bS-6=201S-66 P( \0 G* `- Q" l- b
另外四捨五入在二進位很容易做,只要看取需要取用的小數精度下一位是否為1,若是則結果加一,不是則捨棄。
7 U5 c" i7 j9 o6 T但會引發另一問題,剛好尾數LSB為多個1連續,則會進位。  c7 j+ e( {) ?8 x5 ^
以pi為例取S-10至S-15四捨五入後表示的數皆相同,都會和S-10完全一樣,精度沒有增加,pi皆為3217S-10,就算是寫成不同的S值,如12868S-12,仍等於3217S-10。
3#
 樓主| 發表於 2008-1-19 20:57:28 | 只看該作者
主題:使用加法做開根及平方計算0 U/ k" ^! s: i3 A, ]  E0 }
使用範圍:整數計算開根及平方,計算慢,gate count少1 b- P0 `+ ~! A! \: m  a3 B2 i
參考資料:MATH toolkit for Real-Time Programming by Jack W. Crenshaw CMP Books. J- o6 F, X5 K% G  r! |6 H: S
原理說明:
% F' [3 c* @6 u0 p7 t- @9 c這是我們常用的公式(n+1)^2=n^2+2*n+1* s  M& L% z. ^3 |) Q* W( Q! [. g
改寫為(n+1)^2=n^2+n+(n+1),其中n^2在上次計算可得到,所以只剩n及(n+1)且只使用加法就可以進行。
. l$ K; s/ ?( i設計演算法為) H+ F: V  a2 i6 o' I$ T
a=Count
( T( R, E  i7 c4 K. h$ Ib=Last Sum= Sum
* V: r/ I/ n8 m- Tc=Sum=Last Sum+Count
6 x/ T& R* X% P5 r7 Z; J4 [d=Squart=Sum+Last Sum! u( Q4 @+ D; \  c4 _
排表為6 ?7 b0 v% t, ?9 U
a b c d
! i+ X, g% i; r 0  0   0  0
$ h9 E3 [  A) [0 A5 m 1  0   1  1" ~8 w8 r3 ]: o; K7 N, a4 @4 e9 G
2  1   3  4+ U' p8 r' Z- C6 w  b# q1 r8 n: E+ i; J
3  3   6  9
9 q: y' J5 r. { 4  6  10 16) f4 b* @* B% e
5 10  15 25
/ N# O% L% T% z, K% N2 E5 q若要取得平方,就將輸入做為計算的次數。計算停下來時,取出d就是答案。5 y7 j% x; R" ]+ Z" ?
要做開方,就將輸入和輸出比較,超過時停下來,取出a就是答案。" a% u3 U2 U' F8 {+ L+ `7 W
若要使用到小數,則使用定點數方式可以得到。
4#
發表於 2008-3-20 10:04:05 | 只看該作者
It is good topic for me. thanks your sharing.
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2025-1-20 04:35 AM , Processed in 0.156001 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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