Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

FPGA數值運算問題解答收集

  [複製鏈接]
跳轉到指定樓層
1#
發表於 2008-1-19 20:56:44 | 顯示全部樓層 回帖獎勵 |倒序瀏覽 |閱讀模式
在使用FPGA後教了別人數次定點數小數表示法,發現一些狀況。但自己並不是走這一行的,所以一些比較深入的問題也無法回答。所以希望經由各位高手將其應用經驗以或是提供相關資料參考。
9 I9 }. g  p, A能得到一些常用於FPGA的數值運算,如小數表示、乘除法、開根及平方、三角函數、亂數以及其他常用數值方法。
- w: u2 Y. }6 o+ d2 R此篇文章屬拋磚引玉性質,可能對一些人來說這些知識是"幼稚班"等級,但對於像我這種由韌體兼職FPGA工程師是有很大的幫助。. ?- i  {# D2 k! g
格式大概為下列所列,各作者可以自行調整。0 Q7 m( t1 [' `: Z- O& L) \: Y; S, E8 r- x
主題:可以讓人了解的題目
; t. o+ g. |2 i6 G* F+ i' q使用資源:計算時間、使用Gate count數目等
- s3 {) C/ T9 o! p6 N" Z' a# C. C4 P) U適用及限定範圍:說明常用及不合適的地方
2 d* y) t) ~0 _8 T' l參考資料來源:出處或參考書本
" W- {5 M( u( m9 t原理說明及例子:就是文章開始的地方

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂1 踩 分享分享
2#
 樓主| 發表於 2008-1-19 20:57:07 | 顯示全部樓層
主題:定點數小數表示法" o3 G+ b( i: F# |
使用範圍:使用整數運算系統下之小數運算- r8 F' Y7 v* c
參考資料:嵌入式系統構件 Jean J. Labrosse原著 黃文增譯 全華科技圖書出版
  ]1 X+ O& g! S" p" E  G原理說明:
