Sei sulla pagina 1di 14

Digital Signal Processors

Elettronica dei Sistemi Digitali L-A Universit di Bologna, Cesena

Stefano Vitali Fabio Campi Aldo Romani

A.a. 2004-2005

Funzionalita Interne

Gestione della memoria

Caratteristiche dei DSP

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

A Candidate Architecture for Signal Processing


Program bus Address calculation

base
PC Index

32

Data bus

ADDER SHIFTER
RAM Data Memory

MUX 32

MUX 32

ROM Program Memory + Coeff. Memory C1 C2

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

DSP Texas Instruments TMS320C1x

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

La FFT si calcola con un numero di campioni potenza di 2

Spezzo la somma in contributi pari e dispari


X (k ) =
N 2 1 n =0

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

Dunque posso scrivere:

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

Mentre i successivi N/2 con: (k da 0 a N/2-1)

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 }

x23 = {x1 , x5 } x24 = {x3 , x7 }

La struttura di calcolo elementare si chiama butterfly

x0+jy0 + x1+jy1 u0+jv0 u1+jv1

w=c+j(-s)
Utilizzando questo operatore si giunge al calcolo della FFT, secondo quanto indicato nelle equazioni precedenti.

Architettura VLIW per FFT


Che vantaggi pu portare unarchitettura VLIW per il calcolo della FFT? Lelaborazione della butterfly la seguente: (i dati andranno prelevati dalla memoria e l riscritti dopo il calcolo): (prelievo operandi x0,y0 x1,y1) temp1 = Cx1 + Sy1 temp2 = Cy1 - Sx1 u0 = x0 + temp1 v0 = y0 + temp2 u1 = x0 - temp1 v1 = y0 - temp2 (memorizzazione risultati u0,v0, u1,v1) I risultati di questa trattazione sono validi per qualunque algoritmo di elaborazione di segnale

Architettura VLIW di riferimento


Ipotizziamo di avere a disposizione una macchina VLIW con le seguenti unit funzionali

Multiplier

Register file

Adder (ALU1)

Subtractor (ALU2)

2 canali di memoria
Memory 1 Memory 2

ogni unit di esecuzione ha accesso indipendente ai registri

FFT: Implementazione VLIW


Possiamo far eseguire alla macchina il seguente algoritmo
x0 mem1 x1 mem1 Cx1 = cosx1 y1 mem2 Cy1 = cosy1 y0 mem2 Sx1 = sinx1 Sy1 = siny1 tmp2 = Cy1 Sx1 v0 = y0 + tmp2 v1 = y0 tmp2 tmp1 = Cx1 + Sx1 mem2 v1 u0 = x0 + tmp1 u1 = x0 tmp1 mem2 v0 mem1 u1 mem1 u0
mem1 u1 mem1 u0 mem2 v1 mem2 v0 u1 = x0 tmp1

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)

FFT: Implementazione VLIW


Osservando la reservation table noto che ogni quattro cicli posso far partire una nuova elaborazione, senza avere: dipendenze di dato conflitti nellaccesso a risorse A regime si individua un CORE di elaborazione
Mem1
x0 mem1 x1 mem1 y1 mem2 y0 mem2 x0 mem1 x1 mem1 y1 mem2 y0 mem2 x0 mem1 x1 mem1 mem1 u1 mem1 u0 mem2 v1 mem2 v0 y1 mem2 y0 mem2 mem2 v1 mem2 v0 mem1 u1 mem1 u0 mem2 v1 mem2 v0 mem1 u1 mem1 u0 u1 = x0 tmp1 Cx1 = cosx1 Cy1 = cosy1 Sx1 = sinx1 Sy1 = siny1 Cx1 = cosx1 Cy1 = cosy1 Sx1 = sinx1 Sy1 = siny1 Cx1 = cosx1 Cy1 = cosy1 Sx1 = sinx1 Sy1 = siny1 u1 = x0 tmp1 tmp2 = Cy1 Sx1 v1 = y0 tmp2 v0 = y0 + tmp2 tmp1 = Cx1 + Sx1 u0 = x0 + tmp1 u1 = x0 tmp1 tmp2 = Cy1 Sx1 v1 = y0 tmp2 v0 = y0 + tmp2 tmp1 = Cx1 + Sx1 u0 = x0 + tmp1 tmp2 = Cy1 Sx1 v1 = y0 tmp2 v0 = y0 + tmp2 tmp1 = Cx1 + Sx1 u0 = x0 + tmp1

Mem2

Multiplier

Alu1

Alu2

FFT: Implementazione VLIW


Mem1
x0 mem1 x1 mem1 mem1 u1 mem1 u0

Mem2
mem2 v1 mem2 v0 y1 mem2 y0 mem2

Multiplier
Sx1 = sinx1 Sy1 = siny1 Cx1 = cosx1 Cy1 = cosy1

Alu1

Alu2
tmp1 = Cx1 + Sx1

u1 = x0 tmp1 tmp2 = Cy1 Sx1 v1 = y0 tmp2

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.