Professional Documents
Culture Documents
A.a. 2004-2005
Funzionalita Interne
Processori DSP
Unita funzionali application-specific applicate ad un ambiente software-programmable Difficolta con i compilatori -> largo uso di assembly
DSP: Applicazioni
Telefonia Mobile (RF Codecs, Voice band Radio) Consumer Audio (Stereo A/D, D/A, Audio compression) Multimedia (Image Compression Codecs and Filtering) DTAD (Segreteria Telefonica Automatica) (Sintesi e riconoscimento del parlato) Automotive (Active Suspensions,Injection Control etc.) HDD (Memorie di Massa)
Wireless
base
PC Index
32
Data bus
ADDER SHIFTER
RAM Data Memory
MUX 32
MUX 32
40
MULTIPLY 40 MUX
40
D1 D2
40 ADD 40
32 32
External Interface
IR
32
T1: Acc/Roundoff 32
Data bus In Buf x[n] OutBuf y[n]
32
Program bus
Esempio: FFT
Considero N campioni temporali. Indichiamo: x(n)=x(nT)
X (k ) = x( n) wN
n =0
N 1
kn
wN = e N = 2r
2 N
Complessit N2
10
(n ) wN 2 kn +
N 2 1 n =0
11
( n) wN k (2 n +1) =
N 2 1 n =0
10
( n) wN 2 kn + wN k
N 2 1
n= 0
x11 (n ) wN 2 kn
dove x10(n) la succ. degli x(n) pari e x11(n) la succ. degli x(n) dispari Si pu notare che:
wN
2 kn
=e
2 2 kn N
=e
2 kn N 2
= w N kn
2
X (k ) =
N 2 1
n= 0
x1 (n) w N
2
kn
+ wN
N 2 1
n= 0
x11 ( n) w N
2
kn
= X 10 ( k ) + wN
X 11 (k )
X (k ) = X 10 (k ) + wN
X(k) ha N elementi, da 0 a N-1
X 11 ( k )
Queste succ. hanno N/2 elementi. Qui k va da 0 a N/2-1. Sono le DFT delle successioni degli elementi pari e dispari.
2 N N 2
E possibile notare che X10(k) e X11(k) sono funzioni periodiche in k, con periodo N/2 Inoltre si pu anche notare che: wN N 2 = e
j
= 1
Quindi assumendo k da 0 a N/2-1 si possono calcolare i primi N/2 valori della successione X(k) con:
X ( k ) = X 10 (k ) + wN
X 11 (k )
k
X ( k + N 2) = X 10 ( k ) wN
X 11 ( k )
E possibile applicare lo stesso ragionamento al calcolo delle successioni X10(k) e X11(k), e ricorsivamente a tutte le nuove successioni (dimezzate) che si trovano passo per passo. Il procedimento si fermer quando si arriva a singoli elementi. Es. N=8
x11 = {x1 , x3 , x5 , x7 } x10 = {x0 , x2 , x4 , x6 } x21 = {x2 , x6 } x20 = {x0 , x4 }
w=c+j(-s)
Utilizzando questo operatore si giunge al calcolo della FFT, secondo quanto indicato nelle equazioni precedenti.
Multiplier
Register file
Adder (ALU1)
Subtractor (ALU2)
2 canali di memoria
Memory 1 Memory 2
Reservation Table
Mem2 Multiplier Alu1 Alu2
Mem1
x0 mem1 x1 mem1
y1 mem2 y0 mem2
Cx1 = cosx1 Cy1 = cosy1 Sx1 = sinx1 Sy1 = siny1 tmp2 = Cy1 Sx1 v1 = y0 tmp2 v0 = y0 + tmp2 tmp1 = Cx1 + Sx1 u0 = x0 + tmp1
Cosa succede se provo ad eseguire le istruzioni VLIW in questo modo? (ogni riga una istr. VLIW)
Mem2
Multiplier
Alu1
Alu2
Mem2
mem2 v1 mem2 v0 y1 mem2 y0 mem2
Multiplier
Sx1 = sinx1 Sy1 = siny1 Cx1 = cosx1 Cy1 = cosy1
Alu1
Alu2
tmp1 = Cx1 + Sx1
u0 = x0 + tmp1
v0 = y0 + tmp2
Mescolando, e mandando in pipeline butterflies di campioni differenti riusciamo a concludere un calcolo ogni 4 cicli. La latenza invece 8 cicli. Le istruzioni eseguite per ogni butterfly sono 18. Miglioramento del throughput. Problema di allocazione delle risorse di calcolo in ogni istante di tempo, in modo da individuare quella in cui le istruzioni si incastrano meglio nelle risorse di calcolo. Tutto questo a carico del programmatore e/o del compilatore/assemblatore.