Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

FPGA數值運算問題解答收集

  [複製鏈接]
跳轉到指定樓層
1#
發表於 2008-1-19 20:56:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
在使用FPGA後教了別人數次定點數小數表示法,發現一些狀況。但自己並不是走這一行的,所以一些比較深入的問題也無法回答。所以希望經由各位高手將其應用經驗以或是提供相關資料參考。
+ A! b+ I$ E0 t. a能得到一些常用於FPGA的數值運算,如小數表示、乘除法、開根及平方、三角函數、亂數以及其他常用數值方法。
* q1 R6 r; s& Y8 ^. E, T此篇文章屬拋磚引玉性質,可能對一些人來說這些知識是"幼稚班"等級,但對於像我這種由韌體兼職FPGA工程師是有很大的幫助。
% d' D9 W5 p- K  q$ k1 ^# C9 Q格式大概為下列所列,各作者可以自行調整。' c( ^9 E$ Q8 X) {% T' N
主題:可以讓人了解的題目) ?4 p1 R# _; d6 a( {' @# v! S& q
使用資源:計算時間、使用Gate count數目等( w) \2 u, p0 R8 ~+ |* u
適用及限定範圍:說明常用及不合適的地方' K$ K, O/ O1 Y; I* f: [
參考資料來源:出處或參考書本7 m$ E: l3 u5 E7 v. y6 _4 D
原理說明及例子:就是文章開始的地方

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂1 踩 分享分享
2#
 樓主| 發表於 2008-1-19 20:57:07 | 只看該作者
