Compare commits

..

2 commits
obj1 ... master

Author SHA1 Message Date
ad0e3c6f2a Mise à jour de l'avancement 2020-05-29 16:31:43 +02:00
keplyx
2ba82733dc Amélioration du readme 2020-05-29 11:43:36 +02:00
3 changed files with 50 additions and 94 deletions

View file

@ -2,40 +2,10 @@
Groupe: Yohan Simard, Arnaud Vergnet
**Chaque projet contient des commentaires pour faciliter la compréhension du code.**
## 1.1 Signal carré de précision
**Partie terminée et fonctionnant comme attendu.** Pour tester, ouvrir le fichier `Project.uvprojx` dans le dossier **1.1** puis suivre les étapes suivantes :
* Compiler le projet
* Lancer le mode Debug
* Ouvrir le logic analyser. Tout devrait être préconfiguré.
* Appuyer sur run et observer le signal carré dans le logic analyser.
## 2.1 Préliminaire : Tables trigo
**Partie terminée et fonctionnant comme attendu.** Pour tester, ouvrir le fichier `Project.uvprojx` dans le dossier **2.1** puis suivre les étapes suivantes :
* Compiler le projet
* Lancer le mode Debug
* Ouvrir la **Watch Window 1**. Vous devrez y trouver les variables `max` et `min`.
* Appuyer sur run et observer les valeurs de ces deux variables. Elles devraient être autour de 32767, soit 1 en format virgule fixe 1.15.
## 2.2 Calcul DFT
**Partie terminée et fonctionnant comme attendu.** Cette partie à été testée avec les [jeux de test officiels](https://noullet-gei.gitlab.io/asm/BE/TEST_DFT/test_DFT.7z) Pour tester, ouvrir le fichier `Project.uvprojx` dans le dossier **2.2** puis suivre les étapes suivantes :
* Choisir une fonction du jeu de test officiel et copier son contenu dans le fichier `calcul_dft.s`, sous le label `TabSig`.
* Si le signal choisi ne possède pas 64 points, changez la variable `N` dans le fichier `principal.c` par le nombre de points du signal choisi.
* Compiler le projet
* Lancer le mode Debug
* Ouvrir la **Watch Window 1**. Vous devrez y trouver la variable `resultats`, un tableau contenant le résultat de la DFT du signal choisi pour k variant de 0 à N-1.
* Appuyer sur run et vérifier que les résultats correspondent bien à ceux attendus par le test.
## Challenge
Cette partie se comporte comme la précédente (2.2). La procédure de test est donc identique. Nous avons ici cherché à optimiser en vitesse (nombre de cycles) notre calcul de DFT.
## Avancement
* **Objectif 1** - Terminé
* **Objectif 2** - Terminé
* **Objectif 3** - Terminé
* **Objectif 4** - Terminé
Ce dépot contient une branche pour chaque objectif (obj1, obj2, ...). Chacune de ces branches contient des dossiers ne comportant que les fichiers nécessaires au lancement des différents projets. Un readme est aussi disponible, expliquant les procédures de test.

View file

@ -157,6 +157,38 @@
<Bp>
<Number>0</Number>
<Type>0</Type>
<LineNumber>38</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134218234</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>.\Src\calcul_dft.s</Filename>
<ExecCommand></ExecCommand>
<Expression>\\CHTI\Src/calcul_dft.s\38</Expression>
</Bp>
<Bp>
<Number>1</Number>
<Type>0</Type>
<LineNumber>0</LineNumber>
<EnabledFlag>0</EnabledFlag>
<Address>134218136</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename></Filename>
<ExecCommand></ExecCommand>
<Expression>0x08000198</Expression>
</Bp>
<Bp>
<Number>2</Number>
<Type>0</Type>
<LineNumber>10</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134218152</Address>
@ -170,38 +202,6 @@
<ExecCommand></ExecCommand>
<Expression>\\CHTI\Src/principal.c\10</Expression>
</Bp>
<Bp>
<Number>1</Number>
<Type>0</Type>
<LineNumber>7</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134218128</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>.\Src\principal.c</Filename>
<ExecCommand></ExecCommand>
<Expression>\\CHTI\Src/principal.c\7</Expression>
</Bp>
<Bp>
<Number>2</Number>
<Type>0</Type>
<LineNumber>52</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134218270</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>.\Src\calcul_dft.s</Filename>
<ExecCommand></ExecCommand>
<Expression>\\CHTI\Src/calcul_dft.s\52</Expression>
</Bp>
<Bp>
<Number>3</Number>
<Type>0</Type>

View file

@ -4,48 +4,34 @@
N equ 64
; vitesse initiale : 1726
; vitesse actuelle : 1101
; vitesse actuelle : 1119
dft proc
; r0 = x (signal), r1 = k
push {r4, r5, r6, r7, r8, r9}
ldr r2, =TabCos
ldr r3, =TabSin
mov r4, #0 ; r4 = i
mov r5, #0 ; r5 = ik
; première itération de la boucle
ldrh r6, [r0], #2 ; r6 = x[i] (puis mise à jour de r0) | format 4.12
mov r7, #32767 ; r7 = cos [ik%N] | format 1.15
mov r8, #0 ; r8 = sin [ik%N] | format 1.15
mul r9, r6, r7 ; r9 = x[i] * cos[ik%n] | format 5.27
mul r12, r6, r8 ; r12 = x[i] * sin[ik%n] | format 5.27
add r5, r1 ; r5 = (i-1)k + k
and r5, #N-1 ; r5 = r5 % 64
mov r4, #1 ; r4 = i = 1
mov r9, #0 ; r9 = résultat réel
mov r12, #0 ; r10 = résultat imaginaire
deb_somme ldrh r6, [r0], #2 ; r6 = x[i] (puis mise à jour de r0) | format 4.12
ldrsh r7, [r2, r5, LSL #1] ; r7 = cos [ik%N] | format 1.15
ldrsh r8, [r3, r5, LSL #1] ; r8 = sin [ik%N] | format 1.15
mla r9, r6, r7, r9 ; r9 += x[i] * cos[ik%n] | format 5.27
mla r12, r6, r8, r12 ; r12 += x[i] * sin[ik%n] | format 5.27
add r5, r1 ; r5 = (i-1)k + k
and r5, #N-1 ; r5 = r5 % 64
add r4, #1 ; on incrémente i
cmp r4, #N-1
bne deb_somme
; dernière itération de la boucle (pour éviter les 4 instructions inutiles à la fin)
ldrh r6, [r0] ; r6 = x[i] | format 4.12
deb_somme ldrh r6, [r0, r4, LSL #1] ; r6 = x[i], LSL #1 pour faire ×2 car chaque valeur est sur 2 octets | format 4.12
ldrsh r7, [r2, r5, LSL #1] ; r7 = cos [ik%N] | format 1.15
ldrsh r8, [r3, r5, LSL #1] ; r8 = sin [ik%N] | format 1.15
mla r9, r6, r7, r9 ; r9 += x[i] * cos[ik%n] | format 5.27
mla r12, r6, r8, r12 ; r10 += x[i] * sin[ik%n] | format 5.27
add r5, r1 ; r5 = (i-1)k + k
and r5, #N-1 ; r5 = r5 % 64
add r4, #1 ; on incrémente i
cmp r4, #N ;
bne deb_somme
; etat des registres : r0 = x, r1 = k, r9 = Re, r10 = Im, autres libres
smull r2, r0, r9, r9 ; (r2,r0) = Re(k)² | format : 10.54
smlal r2, r0, r12, r12 ; (r2,r0) = Re(k)² + Im(k)² | format : 10.54
pop {r4, r5, r6, r7, r8, r9}