Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

FPGA數值運算問題解答收集

  [複製鏈接]
跳轉到指定樓層
1#
發表於 2008-1-19 20:56:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
在使用FPGA後教了別人數次定點數小數表示法,發現一些狀況。但自己並不是走這一行的,所以一些比較深入的問題也無法回答。所以希望經由各位高手將其應用經驗以或是提供相關資料參考。
8 x4 V! m9 O  F% F, g能得到一些常用於FPGA的數值運算,如小數表示、乘除法、開根及平方、三角函數、亂數以及其他常用數值方法。
, N: `; O8 `' g. y此篇文章屬拋磚引玉性質,可能對一些人來說這些知識是"幼稚班"等級,但對於像我這種由韌體兼職FPGA工程師是有很大的幫助。% {8 l) V6 u/ r. x2 }
格式大概為下列所列,各作者可以自行調整。+ m) c7 f# E% [! E9 U: L
主題:可以讓人了解的題目! _* o+ S) U/ A9 u! X6 k
使用資源:計算時間、使用Gate count數目等
8 y2 O9 j: V! B8 @& Z適用及限定範圍:說明常用及不合適的地方- R+ m1 y" Y! u
參考資料來源:出處或參考書本
  N+ y4 U. l" Y原理說明及例子:就是文章開始的地方

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂1 踩 分享分享
2#
 樓主| 發表於 2008-1-19 20:57:07 | 只看該作者
