Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

FPGA數值運算問題解答收集

  [複製鏈接]
跳轉到指定樓層
1#
發表於 2008-1-19 20:56:44 | 顯示全部樓層 回帖獎勵 |倒序瀏覽 |閱讀模式
在使用FPGA後教了別人數次定點數小數表示法,發現一些狀況。但自己並不是走這一行的,所以一些比較深入的問題也無法回答。所以希望經由各位高手將其應用經驗以或是提供相關資料參考。
% J( G4 j  Z. D! E& o2 {/ G能得到一些常用於FPGA的數值運算,如小數表示、乘除法、開根及平方、三角函數、亂數以及其他常用數值方法。. t# F" B8 d. w9 ^  s8 O" B
此篇文章屬拋磚引玉性質,可能對一些人來說這些知識是"幼稚班"等級,但對於像我這種由韌體兼職FPGA工程師是有很大的幫助。: B% J  Q5 @; g" d' c& R
格式大概為下列所列,各作者可以自行調整。0 G& m) ~7 w/ M
主題:可以讓人了解的題目8 U8 {" `) h; q4 O: _4 `: D
使用資源:計算時間、使用Gate count數目等
2 m: v9 _0 p! L6 J5 T適用及限定範圍:說明常用及不合適的地方* _, R9 S% g/ M' ~5 x
參考資料來源:出處或參考書本1 J2 `# \1 F% w& E  }9 {- @
原理說明及例子:就是文章開始的地方

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂1 踩 分享分享
2#
 樓主| 發表於 2008-1-19 20:57:07 | 顯示全部樓層
主題:定點數小數表示法0 K3 G) }1 S+ P7 U
使用範圍:使用整數運算系統下之小數運算
. \& |( X% R0 \9 G3 V  Z2 R參考資料:嵌入式系統構件 Jean J. Labrosse原著 黃文增譯 全華科技圖書出版3 ^  f2 h% r6 @; M% T: Q
原理說明:3 ^8 {( N% ]! @) p
先復習一下計算機概論,有許多人都還給老師了。"^"表示次方運算- }$ m) @2 P/ o+ v) [8 g2 q/ T
101.101b=2^3+2^0+2^-1+2^-3=5.625" k% x  H8 }7 ?
現在是如何運用到FPGA上了。其實這個問題在之前的定點數DSP就遇過了,只是後來應用變少了。現在的FPGA又要用,捲土重來。1 i( H4 ^7 n$ k! I$ @  e! u0 Q1 I% e
我們知道FPGA對於整數系統的加減法是可以,但是遇到小數有些人就不知該如何。其實不難,只要在整數運算系統上加上小數點就行了。
( v- ^$ ^6 h, z例如101.1b+101.1b=1011.0b,可以發現去掉小數點就和整數運算沒有兩樣。意指,只要將小數點那個位數對齊就可以了,使用移位對FPGA是很容易的。
0 W/ z! C7 W; r8 G" S! S但是整數運算使用為小數要標示小數位置,所以引入類似科學記號表示法。我們知道科學表示法為<尾數>E<指數>,例:3E3=3*10^3=3000,E表示10的次方。6 m$ {) t* P! l' u
定點數的表示法符號為S,表示法為<尾數>S<指數>,S表示為2的次方。舉例2.5S3=2.5*2^3=2.5*8=20。
! E5 h! F( A) ?" e' Y0 }4 I在基本數學運算下的處理為:2 v' f/ |$ ?+ Q$ z3 m
1.加減法
7 R4 j' Z) {/ p5 [, m- i處理方式是將小數位數對齊再做運算。例:2S3+3S2=20S2+3S2=23S2
3 V- {0 h  ?0 w6 p9 D) \6 h2.乘除法
( [: {7 x9 Y: `# b4 a6 z乘法時要將指數相加,尾數相乘。例:2S3*3S2=6S51 u0 T' ^, G1 p7 ]
除法時要將指數相減,尾數相除。例:2S3/3S2=0.66S1
* x2 ~, A- N9 E6 j8 v3.開根
, v8 k! V2 ?- s- Q主要是推導數學運算對指數的影響。3 @; L5 W) t& [6 o
sqrt(aSb)=sqrt(a)*sqrt(2^b)=sqrt(a)*2^(b/2)
" k  A# p4 e/ ?! T! Q, Y# ~/ q可以發現在開根時指數是除2,尾數直接開根。
1 G5 I( e' \; t! j/ j( |8 x$ n4.小數精度的選用
" Z4 B5 h* ]; R4 t7 V2 i' [為了符合精度,要如何選用指數範圍。我們使用定點數其精度取決於二進位小數取多少位。
4 j' E1 F% j2 F7 M, q  }7 C例如若是使用S-4為其指數,每二數之間最小距離為2^-4=0.0625。此為S-4下的精度。' p) ~. o/ Y* H4 U. a
對應十進位精度可以使用log(精度)/log(2)去計算要使用的指數。8 n( c' A, l6 S. @( o5 p
使用精度0.1則S取用為log(0.1)/log(2)=-3.32,則使用S-4為其數值格式,就夠用了。" Q, f3 |6 h2 [4 n$ J2 N2 w
5.數值範圍! ]7 o' O6 x! |/ {9 t, A) U
因為定點數是有限的位元組成,也是有限的數字集合及有限的可使用範圍,一但超過範圍的數也無法表示。也就是在運算上有可能會產生縊位問題,而造成非預期結果。7 ~/ B  |8 V  ~/ h
所以只可以使用在變動不大的運算上。所以要考量使用的數值範圍及使用精度,這方面是定點數在使用前要考量好的。! f9 M, _* E  w* o; |/ [/ V
定點數應用例:
' i/ A0 w3 U8 i( p' N* |6 h已知機器運算只能使用整數的狀況下,要使用小數,則是使用負的S指數,將尾數變成整數。尾數送入機器去運算;指數則是人工管理。
1 R, X: i+ l/ t例:r=10.1求圓面積area,假設輸出入需求精度為0.1$ G$ P0 Y# T! o* p
解答:精度為0.1則,log(0.1)/log(2)=-3.32,故選用的S指數要到S-4可以達成。
/ C% H# {! C0 Z( Xpi=3.1416=50S-4(四捨五入)
& i9 \5 A+ I, \. n+ M! t1 a* i* u5 or=10.1=162S-4(四捨五入)) e& j; ~) r+ a, x
area=pi*r*r=50S-4*162S-4*162S-4=1312200S-12=5126S-4(四捨五入)
% A. e/ A$ q( k* H9 Y, k' B換算為320.375  M' r4 D# F- Z/ n* J
實際為320.47386659269480825557425152834
" x, }3 s" m% F. m  `0 T$ o; g$ j' D只有精準到整數,是因為所有數值精確度只有到0.1,誤差是0.05,運算來源有三個,故最大誤差為0.15,所以符合誤差範圍。7 U; b4 P: [" q3 [
由算式可以得知機器只計算50*162*162,解讀結果需右移8位元含四捨五入,輸出結果為S-4格式。
" k! J: G! h! x; J  G6 m# B小技巧:
, G! h: T  i0 R5 V: {定點數之計算可以使用小算盤來算。將小算盤設定為工程型。使用二進位顯示就可以將十進位轉成二進位。. R. V/ u  ^9 X$ V' F
因二進位只能使用整數,所以要先轉成整數才可以顯示。2 i. i5 U8 g. g1 \
例如:pi的取用。
7 x. B; z( N$ Tpi取S-4結果為何?先取出pi=3.14159265358979323846264338327952 @; P! D: i- d% ^2 d4 I4 E- o
若我們使用精度為Qword則有64位元可以用,可以先乘上2^32,取用4相關的指數,可以在顯示時容易找到小數點位置。
$ e" J$ q1 W2 n* a7 B結果為13493037704.522018958598982648896
7 Z$ d: D0 {$ J, Y3 b4 r/ A直接按二進位,結果為11 0010 0100 0011 1111 0110 1010 1000 1000
+ y6 }5 }' y+ D+ H+ ^; K7 F找到小數點位置後可以發現是110010bS-4
3 `# ~2 j5 a$ g8 V* g" O' ?2 |輸入110010按十進位可得50,我們可知pi=50S-4
0 G* Y4 D$ ~/ ~, Z8 q7 G2 V8 i7 O另外pi常有人用201/64來表示,其實是使用S-6的格式,可以看上面的值找出pi=11001001bS-6=201S-6
% C: c, e; H. M0 _. O( {' a+ o7 w- ]另外四捨五入在二進位很容易做,只要看取需要取用的小數精度下一位是否為1,若是則結果加一,不是則捨棄。
* G+ K2 h9 ^0 y& }4 U0 d但會引發另一問題,剛好尾數LSB為多個1連續,則會進位。0 l+ Z" o; j6 K5 d
以pi為例取S-10至S-15四捨五入後表示的數皆相同,都會和S-10完全一樣,精度沒有增加,pi皆為3217S-10,就算是寫成不同的S值,如12868S-12,仍等於3217S-10。
3#
 樓主| 發表於 2008-1-19 20:57:28 | 顯示全部樓層
主題:使用加法做開根及平方計算
) C: b- C! |% a, |3 m使用範圍:整數計算開根及平方,計算慢,gate count少, @4 _1 t: v* E* }+ D
參考資料:MATH toolkit for Real-Time Programming by Jack W. Crenshaw CMP Books
' a$ r4 V/ T& f- Q# E原理說明:
# J5 W! ]* e9 x6 J這是我們常用的公式(n+1)^2=n^2+2*n+19 V$ q! E% e0 d9 D6 z3 `+ ^4 Z) f) ~
改寫為(n+1)^2=n^2+n+(n+1),其中n^2在上次計算可得到,所以只剩n及(n+1)且只使用加法就可以進行。, E) E# t$ e  H# t) t' T
設計演算法為6 W2 e' L" Z6 f1 Z  f
a=Count' u9 k, z8 M0 A
b=Last Sum= Sum
! L! j% g' a- e( Vc=Sum=Last Sum+Count! ~. T2 g, c# E& H% N1 k& T0 y# j' }
d=Squart=Sum+Last Sum
0 L6 t) \% u  e) w排表為3 Y- u2 {) l4 y1 p; ?4 H. n" \2 L
a b c d
; I; _& ^4 R* F2 w4 b% F+ Q 0  0   0  0
: Z, |( n3 C& \- l 1  0   1  12 S) k9 x( i+ a# i- m  f# h" {. z
2  1   3  4
5 K1 j/ Y) \) _ 3  3   6  9; y5 ?& P& P) K6 h
4  6  10 16; f; E) {+ y" ~. z* K
5 10  15 25
; `& X8 F% d5 `( Z( ~5 O/ r若要取得平方,就將輸入做為計算的次數。計算停下來時,取出d就是答案。
, l8 l6 Y% q* O; s3 W5 a% i要做開方,就將輸入和輸出比較,超過時停下來,取出a就是答案。+ j8 d/ G7 W# j" I: w/ l
若要使用到小數,則使用定點數方式可以得到。
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-11-1 08:38 AM , Processed in 0.170010 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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