Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

FPGA數值運算問題解答收集

  [複製鏈接]
跳轉到指定樓層
1#
發表於 2008-1-19 20:56:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
在使用FPGA後教了別人數次定點數小數表示法,發現一些狀況。但自己並不是走這一行的,所以一些比較深入的問題也無法回答。所以希望經由各位高手將其應用經驗以或是提供相關資料參考。
9 _0 K- c- i: x, Y" N7 d% ?1 Y能得到一些常用於FPGA的數值運算,如小數表示、乘除法、開根及平方、三角函數、亂數以及其他常用數值方法。$ L! h1 U2 h3 S3 w6 E' r3 f
此篇文章屬拋磚引玉性質,可能對一些人來說這些知識是"幼稚班"等級,但對於像我這種由韌體兼職FPGA工程師是有很大的幫助。. U6 ^' @8 F5 h6 c
格式大概為下列所列,各作者可以自行調整。$ w: E( J5 H. q3 I3 a% J$ L1 O# r# Y
主題:可以讓人了解的題目/ z4 e- A6 C3 j9 w. C* A
使用資源:計算時間、使用Gate count數目等
" I) U) |3 P' h- v適用及限定範圍:說明常用及不合適的地方
& g5 j3 k: q. ?2 L/ q- G參考資料來源:出處或參考書本
0 x3 p, p# g; ^- K0 `/ u" D; k: Q$ N原理說明及例子:就是文章開始的地方

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂1 踩 分享分享
2#
 樓主| 發表於 2008-1-19 20:57:07 | 只看該作者
主題:定點數小數表示法
0 n+ \9 L/ p: @4 c使用範圍:使用整數運算系統下之小數運算
1 R6 A  T+ e* N+ {7 r% s$ @9 |, i% k參考資料:嵌入式系統構件 Jean J. Labrosse原著 黃文增譯 全華科技圖書出版
% ~5 A; r2 O  C( z( s原理說明:
- f" M0 r. j# g% @; ~先復習一下計算機概論,有許多人都還給老師了。"^"表示次方運算# M* }0 A0 z2 q% {3 K" A
101.101b=2^3+2^0+2^-1+2^-3=5.6255 b  N) m+ \6 N8 U  ^; `" L  H/ n
現在是如何運用到FPGA上了。其實這個問題在之前的定點數DSP就遇過了,只是後來應用變少了。現在的FPGA又要用,捲土重來。5 F2 a  b. A: J8 U) r* p2 N
我們知道FPGA對於整數系統的加減法是可以,但是遇到小數有些人就不知該如何。其實不難,只要在整數運算系統上加上小數點就行了。
5 i; h" K# _) B1 w0 w. R0 ?例如101.1b+101.1b=1011.0b,可以發現去掉小數點就和整數運算沒有兩樣。意指,只要將小數點那個位數對齊就可以了,使用移位對FPGA是很容易的。$ L! S$ f+ j" ~2 g( H$ X; J& Z
但是整數運算使用為小數要標示小數位置,所以引入類似科學記號表示法。我們知道科學表示法為<尾數>E<指數>,例:3E3=3*10^3=3000,E表示10的次方。
* ]5 ^. k% z. K* e6 y; l定點數的表示法符號為S,表示法為<尾數>S<指數>,S表示為2的次方。舉例2.5S3=2.5*2^3=2.5*8=20。
0 ^. E( V2 [; @+ d1 y  ~4 B) P- D在基本數學運算下的處理為:
4 k* H7 M# Q  z3 l$ ~+ e+ [4 i1.加減法
! t- a( Y! u2 ?( m! n( I/ L5 I處理方式是將小數位數對齊再做運算。例:2S3+3S2=20S2+3S2=23S21 ?/ y. U( M$ a
2.乘除法
4 Y6 g  T+ G" n9 D7 _* C6 E! f乘法時要將指數相加,尾數相乘。例:2S3*3S2=6S5
& P3 E. z1 R( ?除法時要將指數相減,尾數相除。例:2S3/3S2=0.66S1
+ F- ^! g4 e( C; b/ `3.開根
# ^) V* [9 b1 x, y( x" s, u5 {主要是推導數學運算對指數的影響。
, B6 `4 R0 R0 F4 v) L2 N/ Msqrt(aSb)=sqrt(a)*sqrt(2^b)=sqrt(a)*2^(b/2). x: k" V* a4 l6 I: Z
可以發現在開根時指數是除2,尾數直接開根。+ f9 Z8 }; R. q% G6 T+ X, n
4.小數精度的選用
2 q, ~" e# i, e) E5 d6 Z為了符合精度,要如何選用指數範圍。我們使用定點數其精度取決於二進位小數取多少位。
$ X0 S4 A8 o) q  g. X5 T例如若是使用S-4為其指數,每二數之間最小距離為2^-4=0.0625。此為S-4下的精度。1 P( G0 D8 q' T( g# L
對應十進位精度可以使用log(精度)/log(2)去計算要使用的指數。
# R0 D9 P0 Y/ \, O. l2 F使用精度0.1則S取用為log(0.1)/log(2)=-3.32,則使用S-4為其數值格式,就夠用了。6 x; u1 ^& Q( n& q$ V
5.數值範圍
- M9 i& _# U6 q# _% ]8 I* B0 B( i5 b因為定點數是有限的位元組成,也是有限的數字集合及有限的可使用範圍,一但超過範圍的數也無法表示。也就是在運算上有可能會產生縊位問題,而造成非預期結果。
& N" u& z: `2 c0 L9 r2 z所以只可以使用在變動不大的運算上。所以要考量使用的數值範圍及使用精度,這方面是定點數在使用前要考量好的。
3 P* U# |7 w$ Y$ s, E2 h定點數應用例:6 u; g; T# N; M
已知機器運算只能使用整數的狀況下,要使用小數,則是使用負的S指數,將尾數變成整數。尾數送入機器去運算;指數則是人工管理。$ p# ^- o; _" S3 l/ I
例:r=10.1求圓面積area,假設輸出入需求精度為0.15 @* B* f3 T$ ?% n" [' t! K0 k
解答:精度為0.1則,log(0.1)/log(2)=-3.32,故選用的S指數要到S-4可以達成。
! t' T3 S/ q6 q/ g+ Fpi=3.1416=50S-4(四捨五入)
$ R: b0 P+ c) Q, O3 v3 v* w) vr=10.1=162S-4(四捨五入)% |% f4 ^: [" l; ^- ]1 a6 P0 [. @
area=pi*r*r=50S-4*162S-4*162S-4=1312200S-12=5126S-4(四捨五入)
7 Y( X+ A* x' d3 b+ K4 L% y  [換算為320.375* P3 V% w: ~( N( H! x' ^
實際為320.47386659269480825557425152834
: a' `  s0 Z- l# y只有精準到整數,是因為所有數值精確度只有到0.1,誤差是0.05,運算來源有三個,故最大誤差為0.15,所以符合誤差範圍。
0 U" C, `8 B( z' N% j. c# [0 c1 w由算式可以得知機器只計算50*162*162,解讀結果需右移8位元含四捨五入,輸出結果為S-4格式。
6 e2 K; N1 H' N: p- Y' ]1 R小技巧:
2 l4 p  w" B4 K定點數之計算可以使用小算盤來算。將小算盤設定為工程型。使用二進位顯示就可以將十進位轉成二進位。
/ I) ?1 D: C" K因二進位只能使用整數,所以要先轉成整數才可以顯示。
$ D. ~4 c8 z: P- C8 o3 ]例如:pi的取用。2 F9 v. F3 d% H. Z' G- d% T# P
pi取S-4結果為何?先取出pi=3.1415926535897932384626433832795
% ~% w  y3 H3 m: B3 o若我們使用精度為Qword則有64位元可以用,可以先乘上2^32,取用4相關的指數,可以在顯示時容易找到小數點位置。
( y3 K+ |$ e9 T& \  m2 e9 P結果為13493037704.522018958598982648896
; I# ]( y& ]5 a. l直接按二進位,結果為11 0010 0100 0011 1111 0110 1010 1000 1000; y! v/ X0 P/ N$ c8 ^. S, K
找到小數點位置後可以發現是110010bS-4" S5 a, H  n* v' g) i
輸入110010按十進位可得50,我們可知pi=50S-4
# k" U3 H) v  }+ m  m/ Q$ u另外pi常有人用201/64來表示,其實是使用S-6的格式,可以看上面的值找出pi=11001001bS-6=201S-6; \% [& t. R6 m; m
另外四捨五入在二進位很容易做,只要看取需要取用的小數精度下一位是否為1,若是則結果加一,不是則捨棄。7 \& L: I  q) B$ p0 A+ a' I
但會引發另一問題,剛好尾數LSB為多個1連續,則會進位。2 @) s+ [, O- e+ O
以pi為例取S-10至S-15四捨五入後表示的數皆相同,都會和S-10完全一樣,精度沒有增加,pi皆為3217S-10,就算是寫成不同的S值,如12868S-12,仍等於3217S-10。
3#
 樓主| 發表於 2008-1-19 20:57:28 | 只看該作者
主題:使用加法做開根及平方計算/ }. q8 N0 q4 t+ V" d  D' u
使用範圍:整數計算開根及平方,計算慢,gate count少0 ]* q# s& o  Z5 |7 Q
參考資料:MATH toolkit for Real-Time Programming by Jack W. Crenshaw CMP Books! }; P+ w; ]$ F3 j3 o! u) x: r( m
原理說明:
4 P' M* U" P7 b, u. y' v9 N/ Y這是我們常用的公式(n+1)^2=n^2+2*n+1
0 ^5 Z' V: p4 l# a改寫為(n+1)^2=n^2+n+(n+1),其中n^2在上次計算可得到,所以只剩n及(n+1)且只使用加法就可以進行。1 x' ?5 U+ A! w, J
設計演算法為% v! Z7 T: p$ X; p0 Y" L8 n2 B
a=Count
9 K/ Y4 e- t4 h5 l; `5 Nb=Last Sum= Sum% p7 w, U4 B: P6 a7 N# C( `
c=Sum=Last Sum+Count
3 U% f3 o5 |& ]d=Squart=Sum+Last Sum* r* }$ }, h, z+ q$ k
排表為
7 R: q1 L; {, a, z1 u5 q$ oa b c d
4 k, ^3 k( [1 C2 x% U 0  0   0  0+ W5 C8 e1 `, m5 j
1  0   1  1' q" y" V$ ?* T- k9 h2 k9 ~; D) I, p
2  1   3  46 Y! Z0 j' o+ C$ Y) l
3  3   6  9: p, y, a0 f) c
4  6  10 16
- K6 y  {- s  n6 s 5 10  15 257 q" m. H1 k4 a5 j1 {6 q! e, C
若要取得平方,就將輸入做為計算的次數。計算停下來時,取出d就是答案。
7 b5 ]- I4 d& n3 a要做開方,就將輸入和輸出比較,超過時停下來,取出a就是答案。! x7 }. t3 q" I! ~- b( T3 G
若要使用到小數,則使用定點數方式可以得到。
4#
發表於 2008-3-20 10:04:05 | 只看該作者
It is good topic for me. thanks your sharing.
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2025-2-19 07:08 AM , Processed in 0.157009 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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