Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

FPGA數值運算問題解答收集

  [複製鏈接]
跳轉到指定樓層
1#
發表於 2008-1-19 20:56:44 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
在使用FPGA後教了別人數次定點數小數表示法,發現一些狀況。但自己並不是走這一行的,所以一些比較深入的問題也無法回答。所以希望經由各位高手將其應用經驗以或是提供相關資料參考。
. G7 p7 N8 ^% O1 f8 F能得到一些常用於FPGA的數值運算,如小數表示、乘除法、開根及平方、三角函數、亂數以及其他常用數值方法。; R: `1 o+ Q  [# O! N7 ]5 J) `
此篇文章屬拋磚引玉性質,可能對一些人來說這些知識是"幼稚班"等級,但對於像我這種由韌體兼職FPGA工程師是有很大的幫助。! `5 g' K: H& v( b& U% u
格式大概為下列所列,各作者可以自行調整。! E- e1 _4 I# s, G
主題:可以讓人了解的題目; Z7 [( Y8 N; A) m4 _
使用資源:計算時間、使用Gate count數目等
4 d# V7 R! Z+ p& \+ D# i適用及限定範圍:說明常用及不合適的地方4 L4 T4 ?* S7 A, S" L4 e& ]
參考資料來源:出處或參考書本
6 q9 S/ w, i2 N  G原理說明及例子:就是文章開始的地方

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂1 踩 分享分享
4#
發表於 2008-3-20 10:04:05 | 只看該作者
It is good topic for me. thanks your sharing.
3#
 樓主| 發表於 2008-1-19 20:57:28 | 只看該作者
主題:使用加法做開根及平方計算
! Z# V! e# e% }- r使用範圍:整數計算開根及平方,計算慢,gate count少! `7 z: ]% u' b% d$ L+ v# m" m3 T
參考資料:MATH toolkit for Real-Time Programming by Jack W. Crenshaw CMP Books
4 s+ k& z4 v9 N1 `* v7 T% O原理說明:0 Z+ k0 @" w0 ^7 d/ B0 f
這是我們常用的公式(n+1)^2=n^2+2*n+1
5 \$ m! F" v6 T5 A# t改寫為(n+1)^2=n^2+n+(n+1),其中n^2在上次計算可得到,所以只剩n及(n+1)且只使用加法就可以進行。
) C. [) c. }& ^, \設計演算法為5 F# r" B  b5 k7 e5 b2 ]9 x
a=Count6 v" A) a$ q/ Y8 _5 d' F/ L
b=Last Sum= Sum
# m4 B0 j( S4 l% ?7 Z8 \0 Wc=Sum=Last Sum+Count9 F8 r+ U: G% k0 I4 F3 w" |
d=Squart=Sum+Last Sum- b, z3 Y: ?& |8 p
排表為
  S: P& K1 k* C. `" ?2 ia b c d0 h( y3 v, w+ q+ U  Q4 K
