DSP Resume PDF
DSP Resume PDF
DSP Resume PDF
Sommaire
Introduction
I) Implmentation dun filtre IIR sur DSP
I.1) Forme directe
I.2) Forme canonique
I.3) Filtres en cascade
II) Implmentation de la TFR (Transforme de Fourier Rapide) sur DSP
Annexe 1 : Programme de TFR sur DSP56303
Annexe 2 : Arithmtique des DSP
Annexe 3 : Utilisation du DSP56303
1
1
1
5
6
7
9
12
19
Introduction
Un DSP traite le signal chantillon par chantillon, et non pas par blocs comme dans la plupart
des programmes tournant sur PC. Ceci est permis par le fait que le processeur est ddi la tche de
traitement du signal.
Le DSP utilis ici est le 56303 de Motorola. Le signal est chantillonn et mmoris sur 24 bits,
et le mode de codage est la virgule fixe. Ce mode permet de coder des valeurs dcimales entre 1 et
+0,99999. Il ncessite donc de grer les dpassements de capacit rsultant des oprations de
calcul, avant mmorisation ou envoi en sortie (au convertisseur numrique-analogique). Des notions
darithmtique susceptibles daider la comprhension du fonctionnement du DSP sont donns en
annexe ("Arithmtique des DSP"), ainsi que des informations spcifiques au DSP utilis
("Utilisation des DSP").
Ce document aborde limplantation des algorithmes de filtrage numrique dans ce DSP, ainsi
que limplantation de la Transforme de Fourier Rapide (TFR).
Une des conditions de stabilit dun filtre du 2nd ordre tant b1max=2 (voir paragraphe sur la
modlisation de filtres analogiques), on est confront un problme dans le cas dun codage en
virgule fixe (qui ne permet de coder que des valeurs comprises entre 1 et +1).
Une mthode consiste diviser tous les coefficients par 2 avant codage. On retrouve le vrai
rsultat de traitement en multipliant lchantillon de sortie par 2 la fin (ce qui sera ralis
facilement, par un dcalage logique dun bit vers la gauche de la donne). En effet, la relation
entre/sortie temporelle peut scrire :
S(n)=2[a0/2e(n)+ a1/2e(n-1)+]
Un exemple dorganisation de la mmoire, pour les coefficients et les chantillons mmoriser,
pourrait tre :
coefficients dans mmoire X, pointe par pointeur dadresse R0 (associ M0 et N0) ;
chantillons dans mmoire Y, pointeurs dadresse R1 pour les entres et R2 pour les sorties.
Algorithme
Lalgorithme implmenter est le suivant :
Rpter indfiniment
Attente dun nouvel chantillon e(n) dans le CAN
Traitement : calcul du nouvel chantillon de sortie s(n)
Mise jour des pointeurs circulaires (remplacer s(n-2) par s(n), et remplacer e(n-2) par e(n))
Envoyer s(n) en sortie du CNA
X0,Y0,A
A=A+X0Y0 ;
X:(R0)+,X0
Y:(R1)+,Y0
=move X:(R0)+,X0
X0=X pointe par R0 ;
R0=R0+1 ;
=move Y:(R1+),Y0
Y0=Y pointe par R1
R1=R1+1
chantillons dans mmoire Y, registres dadresse R1 pour les entres et R2 pour les
sorties.
equ
equ
0.0001/2
0.0002/2
equ
equ
equ
..
..
..
Etape 2 : rserver des emplacements en mmoire pour les coefficients et les chantillons
coef
org
dsm
X:$0
5
en
sn
org
dsm
dsm
Y:$0
2
2
X :coef
a0,a1,a2,b1,b2
; coef quivalent $0
; 5 cases mmoire
#coef,R0
#4,M0
#en,R1
#1,M1
#sn,R2
#1,M2
A
#2,fin_raz
A,Y :(R1)+
A,Y :(R2)+
; A=0
; rpter 2 fois jusqu fin_raz
; en=0
; sn=0
fin_raz
X:(R0)+,X0
; X0=a0
A,Y1
X0,Y1,A
X:(R0)+,X0
Y:(R1)+,Y0
X0,Y0,A ;
X:(R0)+,X0
Y:(R1),Y0
X0,Y0,A
X:(R0)+,X0
Y:(R2)+,Y0
-X0,Y0,A
X:(R0)+,X0
Y:(R2),Y0
-X0,Y0,A
; Y(1)=e(n)
; A=a_0.e(n)
; X0=a_1
; Y0=e(n-1)
; A=A+a_1.e(n-1)
; X0=a_2
; Y0=e(n-2)
; A=A+a_2.e(n-2)
; X0=b_1
; Y0=s(n-1)
; A=A-b_1.s(n-1)
; X0=b_2
; Y0=s(n-2)
; A=A-b_2.s(n-2)=s(n)/2
Y1,Y:(R1)
A
X:(R0)+,X0
A,Y:(R2)
rts
X0,Y0,A
A=A+X0Y0 ;
X:(R0)+,X0
Y:(R4)+,Y0
=move X:(R0)+,X0
X0=X pointe par R0 ;
R0=R0+1 ;
=move Y:(R4+),Y0
Y0=Y pointe par R4
R4=R4+1
A,Y1
X0,Y1,A
X0,Y0,A
X0,Y0,A
-X0,Y0,A
-X0,Y0,A
A
A,Y:(R5)
X:(R0)+,X0
X:(R0)+,X0
X:(R0)+,X0
X:(R0)+,X0
Y1,Y:(R4)
X:(R0)+,X0
Y:(R4)+,Y0
Y:(R4),Y0
Y:(R5)+,Y0
Y:(R5),Y0
;Y(1)=e(n)
;A=a_0.e(n) ; X0=a_1 ; Y0=e(n-1)
;A=A+a_1.e(n-1) ; X0=a_2 ; Y0=e(n-2)
;A=A+a_2.e(n-2) ; X0=b_1 ; Y0=s(n-1)
;A=A-b_1.s(n-1) ; X0=b_2 ; Y0=s(n-2)
;A=A-b_2.s(n-2)=s(n)/2 ; e(n) dans e(n-2)
;A=2.A=s(n) ; X0=a_0
;s(n) dans s(n-2)
rts
X:(R0)+,X0
move
mpy
mac
mac
mac
macr
asl
move
A,Y1
X0,Y1,A
X0,Y0,A
X0,Y0,A
-X0,Y0,A
-X0,Y0,A
A
A,Y:(R2)
; 1T
filtrage
X:(R0)+,X0
X:(R0)+,X0
X:(R0)+,X0
X:(R0)+,X0
Y1,Y:(R1)
X:(R0)+,X0
Y:(R1)+,Y0
Y:(R1),Y0
Y:(R2)+,Y0
Y:(R2),Y0
; 1T
; 1T
; 1T
; 1T
; 1T
; 1T
; 1T
; 1T
rts
Total : 16 cycles dhorloge, un peu moins de 200ns 80Mhz (priode de 12,5ns). Cette dure
est comparer avec la condition de temps rel : le traitement doit seffectuer dans une dure
infrieure la priode dchantillonnage, soit par exemple environ 21 s 48kHz. Le rapport entre
ces 2 dures est denviron 170.
X:coef
b_1,b_2,a_0,a_1,a_2
move
move
move
move
#wn,R0
#1,M0
#coef,R4
#4,M4
clr
do
move
A
#2,fin_raz
A,Y:(R0)+
;A=0
;mise a zero de la zone "wn"
;A=0 dans "wn"
.
init_filtre
fin_raz
rts
.
filtrage
asr
move
mac
move
mac
asl
move
move
mpy
move
mac
move
mac
move
asl
rts
A
X:(R0)+,X0
-X0,Y0,A
X:(R0)+,X0
-X0,Y0,A
A
A,X1
Y:(R4)+,Y0
X1,Y0,A
X:(R0)+,X0
X0,Y0,A
X:(R0),X0
X0,Y0,A
X1,X:(R0)
A
Y:(R4)+,Y0
Y:(R4)+,Y0
Y:(R4)+,Y0
Y:(R4)+,Y0
coef
org
dsm
Y:$0
2
org
dc
..
move
move
move
move
move
clr
rep
move
move
move
Y:coeff
a0, b1, b2, a1, a2
mpy
mac
mac
mac
macr
X0,Y1,A
-X0,Y0,A
-X1,Y0,A
X0,Y0,A
X1,Y0,A
#coef,R5
#4,M5
#wn,R1
#2,N1
#1,M1
A
#2
A,X :(R1)+
Y:(R5)+,X0
A,Y1
filtrage
X:(R1)+,X0
X:(R1),X1
X0,X:(R1)A,X:(R1)+
Y:(R5)+,Y0
Y:(R5)+,Y0
Y:(R5)+,Y0
Y:(R5)+,Y0
Y:(R5)+,X0
; A=a0.e(n)
; A=A-b1.w(n-1)
; A=A-b2.w(n-2)
; A=A+a1.w(n-1)
; A=A+a2.w(n-2)
;X0=w(n-1)
;X1=w(n-2)
;w(n-1)->w(n-2)
;w(n)->w(n-1)
;Y0=b1
;Y0=b2
;Y0=a1
;Y0=a2
;X0=a0
rts
org
dsm
dsm
Y:$0
4
4
#en,R4
#3,M4
#sn,R5
#3,M5
De plus il faut se dplacer diffremment dans ces tampons. Il faut donc utiliser les registres
dincrmentation Ni associs aux registres pointeurs Ri. Par consquent on ajoute au programme du
filtre unique les lignes suivantes :
move
move
#2,N4
#2,N5
Etape 5 : Routine de filtrage : les parties ajoutes ou modifies sont mises en gras.
filtrage
do #2,fin_fltr
move A,Y1
mpy X0,Y1,A
mac X0,Y0,A
X:(R0)+,X0
X:(R0)+,X0
Y:(R4)+,Y0
Y:(R4),Y0
X:(R0)+,X0
X:(R0)+,X0
Y1,Y:(R4)+N4
asl A
move A,Y:(R5)+N5
fin_fltr
rts
Y:(R5)+,Y0
Y:(R5),Y0
X:(R0)+,X0
2k
Re (WNk ) = cos ; Im (WNk ) = sin ; =
N
(1)
(2)
Re(B)=Re(A)-Re(B).cos-Im(B).sin
Im(B)=Im(A)-Im(B).cos+Re(B).sin
(3)
(4)
(MAC)
(MACR)
(SUBL)
b=Re(A)-Re(B).cos
Re(A)=b+Im(B).sin
Re(B)=2.Re(A)-Re(A)
(MAC)
(MACR)
(SUBL)
Test de lalgorithme
On met quelques priodes de sinus en mmoire. Le rsultat de la TFR doit tre 0 partout sauf
pour la composante correspondant la frquence du signal. Le module de cette composante est
alors gal lamplitude du signal.
Les chantillons dentre sont stocks ladresse data :
- Partie relle en mmoire X
- Partie imaginaire en mmoire Y
-
ladressage en mode bits inverss est lun des 3 modes dadressage du DSP
ce mode se programme de la manire suivante :
- registre Mi charg avec 0
- registre Ni charg avec le nombre de bits inverser
Un exemple de programme : copie dune zone de mmoire dans une autre avec adressage en
bits inverss pourrait tre (voir galement programme bit_rev.asm) :
fin1
move
move
move
move
do
move
move
nop
#data, R3
; R3 pointe sur une zone data pralablement initialise
#data2, R4
#0, M3
; programmation du mode bit reverse
#nb_pts, N3
; renversement binaire sur nb_pts adresses
#nb_pts, fin1
x :(R3)+N3,x0
x0,x :(R4)+
#@cvi(@log(points)/@log(2)+0.5),_fin_pass
do
n2,_fin_grpe
n0,_fin_papi
-x1,y0,b
y:(r1)+,y1
macr
x0,y1,b
subl
b,a
mac
x1,x0,b
x:(r1),x1
macr
y1,y0,b
x:(r0)+,a
subl
b,a
a,x:(r5)+
x:(r0),b
b,x:(r4)+
y:(r0),a
b,y:(r4)
a,y:(r5)
y:(r0),b
_fin_papi
;mises jour pour papillons
move x:(r0)+n0,x1 y:(r4)+n4,y1
move
_fin_grpe
move
lsr b
move
lsl a
move
move
_fin_pass
endm
a,x:(r5)+n5 y:(r1)+n1,y1
n0,b1
n2,a1
b1,n0
a1,n2
points,coef
points,coef
; Programme principal
;**********************************
org
p:$100
START
main movep #$040003,x:M_PCTL
movep #$012421,x:M_BCR
ori
#3,mr
movec #0,sp
move #0,omr
fft
points,data,coef
10
jsr
jmp
end
module
*
11
ds
ds
equ
ds
ds
ds
ds
equ
ds
ds
ds
ds
*
1
1
1
1
*
1
1
1
1
1
1
p:$100
#$040003,X:M_PCTL
#$012421,X:M_BCR
#3,mr
#0,sp
#0,omr
#$40,r6
#-1,m6
ada_init
init_filtre
#2,X:M_SSISR0,*
#2,X:M_SSISR0,*
move
move
X:RX_BUFF_BASE,B
X:RX_BUFF_BASE+1,A
; receive left
; receive right
jsr
process_stereo
move
move
A,X:TX_BUFF_BASE
A,X:TX_BUFF_BASE+1
; transmit left
; transmit right
move
move
move
move
#TONE_OUTPUT,y0
Y0,X:TX_BUFF_BASE+2
#TONE_INPUT,y0
Y0,X:TX_BUFF_BASE+3
jmp
loop_1
include
include
'ada_init.asm'
'../prog/filtre_4.asm'
filtrage
loop_1
jset
jclr
echo
process_stereo
jsr
rts
end
12
en
sn
equ
equ
equ
equ
equ
0.00379/2
0.00758/2
0.00379/2
-1.81845/2
0.83362/2
org
dsm
X:$10
5
org
dc
X:coef
a_0,a_1,a_2,b_1,b_2
org
dsm
dsm
Y:0
2
2
org p:
init_filtre
move
move
move
move
move
move
clr
do
move
move
fin_raz
move
rts
#coef,R0
#4,M0
#en,R4
#1,M4
#sn,R5
#1,M5
A
#2,fin_raz
A,Y:(R4)+
A,Y:(R5)+
X:(R0)+,X0
filtrage
move
mpy
mac
mac
mac
macr
asl
move
A,Y1
X0,Y1,A
X0,Y0,A
X0,Y0,A
-X0,Y0,A
-X0,Y0,A
A
A,Y:(R5)
;Y(1)=e(n)
;A=a_0.e(n),
X0=a_1, Y0=e(n-1)
;A=A+a_1.e(n-1), X0=a_2, Y0=e(n-2)
;A=A+a_2.e(n-2), X0=b_1, Y0=s(n-1)
;A=A-b_1.s(n-1), X0=b_2, Y0=s(n-2)
;A=A-b_2.s(n-2)=s(n)/2, e(n)->e(n-2)
;A=2.A=s(n),
X0=a_0
;s(n) dans s(n-2)
X:(R0)+,X0
X:(R0)+,X0
X:(R0)+,X0
X:(R0)+,X0
Y:(R4)+,Y0
Y:(R4),Y0
Y:(R5)+,Y0
Y:(R5),Y0
Y1,Y:(R4)
X:(R0)+,X0
rts
13
Sommaire
1) Reprsentations des nombres
2) Codage binaire
3) Nombres signs
Signe-grandeur
Code complment 1
Code complment 2
4) Nombres rels
Virgule fixe
Format mixte
Virgule flottante
5) Conversions de formats
Dcimal vers binaire
Binaire vers dcimal
Fractionnaire vers binaire
Conversion hexa dcimal vers dcimal
Conversion dcimal vers hexadcimal
6) Rduction du nombre de bits du codage
Troncature
Arrondi
1
1
2
2
2
3
3
3
4
5
6
6
6
6
6
7
7
7
7
2) Codage binaire
Sur n bits, on peut coder 2n combinaisons possibles : de 0 2n -1.
Exemples :
- 1 bit : 21 =2 combinaisons de 0 21 -1=1
- 8 bits : 28 =256 combinaisons de 0 28 -1=255
- 16 bits : 216 =65536 combinaisons de 0 216 -1=65535
- etc
14
3) Nombres signs
A rsolution constante, des nombres peuvent tre reprsents par des valeurs positives
uniquement (nombre non signs) ou par des valeurs positives et ngatives (nombres signs).
Par exemple sur 8 bits, en reprsentation signe, un nombre peut varier de 128 +127 (en
complment 2, voir ci-dessous) ; en reprsentation non-signe, il peut varier de 0 255.
Il existe plusieurs reprsentations des nombres signs :
- signe-grandeur ;
- complment 1 ;
- complment 2.
Le plus souvent, le code utilis pour les nombres signs est le complment 2. On obtient le
complment 2 dun nombre en lui appliquant dabord le complment 1, puis en ajoutant 1.
Loppos dun nombre sobtient donc en calculant son complment 2.
Lintrt du code complment 2 est sa facilit de calcul, et le fait que la valeur 0 ne soit code
quune seule fois (ce qui nest pas le cas du complment 1). Toutes les oprations ncessaires pour
lobtenir (addition, soustraction, multiplication, division) peuvent tre ralises partir de
laddition, ralise par des additionneurs binaires.
Ce code est utilis dans les ordinateurs et la plupart des microcontrleurs, dont le DSP56303.
Signe-grandeur
Dans cette reprsentation, le bit de gauche est un bit de signe et les autres reprsentent la
grandeur.
Bit de signe : 0 nombre positif ; 1 -> nombre ngatif
Exemple :
5=1101
(pour la conversion de la reprsentation dcimale la reprsentation binaire, voir plus bas).
Code complment 1
Dans ce mode de reprsentation, les poids des bits vont sont 2n-1 , 2n-2 , 2n-3 , 20 , o n est le
nombre de bits.
Pour obtenir le complment 1 dun nombre, on inverse tous les bits de son code binaire et on
ajoute 1.
Exemple :
5=0101 ; complment 1 : 1010+1=5
La conversion binaire-vers-dcimal sobtient en ajoutant les poids des bits 1 (voir paragraphe
sur les conversions de formats, plus bas).
Exemple :
binaire=1010 dcimal= 23 +21 +1= 8+2+1= 5
Code complment 2
Les poids de bits sont les mmes quen complment 1.
On obtient le complment 2 en appliquant le complment 1 et en ajoutant 1.
15
Exemple :
Conversion inverse :
5=0101 5=1011
binaire=1011 dcimal= 23 +21 +20 =5
Autre exemple :
72=01001000
inversion : 10110111
+1 : 10111000
= 72
Les valeurs sont comprises entre (2n-1 ) et 2n-1 1.
Exemple : n=8 : valeurs comprises entre 27 = 128 et 27 1=127.
4) Nombres rels
Les nombres rels sont encore appels nombres fractionnaires. Ils possdent des chiffres
droite la virgule.
Virgule fixe
Dans ce mode de reprsentation, on a 1 bit de signe (bit de gauche) et les autres qui concernent
la partie fractionnaire. La virgule se situe donc droite de ce bit.
Comme dans le cas des nombres entiers, la signification du bit de signe est :
0 : le nombre est positif,
1 : le nombre est ngatif.
Dans ce mode on peut reprsenter des nombres compris entre 1 et +1, plus exactement 1 et
0,999999 , le nombre de 9 dpendant du nombre de bits.
Nombre de valeurs possibles sur n bits :
2n
Prcision :
2-(n-1)
Valeurs min et max :
min=-1,0 ; max=1-2-(n-1)
Poids des bits :
-20 , 2-1 , 2-2 , , 2-(n-1)
Exemple :
N=3
Nombre de valeurs possibles :
23 =8
Prcision :
2-(n-1)=1/2 n-1 =1/4=0,25
Valeurs min et max :
-1,0 et 1-2-(3-1)= 1-2-2 =1-1/22 =1-1/4=0,75
Les 8 valeurs sont :
-1,0 ; -0,75 ; -0,5 ; -0,25 ; 0 ; 0,25 ; 0,5 ; 0,75
16
n=3 ; binaire=111
D=-20 1+2-1 1+2-2 =-1+1/2+1/4=-1/4
n=16 ; binaire=0011 0011 0011 0011
D=2-2 +2-3 +2-6 +2-7 +2-10 +2-11 +2-14 +2-15
=0,25+0,125+0,01562+0,0078+
=0,3999.
Sur 24 bits (cas de la mmoire du DSP56303) :
Prcision :
2-23
Valeur min : tous les bits sont 0 sauf le bit de signe
-1=$800000
Valeur max : tous les bits sont 1 sauf le bit de signe
1-2-23 =$7FFFFF=0,99999988
Exemple : quel nombre reprsente $FFFFFF ?
Rponse : -20 +0,9999998=-1+0,9999998=-0,00000012 ; il sagit de la valeur ngative la plus
petite, qui est gale en valeur absolue la prcision.
Ce format est parfois not [I-Q] ; I dsigne la partie gauche de la virgule ; Q la partie droite.
Ici, le format est not [1-23] ou Q23.
Format mixte
Ce codage est virgule fixe, mais avec une partie entire qui peut tre suprieure 1.
Lintrt de ce format est de permettre de sortir de la plage [-1 ; +1], ce qui facilite les calculs.
Soit I le nombre de bits de la partie entire et Q le nombre de bits de la partie fractionnaire. La
correspondance entre le nombre dcimal et le nombre binaire est :
D=-2I-1 bI-1 +2I-2 bI-2 ++20 b0 +2-1 b-1 +2-2 b-2 +...+2-Qb-Q
Il est not [I, Q] ;
Dans le cas du DSP56303, les accumulateurs A et B comportent 56 bits. Le format est [9, 47] :
la partie entire comporte 9 bits et la partie fractionnaire 47 bits.
Ces accumulateurs sont constitus par la concatnation dun registre de 8 bits et 2 registres de
24 bits :
A=A2:A1:A0 et B=B2:B1:B0
Le bit le plus gauche est le bit de signe. Les poids des 8 bits de poids fort vont de 28 21 , et
non 27 20 comme dans la reprsentation habituelle 8 bits.
A2 : 28 21 ; A1 : 20 2-23 ; A0 : 2-24 2-47
17
La virgule se situe entre le bit de poids 20 et le bit de poids 21 . Cela permet de nutiliser que
lun des registres de 24 bits.
Exercice 1 : Dans le format mixte [9, 47], quel nombre reprsente $01FFFFFFFFFFFF ?
Rponse : 20 +2-1 +2-2 +...+2-46 =1+0,5+0,25+...=1,999999.....
Exercice 2 : Dans le format mixte [9, 47], comment coder 1 ?
Rponse : $FF800000000000
8
7
6
car -1=-2 +2 +2 +25 +...+21 +20 =-256+128+64+32+16+8+4+2+1
Virgule flottante
Lavantage de ce codage est de permettre de coder la fois des nombres sur de trs grandes
plages de valeurs sil sagit dentiers, et avec une grande prcision (beaucoup de chiffres aprs la
virgule) sil sagit de rels.
La position de la virgule est gre par lUAL. Il nest donc pas ncessaire de grer le
dpassement de capacit.
Le codage peut tre ralis sur 32 ou 64 bits. On parle respectivement de simple ou de double
prcision.
En simple prcision, ltendue des valeurs pouvant tre codes est :
1,2.10-38 3,4.1038
et en double prcision :
2,2.10-308 1,8.10308
Ces formats suivent la norme rfrence IEEE-754-1985.
La correspondance entre le nombre dcimal et le nombre binaire sobtient par la formule :
(-1)S(1+F)(2E-127 )
o S est le bit de signe, F la partie fractionnaire et E la partie entire.
Le principe du codage est le suivant :
1 bit de signe,
1 bit de signe
8 bits dexposant
23 bits de mantisse
Lexposant est biais : la valeur 127 est ajoute aux 8 bits pour quil soit toujours positif.
Double prcision (64 bits)
1 bit de signe
11 bits dexposant
52 bits de mantisse
Il existe galement la prcision tendue sur 80 bits, mais les modes les plus rpandus sont la
simple et la double prcision. En programmation C, ils correspondent aux types float et double
(respectivement).
18
5) Conversions de formats
Conversion dcimal vers binaire
La mthode est la suivante :
- on divise par 2 jusqu ce quon tombe sur un rsultat nul
- le reste vaut 0 ou 1 ; ce reste constitue ltat des bits successifs du poids faible vers le poids
fort
exemple : 14
14/2=7 (r=0) ; 7/2=3 (r=1) ; 3/2=1 (r=1) ; 1/2=0 (r=1)
rsultat : 1110
Conversion binaire vers dcimal
Si lon veut raliser la conversion inverse, on applique les poids au nombre et on ajoute 1. Ce
qui revient ajouter simplement les poids des bits 1.
exemple : 101=122 +021 +120 =5
Conversion fractionnaire vers binaire
Mthode :
- on multiplie la partie fractionnaire du nombre par 2 jusqu ce que le nombre de dcimales
soit atteint ou que la partie fractionnaire soit nulle
- la partie entire vaut 0 ou 1
- elle constitue successivement les bits du nombre binaire correspondant, du MSB au LSB
Exemple : 5,3 : 0,32=0,6 0 ; 0,62=1,2 1 ; 0,22=0,4 0 ; 0,42=0,8 0 ; etc
Rsultat : 101,0100
Conversion hexadcimal vers dcimal
2 mthodes :
1) on peut faire dabord la conversion hexadcimal vers binaire puis binaire vers dcimal
2) chaque valeur dcimale des chiffres hexa est multiplie par leur poids (1, 16, 256, 4096,)
Exemple : $7A=716+101=112+10=122
Conversion dcimal vers hexadcimal
On effectue des divisions successives par 16, et on multiplie la partie fractionnaire par 16. On
obtient ainsi des chiffres hexadcimaux des poids faibles aux poids forts.
Exemple : 250
250/16=15,625 0,62516=10 soitA
15/16=0,9375 0, 937516=15 soit F
rsultat : FA
19
Troncature
Cest la solution la plus simple. Elle consiste enlever les bits les moins significatifs.
Arrondi
Cette solution est meilleure dans la mesure o elle consiste arrondir la valeur la plus proche
de la valeur tronque, Elle consiste additionner 1 si la partie enleve est suprieure la moiti du
bit de poids le plus faible de la partie garde, 0 sinon. Cela revient regarder la valeur du bit de
poids le plus fort de la partie enleve. Sil est gal 1, on ajoute 1 la partie garde ; sil est gale
0, on ne rajoute rien. Il suffit donc dajouter le bit de poids le plus fort de la partie enleve au mot
gard. Cet arrondi est appel arrondi au plus prs.
Le cas o, dans la partie enleve, seul le bit de poids le plus fort est 1 et tous les autres 0, est
un cas particulier. Il est quivalent 0,5 par exemple : faut-il larrondir 0 ou 1 ? On peut dcider
arbitrairement dune des 2 possibilits. Dans les DSP56xxx, dans ce cas on ajoute un 1 si le bit de
poids le plus faible de la partie garde est 1 (ce qui revient arrondir la valeur suprieure), sil
est 0 on ne fait rien (arrondi la valeur infrieure).
20
Sommaire
I) Carte dvaluation DSP56303EVM
I.1) Description succinte
I.2) Utilisation
1
1
1
II) DSP56303
II.1) Principales caractristiques
II.2) Architecture
II.3) Formats utiliss pour le codage des donnes
II.4) Modes dadressage
II.5) Programmation
II.5.1) Instructions
II.5.2) Caractres et directives dassemblage
2
2
3
4
4
7
7
10
Cette carte a t dvelopp par Motorola. Elle comporte un Codec (codeur-dcodeur) audio 16
bits de Crystal Semiconductor (Cirrus) de rfrence Crystal CS4215. Il sagit dun composant qui
intgre un CAN et un CNA. Ses principales caractristiques sont :
I.2) Utilisation
Avant toutes choses il faut alimenter le kit dvaluation, en utilisant un bloc dalimentation
rgl sur 9V. Bien vrifier ce rglage ainsi que la polarit correcte avant tout branchement.
Ensuite connecter le kit un port srie COM du PC par lintermdiaire dun cble 9 broches
(DB9-DB9).
Voici les diffrentes tapes pour gnrer un fichier binaire, le transfrer dans le DSP et
lexcuter :
Assemblage, tlchargement et excution
-
renommer les programmes que lon est amen modifier, pour tre sr de conserver toujours la
version initiale).
Assembler le programme .asm laide de la commande :
asm56300 a b g l pass.asm
On peut galement crer un fichier batch (par exemple "asm.bat") laide dun diteur de texte,
comportant la ligne de commandes :
asm56300 a b g l %1
II) DSP56303
II.1) Principales caractristiques
Interprtation : le processeur est spcialis dans lopration MAC et les transferts parallles,
contrairement certains autres architecture CISC.
22
II.2) Architecture
Accumulateurs A et B
Ils comportent 56 bits, et sont constitus par la concatnation de 3 registres : un de 8 bits (
gauche) et 2 de 24 bits. Notation : A=A2:A1:A0 ; B=B2:B1:B0
Le bit le plus gauche est le bit de signe. Les poids des 8 bits de poids fort vont de 28 21 , et
non 27 20 comme dans la reprsentation habituelle 8 bits.
A2 : 28 21 ; A1 : 20 2-23 ; A0 : 2-24 2-47
La virgule se situe entre le bit de poids 20 et le bit de poids 21 . Cela permet de nutiliser que
lun des registres de 24 bits.
Exemple
00000000 0,01100110011001100110011 001100110011001100110011
$ 00 333333 333333 = 0,399999999999999
Lavantage de ce format est dtre mixte : virgule fixe mais permettant de coder des valeurs
suprieures 1, ce qui permet de grer les dpassements de capacit pouvant se produire dans le cas
du format virgule fixe. La gamme des valeurs est [-256, +256-2-47 ].
Les registres 24 bits sont usage gnral : ils peuvent tre utiliss pour les transferts avec la
mmoire et avec dautres registres. Par contre, les rsultats des multiplications et des oprations
arithmtiques et logiques ne peuvent tre quun registre 56 bits (A ou B).
Registres X et Y
Comme A et B il sagit de registres usage gnral, mais utiliss comme oprandes des
multiplications et oprations arithmtiques et logiques, pas pour les rsultats. Ils comportent 48 bits
et sont constitus par la concatnation de 2 registres de 24 bits.
X=X1:X0 ; Y=Y1:Y0
Mmoire : zones X et Y
La mmoire utilise des mots de 24 bits. Elle est au format virgule fixe [1, 23].
Les accumulateurs A et B possdant 56 bits, il y a une perte dinformation lors du transfert en
mmoire des valeurs rsultant dun calcul et prsentes dans ces accumulateurs. Cette perte peut tre
minimise en utilisant un transfert avec arrondi.
des
incrmentations/dcrmentations
des
registres
dadresses,
#$260004, X :PCTL
24
Adressage immdiat
La valeur charger dans un registre est donne directement en argument. On utilise le symbole
#. Cette opration prend 2 cycles machine.
Il nest pas possible de raliser un adressage immdiat avec la mmoire, ce qui signifie quon
ne peut pas copier une valeur directement en mmoire. On doit obligatoirement passer par un
registre.
Dans les oprations avec certains registres, ce sont les poids faible qui sont concerns, pour
dautres ce sont les poids forts :
A0, A1, A2, B0, B1, B2, Ni, Mi, Ri (i[0 ; 7])
A, B, Y0, Y1, X0, X1, X, Y
: poids faibles
: poids forts
sur 24 bits :
move
#$ABC,A0
move
#$ABC,X0
ou
sur 56 bits
move
sur 24 bits
move
#$FF, A1
move
#$FF, Y1
#$FF, A
; $FF dans les poids forts de A1, 0 dans le reste sauf A2=$FF
sur 56 bits
move
Adressage indirect
Utilis pour les changes entre registres et mmoire.
Lcriture ou la lecture dune valeur en mmoire ncessite 2 instructions.
Exemples
move
A1,X:(R0)
move
A1,X:(R0)+
A1,X:(R0)+N0
move
A1,X: -(R0)
Adressage absolu
Pour les changes entre la mmoire et les registres. Ladresse de la case mmoire concerne est
donne directement en argument.
Exemple
move
X:$3393,B0
Traitements parallles
Lorganisation matrielle des DSP de la famille 56300, avec des communications par bus, leur
permet deffectuer plusieurs oprations en parallle, en une seule instruction :
1 multiplication 24 bits 24 bits
1 addition 56 bits
2 dplacements de donnes
2 mises jours de pointeurs
Exemple
mac
X0,Y0,A
A=A+X0Y0 ;
X:(R0)+,X0
Y:(R1)+,Y0
=move X:(R0)+,X0
X0=X pointe par R0 ;
R0=R0+1 ;
=move Y:(R1+),Y0
Y0=Y pointe par R1
R1=R1+1
Mode scaling
Les donnes sont multiplies par 2 lors de leur transfert en mmoire. Ceci permet dviter de
perdre des donnes quand le contenu est suprieur 1.
Programmation : on positionne 1 le 4e bit partir de la droite du registre MR :
ori
#8, MR
II.5) Programmation
Quelques instructions et directives dassemblage couramment utilises sont donnes ci-dessous.
Les instructions sont traites par le DSP, les directives dassemblage le sont par lassembleur : elles
correspondent des oprations effectues avant lancement du programme.
Cette liste est non exhaustive. Pour la syntaxe exacte et les restrictions dutilisation, voir la
documentation constructeur.
II.5.1) Instructions
26
Oprations arithmtiques
Multiplication et accumulation
mac
Idem mpy mais additionne ou soustrait le rsultat au contenu actuel de laccumulateur donn en
3e argument.
Exemple
mac X0,X0,A
mac -X0,X0,A
macr
; A=A+X0*X0
; A=A-X0*X0
: Multiplication
mpy
Les transferts parallles sont possibles. Multiplication du 1er argument avec le 2e, rsultat dans
le 3e. 1er et 2e arguments : 24 bits ; 3e : 56 bits.
Exemples
mpy X0,X0,A
mpy X0,X0,A
X:(R0)+,X0
; A=X0*X0
; A=X0*X0, X0=X+R0, Y0=Y+R1
Y:(R1)+,Y0
mpyr
rnd
Opration darrondi
sub
Substract
Exemple
sub A,B
subl
; B=B-A
Exemple
subl B,A
; A=A*2-B
Oprations logiques
ori
Syntaxe
ORI #xx, D
; D registre systme
27
Exemple
ORI #$8, MR
not
Complmentation logique
Syntaxe
NOT D
or
; D accumulateur 24 bits
OU logique
Syntaxe
OR S,D
Transferts de donnes
move
Copie dun registre vers un autre, ou transfert entre registre et mmoire. Les transferts entre
la mmoire et les registres utilisent les registres dadresse.
Exemples
move
move
move
move
move
move
move
move
movep
X0, A1
#10,A1
#$10,A1
#$10,OMR
X:(R0),X0
X:(R0)+,X0
X0,X:(R0)+
A,Y1
Exemple
movep #$260004, X:PCTL
lua
Exemple
lua (R0)+1,R1
Boucles
do
rpte les lignes dinstructions suivantes, jusquau label indiqu en 2e argument, un nombre de
fois gal la valeur donne en 1er argument
Exemple
do
boucle1
#10, boucle1
28
idem do mais avec pour seul argument le nombre de rptitions ; la rptition ne concerne que
la ligne suivante.
rep
Saut
"jump to subroutine" : saut (inconditionnel) la routine dfinie par la label donn en argument.
jsr
Exemple
jsr
filtrage
rts
jmp
filtrage
Exemple
jmp
(R1+N1)
Fonctions mathmatiques
cvi
log
cos
cosinus
sinus
sin
dlimiteur de commentaires
@
#
dlimiteur de fonction
oprateur dadressage immdiat
Exemple
move
#12,X0
#$12,X0
Directives
org
end
rts
fin de routine
Le dbut de la routine est indiqu par un label.
dfinition dun symbole (=une constante)
equ
Exemple
a0
PCTL
dc
equ
equ
0.00379/2
X:$FFFD
define constant
Pour copier des constantes en mmoire
Exemple
org
dc
ds
Y:$0
a0, b1, b2, a1, a2
define storage
Rserve des emplacements en mmoire
Exemple
org
coef
Y:$0
dsm
dup
Fin de macro
set
Exemple
compt
set
compt+1
31