Solution EMD Module DSP 2022 1

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 4

Nom : Prénom : Matricule :

EMD 2021 / 2022 : Module DSP


Le code C ci-dessous présente un filtre IIR simple. Dans cet exemple, y[i] est une entrée pour
le calcul de y[i+1]. Avant que y[i] puisse être lu pour l'itération suivante, y[i+1] doit être
calculé à partir de l'itération précédente.

void iir(short x[],short y[],short c1, short c2, short c3)


{
int i;

for (i=0; i<100; i++) {


y[i+1] = (c1*x[i] + c2*x[i+1] + c3*y[i]) >> 15;
}
}

1) Faire le code en assembleur linéaire pour la boucle complète sans allouer les
registres.

.global _iir
_iir: .cproc x, y, c1, c2, c3
.reg xi, xi1, yi1
.reg p0, p1, p2, s0, s1, cntr

MVK 100,cntr ; cntr = 100

LDH .D2 *y++,yi1 ; yi+1

LOOP: .trip 100

LDH *x++,xi ; xi

MPY c1,xi,p0 ; c1 * xi

LDH *x,xi1 ; xi+1

MPY c2,xi1,p1 ; c2 * xi+1

ADD p0,p1,s0 ; c1 * xi + c2 * xi+1

MPY c3,yi1,p2 ; c3 * yi

ADD s0,p2,s1 ; c1 * xi + c2 * xi+1 + c3 * yi

SHR s1,15,yi1 ; yi+1

STH yi1,*y++ ; store yi+1

[cntr] SUB cntr,1,cntr ; decrement loop counter

[cntr] B LOOP ; branch to loop

.endproc
2) Après avoir alloué les registres faire le code réel en assembleur et compter le
nombre de cycles écoulé pour l’exécution du programme.
Allocation des registres :

Content of Register File A Reg. A Reg. B Content of Register File B

A0 B0
cntr A1 B1
xi A2 B2 yi1
xi1 A3 B3 p2
x A4 B4
p0 A5 B5 s1
c1 A6 B6 c2
p1 A7 B7
c3 A8 B8
s0 A9 B9

2-1. Le code réel en assembleur pour la boucle interne


LOOP : LDH .D1 *A4++,A2 ; xi

NOP 4

MPY .M1 A6,A2,A5 ; c1 * xi

NOP 1

LDH .D1 *A4,A3 ; xi+1

NOP 4

MPY .M1X B6,A3,A7 ; c2 * xi+1

NOP 1

ADD .L1 A5,A7,A9 ; c1 * xi + c2 * xi+1

MPY .M2X A8,B2,B3 ; c3 * yi

NOP 1

ADD .L2X B3,A9,B5 ; c1 * xi + c2 * xi+1 + c3 * yi

SHR .S2 B5,15,B2 ; yi+1

STH .D2 B2,*B4++ ; store yi+1

[A1] SUB .L1 A1,1,A1 ; decrement loop counter

[A1] B .S1 LOOP ; branch to loop

NOP 5

2-2. Nombre de cycles : (27 * 100) = 270 cycles


3) Faire le graphe de dépendances (DEPENDENCY GRAPH).

4) Faire la table d’ordonnancement des instructions (SCHEDULING TABLE)

Cycle .D1 .D2 .M1 .M2 .L1 .L2 .S1 .S2


1 LDH LDH
2
3 SUB
4 B
5
6 MPY MPY
7 ADD ADD
8 MPY
9 SHR
10 STH

Vous aimerez peut-être aussi