0  0   0  0
1 s8 a$ `8 S2 i) n* b( y! r 1  0   1  1
9 x+ I; K5 y! u. Z3 e' `; U1 G 2  1   3  4# u6 |: C0 t5 l' H0 M# ^8 d
3  3   6  9
! l  j9 M4 S8 `' h0 k6 O' @ 4  6  10 16% [$ L! E- G- X9 K" {  y- k
5 10  15 25
# e' ~3 o6 O7 F( E若要取得平方,就將輸入做為計算的次數。計算停下來時,取出d就是答案。2 k6 D& E! F* k  z
要做開方,就將輸入和輸出比較,超過時停下來,取出a就是答案。* x7 f; F8 l, r- A. M. h
若要使用到小數,則使用定點數方式可以得到。
2#
 樓主| 發表於 2008-1-19 20:57:07 | 只看該作者
主題:定點數小數表示法
: @0 T/ Z/ Q6 Q使用範圍:使用整數運算系統下之小數運算
1 ^2 t3 h9 W  Y4 A/ _% i' p) [參考資料:嵌入式系統構件 Jean J. Labrosse原著 黃文增譯 全華科技圖書出版$ F8 S' i/ j3 O$ f( m( ^
原理說明:- Z/ i& b. ?" \+ q' G2 i6 n! r
先復習一下計算機概論,有許多人都還給老師了。"^"表示次方運算
4 a) i. h9 K! t8 h4 |; s101.101b=2^3+2^0+2^-1+2^-3=5.625
8 x5 Y& E: p; V9 c* d' t現在是如何運用到FPGA上了。其實這個問題在之前的定點數DSP就遇過了,只是後來應用變少了。現在的FPGA又要用,捲土重來。# h- Y1 K0 v- j2 I! I+ ]* _# |8 ?
我們知道FPGA對於整數系統的加減法是可以,但是遇到小數有些人就不知該如何。其實不難,只要在整數運算系統上加上小數點就行了。
, E' j* v( p/ c8 A" O& A( x  J+ V! `例如101.1b+101.1b=1011.0b,可以發現去掉小數點就和整數運算沒有兩樣。意指,只要將小數點那個位數對齊就可以了,使用移位對FPGA是很容易的。
& o1 G- A4 O. O1 b2 y但是整數運算使用為小數要標示小數位置,所以引入類似科學記號表示法。我們知道科學表示法為<尾數>E<指數>,例:3E3=3*10^3=3000,E表示10的次方。# X# m. l8 g9 u& }: V, e" v
定點數的表示法符號為S,表示法為<尾數>S<指數>,S表示為2的次方。舉例2.5S3=2.5*2^3=2.5*8=20。
# J8 @2 e- @9 ]+ Q* ?  F在基本數學運算下的處理為:0 v5 y  B, j; i+ z0 l" \; a8 C
1.加減法! y, ^7 }  C9 K7 V8 S
處理方式是將小數位數對齊再做運算。例:2S3+3S2=20S2+3S2=23S2* }* z4 p5 {* W( B
2.乘除法
) H) `" ?, i5 F" m" r) {乘法時要將指數相加,尾數相乘。例:2S3*3S2=6S5
: a; B! E' V; B% z# C除法時要將指數相減,尾數相除。例:2S3/3S2=0.66S1+ _) h1 d* m: r, o3 C& O+ H
3.開根
. [! k# {5 E( }1 p- t* m+ j主要是推導數學運算對指數的影響。- g2 R; h* w1 [, a, y
sqrt(aSb)=sqrt(a)*sqrt(2^b)=sqrt(a)*2^(b/2)5 v* n; w- p( B' Q) }% a  S6 C& n
可以發現在開根時指數是除2,尾數直接開根。
) u6 ]/ b! }& m; o4.小數精度的選用7 A7 p& O6 R& n* D, y* f
為了符合精度,要如何選用指數範圍。我們使用定點數其精度取決於二進位小數取多少位。
# P/ b# B0 p0 V$ M0 n+ ]例如若是使用S-4為其指數,每二數之間最小距離為2^-4=0.0625。此為S-4下的精度。; A$ u* C) I: f( g% r' D* [) P4 I' L* f
對應十進位精度可以使用log(精度)/log(2)去計算要使用的指數。3 a# n7 ]6 k6 ~9 {! u# ~
使用精度0.1則S取用為log(0.1)/log(2)=-3.32,則使用S-4為其數值格式,就夠用了。2 E$ H+ q3 F" M9 x6 I/ m
5.數值範圍
7 \! j0 ?. U1 ?9 D8 q因為定點數是有限的位元組成,也是有限的數字集合及有限的可使用範圍,一但超過範圍的數也無法表示。也就是在運算上有可能會產生縊位問題,而造成非預期結果。9 f% v1 A6 }2 f4 X
所以只可以使用在變動不大的運算上。所以要考量使用的數值範圍及使用精度,這方面是定點數在使用前要考量好的。
# m1 m8 S! H0 Y4 ]' K; Q( f, R定點數應用例:! Y& v8 A$ d3 a% `' J- v' I4 u
已知機器運算只能使用整數的狀況下,要使用小數,則是使用負的S指數,將尾數變成整數。尾數送入機器去運算;指數則是人工管理。
; w; f, M4 E# w5 j例:r=10.1求圓面積area,假設輸出入需求精度為0.1$ s# Z' \2 R! c. E+ N
解答:精度為0.1則,log(0.1)/log(2)=-3.32,故選用的S指數要到S-4可以達成。
( z/ j! g- u% y/ lpi=3.1416=50S-4(四捨五入)7 V8 B3 J4 O/ M9 o. {. t% H' l; X
r=10.1=162S-4(四捨五入)
0 |8 R# ?8 d# m, p( p4 ~area=pi*r*r=50S-4*162S-4*162S-4=1312200S-12=5126S-4(四捨五入)8 G+ l; g7 X4 s5 ]4 {, ~
換算為320.375
3 ?! U. `% O/ s2 g+ _實際為320.473866592694808255574251528349 J3 A! Q. A% g; e; a8 o/ l
只有精準到整數,是因為所有數值精確度只有到0.1,誤差是0.05,運算來源有三個,故最大誤差為0.15,所以符合誤差範圍。9 y6 I6 S! J6 E
由算式可以得知機器只計算50*162*162,解讀結果需右移8位元含四捨五入,輸出結果為S-4格式。
% E" L) @0 U$ v. q, x1 t小技巧:0 o# G. O" x0 j
定點數之計算可以使用小算盤來算。將小算盤設定為工程型。使用二進位顯示就可以將十進位轉成二進位。5 `% P+ h1 K: ]% \, _( f" H, O: H6 w
因二進位只能使用整數,所以要先轉成整數才可以顯示。
  G4 v' `3 c* o" B例如:pi的取用。
  z+ X. ]. _7 d( x1 g! Gpi取S-4結果為何?先取出pi=3.1415926535897932384626433832795
$ |. J& P+ H' h* @2 c( Y若我們使用精度為Qword則有64位元可以用,可以先乘上2^32,取用4相關的指數,可以在顯示時容易找到小數點位置。# N; |) v0 V& e; p' F% v( H% m2 e
結果為13493037704.522018958598982648896
: o# j& \% f; t5 J' H直接按二進位,結果為11 0010 0100 0011 1111 0110 1010 1000 1000
. p% Y3 P) }; C# C4 D! j找到小數點位置後可以發現是110010bS-4; C6 Z5 g" y' `0 w# W1 x/ i
輸入110010按十進位可得50,我們可知pi=50S-4) q  j5 Y; E* @4 ^. g7 Z5 p7 q; H/ M
另外pi常有人用201/64來表示,其實是使用S-6的格式,可以看上面的值找出pi=11001001bS-6=201S-6) h4 E; B0 ?- C* V
另外四捨五入在二進位很容易做,只要看取需要取用的小數精度下一位是否為1,若是則結果加一,不是則捨棄。
/ S  i, L0 Z0 B6 ?但會引發另一問題,剛好尾數LSB為多個1連續,則會進位。
, e( K/ O7 ?% f0 e" N4 R以pi為例取S-10至S-15四捨五入後表示的數皆相同,都會和S-10完全一樣,精度沒有增加,pi皆為3217S-10,就算是寫成不同的S值,如12868S-12,仍等於3217S-10。
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-16 01:32 PM , Processed in 0.113014 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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