Introduction aux DSP

Visiteurs : 

Les DSP (Digital Signal Processors) sont, comme leur nom l'indique, des processeurs dédiés au traitement des signaux numériques.

Au sommaire

Spécificités des DSP

Caractéristiques principales

Notion de virgule fixe ou flottante

Conseils de programmation

Sites consacrés aux DSP

Spécificités des DSP -   


Les particularités de ces puces, par rapport aux processeurs généraux (Intel, Cyrix, AMD...) sont, en général :

Ces différents atouts ne se retrouvent pas sur tous les DSP. Les DSP bas de gamme ne disposant, en général que d'une architecture Harvard, d'instructions adaptées et de mode d'adressage à inversion de bits.

Caractéristiques principales des DSP -   


Ce qui distingue deux DSP différents sont, pour les caractéristiques principales :

Le choix d'un DSP pour une application particulière sera conditionné par le coût relatif du DSP par rapport au BOM (Bill of Material) de l'application, et de la complexité des opérations à effectuer. Il est clair qu'un DSP introduit dans un appareil grand public est plus souvent à virgule fixe. Si les coûts de développement d'une application en virgule fixe sont beaucoup plus importants qu'un design en virgule flottante, les volumes viendront amortir cette dépense... Il faut l'espérer.

Pour ce qui à trait à la vitesse, on peut se poser la question en ces termes:
"Quel est le flux de données maximum à traiter ? Puis-je déplacer le problème de vitesse en problème de mémoire ?"
En effet, pour certaines applications, on n'aura pas besoin d'une grande vitesse, à condition d'avoir de la mémoire. Les algorithmes seront plus simples. Il suffit de prendre l'exemple suivant pour se rendre compte.
Pour implémenter un algorithme de traitement de signal adaptatif, nous pouvons utiliser un algorithme simple stable du type LMS qui ne nécessite pas de grandes ressources en terme de calcul. En revanche, un nombre élevé de coefficients sera nécessaire pour parvenir à converger rapidement. En utilisant un algorithme plus complexe du type RMS, le nombre de coefficients du filtre sera beaucoup moins élevé, mais les quantités de calculs par coefficients seront plus importantes.
Le travail du concepteur sera alors dans le choix d'un compromis, et éventuellement, d'astuces de programmation - voire même en assembleur - pour parvenir à ses fins en réduisants les coûts, en fonction de la stratégie générale de son entreprise.

Virgule fixe / Virgule flottante -   


Deux familles principales de DSP se partagent le marché. Les premiers sont les DSP à virgule fixe, qui nécessitent une attention accrue du développeur lors de la programmation. Les seconds sont les DSP à virgule flottante, aisés d'utilisation mais plus onéreux.

Aperçu des contraintes de programmation d'un DSP fixe

Dans un DSP à virgule fixe, c'est au programmeur de connaître à tout instant l'état de ses opérateurs. Supposons que nous voulions faire le produit de deux nombres a et b.
Les questions que devra se poser le programmeur sont :

1. Quelles sont les dynamiques réelles des nombres a et b ?
Réponse : - 3.5 < a < 3.5 et 0 < b < 100

2. Quelle est la dynamique du résultat P = ab ?
Réponse : -350 < P < 350

3. Quelle est la dynamique de mon DSP ?
Réponse : 16 bits

4. Quelle est la précision que je désire ?
Réponse : Le maximum à condition de coder mes nombres sur 16 bits.

5. Alors ? Quelles solutions ?
Réponse :

Et bien, tout d'abord, a peut-être codé en format Q2.13, b peut-être codé en format Q7.8.

Qi.f signifie : coder la partie entière du nombre avec i bits, coder la partie fractionnaire avec f bits. i+f=15, il reste ainsi 1 bit pour coder le signe.

L'exemple ci-dessus représente un codage Q7.8 pouvant coder des nombres compris entre -128 et +127.99609375.

Pour retrouver ce résultat, il suffit d'appliquer la formule suivante :

avec i=7 et f=8.

3 peut être codé avec 2 bits, il reste donc 13 bits pour coder la partie fractionnaire de a. 100 peut être codé sur 7 bits, laissant ainsi 8 bits pour la partie fractionnaire de b.

Une multiplication d'un nombre codé en Qi.f par un nombre codé en Qi'.f' donne un résultat dont le codage est Qi+i'.f+f' avec...2 bits de signe.

L'accumulateur d'un DSP sur D bits a une longueur minimale de 2D bits. Ainsi, dans notre exemple, le résultat de la multiplication sera en Q9.21.A présent, il est judicieux de se référer à la condition 4 : à savoir, avoir le maximum de précision tout en restant sur 16 bits.350 doit être codé au minimum sur 9 bits. Il reste ainsi 6 bits pour coder la partie fractionnaire du résultat.

Application numérique :

Prenons a = 3.5 codé 0 1 1 . 1 0 0 0 0 0 0 0 0 0 0 0 0 en Q2.13 et b = 70.25 codé 0 1 0 0 0 1 1 0 . 0 1 0 0 0 0 0 0 en format Q7.8. La multiplication binaire donnera le résultat suivant sur 32 bits : ab = 0 0 0 1 1 1 1 0 1 0 1 . 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 en format Q9.21. On retrouve ainsi ab = 245.875. On ne stockera que les 9 bits de partie entière [bit29 … bit21] et les 6 bits les plus significatifs de la partie fractionnaire, i.e. [bit 20…bit 15] en format 16 bits Q9.6. Avec le bit de signe.

Au bout du compte, la précision que l'on pourra obtenir, en stockant le résultat sur 16 bits, sera : -512 < P < +511.984375.

DSP à virgule flottante

Sur un DSP à virgule flottante, les calculs sont transparents pour l'utilisateur. Les temps de développement sont réduits de façon conséquente. Les nombres sont codés sous la forme :

Signe Exposant Mantisse, généralement sur 32 à 40 bits.

Ainsi, la dynamique est bien meilleure ! Mais les opérations effectuées par les circuits (hardware) sont beaucoup plus complexes qu'avec un DSP à virgule fixe. Ceci implique que les DSP à virgule flottante sont vendus à des prix bien supérieurs aux fixes...

Les projets impliquant des DSP à virgule flottante nécessitent soit de grandes capacités de calcul, soit une grande précision, pour des volumes de production peu importants, ou des prix de ventes élevés. Les principaux consommateurs de DSP à virgule flottante sont les militaires et les grands systèmes de télécommunications.
 

Conseils de programmation -   


Voici quelques conseils de programmation de DSP :

Les DSP sont la plupart du temps impliqués dans des applications temps réel. Les programmes et les tâches doivent ainsi souvent être optimisés pour réduire les charges CPU...et, au besoin (marketing) ajouter le maximum de fonctionnalités.

Ainsi, le programmeur cherchera à réduire les instructions dans son programme, utilisant le minimum de périodes d'horloge.

Pour cela il évitera :

Il veillera à :

Eviter les tests et les branchements est certes difficile, mais il existe souvent des astuces permettant de ruser d'une façon habile. Par exemple, sur le Motorola 563xxx, l'instruction MOVE peut être conditionnée par le registre d'état, sans nécessiter de temps de cycle superflu.

Il reste que chaque DSP a sa propre philosophie, qu'il faut appréhender avec un peu de temps.

Sites consacrés aux DSP -   


Adaptyv: site consacré au traitement du signal

Un article remarquable de Laurent Battista