主題:定點數小數表示法
& ?" u0 Y, a) u4 q; Z使用範圍:使用整數運算系統下之小數運算
# B# k; t. d9 b$ i$ V- l, O6 t參考資料:嵌入式系統構件 Jean J. Labrosse原著 黃文增譯 全華科技圖書出版
- {- ?3 T# |6 t. k8 u原理說明:
9 H8 `- {4 t2 N1 v  Y4 K先復習一下計算機概論,有許多人都還給老師了。"^"表示次方運算
$ X/ ?- d: z  R  X: n101.101b=2^3+2^0+2^-1+2^-3=5.625! ~+ q8 ^0 [7 X
現在是如何運用到FPGA上了。其實這個問題在之前的定點數DSP就遇過了,只是後來應用變少了。現在的FPGA又要用,捲土重來。$ l( m$ w$ u# T0 a( z! @
我們知道FPGA對於整數系統的加減法是可以,但是遇到小數有些人就不知該如何。其實不難,只要在整數運算系統上加上小數點就行了。
1 E* d( N$ N6 B! K例如101.1b+101.1b=1011.0b,可以發現去掉小數點就和整數運算沒有兩樣。意指,只要將小數點那個位數對齊就可以了,使用移位對FPGA是很容易的。
2 o4 Z& l) r  l但是整數運算使用為小數要標示小數位置,所以引入類似科學記號表示法。我們知道科學表示法為<尾數>E<指數>,例:3E3=3*10^3=3000,E表示10的次方。
  r/ V# ~$ `  o+ t" K, Q定點數的表示法符號為S,表示法為<尾數>S<指數>,S表示為2的次方。舉例2.5S3=2.5*2^3=2.5*8=20。
& x% w9 K7 \/ {7 c在基本數學運算下的處理為:
; T: D( h4 S2 t( |1.加減法" Z4 P: I* j3 Y1 ]+ M4 X
處理方式是將小數位數對齊再做運算。例:2S3+3S2=20S2+3S2=23S2  J1 d& u) ?0 V4 |' m
2.乘除法0 H/ g0 d" H) Q( P  o( u; v- H$ r' N
乘法時要將指數相加,尾數相乘。例:2S3*3S2=6S53 X! i' X+ I' }' S4 ?! e- B5 b
除法時要將指數相減,尾數相除。例:2S3/3S2=0.66S1
3 I9 h8 `! \8 J+ e. S+ P" `3.開根
; F( G0 S! \8 L0 v! r+ B主要是推導數學運算對指數的影響。7 ?! c$ h- t; l( i4 `& O
sqrt(aSb)=sqrt(a)*sqrt(2^b)=sqrt(a)*2^(b/2)
+ S4 w8 D  b) Q' y可以發現在開根時指數是除2,尾數直接開根。# W1 Y! A7 J& _5 s# ]  G( ]; Z
4.小數精度的選用
, d" |7 l. F4 _  }: G為了符合精度,要如何選用指數範圍。我們使用定點數其精度取決於二進位小數取多少位。
% I3 G* ?. ]' n3 a  H例如若是使用S-4為其指數,每二數之間最小距離為2^-4=0.0625。此為S-4下的精度。: K# ]) P. D2 o
對應十進位精度可以使用log(精度)/log(2)去計算要使用的指數。
9 q3 m; [- c- M# J; r- d使用精度0.1則S取用為log(0.1)/log(2)=-3.32,則使用S-4為其數值格式,就夠用了。1 F1 z2 Q- j! g7 \; z3 `5 k& j
5.數值範圍5 P- L* M1 f, U, F# H
因為定點數是有限的位元組成,也是有限的數字集合及有限的可使用範圍,一但超過範圍的數也無法表示。也就是在運算上有可能會產生縊位問題,而造成非預期結果。5 c, O* q% y1 d& |5 z) P
所以只可以使用在變動不大的運算上。所以要考量使用的數值範圍及使用精度,這方面是定點數在使用前要考量好的。
& Z) w) _4 b4 Y9 {定點數應用例:
) e% M+ t/ c4 ~: [已知機器運算只能使用整數的狀況下,要使用小數,則是使用負的S指數,將尾數變成整數。尾數送入機器去運算;指數則是人工管理。% _0 h1 o; g6 u1 q
例:r=10.1求圓面積area,假設輸出入需求精度為0.1
% d$ M" H. i4 V; h1 ^% s解答:精度為0.1則,log(0.1)/log(2)=-3.32,故選用的S指數要到S-4可以達成。
- |: C% l. ?& a& {& |/ tpi=3.1416=50S-4(四捨五入)
0 @; u+ e: _4 S0 o' a* F, _r=10.1=162S-4(四捨五入)- ^# `5 T  f) ]8 p  \, r
area=pi*r*r=50S-4*162S-4*162S-4=1312200S-12=5126S-4(四捨五入)& f% c3 q/ N% `, w( }1 y
換算為320.3750 c$ @/ f' \8 z& n
實際為320.47386659269480825557425152834
  G: l  ~% P& a% |6 n只有精準到整數,是因為所有數值精確度只有到0.1,誤差是0.05,運算來源有三個,故最大誤差為0.15,所以符合誤差範圍。- `- ]; S  D6 s. Z! @$ P4 `1 ?
由算式可以得知機器只計算50*162*162,解讀結果需右移8位元含四捨五入,輸出結果為S-4格式。7 m0 B7 u! J/ W' r+ B
小技巧:) v: K% {* R+ M) f4 W8 d9 O7 v+ F
定點數之計算可以使用小算盤來算。將小算盤設定為工程型。使用二進位顯示就可以將十進位轉成二進位。2 v0 j7 t/ o0 m# y$ C
因二進位只能使用整數,所以要先轉成整數才可以顯示。
! n1 W8 x9 H8 y' m例如:pi的取用。
2 \7 r' n: Z3 e3 N7 m9 vpi取S-4結果為何?先取出pi=3.1415926535897932384626433832795
* J2 g' {3 r) B- L3 n2 }+ O% w若我們使用精度為Qword則有64位元可以用,可以先乘上2^32,取用4相關的指數,可以在顯示時容易找到小數點位置。; s) V0 W. H9 ]3 ]" r+ W
結果為13493037704.522018958598982648896
4 I0 ]7 P8 K  H1 M! t# _3 L% b* q9 Y5 z7 w直接按二進位,結果為11 0010 0100 0011 1111 0110 1010 1000 1000. w7 i0 O, x# U) u0 F$ u
找到小數點位置後可以發現是110010bS-4
  {# g! d! I: U, {5 \6 T輸入110010按十進位可得50,我們可知pi=50S-4
) P# P! O9 g$ P另外pi常有人用201/64來表示,其實是使用S-6的格式,可以看上面的值找出pi=11001001bS-6=201S-68 l7 S2 X& J5 }
另外四捨五入在二進位很容易做,只要看取需要取用的小數精度下一位是否為1,若是則結果加一,不是則捨棄。" e9 F# X, n: Z# j
但會引發另一問題,剛好尾數LSB為多個1連續,則會進位。
; u1 G5 Z4 p7 c9 m; U& F以pi為例取S-10至S-15四捨五入後表示的數皆相同,都會和S-10完全一樣,精度沒有增加,pi皆為3217S-10,就算是寫成不同的S值,如12868S-12,仍等於3217S-10。
3#
 樓主| 發表於 2008-1-19 20:57:28 | 只看該作者
主題:使用加法做開根及平方計算
4 j1 b- G: _- U6 n- D使用範圍:整數計算開根及平方,計算慢,gate count少
! u' J% h( c9 u1 c- s% A: o參考資料:MATH toolkit for Real-Time Programming by Jack W. Crenshaw CMP Books
* ^- V5 o+ H, [- Q. h原理說明:
0 E6 L) N) e$ X6 n4 h這是我們常用的公式(n+1)^2=n^2+2*n+1
1 N! Q# [7 \) ?) q  J( O改寫為(n+1)^2=n^2+n+(n+1),其中n^2在上次計算可得到,所以只剩n及(n+1)且只使用加法就可以進行。
& d# W' g2 [9 Z  e, F設計演算法為
# |  _: N4 N1 y& n$ m' Z: @a=Count0 _! S/ K" v6 x1 r: _
b=Last Sum= Sum
* U% N8 z) ?7 @+ z/ ?4 ~c=Sum=Last Sum+Count
+ X8 M$ B8 p- {# C  ]: l. X1 o5 zd=Squart=Sum+Last Sum
; r4 G  s$ f  _- B+ ^/ l" x; ]: M排表為
9 X+ g- Y. Z9 T5 Da b c d
. o! c! b9 I& }. e: d2 C) g: M 0  0   0  0- V" Q0 ]! w  _$ e- N7 I9 R
1  0   1  1
$ |, |+ m% |+ Z1 ^; J2 S 2  1   3  4* J% m  Y' x- F# h0 L8 p8 K+ n' S
3  3   6  9
8 W" O# j5 I* U' Y( R 4  6  10 16
3 N, d/ b( X$ h9 v 5 10  15 258 B( J0 f) m+ @" l+ X4 |
若要取得平方,就將輸入做為計算的次數。計算停下來時,取出d就是答案。
+ v' w( M' v& h. a7 u1 |4 b要做開方,就將輸入和輸出比較,超過時停下來,取出a就是答案。; X4 F  w. o& x& g* K3 K, o' Q
若要使用到小數,則使用定點數方式可以得到。
4#
發表於 2008-3-20 10:04:05 | 只看該作者
It is good topic for me. thanks your sharing.
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2025-2-19 06:56 AM , Processed in 0.159009 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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