主題:定點數小數表示法# M6 I8 o% c+ i
使用範圍:使用整數運算系統下之小數運算
7 C5 u. g4 i: {8 F5 c參考資料:嵌入式系統構件 Jean J. Labrosse原著 黃文增譯 全華科技圖書出版: d* R  j7 {5 @
原理說明:1 T: n9 z, s; `1 H8 C
先復習一下計算機概論,有許多人都還給老師了。"^"表示次方運算7 U0 u# O/ g% X' G& Z
101.101b=2^3+2^0+2^-1+2^-3=5.625! Q0 H' `+ Y% L3 W; w2 s. ]& Y) f
現在是如何運用到FPGA上了。其實這個問題在之前的定點數DSP就遇過了,只是後來應用變少了。現在的FPGA又要用,捲土重來。: ^/ l3 Y$ p# R& n
我們知道FPGA對於整數系統的加減法是可以,但是遇到小數有些人就不知該如何。其實不難,只要在整數運算系統上加上小數點就行了。
8 P; Q( |2 Q- s6 t+ \$ x例如101.1b+101.1b=1011.0b,可以發現去掉小數點就和整數運算沒有兩樣。意指,只要將小數點那個位數對齊就可以了,使用移位對FPGA是很容易的。
( s: n) R9 e/ e; f9 P但是整數運算使用為小數要標示小數位置,所以引入類似科學記號表示法。我們知道科學表示法為<尾數>E<指數>,例:3E3=3*10^3=3000,E表示10的次方。
7 |; [: {* ^; E- |2 C定點數的表示法符號為S,表示法為<尾數>S<指數>,S表示為2的次方。舉例2.5S3=2.5*2^3=2.5*8=20。
. z; {9 z" ~6 r在基本數學運算下的處理為:
; Q% {" J# D7 O. S1 ?6 Z, c1.加減法
- j! H/ C' i1 E+ _3 x7 C處理方式是將小數位數對齊再做運算。例:2S3+3S2=20S2+3S2=23S2
) R, F/ u# Z/ {( v( |0 A2.乘除法
' s+ Z2 q$ n' T9 E乘法時要將指數相加,尾數相乘。例:2S3*3S2=6S57 j* ~( d# U9 V8 \0 Z- G
除法時要將指數相減,尾數相除。例:2S3/3S2=0.66S13 }$ z% E, U, z- W- n
3.開根
4 A' F2 K: _( g8 z) Z# L) o7 |主要是推導數學運算對指數的影響。$ ^- u. B1 ?/ c: ]6 ]
sqrt(aSb)=sqrt(a)*sqrt(2^b)=sqrt(a)*2^(b/2). T- Y  t9 \; }6 |/ v8 X
可以發現在開根時指數是除2,尾數直接開根。- L4 T7 I2 M9 }% Y2 y, K- f
4.小數精度的選用
8 p& [" M2 ^( t" Y+ S5 |/ Y為了符合精度,要如何選用指數範圍。我們使用定點數其精度取決於二進位小數取多少位。. E  G: H% R  E4 ~% _; x) M4 N
例如若是使用S-4為其指數,每二數之間最小距離為2^-4=0.0625。此為S-4下的精度。$ r. b, Q0 p' I# Z' q8 v
對應十進位精度可以使用log(精度)/log(2)去計算要使用的指數。
1 K" H* J3 l% C. m5 G使用精度0.1則S取用為log(0.1)/log(2)=-3.32,則使用S-4為其數值格式,就夠用了。
! Q1 \# l. P! ^: I: ~5.數值範圍  y! A! g. R( Q$ L. ^
因為定點數是有限的位元組成,也是有限的數字集合及有限的可使用範圍,一但超過範圍的數也無法表示。也就是在運算上有可能會產生縊位問題,而造成非預期結果。- s0 O' S" G/ B: W) D4 g( L
所以只可以使用在變動不大的運算上。所以要考量使用的數值範圍及使用精度,這方面是定點數在使用前要考量好的。' z3 m9 {* U3 r
定點數應用例:
+ R/ G0 R9 S1 \$ D- B( J7 c已知機器運算只能使用整數的狀況下,要使用小數,則是使用負的S指數,將尾數變成整數。尾數送入機器去運算;指數則是人工管理。
8 p" v; o) F  h8 G5 ^; Y例:r=10.1求圓面積area,假設輸出入需求精度為0.1
  A: |/ i. q" i/ A. O6 h解答:精度為0.1則,log(0.1)/log(2)=-3.32,故選用的S指數要到S-4可以達成。
, u6 ~8 `$ i- S- T: ipi=3.1416=50S-4(四捨五入)
$ V- [3 I0 z! J8 ^2 P6 I' sr=10.1=162S-4(四捨五入)
7 a& {: E& J1 p; I; ~area=pi*r*r=50S-4*162S-4*162S-4=1312200S-12=5126S-4(四捨五入)! @' D" q; f2 Y$ ^. ~
換算為320.375
' m/ r' z3 ?6 V5 R( b4 }實際為320.47386659269480825557425152834+ _2 N2 w7 R, t5 [2 I( q' D
只有精準到整數,是因為所有數值精確度只有到0.1,誤差是0.05,運算來源有三個,故最大誤差為0.15,所以符合誤差範圍。
" a! w0 k8 K' W" Q+ f5 h9 G8 s8 T由算式可以得知機器只計算50*162*162,解讀結果需右移8位元含四捨五入,輸出結果為S-4格式。
7 d/ C0 p" T+ ^% M. F' x小技巧:
4 b  n# K) g. X9 v1 j9 n% g定點數之計算可以使用小算盤來算。將小算盤設定為工程型。使用二進位顯示就可以將十進位轉成二進位。: t# s( ?; E% \! y
因二進位只能使用整數,所以要先轉成整數才可以顯示。
. q  n4 J" X( l$ e: c& ~例如:pi的取用。
" d4 G. ]" u' ~pi取S-4結果為何?先取出pi=3.1415926535897932384626433832795
/ W  o1 S6 H! [2 O/ y0 V若我們使用精度為Qword則有64位元可以用,可以先乘上2^32,取用4相關的指數,可以在顯示時容易找到小數點位置。7 B. L: t) M) v! c2 x) ?  c
結果為13493037704.522018958598982648896
7 A5 [) Q: c9 Z8 J/ F直接按二進位,結果為11 0010 0100 0011 1111 0110 1010 1000 1000
# `. R; X8 X$ j找到小數點位置後可以發現是110010bS-4# v1 C$ E, s: \4 r
輸入110010按十進位可得50,我們可知pi=50S-4
4 w2 e1 P4 C0 R- ~' F/ a- H! L2 _. U2 X# I另外pi常有人用201/64來表示,其實是使用S-6的格式,可以看上面的值找出pi=11001001bS-6=201S-6) {$ Z' A" u5 J* o+ a* r
另外四捨五入在二進位很容易做,只要看取需要取用的小數精度下一位是否為1,若是則結果加一,不是則捨棄。
* w; N( P. S+ T  S& o( c* I但會引發另一問題,剛好尾數LSB為多個1連續,則會進位。
3 e3 ~+ K1 g- O以pi為例取S-10至S-15四捨五入後表示的數皆相同,都會和S-10完全一樣,精度沒有增加,pi皆為3217S-10,就算是寫成不同的S值,如12868S-12,仍等於3217S-10。
3#
 樓主| 發表於 2008-1-19 20:57:28 | 只看該作者
主題:使用加法做開根及平方計算! B5 F! Q3 A9 m1 K* k; `7 m0 h
使用範圍:整數計算開根及平方,計算慢,gate count少
1 g6 t+ L" j2 K8 d3 C" \9 c7 e; G參考資料:MATH toolkit for Real-Time Programming by Jack W. Crenshaw CMP Books
( b! l9 l* a- Y5 m' J原理說明:- v4 k4 S: @% W
這是我們常用的公式(n+1)^2=n^2+2*n+1
( }) i2 M8 e. a/ _# G( q: {改寫為(n+1)^2=n^2+n+(n+1),其中n^2在上次計算可得到,所以只剩n及(n+1)且只使用加法就可以進行。
+ R9 m) C' n8 y% @1 l! B" |, A$ N設計演算法為
/ h  V' \4 W/ k- P, Xa=Count
, @! |2 Q5 d2 G5 i; K% ab=Last Sum= Sum+ V5 `% }/ S& Z  a
c=Sum=Last Sum+Count5 V% x4 n* Q5 G. @$ K' ~
d=Squart=Sum+Last Sum
- ]/ P$ S) |/ ^5 p: P/ U排表為0 m& d( K1 C$ K! r0 {) W/ A
a b c d
. H* n  z. n9 d 0  0   0  0% {6 k* k3 `3 Y+ S
1  0   1  1
* H# @2 q/ M8 U) F3 _" ` 2  1   3  4
- g9 z( C  J; o' I/ U( T 3  3   6  99 {  Q0 U. h) `$ n# a+ C
4  6  10 16
7 g2 C0 G; u# X5 \1 \ 5 10  15 25
/ S4 D9 ~/ Y" j; N$ ^9 u若要取得平方,就將輸入做為計算的次數。計算停下來時,取出d就是答案。* e' Y( I" M$ U+ v% `- l
要做開方,就將輸入和輸出比較,超過時停下來,取出a就是答案。
3 H, f, V3 l* I) `- U( q若要使用到小數,則使用定點數方式可以得到。
4#
發表於 2008-3-20 10:04:05 | 只看該作者
It is good topic for me. thanks your sharing.
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2025-1-19 11:14 PM , Processed in 0.171600 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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