Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

FPGA數值運算問題解答收集

  [複製鏈接]
跳轉到指定樓層
1#
發表於 2008-1-19 20:56:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
在使用FPGA後教了別人數次定點數小數表示法,發現一些狀況。但自己並不是走這一行的,所以一些比較深入的問題也無法回答。所以希望經由各位高手將其應用經驗以或是提供相關資料參考。
. \- R% K$ |- q7 ]0 l4 \能得到一些常用於FPGA的數值運算,如小數表示、乘除法、開根及平方、三角函數、亂數以及其他常用數值方法。& r- x1 b- A5 z  \6 L$ k; q" r+ Y
此篇文章屬拋磚引玉性質,可能對一些人來說這些知識是"幼稚班"等級,但對於像我這種由韌體兼職FPGA工程師是有很大的幫助。
# i0 x6 {5 I; J8 I* s+ _* r( ]  e, g格式大概為下列所列,各作者可以自行調整。
3 ]$ x- e& _1 Y4 s9 m主題:可以讓人了解的題目8 d- ~0 _/ Z4 Q- l8 \, x6 M
使用資源:計算時間、使用Gate count數目等6 A" W) G  h; g8 n4 n# u5 ]% U: S2 r
適用及限定範圍:說明常用及不合適的地方/ v* ^. @+ a* S0 \+ ?5 E2 j" m
參考資料來源:出處或參考書本5 i+ M7 q( N/ n8 z$ B& Y* }
原理說明及例子:就是文章開始的地方

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂1 踩 分享分享
2#
 樓主| 發表於 2008-1-19 20:57:07 | 只看該作者
主題:定點數小數表示法
3 w4 t9 U* I+ \9 Q0 F使用範圍:使用整數運算系統下之小數運算
1 m' X9 F: R  W參考資料:嵌入式系統構件 Jean J. Labrosse原著 黃文增譯 全華科技圖書出版
1 ]' G3 ~+ m7 L& S4 p- [原理說明:( |* }0 m) x: v5 s9 I
先復習一下計算機概論,有許多人都還給老師了。"^"表示次方運算+ i" Q; i- k4 U! W) K+ A
101.101b=2^3+2^0+2^-1+2^-3=5.625& |# m! W. v+ \1 p
現在是如何運用到FPGA上了。其實這個問題在之前的定點數DSP就遇過了,只是後來應用變少了。現在的FPGA又要用,捲土重來。8 p  B7 O% G2 i7 ~
我們知道FPGA對於整數系統的加減法是可以,但是遇到小數有些人就不知該如何。其實不難,只要在整數運算系統上加上小數點就行了。1 x: {0 K$ z/ Q, U
例如101.1b+101.1b=1011.0b,可以發現去掉小數點就和整數運算沒有兩樣。意指,只要將小數點那個位數對齊就可以了,使用移位對FPGA是很容易的。* I: q5 _: \8 W, M" i  c
但是整數運算使用為小數要標示小數位置,所以引入類似科學記號表示法。我們知道科學表示法為<尾數>E<指數>,例:3E3=3*10^3=3000,E表示10的次方。
, g4 f1 C+ |; p$ C定點數的表示法符號為S,表示法為<尾數>S<指數>,S表示為2的次方。舉例2.5S3=2.5*2^3=2.5*8=20。
( x- e; g) m' c6 g在基本數學運算下的處理為:
! }& O1 ]% D% v' c1.加減法
) X% I, y+ C4 c7 L, U# O處理方式是將小數位數對齊再做運算。例:2S3+3S2=20S2+3S2=23S2
* h2 x; Y$ f) `" u( x2.乘除法
6 P+ N, v, I, h, V( A/ c乘法時要將指數相加,尾數相乘。例:2S3*3S2=6S5  [, g" R0 k" I+ b0 D* B3 V8 C
除法時要將指數相減,尾數相除。例:2S3/3S2=0.66S1
6 H; l( q, S* T- R3.開根
. a1 W' x1 N) F- z  h# o" q主要是推導數學運算對指數的影響。# j- }, A: A6 R, p9 h
sqrt(aSb)=sqrt(a)*sqrt(2^b)=sqrt(a)*2^(b/2)
. c5 f; n% G5 e8 B. T/ a7 A4 E- x可以發現在開根時指數是除2,尾數直接開根。4 B  k7 q1 F  O
4.小數精度的選用9 G* o/ P! ?( u
為了符合精度,要如何選用指數範圍。我們使用定點數其精度取決於二進位小數取多少位。3 j1 b% T3 A/ h
例如若是使用S-4為其指數,每二數之間最小距離為2^-4=0.0625。此為S-4下的精度。
' {, d0 T% K, g對應十進位精度可以使用log(精度)/log(2)去計算要使用的指數。* K- |* L0 V( o# ^
使用精度0.1則S取用為log(0.1)/log(2)=-3.32,則使用S-4為其數值格式,就夠用了。
: K* v3 e! ]! h. \5.數值範圍
( s. s: X5 O% O5 |' }: [因為定點數是有限的位元組成,也是有限的數字集合及有限的可使用範圍,一但超過範圍的數也無法表示。也就是在運算上有可能會產生縊位問題,而造成非預期結果。
- f' _8 V# [6 z$ g4 b$ X所以只可以使用在變動不大的運算上。所以要考量使用的數值範圍及使用精度,這方面是定點數在使用前要考量好的。( R% L% Q* Y  U$ g5 c" y
定點數應用例:8 g* V1 Y& M  l; ?, o/ a% c
已知機器運算只能使用整數的狀況下,要使用小數,則是使用負的S指數,將尾數變成整數。尾數送入機器去運算;指數則是人工管理。+ N- Y! u- L4 O" I, b- G7 q: A
例:r=10.1求圓面積area,假設輸出入需求精度為0.1
' h" l$ n6 d! |. s! A解答:精度為0.1則,log(0.1)/log(2)=-3.32,故選用的S指數要到S-4可以達成。" G" s7 F3 x4 [7 r  e
pi=3.1416=50S-4(四捨五入)& x. U$ A7 y7 C7 S; l. p: O
r=10.1=162S-4(四捨五入)
/ _1 P3 b0 ]. Qarea=pi*r*r=50S-4*162S-4*162S-4=1312200S-12=5126S-4(四捨五入)8 {% V- }2 g8 S9 x7 o- q
換算為320.375
0 q7 ~0 ~) _) _8 [( l8 [$ V實際為320.47386659269480825557425152834: m1 l# n4 D6 `" U/ D
只有精準到整數,是因為所有數值精確度只有到0.1,誤差是0.05,運算來源有三個,故最大誤差為0.15,所以符合誤差範圍。  [' j2 b# K) g; y0 y
由算式可以得知機器只計算50*162*162,解讀結果需右移8位元含四捨五入,輸出結果為S-4格式。
4 w" x. u8 s" a$ ^  [/ m小技巧:
, F% d9 ]. j) z8 R定點數之計算可以使用小算盤來算。將小算盤設定為工程型。使用二進位顯示就可以將十進位轉成二進位。
" M: P# @$ ^: Z/ M2 @6 i5 x" S因二進位只能使用整數,所以要先轉成整數才可以顯示。. X0 P! O6 Z- E  v5 t. l( J; f; n1 X) \
例如:pi的取用。
" z" B2 b4 x; xpi取S-4結果為何?先取出pi=3.1415926535897932384626433832795
' c7 u: |/ G2 `) @* @7 ?' c$ L若我們使用精度為Qword則有64位元可以用,可以先乘上2^32,取用4相關的指數,可以在顯示時容易找到小數點位置。
* S, s  M6 u! T6 D3 Q; Y- B2 ]2 Q結果為13493037704.522018958598982648896* P0 H9 O( G4 I( A
直接按二進位,結果為11 0010 0100 0011 1111 0110 1010 1000 1000- D! t4 V+ T# o
找到小數點位置後可以發現是110010bS-48 T# y$ |6 o! P2 P
輸入110010按十進位可得50,我們可知pi=50S-4, W, u5 G+ }( P& B1 p! O& G  ]
另外pi常有人用201/64來表示,其實是使用S-6的格式,可以看上面的值找出pi=11001001bS-6=201S-6
) @4 T% B$ ?/ f9 J% R另外四捨五入在二進位很容易做,只要看取需要取用的小數精度下一位是否為1,若是則結果加一,不是則捨棄。
$ q& ?; C# _) N但會引發另一問題,剛好尾數LSB為多個1連續,則會進位。, U" }' t5 D; v3 |, C7 ~
以pi為例取S-10至S-15四捨五入後表示的數皆相同,都會和S-10完全一樣,精度沒有增加,pi皆為3217S-10,就算是寫成不同的S值,如12868S-12,仍等於3217S-10。
3#
 樓主| 發表於 2008-1-19 20:57:28 | 只看該作者
