Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

FPGA數值運算問題解答收集

  [複製鏈接]
跳轉到指定樓層
1#
發表於 2008-1-19 20:56:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
在使用FPGA後教了別人數次定點數小數表示法,發現一些狀況。但自己並不是走這一行的,所以一些比較深入的問題也無法回答。所以希望經由各位高手將其應用經驗以或是提供相關資料參考。% t' u! u: n$ ]
能得到一些常用於FPGA的數值運算,如小數表示、乘除法、開根及平方、三角函數、亂數以及其他常用數值方法。: N& t& y+ l9 q+ G
此篇文章屬拋磚引玉性質,可能對一些人來說這些知識是"幼稚班"等級,但對於像我這種由韌體兼職FPGA工程師是有很大的幫助。2 L6 {0 d8 o/ X" h! t4 R2 N
格式大概為下列所列,各作者可以自行調整。: q8 v4 g4 d0 [$ O* _! Y5 A7 `
主題:可以讓人了解的題目8 t; I: M9 Q/ y* X- U
使用資源:計算時間、使用Gate count數目等' j0 X4 d9 V  t3 `
適用及限定範圍:說明常用及不合適的地方( {7 C' o2 H+ W0 U5 D  {. s
參考資料來源:出處或參考書本8 R* I+ {2 U& D& r4 R% C. [
原理說明及例子:就是文章開始的地方

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂1 踩 分享分享
2#
 樓主| 發表於 2008-1-19 20:57:07 | 只看該作者
主題:定點數小數表示法
9 x% E/ t" Y' n1 a# y- R使用範圍:使用整數運算系統下之小數運算9 {! Q* X8 ]$ b" y  \
參考資料:嵌入式系統構件 Jean J. Labrosse原著 黃文增譯 全華科技圖書出版' K* t7 X( H4 ~' y8 [9 _
原理說明:
# }2 Q( d! G4 l先復習一下計算機概論,有許多人都還給老師了。"^"表示次方運算
$ Z. B# {2 Z& f101.101b=2^3+2^0+2^-1+2^-3=5.625% y1 u3 G  a4 ^" [+ C7 F4 l$ n
現在是如何運用到FPGA上了。其實這個問題在之前的定點數DSP就遇過了,只是後來應用變少了。現在的FPGA又要用,捲土重來。; f2 B4 O) z+ ~- ^
我們知道FPGA對於整數系統的加減法是可以,但是遇到小數有些人就不知該如何。其實不難,只要在整數運算系統上加上小數點就行了。
6 b, @& z8 a$ v% c例如101.1b+101.1b=1011.0b,可以發現去掉小數點就和整數運算沒有兩樣。意指,只要將小數點那個位數對齊就可以了,使用移位對FPGA是很容易的。+ y' J0 F/ ~8 x' `. D$ a
但是整數運算使用為小數要標示小數位置,所以引入類似科學記號表示法。我們知道科學表示法為<尾數>E<指數>,例:3E3=3*10^3=3000,E表示10的次方。0 |* h* m9 }0 Z$ e
定點數的表示法符號為S,表示法為<尾數>S<指數>,S表示為2的次方。舉例2.5S3=2.5*2^3=2.5*8=20。4 `, f$ m7 R, R! n$ v3 \
在基本數學運算下的處理為:
- c: S& |+ X1 O$ o1.加減法$ |& ~8 S: h8 [. i$ ^
處理方式是將小數位數對齊再做運算。例:2S3+3S2=20S2+3S2=23S2
  `* m" f2 _5 U, f- I4 |4 r3 C2.乘除法9 C$ J# W" ]4 d+ T8 Q2 \: h$ h
乘法時要將指數相加,尾數相乘。例:2S3*3S2=6S56 C$ W; }# l9 Y; S- Z, X
除法時要將指數相減,尾數相除。例:2S3/3S2=0.66S1
/ g9 H" e1 `8 B1 G% Y. h3.開根$ b/ R+ `8 z5 X2 O
主要是推導數學運算對指數的影響。' A' x! c& d, I# \: A6 Y
sqrt(aSb)=sqrt(a)*sqrt(2^b)=sqrt(a)*2^(b/2)/ ^1 G/ d+ l" S4 w- x1 Z. U; t, h
可以發現在開根時指數是除2,尾數直接開根。0 a: \" z- Q8 p0 [  L; H6 ^# t
4.小數精度的選用" w/ d) ~5 ~3 K! L5 x
為了符合精度,要如何選用指數範圍。我們使用定點數其精度取決於二進位小數取多少位。, E' U; M1 o0 R* N4 d2 n' ?: T' ?
例如若是使用S-4為其指數,每二數之間最小距離為2^-4=0.0625。此為S-4下的精度。
& E! d/ ]7 b! F) v2 K7 n對應十進位精度可以使用log(精度)/log(2)去計算要使用的指數。
  ^7 x& `+ \; N  ]9 R6 C" C使用精度0.1則S取用為log(0.1)/log(2)=-3.32,則使用S-4為其數值格式,就夠用了。& T* R! f" c+ n! b: s
5.數值範圍( K+ y9 Q% [4 i8 a
因為定點數是有限的位元組成,也是有限的數字集合及有限的可使用範圍,一但超過範圍的數也無法表示。也就是在運算上有可能會產生縊位問題,而造成非預期結果。6 t3 q) |1 ~1 S1 x2 Y. T2 S4 k
所以只可以使用在變動不大的運算上。所以要考量使用的數值範圍及使用精度,這方面是定點數在使用前要考量好的。
0 P- P  t; i7 a  i9 ]" P定點數應用例:/ _- F4 c" }7 \; j
已知機器運算只能使用整數的狀況下,要使用小數,則是使用負的S指數,將尾數變成整數。尾數送入機器去運算;指數則是人工管理。
0 s% q' W* P* z. c1 N例:r=10.1求圓面積area,假設輸出入需求精度為0.1
/ p, C4 I# @+ G) F( F5 R& A6 S解答:精度為0.1則,log(0.1)/log(2)=-3.32,故選用的S指數要到S-4可以達成。! t8 l7 X: H# {1 Z# p
pi=3.1416=50S-4(四捨五入)
' H7 ]+ f: v+ K1 S* hr=10.1=162S-4(四捨五入)" ?' n# Q# p! M) L
area=pi*r*r=50S-4*162S-4*162S-4=1312200S-12=5126S-4(四捨五入)
+ D. S' m5 w. `' w2 ?1 N- ?" `$ R  Y+ P換算為320.375, D1 d% A. b$ @! |% R$ _
實際為320.47386659269480825557425152834
2 C2 b, ?" J$ `& @只有精準到整數,是因為所有數值精確度只有到0.1,誤差是0.05,運算來源有三個,故最大誤差為0.15,所以符合誤差範圍。1 B5 Q2 M& ~% c; [! B# `# _5 z3 @
由算式可以得知機器只計算50*162*162,解讀結果需右移8位元含四捨五入,輸出結果為S-4格式。* v  ?- ^* c% c: T6 u
小技巧:- c5 y2 n7 C% D! T0 O0 ~
定點數之計算可以使用小算盤來算。將小算盤設定為工程型。使用二進位顯示就可以將十進位轉成二進位。
3 x- a9 q7 E9 r" [因二進位只能使用整數,所以要先轉成整數才可以顯示。
: X% G6 r- C3 _) f' O例如:pi的取用。
: I- S3 R5 b, l+ J# zpi取S-4結果為何?先取出pi=3.1415926535897932384626433832795
7 G; }  s+ V# h5 H7 s. X0 S若我們使用精度為Qword則有64位元可以用,可以先乘上2^32,取用4相關的指數,可以在顯示時容易找到小數點位置。* M* I5 P  a" W
結果為13493037704.522018958598982648896
' n  Y/ @$ \- E5 _% i直接按二進位,結果為11 0010 0100 0011 1111 0110 1010 1000 1000: i) i; [+ ?8 K4 {) h) L! E: X
找到小數點位置後可以發現是110010bS-4
# l# q9 d5 r# M8 {' x( e輸入110010按十進位可得50,我們可知pi=50S-4
1 b! a7 k- @' r- q& d另外pi常有人用201/64來表示,其實是使用S-6的格式,可以看上面的值找出pi=11001001bS-6=201S-6
6 u8 ~: v  v* d5 v$ W' m4 E另外四捨五入在二進位很容易做,只要看取需要取用的小數精度下一位是否為1,若是則結果加一,不是則捨棄。
( n7 m* |7 z. F4 h( w$ E但會引發另一問題,剛好尾數LSB為多個1連續,則會進位。) h4 b! ]0 t5 _/ x( s$ {* i$ \' O2 c
以pi為例取S-10至S-15四捨五入後表示的數皆相同,都會和S-10完全一樣,精度沒有增加,pi皆為3217S-10,就算是寫成不同的S值,如12868S-12,仍等於3217S-10。
3#
 樓主| 發表於 2008-1-19 20:57:28 | 只看該作者
主題:使用加法做開根及平方計算& ^% y( y, u! D4 q5 x
使用範圍:整數計算開根及平方,計算慢,gate count少
0 c6 V9 `3 U8 b. V. ^0 }參考資料:MATH toolkit for Real-Time Programming by Jack W. Crenshaw CMP Books2 J. [1 N$ i' }+ O0 U* a
原理說明:7 W- S1 u& `0 a. L9 [% n/ C: \
這是我們常用的公式(n+1)^2=n^2+2*n+1" N: U) A. Q+ x
改寫為(n+1)^2=n^2+n+(n+1),其中n^2在上次計算可得到,所以只剩n及(n+1)且只使用加法就可以進行。& E1 T/ O' C* z* i
設計演算法為
4 |+ b1 v) R. i' S0 W& t/ ^8 e+ h; Ha=Count+ k9 f2 l/ D3 M- H
b=Last Sum= Sum! b2 B. X1 l/ f9 K! `" A
c=Sum=Last Sum+Count' _! r2 e* q8 v
d=Squart=Sum+Last Sum2 D7 J6 y; ^. G% r. h
排表為/ u9 ~# Z0 W0 I8 V0 v
a b c d( M/ j. J# R" `4 A& h6 [% `
0  0   0  0+ E& K  Y8 U( S( z4 n+ v* [7 }- Z
1  0   1  1% }5 s4 L7 Q5 A3 s( X  o3 ~
2  1   3  45 l, v0 y! U* L/ x. {1 _. Z
3  3   6  9
' L/ M% U7 _' S8 t  T2 _ 4  6  10 167 C& Y. r; p: Z, X& `/ P
5 10  15 25
- h( M: K( Z5 _; g( q9 H3 M! |若要取得平方,就將輸入做為計算的次數。計算停下來時,取出d就是答案。  X# e3 q8 Y  i6 e
要做開方,就將輸入和輸出比較,超過時停下來,取出a就是答案。' R8 \( m3 s& h2 R- A
若要使用到小數,則使用定點數方式可以得到。
4#
發表於 2008-3-20 10:04:05 | 只看該作者
It is good topic for me. thanks your sharing.
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-4-29 10:00 PM , Processed in 0.105006 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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