9 Q' T; L: ^% u7 z; f% f先復習一下計算機概論,有許多人都還給老師了。"^"表示次方運算1 S3 F" o! a0 \; P3 W4 I
101.101b=2^3+2^0+2^-1+2^-3=5.625! S; q; V" N  f" r- z) r
現在是如何運用到FPGA上了。其實這個問題在之前的定點數DSP就遇過了,只是後來應用變少了。現在的FPGA又要用,捲土重來。- D5 Y- a# f4 [( T" B+ H
我們知道FPGA對於整數系統的加減法是可以,但是遇到小數有些人就不知該如何。其實不難,只要在整數運算系統上加上小數點就行了。) p6 k9 J; W- M9 e# d7 \1 C
例如101.1b+101.1b=1011.0b,可以發現去掉小數點就和整數運算沒有兩樣。意指,只要將小數點那個位數對齊就可以了,使用移位對FPGA是很容易的。
( t0 {+ ^% I5 b; Z* D8 J但是整數運算使用為小數要標示小數位置,所以引入類似科學記號表示法。我們知道科學表示法為<尾數>E<指數>,例:3E3=3*10^3=3000,E表示10的次方。% i/ e% }4 P# S# N: _
定點數的表示法符號為S,表示法為<尾數>S<指數>,S表示為2的次方。舉例2.5S3=2.5*2^3=2.5*8=20。; O! X5 s' B: y6 r' _4 L
在基本數學運算下的處理為:0 e- I* i7 b( y3 @0 K- _- S
1.加減法
+ _) M- K" r- @* a+ C處理方式是將小數位數對齊再做運算。例:2S3+3S2=20S2+3S2=23S2
& l$ x( r& i' m' P  x2.乘除法
% L8 Z2 K5 H+ {# T: Z7 e' t乘法時要將指數相加,尾數相乘。例:2S3*3S2=6S5
  |0 ?7 s4 k# e7 ~4 T+ K除法時要將指數相減,尾數相除。例:2S3/3S2=0.66S19 I% `3 T4 P9 f3 n' _( ]7 q: Y
3.開根/ b4 Q& s( {5 ^9 Z. {7 A
主要是推導數學運算對指數的影響。- W0 [: E) A1 h9 y" p
sqrt(aSb)=sqrt(a)*sqrt(2^b)=sqrt(a)*2^(b/2)
1 P, i% V: X* l7 |  d$ s1 u# Z; o. Q可以發現在開根時指數是除2,尾數直接開根。
' {- Q4 V8 [2 |; `% C4.小數精度的選用
% u4 Z" E# q/ t1 L9 ^為了符合精度,要如何選用指數範圍。我們使用定點數其精度取決於二進位小數取多少位。* J& |/ v$ m3 _: t
例如若是使用S-4為其指數,每二數之間最小距離為2^-4=0.0625。此為S-4下的精度。  G, e" D( p+ u/ E
對應十進位精度可以使用log(精度)/log(2)去計算要使用的指數。; [' B1 Z; D" }' z2 ?* w: ]; E
使用精度0.1則S取用為log(0.1)/log(2)=-3.32,則使用S-4為其數值格式,就夠用了。/ ^- y9 |' Z8 P: }- U. A( t
5.數值範圍& K3 G2 T1 H1 V, d
因為定點數是有限的位元組成,也是有限的數字集合及有限的可使用範圍,一但超過範圍的數也無法表示。也就是在運算上有可能會產生縊位問題,而造成非預期結果。
) D# K, @+ I, a1 m1 N所以只可以使用在變動不大的運算上。所以要考量使用的數值範圍及使用精度,這方面是定點數在使用前要考量好的。; n. I8 Q* I: R7 {( z) \
定點數應用例:
9 E0 I3 A7 @! n2 p4 m已知機器運算只能使用整數的狀況下,要使用小數,則是使用負的S指數,將尾數變成整數。尾數送入機器去運算;指數則是人工管理。6 v3 x" N2 i+ [
例:r=10.1求圓面積area,假設輸出入需求精度為0.1" i, K: L3 S: r
解答:精度為0.1則,log(0.1)/log(2)=-3.32,故選用的S指數要到S-4可以達成。
6 j" L3 o" s  T0 spi=3.1416=50S-4(四捨五入)
% h6 n  A! ?% c' Wr=10.1=162S-4(四捨五入)
" r. {& j  O: o  O3 carea=pi*r*r=50S-4*162S-4*162S-4=1312200S-12=5126S-4(四捨五入)- l' H) @) p, W: f
換算為320.375% G% }4 c1 i: |, C% O9 v& b( b7 y' w
實際為320.47386659269480825557425152834+ K4 ?) K) J4 |5 [# c* R& m
只有精準到整數,是因為所有數值精確度只有到0.1,誤差是0.05,運算來源有三個,故最大誤差為0.15,所以符合誤差範圍。- B+ g  G1 _5 z; C
由算式可以得知機器只計算50*162*162,解讀結果需右移8位元含四捨五入,輸出結果為S-4格式。
8 N( @: D( W" j$ d8 k/ g小技巧:
- x) p- l2 T' ?: U  D. w定點數之計算可以使用小算盤來算。將小算盤設定為工程型。使用二進位顯示就可以將十進位轉成二進位。
% C9 v# ]5 V: @$ N% B因二進位只能使用整數,所以要先轉成整數才可以顯示。9 Z# Y- n8 w: S! _
例如:pi的取用。9 F% R% g  X0 _& S5 O$ L+ U
pi取S-4結果為何?先取出pi=3.1415926535897932384626433832795/ s( V3 d/ D' p* Q# z) |
若我們使用精度為Qword則有64位元可以用,可以先乘上2^32,取用4相關的指數,可以在顯示時容易找到小數點位置。, S0 ^6 P& d9 r3 y! x" F
結果為13493037704.522018958598982648896# F6 m4 a8 @8 }5 G, s8 |9 k: i1 ^
直接按二進位,結果為11 0010 0100 0011 1111 0110 1010 1000 1000, d5 H) j$ r% H: c/ a
找到小數點位置後可以發現是110010bS-46 y. F: P# y  {) V
輸入110010按十進位可得50,我們可知pi=50S-4
6 h! _! H; p% W9 v  y8 B另外pi常有人用201/64來表示,其實是使用S-6的格式,可以看上面的值找出pi=11001001bS-6=201S-6* O, y8 S$ u7 s. x9 Y
另外四捨五入在二進位很容易做,只要看取需要取用的小數精度下一位是否為1,若是則結果加一,不是則捨棄。$ G1 E& ]! g; _# S, R/ P! Q: P
但會引發另一問題,剛好尾數LSB為多個1連續,則會進位。; a: a% i" q4 h4 G9 P! h
以pi為例取S-10至S-15四捨五入後表示的數皆相同,都會和S-10完全一樣,精度沒有增加,pi皆為3217S-10,就算是寫成不同的S值,如12868S-12,仍等於3217S-10。
3#
 樓主| 發表於 2008-1-19 20:57:28 | 顯示全部樓層
主題:使用加法做開根及平方計算! O5 i5 u. m9 _; q$ L- t) X
使用範圍:整數計算開根及平方,計算慢,gate count少
) h0 P" d' D3 _% C# ?5 y2 i+ G參考資料:MATH toolkit for Real-Time Programming by Jack W. Crenshaw CMP Books
2 D) V& ^/ ^- m7 k原理說明:
0 Y8 R1 K( t$ G+ k這是我們常用的公式(n+1)^2=n^2+2*n+1  G, B  f5 o$ N, N2 O" p% u' q
改寫為(n+1)^2=n^2+n+(n+1),其中n^2在上次計算可得到,所以只剩n及(n+1)且只使用加法就可以進行。+ p+ i3 s' d: [( j( c/ x' Y4 s
設計演算法為
( V0 G( t2 D1 e' H8 Q' U' ^* Ia=Count# `; H/ Q3 e- U6 M9 p3 y
b=Last Sum= Sum1 b2 B6 l) z7 ~  c8 i1 m# n. ?5 _
c=Sum=Last Sum+Count- D, o/ R- R; c6 E$ L4 `' @
d=Squart=Sum+Last Sum' q0 Q) j# M: C3 e: _  G
排表為
& G! |$ Q4 z% A: h) ?a b c d4 I5 S; k- [0 `7 a
0  0   0  0& Y8 h& v; U% [, x" B: ?
1  0   1  1
+ M% ]3 ^  v6 S* r# n1 R- H 2  1   3  4. a6 Q/ ]7 c  n% y
3  3   6  9
" t( [6 J1 \, e% G* S 4  6  10 16
5 D0 L# L* T- t% y7 f- C 5 10  15 25
& d% R2 b0 g1 f! V" @9 D- [若要取得平方,就將輸入做為計算的次數。計算停下來時,取出d就是答案。# Q! R/ l% M) O; ]4 z+ ]8 |
要做開方,就將輸入和輸出比較,超過時停下來,取出a就是答案。8 c1 E5 l& Z) J5 E1 y5 V: M
若要使用到小數,則使用定點數方式可以得到。
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-16 09:20 PM , Processed in 0.103513 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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