Brevet FR2802660A1 — publié le 20010622

PROCEDE POUR EFFECTUER DES OPERATIONS AVEC UNE ARITHMETIQUE VARIABLE L'invention concerne un procédé pour effectuer des opérations avec une arithmétique variable au sein d'un système de traitement de données. Plus particulièrement l'invention se rapporte à un procédé qui permet de s mettre en oeuvre une double arithmétique: des opérateurs initialement prévus pour effectuer des opérations sur des nombres de n bits peuvent être utilisés grâce au procédé selon l'invention pour effectuer ces mêmes opérations sur k bits, n et k étant to des entiers naturels tels que k est inférieur ou égal à n. Des opérateurs pouvant effectuer des opérations à partir d'opérandes dont le nombre de bits peut varier sont dits à arithmétique variable. Par exemple, un additionneur pouvant effectuer des additions entre des opérandes codées sur 16 bits ou entre des opérandes codées sur 24 bits est dit à double arithmétique: il est à la fois compatible avec une arithmétique 16 bits et avec une arithmétique 24 bits. Le domaine d'application de l'invention est celui du traitement numérique du signal. Des processeurs spécifiques appelés DSP (pour Digital Signal Processing dans la littérature anglaise) sont spécialement conçus pour le traitement numérique du signal. Les DSP sont plus particulièrement utilisés pour des fonctions particulières propres au traitement des signaux numériques, telles que le filtrage ou la comparaison de signaux. Dans certains systèmes de traitements des donnés, un DSP peut être associé avec un processeur- hôte plus puissant pour effectuer des opérations complexes de traitement du signal. Certaines opérations telles que les opérations de multiplication avec accumulation sont des opérations classiques effectuées par des DSP: ces opérations multiplient deux nombres binaires entre eux et ajoutent éventuellement un troisième nombre binaire au résultat de cette multiplication. Dans certains algorithmes de traitement numérique du signal, utilisés par exemple pour effectuer les calculs de transformation de fourier, ou pour modéliser des filtres à réponse impulsionelle finie, ou des filtres à réponse impulsionelle infinie, les opérations de multiplication avec accumulation des DSP sont très performantes. Certaines applications nécessitent une attention, une précision toute particulière notamment pour la réalisation d'opérations arithmétiques. Par exemple, la restitution d'un son dit de haute fidélité peut nécessiter des calculs faisant intervenir des nombres codés sur un nombre de bits plus important que pour les calculs nécessaires pour de simples transmissions vocales. L'augmentation du nombre de bits des nombres intervenant dans les calculs assure un degré de précision supérieur. A l'inverse, il existe d'autres applications faisant intervenir des opérations qui nécessitent des calculs faisant intervenir des nombres codés sur un nombre précis de bits; pour ce type d'opération, la possibilité de travailler avec des nombres assurant une meilleure précision grâce à un nombre de bits plus important n'est pas retenue. Parfois, cette possibilité est même exclue pour ces opérations. Par exemple il existe des standards de communication dans des systèmes de télécommunication cellulaire, tel que le standard GSM en Europe, qui imposent des nombres codés uniquement sur 16 bits et qui n'admettent pas de nombres codés sur plus de 16 bits même si cela permet d'atteindre un degré de précision supérieur. Par contre, de nombreuses et récentes applications multimédia dédiées au traitement numérique du signal exigent désormais un haut degré de précision, notamment dans la restitution des signaux audio, tout en ayant la capacité de se conformer au standard GSM pour pouvoir recevoir des télécommunications qui obéissent à ce standard. Un problème se pose donc: des opérateurs puissants, c'est à dire travaillant avec des nombres codés sur un grand nombre de bits, et des opérateurs moins puissants, qui doivent travailler avec des nombres codés sur un nombre de bits imposé par certaines normes, doivent coexister. Faire un choix entre ces deux types d'opérateurs, et donc entre deux arithmétiques différentes, n'est aujourd'hui plus concevable. Une solution serait de faire coexister au sein des DSP deux groupes d'opérateurs distincts, chacun des deux groupes fonctionnant avec une arithmétique différente. Mais cette solution est pénalisante en terme de coût et d'espace requis. Par ailleurs, l'utilisation de systèmes à arithmétiques multiples pose certains problèmes. En effet, dans le cas de figure o on effectue une opération entre deux nombres de k bits, il se peut que le résultat s'écrive sur k+1 bits. Dans le cas d'opérations fonctionnant avec une unique arithmétique, les k bits de poids faible sont écrits dans un registre de résultat. Le dernier bit, qui est le bit de poids le plus fort, est appelé retenue sortante. Pour certaines applications, la présence d'une retenue sortante dans le résultat d'une opération quelconque indique qu'une valeur de saturation a été atteinte, et que, par conséquent, le résultat contenu dans le registre de résultat n'est plus pris en compte. Il est donc important que le bit de retenue sortante ne soit pas écrit dans le registre de résultat. Les figures la, lb et lc illustrent le problème qui peut se poser. A la figure la, un additionneur 1 effectue une addition entre un premier nombre de 4 bits de valeur 1010, mémorisé dans un premier registre d'entrée 2 de 4 bits, et un deuxième nombre de 4 bits de valeur 0100, mémorisé dans un deuxième registre d'entrée 3 de 4 bits. Le résultat de l'addition, de io valeur 1110, est contenu dans un registre de résultat 4. Il n'y a pas de retenue sortante. A la figure lb, l'additionneur 1 effectue une addition entre un premier nombre de 4 bits de valeur 1010, mémorisé dans le premier registre d'entrée 2 de 4 bits, et un deuxième nombre de 4 bits de valeur 0111, mémorisé dans le deuxième registre d'entrée 3 de 4 bits. Le résultat de l'addition est 10001. Ce nombre est donc codé sur 5 bits. Les quatre bits de poids faibles de ce résultat sont contenus dans le registre de résultat 4. Le cinquième bit correspond à une retenue sortante 5. Sa présence active une unité de saturation au sein du circuit électronique régissant l'addition. Ainsi, par exemple, si le résultat de l'addition détermine l'intensité d'un volume sonore, c'est une valeur maximale prédéterminée qui sera émise. Les quatre bits de poids faible du résultat ne sont alors plus pris en compte. De la même manière, une valeur minimale prédéterminée peut exister dans le cas o le résultat d'une opération génère un bit de retenue sortante révélateur d'un résultat inférieur à ce qui peut être codé sur un nombre de bits établi. A la figure lc, l'additionneur 1 effectue une addition entre un premier nombre de 2 bits de valeur 10, mémorisé dans le premier registre d'entrée 2 de 4 bits, et un deuxième nombre de 2 bits de valeur 11, mémorisé dans le deuxième registre d'entrée 3 de 4 bits. Le résultat de l'addition est l101. Ce nombre est donc codé sur 3 bits, qui sont tous les trois contenus dans le registre de résultat de 4 bits. Or cette addition était une addition effectuée selon une arithmétique 2 bits à l'aide d'un additionneur 4 bits. En conséquence, le bit de poids fort du résultat, qui aurait du, selon l'arithmétique 2 bits, être la retenue sortante, est conservé dans le registre de résultat. Aucune unité de saturation n'est par conséquent activée. Ces illustrations simples permettent de mettre en évidence l'existence possible d'une retenue sortante, ainsi que le rôle qu'elle peut jouer, et le problème que pose l'utilisation d'une double arithmétique pour récupérer la retenue sortante. Le brevet américain US 5 598 362 propose un procédé qui met en oeuvre une double arithmétique avec un unique jeu d'opérateurs. Ainsi, dans ce brevet, des opérations faisant intervenir des nombres codés sur 16 bits ou sur 24 bits sont effectuées avec les mêmes opérateurs. Mais la solution proposée nécessite un alignement des nombres préalable à l'opération. Ainsi, par exemple, si on veut effectuer une addition de deux nombres de 4 bits à l'aide d'un additionneur initialement prévu pour additionner des nombres codés sur 8 bits, il faut respecter différentes étapes qui sont représentées aux figures 2a à 2d qui correspondent aux événements suivants: à la figure 2a, mémorisation d'un premier nombre de 4 bits de valeur 1010 dans un premier registre d'entrée 6 de 8 bits et mémorisation d'un deuxième nombre de 4 bits de valeur 0111 dans un deuxième registre d'entrée 7 de 8 bits; à la figure 2b, décalage du premier nombre de 4 bits vers les bits de poids fort du premier registre d'entrée 6 de 8 bits, et décalage du deuxième nombre de 4 bits vers les bits de poids fort du deuxième registre d'entrée 7 de 8 bits; à la figure 2c, exécution de l'addition à l'aide d'un additionneur 8 bits 8 et mémorisation du résultat obtenu de valeur 10001 dans un registre de résultat 9; une retenue sortante 10 est obtenue dans cet exemple; à la figure 2d, décalage des 4 bits de poids fort du résultat obtenu vers les bits de poids faible d'un registre de résultat 9 de 8 bits qui contient le résultat de l'addition. On obtient ainsi le résultat de l'addition des deux nombres sur 4 bits effectuée à l'aide d'un additionneur de 8 bits. Les différentes opérations de décalage sont nécessaire pour récupérer une éventuelle retenue sortante 10 qui peut ainsi être interprétée lors de l'exécution de l'addition. La retenue sortante est transmise à une unité de saturation qui permet d'obtenir un résultat correct. Mais toutes ces opérations de décalage nécessaires pour effectuer la moindre opération sont très coûteuses en terme de temps de réalisation de l'opération. Le procédé selon l'invention permet de pallier les différents défauts et inconvénients qui viennent d'être décrits. Le procédé selon l'invention met en oeuvre des moyens pour effectuer des opérations avec une arithmétique variable qui ne nécessite aucune opération de décalage des données d'entrée de l'opérateur. Par exemple, pour effectuer une addition de deux nombres codés sur 4 bits à l'aide d'un additionneur 8 bits, il n'est pas nécessaire de décaler les 4 bits des deux nombres vers les bits de poids fort des registres d'entrées de l'opérateur. Le résultat de l'addition obtenu est par ailleurs directement écrit dans les bits de poids faible du registre contenant le résultat de l'addition. En outre, le procédé selon l'invention met en oeuvre des moyens pour récupérer une éventuelle retenue qui peut activer une unité de saturation du DSP. L'invention concerne donc un procédé pour effectuer des opérations avec une arithmétique variable au sein d'un système de traitement de données caractérisé en ce qu'il comporte des étapes consistant à: - mémoriser une première opérande de k bits dans un premier registre d'entrée de n bits; mémoriser une deuxième opérande de k bits dans un deuxième registre d'entrée de n bits; - compléter les n-k bits de chaque registre d'entrée avec des séquences de bits assurant, dans un registre de résultat contenant le résultat de l'opération, une propagation d'un éventuel bit de retenue sortante pour récupérer ladite retenue sortante en sortie du registre de résultat; - exécuter l'opération. Selon un mode de mise en oeuvre préféré de l'invention, les séquences de bits assurant la propagation de l'éventuel bit de retenue sortante sont spécifiques à chaque opérateur. Ces séquences peuvent également être représentatives de l'arithmétique selon laquelle l'opération est exécutée. Selon un mode de mise en oeuvre particulier du procédé selon l'invention, les n-k bits de poids fort du registre de résultat contenant le résultat de l'opération sont mis à zéro. Les différents aspects et avantages de la présente invention seront mieux compris à la lecture de la suite de la description en référence aux figures qui ne sont données qu'à titre indicatif et nullement limitatif, et qui sont à présent introduites: -les figures la à lc, déjà décrites, illustrent l'existence possible d'une retenue sortante et les problèmes de récupération de cette dernière dans le cas d'un système fonctionnant selon plusieurs arithmétiques; -les figures 2a à 2d, déjà décrites, illustrent un procédé existant pour récupérer une retenue sortante dans le cas d'un système fonctionnant selon plusieurs arithmétiques; -les figures 3a à 3c illustrent le procédé selon l'invention pour effectuer des opérations dans le cas d'un système fonctionnant selon plusieurs arithmétiques; La suite de la description fera référence essentiellement à des opérations d'addition réalisées selon une double arithmétique 4 bits/8 bits. Il est cependant évident que le procédé selon l'invention peut s'appliquer à des opérations autres que l'addition et dans des arithmétiques différentes. Les figures 3a à 3c sont illustrées dans le cadre de l'addition déjà décrite dans les figures 2a à 2d, c'est à dire dans le cadre d'une addition entre un premier nombre codé sur 4 bits de valeur 1010 et un deuxième nombre codé sur 4 bits de valeur 0111. A la figure 3a, le premier nombre est mémorisé dans le premier registre d'entrée 6 de 8 bits, et le deuxième nombre est mémorisé dans le deuxième registre d'entrée 7 de 8 bits. Les deux nombres occupent les 4 bits de poids faible des deux registres. Chaque registre d'entrée se décompose ainsi en deux parties: une première partie 11 et 12, correspondant aux bits de poids faible respectivement du premier registre d'entrée 6 et du deuxième registre d'entrée 7, contient les nombres à additionner au moyen de l'additionneur 8 cette partie est dite partie utile. Une deuxième partie 13 et 14, correspondant aux bits de poids fort respectivement du premier registre d'entrée 6 et du deuxième registre d'entrée 7, est une zone qui ne sert pas à mémoriser les deux nombres à additionner; cette partie est dite partie vide. A la figure 3b, les parties vides 13 et 14 des deux registres d'entrée sont complétées avec des séquences de nombres. Ainsi la partie vide du premier registre d'entrée est complétée avec la séquence 0000 et la partie vide du deuxième registre d'entrée est complétée avec la séquence 1111. A la figure 3c, l'addition entre les deux nombres contenus dans les deux registres d'entrées est effectuée. Le résultat est obtenu dans le registre de résultat 9. Le registre de résultat 9 a une taille de 8 bits et il est complété par un registre de retenue 10 de 1 bit. Dans cet exemple, les 4 bits de poids faible du registre de résultat 9 ont pour valeur 0001. Les 4 bits de poids fort du registre de résultat ont la valeur 0000. Le registre de retenue prend la valeur 1. Ceci signifie qu'une retenue sortante doit être prise en compte par le circuit régissant l'addition. La présence d'une retenue sortante indique que la grandeur associée au résultat de l'addition adoptera une valeur de saturation. Le résultat de l'addition contenu dans le registre de résultat 9 n'est alors plus important en lui-même. Cependant, dans le cas ou aucune retenue sortante n'est obtenue, le résultat de l'addition contenu dans le registre de résultat peut directement se lire dans les quatre bits de poids faible du registre de résultat. On remarque ainsi qu'aucune opération de décalage n'est nécessaire pour obtenir le résultat de l'opération effectuée. Une propagation 15 de la retenue sortante est assurée grâce aux séquences de nombres choisies pour compléter les parties vides 13 et 14 des premiers et deuxièmes registres d'entrée 4. Dans certaines applications de l'invention, le résultat de l'opération peut être directement lu sur l'ensemble des bits du registre de résultat 9. A cet effet, des bits de poids fort du registre de résultat 9 sont mis à zéro. Ces bits sont ceux qui correspondent aux parties vides des registres d'entrée. Ainsi, par exemple, si on effectue une opération entre plusieurs opérandes de 16 bits contenues dans des registres de 24 bits, ce sont les 8 bits (24-16=8) de poids fort du registre de résultat qui sont mis à 0. Le résultat obtenu sur la totalité du registre de résultat est ainsi indépendant des séquences de nombres ajoutées dans les parties vides 13 et 14 des deux registres d'entrée. Le procédé qui vient d'être décrit est évidemment généralisable à toute autre opération arithmétique. Lorsque d'autres opérations que l'addition sont effectuées, des séquences de nombres appropriées sont écrites dans les parties vides des registres d'entrée, afin d'assurer une propagation de la retenue sortante pour la récupérer en sortie du registre de résultat. Le nombre de bits des registres d'entrée peut également être variable sans pour autant contrarier la mise en oeuvre du procédé selon l'invention. Pour des registres d'entrée de taille fixée, les parties vides à compléter par des séquences de nombres peuvent également être de taille variable. Ainsi, avec des registres d'entrée de 24 bits, on peut faire des opérations entre nombres de 8, 12, 16,... bits. l1 Selon une mise en oeuvre particulière du procédé selon l'invention, les séquences de bits qui complètent les parties vides des registres d'entrée peuvent être significatives de l'arithmétique avec laquelle l'opération est effectuée, tout en assurant dans tous les cas une propagation de l'éventuelle retenue sortante dans le registre de résultat. On a vu dans l'exemple décrit aux figures 3a à 3c que pour additionner deux nombres de quatre bits contenus dans des registres de 8 bits, la partie vide 13 du premier registre d'entrée 6 est complétée par la séquence 0000, et que la partie vide 14 du deuxième registre d'entrée 7 est complétée par la séquence 1111. Pour effectuer une addition entre deux nombres de 6 bits contenus dans les registres d'entrée 6 et 7 de 8 bits, les deux bits de la partie vide 13 peuvent être complétés par exemple par la séquence 01 et les deux bits de la partie vide 14 peuvent être complétés par la séquence 10. La propagation de l'éventuelle retenue sortante est alors également assurée. La possibilité de compléter, pour un même opérateur, les parties vides des registres d'entrée par des séquences qui n'ont pas nécessairement la même structure peut être exploitée par exemple par des systèmes de détection d'erreur. REVENDICATIONS 1. Procédé pour effectuer des opérations avec une arithmétique variable au sein d'un système de traitement de données caractérisé en ce qu'il comporte les étapes consistant à: - mémoriser une première opérande de k bits dans un premier registre d'entrée (6) de n bits; - mémoriser une deuxième opérande de k bits dans un deuxième registre d'entrée (7) de n bits; - compléter les n-k bits de chaque registre d'entrée avec des séquences de bits assurant, dans un registre de résultat (9) contenant le résultat de l'opération, une propagation (15) d'un éventuel bit de retenue sortante (10) pour récupérer ladite retenue sortante (10) en sortie du registre de résultat (9); - exécuter l'opération. 2. Procédé pour effectuer des opérations avec une arithmétique variable au sein d'un système de traitement de données selon la revendication 1 caractérisé en ce que les séquences de bits assurant la propagation de l'éventuel bit de retenue sortante (10) sont spécifiques à chaque opérateur. 3. Procédé pour effectuer des opérations avec une arithmétique variable au sein d'un système de traitement de données selon l'une des revendications précédentes caractérisé en ce que les séquences de bits assurant la propagation de l'éventuel bit de retenue sortante sont représentatives de l'arithmétique selon laquelle l'opération est exécutée. 4. Procédé pour effectuer des opérations avec une arithmétique variable au sein d'un système de traitement de données selon l'une des revendications précédentes caractérisé en ce que les n-k bits de poids fort du registre de résultat (9) contenant le résultat de l'opération sont mis à zéro.