主題:使用加法做開根及平方計算
  U& W: G) a* h  @6 i4 {0 u% ^使用範圍:整數計算開根及平方,計算慢,gate count少
' \( r( h, ]* ~# N. R: i參考資料:MATH toolkit for Real-Time Programming by Jack W. Crenshaw CMP Books. p4 S2 B( `* U5 T6 [- S2 ?) J# x3 y- b
原理說明:0 _& \( t& Z7 M0 `
這是我們常用的公式(n+1)^2=n^2+2*n+1
% G' w/ U- X. V% B- b1 e改寫為(n+1)^2=n^2+n+(n+1),其中n^2在上次計算可得到,所以只剩n及(n+1)且只使用加法就可以進行。
* L2 F. L8 M# _8 u設計演算法為
5 A& x" D8 a* s- P; N: Ca=Count
# y0 R, U* s$ Q- lb=Last Sum= Sum# y; Q, c9 {4 @' v5 U
c=Sum=Last Sum+Count# \7 |; S1 l: n2 L  m3 _6 [8 C; c
d=Squart=Sum+Last Sum
( w0 H2 A( U7 `排表為
, E' O) b/ z$ e3 C) Z* U  Qa b c d1 p  @( B6 m8 N: t6 ^
0  0   0  0( o, |3 r' X+ }" r1 O4 M
1  0   1  1
0 J8 F3 F: X8 |; Q4 T. p% Y3 j 2  1   3  4
" a6 z4 g- w" m* P0 e# A 3  3   6  9
7 e7 i# Y1 C3 f/ |, Q& z& s/ C 4  6  10 16, Y/ A5 R% H6 e* b# B* E: V
5 10  15 25
1 s  P* h  v6 k2 _2 L' p若要取得平方,就將輸入做為計算的次數。計算停下來時,取出d就是答案。: M& J) Y5 D7 Y+ v$ V
要做開方,就將輸入和輸出比較,超過時停下來,取出a就是答案。4 u6 o' [2 }3 u1 {" @
若要使用到小數,則使用定點數方式可以得到。
4#
發表於 2008-3-20 10:04:05 | 只看該作者
It is good topic for me. thanks your sharing.
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-5 02:15 PM , Processed in 0.123015 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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