Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

FPGA數值運算問題解答收集

  [複製鏈接]
跳轉到指定樓層
1#
發表於 2008-1-19 20:56:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
在使用FPGA後教了別人數次定點數小數表示法,發現一些狀況。但自己並不是走這一行的,所以一些比較深入的問題也無法回答。所以希望經由各位高手將其應用經驗以或是提供相關資料參考。
+ R% h' d4 t) H+ v# @: N能得到一些常用於FPGA的數值運算,如小數表示、乘除法、開根及平方、三角函數、亂數以及其他常用數值方法。  n$ \7 \$ s7 C$ v6 V% V2 Q
此篇文章屬拋磚引玉性質,可能對一些人來說這些知識是"幼稚班"等級,但對於像我這種由韌體兼職FPGA工程師是有很大的幫助。
( t7 j( {, m: x0 S+ W格式大概為下列所列,各作者可以自行調整。
9 H* t! S: k( U4 f  V7 O6 `主題:可以讓人了解的題目
  F/ j% v- A5 C使用資源:計算時間、使用Gate count數目等# v4 O9 X; c  ]9 i+ I; W
適用及限定範圍:說明常用及不合適的地方  d! n4 t: Q' c9 G
參考資料來源:出處或參考書本
* d4 F' m0 Z" ]8 m3 E原理說明及例子:就是文章開始的地方

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂1 踩 分享分享
2#
 樓主| 發表於 2008-1-19 20:57:07 | 只看該作者
主題:定點數小數表示法
. C# P. w4 q1 y& \, R4 O2 W使用範圍:使用整數運算系統下之小數運算. Y% w/ K2 r; q; U, [  Y* Q) I
參考資料:嵌入式系統構件 Jean J. Labrosse原著 黃文增譯 全華科技圖書出版
6 I# ^  O7 R8 b4 z0 D原理說明:
+ }0 s7 o* C4 T. \先復習一下計算機概論,有許多人都還給老師了。"^"表示次方運算5 |# g' w% z& a+ B& D' n
101.101b=2^3+2^0+2^-1+2^-3=5.6256 c* P1 q/ ?; C* j' g* @! U( L
現在是如何運用到FPGA上了。其實這個問題在之前的定點數DSP就遇過了,只是後來應用變少了。現在的FPGA又要用,捲土重來。
7 B& Y3 V6 m  O我們知道FPGA對於整數系統的加減法是可以,但是遇到小數有些人就不知該如何。其實不難,只要在整數運算系統上加上小數點就行了。( i' J2 i( k$ Q9 _  t$ x6 @. x
例如101.1b+101.1b=1011.0b,可以發現去掉小數點就和整數運算沒有兩樣。意指,只要將小數點那個位數對齊就可以了,使用移位對FPGA是很容易的。' H, w* z4 J$ i% P1 ^8 n
但是整數運算使用為小數要標示小數位置,所以引入類似科學記號表示法。我們知道科學表示法為<尾數>E<指數>,例:3E3=3*10^3=3000,E表示10的次方。' H! M. f: _/ A$ h
定點數的表示法符號為S,表示法為<尾數>S<指數>,S表示為2的次方。舉例2.5S3=2.5*2^3=2.5*8=20。) M" S/ S) {2 W6 q
在基本數學運算下的處理為:
" Q$ F3 c& y# t, Z: S1.加減法4 u/ P+ J6 E. l9 N7 u
處理方式是將小數位數對齊再做運算。例:2S3+3S2=20S2+3S2=23S2
/ m+ B" f5 g2 H0 R  v, S2.乘除法
+ @: ~" ]" m% c. n# b& c乘法時要將指數相加,尾數相乘。例:2S3*3S2=6S53 q/ s8 c6 x, b+ T+ V
除法時要將指數相減,尾數相除。例:2S3/3S2=0.66S1
6 J6 D2 G% U# K) b5 _3.開根
7 J5 q8 b* i) ]$ @) i( G  s. ?主要是推導數學運算對指數的影響。
, N1 r0 o8 l" A; ksqrt(aSb)=sqrt(a)*sqrt(2^b)=sqrt(a)*2^(b/2)
5 X& M# H" r0 f$ I: D可以發現在開根時指數是除2,尾數直接開根。( h7 w! `; h* c
4.小數精度的選用
4 A1 S: p$ R, t& t0 N4 K為了符合精度,要如何選用指數範圍。我們使用定點數其精度取決於二進位小數取多少位。
4 @# S0 O/ W- j/ `8 D例如若是使用S-4為其指數,每二數之間最小距離為2^-4=0.0625。此為S-4下的精度。
1 r1 T  g5 B, ?- U對應十進位精度可以使用log(精度)/log(2)去計算要使用的指數。
! D# |2 b( S% X+ O  m& D4 `( h使用精度0.1則S取用為log(0.1)/log(2)=-3.32,則使用S-4為其數值格式,就夠用了。
! _0 `- ?) z- }! r# Q5.數值範圍" ~9 F. j( i  ?# s
因為定點數是有限的位元組成,也是有限的數字集合及有限的可使用範圍,一但超過範圍的數也無法表示。也就是在運算上有可能會產生縊位問題,而造成非預期結果。
- D9 q, t2 o1 b所以只可以使用在變動不大的運算上。所以要考量使用的數值範圍及使用精度,這方面是定點數在使用前要考量好的。
+ K$ ^8 G( x8 M/ h% _定點數應用例:
9 ^/ f7 s' v, n9 [7 t0 Z已知機器運算只能使用整數的狀況下,要使用小數,則是使用負的S指數,將尾數變成整數。尾數送入機器去運算;指數則是人工管理。
+ u) G2 \9 g$ M9 X. u5 X1 r例:r=10.1求圓面積area,假設輸出入需求精度為0.1; l( H$ R( h# ?) U
解答:精度為0.1則,log(0.1)/log(2)=-3.32,故選用的S指數要到S-4可以達成。
+ m5 |4 s* O" Dpi=3.1416=50S-4(四捨五入)  g" |: T, `; R# o; B
r=10.1=162S-4(四捨五入)! j9 M* _! M5 W$ P1 m. Q- g  L, r
area=pi*r*r=50S-4*162S-4*162S-4=1312200S-12=5126S-4(四捨五入)4 Q4 `6 R* S% J5 h! g$ u" G9 p  A
換算為320.375
2 n; [. F, L" t. Z( W  a實際為320.47386659269480825557425152834
# A: G1 n' n. M/ L5 m  b( _只有精準到整數,是因為所有數值精確度只有到0.1,誤差是0.05,運算來源有三個,故最大誤差為0.15,所以符合誤差範圍。
% c: E* M# p& k. t+ \由算式可以得知機器只計算50*162*162,解讀結果需右移8位元含四捨五入,輸出結果為S-4格式。. S5 h( i  B. M! j: P8 B+ J
小技巧:
$ G6 g# Q7 t) P, p( {定點數之計算可以使用小算盤來算。將小算盤設定為工程型。使用二進位顯示就可以將十進位轉成二進位。
6 C0 P" k& _: P' P; r2 q! ^因二進位只能使用整數,所以要先轉成整數才可以顯示。
7 j5 v; l! I, y例如:pi的取用。
5 g% u5 Q# D5 v7 k: C/ A. cpi取S-4結果為何?先取出pi=3.1415926535897932384626433832795; d* O! D3 x/ o) f
若我們使用精度為Qword則有64位元可以用,可以先乘上2^32,取用4相關的指數,可以在顯示時容易找到小數點位置。
* T( R5 d# }( J! d3 W- J結果為13493037704.522018958598982648896
, n. ~9 x8 y: W! V: m. h直接按二進位,結果為11 0010 0100 0011 1111 0110 1010 1000 1000
" a7 t# x0 F5 [6 M! j! v. t) {找到小數點位置後可以發現是110010bS-4: T  G! f: |( G2 ]0 O0 j0 q7 y
輸入110010按十進位可得50,我們可知pi=50S-4
/ T% Z$ a# R4 s0 W4 X另外pi常有人用201/64來表示,其實是使用S-6的格式,可以看上面的值找出pi=11001001bS-6=201S-61 P" g3 T3 l2 C1 }$ C
另外四捨五入在二進位很容易做,只要看取需要取用的小數精度下一位是否為1,若是則結果加一,不是則捨棄。, D9 }0 U/ g& E
但會引發另一問題,剛好尾數LSB為多個1連續,則會進位。; Z# ?$ b& {4 y, i: f& i+ x
以pi為例取S-10至S-15四捨五入後表示的數皆相同,都會和S-10完全一樣,精度沒有增加,pi皆為3217S-10,就算是寫成不同的S值,如12868S-12,仍等於3217S-10。
3#
 樓主| 發表於 2008-1-19 20:57:28 | 只看該作者
主題:使用加法做開根及平方計算
7 K" R* r# t; k使用範圍:整數計算開根及平方,計算慢,gate count少
; d  k! c7 c  v7 ^& ]# O9 L8 y參考資料:MATH toolkit for Real-Time Programming by Jack W. Crenshaw CMP Books
. J- u9 i* f( G! q, W原理說明:3 B8 V2 w1 E: B% C" b' j  @! M
這是我們常用的公式(n+1)^2=n^2+2*n+1
% ?9 F3 J7 {' `5 z7 F" F改寫為(n+1)^2=n^2+n+(n+1),其中n^2在上次計算可得到,所以只剩n及(n+1)且只使用加法就可以進行。
. @' S8 c0 _9 m4 H設計演算法為
9 A4 A6 x" u4 ]* C& h5 `: Wa=Count( \  X) v' q4 N, \7 {
b=Last Sum= Sum5 y: u1 H5 q% ?# ]' H
c=Sum=Last Sum+Count1 f. w4 a( f/ c) T1 A( U
d=Squart=Sum+Last Sum
3 W$ a7 r  r  i7 @* K排表為
" o, M0 Q% ]# w& W0 O/ ca b c d, _) u: ~& L9 a! ~
0  0   0  0
  B0 d. x2 L+ g, Z; |% q 1  0   1  1* p+ _9 o# ]% m
2  1   3  4: w# p% b$ D, L% J8 F$ `, O
3  3   6  9
! x* ~5 K" J3 }) D  } 4  6  10 16& v% I& I  C- V3 [0 r
5 10  15 25& P9 i$ V& K; l3 L# A$ t( d3 q
若要取得平方,就將輸入做為計算的次數。計算停下來時,取出d就是答案。
. j; ~3 h9 t# P要做開方,就將輸入和輸出比較,超過時停下來,取出a就是答案。4 X& U1 J: b* i: G5 @8 o
若要使用到小數,則使用定點數方式可以得到。
4#
發表於 2008-3-20 10:04:05 | 只看該作者
It is good topic for me. thanks your sharing.
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-1 09:12 AM , Processed in 0.118515 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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